// -*- c++ -*- // Distributed under the BSD 2-Clause License. // See accompanying file LICENSE for details. #include #include #include #define BOOTSTRAP #include "ctor.h" #include "util.cc" #include "rebuild.cc" #include "task.cc" #include "task_cc.cc" #include "task_ar.cc" #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 ctor::configuration& ctor::get_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 ctor::configuration::has(const std::string& key) const { return false; } const std::string& ctor::configuration::get(const std::string& key, const std::string& default_value) const { 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[]) { if(argc > 1) { std::cerr << "This is a minimal bootstrap version of " << argv[0] << " which doesn't support any arguments\n"; return 1; } ctor::settings settings{}; 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; auto all_tasks = getTasks(settings, {}, false); for(auto task : all_tasks) { if(task->registerDepTasks(all_tasks)) { return 1; } } std::vector non_unittest_targets; auto& targets = getTargets(settings); for(const auto& target : targets) { if(target.config.type != ctor::target_type::unit_test && target.config.type != ctor::target_type::unit_test_library) { non_unittest_targets.push_back(target); } } auto ret = build(settings, "all", non_unittest_targets, all_tasks); if(ret != 0) { return ret; } return 0; }