SET(SURVIVE_LIBRARY_TYPE SHARED) if(BUILD_STATIC) SET(SURVIVE_LIBRARY_TYPE STATIC) add_definitions(-DSURVIVE_DISABLE_PLUGINS) endif() list (APPEND CMAKE_REQUIRED_DEFINITIONS -D_GNU_SOURCE) check_symbol_exists (fopencookie stdio.h HAVE_FOPENCOOKIE) if(HAVE_FOPENCOOKIE) add_definitions(-DHAVE_FOPENCOOKIE) endif() cnkalman_generate_code(./generated/common_math.py) cnkalman_generate_code(./generated/kalman_kinematics.py) cnkalman_generate_code(./generated/lighthouse_model.py) cnkalman_generate_code(./generated/imu_model.py) SET(SURVIVE_SRCS ${SURVIVE_SRCS} ootx_decoder.c poser.c poser_general_optimizer.c survive.c survive_buildinfo.c survive_api.c survive_config.c survive_default_devices.c survive_disambiguator.c survive_driverman.c survive_kalman_tracker.c ./generated/kalman_kinematics.gen.h ./generated/lighthouse_model.gen.h ./generated/imu_model.gen.h ./generated/common_math.gen.h survive_optimizer.c survive_recording.c survive_plugins.c survive_process.c survive_process_gen2.c survive_sensor_activations.c survive_kalman_lighthouses.c survive_kalman_lighthouses.h barycentric_svd/barycentric_svd.c survive_reproject_gen2.c survive_process_gen1.c survive_reproject.c lfsr.c lfsr_lh2.c survive_str.h survive_str.c test_cases/str.c survive_async_optimizer.c ../redist/linmath.c ../redist/puff.c ../redist/symbol_enumerator.c ../redist/jsmn.c ../redist/json_helpers.c ../redist/crc32.c ) if(USE_HIDAPI) add_definitions (-DHIDAPI) IF(WIN32) SET(SURVIVE_SRCS ${SURVIVE_SRCS} ../redist/hid-windows.c) else() list(APPEND ADDITIONAL_LIBRARIES udev hidapi-libusb) endif() endif() IF(WIN32) SET(SURVIVE_SRCS ${SURVIVE_SRCS} ../winbuild/getdelim.c) endif() IF(EXISTS ${CMAKE_SOURCE_DIR}/VERSION) file(READ ${CMAKE_SOURCE_DIR}/VERSION GIT_VERSION_NL) string(STRIP "${GIT_VERSION_NL}" GIT_VERSION) ELSE() execute_process(COMMAND git describe --dirty --tags WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} OUTPUT_VARIABLE GIT_VERSION OUTPUT_STRIP_TRAILING_WHITESPACE ERROR_QUIET) ENDIF() set_property(SOURCE survive_buildinfo.c PROPERTY COMPILE_DEFINITIONS GIT_VERSION="${GIT_VERSION}") add_library(survive ${SURVIVE_LIBRARY_TYPE} ${SURVIVE_SRCS}) #find_package (Python3 COMPONENTS Interpreter Development) #find_package(PythonExtensions REQUIRED) #python_extension_module(survive) set_target_properties(survive PROPERTIES FOLDER "libraries" SOVERSION ${PROJECT_VERSION_MAJOR} VERSION ${PROJECT_VERSION}) set_target_properties(survive PROPERTIES LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}") set_target_properties(survive PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}") if(WIN32) set_target_properties(survive PROPERTIES PREFIX "lib") endif() target_link_libraries(survive ${ADDITIONAL_LIBRARIES} mpfit cnkalman) IF(HAVE_ZLIB_H) target_link_libraries(survive z) ENDIF() IF(Threads_FOUND) target_link_libraries(survive ${CMAKE_THREAD_LIBS_INIT} Threads::Threads) endif() if(NOT BUILD_STATIC) target_link_libraries(survive ${CMAKE_DL_LIBS}) endif() IF(NOT WIN32) target_link_libraries(survive m ) else() set_target_properties( survive PROPERTIES VS_USER_PROPS "$(SolutionDir)\\packages\\OpenBLAS.0.2.14.1\\build\\native\\openblas.targets" ) target_link_libraries(survive DbgHelp SetupAPI) endif() SET(PLUGINS driver_dummy driver_vive driver_simulator driver_playback disambiguator_statebased poser_dummy poser_mpfit poser_kalman_only poser_barycentric_svd driver_global_scene_solver ) if(BUILD_GATT_SUPPORT) LIST(APPEND PLUGINS driver_gatt) set(driver_gatt_ADDITIONAL_LIBS gattlib) endif() if(APPLE) execute_process(COMMAND brew --prefix libusb OUTPUT_VARIABLE LIBUSB_PREFIX OUTPUT_STRIP_TRAILING_WHITESPACE) include_directories(${LIBUSB_PREFIX}/include) link_directories(${LIBUSB_PREFIX}/lib) message("Adding ${LIBUSB_PREFIX}/include to include directories") endif() find_library(LIBUSB_LIBRARY NAMES usb-1.0 libusb-1.0) IF(WIN32) set(packages_config "") file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/packages.config ${packages_config}) set(driver_vive_ADDITIONAL_SRCS ${driver_vive_ADDITIONAL_SRCS} ${CMAKE_CURRENT_BINARY_DIR}/packages.config) include_directories("${CMAKE_BINARY_DIR}/packages/libusb.1.0.21/src/include") SET(LIBUSB_LIBRARY "${CMAKE_BINARY_DIR}/packages/libusb.1.0.21/lib/native/${WIN_PLATFORMx}/libusb-1.0.lib") endif() IF(NOT WIN32) LIST(APPEND PLUGINS driver_udp) ENDIF() IF(NOT USE_HIDAPI) check_include_file(libusb.h LIBUSB_NO_DIR) check_include_file(libusb-1.0/libusb.h LIBUSB_VER) check_include_file(libusb/libusb.h LIBUSB_NO_VER) if(LIBUSB_NO_DIR) message("Using no dir in libusb path") add_definitions(-DSURVIVE_LIBUSB_NO_DIR) elseif(LIBUSB_VER) message("Using versioned libusb dir") add_definitions(-DSURVIVE_LIBUSB_VER_DIR) elseif(LIBUSB_NO_VER) message("Using non-versioned libusb dir") add_definitions(-DSURVIVE_LIBUSB_UNVER_DIR) endif() set(driver_vive_ADDITIONAL_LIBS ${LIBUSB_LIBRARY}) find_library(PCAP_LIBRARY pcap) if(PCAP_LIBRARY) list(APPEND PLUGINS driver_usbmon) find_path(PCAP_INCLUDE_PATH NAMES pcap.h) if(PCAP_INCLUDE_PATH) include_directories(${PCAP_INCLUDE_PATH}) endif() set(driver_usbmon_ADDITIONAL_LIBS "${PCAP_LIBRARY};z" driver_vive) else() message("Can't build usbmon plugin -- pcap library was not found") endif() endif() set(poser_barycentric_svd_ADDITIONAL_SRCS barycentric_svd/barycentric_svd.c ) add_custom_target(survive_plugins) if(OPENVR_LIBRARIES AND NOT USE_SINGLE_PRECISION) include_directories(redist include/libsurvive include ${OPENVR_INCLUDE_PATH}) LIST(APPEND PLUGINS driver_openvr) set(driver_openvr_ADDITIONAL_LIBS ${OPENVR_LIBRARIES}) endif() set_property(GLOBAL PROPERTY USE_FOLDERS ON) set(SURVIVE_BUILT_PLUGINS) if(WIN32) SET(LIB_INSTALL_DIR "bin/${CMAKE_GENERATOR_PLATFORM}/" CACHE STRING "") else() SET(LIB_INSTALL_DIR "lib/" CACHE STRING "") endif() function(SURVIVE_REGISTER_PLUGIN PLUGIN) IF(NOT TARGET ${PLUGIN}) SET(SRC ${PLUGIN}.c) if(NOT EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${SRC}) SET(SRC ${PLUGIN}.cc) endif() add_library(${PLUGIN} ${SURVIVE_LIBRARY_TYPE} ${SRC} ${${PLUGIN}_ADDITIONAL_SRCS}) target_link_libraries(${PLUGIN} survive ${${PLUGIN}_ADDITIONAL_LIBS}) set_target_properties(${PLUGIN} PROPERTIES INSTALL_RPATH "$ORIGIN/../..;$ORIGIN") ENDIF() target_link_libraries(${PLUGIN} survive) list(APPEND SURVIVE_BUILT_PLUGINS ${PLUGIN}) set(SURVIVE_BUILT_PLUGINS "${SURVIVE_BUILT_PLUGINS}" PARENT_SCOPE) add_dependencies(survive_plugins ${PLUGIN}) STRING(REGEX REPLACE "(.*)\_.*" "\\1" plugin_type "${PLUGIN}") if(plugin_type) set_target_properties(${PLUGIN} PROPERTIES FOLDER "${plugin_type}") endif() set(OUTPUT_DIR "$/")#set(OUTPUT_DIR "${survive_location}") if(NOT BUILD_STATIC) set_target_properties(${PLUGIN} PROPERTIES PREFIX "") endif() set(PLUGIN_SUFFIX "plugins") set_target_properties(${PLUGIN} PROPERTIES LIBRARY_OUTPUT_DIRECTORY "${OUTPUT_DIR}${PLUGIN_SUFFIX}") set_target_properties(${PLUGIN} PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${OUTPUT_DIR}${PLUGIN_SUFFIX}") #set_target_properties(${PLUGIN} PROPERTIES RUNTIME_OUTPUT_DIRECTORY_DEBUG "${OUTPUT_DIR}Debug/plugins") #set_target_properties(${PLUGIN} PROPERTIES RUNTIME_OUTPUT_DIRECTORY_RELEASE "${OUTPUT_DIR}Release/plugins") #set_target_properties(${PLUGIN} PROPERTIES RUNTIME_OUTPUT_DIRECTORY_RELWITHDEBINFO "${OUTPUT_DIR}RelWithDebInfo/plugins") install(TARGETS ${PLUGIN} DESTINATION ${LIB_INSTALL_DIR}libsurvive/${PLUGIN_SUFFIX}) endfunction() foreach(PLUGIN ${PLUGINS}) VERBOSE_OPTION(ENABLE_${PLUGIN} "Build ${PLUGIN}" ${NOT_CORE_BUILD}) if(ENABLE_${PLUGIN}) SURVIVE_REGISTER_PLUGIN(${PLUGIN}) endif() endforeach() IF(TARGET CNGFX) list(APPEND SURVIVE_EXECUTABLES simple_pose_test) set(simple_pose_test_ADDITIONAL_LIBS CNGFX) endif() IF (ENABLE_TESTS) add_subdirectory(test_cases) ENDIF() set(SURVIVE_BUILT_PLUGINS "${SURVIVE_BUILT_PLUGINS}" PARENT_SCOPE) install(TARGETS ${SURVIVE_BUILT_PLUGINS} DESTINATION ${LIB_INSTALL_DIR}libsurvive/plugins) install(TARGETS survive DESTINATION ${LIB_INSTALL_DIR}) if(WIN32) if(NOT USE_HIDAPI) cmake_policy(SET CMP0087 NEW) install(CODE "set(CMAKE_GENERATOR_PLATFORM \"${CMAKE_GENERATOR_PLATFORM}\")") install(CODE "set(LIB_INSTALL_DIR \"${LIB_INSTALL_DIR}\")") install(CODE "set(WIN_PLATFORMx \"${WIN_PLATFORMx}\")") install(CODE [[ file(GET_RUNTIME_DEPENDENCIES LIBRARIES $ $ RESOLVED_DEPENDENCIES_VAR _r_deps UNRESOLVED_DEPENDENCIES_VAR _u_deps POST_EXCLUDE_REGEXES ".*[Ww][Ii][Nn][Dd][Oo][Ww][Ss][/\\][Ss]ystem32.*" DIRECTORIES ${CMAKE_BINARY_DIR}/packages/libusb.1.0.21/lib/native/${WIN_PLATFORMx}/ ) message("Resolved: ${_r_deps} unresolved: ${_u_deps}") foreach(_file ${_r_deps}) file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/${LIB_INSTALL_DIR}" TYPE SHARED_LIBRARY FILES "${_file}" ) endforeach() ]]) endif() endif()