diff --git a/src/main/java/com/google/devtools/build/lib/packages/semantics/BuildLanguageOptions.java b/src/main/java/com/google/devtools/build/lib/packages/semantics/BuildLanguageOptions.java index b15b305496bb3c..b69ce4ec5bd4cb 100644 --- a/src/main/java/com/google/devtools/build/lib/packages/semantics/BuildLanguageOptions.java +++ b/src/main/java/com/google/devtools/build/lib/packages/semantics/BuildLanguageOptions.java @@ -679,6 +679,17 @@ public final class BuildLanguageOptions extends OptionsBase { + " specified through features configuration.") public boolean experimentalGetFixedConfiguredEnvironment; + @Option( + name = "incompatible_disable_objc_library_transition", + defaultValue = "false", + documentationCategory = OptionDocumentationCategory.STARLARK_SEMANTICS, + effectTags = {OptionEffectTag.BUILD_FILE_SEMANTICS}, + metadataTags = {OptionMetadataTag.INCOMPATIBLE_CHANGE}, + help = + "Disable objc_library's custom transition and inherit " + + "from the top level target instead") + public boolean incompatibleDisableObjcLibraryTransition; + /** * An interner to reduce the number of StarlarkSemantics instances. A single Blaze instance should * never accumulate a large number of these and being able to shortcut on object identity makes a @@ -772,6 +783,9 @@ public StarlarkSemantics toStarlarkSemantics() { .setBool( EXPERIMENTAL_GET_FIXED_CONFIGURED_ACTION_ENV, experimentalGetFixedConfiguredEnvironment) + .setBool( + INCOMPATIBLE_DISABLE_OBJC_LIBRARY_TRANSITION, + incompatibleDisableObjcLibraryTransition) .build(); return INTERNER.intern(semantics); } @@ -858,6 +872,8 @@ public StarlarkSemantics toStarlarkSemantics() { "-incompatible_disable_starlark_host_transitions"; public static final String EXPERIMENTAL_GET_FIXED_CONFIGURED_ACTION_ENV = "-experimental_get_fixed_configured_action_env"; + public static final String INCOMPATIBLE_DISABLE_OBJC_LIBRARY_TRANSITION = + "-incompatible_disable_objc_library_transition"; // non-booleans public static final StarlarkSemantics.Key EXPERIMENTAL_BUILTINS_BZL_PATH = 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 6b89e238a84cfe..c684272931dd2f 100755 --- 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 @@ -1086,6 +1086,12 @@ public boolean checkExperimentalCcSharedLibrary(StarlarkThread thread) throws Ev return thread.getSemantics().getBool(BuildLanguageOptions.EXPERIMENTAL_CC_SHARED_LIBRARY); } + @Override + public boolean getIncompatibleDisableObjcLibraryTransition(StarlarkThread thread) throws EvalException { + isCalledFromStarlarkCcCommon(thread); + return thread.getSemantics().getBool(BuildLanguageOptions.INCOMPATIBLE_DISABLE_OBJC_LIBRARY_TRANSITION); + } + @Override public CcLinkingContext createCcLinkingInfo( Object linkerInputs, diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/CcModuleApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/CcModuleApi.java index df67b8e9ce5a58..43b55489290f29 100755 --- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/CcModuleApi.java +++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/CcModuleApi.java @@ -1102,6 +1102,12 @@ LinkerInputT createLinkerInput( documented = false) boolean checkExperimentalCcSharedLibrary(StarlarkThread thread) throws EvalException; + @StarlarkMethod( + name = "incompatible_disable_objc_library_transition", + useStarlarkThread = true, + documented = false) + boolean getIncompatibleDisableObjcLibraryTransition(StarlarkThread thread) throws EvalException; + @StarlarkMethod( name = "create_linking_context", doc = "Creates a LinkingContext.", diff --git a/src/main/starlark/builtins_bzl/common/cc/cc_common.bzl b/src/main/starlark/builtins_bzl/common/cc/cc_common.bzl index 1b1c6a80de1236..7f45b7f4b40c8a 100644 --- a/src/main/starlark/builtins_bzl/common/cc/cc_common.bzl +++ b/src/main/starlark/builtins_bzl/common/cc/cc_common.bzl @@ -556,6 +556,10 @@ def _check_experimental_cc_shared_library(): cc_common_internal.check_private_api(allowlist = _PRIVATE_STARLARKIFICATION_ALLOWLIST) return cc_common_internal.check_experimental_cc_shared_library() +def _incompatible_disable_objc_library_transition(): + cc_common_internal.check_private_api(allowlist = _PRIVATE_STARLARKIFICATION_ALLOWLIST) + return cc_common_internal.incompatible_disable_objc_library_transition() + def _create_module_map(*, file, name, umbrella_header = None): cc_common_internal.check_private_api(allowlist = _PRIVATE_STARLARKIFICATION_ALLOWLIST) return cc_common_internal.create_module_map( @@ -839,6 +843,7 @@ cc_common = struct( merge_cc_infos = _merge_cc_infos, create_compilation_context = _create_compilation_context, legacy_cc_flags_make_variable_do_not_use = _legacy_cc_flags_make_variable_do_not_use, + incompatible_disable_objc_library_transition = _incompatible_disable_objc_library_transition, is_cc_toolchain_resolution_enabled_do_not_use = _is_cc_toolchain_resolution_enabled_do_not_use, create_cc_toolchain_config_info = _create_cc_toolchain_config_info, create_linking_context_from_compilation_outputs = _create_linking_context_from_compilation_outputs, diff --git a/src/main/starlark/builtins_bzl/common/objc/objc_library.bzl b/src/main/starlark/builtins_bzl/common/objc/objc_library.bzl index 038e7f84229c00..c42df7273d22ea 100644 --- a/src/main/starlark/builtins_bzl/common/objc/objc_library.bzl +++ b/src/main/starlark/builtins_bzl/common/objc/objc_library.bzl @@ -21,6 +21,7 @@ load("@_builtins//:common/objc/objc_common.bzl", "extensions", "objc_common") load("@_builtins//:common/objc/semantics.bzl", "semantics") load("@_builtins//:common/objc/transitions.bzl", "apple_crosstool_transition") load(":common/objc/providers.bzl", "J2ObjcEntryClassInfo", "J2ObjcMappingFileInfo") +load(":common/cc/cc_common.bzl", "cc_common") load(":common/cc/cc_info.bzl", "CcInfo") objc_internal = _builtins.internal.objc_internal @@ -133,7 +134,7 @@ objc_library = rule( common_attrs.SDK_FRAMEWORK_DEPENDER_RULE, ), fragments = ["objc", "apple", "cpp"], - cfg = apple_crosstool_transition, + cfg = None if cc_common.incompatible_disable_objc_library_transition() else apple_crosstool_transition, toolchains = cc_helper.use_cpp_toolchain(), incompatible_use_toolchain_transition = True, ) diff --git a/src/test/java/com/google/devtools/build/lib/rules/objc/ObjcLibraryTest.java b/src/test/java/com/google/devtools/build/lib/rules/objc/ObjcLibraryTest.java index 975b9b20691c3e..5d67553ea2fbbc 100644 --- a/src/test/java/com/google/devtools/build/lib/rules/objc/ObjcLibraryTest.java +++ b/src/test/java/com/google/devtools/build/lib/rules/objc/ObjcLibraryTest.java @@ -99,6 +99,30 @@ public void testConfigTransitionWithTopLevelAppleConfiguration() throws Exceptio assertThat(objcObject.getExecPathString()).contains("ios_x86_64"); } + @Test + public void testNoTransition() throws Exception { + scratch.file( + "bin/BUILD", + "objc_library(", + " name = 'objc',", + " srcs = ['objc.m'],", + ")", + "cc_binary(", + " name = 'cc',", + " srcs = ['cc.cc'],", + " deps = [':objc'],", + ")"); + + setBuildLanguageOptions("--incompatible_disable_objc_library_transition"); + useConfiguration("--macos_cpus=arm64,x86_64"); + + ConfiguredTarget cc = getConfiguredTarget("//bin:cc"); + Artifact objcObject = + ActionsTestUtil.getFirstArtifactEndingWith( + actionsTestUtil().artifactClosureOf(getFilesToBuild(cc)), "objc.o"); + assertThat(objcObject.getExecPathString()).contains("k8-fastbuild"); + } + @Test public void testFilesToBuild() throws Exception { ConfiguredTarget target =