authorgravatar for jacobly@ziglang.orgJacob Young <jacobly@ziglang.org> 2024-04-07 21:19:12-04:00
committergravatar for jacobly@ziglang.orgJacob Young <jacobly@ziglang.org> 2024-04-08 13:20:14-04:00
logfcdb7027e9f606cf0f4415daee73cb717affe69e
tree8bbcc034da247436ae77b10fb19321cb443d49a7
parent0c83fa2fd03fec86c4e36075978646f202deec32

haiku: fix linking issues


4 files changed, 22 insertions(+), 2 deletions(-)

build.zig+3
......@@ -747,6 +747,9 @@ fn addCmakeCfgOptionsToExe(
747747 try addCxxKnownPath(b, cfg, exe, b.fmt("libstdc++.{s}", .{lib_suffix}), null, need_cpp_includes);
748748 try addCxxKnownPath(b, cfg, exe, b.fmt("libgcc_eh.{s}", .{lib_suffix}), null, need_cpp_includes);
749749 },
750 .haiku => {
751 try addCxxKnownPath(b, cfg, exe, b.fmt("libstdc++.{s}", .{lib_suffix}), null, need_cpp_includes);
752 },
750753 else => {},
751754 }
752755 }
lib/std/Target.zig+7
......@@ -2740,6 +2740,13 @@ pub fn is_libc_lib_name(target: std.Target, name: []const u8) bool {
27402740 return true;
27412741 }
27422742
2743 if (target.os.tag == .haiku) {
2744 if (eqlIgnoreCase(ignore_case, name, "root"))
2745 return true;
2746 if (eqlIgnoreCase(ignore_case, name, "network"))
2747 return true;
2748 }
2749
27432750 return false;
27442751}
27452752
lib/std/zig/system/NativePaths.zig+7
......@@ -105,6 +105,13 @@ pub fn detect(arena: Allocator, native_target: std.Target) !NativePaths {
105105 return self;
106106 }
107107
108 if (builtin.os.tag == .haiku) {
109 try self.addLibDir("/system/non-packaged/lib");
110 try self.addLibDir("/system/develop/lib");
111 try self.addLibDir("/system/lib");
112 return self;
113 }
114
108115 if (builtin.os.tag != .windows and builtin.os.tag != .wasi) {
109116 const triple = try native_target.linuxTriple(arena);
110117
src/link/Elf.zig+5-2
......@@ -1517,7 +1517,7 @@ fn dumpArgv(self: *Elf, comp: *Compilation) !void {
15171517
15181518 if (self.base.isStatic()) {
15191519 try argv.append("-static");
1520 } else if (self.base.isDynLib()) {
1520 } else if (self.base.isDynLib() or (target.os.tag == .haiku and self.base.isExe())) {
15211521 try argv.append("-shared");
15221522 }
15231523
......@@ -2469,7 +2469,10 @@ fn linkWithLLD(self: *Elf, arena: Allocator, prog_node: *std.Progress.Node) !voi
24692469 } else {
24702470 try argv.append("-static");
24712471 }
2472 } else if (is_dyn_lib) {
2472 } else if (switch (target.os.tag) {
2473 else => is_dyn_lib,
2474 .haiku => is_exe_or_dyn_lib,
2475 }) {
24732476 try argv.append("-shared");
24742477 }
24752478