summaryrefslogtreecommitdiff
path: root/src/bootstrap.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/bootstrap.cc')
-rw-r--r--src/bootstrap.cc45
1 files changed, 33 insertions, 12 deletions
diff --git a/src/bootstrap.cc b/src/bootstrap.cc
index 08f7b1f..0604527 100644
--- a/src/bootstrap.cc
+++ b/src/bootstrap.cc
@@ -3,11 +3,11 @@
// See accompanying file LICENSE for details.
#include <iostream>
#include <array>
+#include <cstdlib>
#define BOOTSTRAP
-#include "libctor.h"
-#include "settings.h"
+#include "ctor.h"
#include "util.cc"
#include "rebuild.cc"
@@ -17,25 +17,44 @@
#include "execute.cc"
#include "tasks.cc"
#include "build.cc"
+#include "tools.cc"
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.host_toolchain = getToolChain(cfg.get(ctor::cfg::host_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::host_cxx && std::getenv("CXX"))
+ {
+ static std::string s = std::getenv("CXX");
+ 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 +66,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,7 +86,8 @@ int main(int argc, char* argv[])
auto& targets = getTargets(settings);
for(const auto& target : targets)
{
- if(target.config.type != TargetType::UnitTest)
+ if(target.config.type != ctor::target_type::unit_test &&
+ target.config.type != ctor::target_type::unit_test_library)
{
non_unittest_targets.push_back(target);
}