diff options
author | Greg V <greg@unrelenting.technology> | 2018-06-27 18:05:00 +0300 |
---|---|---|
committer | Greg V <greg@unrelenting.technology> | 2018-06-27 18:05:00 +0300 |
commit | 671d31dc2e3b3a2812d98acb8fc0e5a26ec5e3c0 (patch) | |
tree | 579dcf53d7321768ee7b1e12d7f6c873eda2121d /src | |
parent | c2ca872f68fc94d6a87478364f2932426f7c747a (diff) | |
download | mrust-671d31dc2e3b3a2812d98acb8fc0e5a26ec5e3c0.tar.gz |
Add FreeBSD and DragonFly targets
Also adjust macOS comment. FreeBSD also uses clang and lld (current dev
version even uses lld as /usr/bin/ld), function-sections/gc-sections are
very well supported. It's probably a Mach-O issue on Macs.
Diffstat (limited to 'src')
-rw-r--r-- | src/expand/proc_macro.cpp | 2 | ||||
-rw-r--r-- | src/trans/target.cpp | 53 |
2 files changed, 50 insertions, 5 deletions
diff --git a/src/expand/proc_macro.cpp b/src/expand/proc_macro.cpp index 969f75b0..7d953e37 100644 --- a/src/expand/proc_macro.cpp +++ b/src/expand/proc_macro.cpp @@ -24,7 +24,7 @@ # include <sys/wait.h> #endif -#if defined(__OpenBSD__) || defined(__NetBSD__) || defined(__APPLE__) +#if defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__NetBSD__) || defined(__DragonFly__) || defined(__APPLE__) extern char **environ; #endif diff --git a/src/trans/target.cpp b/src/trans/target.cpp index 1727cdba..72d81edd 100644 --- a/src/trans/target.cpp +++ b/src/trans/target.cpp @@ -361,6 +361,34 @@ namespace ARCH_X86_64 }; } + else if(target_name == "i686-unknown-freebsd") + { + return TargetSpec { + "unix", "freebsd", "gnu", {CodegenMode::Gnu11, "i686-unknown-freebsd", BACKEND_C_OPTS_GNU}, + ARCH_X86 + }; + } + else if(target_name == "x86_64-unknown-freebsd") + { + return TargetSpec { + "unix", "freebsd", "gnu", {CodegenMode::Gnu11, "x86_64-unknown-freebsd", BACKEND_C_OPTS_GNU}, + ARCH_X86_64 + }; + } + else if(target_name == "arm-unknown-freebsd") + { + return TargetSpec { + "unix", "freebsd", "gnu", {CodegenMode::Gnu11, "arm-unknown-freebsd", BACKEND_C_OPTS_GNU}, + ARCH_ARM32 + }; + } + else if(target_name == "aarch64-unknown-freebsd") + { + return TargetSpec { + "unix", "freebsd", "gnu", {CodegenMode::Gnu11, "aarch64-unknown-freebsd", BACKEND_C_OPTS_GNU}, + ARCH_ARM64 + }; + } else if(target_name == "x86_64-unknown-netbsd") { return TargetSpec { @@ -396,9 +424,16 @@ namespace ARCH_ARM64 }; } + else if(target_name == "x86_64-unknown-dragonfly") + { + return TargetSpec { + "unix", "dragonfly", "gnu", {CodegenMode::Gnu11, "x86_64-unknown-dragonfly", BACKEND_C_OPTS_GNU}, + ARCH_X86_64 + }; + } else if(target_name == "x86_64-apple-macosx") { - // NOTE: OSX uses clang and lld, which don't fully support the defaults used for GNU targets + // NOTE: OSX uses Mach-O binaries, which don't fully support the defaults used for GNU targets return TargetSpec { "unix", "macos", "gnu", {CodegenMode::Gnu11, "x86_64-apple-darwin", {}, {}}, ARCH_X86_64 @@ -438,22 +473,32 @@ void Target_SetCfg(const ::std::string& target_name) Cfg_SetFlag("linux"); Cfg_SetValue("target_vendor", "gnu"); } - Cfg_SetValue("target_env", g_target.m_env_name); + + if( g_target.m_os_name == "freebsd" ) + { + Cfg_SetFlag("freebsd"); + Cfg_SetValue("target_vendor", "unknown"); + } if( g_target.m_os_name == "netbsd" ) { Cfg_SetFlag("netbsd"); Cfg_SetValue("target_vendor", "unknown"); } - Cfg_SetValue("target_env", g_target.m_env_name); if( g_target.m_os_name == "openbsd" ) { Cfg_SetFlag("openbsd"); Cfg_SetValue("target_vendor", "unknown"); } - Cfg_SetValue("target_env", g_target.m_env_name); + if( g_target.m_os_name == "dragonfly" ) + { + Cfg_SetFlag("dragonfly"); + Cfg_SetValue("target_vendor", "unknown"); + } + + Cfg_SetValue("target_env", g_target.m_env_name); Cfg_SetValue("target_os", g_target.m_os_name); Cfg_SetValue("target_pointer_width", FMT(g_target.m_arch.m_pointer_bits)); Cfg_SetValue("target_endian", g_target.m_arch.m_big_endian ? "big" : "little"); |