diff options
| author | Jakub Konka <kubkon@jakubkonka.com> | 2021-05-22 13:08:00 +0200 |
|---|---|---|
| committer | Jakub Konka <kubkon@jakubkonka.com> | 2021-05-22 16:12:45 +0200 |
| commit | 2b0d322ea003907dc2111864cea259e5e0043328 (patch) | |
| tree | 8707c105b098f8e1aa504cc3adcaeaaf4cfdf244 /test | |
| parent | f4101c1153980b887e9aa8850ac0a9dd88192140 (diff) | |
| download | zig-2b0d322ea003907dc2111864cea259e5e0043328.tar.gz zig-2b0d322ea003907dc2111864cea259e5e0043328.zip | |
zld: permit system static libs
This commits permits passing in static archives using the system
lib flag `-la`. With this commit, `zig ld` will now look firstly for
a dynamic library (which always takes precedence), and will fall back
on `liba.a` if the dylib is not found. The static archive is searched
for in the system lib search dirs like the dylibs.
Diffstat (limited to 'test')
| -rw-r--r-- | test/standalone.zig | 1 | ||||
| -rw-r--r-- | test/standalone/link_static_lib_as_system_lib/a.c | 4 | ||||
| -rw-r--r-- | test/standalone/link_static_lib_as_system_lib/a.h | 2 | ||||
| -rw-r--r-- | test/standalone/link_static_lib_as_system_lib/build.zig | 23 | ||||
| -rw-r--r-- | test/standalone/link_static_lib_as_system_lib/main.zig | 8 |
5 files changed, 38 insertions, 0 deletions
diff --git a/test/standalone.zig b/test/standalone.zig index e1236d448b..9dd849ef88 100644 --- a/test/standalone.zig +++ b/test/standalone.zig @@ -14,6 +14,7 @@ pub fn addCases(cases: *tests.StandaloneContext) void { cases.addBuildFile("test/standalone/global_linkage/build.zig"); 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/issue_339/build.zig"); cases.addBuildFile("test/standalone/issue_794/build.zig"); cases.addBuildFile("test/standalone/issue_5825/build.zig"); diff --git a/test/standalone/link_static_lib_as_system_lib/a.c b/test/standalone/link_static_lib_as_system_lib/a.c new file mode 100644 index 0000000000..ee9da97a3a --- /dev/null +++ b/test/standalone/link_static_lib_as_system_lib/a.c @@ -0,0 +1,4 @@ +#include "a.h" +int32_t add(int32_t a, int32_t b) { + return a + b; +} diff --git a/test/standalone/link_static_lib_as_system_lib/a.h b/test/standalone/link_static_lib_as_system_lib/a.h new file mode 100644 index 0000000000..7b45d54d56 --- /dev/null +++ b/test/standalone/link_static_lib_as_system_lib/a.h @@ -0,0 +1,2 @@ +#include <stdint.h> +int32_t add(int32_t a, int32_t b); diff --git a/test/standalone/link_static_lib_as_system_lib/build.zig b/test/standalone/link_static_lib_as_system_lib/build.zig new file mode 100644 index 0000000000..f951b68a8c --- /dev/null +++ b/test/standalone/link_static_lib_as_system_lib/build.zig @@ -0,0 +1,23 @@ +const std = @import("std"); +const Builder = std.build.Builder; + +pub fn build(b: *Builder) void { + const mode = b.standardReleaseOptions(); + + const lib_a = b.addStaticLibrary("a", null); + lib_a.addCSourceFile("a.c", &[_][]const u8{}); + lib_a.setBuildMode(mode); + lib_a.addIncludeDir("."); + lib_a.install(); + + const test_exe = b.addTest("main.zig"); + test_exe.setBuildMode(mode); + test_exe.linkSystemLibrary("a"); // force linking liba.a as -la + test_exe.addSystemIncludeDir("."); + const search_path = std.fs.path.join(b.allocator, &[_][]const u8{ b.install_path, "lib" }) catch unreachable; + test_exe.addLibPath(search_path); + + const test_step = b.step("test", "Test it"); + test_step.dependOn(b.getInstallStep()); + test_step.dependOn(&test_exe.step); +} diff --git a/test/standalone/link_static_lib_as_system_lib/main.zig b/test/standalone/link_static_lib_as_system_lib/main.zig new file mode 100644 index 0000000000..0b9c46217f --- /dev/null +++ b/test/standalone/link_static_lib_as_system_lib/main.zig @@ -0,0 +1,8 @@ +const std = @import("std"); +const expect = std.testing.expect; +const c = @cImport(@cInclude("a.h")); + +test "import C add" { + const result = c.add(2, 1); + try expect(result == 3); +} |
