From 6231d8fe2d48d42a00f41a9aeb6d2758b697d4e9 Mon Sep 17 00:00:00 2001 From: gauthier Date: Tue, 23 Apr 2024 16:41:36 +0200 Subject: [PATCH 01/15] WIP install failed on windows (export) --- src/CMakeLists.txt | 16 ++++++++++++---- src/Config.cmake.in | 2 +- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 64fa767b7..ee5f3bdb1 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -105,6 +105,14 @@ install( PATTERN "*.h" PATTERN "*.inl") +# Todo export static lib +#install( +# EXPORT external +# FILE ${PROJECT_NAME}Targets.cmake +# # DESTINATION lib/cmake/${PROJECT_NAME}) +# DESTINATION share/${PROJECT_NAME}/cmake) +#export(EXPORT external FILE "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Targets.cmake") + set(SRC_TARGETS) if(NOT XCODE) # unable to have object files as native build with Xcode @@ -263,8 +271,7 @@ if(HUB_BUILD_STATIC) # FILE ${PROJECT_NAME}Targets.cmake # # DESTINATION lib/cmake/${PROJECT_NAME}) # DESTINATION share/${PROJECT_NAME}/cmake) - # export(EXPORT ${PROJECT_NAME}_static FILE "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Targets.cmake") - + #export(EXPORT ${PROJECT_NAME}_static FILE "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Targets.cmake") if(UNIX) set_target_properties(${PROJECT_NAME}_static PROPERTIES OUTPUT_NAME ${PROJECT_NAME}) @@ -292,7 +299,8 @@ if(HUB_BUILD_SHARED) PUBLIC $ $ # Version.hpp $ - # PRIVATE ${HUB_EXTERNAL_DIR} + #PRIVATE + #${HUB_EXTERNAL_DIR} ) endif() # (XCODE) @@ -330,7 +338,7 @@ endif() # (HUB_BUILD_SHARED) if(HUB_BUILD_SHARED OR HUB_BUILD_STATIC) if(HUB_BUILD_SHARED AND HUB_BUILD_STATIC) - add_library(hub ALIAS hub_static) + add_library(hub ALIAS hub_static) # Todo change to shared by default elseif(HUB_BUILD_SHARED) add_library(hub ALIAS hub_shared) else() diff --git a/src/Config.cmake.in b/src/Config.cmake.in index b9fbd79c6..6bfc3019d 100644 --- a/src/Config.cmake.in +++ b/src/Config.cmake.in @@ -19,7 +19,7 @@ message(STATUS "Found hub: ${PACKAGE_PREFIX_DIR} (version \"${HUB_VERSION}\")") if(TARGET hub_shared OR TARGET hub_static) if(TARGET hub_shared AND TARGET hub_static) - add_library(hub ALIAS hub_shared) + add_library(hub ALIAS hub_static) elseif(TARGET hub_shared) add_library(hub ALIAS hub_shared) else() From be367d87eecd5fb6e24b10ef1ae8ecc6987c4773 Mon Sep 17 00:00:00 2001 From: Gauthier Bouyjou Date: Wed, 24 Apr 2024 14:39:56 +0200 Subject: [PATCH 02/15] [cmake] add enable bins option --- bin/CMakeLists.txt | 53 +++++++++++++++++++++++++--------------------- 1 file changed, 29 insertions(+), 24 deletions(-) diff --git a/bin/CMakeLists.txt b/bin/CMakeLists.txt index d5582f008..3f6628983 100644 --- a/bin/CMakeLists.txt +++ b/bin/CMakeLists.txt @@ -4,30 +4,35 @@ project(bin LANGUAGES CXX) if(TARGET hub) - set(bin_srcs) - foreach(HUB_MODULE ${HUB_MODULES}) - file(GLOB_RECURSE bin_src ${CMAKE_CURRENT_SOURCE_DIR}/${HUB_MODULE}/*.cpp) - list(APPEND bin_srcs ${bin_src}) - endforeach() - - string(REPLACE ".cpp" "" SOURCES_BASENAME "${bin_srcs}") - set(SOURCES_BASENAME ${SOURCES_BASENAME}) - - foreach(name ${SOURCES_BASENAME}) - get_filename_component(basename ${name} NAME) - STRING(REPLACE "bin-" "" basename ${basename}) - set(TARGET_NAME hub-${basename}) - add_executable(${TARGET_NAME} ${name}.cpp) - target_link_libraries(${TARGET_NAME} hub) - - if(WIN32) - if(HUB_BUILD_SHARED AND NOT HUB_BUILD_STATIC) - add_custom_command( - TARGET ${TARGET_NAME} - POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy $ $) + option(HUB_ENABLE_BINS "Enable binaries" ON) + if(HUB_ENABLE_BINS) + + set(bin_srcs) + foreach(HUB_MODULE ${HUB_MODULES}) + file(GLOB_RECURSE bin_src ${CMAKE_CURRENT_SOURCE_DIR}/${HUB_MODULE}/*.cpp) + list(APPEND bin_srcs ${bin_src}) + endforeach() + + string(REPLACE ".cpp" "" SOURCES_BASENAME "${bin_srcs}") + set(SOURCES_BASENAME ${SOURCES_BASENAME}) + + foreach(name ${SOURCES_BASENAME}) + get_filename_component(basename ${name} NAME) + STRING(REPLACE "bin-" "" basename ${basename}) + set(TARGET_NAME hub-${basename}) + add_executable(${TARGET_NAME} ${name}.cpp) + target_link_libraries(${TARGET_NAME} hub) + + if(WIN32) + if(HUB_BUILD_SHARED AND NOT HUB_BUILD_STATIC) + add_custom_command( + TARGET ${TARGET_NAME} + POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy $ $) + endif() endif() - endif() - endforeach() + endforeach() + + endif() endif() From 094c0b651e14eaad25375d2cc0ef4d7b2b78848e Mon Sep 17 00:00:00 2001 From: Gauthier Bouyjou Date: Wed, 24 Apr 2024 14:40:15 +0200 Subject: [PATCH 03/15] [cmake] fix only static install --- CMakeLists.txt | 24 ++++++++--------- src/CMakeLists.txt | 63 +++++++++++++++++++++++++-------------------- src/Config.cmake.in | 3 ++- 3 files changed, 49 insertions(+), 41 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 267bdc514..2296cc777 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -134,18 +134,18 @@ if(Boost_FOUND) message(STATUS "${HEADER_MSG} Boost found : ${Boost_DIR}") endif() -find_package(TBB QUIET) -set(HUB_TBB_TARGET) -if(TBB_FOUND) - if(TARGET tbb) - set(HUB_TBB_TARGET tbb) - elseif(TARGET TBB::tbb) - set(HUB_TBB_TARGET TBB::tbb) - else() - message(FATAL_ERROR "tbb target not found") - endif() - add_definitions(-DHUB_USE_TBB) -endif() +#find_package(TBB QUIET) +#set(HUB_TBB_TARGET) +#if(TBB_FOUND) +# if(TARGET tbb) +# set(HUB_TBB_TARGET tbb) +# elseif(TARGET TBB::tbb) +# set(HUB_TBB_TARGET TBB::tbb) +# else() +# message(FATAL_ERROR "tbb target not found") +# endif() +# add_definitions(-DHUB_USE_TBB) +#endif() find_package(PahoMqttCpp QUIET) if(PahoMqttCpp_FOUND) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index ee5f3bdb1..87548549d 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -20,7 +20,8 @@ endif() option(HUB_BUILD_STATIC "Build static library" ON) option(HUB_BUILD_SHARED "Build shared library" ON) -# ######################## OS specifics +########################## OS specifics ########################### + if(MINGW) if(CLANG) set(THREADS_PREFER_PTHREAD_FLAG ON) @@ -79,10 +80,10 @@ if (REQUIRED_LIBS) message(STATUS "${HEADER_MSG} Dependencies: ${REQUIRED_LIBS}") endif() -file(# GLOB - GLOB_RECURSE external_sources ${HUB_EXTERNAL_DIR}/*.cpp ${HUB_EXTERNAL_DIR}/*.c) -file(# GLOB - GLOB_RECURSE external_headers ${HUB_EXTERNAL_DIR}/*.hpp ${HUB_EXTERNAL_DIR}/*.h) +############################# Externals ################################# + +file(GLOB_RECURSE external_sources ${HUB_EXTERNAL_DIR}/*.cpp ${HUB_EXTERNAL_DIR}/*.c) +file(GLOB_RECURSE external_headers ${HUB_EXTERNAL_DIR}/*.hpp ${HUB_EXTERNAL_DIR}/*.h) if(NOT HUB_USE_ZPP_BITS) list(REMOVE_ITEM external_headers ${HUB_EXTERNAL_DIR}/zpp_bits.h) @@ -97,13 +98,16 @@ if(UNIX) set_property(TARGET external PROPERTY POSITION_INDEPENDENT_CODE ON) # gltfpack endif() +#set(external_headers_only ${HUB_EXTERNAL_DIR}/serializer/serializer.h) install( - DIRECTORY ${HUB_EXTERNAL_DIR}/ - DESTINATION include/ +# DIRECTORY ${HUB_EXTERNAL_DIR}/ + DIRECTORY ${HUB_EXTERNAL_DIR}/serializer/ + DESTINATION include/serializer/ FILES_MATCHING PATTERN "*.hpp" PATTERN "*.h" - PATTERN "*.inl") + PATTERN "*.inl" +) # Todo export static lib #install( @@ -115,6 +119,8 @@ install( set(SRC_TARGETS) +############################# Modules ################################# + if(NOT XCODE) # unable to have object files as native build with Xcode foreach(HUB_MODULE ${HUB_MODULES}) @@ -123,11 +129,9 @@ if(NOT XCODE) # unable to have object files as native build with Xcode string(REPLACE "/" "-" TARGET_NAME "${TARGET_NAME}") set(object_sources) - file(# GLOB - GLOB_RECURSE object_sources ${CMAKE_CURRENT_SOURCE_DIR}/${HUB_MODULE}/*.cpp) + file(GLOB_RECURSE object_sources ${CMAKE_CURRENT_SOURCE_DIR}/${HUB_MODULE}/*.cpp) set(object_headers) - file(# GLOB - GLOB_RECURSE object_headers ${CMAKE_CURRENT_SOURCE_DIR}/${HUB_MODULE}/*.hpp + file(GLOB_RECURSE object_headers ${CMAKE_CURRENT_SOURCE_DIR}/${HUB_MODULE}/*.hpp ${CMAKE_CURRENT_SOURCE_DIR}/${HUB_MODULE}/*.h) if(object_headers MATCHES "Types.hpp") message(FATAL_ERROR "Types.hpp shallow Radium Core/Types.hpp definitions") @@ -220,23 +224,29 @@ if(HUB_BUILD_STATIC) ${PROJECT_NAME}_static PUBLIC $ $ # Version.hpp + $ $ - # PRIVATE - ${HUB_EXTERNAL_DIR}) +# PRIVATE +# ${HUB_EXTERNAL_DIR} + ) endif() # (XCODE) target_compile_definitions(${PROJECT_NAME}_static PUBLIC -DSRC_STATIC) - target_link_libraries(${PROJECT_NAME}_static PRIVATE external ${REQUIRED_LIBS}) +# target_link_libraries(${PROJECT_NAME}_static PRIVATE external ${REQUIRED_LIBS}) + target_link_libraries(${PROJECT_NAME}_static PRIVATE ${REQUIRED_LIBS}) # Todo export static lib - # set_target_properties(${PROJECT_NAME}_static PROPERTIES VERSION ${${PROJECT_NAME}_VERSION} - # SOVERSION ${${PROJECT_NAME}_VERSION_MAJOR}) +# set_target_properties(${PROJECT_NAME}_static PROPERTIES VERSION ${${PROJECT_NAME}_VERSION} +# SOVERSION ${${PROJECT_NAME}_VERSION_MAJOR}) install( TARGETS ${PROJECT_NAME}_static EXPORT ${PROJECT_NAME}_static # DESTINATION lib/${ARCHITECTURE} - DESTINATION ${ARCHITECTURE}/lib) + DESTINATION ${ARCHITECTURE}/lib + RUNTIME DESTINATION ${ARCHITECTURE}/bin + ) + if(MSVC) if(${CMAKE_BUILD_TYPE} STREQUAL "RelWithDebInfo") target_compile_options(${PROJECT_NAME}_static PRIVATE /Zi) @@ -266,11 +276,11 @@ if(HUB_BUILD_STATIC) endif() # MSVC # Todo export static lib - # install( - # EXPORT ${PROJECT_NAME}_static - # FILE ${PROJECT_NAME}Targets.cmake - # # DESTINATION lib/cmake/${PROJECT_NAME}) - # DESTINATION share/${PROJECT_NAME}/cmake) + install( + EXPORT ${PROJECT_NAME}_static + FILE ${PROJECT_NAME}Targets.cmake + # DESTINATION lib/cmake/${PROJECT_NAME}) + DESTINATION share/${PROJECT_NAME}/cmake) #export(EXPORT ${PROJECT_NAME}_static FILE "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Targets.cmake") if(UNIX) @@ -315,7 +325,6 @@ if(HUB_BUILD_SHARED) TARGETS ${PROJECT_NAME}_shared EXPORT ${PROJECT_NAME}_shared DESTINATION ${ARCHITECTURE}/bin # Linux - # DESTINATION ${ARCHITECTURE}/lib) RUNTIME DESTINATION ${ARCHITECTURE}/bin # Windows ) @@ -328,7 +337,6 @@ if(HUB_BUILD_SHARED) install( EXPORT ${PROJECT_NAME}_shared FILE ${PROJECT_NAME}Targets.cmake - # DESTINATION lib/cmake/${PROJECT_NAME}) DESTINATION share/${PROJECT_NAME}/cmake) export(EXPORT ${PROJECT_NAME}_shared FILE "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Targets.cmake") @@ -337,8 +345,9 @@ if(HUB_BUILD_SHARED) endif() # (HUB_BUILD_SHARED) if(HUB_BUILD_SHARED OR HUB_BUILD_STATIC) + if(HUB_BUILD_SHARED AND HUB_BUILD_STATIC) - add_library(hub ALIAS hub_static) # Todo change to shared by default + add_library(hub ALIAS hub_shared) elseif(HUB_BUILD_SHARED) add_library(hub ALIAS hub_shared) else() @@ -357,13 +366,11 @@ include(CMakePackageConfigHelpers) configure_package_config_file( ${CMAKE_CURRENT_SOURCE_DIR}/Config.cmake.in "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake" - # INSTALL_DESTINATION "lib/cmake/${PROJECT_NAME}" INSTALL_DESTINATION "share/${PROJECT_NAME}/cmake/" NO_SET_AND_CHECK_MACRO NO_CHECK_REQUIRED_COMPONENTS_MACRO) write_basic_package_version_file( "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake" - # VERSION 1.0.0 VERSION ${${PROJECT_NAME}_VERSION} COMPATIBILITY AnyNewerVersion) diff --git a/src/Config.cmake.in b/src/Config.cmake.in index 6bfc3019d..055541cdd 100644 --- a/src/Config.cmake.in +++ b/src/Config.cmake.in @@ -18,8 +18,9 @@ set (HUB_VERSION "@hub_VERSION@") message(STATUS "Found hub: ${PACKAGE_PREFIX_DIR} (version \"${HUB_VERSION}\")") if(TARGET hub_shared OR TARGET hub_static) + if(TARGET hub_shared AND TARGET hub_static) - add_library(hub ALIAS hub_static) + add_library(hub ALIAS hub_shared) elseif(TARGET hub_shared) add_library(hub ALIAS hub_shared) else() From be14445c2b913d7bfa68fb7fb19e417d379c8d24 Mon Sep 17 00:00:00 2001 From: Gauthier Bouyjou Date: Wed, 24 Apr 2024 15:00:01 +0200 Subject: [PATCH 04/15] [cmake] fix only shared install --- src/CMakeLists.txt | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 87548549d..5aaeb7659 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -118,6 +118,7 @@ install( #export(EXPORT external FILE "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Targets.cmake") set(SRC_TARGETS) +list(APPEND SRC_TARGETS "$") ############################# Modules ################################# @@ -281,7 +282,7 @@ if(HUB_BUILD_STATIC) FILE ${PROJECT_NAME}Targets.cmake # DESTINATION lib/cmake/${PROJECT_NAME}) DESTINATION share/${PROJECT_NAME}/cmake) - #export(EXPORT ${PROJECT_NAME}_static FILE "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Targets.cmake") +# export(EXPORT ${PROJECT_NAME}_static FILE "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Targets.cmake") if(UNIX) set_target_properties(${PROJECT_NAME}_static PROPERTIES OUTPUT_NAME ${PROJECT_NAME}) @@ -308,6 +309,7 @@ if(HUB_BUILD_SHARED) ${PROJECT_NAME}_shared PUBLIC $ $ # Version.hpp + $ $ #PRIVATE #${HUB_EXTERNAL_DIR} @@ -315,7 +317,8 @@ if(HUB_BUILD_SHARED) endif() # (XCODE) target_compile_definitions(${PROJECT_NAME}_shared PUBLIC -DSRC_EXPORTS) - target_link_libraries(${PROJECT_NAME}_shared PRIVATE external ${REQUIRED_LIBS}) +# target_link_libraries(${PROJECT_NAME}_shared PRIVATE external ${REQUIRED_LIBS}) + target_link_libraries(${PROJECT_NAME}_shared PRIVATE ${REQUIRED_LIBS}) # PUBLIC $ $ # Version.hpp set_target_properties(${PROJECT_NAME}_shared PROPERTIES VERSION ${${PROJECT_NAME}_VERSION} @@ -338,7 +341,7 @@ if(HUB_BUILD_SHARED) EXPORT ${PROJECT_NAME}_shared FILE ${PROJECT_NAME}Targets.cmake DESTINATION share/${PROJECT_NAME}/cmake) - export(EXPORT ${PROJECT_NAME}_shared FILE "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Targets.cmake") +# export(EXPORT ${PROJECT_NAME}_shared FILE "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Targets.cmake") set_target_properties(${PROJECT_NAME}_shared PROPERTIES OUTPUT_NAME ${PROJECT_NAME}) From e2e2462afb39b48cc61eb79f435ab3835e588530 Mon Sep 17 00:00:00 2001 From: Gauthier Bouyjou Date: Wed, 24 Apr 2024 15:29:40 +0200 Subject: [PATCH 05/15] [cmake] fix static/shared install --- CMakeLists.txt | 24 ++++++++++++------------ src/CMakeLists.txt | 13 +++++++------ src/Config.cmake.in | 16 ++++++++++++---- 3 files changed, 31 insertions(+), 22 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 2296cc777..267bdc514 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -134,18 +134,18 @@ if(Boost_FOUND) message(STATUS "${HEADER_MSG} Boost found : ${Boost_DIR}") endif() -#find_package(TBB QUIET) -#set(HUB_TBB_TARGET) -#if(TBB_FOUND) -# if(TARGET tbb) -# set(HUB_TBB_TARGET tbb) -# elseif(TARGET TBB::tbb) -# set(HUB_TBB_TARGET TBB::tbb) -# else() -# message(FATAL_ERROR "tbb target not found") -# endif() -# add_definitions(-DHUB_USE_TBB) -#endif() +find_package(TBB QUIET) +set(HUB_TBB_TARGET) +if(TBB_FOUND) + if(TARGET tbb) + set(HUB_TBB_TARGET tbb) + elseif(TARGET TBB::tbb) + set(HUB_TBB_TARGET TBB::tbb) + else() + message(FATAL_ERROR "tbb target not found") + endif() + add_definitions(-DHUB_USE_TBB) +endif() find_package(PahoMqttCpp QUIET) if(PahoMqttCpp_FOUND) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 5aaeb7659..511ae0ea1 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -102,7 +102,7 @@ endif() install( # DIRECTORY ${HUB_EXTERNAL_DIR}/ DIRECTORY ${HUB_EXTERNAL_DIR}/serializer/ - DESTINATION include/serializer/ + DESTINATION include/external/serializer/ FILES_MATCHING PATTERN "*.hpp" PATTERN "*.h" @@ -227,6 +227,7 @@ if(HUB_BUILD_STATIC) $ # Version.hpp $ $ + $ # PRIVATE # ${HUB_EXTERNAL_DIR} ) @@ -279,7 +280,7 @@ if(HUB_BUILD_STATIC) # Todo export static lib install( EXPORT ${PROJECT_NAME}_static - FILE ${PROJECT_NAME}Targets.cmake + FILE ${PROJECT_NAME}StaticTargets.cmake # DESTINATION lib/cmake/${PROJECT_NAME}) DESTINATION share/${PROJECT_NAME}/cmake) # export(EXPORT ${PROJECT_NAME}_static FILE "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Targets.cmake") @@ -311,7 +312,8 @@ if(HUB_BUILD_SHARED) $ # Version.hpp $ $ - #PRIVATE + $ + #PRIVATE #${HUB_EXTERNAL_DIR} ) endif() # (XCODE) @@ -339,7 +341,7 @@ if(HUB_BUILD_SHARED) install( EXPORT ${PROJECT_NAME}_shared - FILE ${PROJECT_NAME}Targets.cmake + FILE ${PROJECT_NAME}SharedTargets.cmake DESTINATION share/${PROJECT_NAME}/cmake) # export(EXPORT ${PROJECT_NAME}_shared FILE "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Targets.cmake") @@ -348,9 +350,8 @@ if(HUB_BUILD_SHARED) endif() # (HUB_BUILD_SHARED) if(HUB_BUILD_SHARED OR HUB_BUILD_STATIC) - if(HUB_BUILD_SHARED AND HUB_BUILD_STATIC) - add_library(hub ALIAS hub_shared) + add_library(hub ALIAS hub_static) elseif(HUB_BUILD_SHARED) add_library(hub ALIAS hub_shared) else() diff --git a/src/Config.cmake.in b/src/Config.cmake.in index 055541cdd..165b4d5ba 100644 --- a/src/Config.cmake.in +++ b/src/Config.cmake.in @@ -1,7 +1,12 @@ @PACKAGE_INIT@ -include ( "${CMAKE_CURRENT_LIST_DIR}/hubTargets.cmake" ) +if (@HUB_BUILD_STATIC@) + include ( "${CMAKE_CURRENT_LIST_DIR}/hubStaticTargets.cmake" ) +endif() +if (@HUB_BUILD_SHARED@) + include ( "${CMAKE_CURRENT_LIST_DIR}/hubSharedTargets.cmake" ) +endif() set(CMAKE_CXX_STANDARD @CMAKE_CXX_STANDARD@) set(CMAKE_CXX_STANDARD_REQUIRED @CMAKE_CXX_STANDARD_REQUIRED@) @@ -10,8 +15,11 @@ if(UNIX) find_package(Threads REQUIRED) endif() -set(HUB_INCLUDE_DIR ${PACKAGE_PREFIX_DIR}/include) +if (@TBB_FOUND@) + find_package(TBB REQUIRED) +endif() +set(HUB_INCLUDE_DIR ${PACKAGE_PREFIX_DIR}/include) set (HUB_VERSION "@hub_VERSION@") @@ -20,9 +28,9 @@ message(STATUS "Found hub: ${PACKAGE_PREFIX_DIR} (version \"${HUB_VERSION}\")") if(TARGET hub_shared OR TARGET hub_static) if(TARGET hub_shared AND TARGET hub_static) - add_library(hub ALIAS hub_shared) + add_library(hub ALIAS hub_static) elseif(TARGET hub_shared) - add_library(hub ALIAS hub_shared) + add_library(hub ALIAS hub_shared) else() add_library(hub ALIAS hub_static) endif() From c8bc22418a0dc5a78ba89dfc8e8f79563c713a21 Mon Sep 17 00:00:00 2001 From: Gauthier Bouyjou Date: Wed, 24 Apr 2024 15:51:16 +0200 Subject: [PATCH 06/15] cleanup cmake file --- src/CMakeLists.txt | 7 +++++++ src/Config.cmake.in | 6 +++--- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 511ae0ea1..d3807c853 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -3,6 +3,7 @@ cmake_minimum_required(VERSION 3.8) find_package(Git) include(GetVersionFromGitTag) +set(HUB_LIBRARY) set(REQUIRED_LIBS ${HUB_TBB_TARGET}) message(STATUS "${HEADER_MSG} Version: ${${PROJECT_NAME}_VERSION}") @@ -289,6 +290,8 @@ if(HUB_BUILD_STATIC) set_target_properties(${PROJECT_NAME}_static PROPERTIES OUTPUT_NAME ${PROJECT_NAME}) endif() + list(APPEND HUB_LIBRARY hub_static) + endif() # static library # ############################ SHARED LIBRARY @@ -347,8 +350,12 @@ if(HUB_BUILD_SHARED) set_target_properties(${PROJECT_NAME}_shared PROPERTIES OUTPUT_NAME ${PROJECT_NAME}) + list(APPEND HUB_LIBRARY hub_shared) + endif() # (HUB_BUILD_SHARED) +message(STATUS "${HEADER_MSG} Libraries: (${HUB_LIBRARY})") + if(HUB_BUILD_SHARED OR HUB_BUILD_STATIC) if(HUB_BUILD_SHARED AND HUB_BUILD_STATIC) add_library(hub ALIAS hub_static) diff --git a/src/Config.cmake.in b/src/Config.cmake.in index 165b4d5ba..9ea0c065c 100644 --- a/src/Config.cmake.in +++ b/src/Config.cmake.in @@ -29,11 +29,11 @@ if(TARGET hub_shared OR TARGET hub_static) if(TARGET hub_shared AND TARGET hub_static) add_library(hub ALIAS hub_static) - elseif(TARGET hub_shared) + elseif(TARGET hub_shared) add_library(hub ALIAS hub_shared) - else() + else() add_library(hub ALIAS hub_static) - endif() + endif() else() message(FATAL_ERROR "static or shared library are not installed") endif() From f62e81cd015f5faf2718a9630a518f659befe07e Mon Sep 17 00:00:00 2001 From: Gauthier Bouyjou Date: Wed, 24 Apr 2024 15:56:07 +0200 Subject: [PATCH 07/15] update cmake --- src/CMakeLists.txt | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index d3807c853..14ee06593 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -3,7 +3,7 @@ cmake_minimum_required(VERSION 3.8) find_package(Git) include(GetVersionFromGitTag) -set(HUB_LIBRARY) +set(HUB_LIBRARIES) set(REQUIRED_LIBS ${HUB_TBB_TARGET}) message(STATUS "${HEADER_MSG} Version: ${${PROJECT_NAME}_VERSION}") @@ -286,11 +286,11 @@ if(HUB_BUILD_STATIC) DESTINATION share/${PROJECT_NAME}/cmake) # export(EXPORT ${PROJECT_NAME}_static FILE "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Targets.cmake") - if(UNIX) - set_target_properties(${PROJECT_NAME}_static PROPERTIES OUTPUT_NAME ${PROJECT_NAME}) - endif() +# if(UNIX) + set_target_properties(${PROJECT_NAME}_static PROPERTIES OUTPUT_NAME ${PROJECT_NAME}) +# endif() - list(APPEND HUB_LIBRARY hub_static) + list(APPEND HUB_LIBRARIES static) endif() # static library @@ -350,11 +350,11 @@ if(HUB_BUILD_SHARED) set_target_properties(${PROJECT_NAME}_shared PROPERTIES OUTPUT_NAME ${PROJECT_NAME}) - list(APPEND HUB_LIBRARY hub_shared) + list(APPEND HUB_LIBRARIES shared) endif() # (HUB_BUILD_SHARED) -message(STATUS "${HEADER_MSG} Libraries: (${HUB_LIBRARY})") +message(STATUS "${HEADER_MSG} Libraries: (${HUB_LIBRARIES})") if(HUB_BUILD_SHARED OR HUB_BUILD_STATIC) if(HUB_BUILD_SHARED AND HUB_BUILD_STATIC) From 61311f92750f70b222ac1e04ae76406b359b6c6f Mon Sep 17 00:00:00 2001 From: Gauthier Bouyjou Date: Wed, 24 Apr 2024 16:52:17 +0200 Subject: [PATCH 08/15] [cmake] binary option is false by default to reduce build testless ci --- bin/CMakeLists.txt | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/bin/CMakeLists.txt b/bin/CMakeLists.txt index 3f6628983..d8c9e6112 100644 --- a/bin/CMakeLists.txt +++ b/bin/CMakeLists.txt @@ -4,7 +4,7 @@ project(bin LANGUAGES CXX) if(TARGET hub) - option(HUB_ENABLE_BINS "Enable binaries" ON) + option(HUB_ENABLE_BINS "Enable binaries" OFF) if(HUB_ENABLE_BINS) set(bin_srcs) @@ -31,6 +31,14 @@ if(TARGET hub) COMMAND ${CMAKE_COMMAND} -E copy $ $) endif() endif() + + install( + TARGETS ${TARGET_NAME} + EXPORT ${TARGET_NAME} + DESTINATION ${ARCHITECTURE}/bin) +# set_target_properties(${TARGET_NAME} PROPERTIES INSTALL_RPATH ${ARCHITECTURE}/bin) + + endforeach() endif() From 490662959741ef1d1a46b6296d9c43b09c4cde1f Mon Sep 17 00:00:00 2001 From: gauthier Date: Wed, 24 Apr 2024 16:18:56 +0200 Subject: [PATCH 09/15] fix win install export/import --- src/CMakeLists.txt | 6 +-- src/Config.cmake.in | 5 ++- src/core/Macros.hpp | 69 ++------------------------------- src/core/base/Macros.hpp | 3 ++ src/core/base/traits/SizeOf.hpp | 2 +- 5 files changed, 15 insertions(+), 70 deletions(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 14ee06593..76249aa8c 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -286,9 +286,9 @@ if(HUB_BUILD_STATIC) DESTINATION share/${PROJECT_NAME}/cmake) # export(EXPORT ${PROJECT_NAME}_static FILE "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Targets.cmake") -# if(UNIX) - set_target_properties(${PROJECT_NAME}_static PROPERTIES OUTPUT_NAME ${PROJECT_NAME}) -# endif() + if(UNIX) + set_target_properties(${PROJECT_NAME}_static PROPERTIES OUTPUT_NAME ${PROJECT_NAME}) # multiple rules generate hub.lib (hub.dll do so) on windows + endif() list(APPEND HUB_LIBRARIES static) diff --git a/src/Config.cmake.in b/src/Config.cmake.in index 9ea0c065c..141daf3e8 100644 --- a/src/Config.cmake.in +++ b/src/Config.cmake.in @@ -30,10 +30,13 @@ if(TARGET hub_shared OR TARGET hub_static) if(TARGET hub_shared AND TARGET hub_static) add_library(hub ALIAS hub_static) elseif(TARGET hub_shared) + add_definitions(-DSRC_IMPORTS) # Import dll only for external use add_library(hub ALIAS hub_shared) else() - add_library(hub ALIAS hub_static) + add_library(hub ALIAS hub_static) endif() else() message(FATAL_ERROR "static or shared library are not installed") endif() + + diff --git a/src/core/Macros.hpp b/src/core/Macros.hpp index c30ed1517..dbee051eb 100644 --- a/src/core/Macros.hpp +++ b/src/core/Macros.hpp @@ -154,12 +154,14 @@ namespace hub { # if defined SRC_STATIC # define SRC_API +# elif defined SRC_IMPORTS +# define SRC_API __declspec( dllimport ) + # elif defined SRC_EXPORTS # define SRC_API __declspec( dllexport ) # else -# error "unable to import from build environment" -# define SRC_API __declspec( dllimport ) +# error "unable to recognize situation" # endif #else // unix @@ -614,67 +616,4 @@ sizeOf( const T& t, const Ts&... ts ) { #endif -/////////////////////////////////////////////// PRETTY BYTES -///////////////////////////////////////////////// - -//// source : https://www.mbeckler.org/blog/?p=114 -//// Prints to the provided buffer a nice number of bytes (KB, MB, GB, etc) -/// \brief pretty_bytes -static std::string pretty_bytes( hub::Size_t bytes ) { - // std::string str; - - constexpr auto buffSize = 32; - char buff[buffSize] { 0 }; - static CONSTEXPR17 std::string_view suffixes[] { "Bytes", "Ko", "Mo", "Go", "To", "Po", "Eo" }; - uint64_t s = 0; // which suffix to use - double count = bytes; - constexpr auto kilo = 1'000; - - while ( count >= kilo && s < 7 ) { - s++; - count /= kilo; - } - - /// \brief count - if ( count - floor( count ) == 0.0 ) { -#ifdef WIN32 - snprintf( buff, buffSize, "%d %s", (int)count, suffixes[s].data() ); -#else -# ifdef OS_MACOS - snprintf( buff, buffSize, "%d %s", (int)count, suffixes[s].data() ); -# else - sprintf( buff, "%d %s", (int)count, suffixes[s].data() ); -# endif -#endif - } - /// \brief else - else - { -#ifdef WIN32 - snprintf( buff, buffSize, "%.1f %s", count, suffixes[s].data() ); -#else -# ifdef OS_MACOS - snprintf( buff, buffSize, "%.1f %s", count, suffixes[s].data() ); -# else - sprintf( buff, "%.1f %s", count, suffixes[s].data() ); -# endif -#endif - } - - // return std::string( buff ); - /// \brief return - return buff; -} -#define PRETTY_BYTES( t ) hub::pretty_bytes( t ) - -/////////////////////////////////////////////// STATIC WARNING -///////////////////////////////////////////////// - -//// Note: using STATIC_WARNING_TEMPLATE changes the meaning of a program in a small way. -//// It introduces a member/variable declaration. This means at least one byte of space -//// in each structure/class instantiation. STATIC_WARNING should be preferred in any -//// non-template situation. -//// 'token' must be a program-wide unique identifier. -// STATIC_WARNING(cond, msg) PP_CAT(PP_CAT(_localvar_, token),__LINE__) - } // namespace hub diff --git a/src/core/base/Macros.hpp b/src/core/base/Macros.hpp index 5a0797b09..a525f8222 100644 --- a/src/core/base/Macros.hpp +++ b/src/core/base/Macros.hpp @@ -152,6 +152,9 @@ namespace hub { # if defined SRC_STATIC # define SRC_API +# elif defined SRC_IMPORTS +# define SRC_API __declspec( dllimport ) + # elif defined SRC_EXPORTS # define SRC_API __declspec( dllexport ) diff --git a/src/core/base/traits/SizeOf.hpp b/src/core/base/traits/SizeOf.hpp index d252b24ee..a47be9e0e 100644 --- a/src/core/base/traits/SizeOf.hpp +++ b/src/core/base/traits/SizeOf.hpp @@ -143,7 +143,7 @@ sizeOf( const T& t, const Ts&... ts ) { /// \param bytes /// \return /// -std::string pretty_bytes( hub::Size_t bytes ); +std::string SRC_API pretty_bytes( hub::Size_t bytes ); #define PRETTY_BYTES( t ) hub::pretty_bytes( t ) } From 1368a6974f4b333eda481f70fde2b1138cfd911b Mon Sep 17 00:00:00 2001 From: gauthier Date: Fri, 26 Apr 2024 14:21:39 +0200 Subject: [PATCH 10/15] [cmake] WIP fixup unable to find hub.lib --- src/CMakeLists.txt | 91 +++++++++++++++++++++++++++++++++++++++------ src/Config.cmake.in | 3 +- 2 files changed, 82 insertions(+), 12 deletions(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 76249aa8c..6413a1391 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -234,22 +234,55 @@ if(HUB_BUILD_STATIC) ) endif() # (XCODE) + target_compile_features(${PROJECT_NAME}_static PUBLIC cxx_std_17) target_compile_definitions(${PROJECT_NAME}_static PUBLIC -DSRC_STATIC) # target_link_libraries(${PROJECT_NAME}_static PRIVATE external ${REQUIRED_LIBS}) target_link_libraries(${PROJECT_NAME}_static PRIVATE ${REQUIRED_LIBS}) # Todo export static lib -# set_target_properties(${PROJECT_NAME}_static PROPERTIES VERSION ${${PROJECT_NAME}_VERSION} -# SOVERSION ${${PROJECT_NAME}_VERSION_MAJOR}) +# set_target_properties(${PROJECT_NAME}_static PROPERTIES VERSION ${${PROJECT_NAME}_VERSION} +# SOVERSION ${${PROJECT_NAME}_VERSION_MAJOR} +# OUTPUT_NAME ${PROJECT_NAME} +# ) install( TARGETS ${PROJECT_NAME}_static EXPORT ${PROJECT_NAME}_static - # DESTINATION lib/${ARCHITECTURE} +# # DESTINATION lib/${ARCHITECTURE} DESTINATION ${ARCHITECTURE}/lib - RUNTIME DESTINATION ${ARCHITECTURE}/bin +# #RUNTIME DESTINATION ${ARCHITECTURE}/bin # Todo fix ) + # Copy lib file with the name of dll (implib not found when using dll) + if(MSVC) + #FILES ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_BUILD_TYPE}/${PROJECT_NAME}${CMAKE_POSTFIX}.pdb +if(${CMAKE_GENERATOR} MATCHES "Visual Studio.*") + install( + FILES ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_BUILD_TYPE}/${PROJECT_NAME}_static${CMAKE_POSTFIX}.lib + DESTINATION ${ARCHITECTURE}/lib + RENAME ${PROJECT_NAME}${CMAKE_POSTFIX}.lib + ) +else() + install( + FILES ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}_static${CMAKE_POSTFIX}.lib + DESTINATION ${ARCHITECTURE}/lib + RENAME ${PROJECT_NAME}${CMAKE_POSTFIX}.lib + ) +endif() + install( + CODE " + execute_process( + COMMAND ${CMAKE_COMMAND} -E remove ${PROJECT_NAME}_static${CMAKE_POSTFIX}.lib + WORKING_DIRECTORY ${CMAKE_INSTALL_PREFIX}/${ARCHITECTURE}/lib/ + ) + " +# COMPONENT my_component + ) +# install(CODE "execute_process(COMMAND \"${CMAKE_COMMAND} -E remove hub_staticd.lib\" WORKING_DIRECTORY ${CMAKE_INSTALL_PREFIX}/${ARCHITECTURE}/lib/)") + # Todo remove hub_static.lib file (only on windows) + #COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_CURRENT_BINARY_DIR}/tests/DartConfiguration.tcl + endif() + if(MSVC) if(${CMAKE_BUILD_TYPE} STREQUAL "RelWithDebInfo") target_compile_options(${PROJECT_NAME}_static PRIVATE /Zi) @@ -261,7 +294,7 @@ if(HUB_BUILD_STATIC) set_target_properties( ${PROJECT_NAME}_static PROPERTIES # COMPILE_PDB_NAME ${PROJECT_NAME}${CMAKE_POSTFIX} - COMPILE_PDB_NAME ${PROJECT_NAME} COMPILE_PDB_OUTPUT_DIR ${CMAKE_BINARY_DIR} + COMPILE_PDB_NAME ${PROJECT_NAME}_static COMPILE_PDB_OUTPUT_DIR ${CMAKE_BINARY_DIR} # DEBUG_POSTFIX "${CMAKE_DEBUG_POSTFIX}" ) endif() @@ -286,9 +319,9 @@ if(HUB_BUILD_STATIC) DESTINATION share/${PROJECT_NAME}/cmake) # export(EXPORT ${PROJECT_NAME}_static FILE "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Targets.cmake") - if(UNIX) + # if(NOT MSVC) set_target_properties(${PROJECT_NAME}_static PROPERTIES OUTPUT_NAME ${PROJECT_NAME}) # multiple rules generate hub.lib (hub.dll do so) on windows - endif() + # endif() list(APPEND HUB_LIBRARIES static) @@ -321,24 +354,60 @@ if(HUB_BUILD_SHARED) ) endif() # (XCODE) + target_compile_features(${PROJECT_NAME}_shared PUBLIC cxx_std_17) target_compile_definitions(${PROJECT_NAME}_shared PUBLIC -DSRC_EXPORTS) # target_link_libraries(${PROJECT_NAME}_shared PRIVATE external ${REQUIRED_LIBS}) target_link_libraries(${PROJECT_NAME}_shared PRIVATE ${REQUIRED_LIBS}) # PUBLIC $ $ # Version.hpp set_target_properties(${PROJECT_NAME}_shared PROPERTIES VERSION ${${PROJECT_NAME}_VERSION} - SOVERSION ${${PROJECT_NAME}_VERSION_MAJOR}) + SOVERSION ${${PROJECT_NAME}_VERSION_MAJOR} + OUTPUT_NAME ${PROJECT_NAME} +# RUNTIME_OUTPUT_NAME ${PROJECT_NAME} +# PREFIX "" +# SUFFIX ".dll" +# VS_GLOBAL_IgnoreImportLibrary "false" +# ARCHIVE_OUTPUT_NAME ${PROJECT_NAME}_shared +# IMPORT_PREFIX "" +# IMPORT_SUFFIX ".lib" + ) + install( TARGETS ${PROJECT_NAME}_shared EXPORT ${PROJECT_NAME}_shared - DESTINATION ${ARCHITECTURE}/bin # Linux + #DESTINATION ${ARCHITECTURE}/bin # Linux + DESTINATION ${ARCHITECTURE}/lib # Linux RUNTIME DESTINATION ${ARCHITECTURE}/bin # Windows + #RUNTIME DESTINATION ${ARCHITECTURE}/lib # Windows + #RENAME ${PROJECT_NAME} ) if(MSVC) +# if (HUB_BUILD_STATIC) +# add_custom_command(TARGET ${PROJECT_NAME}_shared POST_BUILD +# COMMAND copy ${CMAKE_CURRENT_BINARY_DIR}/hub_staticd.lib ${CMAKE_CURRENT_BYNARY_DIR}/hubd.lib +# ) +# add_custom_command( +# TARGET ${PROJECT_NAME}_shared +# COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/hub_staticd.lib ${CMAKE_CURRENT_BYNARY_DIR}/hubd.lib) +# endif() + # target_compile_options(${PROJECT_NAME}_shared PRIVATE /noimplib) + # Tell linker to include symbol data + # set_target_properties(${PROJECT_NAME}_shared PROPERTIES LINK_FLAGS + # "/noimplib") + if(NOT ${CMAKE_BUILD_TYPE} STREQUAL "Release") install(FILES $ DESTINATION ${ARCHITECTURE}/bin) + + + # Set file name & location + #set_target_properties( + # ${PROJECT_NAME}_static + # PROPERTIES # COMPILE_PDB_NAME ${PROJECT_NAME}${CMAKE_POSTFIX} + # COMPILE_PDB_NAME ${PROJECT_NAME}_static COMPILE_PDB_OUTPUT_DIR ${CMAKE_BINARY_DIR} + # # DEBUG_POSTFIX "${CMAKE_DEBUG_POSTFIX}" + #) endif() endif() @@ -348,7 +417,6 @@ if(HUB_BUILD_SHARED) DESTINATION share/${PROJECT_NAME}/cmake) # export(EXPORT ${PROJECT_NAME}_shared FILE "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Targets.cmake") - set_target_properties(${PROJECT_NAME}_shared PROPERTIES OUTPUT_NAME ${PROJECT_NAME}) list(APPEND HUB_LIBRARIES shared) @@ -358,7 +426,8 @@ message(STATUS "${HEADER_MSG} Libraries: (${HUB_LIBRARIES})") if(HUB_BUILD_SHARED OR HUB_BUILD_STATIC) if(HUB_BUILD_SHARED AND HUB_BUILD_STATIC) - add_library(hub ALIAS hub_static) + #add_library(hub ALIAS hub_static) + add_library(hub ALIAS hub_shared) # default elseif(HUB_BUILD_SHARED) add_library(hub ALIAS hub_shared) else() diff --git a/src/Config.cmake.in b/src/Config.cmake.in index 141daf3e8..aa876e57c 100644 --- a/src/Config.cmake.in +++ b/src/Config.cmake.in @@ -28,7 +28,8 @@ message(STATUS "Found hub: ${PACKAGE_PREFIX_DIR} (version \"${HUB_VERSION}\")") if(TARGET hub_shared OR TARGET hub_static) if(TARGET hub_shared AND TARGET hub_static) - add_library(hub ALIAS hub_static) + # add_library(hub ALIAS hub_static) + add_library(hub ALIAS hub_shared) # default elseif(TARGET hub_shared) add_definitions(-DSRC_IMPORTS) # Import dll only for external use add_library(hub ALIAS hub_shared) From a54bc4585f0ac493e40078ebf58043f6f16c34ef Mon Sep 17 00:00:00 2001 From: gauthier Date: Tue, 30 Apr 2024 15:00:42 +0200 Subject: [PATCH 11/15] remove duplicated macros file --- src/core/Macros.hpp | 619 -------------------------------------------- 1 file changed, 619 deletions(-) delete mode 100644 src/core/Macros.hpp diff --git a/src/core/Macros.hpp b/src/core/Macros.hpp deleted file mode 100644 index dbee051eb..000000000 --- a/src/core/Macros.hpp +++ /dev/null @@ -1,619 +0,0 @@ -/******************************************************************************* -* Copyright (c) 2021 IRIT, computer science research laboratory, Toulouse, France. -* Please visit https://www.irit.fr/tplay/. -* -* All rights reserved. -* This code belongs to tplay/hub project (https://github.com/T-PLAY/hub). -* -* This Source Code Form is subject to the terms of the Mozilla Public -* License, v. 2.0. If a copy of the MPL was not distributed with this -* file, You can obtain one at https://mozilla.org/MPL/2.0/. -* -* Initial Contributors: -* - Nicolas Mellado (IRIT) -* - Gauthier Bouyjou (IRIT) -*******************************************************************************/ - -#pragma once - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "Configuration.hpp" - -#ifdef HUB_USE_BOOST -# include -#endif - -namespace hub { - -// Compiler identification - -// OS and architecture identification -#if defined( _WIN32 ) || defined( _WIN64 ) // ------------------------------ Windows - // Shlwapi.h also define this macro -# ifndef OS_WINDOWS -# define OS_WINDOWS -# endif -# if defined( _M_X64 ) || defined( __x86_64__ ) -# define ARCH_X64 -# elif defined( i386 ) || defined( __i386__ ) || defined( __i386 ) || defined( _M_IX86 ) -# define ARCH_X86 -# elif defined( __arm__ ) || defined( __arm ) || defined( _M_ARM ) -# define ARCH_ARM32 -# elif defined( __aarch64__ ) || defined( _M_ARM64 ) -# define ARCH_ARM64 -# else -# error unsupported arch -# endif -#elif defined( __APPLE__ ) || defined( __MACH__ ) // ------------------------ Mac OS -# define OS_MACOS -#elif defined( __linux__ ) || defined( __CYGWIN__ ) // ---------------------- Linux -# define OS_LINUX -#else -#ifndef CPP_CHECK -# error unsupported OS -#endif -#endif - -#if defined( __GNUC__ ) - -#define COMPILER_GCC -#define GCC_VERSION __GNUC__ - -#elif defined( __clang__ ) -# define COMPILER_CLANG -# define CLANG_VERSION __clang_major__ - -#elif defined( _MSC_VER ) -//#if _MSC_VER >= 1900 -# define COMPILER_MSVC -# define _USE_MATH_DEFINES -#else -#ifndef CPP_CHECK -# error unsupported compiler -#endif -#endif - - -// Check arch for macos and linux -#if defined( OS_MACOS ) || defined( OS_LINUX ) -# if defined( __i386__ ) -# define ARCH_X86 -# elif defined( __x86_64__ ) || defined( __x86_64 ) -# define ARCH_X64 -# elif defined( __arm__ ) || defined( __arm ) -# define ARCH_ARM32 -# elif defined( __aarch64__ ) || defined( __aarch64 ) -# define ARCH_ARM64 -# else -# error unsupported arch -# endif -#endif - -// Todo : endianness, pointer sixe - -// Build configuration - -// This tells apart between debug and release builds : -// DEBUG is defined in debug builds and RELEASE in release builds. -// Additionally REL_DEB is defined on release build with debug info -// Also the macro ON_DEBUG() can be used to execute an expression only on debug. -// By default, debug has assert macros enabled. In release builds - -//// Make sure all "debug" macros are defined - -// Explicit compiler warning disables. - -#if defined( COMPILER_GCC ) -#endif -#if defined( COMPILER_MSVC ) -# pragma warning( disable : 4244 ) // Conversion from double to float loses data. -# pragma warning( disable : 4251 ) // stl dllexports -# pragma warning( disable : 4267 ) // conversion from size_t to uint -# pragma warning( disable : 4018 ) // signed/unsigned mismatch -// DLL-interface class 'class_2' #pragma warning(disable: 4577) // noexcept used with no -# ifndef NOMINMAX -# define NOMINMAX -# endif -#endif - -// Debug log message. - -#define ENABLE_DEBUG_MSG - -#if defined( ENABLE_DEBUG_MSG ) && defined( DEBUG ) -# define DEBUG_MSG( str ) \ - do { \ - std::cout << str << std::endl; \ - } while ( false ) - -#else -# define DEBUG_MSG( str ) \ - do { \ - } while ( false ) -#endif - -// Dll import/export. -// You must define SRC_STATIC to force static link for external use (.lib) - -//#ifndef SRC_STATIC -//#define SRC_STATIC -//#endif - -#ifdef OS_WINDOWS -# if defined SRC_STATIC -# define SRC_API - -# elif defined SRC_IMPORTS -# define SRC_API __declspec( dllimport ) - -# elif defined SRC_EXPORTS -# define SRC_API __declspec( dllexport ) - -# else -# error "unable to recognize situation" -# endif - -#else // unix -# define SRC_API -#endif - -#ifdef WIN32 -# define CPLUSPLUS_VERSION _MSVC_LANG -#else -# define CPLUSPLUS_VERSION __cplusplus -#endif - -#if ( CPLUSPLUS_VERSION >= 202001L ) -# define CPP_VERSION 20 -# define CONSTEXPR17 constexpr -# define CONSTEXPR20 constexpr -# define CONSTEXPR constexpr -#elif ( CPLUSPLUS_VERSION >= 201703L ) -# define CPP_VERSION 17 -# define CONSTEXPR17 constexpr -# define CONSTEXPR20 -# define CONSTEXPR constexpr -#elif ( CPLUSPLUS_VERSION >= 201402L ) -# define CPP_VERSION 14 -# define CONSTEXPR17 -# define CONSTEXPR20 -# define CONSTEXPR constexpr -#else -# define CPP_VERSION 14 -# define CONSTEXPR17 -# define CONSTEXPR20 -# define CONSTEXPR const -#endif - -// #define HUB_DEBUG_INPUT_OUTPUT -#ifdef HUB_DEBUG_INPUT_OUTPUT -# define HUB_DEBUG_INPUT -# define HUB_DEBUG_OUTPUT - -#endif - -#ifdef WIN32 -# define FILE_NAME \ - std::string( "/\\" __FILE__ ) \ - .substr( std::max( std::string( "/\\" __FILE__ ).find_last_of( '\\' ), \ - std::string( "/\\" __FILE__ ).find_last_of( '/' ) ) + \ - 1 ) - -#else // unix system -# ifdef COMPILER_GCC - -# if GCC_VERSION < 12 -# define FILE_NAME \ - std::string( "/\\" __FILE__ ) \ - .substr( std::max( std::string( "/\\" __FILE__ ).find_last_of( '\\' ), \ - std::string( "/\\" __FILE__ ).find_last_of( '/' ) ) + \ - 1 ) -# else -# define FILE_NAME std::string( __FILE_NAME__ ) -# endif - -# else -# define FILE_NAME std::string( __FILE_NAME__ ) -# endif - -#endif - -#define FILE_NAME_WITHOUT_EXTENSION FILE_NAME.substr( 0, FILE_NAME.find_first_of( '.' ) ) - -#define HEADER \ - "\033[" << std::to_string( 31 + reinterpret_cast( this ) % 7 ) << "m[" \ - << FILE_NAME_WITHOUT_EXTENSION << ":" << (uintptr_t)this % 100 << "]\033[0m " - -#ifdef WIN32 -# define MAX_STACK_SIZE 100'000 -#else -# define MAX_STACK_SIZE 100'000 // 100Ko -#endif - -} // namespace hub - -/////////////////////////////////////////////////////////////////////////////////// - -#if CPP_VERSION <= 14 -# include "traits/std_any.hpp" -#else -# include -#endif - -namespace std { - -#if CPP_VERSION < 20 - -template -struct remove_cvref : std::remove_cv> {}; - -template -using remove_cvref_t = typename remove_cvref::type; - -#endif - -////////////////////////////////// - -#if CPP_VERSION < 17 - -template -static constexpr auto is_same_v = is_same::value; - -template -static constexpr bool is_arithmetic_v = is_arithmetic::value; - -template -static constexpr bool is_array_v = is_array::value; - -#endif - -#if CPP_VERSION <= 14 // std::void_t not supported by AppleClang (c++14) - -using string_view = string; - -template -static constexpr bool is_enum_v = is_enum::value; - -template -static constexpr bool is_pointer_v = is_pointer::value; - -template -static constexpr bool is_base_of_v = is_base_of::value; - -#endif - -#if defined( OS_MACOS ) && CPP_VERSION <= 14 // std::void_t not supported by AppleClang (c++14) - -template -struct make_void { - typedef void type; -}; - -template -using void_t = typename make_void::type; - -#endif - -} // namespace std - -/////////////////////////////////////////////////////////////////////////////////// - -namespace hub { - -#if CPP_VERSION >= 20 - -template -concept isContainer = !std::is_same() && requires( T t ) { - t.begin(); - t.end(); - // std::begin( t ); - // std::end( t ); -}; - -#else -template -using has_begin_t = decltype( std::begin( std::declval() ) ); - -template > -struct has_begin : std::false_type {}; - -template -struct has_begin>> : std::true_type {}; - -template -static constexpr bool has_begin_v = has_begin::value; - -//////////// - -template -using has_end_t = decltype( std::end( std::declval() ) ); - -template > -struct has_end : std::false_type {}; - -template -struct has_end>> : std::true_type {}; - -template -static constexpr bool has_end_v = has_end::value; -template -constexpr bool isContainer = !std::is_same() && has_begin_v && has_end_v; -#endif - -static_assert( isContainer> ); -static_assert( isContainer> ); -static_assert( !isContainer ); -static_assert( !isContainer ); - -////////////////////////////////////////////////////////// TYPE_NAME -////////////////////////////////////////// - -template -using has_name_t = decltype( T::name() ); - -template > -struct has_name : std::false_type {}; - -template -struct has_name>> : std::true_type {}; - -template -static constexpr bool has_name_v = has_name::value; - -////////////// - -template -using nameable_t = decltype( name( std::declval() ) ); - -template > -struct nameable : std::false_type {}; - -template -struct nameable>> : std::true_type {}; - -template -static constexpr bool nameable_v = nameable::value; - -template -static typename std::enable_if_t && !has_name_v, std::string> -typeName( const T& ) { -#ifdef HUB_USE_BOOST - return boost::typeindex::type_id().pretty_name(); -#else - return typeid( T ).name(); -#endif -} - -template -static typename std::enable_if_t && has_name_v, std::string> -typeName( const T& ) { - return T::name(); -} - -template -static typename std::enable_if_t, std::string> typeName( const T& t ) { - static_assert( !has_name_v ); - return name( t ); -} - -static std::string typeName( const std::string& ) { - return "string"; -} -static std::string typeName( int ) { - return "int"; -} -static std::string typeName( double ) { - return "double"; -} -static std::string typeName( bool ) { - return "bool"; -} -static std::string typeName( float ) { - return "float"; -} -static std::string typeName( char ) { - return "char"; -} -static std::string typeName( unsigned char ) { - return "uchar"; -} -static std::string typeName( const char* ) { - return "cstr"; -} -static std::string typeName( long long ) { - return "long long"; -} - -template -static std::string typeName( const std::vector& ) { - return "vector<" + typeName( T() ) + ">"; -} - -template -static std::string typeName( const std::set& ) { - return "set<" + typeName( T() ) + ">"; -} - -template -static std::string typeName( const std::pair& ) { - return "pair<" + typeName( First() ) + ", " + typeName( Second() ) + ">"; -} - -template -static std::string typeName( const std::map& ) { - return "map<" + typeName( Key() ) + ", " + typeName( Value() ) + ">"; -} - -template -static void typeName_recurse( std::string& str ) { - str += ", " + typeName( T() ); - if CONSTEXPR17 ( sizeof...( Ts ) > 0 ) { typeName_recurse( str ); } -} - -template -static std::string typeName( const std::tuple& ) { - std::string str = "tuple<"; - str += typeName( T() ); -#if CPP_VERSION > 14 - if CONSTEXPR17 ( sizeof...( Ts ) > 0 ) { typeName_recurse( str ); } -#endif - str += ">"; - return str; -} - -template -static std::string typeName() { - std::string str; - str += typeName( T() ); - if constexpr ( sizeof...( Ts ) > 0 ) { str += ", " + typeName(); } - return str; -} - -// U>>, - -#define TYPE_NAME( _Type_ ) hub::typeName( _Type_ ) - -/////////////////////////////////////////// TYPE_ID //////////////////////////////////////////////// - -using TypeId_t = int; - -template -using has_id_t = decltype( T::id ); - -template > -struct has_id : std::false_type {}; - -template -struct has_id>> : std::true_type {}; - -template -static constexpr bool has_id_v = has_id::value; - -namespace Types { -enum Cpp : TypeId_t { NONE = 0, INT /* 1 */, BOOL /* 2 */, Cpp_Count /* 3 */ }; -} -static_assert( Types::Cpp_Count == 3 ); - -template -static constexpr typename std::enable_if_t, TypeId_t> getTypeId( const T& ) { - return T::id; -} - -template -static constexpr typename std::enable_if_t, TypeId_t> getTypeId( const T& ) { - return typeid( T ).hash_code(); -} - -constexpr auto getTypeId( int ) -> TypeId_t { - return Types::Cpp::INT; -} - -constexpr auto getTypeId( bool ) -> TypeId_t { - return Types::Cpp::BOOL; -} - -#define TYPE_ID( _Type_ ) hub::getTypeId( _Type_() ) - -#if CPP_VERSION >= 20 -# define REQUIRES( _CONST_, _COND_, _TYPE_ ) requires( _COND_ ) _CONST_ _TYPE_ -#else -# define REQUIRES( _CONST_, _COND_, _TYPE_ ) \ - _CONST_ typename std::enable_if_t<( _COND_ ), _TYPE_> -#endif - -////#undef assert - -using Data_t = unsigned char; -using Datas_t = std::vector; -using Size_t = uint64_t; // max = 18'446'744'073'709'551'616 ~= 18 exa - -#if CPP_VERSION >= 20 -template -constexpr auto sizeOf() { - if constexpr ( requires { T::Size; } ) { return T::Size; } - else { - return sizeof( T ); - } -} - -template -requires( sizeof...( Ts ) > 1 ) constexpr auto sizeOf() { - return ( sizeOf() + ... ); -} - -#else - -template -using has_Size_t = decltype( T::Size ); - -template > -struct has_Size : std::false_type {}; - -template -struct has_Size>> : std::true_type {}; - -template -static constexpr bool has_Size_v = has_Size::value; - -//////////////////////// - -template -using has_size_t = decltype( std::declval().size() ); - -template > -struct has_size : std::false_type {}; - -template -struct has_size>> : std::true_type {}; - -template -static constexpr bool has_size_v = has_size::value; - -template -REQUIRES( static constexpr, has_Size_v, decltype( sizeof( int ) ) ) -sizeOf() { - return T::Size; -} -template -REQUIRES( static constexpr, !has_Size_v, decltype( sizeof( int ) ) ) -sizeOf() { - return sizeof( T ); -} - -template -REQUIRES( constexpr, sizeof...( Ts ) > 1, decltype( sizeof( int ) ) ) -sizeOf() { - static_assert( sizeof...( Ts ) > 1 ); - return ( sizeOf() + ... ); -} - -template -REQUIRES( static constexpr, has_size_v, decltype( sizeof( int ) ) ) -sizeOf( const T& t ) { - return t.size(); -} - -template -REQUIRES( constexpr, sizeof...( Ts ) > 0, decltype( sizeof( int ) ) ) -sizeOf( const T& t, const Ts&... ts ) { - - if constexpr ( sizeof...( Ts ) > 0 ) { return sizeOf( t ) + sizeOf( ts... ); } - else { - return sizeOf( t ); - } -} - -#endif - -} // namespace hub From dd5950aaac7798a009d5199471c324c242b20e87 Mon Sep 17 00:00:00 2001 From: gauthier Date: Tue, 30 Apr 2024 15:56:49 +0200 Subject: [PATCH 12/15] [cmake] fix no hub.lib found when static shared build --- CMakeLists.txt | 5 ++++- bin/CMakeLists.txt | 3 --- src/CMakeLists.txt | 25 ++++++++++++++++++++++--- 3 files changed, 26 insertions(+), 7 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 267bdc514..e3eaf38af 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -211,7 +211,10 @@ if(HUB_ENABLE_EXAMPLES) add_subdirectory(examples) endif() -add_subdirectory(bin) +option(HUB_ENABLE_BINS "Enable binaries" OFF) +if(HUB_ENABLE_BINS) + add_subdirectory(bin) +endif() if(NOT WIN32) # Todo check if cppCheck exe exists on current system diff --git a/bin/CMakeLists.txt b/bin/CMakeLists.txt index d8c9e6112..e201d2c3f 100644 --- a/bin/CMakeLists.txt +++ b/bin/CMakeLists.txt @@ -4,8 +4,6 @@ project(bin LANGUAGES CXX) if(TARGET hub) - option(HUB_ENABLE_BINS "Enable binaries" OFF) - if(HUB_ENABLE_BINS) set(bin_srcs) foreach(HUB_MODULE ${HUB_MODULES}) @@ -41,6 +39,5 @@ if(TARGET hub) endforeach() - endif() endif() diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 6413a1391..74e21862d 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -245,6 +245,24 @@ if(HUB_BUILD_STATIC) # OUTPUT_NAME ${PROJECT_NAME} # ) +if (MSVC AND HUB_BUILD_SHARED) + if(${CMAKE_GENERATOR} MATCHES "Visual Studio.*") + add_custom_command( + TARGET ${PROJECT_NAME}_static + COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_BUILD_TYPE}/${PROJECT_NAME}_static${CMAKE_POSTFIX}.lib + ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_BUILD_TYPE}/${PROJECT_NAME}${CMAKE_POSTFIX}.lib + # COMMAND ${CMAKE_COMMAND} -E remove ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_BUILD_TYPE}/${PROJECT_NAME}_static${CMAKE_POSTFIX}.lib + ) + else() + add_custom_command( + TARGET ${PROJECT_NAME}_static + COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}_static${CMAKE_POSTFIX}.lib + ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}${CMAKE_POSTFIX}.lib + # COMMAND ${CMAKE_COMMAND} -E remove ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}_static${CMAKE_POSTFIX}.lib + ) + endif() +endif() + install( TARGETS ${PROJECT_NAME}_static EXPORT ${PROJECT_NAME}_static @@ -319,9 +337,10 @@ endif() DESTINATION share/${PROJECT_NAME}/cmake) # export(EXPORT ${PROJECT_NAME}_static FILE "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Targets.cmake") - # if(NOT MSVC) - set_target_properties(${PROJECT_NAME}_static PROPERTIES OUTPUT_NAME ${PROJECT_NAME}) # multiple rules generate hub.lib (hub.dll do so) on windows - # endif() + # todo check + if(NOT MSVC) + set_target_properties(${PROJECT_NAME}_static PROPERTIES OUTPUT_NAME ${PROJECT_NAME}) # multiple rules generate hub.lib (hub.dll do so) on windows + endif() list(APPEND HUB_LIBRARIES static) From 627761b0e6d3b44e8c9390fcac2379cf4876dece Mon Sep 17 00:00:00 2001 From: Gauthier Bouyjou Date: Tue, 30 Apr 2024 19:35:22 +0200 Subject: [PATCH 13/15] [cmake] cleanup --- CMakeLists.txt | 2 +- src/CMakeLists.txt | 224 ++++++++++++-------------------------------- src/Config.cmake.in | 20 ++-- 3 files changed, 73 insertions(+), 173 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index e3eaf38af..ee8c44d0a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -211,7 +211,7 @@ if(HUB_ENABLE_EXAMPLES) add_subdirectory(examples) endif() -option(HUB_ENABLE_BINS "Enable binaries" OFF) +option(HUB_ENABLE_BINS "Enable binaries" ON) if(HUB_ENABLE_BINS) add_subdirectory(bin) endif() diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 74e21862d..3059c6d7f 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -21,7 +21,7 @@ endif() option(HUB_BUILD_STATIC "Build static library" ON) option(HUB_BUILD_SHARED "Build shared library" ON) -########################## OS specifics ########################### +########################## OS/Compiler Specifics ########################### if(MINGW) if(CLANG) @@ -66,7 +66,8 @@ elseif(UNIX) if(Clang) elseif(GCC) - message(FATAL_ERROR "not supported") + message(FATAL_ERROR "never happened") + elseif(GNU) else() @@ -81,7 +82,7 @@ if (REQUIRED_LIBS) message(STATUS "${HEADER_MSG} Dependencies: ${REQUIRED_LIBS}") endif() -############################# Externals ################################# +############################# Compile Externals ################################# file(GLOB_RECURSE external_sources ${HUB_EXTERNAL_DIR}/*.cpp ${HUB_EXTERNAL_DIR}/*.c) file(GLOB_RECURSE external_headers ${HUB_EXTERNAL_DIR}/*.hpp ${HUB_EXTERNAL_DIR}/*.h) @@ -90,18 +91,12 @@ if(NOT HUB_USE_ZPP_BITS) list(REMOVE_ITEM external_headers ${HUB_EXTERNAL_DIR}/zpp_bits.h) endif() add_library(external OBJECT ${external_headers} ${external_sources}) -target_include_directories( - external - # PUBLIC $ $ # Version.hpp - PRIVATE # PUBLIC - ${HUB_EXTERNAL_DIR}) +target_include_directories(external PRIVATE ${HUB_EXTERNAL_DIR}) if(UNIX) set_property(TARGET external PROPERTY POSITION_INDEPENDENT_CODE ON) # gltfpack endif() -#set(external_headers_only ${HUB_EXTERNAL_DIR}/serializer/serializer.h) install( -# DIRECTORY ${HUB_EXTERNAL_DIR}/ DIRECTORY ${HUB_EXTERNAL_DIR}/serializer/ DESTINATION include/external/serializer/ FILES_MATCHING @@ -110,18 +105,10 @@ install( PATTERN "*.inl" ) -# Todo export static lib -#install( -# EXPORT external -# FILE ${PROJECT_NAME}Targets.cmake -# # DESTINATION lib/cmake/${PROJECT_NAME}) -# DESTINATION share/${PROJECT_NAME}/cmake) -#export(EXPORT external FILE "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Targets.cmake") - set(SRC_TARGETS) list(APPEND SRC_TARGETS "$") -############################# Modules ################################# +############################# Compile Modules ################################# if(NOT XCODE) # unable to have object files as native build with Xcode @@ -135,6 +122,7 @@ if(NOT XCODE) # unable to have object files as native build with Xcode set(object_headers) file(GLOB_RECURSE object_headers ${CMAKE_CURRENT_SOURCE_DIR}/${HUB_MODULE}/*.hpp ${CMAKE_CURRENT_SOURCE_DIR}/${HUB_MODULE}/*.h) + if(object_headers MATCHES "Types.hpp") message(FATAL_ERROR "Types.hpp shallow Radium Core/Types.hpp definitions") endif() @@ -229,119 +217,64 @@ if(HUB_BUILD_STATIC) $ $ $ -# PRIVATE -# ${HUB_EXTERNAL_DIR} ) endif() # (XCODE) target_compile_features(${PROJECT_NAME}_static PUBLIC cxx_std_17) target_compile_definitions(${PROJECT_NAME}_static PUBLIC -DSRC_STATIC) -# target_link_libraries(${PROJECT_NAME}_static PRIVATE external ${REQUIRED_LIBS}) target_link_libraries(${PROJECT_NAME}_static PRIVATE ${REQUIRED_LIBS}) - # Todo export static lib -# set_target_properties(${PROJECT_NAME}_static PROPERTIES VERSION ${${PROJECT_NAME}_VERSION} -# SOVERSION ${${PROJECT_NAME}_VERSION_MAJOR} -# OUTPUT_NAME ${PROJECT_NAME} -# ) - -if (MSVC AND HUB_BUILD_SHARED) - if(${CMAKE_GENERATOR} MATCHES "Visual Studio.*") - add_custom_command( - TARGET ${PROJECT_NAME}_static - COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_BUILD_TYPE}/${PROJECT_NAME}_static${CMAKE_POSTFIX}.lib - ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_BUILD_TYPE}/${PROJECT_NAME}${CMAKE_POSTFIX}.lib - # COMMAND ${CMAKE_COMMAND} -E remove ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_BUILD_TYPE}/${PROJECT_NAME}_static${CMAKE_POSTFIX}.lib - ) - else() - add_custom_command( - TARGET ${PROJECT_NAME}_static - COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}_static${CMAKE_POSTFIX}.lib - ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}${CMAKE_POSTFIX}.lib - # COMMAND ${CMAKE_COMMAND} -E remove ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}_static${CMAKE_POSTFIX}.lib - ) - endif() -endif() - - install( - TARGETS ${PROJECT_NAME}_static - EXPORT ${PROJECT_NAME}_static -# # DESTINATION lib/${ARCHITECTURE} - DESTINATION ${ARCHITECTURE}/lib -# #RUNTIME DESTINATION ${ARCHITECTURE}/bin # Todo fix - ) - - # Copy lib file with the name of dll (implib not found when using dll) - if(MSVC) - #FILES ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_BUILD_TYPE}/${PROJECT_NAME}${CMAKE_POSTFIX}.pdb -if(${CMAKE_GENERATOR} MATCHES "Visual Studio.*") - install( - FILES ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_BUILD_TYPE}/${PROJECT_NAME}_static${CMAKE_POSTFIX}.lib - DESTINATION ${ARCHITECTURE}/lib - RENAME ${PROJECT_NAME}${CMAKE_POSTFIX}.lib - ) -else() - install( - FILES ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}_static${CMAKE_POSTFIX}.lib - DESTINATION ${ARCHITECTURE}/lib - RENAME ${PROJECT_NAME}${CMAKE_POSTFIX}.lib - ) -endif() - install( - CODE " - execute_process( - COMMAND ${CMAKE_COMMAND} -E remove ${PROJECT_NAME}_static${CMAKE_POSTFIX}.lib - WORKING_DIRECTORY ${CMAKE_INSTALL_PREFIX}/${ARCHITECTURE}/lib/ - ) - " -# COMPONENT my_component - ) -# install(CODE "execute_process(COMMAND \"${CMAKE_COMMAND} -E remove hub_staticd.lib\" WORKING_DIRECTORY ${CMAKE_INSTALL_PREFIX}/${ARCHITECTURE}/lib/)") - # Todo remove hub_static.lib file (only on windows) - #COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_CURRENT_BINARY_DIR}/tests/DartConfiguration.tcl - endif() + set_target_properties(${PROJECT_NAME}_static PROPERTIES + OUTPUT_NAME ${PROJECT_NAME} + ARCHIVE_OUTPUT_DIRECTORY static # conflict rules name with static and shared compilation on windows + ) if(MSVC) if(${CMAKE_BUILD_TYPE} STREQUAL "RelWithDebInfo") target_compile_options(${PROJECT_NAME}_static PRIVATE /Zi) + # Tell linker to include symbol data - set_target_properties(${PROJECT_NAME}_static PROPERTIES LINK_FLAGS - "/INCREMENTAL:NO /DEBUG /OPT:REF /OPT:ICF") + set_target_properties(${PROJECT_NAME}_static PROPERTIES + LINK_FLAGS "/INCREMENTAL:NO /DEBUG /OPT:REF /OPT:ICF") # Set file name & location - set_target_properties( - ${PROJECT_NAME}_static - PROPERTIES # COMPILE_PDB_NAME ${PROJECT_NAME}${CMAKE_POSTFIX} - COMPILE_PDB_NAME ${PROJECT_NAME}_static COMPILE_PDB_OUTPUT_DIR ${CMAKE_BINARY_DIR} - # DEBUG_POSTFIX "${CMAKE_DEBUG_POSTFIX}" + set_target_properties(${PROJECT_NAME}_static PROPERTIES + COMPILE_PDB_NAME ${PROJECT_NAME}_static + COMPILE_PDB_OUTPUT_DIR ${CMAKE_BINARY_DIR} ) endif() - - if(NOT ${CMAKE_BUILD_TYPE} STREQUAL "Release") - install( - FILES ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}${CMAKE_POSTFIX}.pdb - DESTINATION ${ARCHITECTURE}/lib - OPTIONAL) - install( - FILES ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_BUILD_TYPE}/${PROJECT_NAME}${CMAKE_POSTFIX}.pdb - DESTINATION ${ARCHITECTURE}/lib - OPTIONAL) - endif() - endif() # MSVC - - # Todo export static lib - install( - EXPORT ${PROJECT_NAME}_static - FILE ${PROJECT_NAME}StaticTargets.cmake - # DESTINATION lib/cmake/${PROJECT_NAME}) - DESTINATION share/${PROJECT_NAME}/cmake) -# export(EXPORT ${PROJECT_NAME}_static FILE "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Targets.cmake") - - # todo check - if(NOT MSVC) - set_target_properties(${PROJECT_NAME}_static PROPERTIES OUTPUT_NAME ${PROJECT_NAME}) # multiple rules generate hub.lib (hub.dll do so) on windows endif() + ################################ INSTALL ################################### + + # if(MSVC) + # if(NOT ${CMAKE_BUILD_TYPE} STREQUAL "Release") + # install( + # FILES ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}${CMAKE_POSTFIX}.pdb + # DESTINATION ${ARCHITECTURE}/lib + # OPTIONAL) + # install( + # FILES ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_BUILD_TYPE}/${PROJECT_NAME}${CMAKE_POSTFIX}.pdb + # DESTINATION ${ARCHITECTURE}/lib + # OPTIONAL) + # endif() + + # endif() # MSVC + + ################################ EXPORT #################################### + + install( + TARGETS ${PROJECT_NAME}_static + EXPORT ${PROJECT_NAME}_static + DESTINATION ${ARCHITECTURE}/lib + ) + + install( + EXPORT ${PROJECT_NAME}_static + FILE ${PROJECT_NAME}StaticTargets.cmake + DESTINATION share/${PROJECT_NAME}/cmake + ) + list(APPEND HUB_LIBRARIES static) endif() # static library @@ -357,8 +290,8 @@ if(HUB_BUILD_SHARED) PUBLIC $ $ # Version.hpp $ - PRIVATE ${HUB_EXTERNAL_DIR}) - + PRIVATE ${HUB_EXTERNAL_DIR} + ) else() add_library(${PROJECT_NAME}_shared SHARED ${SRC_TARGETS}) target_include_directories( @@ -368,74 +301,39 @@ if(HUB_BUILD_SHARED) $ $ $ - #PRIVATE - #${HUB_EXTERNAL_DIR} ) endif() # (XCODE) target_compile_features(${PROJECT_NAME}_shared PUBLIC cxx_std_17) target_compile_definitions(${PROJECT_NAME}_shared PUBLIC -DSRC_EXPORTS) -# target_link_libraries(${PROJECT_NAME}_shared PRIVATE external ${REQUIRED_LIBS}) target_link_libraries(${PROJECT_NAME}_shared PRIVATE ${REQUIRED_LIBS}) - # PUBLIC $ $ # Version.hpp set_target_properties(${PROJECT_NAME}_shared PROPERTIES VERSION ${${PROJECT_NAME}_VERSION} SOVERSION ${${PROJECT_NAME}_VERSION_MAJOR} OUTPUT_NAME ${PROJECT_NAME} -# RUNTIME_OUTPUT_NAME ${PROJECT_NAME} -# PREFIX "" -# SUFFIX ".dll" -# VS_GLOBAL_IgnoreImportLibrary "false" -# ARCHIVE_OUTPUT_NAME ${PROJECT_NAME}_shared -# IMPORT_PREFIX "" -# IMPORT_SUFFIX ".lib" ) + ################################ INSTALL ################################### + + if(MSVC) + if(NOT ${CMAKE_BUILD_TYPE} STREQUAL "Release") + install(FILES $ DESTINATION ${ARCHITECTURE}/bin) + endif() + endif() + + ################################ EXPORT #################################### install( TARGETS ${PROJECT_NAME}_shared EXPORT ${PROJECT_NAME}_shared - #DESTINATION ${ARCHITECTURE}/bin # Linux DESTINATION ${ARCHITECTURE}/lib # Linux RUNTIME DESTINATION ${ARCHITECTURE}/bin # Windows - #RUNTIME DESTINATION ${ARCHITECTURE}/lib # Windows - #RENAME ${PROJECT_NAME} ) - if(MSVC) -# if (HUB_BUILD_STATIC) -# add_custom_command(TARGET ${PROJECT_NAME}_shared POST_BUILD -# COMMAND copy ${CMAKE_CURRENT_BINARY_DIR}/hub_staticd.lib ${CMAKE_CURRENT_BYNARY_DIR}/hubd.lib -# ) -# add_custom_command( -# TARGET ${PROJECT_NAME}_shared -# COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/hub_staticd.lib ${CMAKE_CURRENT_BYNARY_DIR}/hubd.lib) -# endif() - # target_compile_options(${PROJECT_NAME}_shared PRIVATE /noimplib) - # Tell linker to include symbol data - # set_target_properties(${PROJECT_NAME}_shared PROPERTIES LINK_FLAGS - # "/noimplib") - - if(NOT ${CMAKE_BUILD_TYPE} STREQUAL "Release") - install(FILES $ DESTINATION ${ARCHITECTURE}/bin) - - - # Set file name & location - #set_target_properties( - # ${PROJECT_NAME}_static - # PROPERTIES # COMPILE_PDB_NAME ${PROJECT_NAME}${CMAKE_POSTFIX} - # COMPILE_PDB_NAME ${PROJECT_NAME}_static COMPILE_PDB_OUTPUT_DIR ${CMAKE_BINARY_DIR} - # # DEBUG_POSTFIX "${CMAKE_DEBUG_POSTFIX}" - #) - endif() - endif() - install( EXPORT ${PROJECT_NAME}_shared FILE ${PROJECT_NAME}SharedTargets.cmake DESTINATION share/${PROJECT_NAME}/cmake) -# export(EXPORT ${PROJECT_NAME}_shared FILE "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Targets.cmake") - list(APPEND HUB_LIBRARIES shared) @@ -443,10 +341,12 @@ endif() # (HUB_BUILD_SHARED) message(STATUS "${HEADER_MSG} Libraries: (${HUB_LIBRARIES})") +# ########################### ALIAS ################################ + if(HUB_BUILD_SHARED OR HUB_BUILD_STATIC) if(HUB_BUILD_SHARED AND HUB_BUILD_STATIC) - #add_library(hub ALIAS hub_static) - add_library(hub ALIAS hub_shared) # default + add_library(hub ALIAS hub_static) + # add_library(hub ALIAS hub_shared) # hub.lib not found on windows (conflict with shared compilation, dll generate .lib file) elseif(HUB_BUILD_SHARED) add_library(hub ALIAS hub_shared) else() diff --git a/src/Config.cmake.in b/src/Config.cmake.in index aa876e57c..0e1b2dbc0 100644 --- a/src/Config.cmake.in +++ b/src/Config.cmake.in @@ -27,17 +27,17 @@ message(STATUS "Found hub: ${PACKAGE_PREFIX_DIR} (version \"${HUB_VERSION}\")") if(TARGET hub_shared OR TARGET hub_static) - if(TARGET hub_shared AND TARGET hub_static) - # add_library(hub ALIAS hub_static) - add_library(hub ALIAS hub_shared) # default - elseif(TARGET hub_shared) - add_definitions(-DSRC_IMPORTS) # Import dll only for external use - add_library(hub ALIAS hub_shared) - else() - add_library(hub ALIAS hub_static) - endif() + if(TARGET hub_shared AND TARGET hub_static) + add_library(hub ALIAS hub_static) + # add_library(hub ALIAS hub_shared) # default + elseif(TARGET hub_shared) + add_definitions(-DSRC_IMPORTS) # Import dll only for external use + add_library(hub ALIAS hub_shared) + else() + add_library(hub ALIAS hub_static) + endif() else() - message(FATAL_ERROR "static or shared library are not installed") + message(FATAL_ERROR "static or shared library are not installed") endif() From b0c7f54719eead14b307dae066903abcff168a96 Mon Sep 17 00:00:00 2001 From: Gauthier Bouyjou Date: Tue, 30 Apr 2024 20:11:39 +0200 Subject: [PATCH 14/15] update CHANGELOG file --- CHANGELOG | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG b/CHANGELOG index 9792eb1ad..fbfb4172b 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -11,6 +11,7 @@ Current head v.2.1.0 rc - CMake * Remove dead code (#15) * Install external headers due of inline headers (zpp_bits, serializer, std_any) (#34) + * Fix install from external project (#49) - Licensing * Added license and readme to externals (#18) * License headers with MPL 2.0 (#19) From 4c02972aa452aa37dde40d9f192cedb1310d8101 Mon Sep 17 00:00:00 2001 From: Gauthier Bouyjou Date: Tue, 30 Apr 2024 21:24:11 +0200 Subject: [PATCH 15/15] cleanup project --- bin/CMakeLists.txt | 2 -- src/CMakeLists.txt | 16 +--------------- src/Config.cmake.in | 2 +- 3 files changed, 2 insertions(+), 18 deletions(-) diff --git a/bin/CMakeLists.txt b/bin/CMakeLists.txt index e201d2c3f..6119ca966 100644 --- a/bin/CMakeLists.txt +++ b/bin/CMakeLists.txt @@ -34,8 +34,6 @@ if(TARGET hub) TARGETS ${TARGET_NAME} EXPORT ${TARGET_NAME} DESTINATION ${ARCHITECTURE}/bin) -# set_target_properties(${TARGET_NAME} PROPERTIES INSTALL_RPATH ${ARCHITECTURE}/bin) - endforeach() diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 3059c6d7f..6dfeaad43 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -66,7 +66,7 @@ elseif(UNIX) if(Clang) elseif(GCC) - message(FATAL_ERROR "never happened") + message(WARNING "not tested") elseif(GNU) @@ -247,20 +247,6 @@ if(HUB_BUILD_STATIC) ################################ INSTALL ################################### - # if(MSVC) - # if(NOT ${CMAKE_BUILD_TYPE} STREQUAL "Release") - # install( - # FILES ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}${CMAKE_POSTFIX}.pdb - # DESTINATION ${ARCHITECTURE}/lib - # OPTIONAL) - # install( - # FILES ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_BUILD_TYPE}/${PROJECT_NAME}${CMAKE_POSTFIX}.pdb - # DESTINATION ${ARCHITECTURE}/lib - # OPTIONAL) - # endif() - - # endif() # MSVC - ################################ EXPORT #################################### install( diff --git a/src/Config.cmake.in b/src/Config.cmake.in index 0e1b2dbc0..290f64013 100644 --- a/src/Config.cmake.in +++ b/src/Config.cmake.in @@ -29,7 +29,7 @@ if(TARGET hub_shared OR TARGET hub_static) if(TARGET hub_shared AND TARGET hub_static) add_library(hub ALIAS hub_static) - # add_library(hub ALIAS hub_shared) # default + # add_library(hub ALIAS hub_shared) elseif(TARGET hub_shared) add_definitions(-DSRC_IMPORTS) # Import dll only for external use add_library(hub ALIAS hub_shared)