From d00a96c846dc7bad686d174aa27ad7d66da149da Mon Sep 17 00:00:00 2001 From: Bent Bisballe Nyeng Date: Thu, 2 Dec 2021 21:35:45 +0100 Subject: Add support for bootstrapping with custom compiler, including check for c++20 support. --- src/bootstrap.cc | 12 ++++++++++++ src/configure.cc | 33 ++++++++++++++++----------------- 2 files changed, 28 insertions(+), 17 deletions(-) (limited to 'src') 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 #include +#include #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 includedir; -std::optional libdir; +std::map 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"; -- cgit v1.2.3