summaryrefslogtreecommitdiffstats
path: root/cmake
diff options
context:
space:
mode:
authorMatthias Schiffer <mschiffer@universe-factory.net>2014-06-08 16:13:17 +0200
committerMatthias Schiffer <mschiffer@universe-factory.net>2014-06-08 16:13:17 +0200
commit65fc11a49ec939261ca9a3dbfa534a9c3354825e (patch)
tree411b6dc3bdb13d7f0776426142a3f4d957f74814 /cmake
parent7665159490d533c3c7fbaa1c51c260285a5a361e (diff)
downloadfastd-65fc11a49ec939261ca9a3dbfa534a9c3354825e.tar
fastd-65fc11a49ec939261ca9a3dbfa534a9c3354825e.zip
Add ENABLE_LTO cmake option
Tested with GCC and clang; unlikely to work with other toolchains, so it's disabled by default.
Diffstat (limited to 'cmake')
-rw-r--r--cmake/CMakeFindBinUtils.cmake8
-rw-r--r--cmake/checks.cmake15
-rw-r--r--cmake/config.cmake2
3 files changed, 22 insertions, 3 deletions
diff --git a/cmake/CMakeFindBinUtils.cmake b/cmake/CMakeFindBinUtils.cmake
index 83d1a4e..753577a 100644
--- a/cmake/CMakeFindBinUtils.cmake
+++ b/cmake/CMakeFindBinUtils.cmake
@@ -1,5 +1,7 @@
-find_program(CMAKE_AR NAMES ${_CMAKE_TOOLCHAIN_PREFIX}gcc-ar HINTS ${_CMAKE_TOOLCHAIN_LOCATION})
-find_program(CMAKE_NM NAMES ${_CMAKE_TOOLCHAIN_PREFIX}gcc-nm HINTS ${_CMAKE_TOOLCHAIN_LOCATION})
-find_program(CMAKE_RANLIB NAMES ${_CMAKE_TOOLCHAIN_PREFIX}gcc-ranlib HINTS ${_CMAKE_TOOLCHAIN_LOCATION})
+if(CMAKE_COMPILER_IS_GNUCC)
+ find_program(CMAKE_AR NAMES ${_CMAKE_TOOLCHAIN_PREFIX}gcc-ar HINTS ${_CMAKE_TOOLCHAIN_LOCATION})
+ find_program(CMAKE_NM NAMES ${_CMAKE_TOOLCHAIN_PREFIX}gcc-nm HINTS ${_CMAKE_TOOLCHAIN_LOCATION})
+ find_program(CMAKE_RANLIB NAMES ${_CMAKE_TOOLCHAIN_PREFIX}gcc-ranlib HINTS ${_CMAKE_TOOLCHAIN_LOCATION})
+endif(CMAKE_COMPILER_IS_GNUCC)
include(${CMAKE_ROOT}/Modules/CMakeFindBinUtils.cmake)
diff --git a/cmake/checks.cmake b/cmake/checks.cmake
index 225c443..62d10d0 100644
--- a/cmake/checks.cmake
+++ b/cmake/checks.cmake
@@ -9,6 +9,21 @@ if(ARCH_X86 OR ARCH_X86_64)
check_c_compiler_flag("-mpclmul" HAVE_PCLMUL)
endif(ARCH_X86 OR ARCH_X86_64)
+
+
+if(ENABLE_LTO)
+ set(CFLAGS_LTO "-flto")
+ set(CFLAGS_NO_LTO "-fno-lto")
+
+ check_c_compiler_flag("-fwhole-program" HAVE_FLAG_WHOLE_PROGRAM)
+ if(HAVE_FLAG_WHOLE_PROGRAM)
+ set(LDFLAGS_LTO "-flto -fwhole-program")
+ else(HAVE_FLAG_WHOLE_PROGRAM)
+ set(LDFLAGS_LTO "-flto")
+ endif(HAVE_FLAG_WHOLE_PROGRAM)
+endif(ENABLE_LTO)
+
+
check_c_source_compiles("
#include <sys/types.h>
#include <sys/socket.h>
diff --git a/cmake/config.cmake b/cmake/config.cmake
index e08955e..e77abc8 100644
--- a/cmake/config.cmake
+++ b/cmake/config.cmake
@@ -23,6 +23,8 @@ set(WITH_CAPABILITIES ${LINUX} CACHE BOOL "Include support for POSIX capabilitie
set(ENABLE_LIBSODIUM TRUE CACHE BOOL "Use libsodium instead of NaCl")
set(ENABLE_OPENSSL FALSE CACHE BOOL "Enable crypto implementations using OpenSSL")
+set(ENABLE_LTO FALSE CACHE BOOL "Enable link-time optimization")
+
if(LINUX)
set(ENABLE_SYSTEMD TRUE CACHE BOOL "Enable systemd support")
endif(LINUX)