From 0159b72dbf048b0aa7d7b9ae85715205cb801e50 Mon Sep 17 00:00:00 2001 From: Bent Bisballe Nyeng Date: Sun, 14 Nov 2021 18:06:58 +0100 Subject: Evaluate externals in configure step end read from config map during compilation. --- src/tasks.cc | 77 ++++++++++++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 59 insertions(+), 18 deletions(-) (limited to 'src/tasks.cc') diff --git a/src/tasks.cc b/src/tasks.cc index 8efc98e..8a85fc8 100644 --- a/src/tasks.cc +++ b/src/tasks.cc @@ -16,6 +16,7 @@ #include "task_ar.h" #include "task_so.h" #include "rebuild.h" +#include "configure.h" const std::deque& getTargets(const Settings& settings) { @@ -23,9 +24,9 @@ const std::deque& getTargets(const Settings& settings) static std::deque targets; if(!initialised) { - - // Generate externals - std::vector externalConfigs; + // TODO: Centralize + // Resolv externals + ExternalConfigurations externalConfigs; for(std::size_t i = 0; i < numExternalConfigFiles; ++i) { auto newExternalConfigs = externalConfigFiles[i].cb(); @@ -34,6 +35,7 @@ const std::deque& getTargets(const Settings& settings) newExternalConfigs.end()); } + const auto& extMap = configuration().externals; for(std::size_t i = 0; i < numConfigFiles; ++i) { std::string path = @@ -46,7 +48,6 @@ const std::deque& getTargets(const Settings& settings) for(auto& config : configs) { - // Resolv config externals for(const auto& external : config.externals) { @@ -56,18 +57,60 @@ const std::deque& getTargets(const Settings& settings) if(externalConfig.name == external) { found = true; - config.cflags.insert(config.cflags.end(), - externalConfig.cflags.begin(), - externalConfig.cflags.end()); - config.cxxflags.insert(config.cxxflags.end(), - externalConfig.cxxflags.begin(), - externalConfig.cxxflags.end()); - config.ldflags.insert(config.ldflags.end(), - externalConfig.ldflags.begin(), - externalConfig.ldflags.end()); - config.asmflags.insert(config.asmflags.end(), - externalConfig.asmflags.begin(), - externalConfig.asmflags.end()); + try + { + auto cflags = extMap.at(external+"-cflags"); + config.cflags.insert(config.cflags.end(), + cflags.begin(), + cflags.end()); + } + catch(...) + { + } + + try + { + auto cxxflags = extMap.at(external+"-cxxflags"); + config.cxxflags.insert(config.cxxflags.end(), + cxxflags.begin(), + cxxflags.end()); + } + catch(...) + { + } + + try + { + auto ldflags = extMap.at(external+"-ldflags"); + config.ldflags.insert(config.ldflags.end(), + ldflags.begin(), + ldflags.end()); + } + catch(...) + { + } + + try + { + auto asmflags = extMap.at(external+"-asmflags"); + config.asmflags.insert(config.asmflags.end(), + asmflags.begin(), + asmflags.end()); + } + catch(...) + { + } + + try + { + auto libs = extMap.at(external+"-libs"); + //config.libs.insert(config.libs.end(), + // libs.begin(), + // libs.end()); + } + catch(...) + { + } } } if(!found) @@ -75,10 +118,8 @@ const std::deque& getTargets(const Settings& settings) std::cout << "External '" << external << "' not found.\n"; exit(1); } - } - targets.push_back({config, path}); } } -- cgit v1.2.3