From 183d5f4a5312c090729823dd5ebf4500c0a5a5eb Mon Sep 17 00:00:00 2001 From: Jakub Konka Date: Thu, 10 Jun 2021 19:51:41 +0200 Subject: [PATCH] Add standalone test for common symbols --- test/standalone.zig | 1 + test/standalone/link_common_symbols/a.c | 6 ++++++ test/standalone/link_common_symbols/b.c | 6 ++++++ test/standalone/link_common_symbols/build.zig | 16 ++++++++++++++++ test/standalone/link_common_symbols/main.zig | 11 +++++++++++ 5 files changed, 40 insertions(+) create mode 100644 test/standalone/link_common_symbols/a.c create mode 100644 test/standalone/link_common_symbols/b.c create mode 100644 test/standalone/link_common_symbols/build.zig create mode 100644 test/standalone/link_common_symbols/main.zig diff --git a/test/standalone.zig b/test/standalone.zig index 43c68c3686..77f15db286 100644 --- a/test/standalone.zig +++ b/test/standalone.zig @@ -15,6 +15,7 @@ pub fn addCases(cases: *tests.StandaloneContext) void { cases.addBuildFile("test/standalone/static_c_lib/build.zig", .{}); cases.addBuildFile("test/standalone/link_interdependent_static_c_libs/build.zig", .{}); cases.addBuildFile("test/standalone/link_static_lib_as_system_lib/build.zig", .{}); + cases.addBuildFile("test/standalone/link_common_symbols/build.zig", .{}); cases.addBuildFile("test/standalone/issue_339/build.zig", .{}); cases.addBuildFile("test/standalone/issue_8550/build.zig", .{}); cases.addBuildFile("test/standalone/issue_794/build.zig", .{}); diff --git a/test/standalone/link_common_symbols/a.c b/test/standalone/link_common_symbols/a.c new file mode 100644 index 0000000000..829a96e507 --- /dev/null +++ b/test/standalone/link_common_symbols/a.c @@ -0,0 +1,6 @@ +int i; +int j; + +int add_to_i_and_j(int x) { + return x + i + j; +} diff --git a/test/standalone/link_common_symbols/b.c b/test/standalone/link_common_symbols/b.c new file mode 100644 index 0000000000..d3789c0fdf --- /dev/null +++ b/test/standalone/link_common_symbols/b.c @@ -0,0 +1,6 @@ +long i; +int j = 2; + +void incr_i() { + i++; +} diff --git a/test/standalone/link_common_symbols/build.zig b/test/standalone/link_common_symbols/build.zig new file mode 100644 index 0000000000..43bb41fe32 --- /dev/null +++ b/test/standalone/link_common_symbols/build.zig @@ -0,0 +1,16 @@ +const Builder = @import("std").build.Builder; + +pub fn build(b: *Builder) void { + const mode = b.standardReleaseOptions(); + + const lib_a = b.addStaticLibrary("a", null); + lib_a.addCSourceFiles(&.{ "a.c", "b.c" }, &.{"-fcommon"}); + lib_a.setBuildMode(mode); + + const test_exe = b.addTest("main.zig"); + test_exe.setBuildMode(mode); + test_exe.linkLibrary(lib_a); + + const test_step = b.step("test", "Test it"); + test_step.dependOn(&test_exe.step); +} diff --git a/test/standalone/link_common_symbols/main.zig b/test/standalone/link_common_symbols/main.zig new file mode 100644 index 0000000000..9d00d0d4fb --- /dev/null +++ b/test/standalone/link_common_symbols/main.zig @@ -0,0 +1,11 @@ +const std = @import("std"); +const expect = std.testing.expect; + +extern fn incr_i() void; +extern fn add_to_i_and_j(x: c_int) c_int; + +test "import C common symbols" { + incr_i(); + const res = add_to_i_and_j(2); + try expect(res == 5); +}