59 lines
2.5 KiB
Diff
59 lines
2.5 KiB
Diff
|
From 2f6d2e5795382f0d6e22f5aea52e8104110d24ad Mon Sep 17 00:00:00 2001
|
||
|
From: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
|
||
|
Date: Sun, 19 Jul 2020 16:29:15 +0200
|
||
|
Subject: [PATCH] cmake/compilerFlags.cmake: properly detect availability of
|
||
|
flags
|
||
|
|
||
|
Instead of relying on fragile and complex logic to decide if a
|
||
|
compiler flag is available or not, use the check_c_compiler_flag()
|
||
|
macro provided by the CMake standard library.
|
||
|
|
||
|
This for example avoids using -fcf-protection on architectures that
|
||
|
don't support this option.
|
||
|
|
||
|
[Upstream: https://github.com/Exiv2/exiv2/pull/1252. The submitted
|
||
|
patch is slightly different than this one, due to other changes
|
||
|
between 0.27.3 and master.]
|
||
|
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
|
||
|
---
|
||
|
cmake/compilerFlags.cmake | 18 +++++++++++-------
|
||
|
1 file changed, 11 insertions(+), 7 deletions(-)
|
||
|
|
||
|
diff --git a/cmake/compilerFlags.cmake b/cmake/compilerFlags.cmake
|
||
|
index 0418aa61..be430977 100644
|
||
|
--- a/cmake/compilerFlags.cmake
|
||
|
+++ b/cmake/compilerFlags.cmake
|
||
|
@@ -1,4 +1,5 @@
|
||
|
# These flags applies to exiv2lib, the applications, and to the xmp code
|
||
|
+include(CheckCCompilerFlag)
|
||
|
|
||
|
if ( MINGW OR UNIX OR MSYS ) # MINGW, Linux, APPLE, CYGWIN
|
||
|
if (${CMAKE_CXX_COMPILER_ID} STREQUAL GNU)
|
||
|
@@ -25,13 +26,16 @@ if ( MINGW OR UNIX OR MSYS ) # MINGW, Linux, APPLE, CYGWIN
|
||
|
|
||
|
# This fails under Fedora, MinGW GCC 8.3.0 and CYGWIN/MSYS 9.3.0
|
||
|
if (NOT (MINGW OR CMAKE_HOST_SOLARIS OR CYGWIN OR MSYS) )
|
||
|
- if (COMPILER_IS_GCC AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 8.0)
|
||
|
- add_compile_options(-fstack-clash-protection -fcf-protection)
|
||
|
- endif()
|
||
|
-
|
||
|
- if( (COMPILER_IS_GCC AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 5.0) # Not in GCC 4.8
|
||
|
- OR (COMPILER_IS_CLANG AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 3.7) # Not in Clang 3.4.2
|
||
|
- )
|
||
|
+ check_c_compiler_flag(-fstack-clash-protection HAS_FSTACK_CLASH_PROTECTION)
|
||
|
+ check_c_compiler_flag(-fcf-protection HAS_FCF_PROTECTION)
|
||
|
+ check_c_compiler_flag(-fstack-protector-strong HAS_FSTACK_PROTECTOR_STRONG)
|
||
|
+ if(HAS_FSTACK_CLASH_PROTECTION)
|
||
|
+ add_compile_options(-fstack-clash-protection)
|
||
|
+ endif()
|
||
|
+ if(GCC_HAS_FCF_PROTECTION)
|
||
|
+ add_compile_options(-fcf-protection)
|
||
|
+ endif()
|
||
|
+ if(GCC_HAS_FSTACK_PROTECTOR_STRONG)
|
||
|
add_compile_options(-fstack-protector-strong)
|
||
|
endif()
|
||
|
endif()
|
||
|
---
|
||
|
2.26.2
|
||
|
|