X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fbuilder.cpp;h=723930a315b3c6e16c9d30192e4847762c5b5a26;hb=b6dcf65b5e1b99f6c65454358c7610f3e9c8af2b;hp=7825a20c85dbd091a845e232ac3a1a7764e6c08f;hpb=57bdb055acb0453c75b22cb64f35cc0e817a2827;p=builder.git diff --git a/source/builder.cpp b/source/builder.cpp index 7825a20..723930a 100644 --- a/source/builder.cpp +++ b/source/builder.cpp @@ -1,12 +1,11 @@ #include #include #include -#include -#include #include #include #include #include +#include #include #include #include "action.h" @@ -30,10 +29,15 @@ using namespace Msp; Builder::Builder(int argc, char **argv): analyzer(0), do_build(false), + dry_run(false), + help(false), verbose(1), chrome(false), build_file("Build"), - jobs(1) + jobs(1), + conf_all(false), + conf_only(false), + build_all(false) { string analyze_mode; string work_dir; @@ -85,7 +89,7 @@ Builder::Builder(int argc, char **argv): { unsigned equal=i->find('='); if(equal!=string::npos) - cmdline_options.insert(RawOptionMap::value_type(i->substr(0, equal), i->substr(equal+1))); + cmdline_options.insert(StringMap::value_type(i->substr(0, equal), i->substr(equal+1))); else cmdline_targets.push_back(*i); } @@ -101,6 +105,31 @@ Builder::Builder(int argc, char **argv): archs.insert(StringMap::value_type("native", "")); archs.insert(StringMap::value_type("arm", "arm-linux-gnu-")); archs.insert(StringMap::value_type("win32", "i586-mingw32msvc-")); + + StringMap &native_tools=tools.insert(ToolMap::value_type("native", StringMap())).first->second; + native_tools.insert(StringMap::value_type("CC", "gcc")); + native_tools.insert(StringMap::value_type("CXX", "g++")); + native_tools.insert(StringMap::value_type("LD", "gcc")); + native_tools.insert(StringMap::value_type("LDXX", "g++")); + native_tools.insert(StringMap::value_type("AR", "ar")); + + StringMap &release_profile=profile_tmpl.insert(ProfileTemplateMap::value_type("release", StringMap())).first->second; + release_profile.insert(StringMap::value_type("optimize", "3")); + release_profile.insert(StringMap::value_type("outdir", "$profile")); + + StringMap &debug_profile=profile_tmpl.insert(ProfileTemplateMap::value_type("debug", StringMap())).first->second; + debug_profile.insert(StringMap::value_type("debug", "1")); + debug_profile.insert(StringMap::value_type("outdir", "$profile")); + + for(StringMap::iterator i=archs.begin(); i!=archs.end(); ++i) + { + if(i->first=="native") + continue; + + StringMap &arch_profile=profile_tmpl.insert(ProfileTemplateMap::value_type(i->first, StringMap())).first->second; + arch_profile.insert(StringMap::value_type("arch", i->first)); + arch_profile.insert(StringMap::value_type("prefix", "$HOME/local/$arch")); + } } /** @@ -250,6 +279,39 @@ const string &Builder::get_arch_prefix(const string &arch) const return i->second; } +string Builder::get_tool(const std::string &tool, const std::string &arch) +{ + ToolMap::iterator i=tools.find(arch); + if(i!=tools.end()) + { + StringMap::iterator j=i->second.find(tool); + if(j!=i->second.end()) + return j->second; + } + + // Either the arch, or the tool within the arch was not found + i=tools.find("native"); + StringMap::iterator j=i->second.find(tool); + if(j==i->second.end()) + throw InvalidParameterValue("Unknown tool"); + + return get_arch_prefix(arch)+j->second; +} + +void Builder::apply_profile_template(Config &config, const string &pt) const +{ + vector parts=split(pt, '-'); + + for(vector::iterator i=parts.begin(); i!=parts.end(); ++i) + { + ProfileTemplateMap::const_iterator j=profile_tmpl.find(*i); + if(j==profile_tmpl.end()) + continue; + + config.update(j->second); + } +} + int Builder::main() { if(load_build_file(cwd/build_file)) @@ -429,7 +491,7 @@ int Builder::create_targets() continue; Path::Path inst_base; - if(i->second->get_buildable()) + if(i->second->get_buildable() && i->second->get_install_flags()) inst_base=i->second->get_prefix(); const ComponentList &components=i->second->get_components();