1414
1515package com .google .devtools .build .lib .rules .objc ;
1616
17- import static com .google .devtools .build .lib .rules .objc .ObjcProvider .CC_LIBRARY ;
18- import static com .google .devtools .build .lib .rules .objc .ObjcProvider .FORCE_LOAD_LIBRARY ;
19- import static com .google .devtools .build .lib .rules .objc .ObjcProvider .IMPORTED_LIBRARY ;
2017import static com .google .devtools .build .lib .rules .objc .ObjcProvider .J2OBJC_LIBRARY ;
21- import static com .google .devtools .build .lib .rules .objc .ObjcProvider .LIBRARY ;
2218import static com .google .devtools .build .lib .rules .objc .ObjcProvider .MODULE_MAP ;
23- import static com .google .devtools .build .lib .rules .objc .ObjcProvider .SDK_DYLIB ;
24- import static com .google .devtools .build .lib .rules .objc .ObjcProvider .SDK_FRAMEWORK ;
2519import static com .google .devtools .build .lib .rules .objc .ObjcProvider .SOURCE ;
2620import static com .google .devtools .build .lib .rules .objc .ObjcProvider .UMBRELLA_HEADER ;
27- import static com .google .devtools .build .lib .rules .objc .ObjcProvider .WEAK_SDK_FRAMEWORK ;
2821import static com .google .devtools .build .lib .rules .objc .ObjcRuleClasses .HEADERS ;
2922import static com .google .devtools .build .lib .rules .objc .ObjcRuleClasses .OBJECT_FILE_SOURCES ;
3023
31- import com .google .common .base .Function ;
3224import com .google .common .base .Optional ;
3325import com .google .common .base .Preconditions ;
3426import com .google .common .collect .ImmutableList ;
3931import com .google .devtools .build .lib .analysis .TransitiveInfoCollection ;
4032import com .google .devtools .build .lib .analysis .config .BuildConfigurationValue ;
4133import com .google .devtools .build .lib .collect .nestedset .NestedSet ;
42- import com .google .devtools .build .lib .collect .nestedset .NestedSetBuilder ;
43- import com .google .devtools .build .lib .packages .BuiltinProvider ;
44- import com .google .devtools .build .lib .packages .Info ;
4534import com .google .devtools .build .lib .rules .apple .AppleToolchain ;
4635import com .google .devtools .build .lib .rules .cpp .CcCompilationContext ;
4736import com .google .devtools .build .lib .rules .cpp .CcInfo ;
4837import com .google .devtools .build .lib .rules .cpp .CcLinkingContext ;
4938import com .google .devtools .build .lib .rules .cpp .CppModuleMap ;
50- import com .google .devtools .build .lib .rules .cpp .LibraryToLink ;
5139import com .google .devtools .build .lib .util .FileType ;
5240import com .google .devtools .build .lib .vfs .PathFragment ;
5341import com .google .errorprone .annotations .CanIgnoreReturnValue ;
@@ -100,18 +88,12 @@ static class Builder {
10088 private Iterable <ObjcProvider > objcProviders = ImmutableList .of ();
10189 private Iterable <PathFragment > includes = ImmutableList .of ();
10290 private IntermediateArtifacts intermediateArtifacts ;
103- private boolean alwayslink ;
10491 private boolean hasModuleMap ;
105- private Iterable <Artifact > extraImportLibraries = ImmutableList .of ();
10692 private final List <CcCompilationContext > ccCompilationContexts = new ArrayList <>();
10793 private final List <CcLinkingContext > ccLinkingContexts = new ArrayList <>();
10894 private final List <CcCompilationContext > directCCompilationContexts = new ArrayList <>();
10995 private final List <CcCompilationContext > implementationCcCompilationContexts =
11096 new ArrayList <>();
111- // List of CcLinkingContext to be merged into ObjcProvider, to be done for deps that don't have
112- // ObjcProviders.
113- // TODO(b/171413861): remove after objc link info migration.
114- private final List <CcLinkingContext > ccLinkingContextsForMerging = new ArrayList <>();
11597
11698 private static final ImmutableSet <String > J2OBJC_SUPPORTED_RULES =
11799 ImmutableSet .of ("java_import" , "java_library" , "java_proto_library" , "proto_library" );
@@ -198,15 +180,14 @@ Builder addDeps(List<? extends TransitiveInfoCollection> deps) {
198180 ImmutableList .Builder <CcInfo > ccInfos = ImmutableList .builder ();
199181
200182 for (TransitiveInfoCollection dep : deps ) {
201- if ( dep .get (ObjcProvider .STARLARK_CONSTRUCTOR ) != null ) {
202- addAnyProviders ( objcProviders , dep , ObjcProvider . STARLARK_CONSTRUCTOR );
203- } else {
204- // We only use CcInfo's linking info if there is no ObjcProvider. This is required so
205- // that objc_library archives do not get treated as if they are from cc targets.
206- addAnyContexts (
207- ccLinkingContextsForMerging , dep , CcInfo . PROVIDER , CcInfo :: getCcLinkingContext );
183+ ObjcProvider objcProvider = dep .get (ObjcProvider .STARLARK_CONSTRUCTOR );
184+ if ( objcProvider != null ) {
185+ objcProviders . add ( objcProvider );
186+ }
187+ CcInfo ccInfo = dep . get ( CcInfo . PROVIDER );
188+ if ( ccInfo != null ) {
189+ ccInfos . add ( ccInfo );
208190 }
209- addAnyProviders (ccInfos , dep , CcInfo .PROVIDER );
210191 }
211192
212193 addObjcProviders (objcProviders .build ());
@@ -215,31 +196,6 @@ Builder addDeps(List<? extends TransitiveInfoCollection> deps) {
215196 return this ;
216197 }
217198
218- @ CanIgnoreReturnValue
219- private static <T extends Info > ImmutableList .Builder <T > addAnyProviders (
220- ImmutableList .Builder <T > listBuilder ,
221- TransitiveInfoCollection collection ,
222- BuiltinProvider <T > providerClass ) {
223- T provider = collection .get (providerClass );
224- if (provider != null ) {
225- listBuilder .add (provider );
226- }
227- return listBuilder ;
228- }
229-
230- @ CanIgnoreReturnValue
231- private static <T extends Info , U > List <U > addAnyContexts (
232- List <U > list ,
233- TransitiveInfoCollection collection ,
234- BuiltinProvider <T > providerClass ,
235- Function <T , U > getContext ) {
236- T provider = collection .get (providerClass );
237- if (provider != null ) {
238- list .add (getContext .apply (provider ));
239- }
240- return list ;
241- }
242-
243199 /**
244200 * Add providers which will be exposed both to the declaring rule and to any dependers on the
245201 * declaring rule.
@@ -272,12 +228,6 @@ Builder setIntermediateArtifacts(IntermediateArtifacts intermediateArtifacts) {
272228 return this ;
273229 }
274230
275- @ CanIgnoreReturnValue
276- Builder setAlwayslink (boolean alwayslink ) {
277- this .alwayslink = alwayslink ;
278- return this ;
279- }
280-
281231 /**
282232 * Specifies that this target has a clang module map. This should be called if this target
283233 * compiles sources or exposes headers for other targets to use. Note that this does not add the
@@ -299,16 +249,13 @@ ObjcCommon build() {
299249 ImmutableList .copyOf (this .directCCompilationContexts );
300250 ImmutableList <CcCompilationContext > implementationCcCompilationContexts =
301251 ImmutableList .copyOf (this .implementationCcCompilationContexts );
302- ImmutableList <CcLinkingContext > ccLinkingContextsForMerging =
303- ImmutableList .copyOf (this .ccLinkingContextsForMerging );
304252
305253 ObjcCompilationContext .Builder objcCompilationContextBuilder =
306254 ObjcCompilationContext .builder ();
307255
308256 ObjcProvider .Builder objcProvider = new ObjcProvider .Builder ();
309257
310258 objcProvider
311- .addAll (IMPORTED_LIBRARY , extraImportLibraries )
312259 .addTransitiveAndPropagate (objcProviders );
313260
314261 objcCompilationContextBuilder
@@ -320,24 +267,12 @@ ObjcCommon build() {
320267 .addCcCompilationContexts (ccCompilationContexts )
321268 .addImplementationCcCompilationContexts (implementationCcCompilationContexts );
322269
323- for (CcLinkingContext ccLinkingContext : ccLinkingContextsForMerging ) {
324- objcProvider .addTransitiveAndPropagate (
325- CC_LIBRARY ,
326- NestedSetBuilder .<LibraryToLink >linkOrder ()
327- .addTransitive (ccLinkingContext .getLibraries ())
328- .build ());
329- }
330-
331270 if (compilationAttributes .isPresent ()) {
332271 CompilationAttributes attributes = compilationAttributes .get ();
333272 PathFragment usrIncludeDir = PathFragment .create (AppleToolchain .sdkDir () + "/usr/include/" );
334273 Iterable <PathFragment > sdkIncludes =
335274 Iterables .transform (
336275 attributes .sdkIncludes ().toList (), (p ) -> usrIncludeDir .getRelative (p ));
337- objcProvider
338- .addAll (SDK_FRAMEWORK , attributes .sdkFrameworks ())
339- .addAll (WEAK_SDK_FRAMEWORK , attributes .weakSdkFrameworks ())
340- .addAll (SDK_DYLIB , attributes .sdkDylibs ());
341276 objcCompilationContextBuilder
342277 .addPublicHeaders (filterFileset (attributes .hdrs ().toList ()))
343278 .addPublicTextualHeaders (filterFileset (attributes .textualHdrs ().toList ()))
@@ -356,7 +291,6 @@ ObjcCommon build() {
356291 FileType .except (artifacts .getSrcs (), OBJECT_FILE_SOURCES ),
357292 artifacts .getNonArcSrcs ());
358293 objcProvider
359- .addAll (LIBRARY , artifacts .getArchive ().asSet ())
360294 .addAll (SOURCE , allSources )
361295 .addAllDirect (SOURCE , allSources );
362296 objcCompilationContextBuilder .addPublicHeaders (
@@ -370,17 +304,6 @@ ObjcCommon build() {
370304 }
371305 }
372306
373- if (alwayslink ) {
374- for (CompilationArtifacts artifacts : compilationArtifacts .asSet ()) {
375- for (Artifact archive : artifacts .getArchive ().asSet ()) {
376- objcProvider .add (FORCE_LOAD_LIBRARY , archive );
377- }
378- }
379- for (Artifact archive : extraImportLibraries ) {
380- objcProvider .add (FORCE_LOAD_LIBRARY , archive );
381- }
382- }
383-
384307 if (hasModuleMap ) {
385308 CppModuleMap moduleMap = intermediateArtifacts .swiftModuleMap ();
386309 Optional <Artifact > umbrellaHeader = moduleMap .getUmbrellaHeader ();
0 commit comments