11# CMakeLists.txt Main
22
3- cmake_minimum_required (VERSION 3.31 )
3+ set (CMAKE_VERSION_MINIMUM 3.31)
4+ cmake_minimum_required (VERSION ${CMAKE_VERSION_MINIMUM} )
5+ message (STATUS "Cmake version: ${CMAKE_VERSION} (>= ${CMAKE_VERSION_MINIMUM} ✓)" )
6+ if (CMAKE_GENERATOR MATCHES "Visual Studio" OR CMAKE_GENERATOR MATCHES "Ninja Multi-Config" )
7+ set (CMAKE_GENERATOR_PLATFORM x64 CACHE STRING "Platform" FORCE )
8+ endif ()
49project (original LANGUAGES CXX )
5- set (ORIGINAL_VERSION 0.1.5 )
10+ set (ORIGINAL_VERSION 0.1.6 )
611set (CMAKE_CXX_STANDARD 23)
712set (CMAKE_CXX_STANDARD_REQUIRED True )
13+ set (CMAKE_CXX_EXTENSIONS OFF )
14+
15+ find_package (Threads REQUIRED )
16+
17+ if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU" )
18+ set (COMPILER_GCC_VERSION_MINIMUM 13.0)
19+ if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS ${COMPILER_GCC_VERSION_MINIMUM} )
20+ message (FATAL_ERROR "GCC version too old. Minimum required: ${COMPILER_GCC_VERSION_MINIMUM} . Current: ${CMAKE_CXX_COMPILER_VERSION} " )
21+ else ()
22+ message (STATUS "GCC version: ${CMAKE_CXX_COMPILER_VERSION} (>= ${COMPILER_GCC_VERSION_MINIMUM} ✓)" )
23+ endif ()
24+ endif ()
25+
26+ if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang" )
27+ set (COMPILER_CLANG_VERSION_MINIMUM 20.0)
28+ if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS ${COMPILER_CLANG_VERSION_MINIMUM} )
29+ message (FATAL_ERROR "Clang version too old. Minimum required: ${COMPILER_CLANG_VERSION_MINIMUM} . Current: ${CMAKE_CXX_COMPILER_VERSION} " )
30+ else ()
31+ message (STATUS "Clang version: ${CMAKE_CXX_COMPILER_VERSION} (>= ${COMPILER_CLANG_VERSION_MINIMUM} ✓)" )
32+ endif ()
33+ endif ()
34+ if (MSVC )
35+ set (COMPILER_MSVC_VERSION_MINIMUM 1944)
36+ if (MSVC_VERSION LESS ${COMPILER_MSVC_VERSION_MINIMUM} )
37+ message (FATAL_ERROR "MSVC version too old. Minimum required: ${COMPILER_MSVC_VERSION_MINIMUM} . Current: ${MSVC_VERSION} " )
38+ else ()
39+ message (STATUS "MSVC version: ${MSVC_VERSION} (>= ${COMPILER_MSVC_VERSION_MINIMUM} ✓)" )
40+ endif ()
41+ set (CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION "10.0" CACHE STRING "Windows Target Platform Version" )
42+ endif ()
43+ if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU" OR CMAKE_CXX_COMPILER_ID STREQUAL "Clang" )
44+ include (CheckCXXCompilerFlag )
45+ check_cxx_compiler_flag ("-std=c++23" HAS_CXX23_FLAG )
46+ if (NOT HAS_CXX23_FLAG)
47+ message (WARNING "Compiler may not fully support C++23 standard" )
48+ endif ()
49+ endif ()
50+
851if (NOT CMAKE_BUILD_TYPE )
952 set (CMAKE_BUILD_TYPE Release CACHE STRING "Build type (default Release)" FORCE )
1053endif ()
@@ -20,6 +63,7 @@ file(GLOB ORIGINAL_HEADERS
2063 "${ORIGINAL_SRC_DIR} /vibrant/*.h"
2164)
2265add_library (original STATIC ${ORIGINAL_HEADERS} src/original.cpp )
66+ target_link_libraries (original PUBLIC Threads::Threads )
2367
2468target_include_directories (original PUBLIC
2569 $<BUILD_INTERFACE :${CMAKE_CURRENT_SOURCE_DIR} /src >
@@ -69,24 +113,12 @@ install(FILES
69113 DESTINATION ${CMAKE_INSTALL_LIBDIR} /cmake/original
70114)
71115
116+ add_subdirectory (debug )
117+
72118option (BUILD_TESTING "Build the testing directories" ON )
73119
74120if (BUILD_TESTING)
75121 include (CTest )
76- if (MSVC )
77- set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /Zi" )
78- set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /Zi" )
79- else ()
80- if (NOT CMAKE_SYSTEM_NAME STREQUAL "Windows" )
81- set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address -g" )
82- set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=address -g" )
83- else ()
84- set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g" )
85- set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g" )
86- endif ()
87- endif ()
88-
89- # test cases
90- add_subdirectory (test /other )
91- add_subdirectory (test /unit_test )
122+ enable_testing ()
123+ add_subdirectory (test )
92124endif ()
0 commit comments