Skip to content

Commit 0f34e76

Browse files
keithcopybara-github
authored andcommitted
Add --incompatible_disable_objc_library_transition
This is a migration for bazelbuild#16870 Users who rely on the current behavior should instead wrap their library in a target from [rules_apple](https://github.com/bazelbuild/rules_apple). Fixes bazelbuild#19204 Closes bazelbuild#19256. PiperOrigin-RevId: 561253613 Change-Id: I1b1b24a08caa33e86881bfe376a525060c9887a9
1 parent 753cd45 commit 0f34e76

File tree

6 files changed

+64
-3
lines changed

6 files changed

+64
-3
lines changed

src/main/java/com/google/devtools/build/lib/packages/semantics/BuildLanguageOptions.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -690,6 +690,17 @@ public final class BuildLanguageOptions extends OptionsBase {
690690
help = "If set to true, the ObjcProvider's APIs for linking info will be removed.")
691691
public boolean incompatibleObjcProviderRemoveLinkingInfo;
692692

693+
@Option(
694+
name = "incompatible_disable_objc_library_transition",
695+
defaultValue = "false",
696+
documentationCategory = OptionDocumentationCategory.STARLARK_SEMANTICS,
697+
effectTags = {OptionEffectTag.BUILD_FILE_SEMANTICS},
698+
metadataTags = {OptionMetadataTag.INCOMPATIBLE_CHANGE},
699+
help =
700+
"Disable objc_library's custom transition and inherit "
701+
+ "from the top level target instead")
702+
public boolean incompatibleDisableObjcLibraryTransition;
703+
693704
/**
694705
* An interner to reduce the number of StarlarkSemantics instances. A single Blaze instance should
695706
* never accumulate a large number of these and being able to shortcut on object identity makes a
@@ -786,6 +797,9 @@ public StarlarkSemantics toStarlarkSemantics() {
786797
.setBool(
787798
INCOMPATIBLE_OBJC_PROVIDER_REMOVE_LINKING_INFO,
788799
incompatibleObjcProviderRemoveLinkingInfo)
800+
.setBool(
801+
INCOMPATIBLE_DISABLE_OBJC_LIBRARY_TRANSITION,
802+
incompatibleDisableObjcLibraryTransition)
789803
.build();
790804
return INTERNER.intern(semantics);
791805
}
@@ -874,6 +888,8 @@ public StarlarkSemantics toStarlarkSemantics() {
874888
"+experimental_merge_fixed_and_default_shell_env";
875889
public static final String INCOMPATIBLE_OBJC_PROVIDER_REMOVE_LINKING_INFO =
876890
"-incompatible_objc_provider_remove_linking_info";
891+
public static final String INCOMPATIBLE_DISABLE_OBJC_LIBRARY_TRANSITION =
892+
"-incompatible_disable_objc_library_transition";
877893

878894
// non-booleans
879895
public static final StarlarkSemantics.Key<String> EXPERIMENTAL_BUILTINS_BZL_PATH =

src/main/java/com/google/devtools/build/lib/rules/cpp/CcModule.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1136,6 +1136,15 @@ public boolean checkExperimentalCcSharedLibrary(StarlarkThread thread) throws Ev
11361136
return thread.getSemantics().getBool(BuildLanguageOptions.EXPERIMENTAL_CC_SHARED_LIBRARY);
11371137
}
11381138

1139+
@Override
1140+
public boolean getIncompatibleDisableObjcLibraryTransition(StarlarkThread thread)
1141+
throws EvalException {
1142+
isCalledFromStarlarkCcCommon(thread);
1143+
return thread
1144+
.getSemantics()
1145+
.getBool(BuildLanguageOptions.INCOMPATIBLE_DISABLE_OBJC_LIBRARY_TRANSITION);
1146+
}
1147+
11391148
@Override
11401149
public CcLinkingContext createCcLinkingInfo(
11411150
Object linkerInputs,

src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/CcModuleApi.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1102,6 +1102,12 @@ LinkerInputT createLinkerInput(
11021102
documented = false)
11031103
boolean checkExperimentalCcSharedLibrary(StarlarkThread thread) throws EvalException;
11041104

1105+
@StarlarkMethod(
1106+
name = "incompatible_disable_objc_library_transition",
1107+
useStarlarkThread = true,
1108+
documented = false)
1109+
boolean getIncompatibleDisableObjcLibraryTransition(StarlarkThread thread) throws EvalException;
1110+
11051111
@StarlarkMethod(
11061112
name = "create_linking_context",
11071113
doc = "Creates a <code>LinkingContext</code>.",

src/main/starlark/builtins_bzl/common/cc/cc_common.bzl

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -631,6 +631,10 @@ def _check_experimental_cc_shared_library():
631631
cc_common_internal.check_private_api(allowlist = _PRIVATE_STARLARKIFICATION_ALLOWLIST)
632632
return cc_common_internal.check_experimental_cc_shared_library()
633633

634+
def _incompatible_disable_objc_library_transition():
635+
cc_common_internal.check_private_api(allowlist = _PRIVATE_STARLARKIFICATION_ALLOWLIST)
636+
return cc_common_internal.incompatible_disable_objc_library_transition()
637+
634638
def _create_module_map(*, file, name, umbrella_header = None):
635639
cc_common_internal.check_private_api(allowlist = _PRIVATE_STARLARKIFICATION_ALLOWLIST)
636640
return cc_common_internal.create_module_map(
@@ -914,6 +918,7 @@ cc_common = struct(
914918
merge_cc_infos = _merge_cc_infos,
915919
create_compilation_context = _create_compilation_context,
916920
legacy_cc_flags_make_variable_do_not_use = _legacy_cc_flags_make_variable_do_not_use,
921+
incompatible_disable_objc_library_transition = _incompatible_disable_objc_library_transition,
917922
is_cc_toolchain_resolution_enabled_do_not_use = _is_cc_toolchain_resolution_enabled_do_not_use,
918923
create_cc_toolchain_config_info = _create_cc_toolchain_config_info,
919924
create_linking_context_from_compilation_outputs = _create_linking_context_from_compilation_outputs,

src/main/starlark/builtins_bzl/common/objc/objc_library.bzl

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,14 @@
1515
"""objc_library Starlark implementation replacing native"""
1616

1717
load("@_builtins//:common/cc/cc_helper.bzl", "cc_helper")
18-
load("@_builtins//:common/objc/compilation_support.bzl", "compilation_support")
1918
load("@_builtins//:common/objc/attrs.bzl", "common_attrs")
19+
load("@_builtins//:common/objc/compilation_support.bzl", "compilation_support")
2020
load("@_builtins//:common/objc/objc_common.bzl", "extensions", "objc_common")
2121
load("@_builtins//:common/objc/semantics.bzl", "semantics")
2222
load("@_builtins//:common/objc/transitions.bzl", "apple_crosstool_transition")
23-
load(":common/objc/providers.bzl", "J2ObjcEntryClassInfo", "J2ObjcMappingFileInfo")
23+
load(":common/cc/cc_common.bzl", "cc_common")
2424
load(":common/cc/cc_info.bzl", "CcInfo")
25+
load(":common/objc/providers.bzl", "J2ObjcEntryClassInfo", "J2ObjcMappingFileInfo")
2526

2627
objc_internal = _builtins.internal.objc_internal
2728
coverage_common = _builtins.toplevel.coverage_common
@@ -133,6 +134,6 @@ objc_library = rule(
133134
common_attrs.SDK_FRAMEWORK_DEPENDER_RULE,
134135
),
135136
fragments = ["objc", "apple", "cpp"],
136-
cfg = apple_crosstool_transition,
137+
cfg = None if cc_common.incompatible_disable_objc_library_transition() else apple_crosstool_transition,
137138
toolchains = cc_helper.use_cpp_toolchain(),
138139
)

src/test/java/com/google/devtools/build/lib/rules/objc/ObjcLibraryTest.java

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,30 @@ public void testConfigTransitionWithTopLevelAppleConfiguration() throws Exceptio
9898
assertThat(objcObject.getExecPathString()).contains("ios_x86_64");
9999
}
100100

101+
@Test
102+
public void testNoTransition() throws Exception {
103+
scratch.file(
104+
"bin/BUILD",
105+
"objc_library(",
106+
" name = 'objc',",
107+
" srcs = ['objc.m'],",
108+
")",
109+
"cc_binary(",
110+
" name = 'cc',",
111+
" srcs = ['cc.cc'],",
112+
" deps = [':objc'],",
113+
")");
114+
115+
setBuildLanguageOptions("--incompatible_disable_objc_library_transition");
116+
useConfiguration("--macos_cpus=arm64,x86_64");
117+
118+
ConfiguredTarget cc = getConfiguredTarget("//bin:cc");
119+
Artifact objcObject =
120+
ActionsTestUtil.getFirstArtifactEndingWith(
121+
actionsTestUtil().artifactClosureOf(getFilesToBuild(cc)), "objc.o");
122+
assertThat(objcObject.getExecPathString()).contains("k8-fastbuild");
123+
}
124+
101125
@Test
102126
public void testFilesToBuild() throws Exception {
103127
ConfiguredTarget target =

0 commit comments

Comments
 (0)