88a6f16c9a
* Documenting the compiler flags * Moved some android compiler flags and added documentation on them too. * Some more restructuring. Removed unnecessary comments that were self described by the code. Added some more explanations around certain parts of CMake and especially around compiler flags.
80 lines
3.1 KiB
CMake
80 lines
3.1 KiB
CMake
include(AddIfFlagCompiles)
|
|
|
|
# Makes +/- operations on void pointers be considered an error
|
|
# https://gcc.gnu.org/onlinedocs/gcc/Pointer-Arith.html
|
|
add_if_flag_compiles(-Werror=pointer-arith CMAKE_C_FLAGS)
|
|
|
|
# Generates error whenever a function is used before being declared
|
|
# https://gcc.gnu.org/onlinedocs/gcc-4.0.1/gcc/Warning-Options.html
|
|
add_if_flag_compiles(-Werror=implicit-function-declaration CMAKE_C_FLAGS)
|
|
|
|
# Allows some casting of pointers without generating a warning
|
|
add_if_flag_compiles(-fno-strict-aliasing CMAKE_C_FLAGS)
|
|
|
|
if (ENABLE_MSAN AND ENABLE_ASAN)
|
|
# MSAN and ASAN both work on memory - ASAN does more things
|
|
MESSAGE(WARNING "Compiling with both AddressSanitizer and MemorySanitizer is not recommended")
|
|
endif()
|
|
|
|
if (ENABLE_ASAN)
|
|
|
|
# If enabled it would generate errors/warnings for all kinds of memory errors
|
|
# (like returning a stack variable by reference)
|
|
# https://clang.llvm.org/docs/AddressSanitizer.html
|
|
|
|
add_if_flag_compiles(-fno-omit-frame-pointer CMAKE_C_FLAGS CMAKE_LINKER_FLAGS)
|
|
add_if_flag_compiles(-fsanitize=address CMAKE_C_FLAGS CMAKE_LINKER_FLAGS)
|
|
|
|
endif()
|
|
|
|
if (ENABLE_UBSAN)
|
|
|
|
# If enabled this will generate errors for undefined behavior points
|
|
# (like adding +1 to the maximum int value)
|
|
# https://clang.llvm.org/docs/UndefinedBehaviorSanitizer.html
|
|
|
|
add_if_flag_compiles(-fno-omit-frame-pointer CMAKE_C_FLAGS CMAKE_LINKER_FLAGS)
|
|
add_if_flag_compiles(-fsanitize=undefined CMAKE_C_FLAGS CMAKE_LINKER_FLAGS)
|
|
|
|
endif()
|
|
|
|
if (ENABLE_MSAN)
|
|
|
|
# If enabled this will generate warnings for places where uninitialized memory is used
|
|
# https://clang.llvm.org/docs/MemorySanitizer.html
|
|
|
|
add_if_flag_compiles(-fno-omit-frame-pointer CMAKE_C_FLAGS CMAKE_LINKER_FLAGS)
|
|
add_if_flag_compiles(-fsanitize=memory CMAKE_C_FLAGS CMAKE_LINKER_FLAGS)
|
|
|
|
endif()
|
|
|
|
if(CMAKE_VERSION VERSION_LESS "3.1")
|
|
if(CMAKE_C_COMPILER_ID STREQUAL "GNU")
|
|
add_if_flag_compiles(-std=gnu99 CMAKE_C_FLAGS)
|
|
endif()
|
|
else()
|
|
set (CMAKE_C_STANDARD 99)
|
|
endif()
|
|
|
|
if(${PLATFORM} MATCHES "Android")
|
|
|
|
# If enabled will remove dead code during the linking process
|
|
# https://gcc.gnu.org/onlinedocs/gnat_ugn/Compilation-options.html
|
|
add_if_flag_compiles(-ffunction-sections CMAKE_C_FLAGS)
|
|
|
|
# If enabled will generate some exception data (usually disabled for C programs)
|
|
# https://gcc.gnu.org/onlinedocs/gcc-4.2.4/gcc/Code-Gen-Options.html
|
|
add_if_flag_compiles(-funwind-tables CMAKE_C_FLAGS)
|
|
|
|
# If enabled adds stack protection guards around functions that allocate memory
|
|
# https://www.keil.com/support/man/docs/armclang_ref/armclang_ref_cjh1548250046139.htm
|
|
add_if_flag_compiles(-fstack-protector-strong CMAKE_C_FLAGS)
|
|
|
|
# Marks that the library will not be compiled with an executable stack
|
|
add_if_flag_compiles(-Wa,--noexecstack CMAKE_C_FLAGS)
|
|
|
|
# Do not expand symbolic links or resolve paths like "/./" or "/../", etc.
|
|
# https://gcc.gnu.org/onlinedocs/gcc/Directory-Options.html
|
|
add_if_flag_compiles(-no-canonical-prefixes CMAKE_C_FLAGS)
|
|
endif()
|