Add native options for cc_shared_library rule.
PiperOrigin-RevId: 393094082
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppConfiguration.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppConfiguration.java
index 1e8ce65..2f59265 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppConfiguration.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppConfiguration.java
@@ -457,6 +457,18 @@
return cppOptions.cppCompiler;
}
+ public boolean experimentalLinkStaticLibrariesOnce() {
+ return cppOptions.experimentalLinkStaticLibrariesOnce;
+ }
+
+ public boolean experimentalEnableTargetExportCheck() {
+ return cppOptions.experimentalEnableTargetExportCheck;
+ }
+
+ public boolean experimentalCcSharedLibraryDebug() {
+ return cppOptions.experimentalCcSharedLibraryDebug;
+ }
+
public boolean legacyWholeArchive() {
return cppOptions.legacyWholeArchive;
}
@@ -862,6 +874,26 @@
return fissionIsActiveForCurrentCompilationMode();
}
+ @Override
+ public boolean getExperimentalLinkStaticLibrariesOnce(StarlarkThread thread)
+ throws EvalException {
+ CcModule.checkPrivateStarlarkificationAllowlist(thread);
+ return experimentalLinkStaticLibrariesOnce();
+ }
+
+ @Override
+ public boolean getExperimentalEnableTargetExportCheck(StarlarkThread thread)
+ throws EvalException {
+ CcModule.checkPrivateStarlarkificationAllowlist(thread);
+ return experimentalEnableTargetExportCheck();
+ }
+
+ @Override
+ public boolean getExperimentalCcSharedLibraryDebug(StarlarkThread thread) throws EvalException {
+ CcModule.checkPrivateStarlarkificationAllowlist(thread);
+ return experimentalCcSharedLibraryDebug();
+ }
+
/**
* Returns the bitcode mode to use for compilation.
*
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppOptions.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppOptions.java
index ddf14eb..53c1905 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppOptions.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppOptions.java
@@ -1091,6 +1091,47 @@
help = "If enabled, cc_library targets can use attribute `implementation_deps`.")
public boolean experimentalCcImplementationDeps;
+ @Option(
+ name = "experimental_link_static_libraries_once",
+ defaultValue = "false",
+ documentationCategory = OptionDocumentationCategory.UNDOCUMENTED,
+ effectTags = {
+ OptionEffectTag.LOADING_AND_ANALYSIS,
+ },
+ metadataTags = {
+ OptionMetadataTag.TRIGGERED_BY_ALL_INCOMPATIBLE_CHANGES,
+ OptionMetadataTag.INCOMPATIBLE_CHANGE,
+ OptionMetadataTag.EXPERIMENTAL,
+ },
+ help =
+ "If enabled, cc_shared_library will link all libraries statically linked into it, that"
+ + " should only be linked once.")
+ public boolean experimentalLinkStaticLibrariesOnce;
+
+ @Option(
+ name = "experimental_enable_target_export_check",
+ defaultValue = "false",
+ documentationCategory = OptionDocumentationCategory.UNDOCUMENTED,
+ effectTags = {
+ OptionEffectTag.LOADING_AND_ANALYSIS,
+ },
+ metadataTags = {OptionMetadataTag.EXPERIMENTAL},
+ help =
+ "If enabled, cc_shared_library will export targets which is allowed by its `permissions`"
+ + " attribute.")
+ public boolean experimentalEnableTargetExportCheck;
+
+ @Option(
+ name = "experimental_cc_shared_library_debug",
+ defaultValue = "false",
+ documentationCategory = OptionDocumentationCategory.UNDOCUMENTED,
+ effectTags = {
+ OptionEffectTag.LOADING_AND_ANALYSIS,
+ },
+ metadataTags = {OptionMetadataTag.EXPERIMENTAL},
+ help = "If enabled, will create debug files associated with cc_shared_library.")
+ public boolean experimentalCcSharedLibraryDebug;
+
/** See {@link #targetLibcTopLabel} documentation. * */
@Override
public FragmentOptions getNormalized() {
@@ -1140,6 +1181,10 @@
coptListBuilder.add("-g0");
cxxoptListBuilder.add("-g0");
}
+ host.experimentalLinkStaticLibrariesOnce = experimentalLinkStaticLibrariesOnce;
+ host.experimentalEnableTargetExportCheck = experimentalEnableTargetExportCheck;
+ host.experimentalCcSharedLibraryDebug = experimentalCcSharedLibraryDebug;
+
host.coptList = coptListBuilder.addAll(hostCoptList).build();
host.cxxoptList = cxxoptListBuilder.addAll(hostCxxoptList).build();
host.conlyoptList = ImmutableList.copyOf(hostConlyoptList);
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/CppConfigurationApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/CppConfigurationApi.java
index 669c438..fbfc37a 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/CppConfigurationApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/CppConfigurationApi.java
@@ -33,6 +33,24 @@
extends StarlarkValue {
@StarlarkMethod(
+ name = "experimental_link_static_libraries_once",
+ documented = false,
+ useStarlarkThread = true)
+ boolean getExperimentalLinkStaticLibrariesOnce(StarlarkThread thread) throws EvalException;
+
+ @StarlarkMethod(
+ name = "experimental_enable_target_export_check",
+ documented = false,
+ useStarlarkThread = true)
+ boolean getExperimentalEnableTargetExportCheck(StarlarkThread thread) throws EvalException;
+
+ @StarlarkMethod(
+ name = "experimental_cc_shared_library_debug",
+ documented = false,
+ useStarlarkThread = true)
+ boolean getExperimentalCcSharedLibraryDebug(StarlarkThread thread) throws EvalException;
+
+ @StarlarkMethod(
name = "copts",
structField = true,
doc =