From d914c5f40ca1194e7fd6a2b30664ac4717e38786 Mon Sep 17 00:00:00 2001 From: Mikko Rasa Date: Sat, 28 Aug 2021 14:41:07 +0300 Subject: [PATCH] Add a toolchain field to Architecture --- source/architecture.cpp | 29 +++++++++++++++++++++++++++-- source/architecture.h | 2 ++ source/builder.cpp | 8 ++++---- 3 files changed, 33 insertions(+), 6 deletions(-) diff --git a/source/architecture.cpp b/source/architecture.cpp index ba25afd..9ce1ace 100644 --- a/source/architecture.cpp +++ b/source/architecture.cpp @@ -61,6 +61,13 @@ const char *systems[] = 0 }; +const char *toolchains[] = +{ + "gnu", + "clang", + 0 +}; + const char *aliases[] = { "pc", "x86", @@ -74,6 +81,8 @@ const char *aliases[] = "power macintosh", "ppc", "armeabi", "arm", "v7a", "armv7a", + "gcc", "gnu", + "mingw", "windows-gnu", 0 }; @@ -122,12 +131,21 @@ Architecture::Architecture(Builder &b, const string &spec): else if(bits==native_arch.bits) native = true; } + + if(toolchain.empty()) + { + if((system=="darwin" || system=="freebsd") && builder.get_vfs().find_binary("clang")) + toolchain = "clang"; + else + toolchain = "gnu"; + } + name = type; if(!cpu.empty()) name += format("-%s", cpu); if(!fpu.empty()) name += format("-%s", fpu); - name += format("-%d-%s", bits, system); + name += format("-%d-%s-%s", bits, system, toolchain); if(system=="windows") { @@ -160,7 +178,7 @@ bool Architecture::match_name(const string &pattern) const { if((*i=="32" && bits==32) || (*i=="64" && bits==64)) ; - else if(*i!=type && *i!=cpu && *i!=fpu && *i!=system) + else if(*i!=type && *i!=cpu && *i!=fpu && *i!=system && *i!=toolchain) return negate; } return !negate; @@ -263,6 +281,13 @@ void Architecture::parse_specification(const string &spec) ok = true; } + for(unsigned j=0; (!ok && toolchains[j]); ++j) + if(*i==toolchains[j]) + { + toolchain = *i; + ok = true; + } + if(!ok && (*i=="32" || *i=="64")) { bits = lexical_cast(*i); diff --git a/source/architecture.h b/source/architecture.h index 1532302..c1446b4 100644 --- a/source/architecture.h +++ b/source/architecture.h @@ -29,6 +29,7 @@ private: std::string fpu; std::string system; unsigned bits; + std::string toolchain; std::string name; bool native; std::string cross_prefix; @@ -45,6 +46,7 @@ public: unsigned get_bits() const { return bits; } const std::string &get_cpu() const { return cpu; } const std::string &get_fpu() const { return fpu; } + const std::string &get_toolchain() const { return toolchain; } bool match_name(const std::string &) const; std::string best_match(const std::list &) const; bool is_native() const { return native; } diff --git a/source/builder.cpp b/source/builder.cpp index b49bc75..7ef1ea1 100644 --- a/source/builder.cpp +++ b/source/builder.cpp @@ -86,12 +86,12 @@ void Builder::set_temp_directory(const FS::Path &p) void Builder::add_default_tools() { - const string &sys = current_arch->get_system(); - if(sys=="android") + const string &arch_tc = current_arch->get_toolchain(); + if(current_arch->get_system()=="android") toolchain.add_toolchain(new AndroidTools(*this, *current_arch)); - else if((sys=="darwin" || sys=="freebsd") && vfs.find_binary("clang")) + else if(arch_tc=="clang") toolchain.add_toolchain(new ClangTools(*this, *current_arch)); - else + else if(arch_tc=="gnu") toolchain.add_toolchain(new GnuTools(*this, *current_arch)); toolchain.add_toolchain(new BuiltinTools(*this)); toolchain.add_tool(new DataTool(*this)); -- 2.43.0