Skip to content

Commit

Permalink
Development/cmake enhancements (#352)
Browse files Browse the repository at this point in the history
* 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
  • Loading branch information
bramoosterhuis authored Jul 6, 2024
1 parent ac6cd5e commit 227976c
Show file tree
Hide file tree
Showing 4 changed files with 53 additions and 52 deletions.
2 changes: 1 addition & 1 deletion CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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)

Expand Down
46 changes: 19 additions & 27 deletions definitions/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down Expand Up @@ -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
Expand All @@ -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
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
Expand All @@ -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})

37 changes: 21 additions & 16 deletions interfaces/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down Expand Up @@ -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"
)





20 changes: 12 additions & 8 deletions qa_interfaces/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down Expand Up @@ -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
)

0 comments on commit 227976c

Please sign in to comment.