2021-11-26 02:34:58 +08:00
|
|
|
# Set a default build type if none was specified
|
2021-12-01 12:20:39 +08:00
|
|
|
if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
|
|
|
|
message(STATUS "Setting build type to 'RelWithDebInfo' as none was specified.")
|
|
|
|
set(CMAKE_BUILD_TYPE
|
|
|
|
RelWithDebInfo
|
|
|
|
CACHE STRING "Choose the type of build." FORCE)
|
|
|
|
# Set the possible values of build type for cmake-gui, ccmake
|
|
|
|
set_property(
|
|
|
|
CACHE CMAKE_BUILD_TYPE
|
|
|
|
PROPERTY STRINGS
|
|
|
|
"Debug"
|
|
|
|
"Release"
|
|
|
|
"MinSizeRel"
|
|
|
|
"RelWithDebInfo")
|
|
|
|
endif()
|
2021-11-26 02:34:58 +08:00
|
|
|
|
2022-06-06 04:36:15 +08:00
|
|
|
set(CMAKE_CXX_STANDARD 20)
|
|
|
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
2021-12-21 07:13:13 +08:00
|
|
|
set(CMAKE_CXX_EXTENSIONS OFF)
|
|
|
|
|
2024-07-09 07:32:07 +08:00
|
|
|
# Build shared libraries by default
|
|
|
|
set(BUILD_SHARED_LIBS ON CACHE INTERNAL "" FORCE)
|
|
|
|
|
2021-12-21 07:13:13 +08:00
|
|
|
set(FTXUI_BUILD_DOCS OFF CACHE INTERNAL "" FORCE)
|
|
|
|
set(FTXUI_BUILD_EXAMPLES OFF CACHE INTERNAL "" FORCE)
|
|
|
|
set(FTXUI_ENABLE_INSTALL OFF CACHE INTERNAL "" FORCE)
|
|
|
|
set(SPDLOG_FMT_EXTERNAL ON CACHE INTERNAL "" FORCE)
|
|
|
|
set(SPDLOG_DISABLE_DEFAULT_LOGGER ON CACHE INTERNAL "" FORCE)
|
2021-12-31 20:52:54 +08:00
|
|
|
set(SIMDJSON_DISABLE_DEPRECATED_API ON CACHE INTERNAL "" FORCE)
|
2024-05-12 05:20:50 +08:00
|
|
|
set(CPR_USE_SYSTEM_CURL ON CACHE INTERNAL "" FORCE)
|
2021-12-21 07:13:13 +08:00
|
|
|
|
2021-11-26 02:34:58 +08:00
|
|
|
# Generate compile_commands.json to make it easier to work with clang based tools
|
|
|
|
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
|
|
|
|
|
2024-06-26 05:49:53 +08:00
|
|
|
# Build with PIC
|
|
|
|
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
|
|
|
|
|
2023-04-03 07:22:07 +08:00
|
|
|
if(CMAKE_C_COMPILER_ID MATCHES ".*Clang")
|
|
|
|
set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -flto=thin -fwhole-program-vtables")
|
|
|
|
set(CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} -flto=thin -fwhole-program-vtables")
|
|
|
|
elseif(CMAKE_C_COMPILER_ID STREQUAL "GNU")
|
|
|
|
set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -flto -fwhole-program -fuse-linker-plugin")
|
2022-02-14 07:22:19 +08:00
|
|
|
endif()
|
2023-04-03 07:22:07 +08:00
|
|
|
if(CMAKE_CXX_COMPILER_ID MATCHES ".*Clang")
|
|
|
|
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -flto=thin -fwhole-program-vtables")
|
|
|
|
set(CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} -flto=thin -fwhole-program-vtables")
|
|
|
|
elseif(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
|
|
|
|
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -flto -fwhole-program -fuse-linker-plugin")
|
2022-02-12 08:38:15 +08:00
|
|
|
endif()
|
|
|
|
|
2023-04-03 07:22:07 +08:00
|
|
|
if(CMAKE_CXX_COMPILER_ID MATCHES ".*Clang")
|
|
|
|
#add_compile_options(-nostdlib++ -stdlib=libc++ -nodefaultlibs -fexperimental-library)
|
|
|
|
#add_link_options(-stdlib=libc++)
|
|
|
|
|
|
|
|
add_compile_options(-fstrict-vtable-pointers)
|
|
|
|
|
|
|
|
if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS 16)
|
|
|
|
# Set new experimental pass manager, it's a performance, build time and binary size win.
|
|
|
|
# Can be removed after https://reviews.llvm.org/D66490 merged and released to at least two versions of clang.
|
|
|
|
add_compile_options(-fexperimental-new-pass-manager)
|
|
|
|
endif()
|
|
|
|
endif()
|
|
|
|
|
2021-11-26 02:34:58 +08:00
|
|
|
option(ENABLE_IPO "Enable Interprocedural Optimization, aka Link Time Optimization (LTO)" OFF)
|
|
|
|
|
2021-12-01 12:20:39 +08:00
|
|
|
if(ENABLE_IPO)
|
|
|
|
include(CheckIPOSupported)
|
|
|
|
check_ipo_supported(
|
|
|
|
RESULT
|
|
|
|
result
|
|
|
|
OUTPUT
|
|
|
|
output)
|
|
|
|
if(result)
|
|
|
|
set(CMAKE_INTERPROCEDURAL_OPTIMIZATION ON)
|
|
|
|
else()
|
|
|
|
message(SEND_ERROR "IPO is not supported: ${output}")
|
|
|
|
endif()
|
|
|
|
endif()
|
|
|
|
if(CMAKE_CXX_COMPILER_ID MATCHES ".*Clang")
|
|
|
|
add_compile_options(-fcolor-diagnostics)
|
|
|
|
elseif(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
|
|
|
|
add_compile_options(-fdiagnostics-color=always)
|
|
|
|
else()
|
|
|
|
message(STATUS "No colored compiler diagnostic set for '${CMAKE_CXX_COMPILER_ID}' compiler.")
|
|
|
|
endif()
|
2021-11-26 02:34:58 +08:00
|
|
|
|
2024-06-26 05:49:53 +08:00
|
|
|
# Builds as statically linked
|
|
|
|
option(COS_BUILD_STATIC "Build all static" OFF)
|
|
|
|
if(COS_BUILD_STATIC)
|
|
|
|
set(BUILD_SHARED_LIBS OFF CACHE INTERNAL "" FORCE)
|
|
|
|
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -static-libgcc -static-libstdc++")# -static")
|
|
|
|
endif()
|
|
|
|
|
2021-11-29 00:22:19 +08:00
|
|
|
# Enables STL container checker if not building a release.
|
2021-12-01 12:20:39 +08:00
|
|
|
if(CMAKE_BUILD_TYPE STREQUAL "Debug")
|
|
|
|
add_definitions(-D_GLIBCXX_ASSERTIONS)
|
2023-04-03 07:22:07 +08:00
|
|
|
add_definitions(-D_LIBCPP_ENABLE_THREAD_SAFETY_ANNOTATIONS=1)
|
|
|
|
add_definitions(-D_LIBCPP_ENABLE_ASSERTIONS=1)
|
2021-12-01 12:20:39 +08:00
|
|
|
endif()
|
2021-12-02 04:03:46 +08:00
|
|
|
|
|
|
|
# Enables dev environment.
|
|
|
|
option(ENABLE_DEVENV "Enable dev environment" ON)
|
|
|
|
if(NOT ENABLE_DEVENV)
|
|
|
|
add_definitions(-DNDEVENV)
|
|
|
|
endif()
|
2022-08-08 04:55:17 +08:00
|
|
|
|
|
|
|
# Enables tests.
|
2022-08-08 05:11:50 +08:00
|
|
|
option(COS_INSTALLER_BUILD_TESTS "Enable dev environment" OFF)
|
2022-12-09 06:55:15 +08:00
|
|
|
|
|
|
|
# Get the Git revision
|
|
|
|
include(GitVersion)
|
|
|
|
add_definitions(-DINSTALLER_VERSION="${GIT_VERSION}")
|