diff options
author | mstaib <mstaib@google.com> | 2017-09-14 20:47:31 +0200 |
---|---|---|
committer | Philipp Wollermann <philwo@google.com> | 2017-09-15 11:28:15 +0200 |
commit | d9b141def7aa7737dc09d5c490222c101630df77 (patch) | |
tree | 898faa9945a766ffc8534c8a4fbcd1c25aecb91f /src/test/java/com/google/devtools/build/lib/analysis/util | |
parent | dc4dddf7bd2b9963c4d181de75c0809657fb5d4b (diff) |
Use top-level targets' configurations for convenience symlinks.
This adds a new flag, --use_top_level_targets_for_symlinks.
Configuration-specific convenience symlinks (i.e., (prefix)bin,
(prefix)genfiles, (prefix)testlogs) previously pointed at the one top-level
target configuration. If there were multiple top-level target configurations,
which could only happen when --experimental_multi_cpu was used, then no symlinks
would be created, though they would not be deleted either.
With the flag on, the output directories of the configurations actually used by
the top-level targets (after rule class transitions etc.) are compared. If all
targets with non-null configurations have the same configuration (or, more
specifically, if all targets with non-null configurations have configurations
with the same output directory), then a symlink is created pointing at it.
Otherwise, the symlink is deleted, to avoid confusion with stale symlinks from
old builds.
Known changes in behavior WITHOUT the flag turned on:
* In the --experimental_multi_cpu case, non-configuration-specific
convenience symlinks (i.e., (prefix)(workspace) and (prefix)out) will always
be created, even though they previously wouldn't have been created at all in
this case. (should be harmless)
* In the --experimental_multi_cpu case, configuration-specific convenience
symlinks will be created if all configs have the same output directory.
(should be safe, or specifically, should never happen because multi-cpu
would necessarily change the output path, but shouldn't hurt anything even if
it did)
* In the --experimental_multi_cpu case, configuration-based convenience
symlinks will be deleted if some configs have a different output directory.
(slightly more noticeable since that will be every build using
experimental_multi_cpu, but then, it is experimental)
RELNOTES: None.
PiperOrigin-RevId: 168720843
Diffstat (limited to 'src/test/java/com/google/devtools/build/lib/analysis/util')
-rw-r--r-- | src/test/java/com/google/devtools/build/lib/analysis/util/MockConfiguredTargetFactory.java | 25 |
1 files changed, 16 insertions, 9 deletions
diff --git a/src/test/java/com/google/devtools/build/lib/analysis/util/MockConfiguredTargetFactory.java b/src/test/java/com/google/devtools/build/lib/analysis/util/MockConfiguredTargetFactory.java index 5b170b80b9..bcc286bd38 100644 --- a/src/test/java/com/google/devtools/build/lib/analysis/util/MockConfiguredTargetFactory.java +++ b/src/test/java/com/google/devtools/build/lib/analysis/util/MockConfiguredTargetFactory.java @@ -13,6 +13,7 @@ // limitations under the License. package com.google.devtools.build.lib.analysis.util; +import com.google.common.collect.ImmutableList; import com.google.devtools.build.lib.actions.Artifact; import com.google.devtools.build.lib.analysis.ConfiguredTarget; import com.google.devtools.build.lib.analysis.RuleConfiguredTargetBuilder; @@ -20,20 +21,26 @@ import com.google.devtools.build.lib.analysis.RuleConfiguredTargetFactory; import com.google.devtools.build.lib.analysis.RuleContext; import com.google.devtools.build.lib.analysis.Runfiles; import com.google.devtools.build.lib.analysis.RunfilesProvider; +import com.google.devtools.build.lib.analysis.actions.FileWriteAction; +import com.google.devtools.build.lib.collect.nestedset.NestedSet; import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder; import com.google.devtools.build.lib.collect.nestedset.Order; -/** - * A simple rule configured target factory for custom test rules. - */ +/** A simple rule configured target factory for custom test rules. */ public class MockConfiguredTargetFactory implements RuleConfiguredTargetFactory { @Override public ConfiguredTarget create(RuleContext ruleContext) throws InterruptedException { - return - new RuleConfiguredTargetBuilder(ruleContext) - .setFilesToBuild(NestedSetBuilder.<Artifact>create(Order.STABLE_ORDER)) - .setRunfilesSupport(null, null) - .add(RunfilesProvider.class, RunfilesProvider.simple(Runfiles.EMPTY)) - .build(); + NestedSet<Artifact> filesToBuild = + NestedSetBuilder.wrap(Order.STABLE_ORDER, ruleContext.getOutputArtifacts()); + for (Artifact artifact : ruleContext.getOutputArtifacts()) { + ruleContext.registerAction( + FileWriteAction.createEmptyWithInputs( + ruleContext.getActionOwner(), ImmutableList.of(), artifact)); + } + return new RuleConfiguredTargetBuilder(ruleContext) + .setFilesToBuild(filesToBuild) + .setRunfilesSupport(null, null) + .add(RunfilesProvider.class, RunfilesProvider.simple(Runfiles.EMPTY)) + .build(); } } |