summaryrefslogtreecommitdiffhomepage
path: root/cmake/CompilerFlags.cmake
diff options
context:
space:
mode:
authorhristo <[email protected]>2021-01-26 15:34:27 +0200
committerGitHub <[email protected]>2021-01-26 14:34:27 +0100
commit88a6f16c9a552ebb8c39fff57cf16cfce7c88913 (patch)
tree01f43248128d37b0c2c2be628797197f30a3df60 /cmake/CompilerFlags.cmake
parent65b299c6cfdfd85a79833641c96b41babd50c872 (diff)
downloadraylib-88a6f16c9a552ebb8c39fff57cf16cfce7c88913.tar.gz
raylib-88a6f16c9a552ebb8c39fff57cf16cfce7c88913.zip
Documentation cmake (#1549)
* 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.
Diffstat (limited to 'cmake/CompilerFlags.cmake')
-rw-r--r--cmake/CompilerFlags.cmake60
1 files changed, 53 insertions, 7 deletions
diff --git a/cmake/CompilerFlags.cmake b/cmake/CompilerFlags.cmake
index 41fee692..970462c8 100644
--- a/cmake/CompilerFlags.cmake
+++ b/cmake/CompilerFlags.cmake
@@ -1,29 +1,53 @@
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)
-# src/external/jar_xm.h does shady stuff
+
+# 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 (ENABLE_MSAN AND ENABLE_ASAN)
- MESSAGE(WARNING "Compiling with both AddressSanitizer and MemorySanitizer is not recommended")
-endif()
-
-add_definitions("-DRAYLIB_CMAKE=1")
-
if(CMAKE_VERSION VERSION_LESS "3.1")
if(CMAKE_C_COMPILER_ID STREQUAL "GNU")
add_if_flag_compiles(-std=gnu99 CMAKE_C_FLAGS)
@@ -31,3 +55,25 @@ if(CMAKE_VERSION VERSION_LESS "3.1")
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()