From 227976cc2fa9e7167414aa6e924d3767ae9cf2b0 Mon Sep 17 00:00:00 2001 From: Bram Oosterhuis Date: Sun, 7 Jul 2024 00:13:22 +0200 Subject: [PATCH] Development/cmake enhancements (#352) * cmake: set minimum required cmake to 3.15 * cmake: group binaries to components * cmake: make human versioned libs optional * cmake: use thunders major version * cmake: clean unused code * cmake: install link from binary dir * cmake: add separate versioning --- CMakeLists.txt | 2 +- definitions/CMakeLists.txt | 46 +++++++++++++++--------------------- interfaces/CMakeLists.txt | 37 ++++++++++++++++------------- qa_interfaces/CMakeLists.txt | 20 +++++++++------- 4 files changed, 53 insertions(+), 52 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index be1c6d49..984e9764 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -15,7 +15,7 @@ # See the License for the specific language governing permissions and # limitations under the License. -cmake_minimum_required(VERSION 3.12) +cmake_minimum_required(VERSION 3.15) project(Interfaces) diff --git a/definitions/CMakeLists.txt b/definitions/CMakeLists.txt index cee33881..d2a15c56 100644 --- a/definitions/CMakeLists.txt +++ b/definitions/CMakeLists.txt @@ -15,14 +15,15 @@ # See the License for the specific language governing permissions and # limitations under the License. -cmake_minimum_required(VERSION 3.3) +cmake_minimum_required(VERSION 3.15) -project(Definitions) +project(Definitions + VERSION 5.0.0 + DESCRIPTION "Shared lookup tables associated with interface enums." + LANGUAGES CXX) find_package(Thunder) -project_version(1.0.0) - find_package(CompileSettingsDebug REQUIRED) find_package(JsonGenerator REQUIRED) find_package(${NAMESPACE}Core REQUIRED) @@ -69,16 +70,6 @@ file(GLOB QA_JSON_LINK_HEADERS "${CMAKE_CURRENT_BINARY_DIR}/qa_generated/J*.h") list(APPEND JSON_LINK_HEADERS "Module.h") list(APPEND QA_JSON_LINK_HEADERS "Module.h") -include(CreateLink) -#CreateLink(LINK "${CMAKE_CURRENT_BINARY_DIR}/generated/Module.h" TARGET "../Module.h") -#list(APPEND JSON_LINK_HEADERS "${CMAKE_CURRENT_BINARY_DIR}/generated/Module.h") -#CreateLink(LINK "${CMAKE_CURRENT_BINARY_DIR}/generated/Ids.h" TARGET "../Ids.h") -#list(APPEND JSON_LINK_HEADERS "${CMAKE_CURRENT_BINARY_DIR}/generated/Ids.h") -#CreateLink(LINK "${CMAKE_CURRENT_BINARY_DIR}/Module.h" TARGET "../interfaces/Module.h") -#list(APPEND PUBLIC_HEADERS "${CMAKE_CURRENT_BINARY_DIR}/Module.h") -#CreateLink(LINK "${CMAKE_CURRENT_BINARY_DIR}/qa_generated/QAIds.h" TARGET "../QAIds.h") -#list(APPEND JSON_LINK_HEADERS "${CMAKE_CURRENT_BINARY_DIR}/qa_generated/QAIds.h") - add_library(${Target} SHARED Definitions.cpp Module.cpp @@ -96,11 +87,14 @@ set_target_properties(${Target} PROPERTIES CXX_STANDARD 11 CXX_STANDARD_REQUIRED YES FRAMEWORK FALSE - VERSION ${PROJECT_VERSION} SOVERSION ${PROJECT_VERSION_MAJOR} PUBLIC_HEADER "${PUBLIC_HEADERS}" # specify the public headers ) +if(HUMAN_VERSIONED_BINARIES) +set_target_properties(${Target} PROPERTIES VERSION ${PROJECT_VERSION}) +endif() + target_include_directories(${Target} PRIVATE $ @@ -109,30 +103,28 @@ target_include_directories(${Target} ) install( - TARGETS ${Target} EXPORT ${Target}Targets # for downstream dependencies - ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}/ COMPONENT libs # static lib - LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}/ COMPONENT libs # shared lib - RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT libs # binaries - FRAMEWORK DESTINATION ${CMAKE_INSTALL_BINDIR}/ COMPONENT libs # for mac - PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${NAMESPACE}/definitions COMPONENT devel # headers for mac (note the different component -> different package) - INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${NAMESPACE} # default include path + TARGETS ${Target} EXPORT ${Target}Targets + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}/ COMPONENT ${NAMESPACE}_Development + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}/ COMPONENT ${NAMESPACE}_Runtime NAMELINK_COMPONENT ${NAMESPACE}_Development + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT ${NAMESPACE}_Runtime + FRAMEWORK DESTINATION ${CMAKE_INSTALL_BINDIR}/ COMPONENT ${NAMESPACE}_Runtime + PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${NAMESPACE}/definitions COMPONENT ${NAMESPACE}_Development + INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${NAMESPACE} ) install( FILES ${JSON_LINK_HEADERS} - DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${NAMESPACE}/interfaces/json + DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${NAMESPACE}/interfaces/json COMPONENT ${NAMESPACE}_Development ) install( FILES ${QA_JSON_LINK_HEADERS} - DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${NAMESPACE}/qa_interfaces/json + DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${NAMESPACE}/qa_interfaces/json COMPONENT ${NAMESPACE}_Test_Development ) InstallPackageConfig( TARGETS ${Target} - DESCRIPTION "Share lookup tables associated with interface enums." + DESCRIPTION "${PROJECT_DESCRIPTION}" ) - InstallCMakeConfig(TARGETS ${Target}) - diff --git a/interfaces/CMakeLists.txt b/interfaces/CMakeLists.txt index 2eb64197..564e1887 100644 --- a/interfaces/CMakeLists.txt +++ b/interfaces/CMakeLists.txt @@ -15,14 +15,15 @@ # See the License for the specific language governing permissions and # limitations under the License. -cmake_minimum_required(VERSION 3.3) +cmake_minimum_required(VERSION 3.15) -project(Marshalling) +project(Marshalling + VERSION 5.0.0 + DESCRIPTION "Component that abstracts the logic to transfer and receive COM-RPC objects" + LANGUAGES CXX) find_package(Thunder) -project_version(1.0.0) - find_package(CompileSettingsDebug REQUIRED) find_package(ProxyStubGenerator REQUIRED) find_package(${NAMESPACE}Core REQUIRED) @@ -61,35 +62,39 @@ set_target_properties(${Target} PROPERTIES CXX_STANDARD 11 CXX_STANDARD_REQUIRED YES FRAMEWORK FALSE - VERSION ${PROJECT_VERSION} SOVERSION ${PROJECT_VERSION_MAJOR} ) +if(HUMAN_VERSIONED_BINARIES) +set_target_properties(${Target} PROPERTIES VERSION ${PROJECT_VERSION}) +endif() + + string(TOLOWER ${NAMESPACE} NAMESPACE_LIB) install( - TARGETS ${Target} EXPORT ${Target}Targets # for downstream dependencies - LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}/${NAMESPACE_LIB}/proxystubs COMPONENT libs # shared lib + TARGETS ${Target} EXPORT ${Target}Targets + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}/${NAMESPACE_LIB}/proxystubs COMPONENT ${NAMESPACE}_Runtime NAMELINK_COMPONENT ${NAMESPACE}_Development ) install( FILES ${INTERFACES_HEADERS} - DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${NAMESPACE}/interfaces + DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${NAMESPACE}/interfaces COMPONENT ${NAMESPACE}_Development +) + +install( + FILES ${CMAKE_CURRENT_BINARY_DIR}/cdmi.h + DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} COMPONENT ${NAMESPACE}_Development ) install( FILES ${JSON_HEADERS} - DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${NAMESPACE}/interfaces/json + DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${NAMESPACE}/interfaces/json COMPONENT ${NAMESPACE}_Development ) include(CreateLink) CreateLink( - LINK "${CMAKE_SYSROOT}${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_INCLUDEDIR}/cdmi.h" - TARGET "${CMAKE_SYSROOT}${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_INCLUDEDIR}/${NAMESPACE}/interfaces/IDRM.h" + LINK "${CMAKE_CURRENT_BINARY_DIR}/cdmi.h" + TARGET "${NAMESPACE}/interfaces/IDRM.h" ) - - - - - diff --git a/qa_interfaces/CMakeLists.txt b/qa_interfaces/CMakeLists.txt index c195a721..f5589592 100644 --- a/qa_interfaces/CMakeLists.txt +++ b/qa_interfaces/CMakeLists.txt @@ -15,14 +15,15 @@ # See the License for the specific language governing permissions and # limitations under the License. -cmake_minimum_required(VERSION 3.3) +cmake_minimum_required(VERSION 3.15) -project(QAMarshalling) +project(QAMarshalling + VERSION 5.0.0 + DESCRIPTION "Component that abstracts the logic to transfer and receive QA specific COM-RPC objects" + LANGUAGES CXX) find_package(Thunder) -project_version(1.0.0) - find_package(CompileSettingsDebug REQUIRED) find_package(ProxyStubGenerator REQUIRED) find_package(${NAMESPACE}Core REQUIRED) @@ -60,18 +61,21 @@ set_target_properties(${Target} PROPERTIES CXX_STANDARD 11 CXX_STANDARD_REQUIRED YES FRAMEWORK FALSE - VERSION ${PROJECT_VERSION} SOVERSION ${PROJECT_VERSION_MAJOR} ) +if(HUMAN_VERSIONED_BINARIES) +set_target_properties(${Target} PROPERTIES VERSION ${PROJECT_VERSION}) +endif() + string(TOLOWER ${NAMESPACE} NAMESPACE_LIB) install( - TARGETS ${Target} EXPORT ${Target}Targets # for downstream dependencies - LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}/${NAMESPACE_LIB}/proxystubs COMPONENT libs # shared lib + TARGETS ${Target} EXPORT ${Target}Targets + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}/${NAMESPACE_LIB}/proxystubs COMPONENT ${NAMESPACE}_Test NAMELINK_COMPONENT ${NAMESPACE}_Test_Development ) install( FILES ${QA_INTERFACES_HEADERS} - DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${NAMESPACE}/qa_interfaces + DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${NAMESPACE}/qa_interfaces COMPONENT ${NAMESPACE}_Test_Development )