diff options
author | Bent Bisballe Nyeng <deva@aasimon.org> | 2021-12-02 21:35:45 +0100 |
---|---|---|
committer | Bent Bisballe Nyeng <deva@aasimon.org> | 2021-12-03 17:17:00 +0100 |
commit | d00a96c846dc7bad686d174aa27ad7d66da149da (patch) | |
tree | 0903c595e12f09ed9205d81e16d4c79c8efc9102 /src | |
parent | 21d50e927303354f3ddde1a0c2b60cc4900906c4 (diff) |
Add support for bootstrapping with custom compiler, including check for c++20 support.custom-gcc-bootstrap
Diffstat (limited to 'src')
-rw-r--r-- | src/bootstrap.cc | 12 | ||||
-rw-r--r-- | src/configure.cc | 33 |
2 files changed, 28 insertions, 17 deletions
diff --git a/src/bootstrap.cc b/src/bootstrap.cc index 08f7b1f..bf597ea 100644 --- a/src/bootstrap.cc +++ b/src/bootstrap.cc @@ -3,6 +3,7 @@ // See accompanying file LICENSE for details. #include <iostream> #include <array> +#include <cstdlib> #define BOOTSTRAP @@ -29,12 +30,23 @@ const Configuration& configuration() bool hasConfiguration(const std::string& key) { + if(key == cfg::host_cxx && std::getenv("CXX")) + { + return true; + } + return false; } const std::string& getConfiguration(const std::string& key, const std::string& defaultValue) { + if(key == cfg::host_cxx && std::getenv("CXX")) + { + static std::string s = std::getenv("CXX"); + return s; + } + return defaultValue; } diff --git a/src/configure.cc b/src/configure.cc index 37bd3cf..60c3ed6 100644 --- a/src/configure.cc +++ b/src/configure.cc @@ -27,18 +27,12 @@ const Configuration& __attribute__((weak)) configuration() namespace ctor { -std::optional<std::string> includedir; -std::optional<std::string> libdir; +std::map<std::string, std::string> conf_values; } bool hasConfiguration(const std::string& key) { - if(key == cfg::ctor_includedir && ctor::includedir) - { - return true; - } - - if(key == cfg::ctor_libdir && ctor::libdir) + if(ctor::conf_values.find(key) != ctor::conf_values.end()) { return true; } @@ -50,14 +44,9 @@ bool hasConfiguration(const std::string& key) const std::string& getConfiguration(const std::string& key, const std::string& defaultValue) { - if(key == cfg::ctor_includedir && ctor::includedir) - { - return *ctor::includedir; - } - - if(key == cfg::ctor_libdir && ctor::libdir) + if(ctor::conf_values.find(key) != ctor::conf_values.end()) { - return *ctor::libdir; + return ctor::conf_values[key]; } const auto& c = configuration(); @@ -335,6 +324,18 @@ int regenerateCache(const Settings& default_settings, newExternalConfigs.end()); } + // Store current values for execution in this execution context. + if(!ctor_includedir.empty()) + { + ctor::conf_values[cfg::ctor_includedir] = ctor_includedir; + } + if(!ctor_libdir.empty()) + { + ctor::conf_values[cfg::ctor_libdir] = ctor_libdir; + } + ctor::conf_values[cfg::host_cxx] = host_cxx; + ctor::conf_values[cfg::build_cxx] = build_cxx; + std::cout << "Writing results to: " << configurationFile.string() << "\n"; { std::ofstream istr(configurationFile); @@ -369,12 +370,10 @@ int regenerateCache(const Settings& default_settings, if(!ctor_includedir.empty()) { istr << " { \"" << cfg::ctor_includedir << "\", \"" << ctor_includedir << "\" },\n"; - ctor::includedir = ctor_includedir; } if(!ctor_libdir.empty()) { istr << " { \"" << cfg::ctor_libdir << "\", \"" << ctor_libdir << "\" },\n"; - ctor::libdir = ctor_libdir; } istr << " },\n"; |