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

org.jetbrains.kotlin.gradle.targets.js.ir.KotlinWasmTargetPreset.kt Maven / Gradle / Ivy

There is a newer version: 2.1.0-Beta1
Show newest version
/*
 * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.
 * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
 */

package org.jetbrains.kotlin.gradle.targets.js.ir

import org.gradle.api.Project
import org.jetbrains.kotlin.gradle.dsl.multiplatformExtension
import org.jetbrains.kotlin.gradle.plugin.AbstractKotlinTargetConfigurator
import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType
import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinCompilationFactory
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinOnlyTargetPreset
import org.jetbrains.kotlin.gradle.utils.runProjectConfigurationHealthCheckWhenEvaluated

class KotlinWasmTargetPreset(
    project: Project,
) : KotlinOnlyTargetPreset(project) {
    override val platformType: KotlinPlatformType = KotlinPlatformType.wasm

    override fun instantiateTarget(name: String): KotlinJsIrTarget {
        if (!PropertiesProvider(project).wasmStabilityNoWarn) {
            project.logger.warn("New 'wasm' target is Work-in-Progress and is subject to change without notice.")
        }

        val irTarget = project.objects.newInstance(KotlinJsIrTarget::class.java, project, KotlinPlatformType.wasm, false)
        irTarget.isMpp = true

        project.runProjectConfigurationHealthCheckWhenEvaluated {
            if (!irTarget.isBrowserConfigured && !irTarget.isNodejsConfigured && !irTarget.isD8Configured) {
                project.logger.warn(
                    """
                    Please choose a JavaScript environment to run tests.
                    kotlin {
                        wasm {
                            // To build distributions for and run tests on browser, Node.js or d8 use one:
                            browser()
                            nodejs()
                            d8()
                        }
                    }
                """.trimIndent()
                )
            }
        }

        return irTarget
    }

    override fun createKotlinTargetConfigurator(): AbstractKotlinTargetConfigurator =
        KotlinJsIrTargetConfigurator()

    override fun getName(): String = WASM_PRESET_NAME

    public override fun createCompilationFactory(
        forTarget: KotlinJsIrTarget
    ): KotlinCompilationFactory =
        KotlinJsIrCompilationFactory(forTarget)

    companion object {
        private const val WASM_PRESET_NAME = "wasm"
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy