| cmake_minimum_required(VERSION 3.20.0) |
| project(DetectTestCompiler C CXX) |
| |
| include(CheckCCompilerFlag) |
| include(CheckCXXCompilerFlag) |
| include(CheckIncludeFile) |
| include(CheckIncludeFileCXX) |
| |
| function(write_compiler_information lang) |
| set(information "${CMAKE_${lang}_COMPILER}") |
| set(information "${information}\\;${CMAKE_${lang}_COMPILER_ID}") |
| set(information "${information}\\;${CMAKE_${lang}_COMPILER_VERSION}") |
| set(information "${information}\\;${${lang}_FLAGS}") |
| set(information "${information}\\;${${lang}_HAS_TSAN_FLAG}") |
| set(information "${information}\\;${${lang}_HAS_OMIT_FRAME_POINTER}") |
| set(information "${information}\\;${${lang}_HAS_OMP_H}") |
| file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/${lang}CompilerInformation.txt ${information}) |
| endfunction(write_compiler_information) |
| |
| find_package(OpenMP) |
| if (NOT OpenMP_Found) |
| set(OpenMP_C_FLAGS "-fopenmp") |
| set(OpenMP_CXX_FLAGS "-fopenmp") |
| endif() |
| |
| set(CMAKE_THREAD_PREFER_PTHREAD TRUE) |
| set(THREADS_PREFER_PTHREAD_FLAG TRUE) |
| find_package(Threads REQUIRED) |
| |
| set(C_FLAGS "${OpenMP_C_FLAGS} ${CMAKE_THREAD_LIBS_INIT}") |
| set(CXX_FLAGS "${OpenMP_CXX_FLAGS} ${CMAKE_THREAD_LIBS_INIT}") |
| |
| check_c_compiler_flag("-fno-omit-frame-pointer" C_HAS_OMIT_FRAME_POINTER) |
| check_cxx_compiler_flag("-fno-omit-frame-pointer" CXX_HAS_OMIT_FRAME_POINTER) |
| |
| set(OLD_CMAKE_REQUIRED_FLAGS ${CMAKE_REQUIRED_FLAGS}) |
| set(CMAKE_REQUIRED_FLAGS "-fsanitize=thread") |
| check_c_compiler_flag("" C_HAS_TSAN_FLAG) |
| check_cxx_compiler_flag("" CXX_HAS_TSAN_FLAG) |
| set(CMAKE_REQUIRED_FLAGS ${OLD_CMAKE_REQUIRED_FLAGS}) |
| |
| # Check if omp.h header exists for the test compiler |
| check_include_file_cxx(omp.h CXX_HAS_OMP_H) |
| check_include_file(omp.h C_HAS_OMP_H) |
| |
| write_compiler_information(C) |
| write_compiler_information(CXX) |