1
1
package com.powersync.compile
2
2
3
+ import kotlin.io.path.Path
3
4
import org.gradle.api.DefaultTask
5
+ import org.gradle.api.GradleException
6
+ import org.gradle.api.provider.Provider
4
7
import org.gradle.api.file.DirectoryProperty
5
8
import org.gradle.api.file.RegularFileProperty
6
9
import org.gradle.api.provider.Property
@@ -15,6 +18,7 @@ import org.gradle.api.tasks.PathSensitivity
15
18
import org.gradle.api.tasks.TaskAction
16
19
import org.jetbrains.kotlin.konan.target.KonanTarget
17
20
import javax.inject.Inject
21
+ import kotlin.io.path.absolutePathString
18
22
import kotlin.io.path.name
19
23
20
24
@CacheableTask
@@ -36,9 +40,22 @@ abstract class ClangCompile: DefaultTask() {
36
40
@get:Inject
37
41
protected abstract val providers: ProviderFactory
38
42
43
+ @get:Input
44
+ val xcodeInstallation: Provider <String > get() = providers.exec {
45
+ executable(" xcode-select" )
46
+ args(" -p" )
47
+ }.standardOutput.asText
48
+
39
49
@TaskAction
40
50
fun run () {
41
51
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()
42
59
43
60
val (llvmTarget, sysRoot) = when (target) {
44
61
KonanTarget .IOS_X64 -> " x86_64-apple-ios12.0-simulator" to IOS_SIMULATOR_SDK
@@ -59,12 +76,12 @@ abstract class ClangCompile: DefaultTask() {
59
76
providers.exec {
60
77
executable = " clang"
61
78
args(
62
- " -B/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin " ,
79
+ " -B${toolchain} " ,
63
80
" -fno-stack-protector" ,
64
81
" -target" ,
65
82
llvmTarget,
66
83
" -isysroot" ,
67
- sysRoot,
84
+ xcode.resolve( sysRoot).absolutePathString() ,
68
85
" -fPIC" ,
69
86
" --compile" ,
70
87
" -I${include.get().asFile.absolutePath} " ,
@@ -83,10 +100,10 @@ abstract class ClangCompile: DefaultTask() {
83
100
}
84
101
85
102
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/"
91
108
}
92
109
}
0 commit comments