aboutsummaryrefslogtreecommitdiff
path: root/cmake
diff options
context:
space:
mode:
authorRiccardo Spagni <ric@spagni.net>2018-01-10 11:53:26 +0100
committerRiccardo Spagni <ric@spagni.net>2018-01-10 11:53:26 +0100
commitd08aee7a7eae23aaf35c1f129faa5a70d2f5510f (patch)
tree900362d33e020797fa6b2b7bafc87e9a39172b10 /cmake
parentMerge pull request #2990 (diff)
parentAdd misc hardening flags to the cmake machinery (diff)
downloadmonero-d08aee7a7eae23aaf35c1f129faa5a70d2f5510f.tar.xz
Merge pull request #2993
776b44f1 Add misc hardening flags to the cmake machinery (moneromooo-monero)
Diffstat (limited to 'cmake')
-rw-r--r--cmake/CheckLinkerFlag.c14
-rw-r--r--cmake/CheckLinkerFlag.cmake47
2 files changed, 61 insertions, 0 deletions
diff --git a/cmake/CheckLinkerFlag.c b/cmake/CheckLinkerFlag.c
new file mode 100644
index 000000000..a0dcc168d
--- /dev/null
+++ b/cmake/CheckLinkerFlag.c
@@ -0,0 +1,14 @@
+#ifdef __CLASSIC_C__
+int main()
+{
+ int ac;
+ char* av[];
+#else
+int main(int ac, char* av[])
+{
+#endif
+ if (ac > 1000) {
+ return *av[0];
+ }
+ return 0;
+}
diff --git a/cmake/CheckLinkerFlag.cmake b/cmake/CheckLinkerFlag.cmake
new file mode 100644
index 000000000..a3879d0be
--- /dev/null
+++ b/cmake/CheckLinkerFlag.cmake
@@ -0,0 +1,47 @@
+include(CheckCCompilerFlag)
+
+macro(CHECK_LINKER_FLAG flag VARIABLE)
+ if(NOT DEFINED "${VARIABLE}")
+ if(NOT CMAKE_REQUIRED_QUIET)
+ message(STATUS "Looking for ${flag} linker flag")
+ endif()
+
+ set(_cle_source ${CMAKE_SOURCE_DIR}/cmake/CheckLinkerFlag.c)
+
+ set(saved_CMAKE_C_FLAGS ${CMAKE_C_FLAGS})
+ set(CMAKE_C_FLAGS "${flag}")
+ try_compile(${VARIABLE}
+ ${CMAKE_BINARY_DIR}
+ ${_cle_source}
+ COMPILE_DEFINITIONS ${CMAKE_REQUIRED_DEFINITIONS} ${flag}
+ CMAKE_FLAGS
+ OUTPUT_VARIABLE OUTPUT)
+ unset(_cle_source)
+ set(CMAKE_C_FLAGS ${saved_CMAKE_C_FLAGS})
+ unset(saved_CMAKE_C_FLAGS)
+
+ if ("${OUTPUT}" MATCHES "warning.*ignored")
+ set(${VARIABLE} 0)
+ endif()
+
+ if(${VARIABLE})
+ if(NOT CMAKE_REQUIRED_QUIET)
+ message(STATUS "Looking for ${flag} linker flag - found")
+ endif()
+ set(${VARIABLE} 1 CACHE INTERNAL "Have linker flag ${flag}")
+ file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
+ "Determining if the ${flag} linker flag is supported "
+ "passed with the following output:\n"
+ "${OUTPUT}\n\n")
+ else()
+ if(NOT CMAKE_REQUIRED_QUIET)
+ message(STATUS "Looking for ${flag} linker flag - not found")
+ endif()
+ set(${VARIABLE} "" CACHE INTERNAL "Have linker flag ${flag}")
+ file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
+ "Determining if the ${flag} linker flag is suppored "
+ "failed with the following output:\n"
+ "${OUTPUT}\n\n")
+ endif()
+ endif()
+endmacro()