aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/rules/cpp/CppRuleClasses.java
diff options
context:
space:
mode:
authorGravatar Lukacs Berki <lberki@google.com>2016-06-10 13:25:26 +0000
committerGravatar Dmitry Lomov <dslomov@google.com>2016-06-10 13:41:30 +0000
commit1eaa13a3773b8f398b7e98160a07154b6e3bad94 (patch)
tree20b475ae4a416f502493dcf63c5c01cf07a90e2d /src/main/java/com/google/devtools/build/lib/rules/cpp/CppRuleClasses.java
parent2eda8c13243c4603fbc8d2b6865d672cde4e2024 (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.java49
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,