diff --git a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/LinkStage.kt b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/LinkStage.kt index a25a85f2340..17f6ee3c7fd 100644 --- a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/LinkStage.kt +++ b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/LinkStage.kt @@ -187,7 +187,7 @@ internal class LinkStage(val context: Context) { val framework = File(context.config.outputFile) val dylibName = framework.name.removeSuffix(".framework") val dylibRelativePath = when (target) { - KonanTarget.IOS_ARM64, KonanTarget.IOS_X64 -> dylibName + KonanTarget.IOS_ARM32, KonanTarget.IOS_ARM64, KonanTarget.IOS_X64 -> dylibName KonanTarget.MACOS_X64 -> "Versions/A/$dylibName" else -> error(target) } diff --git a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/CodeGenerator.kt b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/CodeGenerator.kt index e75e2be415b..c38f5e28628 100644 --- a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/CodeGenerator.kt +++ b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/CodeGenerator.kt @@ -96,7 +96,8 @@ internal class CodeGenerator(override val context: Context) : ContextUtils { } val objCDataGenerator = when (context.config.target) { - KonanTarget.IOS_ARM64, KonanTarget.IOS_X64, KonanTarget.MACOS_X64 -> ObjCDataGenerator(this) + KonanTarget.IOS_ARM32, KonanTarget.IOS_ARM64, + KonanTarget.IOS_X64, KonanTarget.MACOS_X64 -> ObjCDataGenerator(this) else -> null } diff --git a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/ContextUtils.kt b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/ContextUtils.kt index 42d4a5b9e29..9e8e1fc445d 100644 --- a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/ContextUtils.kt +++ b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/ContextUtils.kt @@ -451,6 +451,7 @@ internal class Llvm(val context: Context, val llvmModule: LLVMModuleRef) { } private val personalityFunctionName = when (target) { + KonanTarget.IOS_ARM32 -> "__gxx_personality_sj0" KonanTarget.MINGW_X64 -> "__gxx_personality_seh0" else -> "__gxx_personality_v0" } diff --git a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/IrToBitcode.kt b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/IrToBitcode.kt index 9a727dbcf25..94b25bb05c5 100644 --- a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/IrToBitcode.kt +++ b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/IrToBitcode.kt @@ -2253,9 +2253,9 @@ internal class CodeGeneratorVisitor(val context: Context, val lifetimes: Map 64) { - trunc(bits, kInt64) + trunc(bits, int64Type) } else { - ext(bits, kInt64, signed) + ext(bits, int64Type, signed) } } } @@ -2268,7 +2268,7 @@ internal class CodeGeneratorVisitor(val context: Context, val lifetimes: Map isLU // x86_64 KonanTarget.IOS_ARM64 -> false // aarch64 + // TODO: what is the correct value? + KonanTarget.IOS_ARM32 -> false // armv7 else -> TODO() } diff --git a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/LlvmUtils.kt b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/LlvmUtils.kt index 4cc2129e2b5..0c43bb73354 100644 --- a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/LlvmUtils.kt +++ b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/LlvmUtils.kt @@ -122,6 +122,7 @@ internal val int1Type = LLVMInt1Type()!! internal val int8Type = LLVMInt8Type()!! internal val int16Type = LLVMInt16Type()!! internal val int32Type = LLVMInt32Type()!! +internal val int64Type = LLVMInt64Type()!! internal val int8TypePtr = pointerType(int8Type) internal val voidType = LLVMVoidType()!! @@ -142,7 +143,6 @@ internal val RuntimeAware.kTypeInfoPtr: LLVMTypeRef get() = pointerType(kTypeInfo) internal val kInt1 = LLVMInt1Type()!! internal val kBoolean = kInt1 -internal val kInt64 = LLVMInt64Type()!! internal val kInt8Ptr = pointerType(int8Type) internal val kInt8PtrPtr = pointerType(kInt8Ptr) internal val kNullInt8Ptr = LLVMConstNull(kInt8Ptr)!! diff --git a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/objcexport/BlockPointerSupport.kt b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/objcexport/BlockPointerSupport.kt index 0fb18284c3d..e5bfbbecd68 100644 --- a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/objcexport/BlockPointerSupport.kt +++ b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/objcexport/BlockPointerSupport.kt @@ -100,6 +100,9 @@ internal class BlockAdapterToFunctionGenerator(val objCExportCodeGenerator: ObjC LLVMSetLinkage(it, LLVMLinkage.LLVMInternalLinkage) } + fun org.jetbrains.kotlin.backend.konan.Context.LongInt(value: Long) = + if (is64Bit()) Int64(value) else Int32(value.toInt()) + private fun generateDescriptorForBlockAdapterToFunction(numberOfParameters: Int): ConstValue { val signature = buildString { append('@') @@ -116,11 +119,9 @@ internal class BlockAdapterToFunctionGenerator(val objCExportCodeGenerator: ObjC } } - assert(codegen.context.is64Bit()) - return Struct(blockDescriptorType, - Int64(0), - Int64(LLVMStoreSizeOfType(codegen.runtime.targetData, blockLiteralType)), + codegen.context.LongInt(0L), + codegen.context.LongInt(LLVMStoreSizeOfType(codegen.runtime.targetData, blockLiteralType)), constPointer(copyHelper), constPointer(disposeHelper), codegen.staticData.cStringLiteral(signature), @@ -128,6 +129,8 @@ internal class BlockAdapterToFunctionGenerator(val objCExportCodeGenerator: ObjC ) } + + private fun FunctionGenerationContext.storeRefUnsafe(value: LLVMValueRef, slot: LLVMValueRef) { assert(value.type == kObjHeaderPtr) assert(slot.type == kObjHeaderPtrPtr) diff --git a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/objcexport/ObjCExportCodeGenerator.kt b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/objcexport/ObjCExportCodeGenerator.kt index bf511b9a1eb..e5685f251b4 100644 --- a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/objcexport/ObjCExportCodeGenerator.kt +++ b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/objcexport/ObjCExportCodeGenerator.kt @@ -450,7 +450,7 @@ private inline fun ObjCExportCodeGenerator.generateObjCImpBy( methodBridge: MethodBridge, genBody: FunctionGenerationContext.() -> Unit ): LLVMValueRef { - val result = LLVMAddFunction(context.llvmModule, "", objCFunctionType(methodBridge))!! + val result = LLVMAddFunction(context.llvmModule, "", objCFunctionType(context, methodBridge))!! generateFunction(codegen, result) { genBody() @@ -579,8 +579,7 @@ private fun ObjCExportCodeGenerator.generateObjCImp( tailrec fun genReturnValueOnSuccess(returnBridge: MethodBridge.ReturnValue): LLVMValueRef? = when (returnBridge) { MethodBridge.ReturnValue.Void -> null MethodBridge.ReturnValue.HashCode -> { - assert(codegen.context.is64Bit()) - zext(targetResult!!, kInt64) + zext(targetResult!!, if (codegen.context.is64Bit()) int64Type else int32Type) } is MethodBridge.ReturnValue.Mapped -> kotlinToObjC(targetResult!!, returnBridge.bridge) MethodBridge.ReturnValue.WithError.Success -> Int8(1).llvm // true @@ -618,7 +617,7 @@ private fun ObjCExportCodeGenerator.generateKotlinToObjCBridge( val parameterToBase = descriptor.allParameters.zip(baseMethod.allParameters).toMap() - val objcMsgSend = msgSender(objCFunctionType(methodBridge)) + val objcMsgSend = msgSender(objCFunctionType(context, methodBridge)) val functionType = codegen.getLlvmFunctionType(context.ir.get(descriptor)) @@ -679,10 +678,13 @@ private fun ObjCExportCodeGenerator.generateKotlinToObjCBridge( MethodBridge.ReturnValue.Void -> null MethodBridge.ReturnValue.HashCode -> { - assert(codegen.context.is64Bit()) - val low = trunc(targetResult, int32Type) - val high = trunc(shr(targetResult, 32, signed = false), int32Type) - xor(low, high) + if (codegen.context.is64Bit()) { + val low = trunc(targetResult, int32Type) + val high = trunc(shr(targetResult, 32, signed = false), int32Type) + xor(low, high) + } else { + trunc(targetResult, int32Type) + } } is MethodBridge.ReturnValue.Mapped -> { @@ -1013,7 +1015,7 @@ private inline fun ObjCExportCodeGenerator.generateObjCToKotlinSyntheticGetter( ) val encoding = getEncoding(methodBridge) - val imp = generateFunction(codegen, objCFunctionType(methodBridge), "") { + val imp = generateFunction(codegen, objCFunctionType(context, methodBridge), "") { block() } @@ -1070,10 +1072,10 @@ private fun List.toMethods(): List } } -private fun objCFunctionType(methodBridge: MethodBridge): LLVMTypeRef { +private fun objCFunctionType(context: Context, methodBridge: MethodBridge): LLVMTypeRef { val paramTypes = methodBridge.paramBridges.map { it.objCType } - val returnType = methodBridge.returnBridge.objCType + val returnType = methodBridge.returnBridge.objCType(context) return functionType(returnType, false, *(paramTypes.toTypedArray())) } @@ -1084,7 +1086,7 @@ private val ObjCValueType.llvmType: LLVMTypeRef get() = when (this) { ObjCValueType.UNSIGNED_SHORT -> int16Type ObjCValueType.SHORT -> int16Type ObjCValueType.INT -> int32Type - ObjCValueType.LONG_LONG -> kInt64 + ObjCValueType.LONG_LONG -> int64Type ObjCValueType.FLOAT -> LLVMFloatType()!! ObjCValueType.DOUBLE -> LLVMDoubleType()!! } @@ -1097,15 +1099,17 @@ private val MethodBridgeParameter.objCType: LLVMTypeRef get() = when (this) { is MethodBridgeValueParameter.KotlinResultOutParameter -> pointerType(this.bridge.objCType) } -private val MethodBridge.ReturnValue.objCType: LLVMTypeRef get() = when (this) { - MethodBridge.ReturnValue.Void -> voidType - MethodBridge.ReturnValue.HashCode -> kInt64 // TODO: only for 64-bit platforms - is MethodBridge.ReturnValue.Mapped -> this.bridge.objCType - MethodBridge.ReturnValue.WithError.Success -> ObjCValueType.BOOL.llvmType +private fun MethodBridge.ReturnValue.objCType(context: Context): LLVMTypeRef { + return when (this) { + MethodBridge.ReturnValue.Void -> voidType + MethodBridge.ReturnValue.HashCode -> if (context.is64Bit()) int64Type else int32Type + is MethodBridge.ReturnValue.Mapped -> this.bridge.objCType + MethodBridge.ReturnValue.WithError.Success -> ObjCValueType.BOOL.llvmType - MethodBridge.ReturnValue.Instance.InitResult, - MethodBridge.ReturnValue.Instance.FactoryResult, - is MethodBridge.ReturnValue.WithError.RefOrNull -> ReferenceBridge.objCType + MethodBridge.ReturnValue.Instance.InitResult, + MethodBridge.ReturnValue.Instance.FactoryResult, + is MethodBridge.ReturnValue.WithError.RefOrNull -> ReferenceBridge.objCType + } } private val TypeBridge.objCType: LLVMTypeRef get() = when (this) { diff --git a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/objcexport/ObjCExport.kt b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/objcexport/ObjCExport.kt index 7365f428b6d..b53b27e32ff 100644 --- a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/objcexport/ObjCExport.kt +++ b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/objcexport/ObjCExport.kt @@ -26,6 +26,7 @@ import org.jetbrains.kotlin.descriptors.ModuleDescriptor import org.jetbrains.kotlin.konan.file.File import org.jetbrains.kotlin.konan.target.CompilerOutputKind import org.jetbrains.kotlin.konan.target.KonanTarget +import org.jetbrains.kotlin.konan.target.Family import org.jetbrains.kotlin.konan.target.AppleConfigurables import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.Name @@ -37,7 +38,7 @@ internal class ObjCExport(val codegen: CodeGenerator) { private val target get() = context.config.target internal fun produce() { - if (target != KonanTarget.IOS_ARM64 && target != KonanTarget.IOS_X64 && target != KonanTarget.MACOS_X64) return + if (target.family != Family.IOS && target.family != Family.OSX) return if (!context.config.produce.isNativeBinary) return // TODO: emit RTTI to the same modules as classes belong to. @@ -77,9 +78,9 @@ internal class ObjCExport(val codegen: CodeGenerator) { headerGenerator.translateModule() val framework = File(context.config.outputFile) - val frameworkContents = when (target) { - KonanTarget.IOS_ARM64, KonanTarget.IOS_X64 -> framework - KonanTarget.MACOS_X64 -> framework.child("Versions/A") + val frameworkContents = when(target.family) { + Family.IOS -> framework + Family.OSX -> framework.child("Versions/A") else -> error(target) } @@ -116,10 +117,9 @@ internal class ObjCExport(val codegen: CodeGenerator) { } private fun emitInfoPlist(frameworkContents: File, name: String) { - val directory = when (target) { - KonanTarget.IOS_ARM64, - KonanTarget.IOS_X64 -> frameworkContents - KonanTarget.MACOS_X64 -> frameworkContents.child("Resources").also { it.mkdirs() } + val directory = when { + target.family == Family.IOS -> frameworkContents + target == KonanTarget.MACOS_X64 -> frameworkContents.child("Resources").also { it.mkdirs() } else -> error(target) } @@ -128,7 +128,7 @@ internal class ObjCExport(val codegen: CodeGenerator) { val bundleId = pkg.child(Name.identifier(name)).asString() val platform = when (target) { - KonanTarget.IOS_ARM64 -> "iPhoneOS" + KonanTarget.IOS_ARM32, KonanTarget.IOS_ARM64 -> "iPhoneOS" KonanTarget.IOS_X64 -> "iPhoneSimulator" KonanTarget.MACOS_X64 -> "MacOSX" else -> error(target) @@ -165,6 +165,7 @@ internal class ObjCExport(val codegen: CodeGenerator) { contents.append(when (target) { + KonanTarget.IOS_ARM32, KonanTarget.IOS_ARM64, KonanTarget.IOS_X64 -> """ | MinimumOSVersion @@ -191,6 +192,17 @@ internal class ObjCExport(val codegen: CodeGenerator) { ) } + if (target == KonanTarget.IOS_ARM32) { + contents.append(""" + | UIRequiredDeviceCapabilities + | + | armv7 + | + + """.trimMargin() + ) + } + contents.append(""" diff --git a/konan/konan.properties b/konan/konan.properties index 00adb172680..2ab61dc2da9 100644 --- a/konan/konan.properties +++ b/konan/konan.properties @@ -62,7 +62,33 @@ target-sysroot-6-macos_x64.default = \ target-toolchain-6-macos_x64.default = \ remote:internal -# Apple iOS. +# Apple's 32-bit iOS. +targetToolchain.macos_x64-ios_arm32 = target-toolchain-6-macos_x64 +dependencies.macos_x64-ios_arm32 = \ + libffi-3.2.1-2-darwin-ios \ + clang-llvm-5.0.0-darwin-macos + +target-sysroot-6-ios_arm32.default = \ + remote:internal + +arch.ios_arm32 = armv7 +entrySelector.ios_arm32 = -alias _Konan_main _main +# Shared with 64-bit version. +targetSysRoot.ios_arm32 = target-sysroot-6-ios_arm64 +libffiDir.ios_arm32 = libffi-3.2.1-2-darwin-ios +llvmLtoFlags.ios_arm32 = +llvmLtoOptFlags.ios_arm32 = -O3 -function-sections +linkerNoDebugFlags.ios_arm32 = -S +linkerDynamicFlags.ios_arm32 = -dylib +llvmLtoNooptFlags.ios_arm32 = -O1 +llvmLtoDynamicFlags.ios_arm32 = -relocation-model=pic +linkerKonanFlags.ios_arm32 = -lc++ -lobjc -framework Foundation -sdk_version 11.2 +linkerOptimizationFlags.ios_arm32 = -dead_strip +osVersionMinFlagLd.ios_arm32 = -iphoneos_version_min +osVersionMinFlagClang.ios_arm32 = -miphoneos-version-min +osVersionMin.ios_arm32 = 9.0 + +# Apple's 64-bit iOS. targetToolchain.macos_x64-ios_arm64 = target-toolchain-6-macos_x64 dependencies.macos_x64-ios_arm64 = \ libffi-3.2.1-2-darwin-ios \ @@ -87,7 +113,7 @@ osVersionMinFlagLd.ios_arm64 = -iphoneos_version_min osVersionMinFlagClang.ios_arm64 = -miphoneos-version-min osVersionMin.ios_arm64 = 8.0 -# Apple iOS simulator. +# Apple's iOS simulator. targetToolchain.macos_x64-ios_x64 = target-toolchain-6-macos_x64 dependencies.macos_x64-ios_x64 = \ libffi-3.2.1-1-darwin-ios_sim \ diff --git a/shared/src/main/kotlin/org/jetbrains/kotlin/konan/target/Apple.kt b/shared/src/main/kotlin/org/jetbrains/kotlin/konan/target/Apple.kt index df953e0069a..d223e58ced8 100644 --- a/shared/src/main/kotlin/org/jetbrains/kotlin/konan/target/Apple.kt +++ b/shared/src/main/kotlin/org/jetbrains/kotlin/konan/target/Apple.kt @@ -32,7 +32,7 @@ class AppleConfigurablesImpl( override val absoluteTargetSysRoot: String get() = when (xcodePartsProvider) { is XcodePartsProvider.Local -> when (target) { KonanTarget.MACOS_X64 -> xcodePartsProvider.xcode.macosxSdk - KonanTarget.IOS_ARM64 -> xcodePartsProvider.xcode.iphoneosSdk + KonanTarget.IOS_ARM32, KonanTarget.IOS_ARM64 -> xcodePartsProvider.xcode.iphoneosSdk KonanTarget.IOS_X64 -> xcodePartsProvider.xcode.iphonesimulatorSdk else -> error(target) } diff --git a/shared/src/main/kotlin/org/jetbrains/kotlin/konan/target/ClangArgs.kt b/shared/src/main/kotlin/org/jetbrains/kotlin/konan/target/ClangArgs.kt index bee2179cbb8..035b05505d8 100644 --- a/shared/src/main/kotlin/org/jetbrains/kotlin/konan/target/ClangArgs.kt +++ b/shared/src/main/kotlin/org/jetbrains/kotlin/konan/target/ClangArgs.kt @@ -55,6 +55,9 @@ class ClangArgs(private val configurables: Configurables) : Configurables by con KonanTarget.MACOS_X64 -> listOf("--sysroot=$absoluteTargetSysRoot", "-mmacosx-version-min=10.11") + KonanTarget.IOS_ARM32 -> + listOf("-stdlib=libc++", "-arch", "armv7", "-isysroot", absoluteTargetSysRoot, "-miphoneos-version-min=9.0.0") + KonanTarget.IOS_ARM64 -> listOf("-stdlib=libc++", "-arch", "arm64", "-isysroot", absoluteTargetSysRoot, "-miphoneos-version-min=8.0.0") @@ -124,7 +127,7 @@ class ClangArgs(private val configurables: Configurables) : Configurables by con KonanTarget.MACOS_X64 -> listOf("-DKONAN_OSX=1", "-DKONAN_OBJC_INTEROP=1") - KonanTarget.IOS_ARM64 -> + KonanTarget.IOS_ARM32, KonanTarget.IOS_ARM64 -> listOf("-DKONAN_OBJC_INTEROP=1") KonanTarget.IOS_X64 -> diff --git a/shared/src/main/kotlin/org/jetbrains/kotlin/konan/target/ConfigurablesImpl.kt b/shared/src/main/kotlin/org/jetbrains/kotlin/konan/target/ConfigurablesImpl.kt index 6def254d569..d7582cbdf38 100644 --- a/shared/src/main/kotlin/org/jetbrains/kotlin/konan/target/ConfigurablesImpl.kt +++ b/shared/src/main/kotlin/org/jetbrains/kotlin/konan/target/ConfigurablesImpl.kt @@ -42,7 +42,7 @@ fun loadConfigurables(target: KonanTarget, properties: Properties, baseDir: Stri LinuxConfigurablesImpl(target, properties, baseDir) KonanTarget.LINUX_MIPS32, KonanTarget.LINUX_MIPSEL32 -> LinuxMIPSConfigurablesImpl(target, properties, baseDir) - KonanTarget.MACOS_X64, KonanTarget.IOS_ARM64, KonanTarget.IOS_X64 -> + KonanTarget.MACOS_X64, KonanTarget.IOS_ARM32, KonanTarget.IOS_ARM64, KonanTarget.IOS_X64 -> AppleConfigurablesImpl(target, properties, baseDir) KonanTarget.ANDROID_ARM32, KonanTarget.ANDROID_ARM64 -> AndroidConfigurablesImpl(target, properties, baseDir) diff --git a/shared/src/main/kotlin/org/jetbrains/kotlin/konan/target/KonanTarget.kt b/shared/src/main/kotlin/org/jetbrains/kotlin/konan/target/KonanTarget.kt index dcb9fe1b582..1a90c86af0c 100644 --- a/shared/src/main/kotlin/org/jetbrains/kotlin/konan/target/KonanTarget.kt +++ b/shared/src/main/kotlin/org/jetbrains/kotlin/konan/target/KonanTarget.kt @@ -43,6 +43,7 @@ enum class Architecture(val bitness: Int) { sealed class KonanTarget(override val name: String, val family: Family, val architecture: Architecture) : Named { object ANDROID_ARM32 : KonanTarget( "android_arm32", Family.ANDROID, Architecture.ARM32) object ANDROID_ARM64 : KonanTarget( "android_arm64", Family.ANDROID, Architecture.ARM64) + object IOS_ARM32 : KonanTarget( "ios_arm32", Family.IOS, Architecture.ARM32) object IOS_ARM64 : KonanTarget( "ios_arm64", Family.IOS, Architecture.ARM64) object IOS_X64 : KonanTarget( "ios_x64", Family.IOS, Architecture.X64) object LINUX_X64 : KonanTarget( "linux_x64", Family.LINUX, Architecture.X64) @@ -127,7 +128,13 @@ open class HostManager(protected val distribution: Distribution = Distribution() fun targetManager(userRequest: String? = null): TargetManager = TargetManagerImpl(userRequest, this) // TODO: need a better way to enumerated predefined targets. - private val predefinedTargets = listOf(ANDROID_ARM32, ANDROID_ARM64, IOS_ARM64, IOS_X64, LINUX_X64, MINGW_X64, MACOS_X64, LINUX_ARM32_HFP, LINUX_MIPS32, LINUX_MIPSEL32, WASM32) + private val predefinedTargets = listOf( + ANDROID_ARM32, ANDROID_ARM64, + IOS_ARM32, IOS_ARM64, IOS_X64, + LINUX_X64, LINUX_ARM32_HFP, LINUX_MIPS32, LINUX_MIPSEL32, + MINGW_X64, + MACOS_X64, + WASM32) private val zephyrSubtargets = distribution.availableSubTarget("zephyr").map { ZEPHYR(it) } @@ -177,6 +184,7 @@ open class HostManager(protected val distribution: Distribution = Distribution() ) + zephyrSubtargets KonanTarget.MACOS_X64 -> listOf( KonanTarget.MACOS_X64, + KonanTarget.IOS_ARM32, KonanTarget.IOS_ARM64, KonanTarget.IOS_X64, KonanTarget.ANDROID_ARM32, @@ -248,6 +256,7 @@ open class HostManager(protected val distribution: Distribution = Distribution() "macos" to "macos_x64", "imac" to "macos_x64", "raspberrypi" to "linux_arm32_hfp", + "iphone32" to "ios_arm32", "iphone" to "ios_arm64", "ipad" to "ios_arm64", "ios" to "ios_arm64", diff --git a/shared/src/main/kotlin/org/jetbrains/kotlin/konan/target/Linker.kt b/shared/src/main/kotlin/org/jetbrains/kotlin/konan/target/Linker.kt index 380dc5aab25..c6ce3f6685c 100644 --- a/shared/src/main/kotlin/org/jetbrains/kotlin/konan/target/Linker.kt +++ b/shared/src/main/kotlin/org/jetbrains/kotlin/konan/target/Linker.kt @@ -388,7 +388,7 @@ fun linker(configurables: Configurables): LinkerFlags = LinuxBasedLinker(configurables as LinuxConfigurables) KonanTarget.LINUX_MIPS32, KonanTarget.LINUX_MIPSEL32 -> LinuxBasedLinker(configurables as LinuxMIPSConfigurables) - KonanTarget.MACOS_X64, KonanTarget.IOS_ARM64, KonanTarget.IOS_X64 -> + KonanTarget.MACOS_X64, KonanTarget.IOS_ARM32, KonanTarget.IOS_ARM64, KonanTarget.IOS_X64 -> MacOSBasedLinker(configurables as AppleConfigurables) KonanTarget.ANDROID_ARM32, KonanTarget.ANDROID_ARM64 -> AndroidLinker(configurables as AndroidConfigurables) diff --git a/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KonanCompileConfig.kt b/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KonanCompileConfig.kt index ebfb8dc5db6..9d23e720e12 100644 --- a/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KonanCompileConfig.kt +++ b/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KonanCompileConfig.kt @@ -126,7 +126,7 @@ open class KonanFramework(name: String, get() = project.konanBinBaseDir override fun targetIsSupported(target: KonanTarget): Boolean = - target == MACOS_X64 || target == IOS_ARM64 || target == IOS_X64 + target == MACOS_X64 || target == IOS_ARM32 || target == IOS_ARM64 || target == IOS_X64 } open class KonanLibrary(name: String,