Commit 831bb66895

Greg V <greg@unrelenting.technology>
2018-10-17 21:21:16
Set up libc/rtld paths for FreeBSD
1 parent a983a0a
Changed files (4)
src/analyze.cpp
@@ -4606,7 +4606,7 @@ void find_libc_include_path(CodeGen *g) {
             }
         } else if (g->zig_target.os == OsLinux) {
             g->libc_include_dir = get_linux_libc_include_path();
-        } else if (g->zig_target.os == OsMacOSX) {
+        } else if (g->zig_target.os == OsMacOSX || g->zig_target.os == OsFreeBSD) {
             g->libc_include_dir = buf_create_from_str("/usr/include");
         } else {
             // TODO find libc at runtime for other operating systems
@@ -4652,6 +4652,8 @@ void find_libc_lib_path(CodeGen *g) {
 
         } else if (g->zig_target.os == OsLinux) {
             g->libc_lib_dir = get_linux_libc_lib_path("crt1.o");
+        } else if (g->zig_target.os == OsFreeBSD) {
+            g->libc_lib_dir = buf_create_from_str("/usr/lib");
         } else {
             zig_panic("Unable to determine libc lib path.");
         }
@@ -4664,6 +4666,8 @@ void find_libc_lib_path(CodeGen *g) {
             return;
         } else if (g->zig_target.os == OsLinux) {
             g->libc_static_lib_dir = get_linux_libc_lib_path("crtbegin.o");
+        } else if (g->zig_target.os == OsFreeBSD) {
+            g->libc_static_lib_dir = buf_create_from_str("/usr/lib");
         } else {
             zig_panic("Unable to determine libc static lib path.");
         }
src/link.cpp
@@ -195,6 +195,9 @@ static Buf *try_dynamic_linker_path(const char *ld_name) {
 }
 
 static Buf *get_dynamic_linker_path(CodeGen *g) {
+    if (g->zig_target.os == OsFreeBSD) {
+        return buf_create_from_str("/libexec/ld-elf.so.1");
+    }
     if (g->is_native_target && g->zig_target.arch.arch == ZigLLVM_x86_64) {
         static const char *ld_names[] = {
             "ld-linux-x86-64.so.2",
src-self-hosted/libc_installation.zig
@@ -172,7 +172,7 @@ pub const LibCInstallation = struct.{
                 try group.call(findNativeStaticLibDir, self, loop);
                 try group.call(findNativeDynamicLinker, self, loop);
             },
-            builtin.Os.macosx => {
+            builtin.Os.macosx, builtin.Os.freebsd => {
                 self.include_dir = try std.mem.dupe(loop.allocator, u8, "/usr/include");
             },
             else => @compileError("unimplemented: find libc for this OS"),
src-self-hosted/target.zig
@@ -299,6 +299,13 @@ pub const Target = union(enum).{
     pub fn getDynamicLinkerPath(self: Target) ?[]const u8 {
         const env = self.getEnviron();
         const arch = self.getArch();
+        const os = self.getOs();
+        switch (os) {
+            builtin.Os.freebsd => {
+                return "/libexec/ld-elf.so.1";
+            },
+            else => {},
+        }
         switch (env) {
             builtin.Environ.android => {
                 if (self.is64bit()) {
@@ -493,6 +500,7 @@ pub const Target = union(enum).{
 
             builtin.Os.linux,
             builtin.Os.macosx,
+            builtin.Os.freebsd,
             builtin.Os.openbsd,
             builtin.Os.zen,
             => switch (id) {
@@ -527,7 +535,6 @@ pub const Target = union(enum).{
             builtin.Os.ananas,
             builtin.Os.cloudabi,
             builtin.Os.dragonfly,
-            builtin.Os.freebsd,
             builtin.Os.fuchsia,
             builtin.Os.ios,
             builtin.Os.kfreebsd,