|
@@ -0,0 +1,84 @@
|
|
|
+From: Alexander Dahl <alex@netz39.de>
|
|
|
+Date: Wed, 28 Oct 2015 16:04:13 +0100
|
|
|
+Subject: [PATCH] cmake: use INTERPROCEDURAL_OPTIMIZATION target property
|
|
|
+
|
|
|
+Instead of hacking on compiler flags use the cmake way for handling
|
|
|
+interprocedural optimization. Tests showed cmake currently ignores this
|
|
|
+for gcc and clang, at least on Debian Wheezy and Jessie. This actually
|
|
|
+results in no interprocedural optimization for the moment. However it
|
|
|
+allows to compile fastd against a toolchain without LTO support, which
|
|
|
+was broken because of a hack included here for finding binutils.
|
|
|
+
|
|
|
+According to the upstream author of fastd the main reason for enabling
|
|
|
+LTO was binary size on an OpenWRT target for Freifunk Gluon, where they
|
|
|
+have very few space left on devices with only 4 MB flash memory.
|
|
|
+
|
|
|
+Signed-off-by: Alexander Dahl <post@lespocky.de>
|
|
|
+---
|
|
|
+ cmake/CMakeFindBinUtils.cmake | 7 -------
|
|
|
+ cmake/checks.cmake | 14 --------------
|
|
|
+ src/CMakeLists.txt | 9 +++++++++
|
|
|
+ 3 files changed, 9 insertions(+), 21 deletions(-)
|
|
|
+ delete mode 100644 cmake/CMakeFindBinUtils.cmake
|
|
|
+
|
|
|
+diff --git a/cmake/CMakeFindBinUtils.cmake b/cmake/CMakeFindBinUtils.cmake
|
|
|
+deleted file mode 100644
|
|
|
+index 753577a..0000000
|
|
|
+--- a/cmake/CMakeFindBinUtils.cmake
|
|
|
++++ /dev/null
|
|
|
+@@ -1,7 +0,0 @@
|
|
|
+-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 f9f0399..3c1f38b 100644
|
|
|
+--- a/cmake/checks.cmake
|
|
|
++++ b/cmake/checks.cmake
|
|
|
+@@ -10,20 +10,6 @@ if(ARCH_X86 OR ARCH_X86_64)
|
|
|
+ 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/src/CMakeLists.txt b/src/CMakeLists.txt
|
|
|
+index e7dd5d1..4991656 100644
|
|
|
+--- a/src/CMakeLists.txt
|
|
|
++++ b/src/CMakeLists.txt
|
|
|
+@@ -47,6 +47,15 @@ add_executable(fastd
|
|
|
+ set_property(TARGET fastd PROPERTY COMPILE_FLAGS "${FASTD_CFLAGS}")
|
|
|
+ set_property(TARGET fastd PROPERTY LINK_FLAGS "${PTHREAD_LDFLAGS} ${UECC_LDFLAGS_OTHER} ${NACL_LDFLAGS_OTHER} ${OPENSSL_CRYPTO_LDFLAGS_OTHER} ${JSONC_LDFLAGS_OTHER} ${LDFLAGS_LTO}")
|
|
|
+ set_property(TARGET fastd APPEND PROPERTY INCLUDE_DIRECTORIES ${CAP_INCLUDE_DIR} ${NACL_INCLUDE_DIRS} ${JSONC_INCLUDE_DIRS})
|
|
|
++if(ENABLE_LTO)
|
|
|
++ set_target_properties(fastd PROPERTIES
|
|
|
++ INTERPROCEDURAL_OPTIMIZATION ON
|
|
|
++ )
|
|
|
++else(ENABLE_LTO)
|
|
|
++ set_target_properties(fastd PROPERTIES
|
|
|
++ INTERPROCEDURAL_OPTIMIZATION OFF
|
|
|
++ )
|
|
|
++endif(ENABLE_LTO)
|
|
|
+ target_link_libraries(fastd protocols methods ciphers macs ${RT_LIBRARY} ${CAP_LIBRARY} ${UECC_LIBRARIES} ${NACL_LIBRARIES} ${OPENSSL_CRYPTO_LIBRARIES} ${JSONC_LIBRARIES})
|
|
|
+
|
|
|
+ add_dependencies(fastd version)
|
|
|
+--
|
|
|
+2.1.4
|
|
|
+
|