mirror of
https://github.com/gbdev/rgbds.git
synced 2025-11-20 02:02:06 +00:00
Modularize CMake build configuration
Build type no longer defaults to Release (!) have separate options for extra warning flags and sanitizers toss DEVELOP macro Fix sanitizers with CMake while I'm at it :|
This commit is contained in:
@@ -12,18 +12,6 @@ cmake_policy(VERSION 3.0)
|
||||
project(rgbds
|
||||
LANGUAGES C)
|
||||
|
||||
option(DEVELOP "build in development mode" OFF)
|
||||
|
||||
set(DEFAULT_BUILD_TYPE "Release")
|
||||
set(DEVELOP_BUILD_TYPE "Debug")
|
||||
if(NOT CMAKE_BUILD_TYPE)
|
||||
if(DEVELOP)
|
||||
set(CMAKE_BUILD_TYPE "${DEVELOP_BUILD_TYPE}")
|
||||
else()
|
||||
set(CMAKE_BUILD_TYPE "${DEFAULT_BUILD_TYPE}")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
# get real path of source and binary directories
|
||||
get_filename_component(srcdir "${CMAKE_SOURCE_DIR}" REALPATH)
|
||||
get_filename_component(bindir "${CMAKE_BINARY_DIR}" REALPATH)
|
||||
@@ -37,16 +25,26 @@ endif()
|
||||
|
||||
include_directories("${PROJECT_SOURCE_DIR}/include")
|
||||
|
||||
if(DEVELOP)
|
||||
add_definitions(-DDEVELOP)
|
||||
endif()
|
||||
option(SANITIZERS "Build with sanitizers enabled" OFF)
|
||||
option(MORE_WARNINGS "Turn on more warnings" OFF)
|
||||
|
||||
if(MSVC)
|
||||
add_compile_options(/W1 /MP)
|
||||
add_definitions(/D_CRT_SECURE_NO_WARNINGS)
|
||||
else()
|
||||
if(DEVELOP)
|
||||
add_compile_options(-Werror -Wall -Wextra -pedantic -Wno-type-limits
|
||||
add_compile_options(-Wall -pedantic)
|
||||
if(SANITIZERS)
|
||||
set(SAN_FLAGS -fsanitize=shift -fsanitize=integer-divide-by-zero
|
||||
-fsanitize=unreachable -fsanitize=vla-bound
|
||||
-fsanitize=signed-integer-overflow -fsanitize=bounds
|
||||
-fsanitize=object-size -fsanitize=bool -fsanitize=enum
|
||||
-fsanitize=alignment -fsanitize=null)
|
||||
add_compile_options(${SAN_FLAGS})
|
||||
link_libraries(${SAN_FLAGS})
|
||||
endif()
|
||||
|
||||
if(MORE_WARNINGS)
|
||||
add_compile_options(-Werror -Wextra -Wno-type-limits
|
||||
-Wno-sign-compare -Wformat -Wformat-security -Wformat-overflow=2
|
||||
-Wformat-truncation=1 -Wformat-y2k -Wswitch-enum -Wunused
|
||||
-Wuninitialized -Wunknown-pragmas -Wstrict-overflow=5
|
||||
@@ -54,14 +52,6 @@ else()
|
||||
-Wfloat-equal -Wshadow -Wcast-qual -Wcast-align -Wlogical-op
|
||||
-Wnested-externs -Wno-aggressive-loop-optimizations -Winline
|
||||
-Wundef -Wstrict-prototypes -Wold-style-definition)
|
||||
|
||||
link_libraries(-fsanitize=shift -fsanitize=integer-divide-by-zero
|
||||
-fsanitize=unreachable -fsanitize=vla-bound
|
||||
-fsanitize=signed-integer-overflow -fsanitize=bounds
|
||||
-fsanitize=object-size -fsanitize=bool -fsanitize=enum
|
||||
-fsanitize=alignment -fsanitize=null)
|
||||
else()
|
||||
add_compile_options(-Wall -pedantic)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user