From f773acf2cf702dc1d1bfc0a8b01eab7183db910e Mon Sep 17 00:00:00 2001 From: MiguelBarro <45819833+MiguelBarro@users.noreply.github.com> Date: Tue, 18 May 2021 07:28:19 +0200 Subject: [PATCH] Upgrade installer to support cmake linking statically or dynamically to Fast-DDS (#107) * [11561] Add a FASTDDS_STATIC CMake variable to link statically to the binary deployment * [11561] Addressing reviewer's comments --- cmake/packaging/Config.cmake.in | 10 +++++++++- cmake/packaging/windows/fastcdr-config.cmake | 19 ++++--------------- src/cpp/CMakeLists.txt | 15 ++++++++++++--- 3 files changed, 25 insertions(+), 19 deletions(-) diff --git a/cmake/packaging/Config.cmake.in b/cmake/packaging/Config.cmake.in index 77e96c0e..f5ff8b05 100644 --- a/cmake/packaging/Config.cmake.in +++ b/cmake/packaging/Config.cmake.in @@ -22,4 +22,12 @@ endif() set_and_check(@PROJECT_NAME@_INCLUDE_DIR "@PACKAGE_INCLUDE_INSTALL_DIR@") set_and_check(@PROJECT_NAME@_LIB_DIR "@PACKAGE_LIB_INSTALL_DIR@") -include(${CMAKE_CURRENT_LIST_DIR}/@PROJECT_NAME@-targets.cmake) +if(FASTDDS_STATIC) + include(${CMAKE_CURRENT_LIST_DIR}/@PROJECT_NAME@-static-targets.cmake) +else() + include(${CMAKE_CURRENT_LIST_DIR}/@PROJECT_NAME@-dynamic-targets.cmake OPTIONAL RESULT_VARIABLE DYNAMIC_TARGET_FILE) + # fallback to static linking if dynamic target is missing + if( NOT DYNAMIC_TARGET_FILE ) + include(${CMAKE_CURRENT_LIST_DIR}/@PROJECT_NAME@-static-targets.cmake) + endif() +endif() diff --git a/cmake/packaging/windows/fastcdr-config.cmake b/cmake/packaging/windows/fastcdr-config.cmake index c428cffb..0f9ffee4 100644 --- a/cmake/packaging/windows/fastcdr-config.cmake +++ b/cmake/packaging/windows/fastcdr-config.cmake @@ -12,24 +12,13 @@ # See the License for the specific language governing permissions and # limitations under the License. -if(MSVC_VERSION EQUAL 1900) - if(CMAKE_CL_64) - include("${CMAKE_CURRENT_LIST_DIR}/../share/fastcdr-x64Win64VS2015/cmake/fastcdr-config.cmake") - else() - include("${CMAKE_CURRENT_LIST_DIR}/../share/fastcdr-i86Win32VS2015/cmake/fastcdr-config.cmake") - endif() -elseif(MSVC_VERSION LESS 1920) - if(CMAKE_CL_64) - include("${CMAKE_CURRENT_LIST_DIR}/../share/fastcdr-x64Win64VS2017/cmake/fastcdr-config.cmake") - else() - include("${CMAKE_CURRENT_LIST_DIR}/../share/fastcdr-i86Win32VS2017/cmake/fastcdr-config.cmake") - endif() -elseif(MSVC_VERSION GREATER_EQUAL 1920) +if(MSVC_VERSION LESS_EQUAL 1900) + message(FATAL_ERROR "Visual Studio version ${MSVC_VERSION} is no longer supported") +else() if(CMAKE_CL_64) include("${CMAKE_CURRENT_LIST_DIR}/../share/fastcdr-x64Win64VS2019/cmake/fastcdr-config.cmake") else() include("${CMAKE_CURRENT_LIST_DIR}/../share/fastcdr-i86Win32VS2019/cmake/fastcdr-config.cmake") endif() -else() - message(FATAL_ERROR "Not supported version of Visual Studio") endif() + diff --git a/src/cpp/CMakeLists.txt b/src/cpp/CMakeLists.txt index ebe8a09c..afffeb8d 100644 --- a/src/cpp/CMakeLists.txt +++ b/src/cpp/CMakeLists.txt @@ -134,6 +134,15 @@ if(UNIX AND EPROSIMA_INSTALLER) endif() # Install libraries + +# Generate different target names depending on linking +get_target_property(TARGET_TYPE ${PROJECT_NAME} TYPE) +if(TARGET_TYPE STREQUAL "SHARED_LIBRARY") + set(FASTDDS_LINKING dynamic) +else() + set(FASTDDS_LINKING static) +endif() + if(MSVC OR MSVC_IDE AND EPROSIMA_INSTALLER) if(IS_TOP_LEVEL) install_msvc_libraries(i86Win32VS2013) @@ -150,14 +159,14 @@ if(MSVC OR MSVC_IDE AND EPROSIMA_INSTALLER) ) elseif(NOT EPROSIMA_INSTALLER) install(TARGETS ${PROJECT_NAME} - EXPORT ${PROJECT_NAME}-targets + EXPORT ${PROJECT_NAME}-${FASTDDS_LINKING}-targets RUNTIME DESTINATION ${BIN_INSTALL_DIR}${MSVCARCH_DIR_EXTENSION} LIBRARY DESTINATION ${LIB_INSTALL_DIR}${MSVCARCH_DIR_EXTENSION} ARCHIVE DESTINATION ${LIB_INSTALL_DIR}${MSVCARCH_DIR_EXTENSION} COMPONENT libraries${MSVCARCH_EXTENSION} ) - export(TARGETS ${PROJECT_NAME} FILE ${PROJECT_BINARY_DIR}/cmake/config/${PROJECT_NAME}-targets.cmake) + export(TARGETS ${PROJECT_NAME} FILE ${PROJECT_BINARY_DIR}/cmake/config/${PROJECT_NAME}-${FASTDDS_LINKING}-targets.cmake) if(INSTALLER_PLATFORM) set(INSTALL_DESTINATION_PATH ${DATA_INSTALL_DIR}/${PROJECT_NAME}-${INSTALLER_PLATFORM}/cmake) @@ -165,7 +174,7 @@ elseif(NOT EPROSIMA_INSTALLER) set(INSTALL_DESTINATION_PATH ${LIB_INSTALL_DIR}/cmake/${PROJECT_NAME}${MSVCARCH_DIR_EXTENSION_EXT}) endif() - install(EXPORT ${PROJECT_NAME}-targets + install(EXPORT ${PROJECT_NAME}-${FASTDDS_LINKING}-targets DESTINATION ${INSTALL_DESTINATION_PATH} COMPONENT cmake )