Commit fcdb7027e9

Jacob Young <jacobly0@users.noreply.github.com>
2024-04-08 03:19:12
haiku: fix linking issues
1 parent 0c83fa2
Changed files (4)
lib
src
link
lib/std/zig/system/NativePaths.zig
@@ -105,6 +105,13 @@ pub fn detect(arena: Allocator, native_target: std.Target) !NativePaths {
         return self;
     }
 
+    if (builtin.os.tag == .haiku) {
+        try self.addLibDir("/system/non-packaged/lib");
+        try self.addLibDir("/system/develop/lib");
+        try self.addLibDir("/system/lib");
+        return self;
+    }
+
     if (builtin.os.tag != .windows and builtin.os.tag != .wasi) {
         const triple = try native_target.linuxTriple(arena);
 
lib/std/Target.zig
@@ -2740,6 +2740,13 @@ pub fn is_libc_lib_name(target: std.Target, name: []const u8) bool {
             return true;
     }
 
+    if (target.os.tag == .haiku) {
+        if (eqlIgnoreCase(ignore_case, name, "root"))
+            return true;
+        if (eqlIgnoreCase(ignore_case, name, "network"))
+            return true;
+    }
+
     return false;
 }
 
src/link/Elf.zig
@@ -1517,7 +1517,7 @@ fn dumpArgv(self: *Elf, comp: *Compilation) !void {
 
         if (self.base.isStatic()) {
             try argv.append("-static");
-        } else if (self.base.isDynLib()) {
+        } else if (self.base.isDynLib() or (target.os.tag == .haiku and self.base.isExe())) {
             try argv.append("-shared");
         }
 
@@ -2469,7 +2469,10 @@ fn linkWithLLD(self: *Elf, arena: Allocator, prog_node: *std.Progress.Node) !voi
             } else {
                 try argv.append("-static");
             }
-        } else if (is_dyn_lib) {
+        } else if (switch (target.os.tag) {
+            else => is_dyn_lib,
+            .haiku => is_exe_or_dyn_lib,
+        }) {
             try argv.append("-shared");
         }
 
build.zig
@@ -747,6 +747,9 @@ fn addCmakeCfgOptionsToExe(
                 try addCxxKnownPath(b, cfg, exe, b.fmt("libstdc++.{s}", .{lib_suffix}), null, need_cpp_includes);
                 try addCxxKnownPath(b, cfg, exe, b.fmt("libgcc_eh.{s}", .{lib_suffix}), null, need_cpp_includes);
             },
+            .haiku => {
+                try addCxxKnownPath(b, cfg, exe, b.fmt("libstdc++.{s}", .{lib_suffix}), null, need_cpp_includes);
+            },
             else => {},
         }
     }