-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathCMakeLists.txt
More file actions
73 lines (58 loc) · 2.09 KB
/
CMakeLists.txt
File metadata and controls
73 lines (58 loc) · 2.09 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
cmake_minimum_required(VERSION 3.25.2)
project(
Cpp20FeaturesTest
LANGUAGES CXX
)
option(CPPFT_ENABLE_ERROR_LOG "Show compiler log on error" ON)
if("${CMAKE_CXX_COMPILER}" MATCHES "clang")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -stdlib=libc++")
endif()
message(STATUS "Compiler ${CMAKE_CXX_COMPILER} v${CMAKE_CXX_COMPILER_VERSION}")
function(try_compile_feature FEATURE_NAME)
string(TOLOWER "${FEATURE_NAME}" FEATURE_NAME_LOWER)
message(STATUS "Trying to build ${FEATURE_NAME_LOWER}")
set(SOURCE_FILE "${PROJECT_SOURCE_DIR}/src/${FEATURE_NAME_LOWER}.cpp")
set(BUILD_DIR "${PROJECT_BINARY_DIR}/${FEATURE_NAME_LOWER}")
message(DEBUG "CXX compiler: ${CMAKE_CXX_COMPILER}")
if("${CMAKE_CXX_COMPILER}" MATCHES "nvcc")
enable_language(CUDA)
# rewrite the file with .cu
set(SOURCE_FILE_CU "${BUILD_DIR}/${FEATURE_NAME_LOWER}.cu")
file(MAKE_DIRECTORY "${BUILD_DIR}")
file(COPY_FILE "${SOURCE_FILE}" "${SOURCE_FILE_CU}")
set(SOURCE_FILE "${SOURCE_FILE_CU}")
endif()
message(DEBUG "Input file: ${SOURCE_FILE}")
message(DEBUG "Output dir: ${BUILD_DIR}")
try_compile(
CAN_BUILD
"${BUILD_DIR}"
"${SOURCE_FILE}"
OUTPUT_VARIABLE LOG_MESSAGE
CXX_STANDARD 20
CXX_STANDARD_REQUIRED ON
CXX_EXTENSIONS OFF
CUDA_STANDARD 20
CUDA_STANDARD_REQUIRED ON
CUDA_EXTENSIONS OFF
)
if(CAN_BUILD)
message(STATUS "Trying to build ${FEATURE_NAME_LOWER}: Success")
else()
message(STATUS "Trying to build ${FEATURE_NAME_LOWER}: Error")
if(CPPFT_ENABLE_ERROR_LOG)
message(STATUS "Error message:\n${LOG_MESSAGE}")
endif()
endif()
endfunction()
message(STATUS "C++20 standard")
try_compile_feature("concept")
try_compile_feature("consteval")
try_compile_feature("modules_lang")
message(STATUS "C++20 standard library")
try_compile_feature("assume_aligned")
try_compile_feature("cmp")
try_compile_feature("modules_lib")
try_compile_feature("source_location")
try_compile_feature("span")
# try_compile_feature("string_view")