]> git.tdb.fi Git - builder.git/blobdiff - source/builder.cpp
Add profile templates
[builder.git] / source / builder.cpp
index 31cdd1806aa62b5e921ed531d73631920a8baf3a..723930a315b3c6e16c9d30192e4847762c5b5a26 100644 (file)
@@ -89,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);
        }
@@ -112,6 +112,24 @@ Builder::Builder(int argc, char **argv):
        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"));
+       }
 }
 
 /**
@@ -280,6 +298,20 @@ string Builder::get_tool(const std::string &tool, const std::string &arch)
        return get_arch_prefix(arch)+j->second;
 }
 
+void Builder::apply_profile_template(Config &config, const string &pt) const
+{
+       vector<string> parts=split(pt, '-');
+
+       for(vector<string>::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))