Use 'ARCHS' Xcode env for assembleAppleFramework task registration.

#KT-47653
This commit is contained in:
Konstantin Tskhovrebov
2021-07-21 14:22:13 +03:00
committed by Space
parent 414e735a67
commit 68a3c5f378
3 changed files with 32 additions and 24 deletions
@@ -34,7 +34,7 @@ class AppleFrameworkIT : BaseGradleIT() {
customEnvironmentVariables = mapOf(
"CONFIGURATION" to "debug",
"SDK_NAME" to "iphoneos123",
"NATIVE_ARCH" to "armv7"
"ARCHS" to "arm64"
)
)
build("assembleDebugAppleFrameworkForXcodeIosArm64", options = options) {
@@ -73,7 +73,7 @@ class AppleFrameworkIT : BaseGradleIT() {
customEnvironmentVariables = mapOf(
"CONFIGURATION" to "Debug",
"SDK_NAME" to "iphoneos",
"NATIVE_ARCH" to "armv7",
"ARCHS" to "arm64",
"EXPANDED_CODE_SIGN_IDENTITY" to "-",
"TARGET_BUILD_DIR" to "testBuildDir",
"FRAMEWORKS_FOLDER_PATH" to "testFrameworksDir"
@@ -106,7 +106,7 @@ class AppleFrameworkIT : BaseGradleIT() {
customEnvironmentVariables = mapOf(
"CONFIGURATION" to "Debug",
"SDK_NAME" to "iphoneos",
"NATIVE_ARCH" to "armv7"
"ARCHS" to "arm64"
)
)
build("tasks", options = options) {
@@ -14,8 +14,8 @@ internal object AppleSdk {
val targets: MutableSet<KonanTarget> = mutableSetOf()
when (platform) {
"iphoneos" -> {
when {
platform.startsWith("iphoneos") -> {
targets.addAll(archs.map { arch ->
when (arch) {
"arm64", "arm64e" -> KonanTarget.IOS_ARM64
@@ -24,7 +24,7 @@ internal object AppleSdk {
}
})
}
"iphonesimulator" -> {
platform.startsWith("iphonesimulator") -> {
targets.addAll(archs.map { arch ->
when (arch) {
"arm64", "arm64e" -> KonanTarget.IOS_SIMULATOR_ARM64
@@ -33,7 +33,7 @@ internal object AppleSdk {
}
})
}
"watchos" -> {
platform.startsWith("watchos") -> {
targets.addAll(archs.map { arch ->
when (arch) {
"armv7k" -> KonanTarget.WATCHOS_ARM32
@@ -42,7 +42,7 @@ internal object AppleSdk {
}
})
}
"watchsimulator" -> {
platform.startsWith("watchsimulator") -> {
targets.addAll(archs.map { arch ->
when (arch) {
"arm64", "arm64e" -> KonanTarget.WATCHOS_SIMULATOR_ARM64
@@ -52,7 +52,7 @@ internal object AppleSdk {
}
})
}
"appletvos" -> {
platform.startsWith("appletvos") -> {
targets.addAll(archs.map { arch ->
when (arch) {
"arm64", "arm64e" -> KonanTarget.TVOS_ARM64
@@ -60,7 +60,7 @@ internal object AppleSdk {
}
})
}
"appletvsimulator" -> {
platform.startsWith("appletvsimulator") -> {
targets.addAll(archs.map { arch ->
when (arch) {
"arm64", "arm64e" -> KonanTarget.TVOS_SIMULATOR_ARM64
@@ -69,7 +69,7 @@ internal object AppleSdk {
}
})
}
"macosx" -> {
platform.startsWith("macosx") -> {
targets.addAll(archs.map { arch ->
when (arch) {
"arm64" -> KonanTarget.MACOS_ARM64
@@ -34,13 +34,12 @@ private object XcodeEnvironment {
?: System.getenv("KOTLIN_FRAMEWORK_BUILD_TYPE")?.toNativeBuildType()
}
val target: KonanTarget?
get() {
val sdk = System.getenv("SDK_NAME") ?: return null
val arch = System.getenv("NATIVE_ARCH") ?: return null
val nativeTargets = AppleSdk.defineNativeTargets(sdk, listOf(arch))
return nativeTargets.firstOrNull()
val targets: List<KonanTarget>
get() {
val sdk = System.getenv("SDK_NAME") ?: return emptyList()
val archs = System.getenv("ARCHS")?.split(" ") ?: return emptyList()
return AppleSdk.defineNativeTargets(sdk, archs)
}
val frameworkSearchDir: File?
@@ -63,6 +62,15 @@ private object XcodeEnvironment {
private fun Project.registerAssembleAppleFrameworkTask(framework: Framework): TaskProvider<Copy>? {
if (!framework.konanTarget.family.isAppleFamily || !framework.konanTarget.enabledOnCurrentHost) return null
val envTargets = XcodeEnvironment.targets
if (envTargets.size > 1) {
logger.debug(
"Unable to register assemble Apple framework task because " +
"'ARCHS' contains more than one value."
)
return null
}
val frameworkBuildType = framework.buildType
val frameworkTarget = framework.target
val frameworkTaskName = lowerCamelCaseName(
@@ -74,7 +82,7 @@ private fun Project.registerAssembleAppleFrameworkTask(framework: Framework): Ta
)
val envBuildType = XcodeEnvironment.buildType
val envTarget = XcodeEnvironment.target
val envTarget = envTargets.firstOrNull()
val envFrameworkSearchDir = XcodeEnvironment.frameworkSearchDir
if (envBuildType == null || envTarget == null || envFrameworkSearchDir == null) {
@@ -87,7 +95,7 @@ private fun Project.registerAssembleAppleFrameworkTask(framework: Framework): Ta
} else {
logger.debug(
"Not registering $frameworkTaskName, since not called from Xcode " +
"('SDK_NAME' and 'CONFIGURATION' not provided)"
"('SDK_NAME', 'ARCHS' and 'CONFIGURATION' not provided)"
)
}
return null
@@ -108,22 +116,22 @@ internal fun Project.registerEmbedAndSignAppleFrameworkTask(framework: Framework
val assembleTask = registerAssembleAppleFrameworkTask(framework) ?: return
val envBuildType = XcodeEnvironment.buildType
val envTarget = XcodeEnvironment.target
val envTargets = XcodeEnvironment.targets
val envEmbeddedFrameworksDir = XcodeEnvironment.embeddedFrameworksDir
val envFrameworkSearchDir = XcodeEnvironment.frameworkSearchDir
val envSign = XcodeEnvironment.sign
val frameworkTaskName = lowerCamelCaseName("embedAndSign", framework.namePrefix, "AppleFrameworkForXcode")
if (envBuildType == null || envTarget == null || envEmbeddedFrameworksDir == null || envFrameworkSearchDir == null) {
if (envBuildType == null || envTargets.isEmpty() || envEmbeddedFrameworksDir == null || envFrameworkSearchDir == null) {
logger.debug(
"Not registering $frameworkTaskName, since not called from Xcode " +
"('SDK_NAME', 'CONFIGURATION', 'TARGET_BUILD_DIR' and 'FRAMEWORKS_FOLDER_PATH' not provided)"
"('SDK_NAME', 'CONFIGURATION', 'TARGET_BUILD_DIR', 'ARCHS' and 'FRAMEWORKS_FOLDER_PATH' not provided)"
)
return
}
if (framework.buildType != envBuildType || framework.konanTarget != envTarget) return
if (framework.buildType != envBuildType || !envTargets.contains(framework.konanTarget)) return
registerTask<Copy>(frameworkTaskName) { task ->
task.group = "build"
@@ -132,7 +140,7 @@ internal fun Project.registerEmbedAndSignAppleFrameworkTask(framework: Framework
task.dependsOn(assembleTask)
task.inputs.apply {
property("type", envBuildType)
property("target", envTarget)
property("targets", envTargets)
property("embeddedFrameworksDir", envEmbeddedFrameworksDir)
property("sign", envSign)
}