diff options
3 files changed, 50 insertions, 2 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/config/BuildConfiguration.java b/src/main/java/com/google/devtools/build/lib/analysis/config/BuildConfiguration.java index 3b54a8b17c..d5aa190596 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/config/BuildConfiguration.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/config/BuildConfiguration.java @@ -604,10 +604,22 @@ public class BuildConfiguration implements BuildEvent { category = "semantics", // Should this be "flags"? documentationCategory = OptionDocumentationCategory.OUTPUT_PARAMETERS, effectTags = { OptionEffectTag.AFFECTS_OUTPUTS, OptionEffectTag.ACTION_COMMAND_LINES }, - help = "Specify the mode the binary will be built in. " + "Values: 'fastbuild', 'dbg', 'opt'." + help = "Specify the mode the binary will be built in. Values: 'fastbuild', 'dbg', 'opt'." ) public CompilationMode compilationMode; + @Option( + name = "host_compilation_mode", + converter = CompilationMode.Converter.class, + defaultValue = "opt", + category = "semantics", // Should this be "flags"? + documentationCategory = OptionDocumentationCategory.OUTPUT_PARAMETERS, + effectTags = { OptionEffectTag.AFFECTS_OUTPUTS, OptionEffectTag.ACTION_COMMAND_LINES }, + help = "Specify the mode the tools used during the build will be built in. Values: " + + "'fastbuild', 'dbg', 'opt'." + ) + public CompilationMode hostCompilationMode; + /** * This option is used internally to set output directory name of the <i>host</i> configuration * to a constant, so that the output files for the host are completely independent of those for @@ -1066,7 +1078,7 @@ public class BuildConfiguration implements BuildEvent { Options host = (Options) getDefault(); host.outputDirectoryName = "host"; - host.compilationMode = CompilationMode.OPT; + host.compilationMode = hostCompilationMode; host.isHost = true; host.configsMode = configsMode; host.enableRunfiles = enableRunfiles; diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppOptions.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppOptions.java index 3d2a242318..77f846d645 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppOptions.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppOptions.java @@ -720,6 +720,28 @@ public class CppOptions extends FragmentOptions { public List<String> hostCxxoptList; @Option( + name = "host_conlyopt", + allowMultiple = true, + defaultValue = "", + category = "flags", + documentationCategory = OptionDocumentationCategory.OUTPUT_PARAMETERS, + effectTags = {OptionEffectTag.ACTION_COMMAND_LINES, OptionEffectTag.AFFECTS_OUTPUTS}, + help = "Additional option to pass to gcc when compiling C source files for host tools." + ) + public List<String> hostConlyoptList; + + @Option( + name = "host_linkopt", + defaultValue = "", + category = "flags", + allowMultiple = true, + documentationCategory = OptionDocumentationCategory.OUTPUT_PARAMETERS, + effectTags = {OptionEffectTag.ACTION_COMMAND_LINES, OptionEffectTag.AFFECTS_OUTPUTS}, + help = "Additional option to pass to gcc when linking host tools." + ) + public List<String> hostLinkoptList; + + @Option( name = "grte_top", defaultValue = "null", // The default value is chosen by the toolchain. category = "version", @@ -882,6 +904,8 @@ public class CppOptions extends FragmentOptions { } host.coptList = coptListBuilder.addAll(hostCoptList).build(); host.cxxoptList = cxxoptListBuilder.addAll(hostCxxoptList).build(); + host.conlyoptList = ImmutableList.copyOf(hostConlyoptList); + host.linkoptList = ImmutableList.copyOf(hostLinkoptList); host.useStartEndLib = useStartEndLib; host.stripBinaries = StripMode.ALWAYS; diff --git a/src/test/java/com/google/devtools/build/lib/analysis/config/BuildConfigurationTest.java b/src/test/java/com/google/devtools/build/lib/analysis/config/BuildConfigurationTest.java index 2bc20c343a..d3a1d4d764 100644 --- a/src/test/java/com/google/devtools/build/lib/analysis/config/BuildConfigurationTest.java +++ b/src/test/java/com/google/devtools/build/lib/analysis/config/BuildConfigurationTest.java @@ -353,6 +353,18 @@ public class BuildConfigurationTest extends ConfigurationTestCase { assertThat(cfg.getCommandLineBuildVariables().get("foo")).isEqualTo("bar"); } + @Test + public void testHostCompilationModeDefault() throws Exception { + BuildConfiguration cfg = createHost(); + assertThat(cfg.getCompilationMode()).isEqualTo(CompilationMode.OPT); + } + + @Test + public void testHostCompilationModeNonDefault() throws Exception { + BuildConfiguration cfg = createHost("--host_compilation_mode=dbg"); + assertThat(cfg.getCompilationMode()).isEqualTo(CompilationMode.DBG); + } + /** * Returns a mock config fragment that loads the given label and does nothing else. */ |