diff --git a/CMakeLists.txt b/CMakeLists.txt index 67fa06f..0043f55 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -100,13 +100,13 @@ endif() set(CMAKE_CXX_IMPLICIT_LINK_LIBRARIES "") -add_library(${PROJECT_NAME}_object OBJECT ConflictSet.cpp) -target_compile_options(${PROJECT_NAME}_object PRIVATE -fno-exceptions +add_library(${PROJECT_NAME}-object OBJECT ConflictSet.cpp) +target_compile_options(${PROJECT_NAME}-object PRIVATE -fno-exceptions -fvisibility=hidden) -target_include_directories(${PROJECT_NAME}_object +target_include_directories(${PROJECT_NAME}-object PRIVATE ${CMAKE_SOURCE_DIR}/include) -add_library(${PROJECT_NAME} SHARED $) +add_library(${PROJECT_NAME} SHARED $) set_target_properties( ${PROJECT_NAME} PROPERTIES LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/radix_tree") @@ -120,14 +120,20 @@ if(HAS_VERSION_SCRIPT) endif() add_library(${PROJECT_NAME}-static STATIC - $) + $) if(NOT CMAKE_BUILD_TYPE STREQUAL Debug) set_target_properties(${PROJECT_NAME}-static PROPERTIES LINKER_LANGUAGE C) endif() -if(CMAKE_OBJCOPY) +if(APPLE) add_custom_command( - TARGET conflict-set-static + TARGET ${PROJECT_NAME}-static + PRE_BUILD + COMMAND ${CMAKE_SOURCE_DIR}/privatize_symbols_macos.sh + $) +else() + add_custom_command( + TARGET ${PROJECT_NAME}-static POST_BUILD COMMAND ${CMAKE_OBJCOPY} --keep-global-symbols=${CMAKE_SOURCE_DIR}/symbols.txt @@ -349,12 +355,12 @@ set_target_properties( install( TARGETS ${PROJECT_NAME} ${PROJECT_NAME}-static - EXPORT conflict-setConfig + EXPORT ${PROJECT_NAME}Config ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}) install(DIRECTORY include/ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${PROJECT_NAME}) -install(EXPORT conflict-setConfig - DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/conflict-set/cmake) +install(EXPORT ${PROJECT_NAME}Config + DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/${PROJECT_NAME}/cmake) diff --git a/privatize_symbols_macos.sh b/privatize_symbols_macos.sh new file mode 100755 index 0000000..4e964eb --- /dev/null +++ b/privatize_symbols_macos.sh @@ -0,0 +1,6 @@ +#!/bin/bash + +# This has the effect of making visibility=hidden symbols private in object files +for obj in "$@" ; do + ld -r $obj -o $obj.tmp && mv $obj.tmp $obj +done