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.
1214include (${PROJECT_SOURCE_DIR} /cmake/utils/common.cmake)
1315
1416enable_language (CXX)
15- set_default_values(CMAKE_CXX_SCAN_FOR_MODULES OFF )
1617
17- # Generate compile_commands.json in build directory
18- set (CMAKE_EXPORT_COMPILE_COMMANDS ON )
18+ set_default_values(
19+ CMAKE_EXPORT_COMPILE_COMMANDS ON
20+ CMAKE_CXX_STANDARD 20
21+ CMAKE_CXX_STANDARD_REQUIRED ON
22+ CMAKE_CXX_SCAN_FOR_MODULES OFF
23+ STACK_SIZE 1048576
24+ )
1925
20- set (CMAKE_CXX_STANDARD_REQUIRED ON )
2126log_info("CMAKE_CXX_STANDARD: ${CMAKE_CXX_STANDARD} " )
22-
23- # Set stack size
24- if (NOT DEFINED STACK_SIZE)
25- set (STACK_SIZE 1048576) # 1MB by default
26- endif ()
27+ log_info("CMAKE_CXX_SCAN_FOR_MODULES: ${CMAKE_CXX_SCAN_FOR_MODULES} " )
28+ log_info("STACK_SIZE: ${STACK_SIZE} " )
2729
2830# Compiler flags for MSVC
2931if (CMAKE_CXX_COMPILER_ID STREQUAL "MSVC" )
@@ -54,8 +56,16 @@ elseif(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
5456 else ()
5557 string (APPEND CMAKE_EXE_LINKER_FLAGS " -Wl,-zstack-size=${STACK_SIZE} " )
5658 endif ()
57- # @todo @jamesnulliu
58- # |- Add compiler flags for other compilers
59+ # [TODO] @jamesnulliu
60+ # Support more compilers
5961else ()
6062 log_fatal("Unsupported compiler" )
63+ endif ()
64+
65+ if (STDOUT_IS_TERMINAL)
66+ add_compile_options (
67+ $<$<CXX_COMPILER_ID:GNU>:-fdiagnostics-color=always>
68+ $<$<CXX_COMPILER_ID:Clang>:-fcolor-diagnostics>
69+ $<$<CXX_COMPILER_ID:MSVC >:/FC>
70+ )
6171endif ()
0 commit comments