X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fbuilder.cpp;h=723930a315b3c6e16c9d30192e4847762c5b5a26;hb=b6dcf65b5e1b99f6c65454358c7610f3e9c8af2b;hp=f23e85af8c06d17c1056734a0bb2ce3995d82425;hpb=09325a99816a966bc17a0ec9a0a197efc6ce0349;p=builder.git diff --git a/source/builder.cpp b/source/builder.cpp index f23e85a..723930a 100644 --- a/source/builder.cpp +++ b/source/builder.cpp @@ -29,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; @@ -84,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); } @@ -100,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")); + } } /** @@ -249,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))