@@ -22,6 +22,10 @@ def exists(env):
22
22
23
23
24
24
def generate (env ):
25
+ assert env ["lto" ] in ["thin" , "full" , "none" ], "Unrecognized lto: {}" .format (env ["lto" ])
26
+ if env ["lto" ] != "none" :
27
+ print ("Using LTO: " + env ["lto" ])
28
+
25
29
# Require C++17
26
30
if env .get ("is_msvc" , False ):
27
31
env .Append (CXXFLAGS = ["/std:c++17" ])
@@ -64,6 +68,22 @@ def generate(env):
64
68
env .Append (LINKFLAGS = ["/OPT:REF" ])
65
69
elif env ["optimize" ] == "debug" or env ["optimize" ] == "none" :
66
70
env .Append (CCFLAGS = ["/Od" ])
71
+
72
+ if env ["lto" ] == "thin" :
73
+ if not env ["use_llvm" ]:
74
+ print ("ThinLTO is only compatible with LLVM, use `use_llvm=yes` or `lto=full`." )
75
+ env .Exit (255 )
76
+
77
+ env .Append (CCFLAGS = ["-flto=thin" ])
78
+ env .Append (LINKFLAGS = ["-flto=thin" ])
79
+ elif env ["lto" ] == "full" :
80
+ if env ["use_llvm" ]:
81
+ env .Append (CCFLAGS = ["-flto" ])
82
+ env .Append (LINKFLAGS = ["-flto" ])
83
+ else :
84
+ env .AppendUnique (CCFLAGS = ["/GL" ])
85
+ env .AppendUnique (ARFLAGS = ["/LTCG" ])
86
+ env .AppendUnique (LINKFLAGS = ["/LTCG" ])
67
87
else :
68
88
if env ["debug_symbols" ]:
69
89
# Adding dwarf-4 explicitly makes stacktraces work with clang builds,
@@ -91,3 +111,13 @@ def generate(env):
91
111
env .Append (CCFLAGS = ["-Og" ])
92
112
elif env ["optimize" ] == "none" :
93
113
env .Append (CCFLAGS = ["-O0" ])
114
+
115
+ if env ["lto" ] == "thin" :
116
+ if (env ["platform" ] == "windows" or env ["platform" ] == "linux" ) and not env ["use_llvm" ]:
117
+ print ("ThinLTO is only compatible with LLVM, use `use_llvm=yes` or `lto=full`." )
118
+ env .Exit (255 )
119
+ env .Append (CCFLAGS = ["-flto=thin" ])
120
+ env .Append (LINKFLAGS = ["-flto=thin" ])
121
+ elif env ["lto" ] == "full" :
122
+ env .Append (CCFLAGS = ["-flto" ])
123
+ env .Append (LINKFLAGS = ["-flto" ])
0 commit comments