Build object library
This commit is contained in:
107
CMakeLists.txt
107
CMakeLists.txt
@@ -46,9 +46,13 @@ if(HAS_ARM_NEON)
|
|||||||
add_compile_definitions(HAS_ARM_NEON)
|
add_compile_definitions(HAS_ARM_NEON)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
add_library(${PROJECT_NAME} SHARED ConflictSet.cpp)
|
add_library(${PROJECT_NAME}_object OBJECT ConflictSet.cpp)
|
||||||
target_compile_options(${PROJECT_NAME} PRIVATE -fPIC -fno-exceptions
|
target_compile_options(${PROJECT_NAME}_object PRIVATE -fPIC -fno-exceptions
|
||||||
-fvisibility=hidden)
|
-fvisibility=hidden)
|
||||||
|
target_include_directories(${PROJECT_NAME}_object
|
||||||
|
PRIVATE ${CMAKE_SOURCE_DIR}/include)
|
||||||
|
|
||||||
|
add_library(${PROJECT_NAME} SHARED $<TARGET_OBJECTS:${PROJECT_NAME}_object>)
|
||||||
target_link_options(${PROJECT_NAME} PRIVATE $<$<NOT:$<CONFIG:Debug>>:
|
target_link_options(${PROJECT_NAME} PRIVATE $<$<NOT:$<CONFIG:Debug>>:
|
||||||
-nodefaultlibs -lc>)
|
-nodefaultlibs -lc>)
|
||||||
|
|
||||||
@@ -58,9 +62,9 @@ if(NOT APPLE)
|
|||||||
LINKER:--version-script=${CMAKE_SOURCE_DIR}/linker.map)
|
LINKER:--version-script=${CMAKE_SOURCE_DIR}/linker.map)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
add_library(${PROJECT_NAME}_static STATIC ConflictSet.cpp)
|
add_library(${PROJECT_NAME}_static STATIC
|
||||||
target_compile_options(conflict_set_static PRIVATE -fno-exceptions
|
$<TARGET_OBJECTS:${PROJECT_NAME}_object>)
|
||||||
-fvisibility=hidden)
|
|
||||||
if(NOT APPLE AND CMAKE_OBJCOPY)
|
if(NOT APPLE AND CMAKE_OBJCOPY)
|
||||||
add_custom_command(
|
add_custom_command(
|
||||||
TARGET conflict_set_static
|
TARGET conflict_set_static
|
||||||
@@ -74,12 +78,14 @@ set(TEST_FLAGS -Wall -Wextra -Wpedantic -Wunreachable-code -UNDEBUG)
|
|||||||
|
|
||||||
include(CTest)
|
include(CTest)
|
||||||
|
|
||||||
add_executable(conflict_set_main ConflictSet.cpp)
|
if(BUILD_TESTING)
|
||||||
target_include_directories(conflict_set_main
|
|
||||||
PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/include)
|
|
||||||
target_compile_definitions(conflict_set_main PRIVATE ENABLE_MAIN)
|
|
||||||
|
|
||||||
if(NOT APPLE)
|
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(NOT APPLE)
|
||||||
# libfuzzer target, to generate/manage corpus
|
# libfuzzer target, to generate/manage corpus
|
||||||
set(FUZZ_FLAGS "-fsanitize=fuzzer-no-link,address,undefined")
|
set(FUZZ_FLAGS "-fsanitize=fuzzer-no-link,address,undefined")
|
||||||
include(CheckCXXCompilerFlag)
|
include(CheckCXXCompilerFlag)
|
||||||
@@ -98,68 +104,69 @@ if(NOT APPLE)
|
|||||||
target_link_options(conflict_set_fuzz_test PRIVATE ${FUZZ_FLAGS}
|
target_link_options(conflict_set_fuzz_test PRIVATE ${FUZZ_FLAGS}
|
||||||
-fsanitize=fuzzer)
|
-fsanitize=fuzzer)
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# corpus tests
|
# corpus tests
|
||||||
|
|
||||||
file(GLOB CORPUS_TESTS ${CMAKE_SOURCE_DIR}/corpus/*)
|
file(GLOB CORPUS_TESTS ${CMAKE_SOURCE_DIR}/corpus/*)
|
||||||
|
|
||||||
add_executable(fuzz_driver ConflictSet.cpp FuzzTestDriver.cpp)
|
add_executable(fuzz_driver ConflictSet.cpp FuzzTestDriver.cpp)
|
||||||
target_compile_options(fuzz_driver PRIVATE ${TEST_FLAGS})
|
target_compile_options(fuzz_driver PRIVATE ${TEST_FLAGS})
|
||||||
target_compile_definitions(fuzz_driver PRIVATE ENABLE_FUZZ)
|
target_compile_definitions(fuzz_driver PRIVATE ENABLE_FUZZ)
|
||||||
target_include_directories(fuzz_driver
|
target_include_directories(fuzz_driver
|
||||||
PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/include)
|
PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/include)
|
||||||
foreach(TEST ${CORPUS_TESTS})
|
foreach(TEST ${CORPUS_TESTS})
|
||||||
get_filename_component(hash ${TEST} NAME)
|
get_filename_component(hash ${TEST} NAME)
|
||||||
add_test(NAME conflict_set_fuzz_${hash} COMMAND fuzz_driver ${TEST})
|
add_test(NAME conflict_set_fuzz_${hash} COMMAND fuzz_driver ${TEST})
|
||||||
endforeach()
|
endforeach()
|
||||||
|
|
||||||
add_executable(driver TestDriver.cpp)
|
add_executable(driver TestDriver.cpp)
|
||||||
target_compile_options(driver PRIVATE ${TEST_FLAGS})
|
target_compile_options(driver PRIVATE ${TEST_FLAGS})
|
||||||
target_link_libraries(driver PRIVATE ${PROJECT_NAME})
|
target_link_libraries(driver PRIVATE ${PROJECT_NAME})
|
||||||
|
|
||||||
find_program(VALGRIND_EXE valgrind)
|
find_program(VALGRIND_EXE valgrind)
|
||||||
if(VALGRIND_EXE)
|
if(VALGRIND_EXE)
|
||||||
add_test(NAME conflict_set_blackbox_valgrind
|
add_test(NAME conflict_set_blackbox_valgrind
|
||||||
COMMAND ${VALGRIND_EXE} --error-exitcode=99 -- $<TARGET_FILE:driver>
|
COMMAND ${VALGRIND_EXE} --error-exitcode=99 --
|
||||||
${CORPUS_TESTS})
|
$<TARGET_FILE:driver> ${CORPUS_TESTS})
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
foreach(TEST ${CORPUS_TESTS})
|
foreach(TEST ${CORPUS_TESTS})
|
||||||
get_filename_component(hash ${TEST} NAME)
|
get_filename_component(hash ${TEST} NAME)
|
||||||
add_test(NAME conflict_set_blackbox_${hash} COMMAND driver ${TEST})
|
add_test(NAME conflict_set_blackbox_${hash} COMMAND driver ${TEST})
|
||||||
endforeach()
|
endforeach()
|
||||||
|
|
||||||
# api smoke tests
|
# api smoke tests
|
||||||
|
|
||||||
# c90
|
# c90
|
||||||
add_executable(conflict_set_c_api_test conflict_set_c_api_test.c)
|
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_compile_options(conflict_set_c_api_test PRIVATE ${TEST_FLAGS})
|
||||||
target_link_libraries(conflict_set_c_api_test PRIVATE ${PROJECT_NAME})
|
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 90)
|
||||||
set_property(TARGET conflict_set_c_api_test PROPERTY C_STANDARD_REQUIRED ON)
|
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)
|
add_test(NAME conflict_set_c_api_test COMMAND conflict_set_c_api_test)
|
||||||
|
|
||||||
# c++98
|
# c++98
|
||||||
add_executable(conflict_set_cxx_api_test conflict_set_cxx_api_test.cpp)
|
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_compile_options(conflict_set_cxx_api_test PRIVATE ${TEST_FLAGS})
|
||||||
target_link_libraries(conflict_set_cxx_api_test PRIVATE ${PROJECT_NAME})
|
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 98)
|
||||||
set_property(TARGET conflict_set_cxx_api_test PROPERTY CXX_STANDARD_REQUIRED ON)
|
set_property(TARGET conflict_set_cxx_api_test PROPERTY CXX_STANDARD_REQUIRED
|
||||||
add_test(NAME conflict_set_cxx_api_test COMMAND conflict_set_cxx_api_test)
|
ON)
|
||||||
|
add_test(NAME conflict_set_cxx_api_test COMMAND conflict_set_cxx_api_test)
|
||||||
|
|
||||||
if(NOT APPLE)
|
if(NOT APPLE)
|
||||||
add_test(
|
add_test(
|
||||||
NAME conflict_set_shared_symbols
|
NAME conflict_set_shared_symbols
|
||||||
COMMAND ${CMAKE_SOURCE_DIR}/test_symbols.sh $<TARGET_FILE:${PROJECT_NAME}>
|
COMMAND ${CMAKE_SOURCE_DIR}/test_symbols.sh
|
||||||
${CMAKE_SOURCE_DIR}/symbols.txt)
|
$<TARGET_FILE:${PROJECT_NAME}> ${CMAKE_SOURCE_DIR}/symbols.txt)
|
||||||
add_test(
|
add_test(
|
||||||
NAME conflict_set_static_symbols
|
NAME conflict_set_static_symbols
|
||||||
COMMAND
|
COMMAND
|
||||||
${CMAKE_SOURCE_DIR}/test_symbols.sh $<TARGET_FILE:${PROJECT_NAME}_static>
|
${CMAKE_SOURCE_DIR}/test_symbols.sh
|
||||||
${CMAKE_SOURCE_DIR}/symbols.txt)
|
$<TARGET_FILE:${PROJECT_NAME}_static> ${CMAKE_SOURCE_DIR}/symbols.txt)
|
||||||
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# packaging
|
# packaging
|
||||||
|
|
||||||
set(CPACK_PACKAGE_CONTACT andrew@weaselab.dev)
|
set(CPACK_PACKAGE_CONTACT andrew@weaselab.dev)
|
||||||
|
Reference in New Issue
Block a user