From a6a2ad61d916538958071d5f830298582bc80738 Mon Sep 17 00:00:00 2001 From: Andrew Noyes Date: Wed, 24 Jan 2024 15:10:06 -0800 Subject: [PATCH] Export shared and static libraries --- CMakeLists.txt | 34 +++++++++++++++++++++++++--------- ConflictSet.cpp | 8 ++++++++ linker.map | 7 ------- 3 files changed, 33 insertions(+), 16 deletions(-) delete mode 100644 linker.map diff --git a/CMakeLists.txt b/CMakeLists.txt index bb89a53..d87e62a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -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 $<$>: +target_compile_options(${PROJECT_NAME} PRIVATE -fPIC -fno-exceptions + -fvisibility=hidden) +target_link_options(${PROJECT_NAME} PRIVATE $<$>: -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 + $) + 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 $ $) +target_include_directories( + ${PROJECT_NAME}_static + PUBLIC $ + $) + 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) diff --git a/ConflictSet.cpp b/ConflictSet.cpp index 5aca692..36278cd 100644 --- a/ConflictSet.cpp +++ b/ConflictSet.cpp @@ -1042,7 +1042,9 @@ struct Iterator { int cmp; }; +namespace { std::string_view getSearchPath(Arena &arena, Node *n); +} Iterator lastLeq(Node *n, const std::span key) { auto remaining = key; @@ -1111,8 +1113,10 @@ void insert(Node **self_, std::span key, int64_t writeVersion) { } } +namespace { std::string printable(std::string_view key); std::string printable(const Key &key); +} // namespace struct __attribute__((visibility("hidden"))) ConflictSet::Impl { void check(const ReadRange *reads, Result *result, int count) const { @@ -1248,6 +1252,8 @@ __attribute__((__visibility__("default"))) void ConflictSet_destroy(void *cs) { } } +namespace { + std::string printable(std::string_view key) { std::string result; for (uint8_t c : key) { @@ -1385,6 +1391,8 @@ bool checkCorrectness(Node *node, ReferenceImpl &refImpl) { return success; } +} // namespace + namespace std { void __throw_length_error(const char *) { __builtin_unreachable(); } } // namespace std diff --git a/linker.map b/linker.map deleted file mode 100644 index 5ed621a..0000000 --- a/linker.map +++ /dev/null @@ -1,7 +0,0 @@ -{ - global: - *ConflictSet*; - local: - *; -}; -