| ... | ... | @@ -23,6 +23,8 @@ pub fn build(b: *Build) void { |
| 23 | 23 | |
| 24 | 24 | // Exercise linker with self-hosted backend (no LLVM) |
| 25 | 25 | elf_step.dependOn(testGcSectionsZig(b, .{ .use_llvm = false, .target = default_target })); |
| 26 | elf_step.dependOn(testLinkingObj(b, .{ .use_llvm = false, .target = default_target })); |
| 27 | elf_step.dependOn(testLinkingStaticLib(b, .{ .use_llvm = false, .target = default_target })); |
| 26 | 28 | elf_step.dependOn(testLinkingZig(b, .{ .use_llvm = false, .target = default_target })); |
| 27 | 29 | elf_step.dependOn(testImportingDataDynamic(b, .{ .use_llvm = false, .target = glibc_target })); |
| 28 | 30 | elf_step.dependOn(testImportingDataStatic(b, .{ .use_llvm = false, .target = musl_target })); |
| ... | ... | @@ -1823,6 +1825,72 @@ fn testLinkingCpp(b: *Build, opts: Options) *Step { |
| 1823 | 1825 | return test_step; |
| 1824 | 1826 | } |
| 1825 | 1827 | |
| 1828 | fn testLinkingObj(b: *Build, opts: Options) *Step { |
| 1829 | const test_step = addTestStep(b, "linking-obj", opts); |
| 1830 | |
| 1831 | const obj = addObject(b, "aobj", opts); |
| 1832 | addZigSourceBytes(obj, |
| 1833 | \\extern var mod: usize; |
| 1834 | \\export fn callMe() usize { |
| 1835 | \\ return me * mod; |
| 1836 | \\} |
| 1837 | \\var me: usize = 42; |
| 1838 | ); |
| 1839 | |
| 1840 | const exe = addExecutable(b, "testobj", opts); |
| 1841 | addZigSourceBytes(exe, |
| 1842 | \\const std = @import("std"); |
| 1843 | \\extern fn callMe() usize; |
| 1844 | \\export var mod: usize = 2; |
| 1845 | \\pub fn main() void { |
| 1846 | \\ std.debug.print("{d}\n", .{callMe()}); |
| 1847 | \\} |
| 1848 | ); |
| 1849 | exe.addObject(obj); |
| 1850 | |
| 1851 | const run = addRunArtifact(exe); |
| 1852 | run.expectStdErrEqual("84\n"); |
| 1853 | test_step.dependOn(&run.step); |
| 1854 | |
| 1855 | return test_step; |
| 1856 | } |
| 1857 | |
| 1858 | fn testLinkingStaticLib(b: *Build, opts: Options) *Step { |
| 1859 | const test_step = addTestStep(b, "linking-static-lib", opts); |
| 1860 | |
| 1861 | const lib = b.addStaticLibrary(.{ |
| 1862 | .name = "alib", |
| 1863 | .target = opts.target, |
| 1864 | .optimize = opts.optimize, |
| 1865 | .use_llvm = opts.use_llvm, |
| 1866 | .use_lld = false, |
| 1867 | }); |
| 1868 | addZigSourceBytes(lib, |
| 1869 | \\extern var mod: usize; |
| 1870 | \\export fn callMe() usize { |
| 1871 | \\ return me * mod; |
| 1872 | \\} |
| 1873 | \\var me: usize = 42; |
| 1874 | ); |
| 1875 | |
| 1876 | const exe = addExecutable(b, "testlib", opts); |
| 1877 | addZigSourceBytes(exe, |
| 1878 | \\const std = @import("std"); |
| 1879 | \\extern fn callMe() usize; |
| 1880 | \\export var mod: usize = 2; |
| 1881 | \\pub fn main() void { |
| 1882 | \\ std.debug.print("{d}\n", .{callMe()}); |
| 1883 | \\} |
| 1884 | ); |
| 1885 | exe.linkLibrary(lib); |
| 1886 | |
| 1887 | const run = addRunArtifact(exe); |
| 1888 | run.expectStdErrEqual("84\n"); |
| 1889 | test_step.dependOn(&run.step); |
| 1890 | |
| 1891 | return test_step; |
| 1892 | } |
| 1893 | |
| 1826 | 1894 | fn testLinkingZig(b: *Build, opts: Options) *Step { |
| 1827 | 1895 | const test_step = addTestStep(b, "linking-zig-static", opts); |
| 1828 | 1896 | |