Skip to content

Commit 635c22c

Browse files
committed
cmake: use -flto=auto compiler flag when supported
Use -flto=auto compiler flag when supported, this silence this GCC warning: > lto-wrapper: warning: using serial compilation of # LTRANS jobs This also greatly speeds-up the linkage time as it enables LTO multithreading in GCC (either by using Make jobserver if detected, either by detecting CPU cores). Also always set LTO if enabled.
1 parent 73e74fa commit 635c22c

File tree

1 file changed

+18
-9
lines changed

1 file changed

+18
-9
lines changed

CMakeLists.txt

+18-9
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@ cmake_minimum_required(VERSION 3.5)
22

33
set(CMAKE_CXX_STANDARD 11)
44

5+
include(CheckCXXCompilerFlag)
6+
57
set(CRUNCH_PROJECT_NAME crunch)
68
set(CRUNCH_LIBRARY_NAME crn)
79
set(CRUNCH_EXE_NAME crunch)
@@ -50,6 +52,14 @@ macro(set_linker_flag FLAG)
5052
endif()
5153
endmacro()
5254

55+
macro(try_cxx_flag PROP FLAG)
56+
check_CXX_compiler_flag(${FLAG} FLAG_${FLAG})
57+
58+
if (FLAG_${FLAG})
59+
set_cxx_flag(${FLAG})
60+
endif()
61+
endmacro()
62+
5363
# This option decides if crunch is dynamically linked against libcrn.so
5464
# statically linked against libcrn.o, enabling it always build libcrn.so.
5565
# This option is a builtin CMake one, the name means “build executables
@@ -88,12 +98,8 @@ if (MSVC)
8898
endif()
8999

90100
if (USE_LTO)
91-
set_cxx_flag("/GL" RELEASE)
92-
set_cxx_flag("/GL" RELWITHDEBINFO)
93-
set_cxx_flag("/GL" MINSIZEREL)
94-
set_linker_flag("/LTCG" RELEASE)
95-
set_linker_flag("/LTCG" RELWITHDEBINFO)
96-
set_linker_flag("/LTCG" MINSIZEREL)
101+
set_cxx_flag("/GL")
102+
set_linker_flag("/LTCG")
97103
endif()
98104
else()
99105
# As written in crnlib.h and stb_image.h, strict aliasing should always be disabled.
@@ -125,9 +131,12 @@ else()
125131
# It should be done at the very end because it copies all compiler flags
126132
# to the linker flags.
127133
if (USE_LTO)
128-
set_cxx_flag("-flto" RELEASE)
129-
set_cxx_flag("-flto" RELWITHDEBINFO)
130-
set_cxx_flag("-flto" MINSIZEREL)
134+
try_cxx_flag(FLTO_AUTO "-flto=auto")
135+
136+
if (NOT FLAG_FLTO_AUTO)
137+
try_cxx_flag(FLTO "-flto")
138+
endif()
139+
131140
set_linker_flag("${CMAKE_CXX_FLAGS}" RELEASE)
132141
set_linker_flag("${CMAKE_CXX_FLAGS}" RELWITHDEBINFO)
133142
set_linker_flag("${CMAKE_CXX_FLAGS}" MINSIZEREL)

0 commit comments

Comments
 (0)