authorgravatar for greg@unrelenting.technologyGreg V <greg@unrelenting.technology> 2018-10-17 22:21:16+03:00
committergravatar for greg@unrelenting.technologyGreg V <greg@unrelenting.technology> 2018-10-20 15:21:35+03:00
log831bb668955fa9d332f7beb1ea11f1c8028e5235
treebab62d5c936214739e177dbac1d91603cdf2eac5
parenta983a0a59b348a885f24656a8646707554170574

Set up libc/rtld paths for FreeBSD


4 files changed, 17 insertions(+), 3 deletions(-)

src-self-hosted/libc_installation.zig+1-1
......@@ -172,7 +172,7 @@ pub const LibCInstallation = struct.{
172172 try group.call(findNativeStaticLibDir, self, loop);
173173 try group.call(findNativeDynamicLinker, self, loop);
174174 },
175 builtin.Os.macosx => {
175 builtin.Os.macosx, builtin.Os.freebsd => {
176176 self.include_dir = try std.mem.dupe(loop.allocator, u8, "/usr/include");
177177 },
178178 else => @compileError("unimplemented: find libc for this OS"),
src-self-hosted/target.zig+8-1
......@@ -299,6 +299,13 @@ pub const Target = union(enum).{
299299 pub fn getDynamicLinkerPath(self: Target) ?[]const u8 {
300300 const env = self.getEnviron();
301301 const arch = self.getArch();
302 const os = self.getOs();
303 switch (os) {
304 builtin.Os.freebsd => {
305 return "/libexec/ld-elf.so.1";
306 },
307 else => {},
308 }
302309 switch (env) {
303310 builtin.Environ.android => {
304311 if (self.is64bit()) {
......@@ -493,6 +500,7 @@ pub const Target = union(enum).{
493500
494501 builtin.Os.linux,
495502 builtin.Os.macosx,
503 builtin.Os.freebsd,
496504 builtin.Os.openbsd,
497505 builtin.Os.zen,
498506 => switch (id) {
......@@ -527,7 +535,6 @@ pub const Target = union(enum).{
527535 builtin.Os.ananas,
528536 builtin.Os.cloudabi,
529537 builtin.Os.dragonfly,
530 builtin.Os.freebsd,
531538 builtin.Os.fuchsia,
532539 builtin.Os.ios,
533540 builtin.Os.kfreebsd,
src/analyze.cpp+5-1
......@@ -4606,7 +4606,7 @@ void find_libc_include_path(CodeGen *g) {
46064606 }
46074607 } else if (g->zig_target.os == OsLinux) {
46084608 g->libc_include_dir = get_linux_libc_include_path();
4609 } else if (g->zig_target.os == OsMacOSX) {
4609 } else if (g->zig_target.os == OsMacOSX || g->zig_target.os == OsFreeBSD) {
46104610 g->libc_include_dir = buf_create_from_str("/usr/include");
46114611 } else {
46124612 // TODO find libc at runtime for other operating systems
......@@ -4652,6 +4652,8 @@ void find_libc_lib_path(CodeGen *g) {
46524652
46534653 } else if (g->zig_target.os == OsLinux) {
46544654 g->libc_lib_dir = get_linux_libc_lib_path("crt1.o");
4655 } else if (g->zig_target.os == OsFreeBSD) {
4656 g->libc_lib_dir = buf_create_from_str("/usr/lib");
46554657 } else {
46564658 zig_panic("Unable to determine libc lib path.");
46574659 }
......@@ -4664,6 +4666,8 @@ void find_libc_lib_path(CodeGen *g) {
46644666 return;
46654667 } else if (g->zig_target.os == OsLinux) {
46664668 g->libc_static_lib_dir = get_linux_libc_lib_path("crtbegin.o");
4669 } else if (g->zig_target.os == OsFreeBSD) {
4670 g->libc_static_lib_dir = buf_create_from_str("/usr/lib");
46674671 } else {
46684672 zig_panic("Unable to determine libc static lib path.");
46694673 }
src/link.cpp+3
......@@ -195,6 +195,9 @@ static Buf *try_dynamic_linker_path(const char *ld_name) {
195195}
196196
197197static Buf *get_dynamic_linker_path(CodeGen *g) {
198 if (g->zig_target.os == OsFreeBSD) {
199 return buf_create_from_str("/libexec/ld-elf.so.1");
200 }
198201 if (g->is_native_target && g->zig_target.arch.arch == ZigLLVM_x86_64) {
199202 static const char *ld_names[] = {
200203 "ld-linux-x86-64.so.2",