2 set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/CMake)
4 function(set_test_target TARGET2)
5 foreach(TEST IN LISTS TESTS)
6 add_custom_command(TARGET ${TARGET2} POST_BUILD COMMAND ${TEST})
10 include(CheckTypeSize)
11 include(CheckCSourceRuns)
12 include(CheckIncludeFileCXX)
13 include(CheckCXXSymbolExists)
14 include(CheckCXXCompilerFlag)
15 include(CheckCXXSourceRuns)
17 function(safe_string STRING OUTPUT)
18 string(REGEX REPLACE "[^0-9a-zA-Z_]" "_" HEADER_SAFE ${STRING})
19 string(TOUPPER "${HEADER_SAFE}" HEADER_DEFN)
20 set(${OUTPUT} ${HEADER_DEFN} PARENT_SCOPE)
21 endfunction(safe_string)
23 function(define_cpp DEF)
24 safe_string(${DEF} CNST)
25 add_compile_definitions(HAVE_${CNST}=1)
26 endfunction(define_cpp)
28 function(check_header HEADER_PATH)
29 safe_string(${HEADER_PATH} HEADER_CONST)
30 check_include_file_cxx(${HEADER_PATH} HAVE_${HEADER_CONST})
31 endfunction(check_header)
33 function(check_decl DECL HEADER)
34 safe_string(${DECL} DECL_CONST)
35 check_cxx_symbol_exists(${DECL} ${HEADER} HAVE_${DECL_CONST})
36 endfunction(check_decl)
38 function(check_type TYPE HEADER)
39 safe_string(${TYPE} TYPE_CONST)
40 SET(CMAKE_EXTRA_INCLUDE_FILES ${HEADER})
41 check_type_size(${TYPE} ${TYPE_CONST} LANGUAGE CXX)
42 SET(CMAKE_EXTRA_INCLUDE_FILES)
43 endfunction(check_type)
46 if(${CMAKE_BUILD_TYPE} STREQUAL Debug)
47 add_compile_definitions(DEBUG=1)
48 add_compile_options(-Wall -Wextra)
50 endfunction(check_debug)
52 function(check_stdatomic)
53 check_cxx_source_runs(
56 std::atomic<int> i(0);
57 return atomic_fetch_add(&i,1);
61 "#include <stdatomic.h>
65 return atomic_fetch_add(&i,1);
68 endfunction(check_atomic_builtins)