diff options
| author | gingerBill <gingerBill@users.noreply.github.com> | 2020-09-15 10:12:42 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-09-15 10:12:42 +0100 |
| commit | 3211e60018767ba047688c89a84aa03b8fb5069d (patch) | |
| tree | 64859db158ef1c307480268a5efaa0dc5d14051e /src/build_settings.cpp | |
| parent | 775bd66382cb3c022fbb257a4a28c310bc9e3693 (diff) | |
| parent | a13eed98947b6d6694fc68db22b3c27d50d5e588 (diff) | |
Merge pull request #734 from krixano/FreeBSD
FreeBSD Support
Diffstat (limited to 'src/build_settings.cpp')
| -rw-r--r-- | src/build_settings.cpp | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/src/build_settings.cpp b/src/build_settings.cpp index d6ac55ac8..39deb4063 100644 --- a/src/build_settings.cpp +++ b/src/build_settings.cpp @@ -1,3 +1,8 @@ +#if defined(GB_SYSTEM_FREEBSD) +#include <sys/types.h> +#include <sys/sysctl.h> +#endif + enum TargetOsKind { TargetOs_Invalid, @@ -6,6 +11,7 @@ enum TargetOsKind { TargetOs_linux, TargetOs_essence, TargetOs_js, + TargetOs_freebsd, TargetOs_COUNT, }; @@ -36,6 +42,7 @@ String target_os_names[TargetOs_COUNT] = { str_lit("linux"), str_lit("essence"), str_lit("js"), + str_lit("freebsd"), }; String target_arch_names[TargetArch_COUNT] = { @@ -204,6 +211,23 @@ gb_global TargetMetrics target_darwin_amd64 = { str_lit("e-m:o-i64:64-f80:128-n8:16:32:64-S128"), }; +gb_global TargetMetrics target_freebsd_386 = { + TargetOs_freebsd, + TargetArch_386, + 4, + 8, + str_lit("i386-unknown-freebsd-elf"), +}; + +gb_global TargetMetrics target_freebsd_amd64 = { + TargetOs_freebsd, + TargetArch_amd64, + 8, + 16, + str_lit("x86_64-unknown-freebsd-elf"), + str_lit("e-m:w-i64:64-f80:128-n8:16:32:64-S128"), +}; + gb_global TargetMetrics target_essence_amd64 = { TargetOs_essence, TargetArch_amd64, @@ -235,6 +259,8 @@ gb_global NamedTargetMetrics named_targets[] = { { str_lit("linux_amd64"), &target_linux_amd64 }, { str_lit("windows_386"), &target_windows_386 }, { str_lit("windows_amd64"), &target_windows_amd64 }, + { str_lit("freebsd_386"), &target_freebsd_386 }, + { str_lit("freebsd_amd64"), &target_freebsd_amd64 }, }; NamedTargetMetrics *selected_target_metrics; @@ -476,7 +502,21 @@ String odin_root_dir(void) { // of this compiler, it should be _good enough_. // That said, there's no solid 100% method on Linux to get the program's // path without checking this link. Sorry. +#if defined(GB_SYSTEM_FREEBSD) + int mib[4]; + mib[0] = CTL_KERN; + mib[1] = KERN_PROC; + mib[2] = KERN_PROC_PATHNAME; + mib[3] = -1; + len = path_buf.count; + sysctl(mib, 4, &path_buf[0], (size_t *) &len, NULL, 0); +#elif defined(GB_SYSTEM_NETBSD) + len = readlink("/proc/curproc/exe", &path_buf[0], path_buf.count); +#elif defined(GB_SYSTEM_DRAGONFLYBSD) + len = readlink("/proc/curproc/file", &path_buf[0], path_buf.count); +#else len = readlink("/proc/self/exe", &path_buf[0], path_buf.count); +#endif if(len == 0) { return make_string(nullptr, 0); } @@ -613,6 +653,8 @@ void init_build_context(TargetMetrics *cross_target) { metrics = &target_windows_amd64; #elif defined(GB_SYSTEM_OSX) metrics = &target_darwin_amd64; + #elif defined(GB_SYSTEM_FREEBSD) + metrics = &target_freebsd_amd64; #else metrics = &target_linux_amd64; #endif @@ -621,6 +663,8 @@ void init_build_context(TargetMetrics *cross_target) { metrics = &target_windows_386; #elif defined(GB_SYSTEM_OSX) #error "Build Error: Unsupported architecture" + #elif defined(GB_SYSTEM_FREEBSD) + metrics = &target_freebsd_386; #else metrics = &target_linux_386; #endif @@ -669,6 +713,9 @@ void init_build_context(TargetMetrics *cross_target) { case TargetOs_linux: bc->link_flags = str_lit("-arch x86-64 "); break; + case TargetOs_freebsd: + bc->link_flags = str_lit("-arch x86-64"); + break; } } else if (bc->metrics.arch == TargetArch_386) { llc_flags = gb_string_appendc(llc_flags, "-march=x86 "); @@ -684,6 +731,9 @@ void init_build_context(TargetMetrics *cross_target) { case TargetOs_linux: bc->link_flags = str_lit("-arch x86 "); break; + case TargetOs_freebsd: + bc->link_flags = str_lit("-arch x86"); + break; } } else if (bc->metrics.arch == TargetArch_wasm32) { bc->link_flags = str_lit("--no-entry --export-table --export-all --allow-undefined "); |