diff --git a/src/com/facebook/buck/apple/AppleToolchainDescription.java b/src/com/facebook/buck/apple/AppleToolchainDescription.java index 7072e2300f4..e9847c2e6ef 100644 --- a/src/com/facebook/buck/apple/AppleToolchainDescription.java +++ b/src/com/facebook/buck/apple/AppleToolchainDescription.java @@ -130,7 +130,8 @@ public BuildRule createBuildRule( args.getArchitecture(), "apple", applePlatform.getSwiftName().orElse(applePlatform.getName()), - args.getMinVersion()); + args.getMinVersion(), + applePlatform.getIsSimulator()); Optional swiftPlatform = swiftToolchainRule .map(SwiftToolchainBuildRule.class::cast) diff --git a/src/com/facebook/buck/apple/toolchain/ApplePlatform.java b/src/com/facebook/buck/apple/toolchain/ApplePlatform.java index a6342d9f28b..b897350b033 100644 --- a/src/com/facebook/buck/apple/toolchain/ApplePlatform.java +++ b/src/com/facebook/buck/apple/toolchain/ApplePlatform.java @@ -43,7 +43,7 @@ public abstract class ApplePlatform implements Comparable, AddsTo ImmutableApplePlatform.builder() .setName("iphonesimulator") .setSwiftName("ios") - .setArchitectures(ImmutableList.of("i386", "x86_64")) + .setArchitectures(ImmutableList.of("i386", "x86_64", "arm64")) .setMinVersionFlagPrefix("-mios-simulator-version-min=") // only used for legacy watch apps .setStubBinaryPath(Optional.of("Library/Application Support/WatchKit/WK")) @@ -59,7 +59,7 @@ public abstract class ApplePlatform implements Comparable, AddsTo public static final ApplePlatform WATCHSIMULATOR = ImmutableApplePlatform.builder() .setName("watchsimulator") - .setArchitectures(ImmutableList.of("i386", "x86_64")) + .setArchitectures(ImmutableList.of("i386", "x86_64", "arm64")) .setMinVersionFlagPrefix("-mwatchos-simulator-version-min=") .setStubBinaryPath(Optional.of("Library/Application Support/WatchKit/WK")) .build(); @@ -73,14 +73,14 @@ public abstract class ApplePlatform implements Comparable, AddsTo public static final ApplePlatform APPLETVSIMULATOR = ImmutableApplePlatform.builder() .setName("appletvsimulator") - .setArchitectures(ImmutableList.of("x86_64")) + .setArchitectures(ImmutableList.of("arm64", "x86_64")) .setMinVersionFlagPrefix("-mtvos-simulator-version-min=") .setSwiftName("tvos") .build(); public static final ApplePlatform MACOSX = ImmutableApplePlatform.builder() .setName("macosx") - .setArchitectures(ImmutableList.of("i386", "x86_64")) + .setArchitectures(ImmutableList.of("i386", "x86_64", "arm64")) .setAppIncludesFrameworks(true) .build(); public static final ApplePlatform DRIVERKIT = @@ -144,6 +144,10 @@ public ApplePlatformType getType() { return ApplePlatformType.of(getName()); } + public boolean getIsSimulator() { + return isSimulator(getName()); + } + public static boolean needsCodeSign(String name) { return name.startsWith(IPHONEOS.getName()) || name.startsWith(IPHONESIMULATOR.getName()) diff --git a/src/com/facebook/buck/apple/toolchain/impl/AppleCxxPlatforms.java b/src/com/facebook/buck/apple/toolchain/impl/AppleCxxPlatforms.java index 1d4a9d5ea5d..b65f3a7c9fb 100644 --- a/src/com/facebook/buck/apple/toolchain/impl/AppleCxxPlatforms.java +++ b/src/com/facebook/buck/apple/toolchain/impl/AppleCxxPlatforms.java @@ -478,7 +478,8 @@ public static AppleCxxPlatform buildWithXcodeToolFinder( targetArchitecture, "apple", applePlatform.getSwiftName().orElse(applePlatform.getName()), - minVersion), + minVersion, + applePlatform.getIsSimulator()), version, targetSdk, swiftSdkPathsBuilder.build(), diff --git a/src/com/facebook/buck/swift/toolchain/SwiftTargetTriple.java b/src/com/facebook/buck/swift/toolchain/SwiftTargetTriple.java index d52cef447cd..a3b997d8df7 100644 --- a/src/com/facebook/buck/swift/toolchain/SwiftTargetTriple.java +++ b/src/com/facebook/buck/swift/toolchain/SwiftTargetTriple.java @@ -40,19 +40,26 @@ public abstract class SwiftTargetTriple implements AddsToRuleKey { @AddToRuleKey public abstract String getTargetSdkVersion(); + @AddToRuleKey + public abstract Boolean getIsSimulator(); + public String getTriple() { - return getArchitecture() + "-" + getVendor() + "-" + getPlatformName() + getTargetSdkVersion(); + String triple = getArchitecture() + "-" + getVendor() + "-" + getPlatformName() + getTargetSdkVersion(); + if(getIsSimulator()) { + triple = triple + "-simulator"; + } + return triple; } public static SwiftTargetTriple of( - String architecture, String vendor, String platformName, String targetSdkVersion) { - return ImmutableSwiftTargetTriple.of(architecture, vendor, platformName, targetSdkVersion); + String architecture, String vendor, String platformName, String targetSdkVersion, Boolean isSimulator) { + return ImmutableSwiftTargetTriple.of(architecture, vendor, platformName, targetSdkVersion, isSimulator); } public SwiftTargetTriple withTargetSdkVersion(String targetSdkVersion) { if (targetSdkVersion.equals(getTargetSdkVersion())) { return this; } - return of(getArchitecture(), getVendor(), getPlatformName(), targetSdkVersion); + return of(getArchitecture(), getVendor(), getPlatformName(), targetSdkVersion, getIsSimulator()); } } diff --git a/test/com/facebook/buck/apple/AppleBinaryIntegrationTest.java b/test/com/facebook/buck/apple/AppleBinaryIntegrationTest.java index 7a7b768e8a3..2c56855250a 100644 --- a/test/com/facebook/buck/apple/AppleBinaryIntegrationTest.java +++ b/test/com/facebook/buck/apple/AppleBinaryIntegrationTest.java @@ -1530,7 +1530,7 @@ public void testAppleBinaryBuildsFatBinariesWithSwift() throws Exception { workspace.setUp(); BuildTarget target = BuildTargetFactory.newInstance( - "//:DemoAppBinary#iphonesimulator-i386,iphonesimulator-x86_64,no-linkermap"); + "//:DemoAppBinary#iphonesimulator-i386,iphonesimulator-x86_64,iphonesimulator-arm64,no-linkermap"); workspace.runBuckCommand("build", target.getFullyQualifiedName()).assertSuccess(); Path output = @@ -1541,7 +1541,7 @@ public void testAppleBinaryBuildsFatBinariesWithSwift() throws Exception { workspace.runCommand("file", output.toString()).getStdout().get(), containsString("executable")); ProcessExecutor.Result lipoVerifyResult = - workspace.runCommand("lipo", output.toString(), "-verify_arch", "i386", "x86_64"); + workspace.runCommand("lipo", output.toString(), "-verify_arch", "i386", "x86_64", "arm64"); assertEquals(lipoVerifyResult.getStderr().orElse(""), 0, lipoVerifyResult.getExitCode()); } diff --git a/test/com/facebook/buck/apple/toolchain/impl/AppleCxxPlatformsTest.java b/test/com/facebook/buck/apple/toolchain/impl/AppleCxxPlatformsTest.java index 5d5a8fef3dd..aa65945dca7 100644 --- a/test/com/facebook/buck/apple/toolchain/impl/AppleCxxPlatformsTest.java +++ b/test/com/facebook/buck/apple/toolchain/impl/AppleCxxPlatformsTest.java @@ -1199,7 +1199,7 @@ public void checkSwiftPlatformUsesCorrectMinTargetSdk() { assertThat(swiftc, instanceOf(VersionedTool.class)); assertThat( swiftPlatform.getSwiftTarget(), - equalTo(SwiftTargetTriple.of("i386", "apple", "ios", "7.0"))); + equalTo(SwiftTargetTriple.of("i386", "apple", "ios", "7.0", false))); } @Test diff --git a/test/com/facebook/buck/apple/toolchain/impl/AppleSdkDiscoveryTest.java b/test/com/facebook/buck/apple/toolchain/impl/AppleSdkDiscoveryTest.java index 5a9dfe7e8e0..f001d3f1d22 100644 --- a/test/com/facebook/buck/apple/toolchain/impl/AppleSdkDiscoveryTest.java +++ b/test/com/facebook/buck/apple/toolchain/impl/AppleSdkDiscoveryTest.java @@ -104,7 +104,7 @@ public void shouldResolveSdkVersionConflicts() throws IOException { .setName("macosx") .setVersion("10.9") .setApplePlatform(ApplePlatform.MACOSX) - .addArchitectures("i386", "x86_64") + .addArchitectures("i386", "x86_64", "arm64") .addAllToolchains(toolchains.values()) .build(); AppleSdk macosxDebugSdk = @@ -112,7 +112,7 @@ public void shouldResolveSdkVersionConflicts() throws IOException { .setName("macosx-Debug") .setVersion("10.9") .setApplePlatform(ApplePlatform.MACOSX) - .addArchitectures("i386", "x86_64") + .addArchitectures("i386", "x86_64", "arm64") .addAllToolchains(toolchains.values()) .build(); AppleSdkPaths macosxReleasePaths = @@ -167,7 +167,7 @@ public void shouldFindPlatformsInExtraPlatformDirectories() throws IOException { .setName("macosx10.9") .setVersion("10.9") .setApplePlatform(ApplePlatform.MACOSX) - .addArchitectures("i386", "x86_64") + .addArchitectures("i386", "x86_64", "arm64") .addAllToolchains(toolchains.values()) .build(); AppleSdkPaths macosx109Paths = @@ -210,7 +210,7 @@ public void ignoresInvalidExtraPlatformDirectories() throws IOException { .setName("macosx10.9") .setVersion("10.9") .setApplePlatform(ApplePlatform.MACOSX) - .addArchitectures("i386", "x86_64") + .addArchitectures("i386", "x86_64", "arm64") .addAllToolchains(toolchains.values()) .build(); AppleSdkPaths macosx109Paths = @@ -284,7 +284,7 @@ public void shouldIgnoreSdkWithBadSymlink() throws Exception { .setName("macosx10.9") .setVersion("10.9") .setApplePlatform(ApplePlatform.MACOSX) - .addArchitectures("i386", "x86_64") + .addArchitectures("i386", "x86_64", "arm64") .addAllToolchains(toolchains.values()) .build(); AppleSdkPaths macosx109Paths = @@ -326,7 +326,7 @@ public void appleSdkPathsBuiltFromDirectory() throws Exception { .setName("macosx10.9") .setVersion("10.9") .setApplePlatform(ApplePlatform.MACOSX) - .addArchitectures("i386", "x86_64") + .addArchitectures("i386", "x86_64", "arm64") .addToolchains(getDefaultToolchain(root)) .build(); AppleSdkPaths macosx109Paths = @@ -358,7 +358,7 @@ public void appleSdkPathsBuiltFromDirectory() throws Exception { .setName("iphonesimulator8.0") .setVersion("8.0") .setApplePlatform(ApplePlatform.IPHONESIMULATOR) - .addArchitectures("i386", "x86_64") + .addArchitectures("i386", "x86_64", "arm64") .addToolchains(getDefaultToolchain(root)) .build(); AppleSdkPaths iphonesimulator80Paths = @@ -392,7 +392,7 @@ public void appleSdkPathsBuiltFromDirectory() throws Exception { .setName("watchsimulator2.0") .setVersion("2.0") .setApplePlatform(ApplePlatform.WATCHSIMULATOR) - .addArchitectures("i386", "x86_64") + .addArchitectures("i386", "x86_64", "arm64") .addToolchains(getDefaultToolchain(root)) .build(); AppleSdkPaths watchsimulator20Paths = @@ -425,7 +425,7 @@ public void appleSdkPathsBuiltFromDirectory() throws Exception { .setName("appletvsimulator9.1") .setVersion("9.1") .setApplePlatform(ApplePlatform.APPLETVSIMULATOR) - .addArchitectures("x86_64") + .addArchitectures("x86_64", "arm64") .addToolchains(getDefaultToolchain(root)) .build(); AppleSdkPaths appletvsimulator91Paths = @@ -501,7 +501,7 @@ public void multipleAppleSdkPathsPerPlatformBuiltFromDirectory() throws Exceptio .setName("macosx10.9") .setVersion("10.9") .setApplePlatform(ApplePlatform.MACOSX) - .addArchitectures("i386", "x86_64") + .addArchitectures("i386", "x86_64", "arm64") .addToolchains(getDefaultToolchain(root)) .build(); AppleSdkPaths macosx109Paths = @@ -533,7 +533,7 @@ public void multipleAppleSdkPathsPerPlatformBuiltFromDirectory() throws Exceptio .setName("iphonesimulator8.0") .setVersion("8.0") .setApplePlatform(ApplePlatform.IPHONESIMULATOR) - .addArchitectures("i386", "x86_64") + .addArchitectures("i386", "x86_64", "arm64") .addToolchains(getDefaultToolchain(root)) .build(); AppleSdkPaths iphonesimulator80Paths = @@ -567,7 +567,7 @@ public void multipleAppleSdkPathsPerPlatformBuiltFromDirectory() throws Exceptio .setName("iphonesimulator8.1") .setVersion("8.1") .setApplePlatform(ApplePlatform.IPHONESIMULATOR) - .addArchitectures("i386", "x86_64") + .addArchitectures("i386", "x86_64", "arm64") .addToolchains(getDefaultToolchain(root)) .build(); AppleSdkPaths iphonesimulator81Paths = @@ -625,7 +625,7 @@ public void shouldDiscoverRealSdkThroughAbsoluteSymlink() throws IOException { .setName("macosx10.9") .setVersion("10.9") .setApplePlatform(ApplePlatform.MACOSX) - .addArchitectures("i386", "x86_64") + .addArchitectures("i386", "x86_64", "arm64") .addAllToolchains(toolchains.values()) .build(); AppleSdkPaths macosx109Paths = @@ -751,7 +751,7 @@ public void overrideToolchains() throws IOException { .setName("macosx10.9") .setVersion("10.9") .setApplePlatform(ApplePlatform.MACOSX) - .addArchitectures("i386", "x86_64") + .addArchitectures("i386", "x86_64", "arm64") .addAllToolchains(ImmutableList.of(overrideToolchain1, overrideToolchain2)) .build(); AppleSdkPaths macosx109Paths = diff --git a/test/com/facebook/buck/swift/SwiftNativeLinkableGroupTest.java b/test/com/facebook/buck/swift/SwiftNativeLinkableGroupTest.java index cd53fb999e2..5b632dace34 100644 --- a/test/com/facebook/buck/swift/SwiftNativeLinkableGroupTest.java +++ b/test/com/facebook/buck/swift/SwiftNativeLinkableGroupTest.java @@ -111,7 +111,7 @@ public void testStaticLinkerFlagsOnMobile() { swiftcTool, Optional.of(swiftStdTool), true, - SwiftTargetTriple.of("x86_64", "apple", "ios", "9.3")); + SwiftTargetTriple.of("x86_64", "apple", "ios", "9.3", false)); ImmutableList.Builder staticArgsBuilder = ImmutableList.builder(); SwiftRuntimeNativeLinkableGroup.populateLinkerArguments( @@ -152,7 +152,7 @@ public void testStaticLinkerFlagsOnMac() { swiftcTool, Optional.of(swiftStdTool), true, - SwiftTargetTriple.of("x86_64", "apple", "ios", "9.3")); + SwiftTargetTriple.of("x86_64", "apple", "ios", "9.3", false)); ImmutableList.Builder sharedArgsBuilder = ImmutableList.builder(); SwiftRuntimeNativeLinkableGroup.populateLinkerArguments( diff --git a/test/com/facebook/buck/swift/toolchain/impl/SwiftPlatformFactoryIntegrationTest.java b/test/com/facebook/buck/swift/toolchain/impl/SwiftPlatformFactoryIntegrationTest.java index 92682d12995..2235f1382a8 100644 --- a/test/com/facebook/buck/swift/toolchain/impl/SwiftPlatformFactoryIntegrationTest.java +++ b/test/com/facebook/buck/swift/toolchain/impl/SwiftPlatformFactoryIntegrationTest.java @@ -86,7 +86,7 @@ public void setUp() { @Test public void testBuildSwiftPlatformWithEmptyToolchainPaths() throws IOException { Path developerDir = tmp.newFolder("Developer"); - SwiftTargetTriple triple = SwiftTargetTriple.of("x86_64", "apple", "ios", "9.3"); + SwiftTargetTriple triple = SwiftTargetTriple.of("x86_64", "apple", "ios", "9.3", false); SwiftPlatform swiftPlatform = SwiftPlatformFactory.build( createAppleSdk(), @@ -113,7 +113,7 @@ public void testBuildSwiftPlatformWithNonEmptyLookupPathWithoutTools() throws IO swiftcTool, Optional.of(swiftStdTool), true, - SwiftTargetTriple.of("x86_64", "apple", "ios", "9.3")); + SwiftTargetTriple.of("x86_64", "apple", "ios", "9.3", false)); assertThat(swiftPlatform.getSwiftRuntimePathsForBundling(), empty()); assertThat(swiftPlatform.getSwiftStaticRuntimePaths(), empty()); } @@ -136,7 +136,7 @@ public void testBuildSwiftPlatformWithNonEmptyLookupPathWithTools() throws IOExc swiftcTool, Optional.of(swiftStdTool), true, - SwiftTargetTriple.of("x86_64", "apple", "ios", "9.3")); + SwiftTargetTriple.of("x86_64", "apple", "ios", "9.3", false)); assertThat(swiftPlatform.getSwiftRuntimePathsForBundling(), hasSize(1)); assertThat(swiftPlatform.getSwiftStaticRuntimePaths(), hasSize(2)); }