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 {...@@ -92,8 +92,10 @@ pub fn buildCRTFile(comp: *Compilation, crt_file: CRTFile) !void {
92 "-D_WIN32_WINNT=0x0f00",92 "-D_WIN32_WINNT=0x0f00",
93 "-D__MSVCRT_VERSION__=0x700",93 "-D__MSVCRT_VERSION__=0x700",
94 });94 });
95 if (std.mem.eql(u8, dep, "tlssup.c")) {95 if (std.mem.eql(u8, dep, "tlssup.c") and comp.bin_file.options.lto) {
96 // Can't let LTO drop symbols defined in this file (eg: _tls_index)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
97 try args.append("-fno-lto");99 try args.append("-fno-lto");
98 }100 }
99 c_source_files[i] = .{101 c_source_files[i] = .{
test/standalone.zig+24-8
...@@ -13,18 +13,27 @@ pub fn addCases(cases: *tests.StandaloneContext) void {...@@ -13,18 +13,27 @@ pub fn addCases(cases: *tests.StandaloneContext) void {
13 cases.addBuildFile("test/standalone/main_pkg_path/build.zig", .{});13 cases.addBuildFile("test/standalone/main_pkg_path/build.zig", .{});
14 cases.addBuildFile("test/standalone/shared_library/build.zig", .{});14 cases.addBuildFile("test/standalone/shared_library/build.zig", .{});
15 cases.addBuildFile("test/standalone/mix_o_files/build.zig", .{});15 cases.addBuildFile("test/standalone/mix_o_files/build.zig", .{});
16 if (std.Target.current.os.tag == .macos) {16 if (builtin.os.tag == .macos) {
17 // TODO zld cannot link llvm-ir object files for LTO yet.17 // Zig's macOS linker does not yet support LTO for LLVM IR files:
18 cases.addBuildFile("test/standalone/mix_c_files/build.zig", .{ .build_modes = false, .cross_targets = true });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 });
19 } else {23 } 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 });
21 }28 }
22 cases.addBuildFile("test/standalone/global_linkage/build.zig", .{});29 cases.addBuildFile("test/standalone/global_linkage/build.zig", .{});
23 cases.addBuildFile("test/standalone/static_c_lib/build.zig", .{});30 cases.addBuildFile("test/standalone/static_c_lib/build.zig", .{});
24 cases.addBuildFile("test/standalone/link_interdependent_static_c_libs/build.zig", .{});31 cases.addBuildFile("test/standalone/link_interdependent_static_c_libs/build.zig", .{});
25 cases.addBuildFile("test/standalone/link_static_lib_as_system_lib/build.zig", .{});32 cases.addBuildFile("test/standalone/link_static_lib_as_system_lib/build.zig", .{});
26 cases.addBuildFile("test/standalone/link_common_symbols/build.zig", .{});33 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 });
28 cases.addBuildFile("test/standalone/issue_339/build.zig", .{});37 cases.addBuildFile("test/standalone/issue_339/build.zig", .{});
29 cases.addBuildFile("test/standalone/issue_8550/build.zig", .{});38 cases.addBuildFile("test/standalone/issue_8550/build.zig", .{});
30 cases.addBuildFile("test/standalone/issue_794/build.zig", .{});39 cases.addBuildFile("test/standalone/issue_794/build.zig", .{});
...@@ -39,10 +48,14 @@ pub fn addCases(cases: *tests.StandaloneContext) void {...@@ -39,10 +48,14 @@ pub fn addCases(cases: *tests.StandaloneContext) void {
39 if (builtin.os.tag != .wasi) {48 if (builtin.os.tag != .wasi) {
40 cases.addBuildFile("test/standalone/load_dynamic_library/build.zig", .{});49 cases.addBuildFile("test/standalone/load_dynamic_library/build.zig", .{});
41 }50 }
42 if (builtin.cpu.arch == .x86_64) { // TODO add C ABI support for other architectures51 // C ABI compatibility issue: https://github.com/ziglang/zig/issues/1481
52 if (builtin.cpu.arch == .x86_64) {
43 cases.addBuildFile("test/stage1/c_abi/build.zig", .{});53 cases.addBuildFile("test/stage1/c_abi/build.zig", .{});
44 }54 }
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
47 if (builtin.os.tag == .windows) {60 if (builtin.os.tag == .windows) {
48 cases.addC("test/standalone/issue_9402/main.zig");61 cases.addC("test/standalone/issue_9402/main.zig");
...@@ -52,7 +65,10 @@ pub fn addCases(cases: *tests.StandaloneContext) void {...@@ -52,7 +65,10 @@ pub fn addCases(cases: *tests.StandaloneContext) void {
52 cases.addBuildFile("test/standalone/pie/build.zig", .{});65 cases.addBuildFile("test/standalone/pie/build.zig", .{});
53 }66 }
54 // Try to build and run an Objective-C executable.67 // 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
57 // Ensure the development tools are buildable.73 // Ensure the development tools are buildable.
58 cases.add("tools/gen_spirv_spec.zig");74 cases.add("tools/gen_spirv_spec.zig");
test/standalone/c_compiler/build.zig+2-4
...@@ -3,6 +3,7 @@ const builtin = @import("builtin");...@@ -3,6 +3,7 @@ const builtin = @import("builtin");
3const Builder = std.build.Builder;3const Builder = std.build.Builder;
4const CrossTarget = std.zig.CrossTarget;4const CrossTarget = std.zig.CrossTarget;
55
6// TODO integrate this with the std.build executor API
6fn isRunnableTarget(t: CrossTarget) bool {7fn isRunnableTarget(t: CrossTarget) bool {
7 if (t.isNative()) return true;8 if (t.isNative()) return true;
89
...@@ -30,12 +31,9 @@ pub fn build(b: *Builder) void {...@@ -30,12 +31,9 @@ pub fn build(b: *Builder) void {
30 exe_cpp.setTarget(target);31 exe_cpp.setTarget(target);
31 exe_cpp.linkSystemLibrary("c++");32 exe_cpp.linkSystemLibrary("c++");
3233
33 // disable broken LTO links:
34 switch (target.getOsTag()) {34 switch (target.getOsTag()) {
35 .windows => {
36 exe_cpp.want_lto = false;
37 },
38 .macos => {35 .macos => {
36 // https://github.com/ziglang/zig/issues/8680
39 exe_cpp.want_lto = false;37 exe_cpp.want_lto = false;
40 exe_c.want_lto = false;38 exe_c.want_lto = false;
41 },39 },
test/standalone/mix_c_files/build.zig+5-7
...@@ -1,23 +1,20 @@...@@ -1,23 +1,20 @@
1const std = @import("std");1const std = @import("std");
2const builtin = @import("builtin");
2const Builder = std.build.Builder;3const Builder = std.build.Builder;
3const CrossTarget = std.zig.CrossTarget;4const CrossTarget = std.zig.CrossTarget;
45
5fn isUnpecifiedTarget(t: CrossTarget) bool {6// TODO integrate this with the std.build executor API
6 return t.cpu_arch == null and t.abi == null and t.os_tag == null;
7}
8fn isRunnableTarget(t: CrossTarget) bool {7fn isRunnableTarget(t: CrossTarget) bool {
9 if (t.isNative()) return true;8 if (t.isNative()) return true;
109
11 return (t.getOsTag() == std.Target.current.os.tag and10 return (t.getOsTag() == builtin.os.tag and
12 t.getCpuArch() == std.Target.current.cpu.arch);11 t.getCpuArch() == builtin.cpu.arch);
13}12}
1413
15pub fn build(b: *Builder) void {14pub fn build(b: *Builder) void {
16 const mode = b.standardReleaseOptions();15 const mode = b.standardReleaseOptions();
17 const target = b.standardTargetOptions(.{});16 const target = b.standardTargetOptions(.{});
1817
19 const test_step = b.step("test", "Test the program");
20
21 const exe = b.addExecutable("test", "main.zig");18 const exe = b.addExecutable("test", "main.zig");
22 exe.addCSourceFile("test.c", &[_][]const u8{"-std=c11"});19 exe.addCSourceFile("test.c", &[_][]const u8{"-std=c11"});
23 exe.setBuildMode(mode);20 exe.setBuildMode(mode);
...@@ -25,6 +22,7 @@ pub fn build(b: *Builder) void {...@@ -25,6 +22,7 @@ pub fn build(b: *Builder) void {
25 exe.setTarget(target);22 exe.setTarget(target);
26 b.default_step.dependOn(&exe.step);23 b.default_step.dependOn(&exe.step);
2724
25 const test_step = b.step("test", "Test the program");
28 if (isRunnableTarget(target)) {26 if (isRunnableTarget(target)) {
29 const run_cmd = exe.run();27 const run_cmd = exe.run();
30 test_step.dependOn(&run_cmd.step);28 test_step.dependOn(&run_cmd.step);