diff --git a/CMakeLists.txt b/CMakeLists.txt index e1217c1b5..f691fa09e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -132,6 +132,7 @@ option(VULKAN "Enable the vulkan backend" ${AUTO_VULKAN_BACKEND}) option(EXCEPTION_HANDLING "Enable exception handling (only works with Windows as of now)" OFF) option(IPO "Enable interprocedural optimizations" OFF) option(FUSE_LD "Linker to use" OFF) +option(SECURITY_COMPILER_FLAGS "Whether to set security-relevant compiler flags like -D_FORTIFY_SOURCE=2 and -fstack-protector-all" ON) if(CMAKE_SYSTEM_NAME STREQUAL "Emscripten") include(${PROJECT_SOURCE_DIR}/cmake/toolchains/Emscripten.toolchain) @@ -293,9 +294,11 @@ if(NOT MSVC AND NOT HAIKU) add_cxx_compiler_flag_if_supported(OUR_FLAGS_OWN -std=gnu++17) endif() - # Protect the stack pointer. - # -fstack-protector-all doesn't work on MinGW. - add_cxx_compiler_flag_if_supported(OUR_FLAGS -fstack-protector-all) + if(NOT SECURITY_COMPILER_FLAGS STREQUAL OFF) + # Protect the stack pointer. + # -fstack-protector-all doesn't work on MinGW. + add_cxx_compiler_flag_if_supported(OUR_FLAGS -fstack-protector-all) + endif() # Disable exceptions as DDNet does not use them. add_cxx_compiler_flag_if_supported(OUR_FLAGS -fno-exceptions) @@ -359,7 +362,7 @@ if(MSVC) endif() endif() -if(NOT MSVC AND NOT HAIKU) +if(NOT MSVC AND NOT HAIKU AND NOT SECURITY_COMPILER_FLAGS STREQUAL OFF) check_c_compiler_flag("-O2;-Wp,-Werror;-D_FORTIFY_SOURCE=2" DEFINE_FORTIFY_SOURCE) # Some distributions define _FORTIFY_SOURCE by themselves. endif() diff --git a/README.md b/README.md index 5389536ed..b8e1a5316 100644 --- a/README.md +++ b/README.md @@ -134,11 +134,19 @@ Default value is ON for Windows x86\_64 and Linux, and OFF for Windows x86 and m Use the Ninja build system instead of Make. This automatically parallelizes the build and is generally faster. Compile with `ninja` instead of `make`. Install Ninja with `sudo apt install ninja-build` on Debian, `sudo pacman -S --needed ninja` on Arch Linux. * **-DCMAKE_CXX_LINK_FLAGS=[FLAGS]**
-Custom flags to set for compiler when linking. With clang++ as the compiler this can be [used to link](https://github.com/rui314/mold#how-to-use) with [mold](https://github.com/rui314/mold), speeds up linking by a factor of ~10: +Custom flags to set for compiler when linking. -```bash -CC=clang CXX=clang++ cmake -DCMAKE_CXX_LINK_FLAGS="--ld-path=/usr/bin/mold" . -``` +* **-DEXCEPTION_HANDLING=[ON|OFF]**
+Enable exception handling (only works with Windows as of now, uses DrMingw there). Default value is OFF. + +* **-DIPO=[ON|OFF]**
+Enable interprocedural optimizations, also known as Link Time Optimization (LTO). Default value is OFF. + +* **-DFUSE_LD=[OFF|LINKER]**
+Linker to use. Default value is OFF to try mold, lld, gold. + +* **-DSECURITY_COMPILER_FLAGS=[ON|OFF]**
+Whether to set security-relevant compiler flags like `-D_FORTIFY_SOURCE=2` and `-fstack-protector-all`. Default Value is ON. Running tests (Debian/Ubuntu) -----------------------------