All Downloads are FREE. Search and download functionalities are using the official Maven repository.

godot.gradle.tasks.graal.ios.compileIOSGraalFix.kt Maven / Gradle / Ivy

There is a newer version: 0.11.0-4.3
Show newest version
package godot.gradle.tasks.graal.ios

import godot.gradle.GodotExtension
import godot.gradle.tasks.graal.iosGraalFixC
import godot.gradle.tasks.graal.iosGraalFixObject
import org.gradle.api.Project
import org.gradle.api.Task
import org.gradle.api.tasks.Exec
import org.gradle.api.tasks.TaskProvider
import org.jetbrains.kotlin.gradle.internal.ensureParentDirsCreated
import java.io.InputStream

fun Project.compileIOSGraalFixTask(): TaskProvider = tasks.register("compileIOSGraalFix", Exec::class.java) {
    with(it) {
        group = "godot-kotlin-jvm-internal"
        description =
            "INTERNAL TASK ! Compile $iosGraalFixC to $iosGraalFixObject object file, ready to be included in ios static library."

        doFirst {
            val fixCFile = GodotExtension::class.java.getResource("ios/$iosGraalFixC")?.content
            require(fixCFile is InputStream)
            val iosLibDir = project.buildDir.resolve("libs").resolve("ios")
            val fixCFileToWrite = iosLibDir.resolve(iosGraalFixC)
            if (fixCFileToWrite.exists()) {
                fixCFileToWrite.delete()
            }
            fixCFileToWrite.ensureParentDirsCreated()
            fixCFileToWrite.createNewFile()
            fixCFileToWrite.writeBytes(fixCFile.readAllBytes())

            val fixGraalObjectFile = iosLibDir.resolve(iosGraalFixObject).absolutePath

            val xcrunProcess = ProcessBuilder("xcrun", "--sdk", "iphoneos", "--show-sdk-path")
                .start()

            require(xcrunProcess.waitFor() == 0) {
                buildString {
                    appendLine("Can't find ios sdk. Please check your xcode setup.")
                    appendLine(xcrunProcess.errorStream.readAllBytes().decodeToString())
                }
            }

            val iphoneOsSdk = xcrunProcess.inputStream
                .readAllBytes()
                .decodeToString()
                .removeSuffix("\n")

            val gvmPreProcessor = when(IOSJavaVersion(project)) {
                IOSJavaVersion.JVM_11 -> "GVM_11"
                IOSJavaVersion.JVM_17 -> "GVM_17"
            }

            commandLine(
                "clang",
                "-c",
                "-arch",
                "arm64",
                "-mios-version-min=11.0",
                "-isysroot",
                iphoneOsSdk,
                "-D$gvmPreProcessor",
                fixCFileToWrite.absolutePath,
                "-o",
                fixGraalObjectFile
            )

            logger.quiet(commandLine.joinToString(" "))
        }
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy