@@ -98,6 +98,10 @@ enum EnvironmentCmd {
98
98
/// Perform tests after final build if it's not a fast try build
99
99
#[ arg( long) ]
100
100
run_tests : bool ,
101
+
102
+ /// Will be LLVM built during the run?
103
+ #[ arg( long, default_value_t = true , action( clap:: ArgAction :: Set ) ) ]
104
+ build_llvm : bool ,
101
105
} ,
102
106
/// Perform an optimized build on Linux CI, from inside Docker.
103
107
LinuxCi {
@@ -133,6 +137,7 @@ fn create_environment(args: Args) -> anyhow::Result<(Environment, Vec<String>)>
133
137
benchmark_cargo_config,
134
138
shared,
135
139
run_tests,
140
+ build_llvm,
136
141
} => {
137
142
let env = EnvironmentBuilder :: default ( )
138
143
. host_tuple ( target_triple)
@@ -148,6 +153,7 @@ fn create_environment(args: Args) -> anyhow::Result<(Environment, Vec<String>)>
148
153
. benchmark_cargo_config ( benchmark_cargo_config)
149
154
. run_tests ( run_tests)
150
155
. fast_try_build ( is_fast_try_build)
156
+ . build_llvm ( build_llvm)
151
157
. build ( ) ?;
152
158
153
159
( env, shared. build_args )
@@ -172,6 +178,7 @@ fn create_environment(args: Args) -> anyhow::Result<(Environment, Vec<String>)>
172
178
. skipped_tests ( vec ! [ ] )
173
179
. run_tests ( true )
174
180
. fast_try_build ( is_fast_try_build)
181
+ . build_llvm ( true )
175
182
. build ( ) ?;
176
183
177
184
( env, shared. build_args )
@@ -193,6 +200,7 @@ fn create_environment(args: Args) -> anyhow::Result<(Environment, Vec<String>)>
193
200
. skipped_tests ( vec ! [ ] )
194
201
. run_tests ( true )
195
202
. fast_try_build ( is_fast_try_build)
203
+ . build_llvm ( true )
196
204
. build ( ) ?;
197
205
198
206
( env, shared. build_args )
@@ -255,32 +263,37 @@ fn execute_pipeline(
255
263
// Stage 2: Gather LLVM PGO profiles
256
264
// Here we build a PGO instrumented LLVM, reusing the previously PGO optimized rustc.
257
265
// Then we use the instrumented LLVM to gather LLVM PGO profiles.
258
- let llvm_pgo_profile = timer. section ( "Stage 2 (LLVM PGO)" , |stage| {
259
- // Remove the previous, uninstrumented build of LLVM.
260
- clear_llvm_files ( env) ?;
266
+ let llvm_pgo_profile = if env. build_llvm ( ) {
267
+ timer. section ( "Stage 2 (LLVM PGO)" , |stage| {
268
+ // Remove the previous, uninstrumented build of LLVM.
269
+ clear_llvm_files ( env) ?;
261
270
262
- let llvm_profile_dir_root = env. artifact_dir ( ) . join ( "llvm-pgo" ) ;
271
+ let llvm_profile_dir_root = env. artifact_dir ( ) . join ( "llvm-pgo" ) ;
263
272
264
- stage. section ( "Build PGO instrumented LLVM" , |section| {
265
- Bootstrap :: build ( env)
266
- . llvm_pgo_instrument ( & llvm_profile_dir_root)
267
- . avoid_rustc_rebuild ( )
268
- . run ( section)
269
- } ) ?;
273
+ stage. section ( "Build PGO instrumented LLVM" , |section| {
274
+ Bootstrap :: build ( env)
275
+ . llvm_pgo_instrument ( & llvm_profile_dir_root)
276
+ . avoid_rustc_rebuild ( )
277
+ . run ( section)
278
+ } ) ?;
270
279
271
- let profile = stage
272
- . section ( "Gather profiles" , |_| gather_llvm_profiles ( env, & llvm_profile_dir_root) ) ?;
280
+ let profile = stage. section ( "Gather profiles" , |_| {
281
+ gather_llvm_profiles ( env, & llvm_profile_dir_root)
282
+ } ) ?;
273
283
274
- print_free_disk_space ( ) ?;
284
+ print_free_disk_space ( ) ?;
275
285
276
- // Proactively delete the instrumented artifacts, to avoid using them by accident in
277
- // follow-up stages.
278
- clear_llvm_files ( env) ?;
286
+ // Proactively delete the instrumented artifacts, to avoid using them by accident in
287
+ // follow-up stages.
288
+ clear_llvm_files ( env) ?;
279
289
280
- Ok ( profile)
281
- } ) ?;
290
+ Ok ( Some ( profile) )
291
+ } ) ?
292
+ } else {
293
+ None
294
+ } ;
282
295
283
- let bolt_profiles = if env. use_bolt ( ) {
296
+ let bolt_profiles = if env. build_llvm ( ) && env . use_bolt ( ) {
284
297
// Stage 3: Build BOLT instrumented LLVM
285
298
// We build a PGO optimized LLVM in this step, then instrument it with BOLT and gather BOLT profiles.
286
299
// Note that we don't remove LLVM artifacts after this step, so that they are reused in the final dist build.
@@ -290,7 +303,7 @@ fn execute_pipeline(
290
303
stage. section ( "Build PGO optimized LLVM" , |stage| {
291
304
Bootstrap :: build ( env)
292
305
. with_llvm_bolt_ldflags ( )
293
- . llvm_pgo_optimize ( & llvm_pgo_profile)
306
+ . llvm_pgo_optimize ( llvm_pgo_profile. as_ref ( ) )
294
307
. avoid_rustc_rebuild ( )
295
308
. run ( stage)
296
309
} ) ?;
@@ -342,7 +355,7 @@ fn execute_pipeline(
342
355
} ;
343
356
344
357
let mut dist = Bootstrap :: dist ( env, & dist_args)
345
- . llvm_pgo_optimize ( & llvm_pgo_profile)
358
+ . llvm_pgo_optimize ( llvm_pgo_profile. as_ref ( ) )
346
359
. rustc_pgo_optimize ( & rustc_pgo_profile)
347
360
. avoid_rustc_rebuild ( ) ;
348
361
0 commit comments