From a709a89b27b41dfb24b71cbfc08c11fdbe95436b Mon Sep 17 00:00:00 2001 From: Aaron Bray <aaron.bray@kitware.com> Date: Tue, 24 Mar 2020 21:46:21 -0400 Subject: [PATCH] Cmake updates for proper generation of iMSTKConfig.cmake --- CMake/External/CMakeLists.txt | 13 +- CMake/External/External_Assimp.cmake | 2 +- CMake/External/External_Eigen3.cmake | 7 +- CMake/External/External_FTD2XX.cmake | 2 +- ..._GoogleTest.cmake => External_GTest.cmake} | 6 +- CMake/External/External_LibNiFalcon.cmake | 2 +- CMake/External/External_Libusb.cmake | 2 +- CMake/External/External_OpenHaptics.cmake | 2 +- CMake/External/External_PThreads.cmake | 2 +- CMake/External/External_SCCD.cmake | 2 +- CMake/External/External_SFML.cmake | 2 +- CMake/External/External_VRPN.cmake | 2 +- CMake/External/External_VTK.cmake | 6 +- CMake/External/External_VegaFEM.cmake | 7 +- CMake/External/External_Vulkan.cmake | 2 +- CMake/External/External_g3log.cmake | 2 +- CMake/External/External_glfw.cmake | 2 +- CMake/External/External_gli.cmake | 2 +- CMake/External/External_glm.cmake | 2 +- CMake/External/External_imgui.cmake | 2 +- CMake/External/External_openvr.cmake | 3 +- CMake/External/External_tbb.cmake | 2 +- CMake/FindGoogleMock.cmake | 12 -- CMake/FindGoogleTest.cmake | 13 -- CMake/Findglm.cmake | 9 -- CMake/Utilities/imstkAddExecutable.cmake | 2 +- CMake/Utilities/imstkAddLibrary.cmake | 14 +- CMake/Utilities/imstkAddTest.cmake | 4 +- CMake/Utilities/imstkFind.cmake | 13 +- CMakeLists.txt | 103 +++++++----- iMSTKConfig.cmake.in | 152 +++++++++++------- 31 files changed, 220 insertions(+), 176 deletions(-) rename CMake/External/{External_GoogleTest.cmake => External_GTest.cmake} (74%) delete mode 100644 CMake/FindGoogleMock.cmake delete mode 100644 CMake/FindGoogleTest.cmake delete mode 100644 CMake/Findglm.cmake diff --git a/CMake/External/CMakeLists.txt b/CMake/External/CMakeLists.txt index f800cd99a..f668d532d 100644 --- a/CMake/External/CMakeLists.txt +++ b/CMake/External/CMakeLists.txt @@ -91,16 +91,21 @@ ExternalProject_Add( ${PROJECT_NAME} BINARY_DIR ${CMAKE_BINARY_DIR}/Innerbuild ${COMMON_CMAKE_EP_ARGS} CMAKE_ARGS - -DEigen3_DIR:PATH=${Eigen3_DIR} - -DVTK_DIR:PATH=${VTK_DIR} + -D${PROJECT_NAME}_SUPERBUILD:BOOL=OFF -D${PROJECT_NAME}_BUILD_EXAMPLES:BOOL=${${PROJECT_NAME}_BUILD_EXAMPLES} -D${PROJECT_NAME}_BUILD_TESTING:BOOL=${${PROJECT_NAME}_BUILD_TESTING} - -DPHYSX_CONFIGURATION:STRING=${${PROJECT_NAME}_PHYSX_CONFIGURATION} - -D${PROJECT_NAME}_SUPERBUILD:BOOL=OFF -D${PROJECT_NAME}_USE_OpenHaptics:BOOL=${${PROJECT_NAME}_USE_OpenHaptics} -D${PROJECT_NAME}_USE_Vulkan:BOOL=${${PROJECT_NAME}_USE_Vulkan} -D${PROJECT_NAME}_ENABLE_AUDIO:BOOL=${${PROJECT_NAME}_ENABLE_AUDIO} -D${PROJECT_NAME}_ENABLE_VR:BOOL=${${PROJECT_NAME}_ENABLE_VR} + # External Libraries + -DEigen3_DIR:PATH=${Eigen3_DIR} + -Dglm_DIR:PATH=${glm_DIR} + -DGTest_DIR:PATH=${GTest_DIR} + -DVegaFEM_DIR:PATH=${VegaFEM_DIR} + -DVTK_DIR:PATH=${VTK_DIR} + # I don't think this is needed by the inner build + # -DPHYSX_CONFIGURATION:STRING=${${PROJECT_NAME}_PHYSX_CONFIGURATION} DEPENDS ${${PROJECT_NAME}_DEPENDENCIES} PATCH_COMMAND COMMAND ${VTK_PATCH_COMMAND} diff --git a/CMake/External/External_Assimp.cmake b/CMake/External/External_Assimp.cmake index a4a6ee1a9..aaca9c075 100644 --- a/CMake/External/External_Assimp.cmake +++ b/CMake/External/External_Assimp.cmake @@ -14,4 +14,4 @@ imstk_add_external_project( Assimp RELATIVE_INCLUDE_PATH "include" #DEPENDENCIES "" #VERBOSE - ) \ No newline at end of file +) diff --git a/CMake/External/External_Eigen3.cmake b/CMake/External/External_Eigen3.cmake index cf37a35d6..f86d8b8f7 100644 --- a/CMake/External/External_Eigen3.cmake +++ b/CMake/External/External_Eigen3.cmake @@ -10,5 +10,8 @@ imstk_add_external_project( Eigen3 RELATIVE_INCLUDE_PATH "" DEPENDENCIES "" #VERBOSE - ) -set(Eigen3_DIR ${PhysX_INSTALL_DIR}/install/share/eigen3/cmake) \ No newline at end of file +) +if(NOT USE_SYSTEM_Eigen3) + set(Eigen3_DIR ${CMAKE_INSTALL_PREFIX}/share/eigen3/cmake) + #message(STATUS "Eigen3_DIR : ${Eigen3_DIR}") +endif() diff --git a/CMake/External/External_FTD2XX.cmake b/CMake/External/External_FTD2XX.cmake index 0de1d0f1b..533ad866d 100644 --- a/CMake/External/External_FTD2XX.cmake +++ b/CMake/External/External_FTD2XX.cmake @@ -53,4 +53,4 @@ imstk_add_external_project( FTD2XX COMMAND ${copy_ftd2xx_dll_command} RELATIVE_INCLUDE_PATH "/" #VERBOSE - ) +) diff --git a/CMake/External/External_GoogleTest.cmake b/CMake/External/External_GTest.cmake similarity index 74% rename from CMake/External/External_GoogleTest.cmake rename to CMake/External/External_GTest.cmake index 5f306e963..1376e836a 100644 --- a/CMake/External/External_GoogleTest.cmake +++ b/CMake/External/External_GTest.cmake @@ -2,7 +2,7 @@ # Add External Project #----------------------------------------------------------------------------- include(imstkAddExternalProject) -imstk_add_external_project( GoogleTest +imstk_add_external_project( GTest URL https://github.com/google/googletest/archive/release-1.10.0.zip URL_MD5 82358affdd7ab94854c8ee73a180fc53 CMAKE_CACHE_ARGS @@ -13,3 +13,7 @@ imstk_add_external_project( GoogleTest RELATIVE_INCLUDE_PATH "" #VERBOSE ) +if(NOT USE_SYSTEM_GTest) + set(GTest_DIR ${CMAKE_INSTALL_PREFIX}/lib/cmake/GTest) + message(STATUS "GTest_DIR : ${GTest_DIR}") +endif() diff --git a/CMake/External/External_LibNiFalcon.cmake b/CMake/External/External_LibNiFalcon.cmake index 1c4e34344..2d8a7b06d 100644 --- a/CMake/External/External_LibNiFalcon.cmake +++ b/CMake/External/External_LibNiFalcon.cmake @@ -18,4 +18,4 @@ imstk_add_external_project( LibNiFalcon DEPENDENCIES ${LIBNIFALCON_DEPENDENCIES} RELATIVE_INCLUDE_PATH "include/ftd2xx" #VERBOSE - ) \ No newline at end of file +) diff --git a/CMake/External/External_Libusb.cmake b/CMake/External/External_Libusb.cmake index 70cfe21be..047f5a0c3 100644 --- a/CMake/External/External_Libusb.cmake +++ b/CMake/External/External_Libusb.cmake @@ -53,4 +53,4 @@ imstk_add_external_project( Libusb COMMAND ${copy_libusb_dll_command} RELATIVE_INCLUDE_PATH "include/libusb-1.0" #VERBOSE - ) +) diff --git a/CMake/External/External_OpenHaptics.cmake b/CMake/External/External_OpenHaptics.cmake index 9f5dc72fc..d7cd1dcdc 100644 --- a/CMake/External/External_OpenHaptics.cmake +++ b/CMake/External/External_OpenHaptics.cmake @@ -46,4 +46,4 @@ imstk_add_external_project( OpenHaptics COMMAND ${CMAKE_COMMAND} -E copy ${open_haptics_util_libs_dir}/hlu.${lib_ext} ${open_haptics_libs_dest} RELATIVE_INCLUDE_PATH "/" #VERBOSE - ) +) diff --git a/CMake/External/External_PThreads.cmake b/CMake/External/External_PThreads.cmake index e44e2eeed..328630d21 100644 --- a/CMake/External/External_PThreads.cmake +++ b/CMake/External/External_PThreads.cmake @@ -11,4 +11,4 @@ imstk_add_external_project( PThreads RELATIVE_INCLUDE_PATH "include" DEPENDENCIES "" #VERBOSE - ) \ No newline at end of file +) diff --git a/CMake/External/External_SCCD.cmake b/CMake/External/External_SCCD.cmake index 622efe0a3..8eeb8e9c5 100644 --- a/CMake/External/External_SCCD.cmake +++ b/CMake/External/External_SCCD.cmake @@ -40,4 +40,4 @@ imstk_add_external_project( SCCD DEPENDENCIES Eigen3 #VERBOSE - ) +) diff --git a/CMake/External/External_SFML.cmake b/CMake/External/External_SFML.cmake index 0cfc452f7..fd54e7fba 100644 --- a/CMake/External/External_SFML.cmake +++ b/CMake/External/External_SFML.cmake @@ -15,4 +15,4 @@ imstk_add_external_project( SFML #DEPENDENCIES "" #RELATIVE_INCLUDE_PATH "" #VERBOSE - ) \ No newline at end of file +) diff --git a/CMake/External/External_VRPN.cmake b/CMake/External/External_VRPN.cmake index ee0b1aa3c..021fcf912 100644 --- a/CMake/External/External_VRPN.cmake +++ b/CMake/External/External_VRPN.cmake @@ -55,4 +55,4 @@ imstk_add_external_project( VRPN DEPENDENCIES ${VRPN_DEPENDENCIES} RELATIVE_INCLUDE_PATH "" #VERBOSE - ) +) diff --git a/CMake/External/External_VTK.cmake b/CMake/External/External_VTK.cmake index 33f260d5c..694102835 100644 --- a/CMake/External/External_VTK.cmake +++ b/CMake/External/External_VTK.cmake @@ -89,4 +89,8 @@ imstk_add_external_project( VTK DEPENDENCIES ${VTK_DEPENDENCIES} RELATIVE_INCLUDE_PATH "" #VERBOSE - ) +) +if(NOT USE_SYSTEM_VTK) + set(VTK_DIR ${CMAKE_INSTALL_PREFIX}/lib/cmake/vtk-8.2) + message(STATUS "VTK_DIR : ${VTK_DIR}") +endif() diff --git a/CMake/External/External_VegaFEM.cmake b/CMake/External/External_VegaFEM.cmake index 386cbdcdc..7165effa2 100644 --- a/CMake/External/External_VegaFEM.cmake +++ b/CMake/External/External_VegaFEM.cmake @@ -18,4 +18,9 @@ imstk_add_external_project( VegaFEM DEPENDENCIES ${VegaFEM_DEPENDENCIES} RELATIVE_INCLUDE_PATH "" #VERBOSE - ) +) +if(NOT USE_SYSTEM_VegaFEM) + set(VegaFEM_DIR ${CMAKE_INSTALL_PREFIX}/lib/cmake/VegaFEM) + message(STATUS "VegaFEM_DIR : ${VegaFEM_DIR}") +endif() + diff --git a/CMake/External/External_Vulkan.cmake b/CMake/External/External_Vulkan.cmake index 617fc84dd..bd69429f5 100644 --- a/CMake/External/External_Vulkan.cmake +++ b/CMake/External/External_Vulkan.cmake @@ -34,4 +34,4 @@ imstk_add_external_project( Vulkan COMMAND ${CMAKE_COMMAND} -E copy_directory ${vulkan_bin_dir} ${vulkan_bin_dest} RELATIVE_INCLUDE_PATH "/" #VERBOSE - ) +) diff --git a/CMake/External/External_g3log.cmake b/CMake/External/External_g3log.cmake index d3e66c75c..7c4766a3b 100644 --- a/CMake/External/External_g3log.cmake +++ b/CMake/External/External_g3log.cmake @@ -32,4 +32,4 @@ imstk_add_external_project( g3log RELATIVE_INCLUDE_PATH "src" DEPENDENCIES "" #VERBOSE - ) +) diff --git a/CMake/External/External_glfw.cmake b/CMake/External/External_glfw.cmake index 0425b4414..ee9acff81 100644 --- a/CMake/External/External_glfw.cmake +++ b/CMake/External/External_glfw.cmake @@ -12,4 +12,4 @@ imstk_add_external_project( glfw RELATIVE_INCLUDE_PATH "" DEPENDENCIES "" #VERBOSE - ) +) diff --git a/CMake/External/External_gli.cmake b/CMake/External/External_gli.cmake index 0027d3916..04c14650e 100644 --- a/CMake/External/External_gli.cmake +++ b/CMake/External/External_gli.cmake @@ -8,4 +8,4 @@ imstk_add_external_project( gli RELATIVE_INCLUDE_PATH "" DEPENDENCIES "" #VERBOSE - ) +) diff --git a/CMake/External/External_glm.cmake b/CMake/External/External_glm.cmake index 29089bcb5..c371bc4f9 100644 --- a/CMake/External/External_glm.cmake +++ b/CMake/External/External_glm.cmake @@ -8,4 +8,4 @@ imstk_add_external_project( glm RELATIVE_INCLUDE_PATH "" DEPENDENCIES "" #VERBOSE - ) +) diff --git a/CMake/External/External_imgui.cmake b/CMake/External/External_imgui.cmake index 8c3f484de..e2ca532eb 100644 --- a/CMake/External/External_imgui.cmake +++ b/CMake/External/External_imgui.cmake @@ -31,4 +31,4 @@ imstk_add_external_project( imgui RELATIVE_INCLUDE_PATH "" DEPENDENCIES "" #VERBOSE - ) +) diff --git a/CMake/External/External_openvr.cmake b/CMake/External/External_openvr.cmake index f6b689116..2437d8b4e 100644 --- a/CMake/External/External_openvr.cmake +++ b/CMake/External/External_openvr.cmake @@ -65,4 +65,5 @@ imstk_add_external_project( openvr COMMAND ${copy_openvr_dll_command} RELATIVE_INCLUDE_PATH "headers" #VERBOSE - ) +) + diff --git a/CMake/External/External_tbb.cmake b/CMake/External/External_tbb.cmake index f6d303dd0..576917acd 100644 --- a/CMake/External/External_tbb.cmake +++ b/CMake/External/External_tbb.cmake @@ -9,4 +9,4 @@ imstk_add_external_project(tbb -DTBB_BUILD_TESTS:BOOL=OFF RELATIVE_INCLUDE_PATH "" #VERBOSE - ) \ No newline at end of file +) diff --git a/CMake/FindGoogleMock.cmake b/CMake/FindGoogleMock.cmake deleted file mode 100644 index 5be0566c0..000000000 --- a/CMake/FindGoogleMock.cmake +++ /dev/null @@ -1,12 +0,0 @@ -include(imstkFind) -#----------------------------------------------------------------------------- -# Find All Headers and Libraries for GoogleMock -#----------------------------------------------------------------------------- - -imstk_find_header(GoogleMock gmock/gmock.h) -imstk_find_libary(GoogleMock gmock) -imstk_find_libary(GoogleMock gmock_main) -imstk_find_package(GoogleMock) - -#message(STATUS "GoogleMock include : ${GOOGLEMOCK_INCLUDE_DIRS}") -#message(STATUS "GoogleMock libraries : ${GOOGLEMOCK_LIBRARIES}") diff --git a/CMake/FindGoogleTest.cmake b/CMake/FindGoogleTest.cmake deleted file mode 100644 index 366d85231..000000000 --- a/CMake/FindGoogleTest.cmake +++ /dev/null @@ -1,13 +0,0 @@ -include(imstkFind) -#----------------------------------------------------------------------------- -# Find All Headers and Libraries for GoogleTest -#----------------------------------------------------------------------------- - -imstk_find_header(GoogleTest gtest/gtest.h) -imstk_find_libary(GoogleTest gtest) -imstk_find_libary(GoogleTest gtest_main) -imstk_find_package(GoogleTest) - -#message(STATUS "GoogleTest include : ${GOOGLETEST_INCLUDE_DIRS}") -#message(STATUS "GoogleTest libraries : ${GOOGLETEST_LIBRARIES}") - diff --git a/CMake/Findglm.cmake b/CMake/Findglm.cmake deleted file mode 100644 index 9857d9c58..000000000 --- a/CMake/Findglm.cmake +++ /dev/null @@ -1,9 +0,0 @@ -include(imstkFind) -#----------------------------------------------------------------------------- -# Find All Headers and Libraries for glm -#----------------------------------------------------------------------------- - -imstk_find_header(glm glm/glm.hpp) -imstk_find_header_package(glm) - -#message(STATUS "glm include : ${GLM_INCLUDE_DIRS}") diff --git a/CMake/Utilities/imstkAddExecutable.cmake b/CMake/Utilities/imstkAddExecutable.cmake index 833f250c9..7b86bfe3a 100644 --- a/CMake/Utilities/imstkAddExecutable.cmake +++ b/CMake/Utilities/imstkAddExecutable.cmake @@ -12,5 +12,5 @@ macro(imstk_add_executable target) set_target_properties(${target} PROPERTIES DEBUG_POSTFIX "${CMAKE_DEBUG_POSTFIX}") add_custom_command(TARGET ${target} POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:${target}> ${iMSTK_INSTALL_BIN_DIR}) + COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:${target}> ${CMAKE_INSTALL_PREFIX}/bin) endmacro() diff --git a/CMake/Utilities/imstkAddLibrary.cmake b/CMake/Utilities/imstkAddLibrary.cmake index 205657d4c..3b6c47a00 100644 --- a/CMake/Utilities/imstkAddLibrary.cmake +++ b/CMake/Utilities/imstkAddLibrary.cmake @@ -69,7 +69,7 @@ function(imstk_add_library target) list(APPEND ${target}_LIBRARIES "${d}") endforeach() #message(STATUS "${target} using libraries : ${${target}_LIBRARIES}") - target_link_libraries( ${target} + target_link_libraries( ${target} PUBLIC ${${target}_LIBRARIES} ) @@ -78,7 +78,7 @@ function(imstk_add_library target) #----------------------------------------------------------------------------- target_include_directories( ${target} PUBLIC ${target_BUILD_INTERFACE_LIST} - $<INSTALL_INTERFACE:${iMSTK_INSTALL_INCLUDE_DIR}> + $<INSTALL_INTERFACE:${${PROJECT_NAME}_INSTALL_FOLDER}> ) #----------------------------------------------------------------------------- @@ -95,17 +95,17 @@ function(imstk_add_library target) #----------------------------------------------------------------------------- install( FILES ${target_H_FILES} - DESTINATION ${iMSTK_INSTALL_INCLUDE_DIR} + DESTINATION include COMPONENT Development ) #----------------------------------------------------------------------------- # Install library #----------------------------------------------------------------------------- - install( TARGETS ${target} EXPORT iMSTK_TARGETS - RUNTIME DESTINATION ${iMSTK_INSTALL_BIN_DIR} COMPONENT RuntimeLibraries - LIBRARY DESTINATION ${iMSTK_INSTALL_LIB_DIR} COMPONENT RuntimeLibraries - ARCHIVE DESTINATION ${iMSTK_INSTALL_LIB_DIR} COMPONENT Development + install( TARGETS ${target} EXPORT ${PROJECT_NAME}Targets + RUNTIME DESTINATION bin COMPONENT RuntimeLibraries + LIBRARY DESTINATION lib COMPONENT RuntimeLibraries + ARCHIVE DESTINATION lib COMPONENT Development ) diff --git a/CMake/Utilities/imstkAddTest.cmake b/CMake/Utilities/imstkAddTest.cmake index 53d783c4f..20c49cd26 100644 --- a/CMake/Utilities/imstkAddTest.cmake +++ b/CMake/Utilities/imstkAddTest.cmake @@ -38,7 +38,7 @@ function(GTEST_ADD_TESTS executable extra_args) continue() endif() add_test(NAME ${test_name} COMMAND ${executable} ${extra_args} --gtest_filter=${test_name} WORKING_DIRECTORY ${CMAKE_INSTALL_PREFIX}/bin) # changed here - + endforeach() endforeach() endfunction() @@ -118,7 +118,7 @@ function(imstk_add_test target) # Link test driver against current target, gtest and pthread target_link_libraries(${test_driver_executable} ${target} - ${GOOGLETEST_LIBRARIES} + GTest::gtest Threads::Threads ) diff --git a/CMake/Utilities/imstkFind.cmake b/CMake/Utilities/imstkFind.cmake index c35d4cff1..d92d5f597 100644 --- a/CMake/Utilities/imstkFind.cmake +++ b/CMake/Utilities/imstkFind.cmake @@ -1,4 +1,7 @@ include(FindPackageHandleStandardArgs) +if(NOT PACKAGE_PREFIX_DIR) + set(PACKAGE_PREFIX_DIR ${CMAKE_INSTALL_PREFIX}) +endif() #----------------------------------------------------------------------------- # Look for header directory #----------------------------------------------------------------------------- @@ -27,9 +30,9 @@ macro(imstk_find_header package header) if(${package}_ROOT_DIR) set(_SEARCH_DIR ${${package}_ROOT_DIR}/${sub_dir}) else() - set(_SEARCH_DIR ${CMAKE_INSTALL_PREFIX}/include/${sub_dir}) + set(_SEARCH_DIR ${PACKAGE_PREFIX_DIR}/include/${sub_dir}) endif() - #message(STATUS "Searching for : ${_SEARCH_DIR}/${header}") + message(STATUS "Searching for : ${_SEARCH_DIR}/${header}") find_path(${package}_INCLUDE_DIR NAMES @@ -45,7 +48,7 @@ macro(imstk_find_header package header) ${header} ) endif() - #message(STATUS "Found it : ${${package}_INCLUDE_DIR}/${header}") + message(STATUS "Found it : ${${package}_INCLUDE_DIR}/${header}") if (EXISTS ${${package}_INCLUDE_DIR}/${header}) @@ -55,7 +58,7 @@ macro(imstk_find_header package header) else() message(FATAL_ERROR "Could not find ${${package}_INCLUDE_DIR}/${header}") endif() - #message(STATUS "${package}_INCLUDE_DIRS : ${${package}_INCLUDE_DIRS}") + message(STATUS "${package}_INCLUDE_DIRS : ${${package}_INCLUDE_DIRS}") unset(${package}_INCLUDE_DIR CACHE) endmacro() @@ -99,7 +102,7 @@ macro(imstk_find_libary package library) endif() #message(STATUS "Looking for ${package} libs in ${_SEARCH_DIR}") else() - set(_SEARCH_DIR ${CMAKE_INSTALL_PREFIX}/lib) + set(_SEARCH_DIR ${PACKAGE_PREFIX_DIR}/lib) endif() diff --git a/CMakeLists.txt b/CMakeLists.txt index ecc53f55d..2e519907a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -25,19 +25,14 @@ set(CMAKE_PREFIX_PATH ${CMAKE_INSTALL_PREFIX}) #----------------------------------------------------------------------------- # Project install directories #----------------------------------------------------------------------------- -if(APPLE) - set(${PROJECT_NAME}_INSTALL_ROOT "${CMAKE_INSTALL_PREFIX}/${${PROJECT_NAME}_MAIN_PROJECT_APPLICATION_NAME}.app/Contents") # Set to create Bundle -else() - set(${PROJECT_NAME}_INSTALL_ROOT "${CMAKE_INSTALL_PREFIX}") +if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) + set(CMAKE_INSTALL_PREFIX ${CMAKE_BINARY_DIR}/install CACHE PATH "Install location" FORCE) endif() -set(${PROJECT_NAME}_INSTALL_BIN_DIR "${${PROJECT_NAME}_INSTALL_ROOT}/bin") -set(${PROJECT_NAME}_INSTALL_LIB_DIR "${${PROJECT_NAME}_INSTALL_ROOT}/lib") -set(${PROJECT_NAME}_INSTALL_INCLUDE_DIR "${${PROJECT_NAME}_INSTALL_ROOT}/include/imstk-${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}") -set(${PROJECT_NAME}_INSTALL_SHARE_DIR "${${PROJECT_NAME}_INSTALL_ROOT}") +set(CMAKE_PREFIX_PATH ${CMAKE_INSTALL_PREFIX}) # Let's go ahead and make these directories -file(MAKE_DIRECTORY ${${PROJECT_NAME}_INSTALL_BIN_DIR}) -file(MAKE_DIRECTORY ${${PROJECT_NAME}_INSTALL_LIB_DIR}) -file(MAKE_DIRECTORY ${${PROJECT_NAME}_INSTALL_SHARE_DIR}) +file(MAKE_DIRECTORY ${CMAKE_INSTALL_PREFIX}/bin) +file(MAKE_DIRECTORY ${CMAKE_INSTALL_PREFIX}/include) +file(MAKE_DIRECTORY ${CMAKE_INSTALL_PREFIX}/lib) #----------------------------------------------------------------------------- # Update CMake module path & cmake dir @@ -111,6 +106,7 @@ if(${PROJECT_NAME}_SUPERBUILD) endif() option(${PROJECT_NAME}_USE_Vulkan "Use the custom Vulkan renderer." OFF) + option(${PROJECT_NAME}_USE_OpenHaptics "Use OpenHaptic Support." OFF) imstk_define_dependency(Assimp) imstk_define_dependency(Eigen3) @@ -152,7 +148,7 @@ if(${PROJECT_NAME}_SUPERBUILD) endif() if(${PROJECT_NAME}_BUILD_TESTING) - imstk_define_dependency(GoogleTest) + imstk_define_dependency(GTest) #----------------------------------------------------------------------------- # Allow CTest to cover Innerbuild @@ -180,7 +176,6 @@ if(${PROJECT_NAME}_SUPERBUILD) endif() - #----------------------------------------------------------------------------- # INNERBUILD #----------------------------------------------------------------------------- @@ -189,7 +184,8 @@ endif() # Find external dependencies #----------------------------------------------------------------------------- include(imstkFind) - +# Set where to look for packages (If not using system) +set(PACKAGE_PREFIX_DIR ${CMAKE_INSTALL_PREFIX}) # Assimp find_package( Assimp REQUIRED ) @@ -313,10 +309,7 @@ endif(Uncrustify_EXECUTABLE) # Google Test if(${PROJECT_NAME}_BUILD_TESTING) - find_package( GoogleTest REQUIRED ) - include_directories(${GOOGLETEST_INCLUDE_DIRS}) - find_package( GoogleMock REQUIRED ) - include_directories(${GOOGLEMOCK_INCLUDE_DIRS}) + find_package( GTest REQUIRED NO_DEFAULT_PATH) endif() #----------------------------------------------------------------------------- @@ -340,6 +333,9 @@ if(${PROJECT_NAME}_BUILD_TESTING OR ${PROJECT_NAME}_BUILD_EXAMPLES) CopyAndCompileShaders() endif() +# Folder name to put our headers/cmake config files under +set(${PROJECT_NAME}_INSTALL_FOLDER ${PROJECT_NAME}-${${PROJECT_NAME}_VERSION_MAJOR}.${${PROJECT_NAME}_VERSION_MINOR}) + #-------------------------------------------------------------------------- # Add Source code subdirectories #-------------------------------------------------------------------------- @@ -383,6 +379,17 @@ if(NOT WIN32) ) endif() +#-------------------------------------------------------------------------- +# Install Find Modules +#-------------------------------------------------------------------------- +set(${PROJECT_NAME}_INSTALL_CONFIG_DIR "lib/cmake/${${PROJECT_NAME}_INSTALL_FOLDER}") +file(MAKE_DIRECTORY ${CMAKE_INSTALL_PREFIX}/${${PROJECT_NAME}_INSTALL_CONFIG_DIR}/modules) +file(GLOB modules ${CMAKE_SOURCE_DIR}/CMake/Find*.cmake) +foreach(module ${modules}) + install(FILES ${module} DESTINATION "${${PROJECT_NAME}_INSTALL_CONFIG_DIR}/modules") +endforeach() +install(FILES ${CMAKE_SOURCE_DIR}/CMake/Utilities/imstkFind.cmake DESTINATION "${${PROJECT_NAME}_INSTALL_CONFIG_DIR}/modules") + #-------------------------------------------------------------------------- # Innerbuild dummy test #-------------------------------------------------------------------------- @@ -394,38 +401,56 @@ add_test( #-------------------------------------------------------------------------- # Export Targets #-------------------------------------------------------------------------- +# This variable controls the prefix used to generate the following files: +# ${PROJECT_NAME}ConfigVersion.cmake +# ${PROJECT_NAME}Config.cmake +# ${PROJECT_NAME}Targets.cmake +# and it also used to initialize ${PROJECT_NAME}_INSTALL_CONFIG_DIR value. +set(export_config_name ${PROJECT_NAME}) string(TOLOWER "${PROJECT_NAME}" PROJECT_NAMESPACE) set(PROJECT_NAMESPACE "${PROJECT_NAMESPACE}::") - +#------------------------------------------------------------------------------ +# Configure ${PROJECT_NAME}ConfigVersion.cmake common to build and install tree include(CMakePackageConfigHelpers) +set(config_version_file ${PROJECT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake) write_basic_package_version_file( - "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake" - VERSION ${Upstream_VERSION} + ${config_version_file} + VERSION "${${PROJECT_NAME}_VERSION}" COMPATIBILITY AnyNewerVersion ) -export(EXPORT ${PROJECT_NAME}_TARGETS +#------------------------------------------------------------------------------ +# Export '${PROJECT_NAME}Targets.cmake' for a build tree +export( + EXPORT ${PROJECT_NAME}Targets FILE ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Targets.cmake NAMESPACE ${PROJECT_NAMESPACE} ) -configure_file(${PROJECT_NAME}Config.cmake.in - "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake" - @ONLY +# Configure '${PROJECT_NAME}Config.cmake' for a build tree +set(build_config ${CMAKE_BINARY_DIR}/${PROJECT_NAME}Config.cmake) +configure_package_config_file( + ${PROJECT_NAME}Config.cmake.in + ${build_config} + INSTALL_DESTINATION "${PROJECT_BINARY_DIR}" ) -install(EXPORT ${PROJECT_NAME}_TARGETS - FILE - ${PROJECT_NAME}Targets.cmake - NAMESPACE - ${PROJECT_NAMESPACE} - DESTINATION - ${${PROJECT_NAME}_INSTALL_SHARE_DIR} +#------------------------------------------------------------------------------ +# Export '${PROJECT_NAME}Targets.cmake' for an install tree +install( + EXPORT ${PROJECT_NAME}Targets + FILE ${PROJECT_NAME}Targets.cmake + NAMESPACE ${PROJECT_NAMESPACE} + DESTINATION ${${PROJECT_NAME}_INSTALL_CONFIG_DIR} + ) + +set(install_config ${PROJECT_BINARY_DIR}/CMakeFiles/${PROJECT_NAME}Config.cmake) +configure_package_config_file( + ${PROJECT_NAME}Config.cmake.in + ${install_config} + INSTALL_DESTINATION ${${PROJECT_NAME}_INSTALL_CONFIG_DIR} ) + +# Install config files install( - FILES - "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake" - "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake" - DESTINATION - ${${PROJECT_NAME}_INSTALL_SHARE_DIR} - COMPONENT - Devel + FILES ${config_version_file} ${install_config} + DESTINATION "${${PROJECT_NAME}_INSTALL_CONFIG_DIR}" ) diff --git a/iMSTKConfig.cmake.in b/iMSTKConfig.cmake.in index 90b11ba31..29d8ef227 100644 --- a/iMSTKConfig.cmake.in +++ b/iMSTKConfig.cmake.in @@ -1,98 +1,126 @@ -# Include and library paths -set(CMAKE_INCLUDE_PATH "@CMAKE_INCLUDE_PATH@") -set(CMAKE_LIBRARY_PATH "@CMAKE_LIBRARY_PATH@") - -# Path to iMSTK source directory -set(iMSTK_SOURCE_DIR "@CMAKE_CURRENT_SOURCE_DIR@") -set(iMSTK_BINARY_DIR "@CMAKE_BINARY_DIR@") -set(iMSTK_INSTALL_ROOT "@iMSTK_INSTALL_ROOT@") - -# Update CMake module path -list(INSERT CMAKE_MODULE_PATH 0 "${iMSTK_SOURCE_DIR}/CMake") -list(INSERT CMAKE_MODULE_PATH 1 "${iMSTK_SOURCE_DIR}/CMake/Utilities") - -# The Find scripts use cmake variables so overwrite them -set(CMAKE_INSTALL_PREFIX_CACHE ${CMAKE_INSTALL_PREFIX}) -set(CMAKE_BINARY_DIR_CACHE ${CMAKE_BINARY_DIR}) -set(CMAKE_DEBUG_POSTFIX_CACHE ${CMAKE_DEBUG_POSTFIX}) - -set(CMAKE_INSTALL_PREFIX ${iMSTK_INSTALL_ROOT} CACHE STRING "" FORCE) -mark_as_advanced(CMAKE_INSTALL_PREFIX) -set(CMAKE_BINARY_DIR ${iMSTK_BINARY_DIR} CACHE STRING "" FORCE) -mark_as_advanced(CMAKE_BINARY_DIR) -set(CMAKE_DEBUG_POSTFIX "d" CACHE STRING "" FORCE) -mark_as_advanced(CMAKE_DEBUG_POSTFIX) +@PACKAGE_INIT@ + +set(export_config_name "@export_config_name@") + +set_and_check(${export_config_name}Targets "${CMAKE_CURRENT_LIST_DIR}/${export_config_name}Targets.cmake") + +include(${${export_config_name}Targets}) +include(CMakeFindDependencyMacro) # iMSTK settings -set(iMSTK_USE_OpenHaptics @iMSTK_USE_OpenHaptics@) +set(iMSTK_ENABLE_VR @iMSTK_ENABLE_VR@) set(iMSTK_USE_Vulkan @iMSTK_USE_Vulkan@) -set(VegaFEM_DIR "@VegaFEM_DIR@") -set(VTK_DIR "@VTK_DIR@") +set(iMSTK_USE_OpenHaptics @iMSTK_USE_OpenHaptics@) +set(iMSTK_BUILD_TESTING @iMSTK_BUILD_TESTING@) + +# Use the iMSTK modules to find all required packages +set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/modules") +include(${CMAKE_CURRENT_LIST_DIR}/modules/imstkFind) +include(CMakeFindDependencyMacro) # Assimp find_package( Assimp REQUIRED ) +# Eigen3 +set(Eigen3_DIR @Eigen3_DIR@) +find_dependency( Eigen3 REQUIRED ) + +# FTD2XX +if(WIN32) + find_package( FTD2XX REQUIRED ) +endif() + # g3log find_package( g3log REQUIRED ) -include_directories( ${g3log_INCLUDE_DIR} ) # glm -find_package( glm REQUIRED ) - -if(iMSTK_USE_Vulkan) - # glfw - find_package( glfw REQUIRED ) +set(glm_DIR @glm_DIR@) +find_dependency( glm REQUIRED ) - # gli - find_package( gli REQUIRED ) +# GTest +if(iMSTK_BUILD_TESTING) + set(GTest_DIR @GTest_DIR@) + find_dependency( GTest REQUIRED NO_DEFAULT_PATH ) endif() -# Eigen -find_package( Eigen3 3.3 REQUIRED ) -include_directories( ${Eigen_INCLUDE_DIR} ) - # imgui find_package( imgui REQUIRED ) -include_directories( ${imgui_INCLUDE_DIR} ) + +# LibNiFalcon +find_package( LibNiFalcon REQUIRED) + +# Libusb +find_package( Libusb REQUIRED) + +# OpenVR +if(iMSTK_ENABLE_VR) + add_definitions( -DiMSTK_ENABLE_VR ) + find_package( openvr REQUIRED ) +else() # PhysX find_package(PhysX REQUIRED) -include_directories(${PHYSX_INCLUDE_DIRS}) - -# SCCD +# +#SCCD find_package( SCCD REQUIRED ) -include_directories( ${SCCD_INCLUDE_DIR} ) + +# SFML +if(WIN32) + find_package( SFML REQUIRED ) + add_definitions( -DiMSTK_AUDIO_ENABLED ) +endif() # tbb find_package(tbb REQUIRED) -include_directories(${TBB_INCLUDE_DIR}) if (MSVC) add_definitions(-D__TBB_NO_IMPLICIT_LINKAGE=1) endif() # VegaFEM -find_package( VegaFEM REQUIRED CONFIG ) - -# VTK -find_package( VTK REQUIRED CONFIG ) -include( ${VTK_USE_FILE} ) +set(VegaFEM_DIR "@VegaFEM_DIR@") +find_dependency( VegaFEM REQUIRED CONFIG ) # VRPN find_package( VRPN REQUIRED ) -include_directories( ${VRPN_INCLUDE_DIRS} ) -add_definitions( -DVRPN_USE_LIBNIFALCON ) if(iMSTK_USE_OpenHaptics) + find_package( OpenHapticsSDK REQUIRED ) add_definitions( -DiMSTK_USE_OPENHAPTICS ) - add_definitions( -DVRPN_USE_PHANTOM_SERVER ) -else() - remove_definitions( -DiMSTK_USE_OPENHAPTICS ) - remove_definitions( -DVRPN_USE_PHANTOM_SERVER ) endif() -# iMSTK -#link_directories(@CMAKE_LIBRARY_PATH@) -include("@CMAKE_CURRENT_BINARY_DIR@/iMSTKTargets.cmake") +# VTK +set(VTK_DIR @VTK_DIR@) +find_dependency(VTK CONFIG) +if (VTK_VERSION VERSION_LESS "8.90") + # Modules are linked via `vtkCommonCore` + # VTK_DEFINITIONS has autoinit information + find_dependency (VTK REQUIRED) + include(${VTK_USE_FILE}) +else() + # modules are linked via `VTK::CommonCore` + # vtk_module_autoinit is needed + find_dependency(VTK COMPONENTS + CommonCore + CommonDataModel + FiltersGeneral + FiltersSources + IOExport + IOImport + IOPLY + IOParallel + IOParallelXML + ImagingCore + InteractionStyle + RenderingAnnotation + RenderingCore + RenderingOpenGL2 + RenderingVolume + RenderingVolumeOpenGL2 +endif() -set(CMAKE_INSTALL_PREFIX ${CMAKE_INSTALL_PREFIX_CACHE} CACHE STRING "" FORCE) -set(CMAKE_BINARY_DIR ${CMAKE_BINARY_DIR_CACHE} CACHE STRING "" FORCE) -set(CMAKE_DEBUG_POSTFIX ${CMAKE_DEBUG_POSTFIX_CACHE} CACHE STRING "" FORCE) \ No newline at end of file +# glfw, gli +if(iMSTK_USE_Vulkan) + find_package( glfw REQUIRED ) + find_package( gli REQUIRED ) + find_package( VulkanSDK REQUIRED) + add_definitions( -DiMSTK_USE_Vulkan ) +endif() -- GitLab