22# @file compiler-configs-cpp.cmake
33# @brief Compiler configurations for the host.
44#
5- # @note Several parameters SHOULD be set BEFORE including this file:
5+ # @note Values MUST be set BEFORE including this file:
6+ # - `STDOUT_IS_TERMINAL`: Whether stdout is a terminal.
7+ # Values SHOULD be set BEFORE including this file:
68# - `ENV{CXX}`: C++ Compiler. Default: auto-detected.
79# - `CMAKE_CXX_STANDARD`: C++ Standard. Default: 20.
810# - `CMAKE_CXX_SCAN_FOR_MODULES`: Whether to use modules. Default: OFF.
911# - `STACK_SIZE`: Stack size for the executable. Default: 1048576 (1MB).
1012# ==================================================================================================
1113
12- include (${PROJECT_SOURCE_DIR} /cmake /utils/common.cmake)
14+ include (${CMAKE_CURRENT_LIST_DIR} /.. /utils/common.cmake)
1315
14- set_default_values(CMAKE_CXX_SCAN_FOR_MODULES OFF )
1516enable_language (CXX)
1617
17- # Generate compile_commands.json in build directory
18- set (CMAKE_EXPORT_COMPILE_COMMANDS ON )
18+ set (CMAKE_CXX_STANDARD_REQUIRED ON )
1919
20- set (CMAKE_CXX_STANDARD_REQUIRED ON )
21- log_info("CMAKE_CXX_STANDARD: ${CMAKE_CXX_STANDARD} " )
20+ set_default_values(
21+ CMAKE_CXX_STANDARD 20
22+ CMAKE_CXX_SCAN_FOR_MODULES OFF
23+ STACK_SIZE 1048576
24+ )
2225
23- # Set stack size
24- if (NOT DEFINED STACK_SIZE)
25- set (STACK_SIZE 1048576) # 1MB by default
26- endif ()
26+ log_info("CMAKE_CXX_STANDARD: ${CMAKE_CXX_STANDARD} " )
27+ log_info("CMAKE_CXX_SCAN_FOR_MODULES: ${CMAKE_CXX_SCAN_FOR_MODULES} " )
28+ log_info("STACK_SIZE: ${STACK_SIZE} " )
2729
28- # Compiler flags for MSVC
30+ # MSVC ----------------------------------------------------------------------------------------------------------------
2931if (CMAKE_CXX_COMPILER_ID STREQUAL "MSVC" )
3032 string (APPEND CMAKE_CXX_FLAGS " /permissive- /Zc:forScope /openmp /Zc:__cplusplus" )
31- string (APPEND CMAKE_CXX_FLAGS_RELEASE " /O2" )
32- string (APPEND CMAKE_CXX_FLAGS_DEBUG " /Zi" )
33- # Set stack size
3433 string (APPEND CMAKE_EXE_LINKER_FLAGS " /STACK:${STACK_SIZE} " )
35- # Compiler flags for Clang
34+ # Clang ---------------------------------------------------------------------------------------------------------------
3635elseif (CMAKE_CXX_COMPILER_ID STREQUAL "Clang" )
37- string (APPEND CMAKE_CXX_FLAGS " -fopenmp -Wall -Wextra -Werror" )
38- string (APPEND CMAKE_CXX_FLAGS_RELEASE " -O3" )
39- string (APPEND CMAKE_CXX_FLAGS_DEBUG " -g" )
40- # Set stack size
36+ string (APPEND CMAKE_CXX_FLAGS " -stdlib=libc++ -fopenmp -Wall -Wextra -Werror" )
4137 if (WIN32 )
4238 string (APPEND CMAKE_EXE_LINKER_FLAGS " -Wl,-stack,${STACK_SIZE} " )
4339 else ()
4440 string (APPEND CMAKE_EXE_LINKER_FLAGS " -Wl,-zstack-size=${STACK_SIZE} " )
4541 endif ()
46- # Compiler flags for GNU
42+ # GNU -----------------------------------------------------------------------------------------------------------------
4743elseif (CMAKE_CXX_COMPILER_ID STREQUAL "GNU" )
4844 string (APPEND CMAKE_CXX_FLAGS " -fopenmp -Wall -Wextra -Werror" )
49- string (APPEND CMAKE_CXX_FLAGS_RELEASE " -O3" )
50- string (APPEND CMAKE_CXX_FLAGS_DEBUG " -g" )
51- # Set stack size
5245 if (WIN32 )
5346 string (APPEND CMAKE_EXE_LINKER_FLAGS " -Wl,--stack,${STACK_SIZE} " )
5447 else ()
5548 string (APPEND CMAKE_EXE_LINKER_FLAGS " -Wl,-zstack-size=${STACK_SIZE} " )
5649 endif ()
57- # @todo @jamesnulliu
58- # |- Add compiler flags for other compilers
5950else ()
6051 log_fatal("Unsupported compiler" )
52+ endif ()
53+
54+ if (STDOUT_IS_TERMINAL)
55+ add_compile_options (
56+ $<$<CXX_COMPILER_ID:GNU>:-fdiagnostics-color=always>
57+ $<$<CXX_COMPILER_ID:Clang>:-fcolor-diagnostics>
58+ $<$<CXX_COMPILER_ID:MSVC >:/FC>
59+ )
6160endif ()
0 commit comments