Various CMakeLists improvements
This commit is contained in:
@@ -9,6 +9,14 @@ enable_language(CXX)
|
||||
set(CMAKE_CXX_STANDARD 23)
|
||||
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||
set(CMAKE_CXX_VISIBILITY_PRESET hidden)
|
||||
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
|
||||
|
||||
if (NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
|
||||
set(CMAKE_BUILD_TYPE Release CACHE STRING "Choose the type of build (Debug, Release, RelWithDebInfo, MinSizeRel)" FORCE)
|
||||
endif()
|
||||
|
||||
set(NOVA_SANITIZERS "" CACHE STRING "Sanitizers to enable (address, undefined, leak)")
|
||||
set(NOVA_WERROR OFF CACHE BOOL "Treat compiler warnings as errors")
|
||||
|
||||
add_compile_definitions(
|
||||
NOVA_VERSION_MAJOR=${PROJECT_VERSION_MAJOR}
|
||||
@@ -21,32 +29,47 @@ if (CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
|
||||
/W4
|
||||
/permissive-
|
||||
/EHsc
|
||||
$<$<BOOL:${NOVA_WERROR}>:/WX>
|
||||
)
|
||||
add_compile_definitions(
|
||||
NOVA_COMPILER_MSVC
|
||||
)
|
||||
elseif (CMAKE_CXX_COMPILER_ID STREQUAL "GNU" OR CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
|
||||
|
||||
if (NOVA_SANITIZERS)
|
||||
string(REPLACE "," ";" SANITIZERS ${NOVA_SANITIZERS})
|
||||
foreach(sanitizer IN LISTS SANITIZERS)
|
||||
add_compile_options(/fsanitize=${sanitizer})
|
||||
endforeach()
|
||||
endif()
|
||||
|
||||
add_compile_definitions(NOVA_COMPILER_MSVC)
|
||||
elseif (CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang")
|
||||
add_compile_options(
|
||||
-Wall
|
||||
-Wextra
|
||||
-Wpedantic
|
||||
-Wshadow
|
||||
-Wold-style-cast
|
||||
$<$<BOOL:${NOVA_WERROR}>:-Werror>
|
||||
)
|
||||
if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
|
||||
add_compile_definitions(
|
||||
NOVA_COMPILER_GCC
|
||||
)
|
||||
else()
|
||||
add_compile_definitions(
|
||||
NOVA_COMPILER_CLANG
|
||||
)
|
||||
endif()
|
||||
else()
|
||||
error("Unsupported compiler")
|
||||
|
||||
if (NOVA_SANITIZERS)
|
||||
add_compile_options(-fsanitize=${NOVA_SANITIZERS})
|
||||
add_link_options(-fsanitize=${NOVA_SANITIZERS})
|
||||
endif()
|
||||
|
||||
if (WIN32)
|
||||
if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
|
||||
add_compile_definitions(NOVA_COMPILER_GCC)
|
||||
elseif (CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
|
||||
add_compile_definitions(NOVA_COMPILER_CLANG)
|
||||
elseif (CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang")
|
||||
add_compile_definitions(
|
||||
NOVA_COMPILER_CLANG
|
||||
NOVA_COMPILER_APPLE_CLANG
|
||||
)
|
||||
endif()
|
||||
else()
|
||||
message(FATAL_ERROR "Unsupported compiler")
|
||||
endif()
|
||||
|
||||
if (CMAKE_SYSTEM_NAME STREQUAL "Windows")
|
||||
add_compile_definitions(
|
||||
NOVA_PLATFORM_WINDOWS
|
||||
NOMINMAX
|
||||
@@ -54,16 +77,12 @@ if (WIN32)
|
||||
_CRT_SECURE_NO_WARNINGS
|
||||
_CRT_NONSTDC_NO_WARNINGS
|
||||
)
|
||||
elseif (APPLE)
|
||||
add_compile_definitions(
|
||||
NOVA_PLATFORM_MACOS
|
||||
)
|
||||
elseif (UNIX)
|
||||
add_compile_definitions(
|
||||
NOVA_PLATFORM_LINUX
|
||||
)
|
||||
elseif (CMAKE_SYSTEM_NAME STREQUAL "Darwin")
|
||||
add_compile_definitions(NOVA_PLATFORM_MACOS)
|
||||
elseif (CMAKE_SYSTEM_NAME STREQUAL "Linux")
|
||||
add_compile_definitions(NOVA_PLATFORM_LINUX)
|
||||
else()
|
||||
error("Unsupported platform")
|
||||
message(FATAL_ERROR "Unsupported platform")
|
||||
endif()
|
||||
|
||||
add_subdirectory(engine)
|
||||
|
||||
Reference in New Issue
Block a user