diff options
author | John Hodge <tpg@ucc.asn.au> | 2018-01-13 21:39:47 +0800 |
---|---|---|
committer | John Hodge <tpg@ucc.asn.au> | 2018-01-13 21:40:12 +0800 |
commit | 2353096540a6859e8dc45a14570157542543c602 (patch) | |
tree | ecf87eaa55c5d17b5d2210a640e4ce5f26ac1438 /src | |
parent | b02cf96cd03e0d02f2dbf5162b1406ae864d41a0 (diff) | |
download | mrust-2353096540a6859e8dc45a14570157542543c602.tar.gz |
Trans - Add compiler triple/arch to the target spec
Diffstat (limited to 'src')
-rw-r--r-- | src/trans/codegen_c.cpp | 10 | ||||
-rw-r--r-- | src/trans/target.cpp | 12 | ||||
-rw-r--r-- | src/trans/target.hpp | 1 |
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; }; |