From d0ff4ed4d3c410e63190814aacafd0e51855b0a6 Mon Sep 17 00:00:00 2001 From: Andrew Noyes Date: Sun, 4 Feb 2024 15:27:22 -0800 Subject: [PATCH] Build object library --- CMakeLists.txt | 183 +++++++++++++++++++++++++------------------------ 1 file changed, 95 insertions(+), 88 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index fce0e9e..b272264 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -46,9 +46,13 @@ if(HAS_ARM_NEON) add_compile_definitions(HAS_ARM_NEON) endif() -add_library(${PROJECT_NAME} SHARED ConflictSet.cpp) -target_compile_options(${PROJECT_NAME} PRIVATE -fPIC -fno-exceptions - -fvisibility=hidden) +add_library(${PROJECT_NAME}_object OBJECT ConflictSet.cpp) +target_compile_options(${PROJECT_NAME}_object PRIVATE -fPIC -fno-exceptions + -fvisibility=hidden) +target_include_directories(${PROJECT_NAME}_object + PRIVATE ${CMAKE_SOURCE_DIR}/include) + +add_library(${PROJECT_NAME} SHARED $) target_link_options(${PROJECT_NAME} PRIVATE $<$>: -nodefaultlibs -lc>) @@ -58,9 +62,9 @@ if(NOT APPLE) LINKER:--version-script=${CMAKE_SOURCE_DIR}/linker.map) endif() -add_library(${PROJECT_NAME}_static STATIC ConflictSet.cpp) -target_compile_options(conflict_set_static PRIVATE -fno-exceptions - -fvisibility=hidden) +add_library(${PROJECT_NAME}_static STATIC + $) + if(NOT APPLE AND CMAKE_OBJCOPY) add_custom_command( TARGET conflict_set_static @@ -74,92 +78,95 @@ set(TEST_FLAGS -Wall -Wextra -Wpedantic -Wunreachable-code -UNDEBUG) include(CTest) -add_executable(conflict_set_main ConflictSet.cpp) -target_include_directories(conflict_set_main - PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/include) -target_compile_definitions(conflict_set_main PRIVATE ENABLE_MAIN) +if(BUILD_TESTING) -if(NOT APPLE) - # libfuzzer target, to generate/manage corpus - set(FUZZ_FLAGS "-fsanitize=fuzzer-no-link,address,undefined") - include(CheckCXXCompilerFlag) - cmake_push_check_state() - set(CMAKE_REQUIRED_LINK_OPTIONS -fsanitize=fuzzer-no-link) - check_cxx_compiler_flag(-fsanitize=fuzzer-no-link HAS_LIB_FUZZER) - cmake_pop_check_state() + add_executable(conflict_set_main ConflictSet.cpp) + target_include_directories(conflict_set_main + PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/include) + target_compile_definitions(conflict_set_main PRIVATE ENABLE_MAIN) - if(HAS_LIB_FUZZER) - add_executable(conflict_set_fuzz_test ConflictSet.cpp) - target_include_directories(conflict_set_fuzz_test - PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/include) - target_compile_definitions(conflict_set_fuzz_test PRIVATE ENABLE_FUZZ) - target_compile_options(conflict_set_fuzz_test PRIVATE ${TEST_FLAGS}) - target_compile_options(conflict_set_fuzz_test PRIVATE ${FUZZ_FLAGS}) - target_link_options(conflict_set_fuzz_test PRIVATE ${FUZZ_FLAGS} - -fsanitize=fuzzer) + if(NOT APPLE) + # libfuzzer target, to generate/manage corpus + set(FUZZ_FLAGS "-fsanitize=fuzzer-no-link,address,undefined") + include(CheckCXXCompilerFlag) + cmake_push_check_state() + set(CMAKE_REQUIRED_LINK_OPTIONS -fsanitize=fuzzer-no-link) + check_cxx_compiler_flag(-fsanitize=fuzzer-no-link HAS_LIB_FUZZER) + cmake_pop_check_state() + + if(HAS_LIB_FUZZER) + add_executable(conflict_set_fuzz_test ConflictSet.cpp) + target_include_directories(conflict_set_fuzz_test + PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/include) + target_compile_definitions(conflict_set_fuzz_test PRIVATE ENABLE_FUZZ) + target_compile_options(conflict_set_fuzz_test PRIVATE ${TEST_FLAGS}) + target_compile_options(conflict_set_fuzz_test PRIVATE ${FUZZ_FLAGS}) + target_link_options(conflict_set_fuzz_test PRIVATE ${FUZZ_FLAGS} + -fsanitize=fuzzer) + endif() + endif() + + # corpus tests + + file(GLOB CORPUS_TESTS ${CMAKE_SOURCE_DIR}/corpus/*) + + add_executable(fuzz_driver ConflictSet.cpp FuzzTestDriver.cpp) + target_compile_options(fuzz_driver PRIVATE ${TEST_FLAGS}) + target_compile_definitions(fuzz_driver PRIVATE ENABLE_FUZZ) + target_include_directories(fuzz_driver + PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/include) + foreach(TEST ${CORPUS_TESTS}) + get_filename_component(hash ${TEST} NAME) + add_test(NAME conflict_set_fuzz_${hash} COMMAND fuzz_driver ${TEST}) + endforeach() + + add_executable(driver TestDriver.cpp) + target_compile_options(driver PRIVATE ${TEST_FLAGS}) + target_link_libraries(driver PRIVATE ${PROJECT_NAME}) + + find_program(VALGRIND_EXE valgrind) + if(VALGRIND_EXE) + add_test(NAME conflict_set_blackbox_valgrind + COMMAND ${VALGRIND_EXE} --error-exitcode=99 -- + $ ${CORPUS_TESTS}) + endif() + + foreach(TEST ${CORPUS_TESTS}) + get_filename_component(hash ${TEST} NAME) + add_test(NAME conflict_set_blackbox_${hash} COMMAND driver ${TEST}) + endforeach() + + # api smoke tests + + # 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 ${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) + + # 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 ${PROJECT_NAME}) + set_property(TARGET conflict_set_cxx_api_test PROPERTY CXX_STANDARD 98) + set_property(TARGET conflict_set_cxx_api_test PROPERTY CXX_STANDARD_REQUIRED + ON) + add_test(NAME conflict_set_cxx_api_test COMMAND conflict_set_cxx_api_test) + + if(NOT APPLE) + add_test( + NAME conflict_set_shared_symbols + COMMAND ${CMAKE_SOURCE_DIR}/test_symbols.sh + $ ${CMAKE_SOURCE_DIR}/symbols.txt) + add_test( + NAME conflict_set_static_symbols + COMMAND + ${CMAKE_SOURCE_DIR}/test_symbols.sh + $ ${CMAKE_SOURCE_DIR}/symbols.txt) endif() endif() - -# corpus tests - -file(GLOB CORPUS_TESTS ${CMAKE_SOURCE_DIR}/corpus/*) - -add_executable(fuzz_driver ConflictSet.cpp FuzzTestDriver.cpp) -target_compile_options(fuzz_driver PRIVATE ${TEST_FLAGS}) -target_compile_definitions(fuzz_driver PRIVATE ENABLE_FUZZ) -target_include_directories(fuzz_driver - PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/include) -foreach(TEST ${CORPUS_TESTS}) - get_filename_component(hash ${TEST} NAME) - add_test(NAME conflict_set_fuzz_${hash} COMMAND fuzz_driver ${TEST}) -endforeach() - -add_executable(driver TestDriver.cpp) -target_compile_options(driver PRIVATE ${TEST_FLAGS}) -target_link_libraries(driver PRIVATE ${PROJECT_NAME}) - -find_program(VALGRIND_EXE valgrind) -if(VALGRIND_EXE) - add_test(NAME conflict_set_blackbox_valgrind - COMMAND ${VALGRIND_EXE} --error-exitcode=99 -- $ - ${CORPUS_TESTS}) -endif() - -foreach(TEST ${CORPUS_TESTS}) - get_filename_component(hash ${TEST} NAME) - add_test(NAME conflict_set_blackbox_${hash} COMMAND driver ${TEST}) -endforeach() - -# api smoke tests - -# 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 ${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) - -# 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 ${PROJECT_NAME}) -set_property(TARGET conflict_set_cxx_api_test PROPERTY CXX_STANDARD 98) -set_property(TARGET conflict_set_cxx_api_test PROPERTY CXX_STANDARD_REQUIRED ON) -add_test(NAME conflict_set_cxx_api_test COMMAND conflict_set_cxx_api_test) - -if(NOT APPLE) - add_test( - NAME conflict_set_shared_symbols - COMMAND ${CMAKE_SOURCE_DIR}/test_symbols.sh $ - ${CMAKE_SOURCE_DIR}/symbols.txt) - add_test( - NAME conflict_set_static_symbols - COMMAND - ${CMAKE_SOURCE_DIR}/test_symbols.sh $ - ${CMAKE_SOURCE_DIR}/symbols.txt) -endif() - # packaging set(CPACK_PACKAGE_CONTACT andrew@weaselab.dev)