45 lines
1.5 KiB
CMake
45 lines
1.5 KiB
CMake
cmake_minimum_required(VERSION 3.16)
|
|
project(tests LANGUAGES C)
|
|
|
|
enable_testing()
|
|
|
|
# The headers are documented as C23-first but expected to work on older standards.
|
|
# Pinned here so that the claim is actually exercised; configure with
|
|
# -DDLIBC_C_STANDARD=23 to build them the way the README describes.
|
|
set(DLIBC_C_STANDARD 11 CACHE STRING "C standard the tests are compiled against")
|
|
|
|
# The library's stated goal is memory safety, so the take, aliasing and destructor
|
|
# tests are worth a lot more when the allocator is watching. Off by default, as it
|
|
# slows the tests down and needs a compiler that ships the sanitizer runtimes.
|
|
option(DLIBC_SANITIZE "Build the tests with AddressSanitizer and UndefinedBehaviorSanitizer" OFF)
|
|
|
|
add_executable(test_vector
|
|
tests/test_vector.c
|
|
tests/vector_altcap.c
|
|
)
|
|
|
|
add_executable(test_set
|
|
tests/test_set.c
|
|
tests/set_altcap.c
|
|
)
|
|
|
|
foreach(dlibc_target test_vector test_set)
|
|
set_target_properties(${dlibc_target} PROPERTIES
|
|
C_STANDARD ${DLIBC_C_STANDARD}
|
|
C_STANDARD_REQUIRED ON
|
|
C_EXTENSIONS OFF
|
|
)
|
|
|
|
if(NOT MSVC)
|
|
target_compile_options(${dlibc_target} PRIVATE -Wall -Wextra -Wpedantic -Werror)
|
|
|
|
if(DLIBC_SANITIZE)
|
|
target_compile_options(${dlibc_target} PRIVATE -g -fno-omit-frame-pointer -fsanitize=address,undefined)
|
|
target_link_options(${dlibc_target} PRIVATE -fsanitize=address,undefined)
|
|
endif()
|
|
endif()
|
|
endforeach()
|
|
|
|
add_test(NAME test_vector COMMAND test_vector)
|
|
add_test(NAME test_set COMMAND test_set)
|