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

org.jetbrains.kotlin.gradle.targets.native.NativeBinaryTypes.kt Maven / Gradle / Ivy

There is a newer version: 2.0.20-RC
Show newest version
@file:Suppress("PackageDirectoryMismatch") // Old package for compatibility
package org.jetbrains.kotlin.gradle.plugin.mpp

import org.gradle.api.Named
import org.jetbrains.kotlin.gradle.plugin.mpp.Framework.BitcodeEmbeddingMode
import org.jetbrains.kotlin.konan.target.Architecture.ARM32
import org.jetbrains.kotlin.konan.target.Architecture.ARM64
import org.jetbrains.kotlin.konan.target.CompilerOutputKind
import org.jetbrains.kotlin.konan.target.Family.*
import org.jetbrains.kotlin.konan.target.KonanTarget

enum class NativeBuildType(
    val optimized: Boolean,
    val debuggable: Boolean,
    private val embedBitcodeForAppleDevices: BitcodeEmbeddingMode
) : Named {
    RELEASE(true, false, BitcodeEmbeddingMode.BITCODE),
    DEBUG(false, true, BitcodeEmbeddingMode.MARKER);

    override fun getName(): String = name.toLowerCase()

    fun embedBitcode(target: KonanTarget) = with(target) {
        if (family in listOf(IOS, WATCHOS, TVOS) && architecture in listOf(ARM32, ARM64)) {
            embedBitcodeForAppleDevices
        } else {
            BitcodeEmbeddingMode.DISABLE
        }
    }

    companion object {
        val DEFAULT_BUILD_TYPES = setOf(DEBUG, RELEASE)
    }
}

enum class NativeOutputKind(
    val compilerOutputKind: CompilerOutputKind,
    val taskNameClassifier: String,
    val description: String = taskNameClassifier
) {
    EXECUTABLE(
        CompilerOutputKind.PROGRAM,
        "executable",
        description = "an executable"
    ),
    TEST(
        CompilerOutputKind.PROGRAM,
        "test",
        description = "a test executable"
    ),
    DYNAMIC(
        CompilerOutputKind.DYNAMIC,
        "shared",
        description = "a dynamic library"
    ) {
        override fun availableFor(target: KonanTarget) = target != KonanTarget.WASM32
    },
    STATIC(
        CompilerOutputKind.STATIC,
        "static",
        description = "a static library"
    ) {
        override fun availableFor(target: KonanTarget) = target != KonanTarget.WASM32
    },
    FRAMEWORK(
        CompilerOutputKind.FRAMEWORK,
        "framework",
        description = "a framework"
    ) {
        override fun availableFor(target: KonanTarget) =
            target.family.isAppleFamily
    };

    open fun availableFor(target: KonanTarget) = true
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy