Export shared and static libraries

This commit is contained in:
2024-01-24 15:10:06 -08:00
parent 2d152b9a62
commit a6a2ad61d9
3 changed files with 33 additions and 16 deletions

View File

@@ -46,15 +46,25 @@ if(HAS_ARM_NEON)
endif()
add_library(${PROJECT_NAME} SHARED ConflictSet.cpp)
target_compile_options(conflict_set PRIVATE -fPIC -fno-exceptions
-fvisibility=hidden)
target_link_options(conflict_set PRIVATE $<$<NOT:$<CONFIG:Debug>>:
target_compile_options(${PROJECT_NAME} PRIVATE -fPIC -fno-exceptions
-fvisibility=hidden)
target_link_options(${PROJECT_NAME} PRIVATE $<$<NOT:$<CONFIG:Debug>>:
-nodefaultlibs -lc>)
add_library(${PROJECT_NAME}_static STATIC ConflictSet.cpp)
target_compile_options(conflict_set_static PRIVATE -fno-exceptions
-fvisibility=hidden)
add_custom_command(
TARGET conflict_set_static
POST_BUILD
COMMAND
${CMAKE_OBJCOPY} --keep-global-symbols=${CMAKE_SOURCE_DIR}/symbols.txt
$<TARGET_FILE:${PROJECT_NAME}_static>)
if(NOT APPLE)
target_link_options(
conflict_set PRIVATE
"LINKER:--version-script=${CMAKE_CURRENT_SOURCE_DIR}/linker.map")
${PROJECT_NAME} PRIVATE
"LINKER:-export-symbols=${CMAKE_CURRENT_SOURCE_DIR}/linker.map")
endif()
set(TEST_FLAGS -Wall -Wextra -Wpedantic -Wunreachable-code -UNDEBUG)
@@ -105,7 +115,7 @@ endforeach()
# c90
add_executable(conflict_set_c_api_test conflict_set_c_api_test.c)
target_compile_options(conflict_set_c_api_test PRIVATE ${TEST_FLAGS})
target_link_libraries(conflict_set_c_api_test PRIVATE conflict_set)
target_link_libraries(conflict_set_c_api_test PRIVATE ${PROJECT_NAME})
set_property(TARGET conflict_set_c_api_test PROPERTY C_STANDARD 90)
set_property(TARGET conflict_set_c_api_test PROPERTY C_STANDARD_REQUIRED ON)
add_test(NAME conflict_set_c_api_test COMMAND conflict_set_c_api_test)
@@ -113,7 +123,7 @@ add_test(NAME conflict_set_c_api_test COMMAND conflict_set_c_api_test)
# c++98
add_executable(conflict_set_cxx_api_test conflict_set_cxx_api_test.cpp)
target_compile_options(conflict_set_cxx_api_test PRIVATE ${TEST_FLAGS})
target_link_libraries(conflict_set_cxx_api_test PRIVATE conflict_set)
target_link_libraries(conflict_set_cxx_api_test PRIVATE ${PROJECT_NAME})
set_property(TARGET conflict_set_c_api_test PROPERTY CXX_STANDARD 98)
set_property(TARGET conflict_set_c_api_test PROPERTY CXX_STANDARD_REQUIRED ON)
add_test(NAME conflict_set_cxx_api_test COMMAND conflict_set_cxx_api_test)
@@ -127,12 +137,17 @@ target_include_directories(
PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/${PROJECT_NAME}>)
target_include_directories(
${PROJECT_NAME}_static
PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/${PROJECT_NAME}>)
set_target_properties(
${PROJECT_NAME} PROPERTIES VERSION ${PROJECT_VERSION}
SOVERSION ${PROJECT_VERSION_MAJOR})
install(
TARGETS ${PROJECT_NAME}
TARGETS ${PROJECT_NAME} ${PROJECT_NAME}_static
EXPORT ConflictSetConfig
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
@@ -140,4 +155,5 @@ install(
install(DIRECTORY include/
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${PROJECT_NAME})
install(EXPORT ConflictSetConfig DESTINATION share/ConflictSet/cmake)
install(EXPORT ConflictSetConfig
DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/ConflictSet/cmake)