@@ -1302,6 +1302,8 @@ impl<'a> Linker for WasmLd<'a> {
1302
1302
}
1303
1303
1304
1304
fn optimize ( & mut self ) {
1305
+ // The -O flag is, as of late 2023, only used for merging of strings and debuginfo, and
1306
+ // only differentiates -O0 and -O1. It does not apply to LTO.
1305
1307
self . cmd . arg ( match self . sess . opts . optimize {
1306
1308
OptLevel :: No => "-O0" ,
1307
1309
OptLevel :: Less => "-O1" ,
@@ -1354,7 +1356,31 @@ impl<'a> Linker for WasmLd<'a> {
1354
1356
fn subsystem ( & mut self , _subsystem : & str ) { }
1355
1357
1356
1358
fn linker_plugin_lto ( & mut self ) {
1357
- // Do nothing for now
1359
+ match self . sess . opts . cg . linker_plugin_lto {
1360
+ LinkerPluginLto :: Disabled => {
1361
+ // Nothing to do
1362
+ }
1363
+ LinkerPluginLto :: LinkerPluginAuto => {
1364
+ self . push_linker_plugin_lto_args ( ) ;
1365
+ }
1366
+ LinkerPluginLto :: LinkerPlugin ( _) => {
1367
+ self . push_linker_plugin_lto_args ( ) ;
1368
+ }
1369
+ }
1370
+ }
1371
+ }
1372
+
1373
+ impl < ' a > WasmLd < ' a > {
1374
+ fn push_linker_plugin_lto_args ( & mut self ) {
1375
+ let opt_level = match self . sess . opts . optimize {
1376
+ config:: OptLevel :: No => "O0" ,
1377
+ config:: OptLevel :: Less => "O1" ,
1378
+ config:: OptLevel :: Default => "O2" ,
1379
+ config:: OptLevel :: Aggressive => "O3" ,
1380
+ // wasm-ld only handles integer LTO opt levels. Use O2
1381
+ config:: OptLevel :: Size | config:: OptLevel :: SizeMin => "O2" ,
1382
+ } ;
1383
+ self . cmd . arg ( & format ! ( "--lto-{opt_level}" ) ) ;
1358
1384
}
1359
1385
}
1360
1386
0 commit comments