diff options
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/exec/ExecutionOptions.java')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/exec/ExecutionOptions.java | 195 |
1 files changed, 195 insertions, 0 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/exec/ExecutionOptions.java b/src/main/java/com/google/devtools/build/lib/exec/ExecutionOptions.java new file mode 100644 index 0000000000..58e360bfe0 --- /dev/null +++ b/src/main/java/com/google/devtools/build/lib/exec/ExecutionOptions.java @@ -0,0 +1,195 @@ +// Copyright 2014 Google Inc. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +package com.google.devtools.build.lib.exec; + +import com.google.devtools.build.lib.actions.ResourceSet; +import com.google.devtools.build.lib.packages.TestTimeout; +import com.google.devtools.build.lib.rules.test.TestStrategy; +import com.google.devtools.build.lib.rules.test.TestStrategy.TestOutputFormat; +import com.google.devtools.build.lib.rules.test.TestStrategy.TestSummaryFormat; +import com.google.devtools.build.lib.util.OptionsUtils; +import com.google.devtools.build.lib.vfs.PathFragment; +import com.google.devtools.common.options.Option; +import com.google.devtools.common.options.Options; +import com.google.devtools.common.options.OptionsBase; + +import java.util.Map; + +/** + * Options affecting the execution phase of a build. + * + * These options are interpreted by the BuildTool to choose an Executor to + * be used for the build. + * + * Note: from the user's point of view, the characteristic function of this + * set of options is indistinguishable from that of the BuildRequestOptions: + * they are all per-request. The difference is only apparent in the + * implementation: these options are used only by the lib.exec machinery, which + * affects how C++ and Java compilation occur. (The BuildRequestOptions + * contain a mixture of "semantic" options affecting the choice of targets to + * build, and "non-semantic" options affecting the lib.actions machinery.) + * Ideally, the user would be unaware of the difference. For now, the usage + * strings are identical modulo "part 1", "part 2". + */ +public class ExecutionOptions extends OptionsBase { + + public static final ExecutionOptions DEFAULTS = Options.getDefaults(ExecutionOptions.class); + + @Option(name = "verbose_failures", + defaultValue = "false", + category = "verbosity", + help = "If a command fails, print out the full command line.") + public boolean verboseFailures; + + @Option(name = "subcommands", + abbrev = 's', + defaultValue = "false", + category = "verbosity", + help = "Display the subcommands executed during a build.") + public boolean showSubcommands; + + @Option(name = "check_up_to_date", + defaultValue = "false", + category = "what", + help = "Don't perform the build, just check if it is up-to-date. If all targets are " + + "up-to-date, the build completes successfully. If any step needs to be executed " + + "an error is reported and the build fails.") + public boolean checkUpToDate; + + @Option(name = "check_tests_up_to_date", + defaultValue = "false", + category = "testing", + implicitRequirements = { "--check_up_to_date" }, + help = "Don't run tests, just check if they are up-to-date. If all tests results are " + + "up-to-date, the testing completes successfully. If any test needs to be built or " + + "executed, an error is reported and the testing fails. This option implies " + + "--check_up_to_date behavior." + ) + public boolean testCheckUpToDate; + + @Option(name = "test_strategy", + defaultValue = "", + category = "testing", + help = "Specifies which strategy to use when running tests.") + public String testStrategy; + + @Option(name = "test_keep_going", + defaultValue = "true", + category = "testing", + help = "When disabled, any non-passing test will cause the entire build to stop. By default " + + "all tests are run, even if some do not pass.") + public boolean testKeepGoing; + + @Option(name = "runs_per_test_detects_flakes", + defaultValue = "false", + category = "testing", + help = "If true, any shard in which at least one run/attempt passes and at least one " + + "run/attempt fails gets a FLAKY status.") + public boolean runsPerTestDetectsFlakes; + + @Option(name = "flaky_test_attempts", + defaultValue = "default", + category = "testing", + converter = TestStrategy.TestAttemptsConverter.class, + help = "Each test will be retried up to the specified number of times in case of any test " + + "failure. Tests that required more than one attempt to pass would be marked as " + + "'FLAKY' in the test summary. If this option is set, it should specify an int N or the " + + "string 'default'. If it's an int, then all tests will be run up to N times. If it is " + + "not specified or its value is 'default', then only a single test attempt will be made " + + "for regular tests and three for tests marked explicitly as flaky by their rule " + + "(flaky=1 attribute).") + public int testAttempts; + + @Option(name = "test_tmpdir", + defaultValue = "null", + category = "testing", + converter = OptionsUtils.PathFragmentConverter.class, + help = "Specifies the base temporary directory for 'blaze test' to use.") + public PathFragment testTmpDir; + + @Option(name = "test_output", + defaultValue = "summary", + category = "testing", + converter = TestStrategy.TestOutputFormat.Converter.class, + help = "Specifies desired output mode. Valid values are 'summary' to " + + "output only test status summary, 'errors' to also print test logs " + + "for failed tests, 'all' to print logs for all tests and 'streamed' " + + "to output logs for all tests in real time (this will force tests " + + "to be executed locally one at a time regardless of --test_strategy " + + "value).") + public TestOutputFormat testOutput; + + @Option(name = "test_summary", + defaultValue = "short", + category = "testing", + converter = TestStrategy.TestSummaryFormat.Converter.class, + help = "Specifies the desired format ot the test summary. Valid values " + + "are 'short' to print information only about tests executed, " + + "'terse', to print information only about unsuccessful tests," + + "'detailed' to print detailed information about failed test cases, " + + "and 'none' to omit the summary.") + public TestSummaryFormat testSummary; + + @Option(name = "test_timeout", + defaultValue = "-1", + category = "testing", + converter = TestTimeout.TestTimeoutConverter.class, + help = "Override the default test timeout values for test timeouts (in secs). If a single " + + "positive integer value is specified it will override all categories. If 4 comma-" + + "separated integers are specified, they will override the timeouts for short, " + + "moderate, long and eternal (in that order). In either form, a value of -1 tells blaze " + + "to use its default timeouts for that category.") + public Map<TestTimeout, Integer> testTimeout; + + + @Option(name = "resource_autosense", + defaultValue = "false", + category = "strategy", + help = "Periodically (every 3 seconds) poll system CPU load and available memory " + + "and allow execution of build commands if system has sufficient idle CPU and " + + "free RAM resources. By default this option is disabled, and Blaze will rely on " + + "approximation algorithms based on the total amount of available memory and number " + + "of CPU cores.") + public boolean useResourceAutoSense; + + @Option(name = "ram_utilization_factor", + defaultValue = "67", + category = "strategy", + help = "Specify what percentage of the system's RAM Blaze should try to use for its " + + "subprocesses. " + + "This option affects how many processes Blaze will try to run in parallel. " + + "If you run several Blaze builds in parallel, using a lower value for " + + "this option may avoid thrashing and thus improve overall throughput. " + + "Using a value higher than the default is NOT recommended. " + + "Note that Blaze's estimates are very coarse, so the actual RAM usage may be much " + + "higher or much lower than specified. " + + "Note also that this option does not affect the amount of memory that the Blaze " + + "server itself will use. " + + "Also, this option has no effect if --resource_autosense is enabled." + ) + public int ramUtilizationPercentage; + + @Option(name = "local_resources", + defaultValue = "null", + category = "strategy", + help = "Explicitly set amount of local resources available to Blaze. " + + "By default, Blaze will query system configuration to estimate amount of RAM (in MB) " + + "and number of CPU cores available for the locally executed build actions. It would also " + + "assume default I/O capabilities of the local workstation (1.0). This options allows to " + + "explicitly set all 3 values. Note, that if this option is used, Blaze will ignore " + + "both --ram_utilization_factor and --resource_autosense values.", + converter = ResourceSet.ResourceSetConverter.class + ) + public ResourceSet availableResources; +} |