@@ -1386,9 +1386,18 @@ fn buildOutputType(
13861386 } else if (mem .eql (u8 , arg , "-fno-PIE" )) {
13871387 create_module .opts .pie = false ;
13881388 } else if (mem .eql (u8 , arg , "-flto" )) {
1389- create_module .opts .lto = true ;
1389+ create_module .opts .lto = .full ;
1390+ } else if (mem .startsWith (u8 , arg , "-flto=" )) {
1391+ const mode = arg ["-flto=" .len .. ];
1392+ if (mem .eql (u8 , mode , "full" )) {
1393+ create_module .opts .lto = .full ;
1394+ } else if (mem .eql (u8 , mode , "thin" )) {
1395+ create_module .opts .lto = .thin ;
1396+ } else {
1397+ fatal ("Invalid -flto mode: '{s}'. Must be 'full'or 'thin'." , .{mode });
1398+ }
13901399 } else if (mem .eql (u8 , arg , "-fno-lto" )) {
1391- create_module .opts .lto = false ;
1400+ create_module .opts .lto = .none ;
13921401 } else if (mem .eql (u8 , arg , "-funwind-tables" )) {
13931402 mod_opts .unwind_tables = .sync ;
13941403 } else if (mem .eql (u8 , arg , "-fasync-unwind-tables" )) {
@@ -1958,8 +1967,20 @@ fn buildOutputType(
19581967 .no_pic = > mod_opts .pic = false ,
19591968 .pie = > create_module .opts .pie = true ,
19601969 .no_pie = > create_module .opts .pie = false ,
1961- .lto = > create_module .opts .lto = true ,
1962- .no_lto = > create_module .opts .lto = false ,
1970+ .lto = > {
1971+ if (mem .eql (u8 , it .only_arg , "flto" ) or
1972+ mem .eql (u8 , it .only_arg , "auto" ) or
1973+ mem .eql (u8 , it .only_arg , "full" ) or
1974+ mem .eql (u8 , it .only_arg , "jobserver" ))
1975+ {
1976+ create_module .opts .lto = .full ;
1977+ } else if (mem .eql (u8 , it .only_arg , "thin" )) {
1978+ create_module .opts .lto = .thin ;
1979+ } else {
1980+ fatal ("Invalid -flto mode: '{s}'. Must be 'auto', 'full', 'thin', or 'jobserver'." , .{it .only_arg });
1981+ }
1982+ },
1983+ .no_lto = > create_module .opts .lto = .none ,
19631984 .red_zone = > mod_opts .red_zone = true ,
19641985 .no_red_zone = > mod_opts .red_zone = false ,
19651986 .omit_frame_pointer = > mod_opts .omit_frame_pointer = true ,
0 commit comments