summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJohn Hodge (Mutabah) <acessdev@gmail.com>2018-06-30 09:22:50 +0800
committerGitHub <noreply@github.com>2018-06-30 09:22:50 +0800
commite7fa373946f2da1a67a5f74d92191da1a13f7841 (patch)
tree0dc1a5b54254cbece789de86e6223cc09d25b255 /src
parentb03d61ed130dad6fa88a3beb4c32e48f86fdf84e (diff)
parent44262d8ce69f28c3b691131c4fb5e8824563053e (diff)
downloadmrust-e7fa373946f2da1a67a5f74d92191da1a13f7841.tar.gz
Merge pull request #79 from myfreeweb/master
Add FreeBSD and DragonFly support
Diffstat (limited to 'src')
-rw-r--r--src/expand/proc_macro.cpp2
-rw-r--r--src/include/string_view.hpp3
-rw-r--r--src/main.cpp6
-rw-r--r--src/trans/target.cpp53
4 files changed, 55 insertions, 9 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/include/string_view.hpp b/src/include/string_view.hpp
index 7d049e9e..a0cf596b 100644
--- a/src/include/string_view.hpp
+++ b/src/include/string_view.hpp
@@ -10,7 +10,8 @@
#include <cstddef> // size_t
#include <iostream> // ostream
-namespace std {
+namespace stdx {
+using namespace std;
class string_view
{
diff --git a/src/main.cpp b/src/main.cpp
index 75c078ee..8f2740fc 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -1077,14 +1077,14 @@ ProgramParams::ProgramParams(int argc, char *argv[])
{
const char* end = strchr(a, ':');
- ::std::string_view s;
+ ::stdx::string_view s;
if( end ) {
- s = ::std::string_view { a, end };
+ s = ::stdx::string_view { a, end };
a = end + 1;
}
else {
end = a + strlen(a);
- s = ::std::string_view { a, end };
+ s = ::stdx::string_view { a, end };
a = end;
}
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");