| ... | @@ -4206,23 +4206,78 @@ fn performAllTheWorkInner( | ... | @@ -4206,23 +4206,78 @@ fn performAllTheWorkInner( |
| 4206 | // compiler-rt due to LLD bugs as well, e.g.: | 4206 | // compiler-rt due to LLD bugs as well, e.g.: |
| 4207 | // | 4207 | // |
| 4208 | // https://github.com/llvm/llvm-project/issues/43698#issuecomment-2542660611 | 4208 | // https://github.com/llvm/llvm-project/issues/43698#issuecomment-2542660611 |
| 4209 | comp.link_task_wait_group.spawnManager(buildRt, .{ comp, "compiler_rt.zig", "compiler_rt", .compiler_rt, .Lib, false, &comp.compiler_rt_lib, main_progress_node }); | 4209 | comp.link_task_wait_group.spawnManager(buildRt, .{ |
| | 4210 | comp, |
| | 4211 | "compiler_rt.zig", |
| | 4212 | "compiler_rt", |
| | 4213 | .Lib, |
| | 4214 | .compiler_rt, |
| | 4215 | main_progress_node, |
| | 4216 | RtOptions{ |
| | 4217 | .checks_valgrind = true, |
| | 4218 | .allow_lto = false, |
| | 4219 | }, |
| | 4220 | &comp.compiler_rt_lib, |
| | 4221 | }); |
| 4210 | } | 4222 | } |
| 4211 | | 4223 | |
| 4212 | if (comp.queued_jobs.compiler_rt_obj and comp.compiler_rt_obj == null) { | 4224 | if (comp.queued_jobs.compiler_rt_obj and comp.compiler_rt_obj == null) { |
| 4213 | comp.link_task_wait_group.spawnManager(buildRt, .{ comp, "compiler_rt.zig", "compiler_rt", .compiler_rt, .Obj, false, &comp.compiler_rt_obj, main_progress_node }); | 4225 | comp.link_task_wait_group.spawnManager(buildRt, .{ |
| | 4226 | comp, |
| | 4227 | "compiler_rt.zig", |
| | 4228 | "compiler_rt", |
| | 4229 | .Obj, |
| | 4230 | .compiler_rt, |
| | 4231 | main_progress_node, |
| | 4232 | RtOptions{ |
| | 4233 | .checks_valgrind = true, |
| | 4234 | .allow_lto = false, |
| | 4235 | }, |
| | 4236 | &comp.compiler_rt_obj, |
| | 4237 | }); |
| 4214 | } | 4238 | } |
| 4215 | | 4239 | |
| 4216 | if (comp.queued_jobs.fuzzer_lib and comp.fuzzer_lib == null) { | 4240 | if (comp.queued_jobs.fuzzer_lib and comp.fuzzer_lib == null) { |
| 4217 | comp.link_task_wait_group.spawnManager(buildRt, .{ comp, "fuzzer.zig", "fuzzer", .libfuzzer, .Lib, true, &comp.fuzzer_lib, main_progress_node }); | 4241 | comp.link_task_wait_group.spawnManager(buildRt, .{ |
| | 4242 | comp, |
| | 4243 | "fuzzer.zig", |
| | 4244 | "fuzzer", |
| | 4245 | .Lib, |
| | 4246 | .libfuzzer, |
| | 4247 | main_progress_node, |
| | 4248 | RtOptions{}, |
| | 4249 | &comp.fuzzer_lib, |
| | 4250 | }); |
| 4218 | } | 4251 | } |
| 4219 | | 4252 | |
| 4220 | if (comp.queued_jobs.ubsan_rt_lib and comp.ubsan_rt_lib == null) { | 4253 | if (comp.queued_jobs.ubsan_rt_lib and comp.ubsan_rt_lib == null) { |
| 4221 | comp.link_task_wait_group.spawnManager(buildRt, .{ comp, "ubsan_rt.zig", "ubsan_rt", .libubsan, .Lib, false, &comp.ubsan_rt_lib, main_progress_node }); | 4254 | comp.link_task_wait_group.spawnManager(buildRt, .{ |
| | 4255 | comp, |
| | 4256 | "ubsan_rt.zig", |
| | 4257 | "ubsan_rt", |
| | 4258 | .Lib, |
| | 4259 | .libubsan, |
| | 4260 | main_progress_node, |
| | 4261 | RtOptions{ |
| | 4262 | .allow_lto = false, |
| | 4263 | }, |
| | 4264 | &comp.ubsan_rt_lib, |
| | 4265 | }); |
| 4222 | } | 4266 | } |
| 4223 | | 4267 | |
| 4224 | if (comp.queued_jobs.ubsan_rt_obj and comp.ubsan_rt_obj == null) { | 4268 | if (comp.queued_jobs.ubsan_rt_obj and comp.ubsan_rt_obj == null) { |
| 4225 | comp.link_task_wait_group.spawnManager(buildRt, .{ comp, "ubsan_rt.zig", "ubsan_rt", .libubsan, .Obj, false, &comp.ubsan_rt_obj, main_progress_node }); | 4269 | comp.link_task_wait_group.spawnManager(buildRt, .{ |
| | 4270 | comp, |
| | 4271 | "ubsan_rt.zig", |
| | 4272 | "ubsan_rt", |
| | 4273 | .Obj, |
| | 4274 | .libubsan, |
| | 4275 | main_progress_node, |
| | 4276 | RtOptions{ |
| | 4277 | .allow_lto = false, |
| | 4278 | }, |
| | 4279 | &comp.ubsan_rt_obj, |
| | 4280 | }); |
| 4226 | } | 4281 | } |
| 4227 | | 4282 | |
| 4228 | if (comp.queued_jobs.glibc_shared_objects) { | 4283 | if (comp.queued_jobs.glibc_shared_objects) { |
| ... | @@ -5201,24 +5256,29 @@ fn workerUpdateWin32Resource( | ... | @@ -5201,24 +5256,29 @@ fn workerUpdateWin32Resource( |
| 5201 | }; | 5256 | }; |
| 5202 | } | 5257 | } |
| 5203 | | 5258 | |
| | 5259 | pub const RtOptions = struct { |
| | 5260 | checks_valgrind: bool = false, |
| | 5261 | allow_lto: bool = true, |
| | 5262 | }; |
| | 5263 | |
| 5204 | fn buildRt( | 5264 | fn buildRt( |
| 5205 | comp: *Compilation, | 5265 | comp: *Compilation, |
| 5206 | root_source_name: []const u8, | 5266 | root_source_name: []const u8, |
| 5207 | root_name: []const u8, | 5267 | root_name: []const u8, |
| 5208 | misc_task: MiscTask, | | |
| 5209 | output_mode: std.builtin.OutputMode, | 5268 | output_mode: std.builtin.OutputMode, |
| 5210 | allow_lto: bool, | 5269 | misc_task: MiscTask, |
| 5211 | out: *?CrtFile, | | |
| 5212 | prog_node: std.Progress.Node, | 5270 | prog_node: std.Progress.Node, |
| | 5271 | options: RtOptions, |
| | 5272 | out: *?CrtFile, |
| 5213 | ) void { | 5273 | ) void { |
| 5214 | comp.buildOutputFromZig( | 5274 | comp.buildOutputFromZig( |
| 5215 | root_source_name, | 5275 | root_source_name, |
| 5216 | root_name, | 5276 | root_name, |
| 5217 | output_mode, | 5277 | output_mode, |
| 5218 | allow_lto, | | |
| 5219 | out, | | |
| 5220 | misc_task, | 5278 | misc_task, |
| 5221 | prog_node, | 5279 | prog_node, |
| | 5280 | options, |
| | 5281 | out, |
| 5222 | ) catch |err| switch (err) { | 5282 | ) catch |err| switch (err) { |
| 5223 | error.SubCompilationFailed => return, // error reported already | 5283 | error.SubCompilationFailed => return, // error reported already |
| 5224 | else => comp.lockAndSetMiscFailure(misc_task, "unable to build {s}: {s}", .{ | 5284 | else => comp.lockAndSetMiscFailure(misc_task, "unable to build {s}: {s}", .{ |
| ... | @@ -5370,10 +5430,10 @@ fn buildLibZigC(comp: *Compilation, prog_node: std.Progress.Node) void { | ... | @@ -5370,10 +5430,10 @@ fn buildLibZigC(comp: *Compilation, prog_node: std.Progress.Node) void { |
| 5370 | "c.zig", | 5430 | "c.zig", |
| 5371 | "zigc", | 5431 | "zigc", |
| 5372 | .Lib, | 5432 | .Lib, |
| 5373 | true, | | |
| 5374 | &comp.zigc_static_lib, | | |
| 5375 | .libzigc, | 5433 | .libzigc, |
| 5376 | prog_node, | 5434 | prog_node, |
| | 5435 | .{}, |
| | 5436 | &comp.zigc_static_lib, |
| 5377 | ) catch |err| switch (err) { | 5437 | ) catch |err| switch (err) { |
| 5378 | error.SubCompilationFailed => return, // error reported already | 5438 | error.SubCompilationFailed => return, // error reported already |
| 5379 | else => comp.lockAndSetMiscFailure(.libzigc, "unable to build libzigc: {s}", .{@errorName(err)}), | 5439 | else => comp.lockAndSetMiscFailure(.libzigc, "unable to build libzigc: {s}", .{@errorName(err)}), |
| ... | @@ -7044,10 +7104,10 @@ fn buildOutputFromZig( | ... | @@ -7044,10 +7104,10 @@ fn buildOutputFromZig( |
| 7044 | src_basename: []const u8, | 7104 | src_basename: []const u8, |
| 7045 | root_name: []const u8, | 7105 | root_name: []const u8, |
| 7046 | output_mode: std.builtin.OutputMode, | 7106 | output_mode: std.builtin.OutputMode, |
| 7047 | allow_lto: bool, | | |
| 7048 | out: *?CrtFile, | | |
| 7049 | misc_task_tag: MiscTask, | 7107 | misc_task_tag: MiscTask, |
| 7050 | prog_node: std.Progress.Node, | 7108 | prog_node: std.Progress.Node, |
| | 7109 | options: RtOptions, |
| | 7110 | out: *?CrtFile, |
| 7051 | ) !void { | 7111 | ) !void { |
| 7052 | const tracy_trace = trace(@src()); | 7112 | const tracy_trace = trace(@src()); |
| 7053 | defer tracy_trace.end(); | 7113 | defer tracy_trace.end(); |
| ... | @@ -7075,7 +7135,7 @@ fn buildOutputFromZig( | ... | @@ -7075,7 +7135,7 @@ fn buildOutputFromZig( |
| 7075 | .any_unwind_tables = comp.root_mod.unwind_tables != .none, | 7135 | .any_unwind_tables = comp.root_mod.unwind_tables != .none, |
| 7076 | .any_error_tracing = false, | 7136 | .any_error_tracing = false, |
| 7077 | .root_error_tracing = false, | 7137 | .root_error_tracing = false, |
| 7078 | .lto = if (allow_lto) comp.config.lto else .none, | 7138 | .lto = if (options.allow_lto) comp.config.lto else .none, |
| 7079 | }); | 7139 | }); |
| 7080 | | 7140 | |
| 7081 | const root_mod = try Package.Module.create(arena, .{ | 7141 | const root_mod = try Package.Module.create(arena, .{ |
| ... | @@ -7098,6 +7158,7 @@ fn buildOutputFromZig( | ... | @@ -7098,6 +7158,7 @@ fn buildOutputFromZig( |
| 7098 | .no_builtin = true, | 7158 | .no_builtin = true, |
| 7099 | .code_model = comp.root_mod.code_model, | 7159 | .code_model = comp.root_mod.code_model, |
| 7100 | .error_tracing = false, | 7160 | .error_tracing = false, |
| | 7161 | .valgrind = if (options.checks_valgrind) comp.root_mod.valgrind else null, |
| 7101 | }, | 7162 | }, |
| 7102 | .global = config, | 7163 | .global = config, |
| 7103 | .cc_argv = &.{}, | 7164 | .cc_argv = &.{}, |