diff options
| author | Jakub Konka <kubkon@jakubkonka.com> | 2023-11-04 00:32:49 +0100 |
|---|---|---|
| committer | Jakub Konka <kubkon@jakubkonka.com> | 2023-11-04 09:13:34 +0100 |
| commit | ee66137269ee5375d7a3ca030ad0989f5edc625f (patch) | |
| tree | 9688092d961437bd35f2d8309590f94a97bb8a06 /test | |
| parent | e3b82eaa661bc964f62a9481ac9ebfe35cf3bb87 (diff) | |
| download | zig-ee66137269ee5375d7a3ca030ad0989f5edc625f.tar.gz zig-ee66137269ee5375d7a3ca030ad0989f5edc625f.zip | |
elf: add link smoke tests covering emitting obj and static lib
Diffstat (limited to 'test')
| -rw-r--r-- | test/link/elf.zig | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/test/link/elf.zig b/test/link/elf.zig index 766d1980e2..75cc34ec32 100644 --- a/test/link/elf.zig +++ b/test/link/elf.zig @@ -23,6 +23,8 @@ pub fn build(b: *Build) void { // Exercise linker with self-hosted backend (no LLVM) elf_step.dependOn(testGcSectionsZig(b, .{ .use_llvm = false, .target = default_target })); + elf_step.dependOn(testLinkingObj(b, .{ .use_llvm = false, .target = default_target })); + elf_step.dependOn(testLinkingStaticLib(b, .{ .use_llvm = false, .target = default_target })); elf_step.dependOn(testLinkingZig(b, .{ .use_llvm = false, .target = default_target })); elf_step.dependOn(testImportingDataDynamic(b, .{ .use_llvm = false, .target = glibc_target })); elf_step.dependOn(testImportingDataStatic(b, .{ .use_llvm = false, .target = musl_target })); @@ -1823,6 +1825,72 @@ fn testLinkingCpp(b: *Build, opts: Options) *Step { return test_step; } +fn testLinkingObj(b: *Build, opts: Options) *Step { + const test_step = addTestStep(b, "linking-obj", opts); + + const obj = addObject(b, "aobj", opts); + addZigSourceBytes(obj, + \\extern var mod: usize; + \\export fn callMe() usize { + \\ return me * mod; + \\} + \\var me: usize = 42; + ); + + const exe = addExecutable(b, "testobj", opts); + addZigSourceBytes(exe, + \\const std = @import("std"); + \\extern fn callMe() usize; + \\export var mod: usize = 2; + \\pub fn main() void { + \\ std.debug.print("{d}\n", .{callMe()}); + \\} + ); + exe.addObject(obj); + + const run = addRunArtifact(exe); + run.expectStdErrEqual("84\n"); + test_step.dependOn(&run.step); + + return test_step; +} + +fn testLinkingStaticLib(b: *Build, opts: Options) *Step { + const test_step = addTestStep(b, "linking-static-lib", opts); + + const lib = b.addStaticLibrary(.{ + .name = "alib", + .target = opts.target, + .optimize = opts.optimize, + .use_llvm = opts.use_llvm, + .use_lld = false, + }); + addZigSourceBytes(lib, + \\extern var mod: usize; + \\export fn callMe() usize { + \\ return me * mod; + \\} + \\var me: usize = 42; + ); + + const exe = addExecutable(b, "testlib", opts); + addZigSourceBytes(exe, + \\const std = @import("std"); + \\extern fn callMe() usize; + \\export var mod: usize = 2; + \\pub fn main() void { + \\ std.debug.print("{d}\n", .{callMe()}); + \\} + ); + exe.linkLibrary(lib); + + const run = addRunArtifact(exe); + run.expectStdErrEqual("84\n"); + test_step.dependOn(&run.step); + + return test_step; +} + fn testLinkingZig(b: *Build, opts: Options) *Step { const test_step = addTestStep(b, "linking-zig-static", opts); |
