Expose language in C++ compile API
This is currently guarded by a flag. It is meant to be used only by native
rules while re-writing them to Starlark, there are no plans to make any of this
methods public.
RELNOTES:none
PiperOrigin-RevId: 354305518
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/cpp/BazelCcModule.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/cpp/BazelCcModule.java
index 672ded4..91b2089 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/cpp/BazelCcModule.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/cpp/BazelCcModule.java
@@ -106,6 +106,7 @@
Object codeCoverageEnabled,
Object hdrsCheckingMode,
Object variablesExtension,
+ Object language,
StarlarkThread thread)
throws EvalException, InterruptedException {
return compile(
@@ -141,6 +142,7 @@
codeCoverageEnabled,
hdrsCheckingMode,
variablesExtension,
+ language,
thread);
}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcModule.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcModule.java
index 60f4a4e..63d5115 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcModule.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcModule.java
@@ -47,6 +47,7 @@
import com.google.devtools.build.lib.packages.TargetUtils;
import com.google.devtools.build.lib.packages.semantics.BuildLanguageOptions;
import com.google.devtools.build.lib.rules.cpp.CcCompilationHelper.CompilationInfo;
+import com.google.devtools.build.lib.rules.cpp.CcCompilationHelper.SourceCategory;
import com.google.devtools.build.lib.rules.cpp.CcLinkingContext.LinkOptions;
import com.google.devtools.build.lib.rules.cpp.CcToolchainFeatures.ActionConfig;
import com.google.devtools.build.lib.rules.cpp.CcToolchainFeatures.ArtifactNamePattern;
@@ -1923,6 +1924,7 @@
Object codeCoverageEnabledObject,
Object hdrsCheckingModeObject,
Object variablesExtension,
+ Object languageObject,
StarlarkThread thread)
throws EvalException, InterruptedException {
if (checkObjectsBound(
@@ -1934,7 +1936,8 @@
doNotGenerateModuleMapObject,
codeCoverageEnabledObject,
hdrsCheckingModeObject,
- variablesExtension)) {
+ variablesExtension,
+ languageObject)) {
CcModule.checkPrivateStarlarkificationAllowlist(thread);
}
@@ -1999,6 +2002,17 @@
throw Starlark.errorf("Either PIC or no PIC actions have to be created.");
}
+ String language = convertFromNoneable(languageObject, Language.CPP.getRepresentation());
+ validateLanguage(language);
+ SourceCategory sourceCategory;
+ if (language.equals(Language.CPP.getRepresentation())) {
+ sourceCategory = SourceCategory.CC;
+ } else if (language.equals(Language.OBJC.getRepresentation())
+ || language.equals(Language.OBJCPP.getRepresentation())) {
+ sourceCategory = SourceCategory.CC_AND_OBJC;
+ } else {
+ throw Starlark.errorf("Language '%s' is not supported", language);
+ }
CcCommon common = new CcCommon(actions.getRuleContext(), ccToolchainProvider);
CcCompilationHelper helper =
new CcCompilationHelper(
@@ -2008,8 +2022,10 @@
grepIncludes,
getSemantics(),
featureConfiguration.getFeatureConfiguration(),
+ sourceCategory,
ccToolchainProvider,
fdoContext,
+ actions.getActionConstructionContext().getConfiguration(),
TargetUtils.getExecutionInfo(
actions.getRuleContext().getRule(),
actions.getRuleContext().isAllowTagsPropagation()),
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/BazelCcModuleApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/BazelCcModuleApi.java
index 21bef87..a3ff2ba 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/BazelCcModuleApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/BazelCcModuleApi.java
@@ -296,6 +296,13 @@
documented = false,
allowedTypes = {@ParamType(type = Dict.class)},
defaultValue = "unbound"),
+ @Param(
+ name = "language",
+ positional = false,
+ named = true,
+ documented = false,
+ allowedTypes = {@ParamType(type = String.class)},
+ defaultValue = "unbound"),
})
Tuple compile(
StarlarkActionFactoryT starlarkActionFactoryApi,
@@ -327,6 +334,7 @@
Object codeCoverageEnabled,
Object hdrsCheckingMode,
Object variablesExtension,
+ Object language,
StarlarkThread thread)
throws EvalException, InterruptedException;
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/cpp/FakeCcModule.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/cpp/FakeCcModule.java
index e0df56f..8e70880 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/cpp/FakeCcModule.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/cpp/FakeCcModule.java
@@ -294,6 +294,7 @@
Object codeCoverageEnabled,
Object hdrsCheckingMode,
Object variablesExtension,
+ Object language,
StarlarkThread thread)
throws EvalException, InterruptedException {
return null;
diff --git a/src/test/java/com/google/devtools/build/lib/rules/cpp/StarlarkCcCommonTest.java b/src/test/java/com/google/devtools/build/lib/rules/cpp/StarlarkCcCommonTest.java
index f4ce422..e996cf9 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/cpp/StarlarkCcCommonTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/cpp/StarlarkCcCommonTest.java
@@ -6834,7 +6834,8 @@
compileCall + "propagate_module_map_to_compile_action = True)",
compileCall + "do_not_generate_module_map = True)",
compileCall + "code_coverage_enabled = True)",
- compileCall + "hdrs_checking_mode = 'strict')");
+ compileCall + "hdrs_checking_mode = 'strict')",
+ compileCall + "language = 'c++')");
scratch.overwriteFile(
"a/BUILD",
"load(':rule.bzl', 'crule')",