aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/CompilationSupport.java20
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCommandLineOptions.java11
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/ObjcConfiguration.java7
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/ObjcRuleClasses.java20
4 files changed, 55 insertions, 3 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/CompilationSupport.java b/src/main/java/com/google/devtools/build/lib/rules/objc/CompilationSupport.java
index adad227027..36fc313b11 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/CompilationSupport.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/CompilationSupport.java
@@ -1171,6 +1171,8 @@ public abstract class CompilationSupport {
}
FilesToRunProvider headerScannerTool = getHeaderThinningToolExecutable();
+ PrerequisiteArtifacts appleSdks =
+ ruleContext.getPrerequisiteArtifacts(ObjcRuleClasses.APPLE_SDK_ATTRIBUTE, Mode.TARGET);
ListMultimap<ImmutableList<String>, ObjcHeaderThinningInfo>
objcHeaderThinningInfoByCommandLine = groupActionsByCommandLine(headerThinningInfo);
// Register a header scanning spawn action for each unique set of command line arguments
@@ -1178,8 +1180,22 @@ public abstract class CompilationSupport {
SpawnAction.Builder builder =
new SpawnAction.Builder()
.setMnemonic("ObjcHeaderScanning")
- .setExecutable(headerScannerTool);
- CustomCommandLine.Builder cmdLine = CustomCommandLine.builder();
+ .setExecutable(headerScannerTool)
+ .addInputs(appleSdks.list());
+ CustomCommandLine.Builder cmdLine =
+ CustomCommandLine.builder()
+ .add("--arch")
+ .add(appleConfiguration.getSingleArchitecture().toLowerCase())
+ .add("--platform")
+ .add(appleConfiguration.getSingleArchPlatform().getLowerCaseNameInPlist())
+ .add("--sdk_version")
+ .add(
+ appleConfiguration
+ .getSdkVersionForPlatform(appleConfiguration.getSingleArchPlatform())
+ .toStringWithMinimumComponents(2))
+ .add("--xcode_version")
+ .add(appleConfiguration.getXcodeVersion().toStringWithMinimumComponents(2))
+ .add("--");
for (ObjcHeaderThinningInfo info : objcHeaderThinningInfoByCommandLine.get(args)) {
cmdLine.addJoinPaths(
":",
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCommandLineOptions.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCommandLineOptions.java
index 15a775a4c7..71266797eb 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCommandLineOptions.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCommandLineOptions.java
@@ -305,6 +305,17 @@ public class ObjcCommandLineOptions extends FragmentOptions {
)
public Label objcHeaderScannerTool;
+ @Option(
+ name = "apple_sdk",
+ defaultValue = "null",
+ category = "undocumented",
+ converter = LabelConverter.class,
+ help =
+ "Location of target that will provide the appropriate Apple SDK for the current build "
+ + "configuration."
+ )
+ public Label appleSdk;
+
@Override
public FragmentOptions getHost(boolean fallback) {
ObjcCommandLineOptions host = (ObjcCommandLineOptions) super.getHost(fallback);
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcConfiguration.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcConfiguration.java
index ec93b71ada..da9fd874b7 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcConfiguration.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcConfiguration.java
@@ -82,6 +82,7 @@ public class ObjcConfiguration extends BuildConfiguration.Fragment {
private final HeaderDiscovery.DotdPruningMode dotdPruningPlan;
private final boolean experimentalHeaderThinning;
private final Label objcHeaderScannerTool;
+ private final Label appleSdk;
private final boolean generateXcodeProject;
ObjcConfiguration(ObjcCommandLineOptions objcOptions, BuildConfiguration.Options options,
@@ -123,6 +124,7 @@ public class ObjcConfiguration extends BuildConfiguration.Fragment {
: HeaderDiscovery.DotdPruningMode.DO_NOT_USE;
this.experimentalHeaderThinning = objcOptions.experimentalObjcHeaderThinning;
this.objcHeaderScannerTool = objcOptions.objcHeaderScannerTool;
+ this.appleSdk = objcOptions.appleSdk;
this.generateXcodeProject = objcOptions.generateXcodeProject;
}
@@ -365,6 +367,11 @@ public class ObjcConfiguration extends BuildConfiguration.Fragment {
return objcHeaderScannerTool;
}
+ /** Returns the label for the Apple SDK for current build configuration. */
+ public Label getAppleSdk() {
+ return appleSdk;
+ }
+
/**
* Returns {@code true} if an xcodegen project should be added to a target's files to build.
*/
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcRuleClasses.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcRuleClasses.java
index 80ea4c0a4d..887535b8ef 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcRuleClasses.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcRuleClasses.java
@@ -70,8 +70,10 @@ public class ObjcRuleClasses {
* Name of the attribute used for implicit dependency on the libtool wrapper.
*/
public static final String LIBTOOL_ATTRIBUTE = "$libtool";
- /** Name of the attribute used for implicit dependency on the header_scanner wrapper. */
+ /** Name of the attribute used for implicit dependency on the header_scanner tool. */
public static final String HEADER_SCANNER_ATTRIBUTE = ":header_scanner";
+ /** Name of attribute used for implicit dependency on the apple SDKs. */
+ public static final String APPLE_SDK_ATTRIBUTE = ":apple_sdk";
static final String CLANG = "clang";
static final String CLANG_PLUSPLUS = "clang++";
@@ -764,6 +766,22 @@ public class ObjcRuleClasses {
.getObjcHeaderScannerTool();
}
}))
+ .add(
+ attr(APPLE_SDK_ATTRIBUTE, LABEL)
+ .value(
+ new LateBoundLabel<BuildConfiguration>(ObjcConfiguration.class) {
+ @Override
+ public Label resolve(
+ Rule rule, AttributeMap attributes, BuildConfiguration configuration) {
+ ObjcConfiguration objcConfiguration =
+ configuration.getFragment(ObjcConfiguration.class);
+ // Apple SDKs are currently only used by ObjC header thinning feature
+ if (objcConfiguration.useExperimentalHeaderThinning()) {
+ return objcConfiguration.getAppleSdk();
+ }
+ return null;
+ }
+ }))
.build();
}
@Override