CMakeLists.txt
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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
cmake_minimum_required(VERSION 3.23 FATAL_ERROR) project(Crucible DESCRIPTION "Crucible is an all-in-one framework for building cross-platform applications." LANGUAGES CXX VERSION 1.0.0) list(APPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake") set(BUILD_SHARED_LIBS ON CACHE BOOL "Build a shared library instead of a static library [default: ON]") set(CMAKE_BUILD_TYPE RelWithDebInfo CACHE STRING "Build type (see https://cmake.org/cmake/help/latest/variable/CMAKE_BUILD_TYPE.html) [default: RelWithDebInfo]") set(CRUCIBLE_ENABLE_ADDRESS_SANITIZER FALSE CACHE BOOL "Enable AddressSanitizer if supported [default: OFF]") set(CRUCIBLE_ENABLE_COMPILER_WARNINGS TRUE CACHE BOOL "Enable warnings on supported compilers [default: ON]") set(CRUCIBLE_ENABLE_THREAD_SANITIZER FALSE CACHE BOOL "Enable ThreadSanitizer if supported [default: OFF]") set(CRUCIBLE_ENABLE_UNDEFINED_BEHAVIOR_SANITIZER FALSE CACHE BOOL "Enable UndefinedBehaviorSanitizer if supported [default: OFF]") set(CRUCIBLE_ENABLE_SANITIZER_RECOVERY FALSE CACHE BOOL "Attempt to recover from sanitizer errors if supported [default: OFF]") set(CRUCIBLE_BUILD_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/output" CACHE PATH "The directory to place the build output [default: ${PROJECT_BINARY_DIR}/output]") message(NOTICE) message(NOTICE "╭───────────────────────────────────────╮") message(NOTICE "│ PROJECT CONFIGURATION │") message(NOTICE "╰───────────────────────────────────────╯") message(NOTICE) message(NOTICE "BUILD_SHARED_LIBS: ${BUILD_SHARED_LIBS}") message(NOTICE "CMAKE_BUILD_TYPE: ${CMAKE_BUILD_TYPE}") message(NOTICE "CRUCIBLE_ENABLE_ADDRESS_SANITIZER: ${CRUCIBLE_ENABLE_ADDRESS_SANITIZER}") message(NOTICE "CRUCIBLE_ENABLE_COMPILER_WARNINGS: ${CRUCIBLE_ENABLE_COMPILER_WARNINGS}") message(NOTICE "CRUCIBLE_ENABLE_THREAD_SANITIZER: ${CRUCIBLE_ENABLE_THREAD_SANITIZER}") message(NOTICE "CRUCIBLE_ENABLE_UNDEFINED_BEHAVIOR_SANITIZER: ${CRUCIBLE_ENABLE_UNDEFINED_BEHAVIOR_SANITIZER}") message(NOTICE "CRUCIBLE_ENABLE_SANITIZER_RECOVERY: ${CRUCIBLE_ENABLE_SANITIZER_RECOVERY}") message(NOTICE "CRUCIBLE_BUILD_OUTPUT_DIRECTORY: ${CRUCIBLE_BUILD_OUTPUT_DIRECTORY}") include(CTest) message(NOTICE) message(NOTICE "╭─────────────────────────────────────────╮") message(NOTICE "│ TOOLCHAIN CONFIGURATION │") message(NOTICE "╰─────────────────────────────────────────╯") message(NOTICE) message(NOTICE "CMAKE_CXX_COMPILER_ID: ${CMAKE_CXX_COMPILER_ID}") message(NOTICE "CMAKE_CXX_COMPILER_VERSION: ${CMAKE_CXX_COMPILER_VERSION}") message(NOTICE) include(CrucibleConfigure) crucible_configure_address_sanitizer() crucible_configure_exception_handling() crucible_configure_language_standards() crucible_configure_optimizations() crucible_configure_output_directory() crucible_configure_preprocessor_definitions() crucible_configure_sanitizer_recovery_policy() crucible_configure_symbol_export_behavior() crucible_configure_text_encoding() crucible_configure_thread_sanitizer() crucible_configure_undefined_behavior_sanitizer() crucible_configure_warning_level() message(NOTICE) message(NOTICE "╭───────────────────────────────────────╮") message(NOTICE "│ SYSTEM IDENTIFICATION │") message(NOTICE "╰───────────────────────────────────────╯") message(NOTICE) message(NOTICE "CMAKE_SYSTEM_NAME: ${CMAKE_SYSTEM_NAME}") message(NOTICE "CMAKE_SYSTEM_VERSION: ${CMAKE_SYSTEM_VERSION}") message(NOTICE "CMAKE_SYSTEM_PROCESSOR: ${CMAKE_SYSTEM_PROCESSOR}") message(NOTICE "CMAKE_HOST_SYSTEM_NAME: ${CMAKE_HOST_SYSTEM_NAME}") message(NOTICE "CMAKE_HOST_SYSTEM_VERSION: ${CMAKE_HOST_SYSTEM_VERSION}") message(NOTICE "CMAKE_HOST_SYSTEM_PROCESSOR: ${CMAKE_HOST_SYSTEM_PROCESSOR}") message(NOTICE) include(CrucibleCheck) crucible_check_platform_is_64_bit() crucible_check_platform_is_posix_like() crucible_check_platform_is_windows_like() crucible_check_platform_has_dirent_d_namlen() crucible_check_platform_path_separator() message(NOTICE) message(NOTICE "╭───────────────────────────────────╮") message(NOTICE "│ TARGET DEFINITION │") message(NOTICE "╰───────────────────────────────────╯") message(NOTICE) include(CrucibleAdd) add_subdirectory(executables) add_subdirectory(libraries) message(NOTICE) message(NOTICE "╭──────────────────────────╮") message(NOTICE "│ COMPLETE │") message(NOTICE "╰──────────────────────────╯") message(NOTICE)