11package com.powersync.compile
22
3+ import kotlin.io.path.Path
34import org.gradle.api.DefaultTask
5+ import org.gradle.api.GradleException
6+ import org.gradle.api.provider.Provider
47import org.gradle.api.file.DirectoryProperty
58import org.gradle.api.file.RegularFileProperty
69import org.gradle.api.provider.Property
@@ -15,6 +18,7 @@ import org.gradle.api.tasks.PathSensitivity
1518import org.gradle.api.tasks.TaskAction
1619import org.jetbrains.kotlin.konan.target.KonanTarget
1720import javax.inject.Inject
21+ import kotlin.io.path.absolutePathString
1822import 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