gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[gnurl] 28/282: CMake: Add support for CMAKE_LTO option.


From: gnunet
Subject: [gnurl] 28/282: CMake: Add support for CMAKE_LTO option.
Date: Wed, 01 Apr 2020 14:28:13 +0200

This is an automated email from the git hooks/post-receive script.

ng0 pushed a commit to branch master
in repository gnurl.

commit 4ccf7622db04af58442c460b8091b952585de5c7
Author: Tobias Hieta <address@hidden>
AuthorDate: Thu Jan 9 12:10:55 2020 +0100

    CMake: Add support for CMAKE_LTO option.
    
    This enables Link Time Optimization. LTO is a proven technique for
    optimizing across compilation units.
    
    Closes #4799
---
 CMakeLists.txt     | 18 ++++++++++++++++++
 lib/CMakeLists.txt |  6 ++++++
 src/CMakeLists.txt |  6 ++++++
 3 files changed, 30 insertions(+)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 3ef8d0e48..a8be8a332 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -80,6 +80,7 @@ if(WIN32)
   option(CURL_STATIC_CRT "Set to ON to build libcurl with static CRT on 
Windows (/MT)." OFF)
   option(ENABLE_INET_PTON "Set to OFF to prevent usage of inet_pton when 
building against modern SDKs while still requiring compatibility with older 
Windows versions, such as Windows XP, Windows Server 2003 etc." ON)
 endif()
+option(CURL_LTO "Turn on compiler Link Time Optimizations" OFF)
 
 cmake_dependent_option(ENABLE_THREADED_RESOLVER "Set to ON to enable threaded 
DNS lookup"
         ON "NOT ENABLE_ARES"
@@ -1165,6 +1166,23 @@ if(CURL_WERROR)
   endif()
 endif()
 
+if(CURL_LTO)
+  if(CMAKE_VERSION VERSION_LESS 3.9)
+    message(FATAL_ERROR "Requested LTO but your cmake version ${CMAKE_VERSION} 
is to old. You need at least 3.9")
+  endif()
+
+  cmake_policy(SET CMP0069 NEW)
+
+  include(CheckIPOSupported)
+  check_ipo_supported(RESULT CURL_HAS_LTO OUTPUT CURL_LTO_ERROR LANGUAGES C)
+  if(CURL_HAS_LTO)
+    message(STATUS "LTO supported and enabled")
+  else()
+    message(FATAL_ERROR "LTO was requested - but compiler doesn't support 
it\n${CURL_LTO_ERROR}")
+  endif()
+endif()
+
+
 # Ugly (but functional) way to include "Makefile.inc" by transforming it (= 
regenerate it).
 function(transform_makefile_inc INPUT_FILE OUTPUT_FILE)
   file(READ ${INPUT_FILE} MAKEFILE_INC_TEXT)
diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt
index a9c90b665..e73efb90a 100644
--- a/lib/CMakeLists.txt
+++ b/lib/CMakeLists.txt
@@ -96,6 +96,12 @@ endif()
 set_target_properties(${LIB_NAME} PROPERTIES PREFIX "")
 set_target_properties(${LIB_NAME} PROPERTIES IMPORT_PREFIX "")
 
+if(CURL_HAS_LTO)
+  set_target_properties(${LIB_NAME} PROPERTIES
+    INTERPROCEDURAL_OPTIMIZATION_RELEASE TRUE
+    INTERPROCEDURAL_OPTIMIZATION_RELWITHDEBINFO TRUE)
+endif()
+
 if(WIN32)
   if(BUILD_SHARED_LIBS)
     # Add "_imp" as a suffix before the extension to avoid conflicting with 
the statically linked "libcurl.lib"
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 63e2b943d..054541e40 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -46,6 +46,12 @@ add_executable(
   ${CURL_FILES}
   )
 
+if(CURL_HAS_LTO)
+  set_target_properties(${EXE_NAME} PROPERTIES
+    INTERPROCEDURAL_OPTIMIZATION_RELEASE TRUE
+    INTERPROCEDURAL_OPTIMIZATION_RELWITHDEBINFO TRUE)
+endif()
+
 source_group("curlX source files" FILES ${CURLX_CFILES})
 source_group("curl source files" FILES ${CURL_CFILES})
 source_group("curl header files" FILES ${CURL_HFILES})

-- 
To stop receiving notification emails like this one, please contact
address@hidden.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]