authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2021-11-15 16:32:15-07:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2021-11-15 16:32:15-07:00
log08c768ad82280463410eacc5b7f19389cb1ba49b
tree8dd79b588a3b7a20a8589a4fd08a11881a8ff35c
parent564629f70475a1e3b397179067e22d3f61772104

pre-merge cleanups

* Annotate workarounds with their corresponding GitHub issue links. * Enable test coverage for LTO on Windows with the added c_compiler test.

4 files changed, 35 insertions(+), 21 deletions(-)

src/mingw.zig+4-2
......@@ -92,8 +92,10 @@ pub fn buildCRTFile(comp: *Compilation, crt_file: CRTFile) !void {
9292 "-D_WIN32_WINNT=0x0f00",
9393 "-D__MSVCRT_VERSION__=0x700",
9494 });
95 if (std.mem.eql(u8, dep, "tlssup.c")) {
96 // Can't let LTO drop symbols defined in this file (eg: _tls_index)
95 if (std.mem.eql(u8, dep, "tlssup.c") and comp.bin_file.options.lto) {
96 // LLD will incorrectly drop the `_tls_index` symbol. Here we work
97 // around it by not using LTO for this one file.
98 // https://github.com/ziglang/zig/issues/8531
9799 try args.append("-fno-lto");
98100 }
99101 c_source_files[i] = .{
test/standalone.zig+24-8
......@@ -13,18 +13,27 @@ pub fn addCases(cases: *tests.StandaloneContext) void {
1313 cases.addBuildFile("test/standalone/main_pkg_path/build.zig", .{});
1414 cases.addBuildFile("test/standalone/shared_library/build.zig", .{});
1515 cases.addBuildFile("test/standalone/mix_o_files/build.zig", .{});
16 if (std.Target.current.os.tag == .macos) {
17 // TODO zld cannot link llvm-ir object files for LTO yet.
18 cases.addBuildFile("test/standalone/mix_c_files/build.zig", .{ .build_modes = false, .cross_targets = true });
16 if (builtin.os.tag == .macos) {
17 // Zig's macOS linker does not yet support LTO for LLVM IR files:
18 // https://github.com/ziglang/zig/issues/8680
19 cases.addBuildFile("test/standalone/mix_c_files/build.zig", .{
20 .build_modes = false,
21 .cross_targets = true,
22 });
1923 } else {
20 cases.addBuildFile("test/standalone/mix_c_files/build.zig", .{ .build_modes = true, .cross_targets = true });
24 cases.addBuildFile("test/standalone/mix_c_files/build.zig", .{
25 .build_modes = true,
26 .cross_targets = true,
27 });
2128 }
2229 cases.addBuildFile("test/standalone/global_linkage/build.zig", .{});
2330 cases.addBuildFile("test/standalone/static_c_lib/build.zig", .{});
2431 cases.addBuildFile("test/standalone/link_interdependent_static_c_libs/build.zig", .{});
2532 cases.addBuildFile("test/standalone/link_static_lib_as_system_lib/build.zig", .{});
2633 cases.addBuildFile("test/standalone/link_common_symbols/build.zig", .{});
27 cases.addBuildFile("test/standalone/link_frameworks/build.zig", .{ .requires_macos_sdk = true });
34 cases.addBuildFile("test/standalone/link_frameworks/build.zig", .{
35 .requires_macos_sdk = true,
36 });
2837 cases.addBuildFile("test/standalone/issue_339/build.zig", .{});
2938 cases.addBuildFile("test/standalone/issue_8550/build.zig", .{});
3039 cases.addBuildFile("test/standalone/issue_794/build.zig", .{});
......@@ -39,10 +48,14 @@ pub fn addCases(cases: *tests.StandaloneContext) void {
3948 if (builtin.os.tag != .wasi) {
4049 cases.addBuildFile("test/standalone/load_dynamic_library/build.zig", .{});
4150 }
42 if (builtin.cpu.arch == .x86_64) { // TODO add C ABI support for other architectures
51 // C ABI compatibility issue: https://github.com/ziglang/zig/issues/1481
52 if (builtin.cpu.arch == .x86_64) {
4353 cases.addBuildFile("test/stage1/c_abi/build.zig", .{});
4454 }
45 cases.addBuildFile("test/standalone/c_compiler/build.zig", .{ .build_modes = true, .cross_targets = true });
55 cases.addBuildFile("test/standalone/c_compiler/build.zig", .{
56 .build_modes = true,
57 .cross_targets = true,
58 });
4659
4760 if (builtin.os.tag == .windows) {
4861 cases.addC("test/standalone/issue_9402/main.zig");
......@@ -52,7 +65,10 @@ pub fn addCases(cases: *tests.StandaloneContext) void {
5265 cases.addBuildFile("test/standalone/pie/build.zig", .{});
5366 }
5467 // Try to build and run an Objective-C executable.
55 cases.addBuildFile("test/standalone/objc/build.zig", .{ .build_modes = true, .requires_macos_sdk = true });
68 cases.addBuildFile("test/standalone/objc/build.zig", .{
69 .build_modes = true,
70 .requires_macos_sdk = true,
71 });
5672
5773 // Ensure the development tools are buildable.
5874 cases.add("tools/gen_spirv_spec.zig");
test/standalone/c_compiler/build.zig+2-4
......@@ -3,6 +3,7 @@ const builtin = @import("builtin");
33const Builder = std.build.Builder;
44const CrossTarget = std.zig.CrossTarget;
55
6// TODO integrate this with the std.build executor API
67fn isRunnableTarget(t: CrossTarget) bool {
78 if (t.isNative()) return true;
89
......@@ -30,12 +31,9 @@ pub fn build(b: *Builder) void {
3031 exe_cpp.setTarget(target);
3132 exe_cpp.linkSystemLibrary("c++");
3233
33 // disable broken LTO links:
3434 switch (target.getOsTag()) {
35 .windows => {
36 exe_cpp.want_lto = false;
37 },
3835 .macos => {
36 // https://github.com/ziglang/zig/issues/8680
3937 exe_cpp.want_lto = false;
4038 exe_c.want_lto = false;
4139 },
test/standalone/mix_c_files/build.zig+5-7
......@@ -1,23 +1,20 @@
11const std = @import("std");
2const builtin = @import("builtin");
23const Builder = std.build.Builder;
34const CrossTarget = std.zig.CrossTarget;
45
5fn isUnpecifiedTarget(t: CrossTarget) bool {
6 return t.cpu_arch == null and t.abi == null and t.os_tag == null;
7}
6// TODO integrate this with the std.build executor API
87fn isRunnableTarget(t: CrossTarget) bool {
98 if (t.isNative()) return true;
109
11 return (t.getOsTag() == std.Target.current.os.tag and
12 t.getCpuArch() == std.Target.current.cpu.arch);
10 return (t.getOsTag() == builtin.os.tag and
11 t.getCpuArch() == builtin.cpu.arch);
1312}
1413
1514pub fn build(b: *Builder) void {
1615 const mode = b.standardReleaseOptions();
1716 const target = b.standardTargetOptions(.{});
1817
19 const test_step = b.step("test", "Test the program");
20
2118 const exe = b.addExecutable("test", "main.zig");
2219 exe.addCSourceFile("test.c", &[_][]const u8{"-std=c11"});
2320 exe.setBuildMode(mode);
......@@ -25,6 +22,7 @@ pub fn build(b: *Builder) void {
2522 exe.setTarget(target);
2623 b.default_step.dependOn(&exe.step);
2724
25 const test_step = b.step("test", "Test the program");
2826 if (isRunnableTarget(target)) {
2927 const run_cmd = exe.run();
3028 test_step.dependOn(&run_cmd.step);