diff options
author | 2017-05-04 16:57:07 +0200 | |
---|---|---|
committer | 2017-05-04 17:01:09 +0200 | |
commit | 9547eeb45854fc194aad20495d202c11f8e96b84 (patch) | |
tree | a75d141e506f152f80c587bfc108e0f5766f69d2 /src/main/java/com/google/devtools/build | |
parent | db13625aa123cd0b217fd70ba840b3685ffe0ecc (diff) |
Add patch transitions for DATA -> TARGET and LIPO_COLLECTOR -> TARGET.
EnableLipoTransition provides the dynamic equivalent for LIPO_ON_DEMAND.
ContextCollectorOwnerTransition provides the ability to get the "owner"
configuration from the LIPO collector configuration.
PiperOrigin-RevId: 155079187
Diffstat (limited to 'src/main/java/com/google/devtools/build')
2 files changed, 113 insertions, 0 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/transitions/ContextCollectorOwnerTransition.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/transitions/ContextCollectorOwnerTransition.java new file mode 100644 index 0000000000..9b215e960d --- /dev/null +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/transitions/ContextCollectorOwnerTransition.java @@ -0,0 +1,58 @@ +// Copyright 2017 The Bazel Authors. 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.rules.cpp.transitions; + +import com.google.devtools.build.lib.analysis.config.BuildConfiguration; +import com.google.devtools.build.lib.analysis.config.BuildOptions; +import com.google.devtools.build.lib.analysis.config.PatchTransition; +import com.google.devtools.build.lib.rules.cpp.CppOptions; +import com.google.devtools.build.lib.rules.cpp.CppOptions.LipoConfigurationState; + +/** + * Configuration transition that creates the "artifact owner" configuration from the LIPO + * context collector configuration. + * + * <p>The context collector creates C++ output artifacts but doesn't create the actions that + * generate those artifacts (this is what {@link BuildConfiguration#isActionsEnabled()} means). + * Those actions are the responsibility of the target configuration. This transition produces that + * config so artifacts created by the context collector can be associated with the the right + * "owner". Also see {@link BuildConfiguration#getArtifactOwnerConfiguration()}. + * + * <p>This is a no-op for all configurations but the context collector. + */ +public class ContextCollectorOwnerTransition implements PatchTransition { + public static final ContextCollectorOwnerTransition INSTANCE = + new ContextCollectorOwnerTransition(); + + @Override + public BuildOptions apply(BuildOptions options) { + // If this target and its transitive closure don't have C++ options, there's no context + // collector configuration to change. + if (!options.contains(CppOptions.class)) { + return options; + } + if (!options.get(CppOptions.class).isLipoContextCollector()) { + return options; + } + BuildOptions ownerOptions = options.clone(); + ownerOptions.get(CppOptions.class).lipoConfigurationState = LipoConfigurationState.APPLY_LIPO; + return ownerOptions; + } + + @Override + public boolean defaultsToSelf() { + return false; + } +} diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/transitions/EnableLipoTransition.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/transitions/EnableLipoTransition.java new file mode 100644 index 0000000000..3aacb5dd54 --- /dev/null +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/transitions/EnableLipoTransition.java @@ -0,0 +1,55 @@ +// Copyright 2017 The Bazel Authors. 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.rules.cpp.transitions; + +import com.google.devtools.build.lib.analysis.config.BuildOptions; +import com.google.devtools.build.lib.analysis.config.PatchTransition; +import com.google.devtools.build.lib.cmdline.Label; +import com.google.devtools.build.lib.rules.cpp.CppOptions; +import com.google.devtools.build.lib.rules.cpp.CppOptions.LipoConfigurationState; + +/** + * Configuration transition that turns on LIPO/FDO settings for configurations that have them + * disabled. + */ +public class EnableLipoTransition implements PatchTransition { + private final Label ruleLabel; + + /** + * Creates a new transition that only triggers on the given rule. This can be used for + * restricting this transition to the LIPO context binary. + */ + public EnableLipoTransition(Label ruleLabel) { + this.ruleLabel = ruleLabel; + } + + @Override + public BuildOptions apply(BuildOptions options) { + CppOptions cppOptions = options.get(CppOptions.class); + if (!cppOptions.isDataConfigurationForLipoOptimization() + || !ruleLabel.equals(cppOptions.getLipoContextForBuild())) { + return options; + } + BuildOptions lipoEnabledOptions = options.clone(); + lipoEnabledOptions.get(CppOptions.class).lipoConfigurationState = + LipoConfigurationState.APPLY_LIPO; + return lipoEnabledOptions; + } + + @Override + public boolean defaultsToSelf() { + return false; + } +} |