2 set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/CMake)
5 include(CheckCSourceRuns)
6 include(CheckIncludeFileCXX)
7 include(CheckCXXSymbolExists)
8 include(CheckCXXCompilerFlag)
9 include(CheckCXXSourceRuns)
11 function(safe_string STRING OUTPUT)
12 string(REGEX REPLACE "[^0-9a-zA-Z_]" "_" HEADER_SAFE ${STRING})
13 string(TOUPPER "${HEADER_SAFE}" HEADER_DEFN)
14 set(${OUTPUT} ${HEADER_DEFN} PARENT_SCOPE)
15 endfunction(safe_string)
17 function(define_cpp DEF)
18 safe_string(${DEF} CNST)
19 add_compile_definitions(HAVE_${CNST}=1)
20 endfunction(define_cpp)
22 function(check_header HEADER_PATH)
23 safe_string(${HEADER_PATH} HEADER_CONST)
24 check_include_file_cxx(${HEADER_PATH} HAVE_${HEADER_CONST})
25 endfunction(check_header)
27 function(check_decl DECL HEADER)
28 safe_string(${DECL} DECL_CONST)
29 check_cxx_symbol_exists(${DECL} ${HEADER} HAVE_${DECL_CONST})
30 endfunction(check_decl)
32 function(check_type TYPE HEADER)
33 safe_string(${TYPE} TYPE_CONST)
34 SET(CMAKE_EXTRA_INCLUDE_FILES ${HEADER})
35 check_type_size(${TYPE} ${TYPE_CONST} LANGUAGE CXX)
36 SET(CMAKE_EXTRA_INCLUDE_FILES)
37 endfunction(check_type)
40 if(${CMAKE_BUILD_TYPE} STREQUAL Debug)
41 add_compile_definitions(DEBUG=1)
42 add_compile_options(-Wall -Wextra)
44 endfunction(check_debug)
46 function(check_stdatomic)
47 check_cxx_source_runs(
50 std::atomic<int> i(0);
51 return atomic_fetch_add(&i,1);
55 "#include <stdatomic.h>
59 return atomic_fetch_add(&i,1);
62 endfunction(check_atomic_builtins)