╭─────────────╮ │scroll to top│ ╰─────────────╯ ╭ link.zig ─────────────────────────────────────────────────────╮ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ╰───────────────────────────────────────────────────────────────╯
╭ find file ─ ─ ─ ─ ─ ─ ─ ─ ─ ─╮ ╭────╮ ╭ clone ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ╮ │ │ │http│ ssh │ │ ╰ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─╯ ╰────╯ ╰ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ╯
258 exe.root_module.addObject(abs); 259 exe.root_module.addObject(abs_reloc); 260 261 const run = case.addRunArtifact(exe); 262 run.addCheck(.{ .expect_term = .{ .exited = 0 } }); 263 264 if (!ctx.use_llvm) { 265 const exe_reloc_err = case.addExecutable(.{ 266 .name = "test-reloc-err", 267 .zig_source_bytes = 268 \\extern const foo: u32; 269 \\pub fn main() !u8 { 270 \\ return @intFromBool(foo != 0xcafecafe); 271 \\} 272 , 273 }); 274 exe_reloc_err.root_module.addObject(abs); 275 case.expectLinkErrors(exe_reloc_err, .{ 276 .contains = "error: absolute symbol 'foo' targeted by invalid relocation type: /?/", 277 }); 278 } 279 } 280 281 if (ctx.includeTest("explicit-extern-lib-name")) |case| { 282 // TODO: Lld.zig does not look at explicit inputs to resolve explicit extern lib names 283 if (ctx.use_llvm) return; 284 285 const lib1 = case.addLibrary(.dynamic, .{ 286 .name = "lib1", 287 .name_target = false, 288 .zig_source_bytes = 289 \\export fn foo() u8 { 290 \\ return 43; 291 \\} 292 , 293 }); 294 295 const lib2 = case.addLibrary(.dynamic, .{ 296 .name = "lib2", 297 .name_target = false, 298 .zig_source_bytes = 299 \\export fn foo() u8 { 300 \\ return 42; 301 \\} 302 , 303 }); 304 305 const lib3 = case.addLibrary(.static, .{ 306 .name = "lib3", 307 .zig_source_bytes = 308 \\extern fn foo() u8; 309 \\export fn callFoo() u8 { 310 \\ return foo(); 311 \\} 312 , 313 }); 314 315 const exe = case.addExecutable(.{ 316 .name = "test", 317 .zig_source_bytes = 318 \\extern "explicit-extern-lib-name-lib2" fn foo() u8; 319 \\extern fn callFoo() u8; 320 \\pub fn main() !u8 { 321 \\ return foo() + callFoo(); 322 \\} 323 , 324 }); 325 exe.root_module.linkLibrary(lib1); 326 exe.root_module.linkLibrary(lib2); 327 // exe.root_module.addLibraryPath(.{ 328 // .generated = .{ 329 // .index = lib2.getEmittedBin().generated.index, 330 // .up = 1, 331 // }, 332 // }); 333 exe.root_module.linkLibrary(lib3); 334 335 const run = case.addRunArtifact(exe); 336 run.addCheck(.{ .expect_term = .{ .exited = 84 } }); 337 } 338 } 339 340 const LinkContext = @import("tests.zig").LinkContext; 341 const std = @import("std"); 342