Skip to content

Commit e6bde1b

Browse files
committed
Use xcode-select to find xcode installation
1 parent 4e95443 commit e6bde1b

File tree

1 file changed

+24
-7
lines changed

1 file changed

+24
-7
lines changed

plugins/build-plugin/src/main/kotlin/com/powersync/compile/ClangCompile.kt

Lines changed: 24 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
package com.powersync.compile
22

3+
import kotlin.io.path.Path
34
import org.gradle.api.DefaultTask
5+
import org.gradle.api.GradleException
6+
import org.gradle.api.provider.Provider
47
import org.gradle.api.file.DirectoryProperty
58
import org.gradle.api.file.RegularFileProperty
69
import org.gradle.api.provider.Property
@@ -15,6 +18,7 @@ import org.gradle.api.tasks.PathSensitivity
1518
import org.gradle.api.tasks.TaskAction
1619
import org.jetbrains.kotlin.konan.target.KonanTarget
1720
import javax.inject.Inject
21+
import kotlin.io.path.absolutePathString
1822
import kotlin.io.path.name
1923

2024
@CacheableTask
@@ -36,9 +40,22 @@ abstract class ClangCompile: DefaultTask() {
3640
@get:Inject
3741
protected abstract val providers: ProviderFactory
3842

43+
@get:Input
44+
val xcodeInstallation: Provider<String> get() = providers.exec {
45+
executable("xcode-select")
46+
args("-p")
47+
}.standardOutput.asText
48+
3949
@TaskAction
4050
fun run() {
4151
val target = requireNotNull(KonanTarget.predefinedTargets[konanTarget.get()])
52+
val xcodePath = xcodeInstallation.get().trim()
53+
if (xcodePath.isEmpty()) {
54+
throw GradleException("xcode-select was unable to resolve an XCode installation")
55+
}
56+
57+
val xcode = Path(xcodePath)
58+
val toolchain = xcode.resolve("Toolchains/XcodeDefault.xctoolchain/usr/bin").absolutePathString()
4259

4360
val (llvmTarget, sysRoot) = when (target) {
4461
KonanTarget.IOS_X64 -> "x86_64-apple-ios12.0-simulator" to IOS_SIMULATOR_SDK
@@ -59,12 +76,12 @@ abstract class ClangCompile: DefaultTask() {
5976
providers.exec {
6077
executable = "clang"
6178
args(
62-
"-B/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin",
79+
"-B${toolchain}",
6380
"-fno-stack-protector",
6481
"-target",
6582
llvmTarget,
6683
"-isysroot",
67-
sysRoot,
84+
xcode.resolve(sysRoot).absolutePathString(),
6885
"-fPIC",
6986
"--compile",
7087
"-I${include.get().asFile.absolutePath}",
@@ -83,10 +100,10 @@ abstract class ClangCompile: DefaultTask() {
83100
}
84101

85102
companion object {
86-
const val WATCHOS_SDK = "/Applications/Xcode.app/Contents/Developer/Platforms/WatchOS.platform/Developer/SDKs/WatchOS.sdk"
87-
const val WATCHOS_SIMULATOR_SDK = "/Applications/Xcode.app/Contents/Developer/Platforms/WatchSimulator.platform/Developer/SDKs/WatchSimulator.sdk/"
88-
const val IOS_SDK = "/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk"
89-
const val IOS_SIMULATOR_SDK = "/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk"
90-
const val MACOS_SDK = "/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/"
103+
const val WATCHOS_SDK = "Platforms/WatchOS.platform/Developer/SDKs/WatchOS.sdk"
104+
const val WATCHOS_SIMULATOR_SDK = "Platforms/WatchSimulator.platform/Developer/SDKs/WatchSimulator.sdk/"
105+
const val IOS_SDK = "Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk"
106+
const val IOS_SIMULATOR_SDK = "Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk"
107+
const val MACOS_SDK = "Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/"
91108
}
92109
}

0 commit comments

Comments
 (0)