summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJohn Hodge <tpg@ucc.asn.au>2018-01-13 21:39:47 +0800
committerJohn Hodge <tpg@ucc.asn.au>2018-01-13 21:40:12 +0800
commit2353096540a6859e8dc45a14570157542543c602 (patch)
treeecf87eaa55c5d17b5d2210a640e4ce5f26ac1438 /src
parentb02cf96cd03e0d02f2dbf5162b1406ae864d41a0 (diff)
downloadmrust-2353096540a6859e8dc45a14570157542543c602.tar.gz
Trans - Add compiler triple/arch to the target spec
Diffstat (limited to 'src')
-rw-r--r--src/trans/codegen_c.cpp10
-rw-r--r--src/trans/target.cpp12
-rw-r--r--src/trans/target.hpp1
3 files changed, 12 insertions, 11 deletions
diff --git a/src/trans/codegen_c.cpp b/src/trans/codegen_c.cpp
index 6f728d8f..0e06f52d 100644
--- a/src/trans/codegen_c.cpp
+++ b/src/trans/codegen_c.cpp
@@ -445,7 +445,10 @@ namespace {
switch( m_compiler )
{
case Compiler::Gcc:
- args.push_back( getenv("CC") ? getenv("CC") : "gcc" );
+ if( getenv("CC") )
+ args.push_back( getenv("CC") );
+ else
+ args.push_back( Target_GetCurSpec().m_c_compiler + "-gcc" );
args.push_back("-ffunction-sections");
args.push_back("-pthread");
switch(opt.opt_level)
@@ -501,10 +504,7 @@ namespace {
is_windows = true;
// TODO: Look up these paths in the registry and use CreateProcess instead of system
args.push_back(detect_msvc().path_vcvarsall);
- if( Target_GetCurSpec().m_arch.m_pointer_bits == 64 )
- {
- args.push_back("amd64"); // NOTE: Doesn't support inline assembly, only works with overrides
- }
+ args.push_back( Target_GetCurSpec().m_c_compiler );
args.push_back("&");
args.push_back("cl.exe");
args.push_back("/nologo");
diff --git a/src/trans/target.cpp b/src/trans/target.cpp
index a29bbb0e..a48038dd 100644
--- a/src/trans/target.cpp
+++ b/src/trans/target.cpp
@@ -48,42 +48,42 @@ namespace
else if(target_name == "i586-linux-gnu")
{
return TargetSpec {
- "unix", "linux", "gnu", CodegenMode::Gnu11, //"i586-pc-linux-gnu"
+ "unix", "linux", "gnu", CodegenMode::Gnu11, "i586-pc-linux-gnu",
ARCH_X86
};
}
else if(target_name == "x86_64-linux-gnu")
{
return TargetSpec {
- "unix", "linux", "gnu", CodegenMode::Gnu11, //"x86_64-pc-linux-gnu",
+ "unix", "linux", "gnu", CodegenMode::Gnu11, "x86_64-pc-linux-gnu",
ARCH_X86_64
};
}
else if(target_name == "arm-linux-gnu")
{
return TargetSpec {
- "unix", "linux", "gnu", CodegenMode::Gnu11, //"arm-elf-eabi"
+ "unix", "linux", "gnu", CodegenMode::Gnu11, "arm-elf-eabi",
ARCH_ARM32
};
}
else if(target_name == "x86_64-windows-gnu")
{
return TargetSpec {
- "windows", "windows", "gnu", CodegenMode::Gnu11, //"gcc"
+ "windows", "windows", "gnu", CodegenMode::Gnu11, "x86_64-w64-mingw32",
ARCH_X86_64
};
}
else if (target_name == "x86-windows-msvc")
{
return TargetSpec {
- "windows", "windows", "msvc", CodegenMode::Msvc,// "x86",
+ "windows", "windows", "msvc", CodegenMode::Msvc, "x86",
ARCH_X86
};
}
//else if (target_name == "x86_64-windows-msvc")
//{
// return TargetSpec {
- // "windows", "windows", "msvc", CodegenMode::Msvc, // "amd64"
+ // "windows", "windows", "msvc", CodegenMode::Msvc, "amd64"
// ARCH_X86_64
// };
//}
diff --git a/src/trans/target.hpp b/src/trans/target.hpp
index 36e06d57..e82d25ff 100644
--- a/src/trans/target.hpp
+++ b/src/trans/target.hpp
@@ -38,6 +38,7 @@ struct TargetSpec
::std::string m_env_name;
CodegenMode m_codegen_mode;
+ ::std::string m_c_compiler; // MSVC arch / GNU triplet
TargetArch m_arch;
};