summaryrefslogtreecommitdiff
path: root/src/bootstrap.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/bootstrap.cc')
-rw-r--r--src/bootstrap.cc62
1 files changed, 50 insertions, 12 deletions
diff --git a/src/bootstrap.cc b/src/bootstrap.cc
index 9a3c321..55bd3e0 100644
--- a/src/bootstrap.cc
+++ b/src/bootstrap.cc
@@ -3,10 +3,11 @@
// See accompanying file LICENSE for details.
#include <iostream>
#include <array>
+#include <cstdlib>
#define BOOTSTRAP
-#include "libctor.h"
+#include "ctor.h"
#include "util.cc"
#include "rebuild.cc"
@@ -21,21 +22,57 @@
std::filesystem::path configurationFile("configuration.cc");
std::filesystem::path configHeaderFile("config.h");
-const Configuration default_configuration{};
-const Configuration& configuration()
+const ctor::configuration& ctor::get_configuration()
{
- return default_configuration;
+ static ctor::configuration cfg;
+ static bool initialised{false};
+ if(!initialised)
+ {
+ cfg.build_toolchain = getToolChain(cfg.get(ctor::cfg::build_cxx, "/usr/bin/g++"));
+ initialised = true;
+ }
+
+ return cfg;
}
-bool hasConfiguration(const std::string& key)
+bool ctor::configuration::has(const std::string& key) const
{
return false;
}
-const std::string& getConfiguration(const std::string& key,
- const std::string& defaultValue)
+const std::string& ctor::configuration::get(const std::string& key, const std::string& default_value) const
{
- return defaultValue;
+ if(key == ctor::cfg::build_cxx && std::getenv("CXX"))
+ {
+ static std::string s = std::getenv("CXX");
+ return s;
+ }
+
+ if(key == ctor::cfg::build_cc && std::getenv("CC"))
+ {
+ static std::string s = std::getenv("CC");
+ return s;
+ }
+
+ if(key == ctor::cfg::build_ld && std::getenv("LD"))
+ {
+ static std::string s = std::getenv("LD");
+ return s;
+ }
+
+ if(key == ctor::cfg::build_ar && std::getenv("AR"))
+ {
+ static std::string s = std::getenv("AR");
+ return s;
+ }
+
+ if(key == ctor::cfg::builddir && std::getenv("BUILDDIR"))
+ {
+ static std::string s = std::getenv("BUILDDIR");
+ return s;
+ }
+
+ return default_value;
}
int main(int argc, char* argv[])
@@ -47,9 +84,10 @@ int main(int argc, char* argv[])
return 1;
}
- Settings settings{};
+ ctor::settings settings{};
- settings.builddir = getConfiguration(cfg::builddir, "build");
+ const auto& c = ctor::get_configuration();
+ settings.builddir = c.get(ctor::cfg::builddir, settings.builddir);
settings.parallel_processes =
std::max(1u, std::thread::hardware_concurrency() * 2 - 1);
settings.verbose = 0;
@@ -66,8 +104,8 @@ int main(int argc, char* argv[])
auto& targets = getTargets(settings);
for(const auto& target : targets)
{
- if(target.config.type != TargetType::UnitTest &&
- target.config.type != TargetType::UnitTestLib)
+ if(target.config.type != ctor::target_type::unit_test &&
+ target.config.type != ctor::target_type::unit_test_library)
{
non_unittest_targets.push_back(target);
}