[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.
- [gnurl] 29/282: HTTP-COOKIES.md: describe the cookie file format, (continued)
- [gnurl] 29/282: HTTP-COOKIES.md: describe the cookie file format, gnunet, 2020/04/01
- [gnurl] 51/282: openssl: make CURLINFO_CERTINFO not truncate x509v3 fields, gnunet, 2020/04/01
- [gnurl] 60/282: curl: make the -# spaceship bar not wrap the line, gnunet, 2020/04/01
- [gnurl] 50/282: CURLOPT_PROXY_SSL_OPTIONS.3: Sync with CURLOPT_SSL_OPTIONS.3, gnunet, 2020/04/01
- [gnurl] 61/282: urldata: do string enums without #ifdefs for build scripts, gnunet, 2020/04/01
- [gnurl] 47/282: smtp: Allow RCPT TO command to fail for some recipients, gnunet, 2020/04/01
- [gnurl] 62/282: RELEASE-NOTES: synced, gnunet, 2020/04/01
- [gnurl] 48/282: RELEASE-NOTES: synced, gnunet, 2020/04/01
- [gnurl] 58/282: conn: do not reuse connection if SOCKS proxy credentials differ, gnunet, 2020/04/01
- [gnurl] 37/282: wolfssl: use the wc-prefixed symbol alternatives, gnunet, 2020/04/01
- [gnurl] 28/282: CMake: Add support for CMAKE_LTO option.,
gnunet <=
- [gnurl] 38/282: RELEASE-NOTES: synced, gnunet, 2020/04/01
- [gnurl] 44/282: curl: Let -D merge headers in one file again, gnunet, 2020/04/01
- [gnurl] 41/282: http.h: Copyright year out of date, should be 2020, gnunet, 2020/04/01
- [gnurl] 52/282: form.d: fix two minor typos, gnunet, 2020/04/01
- [gnurl] 64/282: README: mention that the docs is in docs/, gnunet, 2020/04/01
- [gnurl] 53/282: wolfssh: make it init properly via Curl_ssh_init(), gnunet, 2020/04/01
- [gnurl] 56/282: conncache: removed unused Curl_conncache_bundle_size(), gnunet, 2020/04/01
- [gnurl] 54/282: singleuse.pl: support new API functions, fix curl_dbg_ handling, gnunet, 2020/04/01
- [gnurl] 55/282: strcase: turn Curl_raw_tolower into static, gnunet, 2020/04/01
- [gnurl] 63/282: curl.h: define CURL_WIN32 on windows, gnunet, 2020/04/01