diff --git a/CMakeLists.txt b/CMakeLists.txt index 0b2326e..b081e29 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -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,44 @@ if (CMAKE_CXX_COMPILER_ID STREQUAL "MSVC") /W4 /permissive- /EHsc + $<$:/WX> ) - add_compile_definitions( - NOVA_COMPILER_MSVC - ) -elseif (CMAKE_CXX_COMPILER_ID STREQUAL "GNU" OR CMAKE_CXX_COMPILER_ID STREQUAL "Clang") + + if (NOVA_SANITIZERS) + add_compile_options(/fsanitize=${NOVA_SANITIZERS}) + 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 + $<$:-Werror> ) + + if (NOVA_SANITIZERS) + add_compile_options(-fsanitize=${NOVA_SANITIZERS}) + add_link_options(-fsanitize=${NOVA_SANITIZERS}) + endif() + if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU") - add_compile_definitions( - NOVA_COMPILER_GCC - ) - else() + 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() - error("Unsupported compiler") + message(FATAL_ERROR "Unsupported compiler") endif() -if (WIN32) +if (CMAKE_SYSTEM_NAME STREQUAL "Windows") add_compile_definitions( NOVA_PLATFORM_WINDOWS NOMINMAX @@ -54,16 +74,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)