diff options
author | 2016-06-10 13:25:26 +0000 | |
---|---|---|
committer | 2016-06-10 13:41:30 +0000 | |
commit | 1eaa13a3773b8f398b7e98160a07154b6e3bad94 (patch) | |
tree | 20b475ae4a416f502493dcf63c5c01cf07a90e2d /src/main/java/com/google/devtools/build/lib/rules/cpp/CppRuleClasses.java | |
parent | 2eda8c13243c4603fbc8d2b6865d672cde4e2024 (diff) |
Use the cc_toolchain rule instead of an event bus-based hack to signal an error when the LIPO context is not a cc_binary.
RELNOTES[NEW]: LIPO context (--lipo_context) can now also be a cc_test (in addition to cc_binary)
--
MOS_MIGRATED_REVID=124555465
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/rules/cpp/CppRuleClasses.java')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/rules/cpp/CppRuleClasses.java | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppRuleClasses.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppRuleClasses.java index d8987bb8ec..7c9aa05675 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppRuleClasses.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppRuleClasses.java @@ -30,14 +30,63 @@ import static com.google.devtools.build.lib.rules.cpp.CppFileTypes.SHARED_LIBRAR import static com.google.devtools.build.lib.rules.cpp.CppFileTypes.VERSIONED_SHARED_LIBRARY; import com.google.devtools.build.lib.analysis.LanguageDependentFragment.LibraryLanguage; +import com.google.devtools.build.lib.analysis.config.BuildConfiguration; +import com.google.devtools.build.lib.cmdline.Label; +import com.google.devtools.build.lib.packages.Attribute.LateBoundLabel; +import com.google.devtools.build.lib.packages.Attribute.Transition; +import com.google.devtools.build.lib.packages.AttributeMap; import com.google.devtools.build.lib.packages.ImplicitOutputsFunction.SafeImplicitOutputsFunction; +import com.google.devtools.build.lib.packages.Rule; import com.google.devtools.build.lib.rules.test.InstrumentedFilesCollector.InstrumentationSpec; import com.google.devtools.build.lib.util.FileTypeSet; +import com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LipoMode; /** * Rule class definitions for C++ rules. */ public class CppRuleClasses { + + /** + * Implementation for the :lipo_context_collector attribute. + */ + public static final LateBoundLabel<BuildConfiguration> LIPO_CONTEXT_COLLECTOR = + new LateBoundLabel<BuildConfiguration>() { + @Override + public Label resolve(Rule rule, AttributeMap attributes, BuildConfiguration configuration) { + // This attribute connects a target to the LIPO context target configured with the + // lipo input collector configuration. + CppConfiguration cppConfiguration = configuration.getFragment(CppConfiguration.class); + return !cppConfiguration.isLipoContextCollector() + && (cppConfiguration.getLipoMode() == LipoMode.BINARY) + ? cppConfiguration.getLipoContextLabel() + : null; + } + }; + + /** + * Configuration transitions required by LIPO. + */ + public enum LipoTransition implements Transition { + /** + * LIPO context collector. + * + * <p>This configuration transition leads into a configuration that is used for collecting + * C++ compilation contexts for LIPO builds so that e.g. an include path entry required by an + * inlined function is there when the place is compiled where it is inlined at. + */ + LIPO_COLLECTOR, + + /** + * Transition used for switching back to the LIPO-optimized configuration. + */ + TARGET_CONFIG_FOR_LIPO; + + @Override + public boolean defaultsToSelf() { + return true; + } + } + // Artifacts of these types are discarded from the 'hdrs' attribute in cc rules static final FileTypeSet DISALLOWED_HDRS_FILES = FileTypeSet.of( ARCHIVE, |