[Gradle, JS] Add binary dukat mode

^KT-42339 fixed

[Gradle, JS] Prepare sources and binary modes for dukat

^KT-42339 fixed
This commit is contained in:
Ilya Goncharov
2020-09-25 18:05:32 +03:00
parent f50851a982
commit 500fceb438
5 changed files with 45 additions and 1 deletions
@@ -13,6 +13,7 @@ import org.jetbrains.kotlin.gradle.plugin.Kotlin2JsPlugin.Companion.NOWARN_2JS_F
import org.jetbrains.kotlin.gradle.plugin.KotlinJsCompilerType.Companion.jsCompilerProperty
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinMultiplatformPlugin
import org.jetbrains.kotlin.gradle.plugin.statistics.KotlinBuildStatsService
import org.jetbrains.kotlin.gradle.targets.js.dukat.DukatMode
import org.jetbrains.kotlin.gradle.targets.native.DisabledNativeTargetsReporter
import org.jetbrains.kotlin.gradle.tasks.AbstractKotlinCompile
import org.jetbrains.kotlin.gradle.tasks.CacheBuilder
@@ -216,6 +217,12 @@ internal class PropertiesProvider private constructor(private val project: Proje
val jsCompiler: KotlinJsCompilerType
get() = property(jsCompilerProperty)?.let { KotlinJsCompilerType.byArgumentOrNull(it) } ?: KotlinJsCompilerType.LEGACY
/**
* Default mode of generating of Dukat
*/
val dukatMode: DukatMode?
get() = property("dukat.mode")?.let { DukatMode.byArgumentOrNull(it) }
/**
* Use Kotlin/JS backend compiler type
*/
@@ -17,8 +17,10 @@ import org.jetbrains.kotlin.gradle.dsl.KotlinJsOptionsImpl
import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation
import org.jetbrains.kotlin.gradle.plugin.KotlinCompilationWithResources
import org.jetbrains.kotlin.gradle.plugin.KotlinTarget
import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider
import org.jetbrains.kotlin.gradle.targets.js.KotlinJsTarget
import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsSubTargetContainerDsl
import org.jetbrains.kotlin.gradle.targets.js.dukat.DukatMode
import org.jetbrains.kotlin.gradle.targets.js.ir.JsBinary
import org.jetbrains.kotlin.gradle.targets.js.ir.KotlinJsBinaryContainer
import org.jetbrains.kotlin.gradle.targets.js.npm.PackageJson
@@ -30,6 +32,13 @@ open class KotlinJsCompilation(
name: String
) : AbstractKotlinCompilationToRunnableFiles<KotlinJsOptions>(target, name), KotlinCompilationWithResources<KotlinJsOptions> {
private val kotlinProperties = PropertiesProvider(target.project)
internal val dukatMode: DukatMode
get() = kotlinProperties.dukatMode ?: defaultDukatMode
protected open val defaultDukatMode: DukatMode = DukatMode.BINARY
override val kotlinOptions: KotlinJsOptions = KotlinJsOptionsImpl()
internal val binaries: KotlinJsBinaryContainer =
@@ -25,7 +25,15 @@ internal class DukatCompilationResolverPlugin(
val separateTaskName = npmProject.compilation.disambiguateName("generateExternals")
init {
compilation.defaultSourceSet.kotlin.srcDir(npmProject.externalsDir)
when (compilation.dukatMode) {
DukatMode.SOURCE -> compilation.defaultSourceSet.kotlin.srcDir(npmProject.externalsDir)
DukatMode.BINARY -> {
project.dependencies.add(
compilation.compileDependencyConfigurationName,
project.file(npmProject.externalsDir)
)
}
}
val integratedTask = project.registerTask<IntegratedDukatTask>(
integratedTaskName,
@@ -0,0 +1,16 @@
/*
* 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.dukat
enum class DukatMode {
SOURCE,
BINARY;
companion object {
fun byArgumentOrNull(argument: String): DukatMode? =
values().firstOrNull { it.name.equals(argument, ignoreCase = true) }
}
}
@@ -9,6 +9,7 @@ import org.gradle.api.file.SourceDirectorySet
import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet
import org.jetbrains.kotlin.gradle.plugin.KotlinTarget
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJsCompilation
import org.jetbrains.kotlin.gradle.targets.js.dukat.DukatMode
import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName
class KotlinJsIrCompilation(
@@ -16,6 +17,9 @@ class KotlinJsIrCompilation(
name: String
) : KotlinJsCompilation(target, name) {
override val defaultDukatMode: DukatMode
get() = DukatMode.SOURCE
internal val allSources: MutableSet<SourceDirectorySet> = mutableSetOf()
override fun addSourcesToCompileTask(sourceSet: KotlinSourceSet, addAsCommonSources: Lazy<Boolean>) {