[JS IR] Build stdlib using compiler from repo
Previously JS IR versions of stdlib and kotlin-test were build
by default using compiler previously built on a buildserver.
It had some issues:
- This required us to advance bootstrap every time we made any
incompatible IR changes. This happens often since IR ABI is
not quite stable yet.
- We never tested the exact combination of compiler and stdlib we publish
We tested:
- new compiler with new stdlib build by new compiler (in box tests)
- old compiler with new stdlib build by old compiler (in stdlib tests)
We published:
- new compiler with new stdlib build by old compiler
After this change JS IR compiler tests, builds and publishes
single configuration:
new compiler with new stdlib build by new compiler
JS IR stdlib and kotlin-test are now built using JavaExec of CLI instead
of Gradle plugin to avoid troubles of loading a freshly built plugin.
This also allows to have a granular dependencies: we don't rebuild klib
if we changed a lowering in a compiler backend, but we do rebuild it if
we changed IR serialization algorithm.
This commit is contained in:
+6
-1
@@ -55,6 +55,9 @@ pill {
|
||||
}
|
||||
|
||||
val isTeamcityBuild = project.kotlinBuildProperties.isTeamcityBuild
|
||||
val includeStdlibJsIr by extra(
|
||||
findProperty("include.stdlib.js.ir")?.let { it.toString().toBoolean() } ?: isTeamcityBuild
|
||||
)
|
||||
|
||||
val configuredJdks: List<JdkId> =
|
||||
getConfiguredJdks().also {
|
||||
@@ -259,7 +262,9 @@ val coreLibProjects = listOfNotNull(
|
||||
":kotlin-stdlib",
|
||||
":kotlin-stdlib-common",
|
||||
":kotlin-stdlib-js",
|
||||
":kotlin-stdlib-js-ir",
|
||||
// Exclude JS IR from core libs because it depends on local compiler build, which
|
||||
// in turn depends on local JVM stdlib. It slows down library testing.
|
||||
":kotlin-stdlib-js-ir".takeIf { includeStdlibJsIr },
|
||||
":kotlin-stdlib-jdk7",
|
||||
":kotlin-stdlib-jdk8",
|
||||
":kotlin-test:kotlin-test-common",
|
||||
|
||||
@@ -0,0 +1,18 @@
|
||||
plugins {
|
||||
kotlin("jvm")
|
||||
id("jps-compatible")
|
||||
}
|
||||
|
||||
jvmTarget = "1.8"
|
||||
|
||||
dependencies {
|
||||
compile(project(":compiler:cli"))
|
||||
compile(project(":compiler:ir.serialization.js"))
|
||||
compile(project(":kotlin-reflect"))
|
||||
compile(intellijDep()) { includeJars("picocontainer", "trove4j", "guava", "jdom", rootProject = rootProject) }
|
||||
compile(intellijCoreDep()) { includeJars("intellij-core") }
|
||||
}
|
||||
|
||||
sourceSets {
|
||||
"main" { projectDefault() }
|
||||
}
|
||||
+8
-4
@@ -3,15 +3,16 @@
|
||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
// Internal CLI for building JS IR libraries
|
||||
|
||||
package org.jetbrains.kotlin.ir.backend.js
|
||||
|
||||
import com.intellij.openapi.Disposable
|
||||
import com.intellij.openapi.vfs.StandardFileSystems
|
||||
import com.intellij.openapi.vfs.VirtualFileManager
|
||||
import com.intellij.psi.PsiManager
|
||||
import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity
|
||||
import org.jetbrains.kotlin.cli.common.messages.GroupingMessageCollector
|
||||
import org.jetbrains.kotlin.cli.common.messages.MessageCollector
|
||||
import org.jetbrains.kotlin.cli.common.CLIConfigurationKeys
|
||||
import org.jetbrains.kotlin.cli.common.messages.*
|
||||
import org.jetbrains.kotlin.cli.jvm.compiler.EnvironmentConfigFiles
|
||||
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment
|
||||
import org.jetbrains.kotlin.config.*
|
||||
@@ -27,6 +28,10 @@ fun buildConfiguration(environment: KotlinCoreEnvironment, moduleName: String):
|
||||
val runtimeConfiguration = environment.configuration.copy()
|
||||
runtimeConfiguration.put(CommonConfigurationKeys.MODULE_NAME, moduleName)
|
||||
runtimeConfiguration.put(JSConfigurationKeys.MODULE_KIND, ModuleKind.PLAIN)
|
||||
runtimeConfiguration.put(
|
||||
CLIConfigurationKeys.MESSAGE_COLLECTOR_KEY,
|
||||
PrintingMessageCollector(System.err, MessageRenderer.PLAIN_RELATIVE_PATHS, false)
|
||||
)
|
||||
|
||||
runtimeConfiguration.languageVersionSettings = LanguageVersionSettingsImpl(
|
||||
LanguageVersion.LATEST_STABLE, ApiVersion.LATEST_STABLE,
|
||||
@@ -95,7 +100,6 @@ private fun listOfKtFilesFrom(paths: List<String>): List<String> {
|
||||
}
|
||||
|
||||
fun main(args: Array<String>) {
|
||||
|
||||
val inputFiles = mutableListOf<String>()
|
||||
var outputPath: String? = null
|
||||
val dependencies = mutableListOf<String>()
|
||||
@@ -39,7 +39,7 @@ sourceSets {
|
||||
|
||||
projectTest(parallel = true) {
|
||||
workingDir = rootDir
|
||||
dependsOn(":compiler:ir.serialization.js:packFullRuntimeKLib")
|
||||
dependsOn(":kotlin-stdlib-js-ir:packFullRuntimeKLib")
|
||||
}
|
||||
|
||||
testsJar()
|
||||
|
||||
@@ -26,197 +26,4 @@ sourceSets {
|
||||
"test" { projectDefault() }
|
||||
}
|
||||
|
||||
val unimplementedNativeBuiltIns =
|
||||
(file("$rootDir/core/builtins/native/kotlin/").list().toSet() - file("$rootDir/libraries/stdlib/js-ir/builtins/").list())
|
||||
.map { "core/builtins/native/kotlin/$it" }
|
||||
|
||||
// Required to compile native builtins with the rest of runtime
|
||||
val builtInsHeader = """@file:Suppress(
|
||||
"NON_ABSTRACT_FUNCTION_WITH_NO_BODY",
|
||||
"MUST_BE_INITIALIZED_OR_BE_ABSTRACT",
|
||||
"EXTERNAL_TYPE_EXTENDS_NON_EXTERNAL_TYPE",
|
||||
"PRIMARY_CONSTRUCTOR_DELEGATION_CALL_EXPECTED",
|
||||
"WRONG_MODIFIER_TARGET"
|
||||
)
|
||||
"""
|
||||
|
||||
val fullRuntimeSources by task<Sync> {
|
||||
|
||||
val sources = listOf(
|
||||
"core/builtins/src/kotlin/",
|
||||
"libraries/stdlib/common/src/",
|
||||
"libraries/stdlib/src/kotlin/",
|
||||
"libraries/stdlib/unsigned/",
|
||||
"libraries/stdlib/js/src/",
|
||||
"libraries/stdlib/js/runtime/",
|
||||
"libraries/stdlib/js-ir/builtins/",
|
||||
"libraries/stdlib/js-ir/src/",
|
||||
"libraries/stdlib/js-ir/runtime/",
|
||||
|
||||
// TODO get rid - move to test module
|
||||
"js/js.translator/testData/_commonFiles/"
|
||||
) + unimplementedNativeBuiltIns
|
||||
|
||||
val excluded = listOf(
|
||||
// stdlib/js/src/generated is used exclusively for current `js-v1` backend.
|
||||
"libraries/stdlib/js/src/generated/**",
|
||||
|
||||
// JS-specific optimized version of emptyArray() already defined
|
||||
"core/builtins/src/kotlin/ArrayIntrinsics.kt"
|
||||
)
|
||||
|
||||
sources.forEach { path ->
|
||||
from("$rootDir/$path") {
|
||||
into(path.dropLastWhile { it != '/' })
|
||||
excluded.filter { it.startsWith(path) }.forEach {
|
||||
exclude(it.substring(path.length))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
into("$buildDir/fullRuntime/src")
|
||||
|
||||
doLast {
|
||||
unimplementedNativeBuiltIns.forEach { path ->
|
||||
val file = File("$buildDir/fullRuntime/src/$path")
|
||||
val sourceCode = builtInsHeader + file.readText()
|
||||
file.writeText(sourceCode)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
val reducedRuntimeSources by task<Sync> {
|
||||
dependsOn(fullRuntimeSources)
|
||||
|
||||
from(fullRuntimeSources.get().outputs.files.singleFile) {
|
||||
exclude(
|
||||
listOf(
|
||||
"libraries/stdlib/unsigned/**",
|
||||
"libraries/stdlib/common/src/generated/_Arrays.kt",
|
||||
"libraries/stdlib/common/src/generated/_Collections.kt",
|
||||
"libraries/stdlib/common/src/generated/_Comparisons.kt",
|
||||
"libraries/stdlib/common/src/generated/_Maps.kt",
|
||||
"libraries/stdlib/common/src/generated/_Sequences.kt",
|
||||
"libraries/stdlib/common/src/generated/_Sets.kt",
|
||||
"libraries/stdlib/common/src/generated/_Strings.kt",
|
||||
"libraries/stdlib/common/src/generated/_UArrays.kt",
|
||||
"libraries/stdlib/common/src/generated/_URanges.kt",
|
||||
"libraries/stdlib/common/src/generated/_UCollections.kt",
|
||||
"libraries/stdlib/common/src/generated/_UComparisons.kt",
|
||||
"libraries/stdlib/common/src/generated/_USequences.kt",
|
||||
"libraries/stdlib/common/src/kotlin/SequencesH.kt",
|
||||
"libraries/stdlib/common/src/kotlin/TextH.kt",
|
||||
"libraries/stdlib/common/src/kotlin/UMath.kt",
|
||||
"libraries/stdlib/common/src/kotlin/collections/**",
|
||||
"libraries/stdlib/common/src/kotlin/ioH.kt",
|
||||
"libraries/stdlib/js-ir/runtime/collectionsHacks.kt",
|
||||
"libraries/stdlib/js-ir/src/generated/**",
|
||||
"libraries/stdlib/js-ir/src/kotlin/text/**",
|
||||
"libraries/stdlib/js/src/jquery/**",
|
||||
"libraries/stdlib/js/src/org.w3c/**",
|
||||
"libraries/stdlib/js/src/kotlin/char.kt",
|
||||
"libraries/stdlib/js/src/kotlin/collections.kt",
|
||||
"libraries/stdlib/js/src/kotlin/collections/**",
|
||||
"libraries/stdlib/js/src/kotlin/time/**",
|
||||
"libraries/stdlib/js/src/kotlin/console.kt",
|
||||
"libraries/stdlib/js/src/kotlin/coreDeprecated.kt",
|
||||
"libraries/stdlib/js/src/kotlin/date.kt",
|
||||
"libraries/stdlib/js/src/kotlin/debug.kt",
|
||||
"libraries/stdlib/js/src/kotlin/grouping.kt",
|
||||
"libraries/stdlib/js/src/kotlin/json.kt",
|
||||
"libraries/stdlib/js/src/kotlin/promise.kt",
|
||||
"libraries/stdlib/js/src/kotlin/regexp.kt",
|
||||
"libraries/stdlib/js/src/kotlin/sequence.kt",
|
||||
"libraries/stdlib/js/src/kotlin/text/**",
|
||||
"libraries/stdlib/js/src/kotlin/reflect/KTypeHelpers.kt",
|
||||
"libraries/stdlib/js/src/kotlin/reflect/KTypeParameterImpl.kt",
|
||||
"libraries/stdlib/js/src/kotlin/reflect/KTypeImpl.kt",
|
||||
"libraries/stdlib/src/kotlin/collections/**",
|
||||
"libraries/stdlib/src/kotlin/experimental/bitwiseOperations.kt",
|
||||
"libraries/stdlib/src/kotlin/properties/Delegates.kt",
|
||||
"libraries/stdlib/src/kotlin/random/URandom.kt",
|
||||
"libraries/stdlib/src/kotlin/text/**",
|
||||
"libraries/stdlib/src/kotlin/time/**",
|
||||
"libraries/stdlib/src/kotlin/util/KotlinVersion.kt",
|
||||
"libraries/stdlib/src/kotlin/util/Tuples.kt",
|
||||
"libraries/stdlib/js/src/kotlin/dom/**",
|
||||
"libraries/stdlib/js/src/kotlin/browser/**"
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
from("$rootDir/libraries/stdlib/js-ir/smallRuntime") {
|
||||
into("libraries/stdlib/js-ir/runtime/")
|
||||
}
|
||||
|
||||
into("$buildDir/reducedRuntime/src")
|
||||
}
|
||||
|
||||
|
||||
fun JavaExec.buildKLib(sources: List<String>, dependencies: List<String>, outPath: String, commonSources: List<String>) {
|
||||
inputs.files(sources)
|
||||
outputs.dir(file(outPath).parent)
|
||||
|
||||
classpath = sourceSets.test.get().runtimeClasspath
|
||||
main = "org.jetbrains.kotlin.ir.backend.js.GenerateIrRuntimeKt"
|
||||
workingDir = rootDir
|
||||
args = sources.toList() + listOf("-o", outPath) + dependencies.flatMap { listOf("-d", it) } + commonSources.flatMap { listOf("-c", it) }
|
||||
|
||||
passClasspathInJar()
|
||||
}
|
||||
|
||||
val fullRuntimeDir = buildDir.resolve("fullRuntime/klib")
|
||||
|
||||
val generateFullRuntimeKLib by eagerTask<NoDebugJavaExec> {
|
||||
dependsOn(fullRuntimeSources)
|
||||
|
||||
buildKLib(sources = listOf(fullRuntimeSources.get().outputs.files.singleFile.path),
|
||||
dependencies = emptyList(),
|
||||
outPath = fullRuntimeDir.absolutePath,
|
||||
commonSources = listOf("common", "src", "unsigned").map { "$buildDir/fullRuntime/src/libraries/stdlib/$it" }
|
||||
)
|
||||
}
|
||||
|
||||
val packFullRuntimeKLib by tasks.registering(Jar::class) {
|
||||
dependsOn(generateFullRuntimeKLib)
|
||||
from(fullRuntimeDir)
|
||||
destinationDirectory.set(rootProject.buildDir.resolve("js-ir-runtime"))
|
||||
archiveFileName.set("full-runtime.klib")
|
||||
}
|
||||
|
||||
val generateReducedRuntimeKLib by eagerTask<NoDebugJavaExec> {
|
||||
dependsOn(reducedRuntimeSources)
|
||||
|
||||
val outPath = buildDir.resolve("reducedRuntime/klib").absolutePath
|
||||
buildKLib(sources = listOf(reducedRuntimeSources.get().outputs.files.singleFile.path),
|
||||
dependencies = emptyList(),
|
||||
outPath = outPath,
|
||||
commonSources = listOf("common", "src", "unsigned").map { "$buildDir/reducedRuntime/src/libraries/stdlib/$it" }
|
||||
)
|
||||
}
|
||||
|
||||
val generateWasmRuntimeKLib by eagerTask<NoDebugJavaExec> {
|
||||
buildKLib(sources = listOf("$rootDir/libraries/stdlib/wasm"),
|
||||
dependencies = emptyList(),
|
||||
outPath = "$buildDir/wasmRuntime/klib",
|
||||
commonSources = emptyList()
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
val kotlinTestCommonSources = listOf(
|
||||
"$rootDir/libraries/kotlin.test/annotations-common/src/main",
|
||||
"$rootDir/libraries/kotlin.test/common/src/main"
|
||||
)
|
||||
val generateKotlinTestKLib by eagerTask<NoDebugJavaExec> {
|
||||
dependsOn(generateFullRuntimeKLib)
|
||||
|
||||
buildKLib(
|
||||
sources = listOf("$rootDir/libraries/kotlin.test/js/src/main") + kotlinTestCommonSources,
|
||||
dependencies = listOf("${generateFullRuntimeKLib.outputs.files.singleFile.path}/klib"),
|
||||
outPath = "$buildDir/kotlin.test/klib",
|
||||
commonSources = kotlinTestCommonSources
|
||||
)
|
||||
}
|
||||
|
||||
testsJar {}
|
||||
|
||||
@@ -19,6 +19,8 @@ import org.jetbrains.kotlin.builtins.KotlinBuiltIns
|
||||
import org.jetbrains.kotlin.cli.common.CLIConfigurationKeys
|
||||
import org.jetbrains.kotlin.cli.common.messages.AnalyzerWithCompilerReport
|
||||
import org.jetbrains.kotlin.cli.common.messages.MessageCollector
|
||||
import org.jetbrains.kotlin.cli.common.messages.MessageRenderer
|
||||
import org.jetbrains.kotlin.cli.common.messages.PrintingMessageCollector
|
||||
import org.jetbrains.kotlin.config.*
|
||||
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
|
||||
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
|
||||
@@ -297,8 +299,10 @@ private class ModulesStructure(
|
||||
val builtInsDep = allDependencies.getFullList().find { it.isBuiltIns }
|
||||
|
||||
fun runAnalysis(): JsAnalysisResult {
|
||||
// TODO: Should we not provide default message collector?
|
||||
val messageCollector: MessageCollector =
|
||||
compilerConfiguration.get(CLIConfigurationKeys.MESSAGE_COLLECTOR_KEY) ?: MessageCollector.NONE
|
||||
|
||||
val analyzerWithCompilerReport = AnalyzerWithCompilerReport(
|
||||
messageCollector,
|
||||
compilerConfiguration.languageVersionSettings
|
||||
|
||||
@@ -93,7 +93,7 @@ class CodeConformanceTest : TestCase() {
|
||||
"libraries/tools/kotlin-source-map-loader/.gradle",
|
||||
"libraries/tools/kotlin-source-map-loader/lib",
|
||||
"buildSrc/prepare-deps/build",
|
||||
"compiler/ir/serialization.js/build"
|
||||
"libraries/stdlib/js-ir/build/"
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
@@ -30,12 +30,13 @@ dependencies {
|
||||
testCompileOnly(project(":compiler:frontend"))
|
||||
testCompileOnly(project(":compiler:cli"))
|
||||
testCompileOnly(project(":compiler:cli-js"))
|
||||
testCompileOnly(project(":compiler:cli-js-klib"))
|
||||
testCompileOnly(project(":compiler:util"))
|
||||
testCompileOnly(intellijCoreDep()) { includeJars("intellij-core") }
|
||||
testCompileOnly(intellijDep()) { includeJars("openapi", "idea", "idea_rt", "util") }
|
||||
testCompile(project(":compiler:backend.js"))
|
||||
testCompile(project(":compiler:backend.wasm"))
|
||||
testCompile(projectTests(":compiler:ir.serialization.js"))
|
||||
testCompile(project(":kotlin-stdlib-js-ir"))
|
||||
testCompile(project(":js:js.translator"))
|
||||
testCompile(project(":js:js.serializer"))
|
||||
testCompile(project(":js:js.dce"))
|
||||
@@ -44,6 +45,15 @@ dependencies {
|
||||
testCompile(projectTests(":kotlin-build-common"))
|
||||
testCompile(projectTests(":generators:test-generator"))
|
||||
|
||||
testCompile(intellijCoreDep()) { includeJars("intellij-core") }
|
||||
testCompile(project(":compiler:frontend"))
|
||||
testCompile(project(":compiler:cli"))
|
||||
testCompile(project(":compiler:util"))
|
||||
|
||||
testRuntime(project(":kotlin-reflect"))
|
||||
testRuntime(intellijDep()) { includeJars("picocontainer", "trove4j", "guava", "jdom", rootProject = rootProject) }
|
||||
|
||||
|
||||
val currentOs = OperatingSystem.current()
|
||||
|
||||
val j2v8idString = when {
|
||||
@@ -85,9 +95,9 @@ fun Test.setUpJsBoxTests(jsEnabled: Boolean, jsIrEnabled: Boolean) {
|
||||
dependsOn(":dist")
|
||||
if (jsEnabled) dependsOn(testJsRuntime)
|
||||
if (jsIrEnabled) {
|
||||
dependsOn(":compiler:ir.serialization.js:generateFullRuntimeKLib")
|
||||
dependsOn(":compiler:ir.serialization.js:generateReducedRuntimeKLib")
|
||||
dependsOn(":compiler:ir.serialization.js:generateKotlinTestKLib")
|
||||
dependsOn(":kotlin-stdlib-js-ir:generateFullRuntimeKLib")
|
||||
dependsOn(":kotlin-stdlib-js-ir:generateReducedRuntimeKLib")
|
||||
dependsOn(":kotlin-stdlib-js-ir:generateKotlinTestKLib")
|
||||
}
|
||||
|
||||
exclude("org/jetbrains/kotlin/js/test/wasm/semantics/*")
|
||||
@@ -207,7 +217,7 @@ val unzipJsShell by task<Copy> {
|
||||
|
||||
projectTest("wasmTest", true) {
|
||||
dependsOn(unzipJsShell)
|
||||
dependsOn(":compiler:ir.serialization.js:generateWasmRuntimeKLib")
|
||||
dependsOn(":kotlin-stdlib-js-ir:generateWasmRuntimeKLib")
|
||||
include("org/jetbrains/kotlin/js/test/wasm/semantics/*")
|
||||
val jsShellExecutablePath = File(unzipJsShell.get().destinationDir, "js").absolutePath
|
||||
systemProperty("javascript.engine.path.SpiderMonkey", jsShellExecutablePath)
|
||||
|
||||
@@ -23,9 +23,9 @@ import org.jetbrains.kotlin.utils.fileUtils.withReplacedExtensionOrNull
|
||||
import java.io.File
|
||||
import java.lang.Boolean.getBoolean
|
||||
|
||||
private val fullRuntimeKlib = "compiler/ir/serialization.js/build/fullRuntime/klib"
|
||||
private val defaultRuntimeKlib = "compiler/ir/serialization.js/build/reducedRuntime/klib"
|
||||
private val kotlinTestKLib = "compiler/ir/serialization.js/build/kotlin.test/klib"
|
||||
private val fullRuntimeKlib = "libraries/stdlib/js-ir/build/fullRuntime/klib"
|
||||
private val defaultRuntimeKlib = "libraries/stdlib/js-ir/build/reducedRuntime/klib"
|
||||
private val kotlinTestKLib = "libraries/stdlib/js-ir/build/kotlin.test/klib"
|
||||
|
||||
abstract class BasicIrBoxTest(
|
||||
pathToTestDir: String,
|
||||
|
||||
@@ -35,7 +35,7 @@ import java.io.File
|
||||
import java.lang.Boolean.getBoolean
|
||||
|
||||
private val wasmRuntimeKlib =
|
||||
loadKlib("compiler/ir/serialization.js/build/wasmRuntime/klib")
|
||||
loadKlib("libraries/stdlib/js-ir/build/wasmRuntime/klib")
|
||||
|
||||
abstract class BasicWasmBoxTest(
|
||||
private val pathToTestDir: String,
|
||||
|
||||
@@ -7,6 +7,7 @@ configurePublishing(project)
|
||||
configurations {
|
||||
sources
|
||||
distJs
|
||||
distLibrary
|
||||
}
|
||||
|
||||
dependencies {
|
||||
@@ -19,7 +20,6 @@ compileKotlin2Js {
|
||||
kotlinOptions.freeCompilerArgs = [
|
||||
"-Xallow-kotlin-package",
|
||||
"-Xuse-experimental=kotlin.contracts.ExperimentalContracts",
|
||||
"-Xir-produce-klib-dir"
|
||||
]
|
||||
kotlinOptions {
|
||||
moduleKind = "umd"
|
||||
@@ -42,15 +42,39 @@ compileTestKotlin2Js {
|
||||
archivesBaseName = 'kotlin-test-js'
|
||||
|
||||
jar {
|
||||
enabled false
|
||||
}
|
||||
|
||||
task libraryJarWithoutIr(type: Jar, dependsOn: compileKotlin2Js) {
|
||||
classifier = null
|
||||
destinationDirectory = file("$buildDir/lib/dist")
|
||||
from("$buildDir/classes/main")
|
||||
manifestAttributes(manifest, project, 'Test')
|
||||
}
|
||||
|
||||
task libraryJarWithIr(type: Zip, dependsOn: libraryJarWithoutIr) {
|
||||
archiveExtension = "jar"
|
||||
destinationDirectory = file("$buildDir/libs")
|
||||
|
||||
duplicatesStrategy DuplicatesStrategy.FAIL
|
||||
|
||||
from zipTree(libraryJarWithoutIr.archiveFile)
|
||||
if (rootProject.includeStdlibJsIr) {
|
||||
def irKlib = tasks.getByPath(":kotlin-stdlib-js-ir:generateKotlinTestKLib")
|
||||
dependsOn(irKlib)
|
||||
from fileTree("${irKlib.outputs.files.singleFile.path}/klib")
|
||||
}
|
||||
}
|
||||
|
||||
task sourcesJar(type: Jar, dependsOn: classes) {
|
||||
classifier = 'sources'
|
||||
from (sourceSets.main.allSource)
|
||||
}
|
||||
|
||||
artifacts {
|
||||
runtime libraryJarWithoutIr
|
||||
archives libraryJarWithIr
|
||||
distLibrary libraryJarWithoutIr
|
||||
archives sourcesJar
|
||||
sources sourcesJar
|
||||
distJs(file(compileKotlin2Js.kotlinOptions.outputFile)) {
|
||||
|
||||
@@ -32,7 +32,11 @@ task populateNodeModules(type: Copy, dependsOn: compileKotlin2Js) {
|
||||
|
||||
from {
|
||||
configurations.nodeModules.collect {
|
||||
zipTree(it.absolutePath).matching { include '*.js' }
|
||||
// WORKAROUND: Some JS IR jars were absent and caused this task to fail.
|
||||
// They don't contain .js thus we can skip them.
|
||||
if (it.exists()) {
|
||||
zipTree(it.absolutePath).matching { include '*.js' }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -66,7 +66,7 @@ abstract class AbstractJsReplTest : Closeable {
|
||||
configuration.put(CommonConfigurationKeys.MODULE_NAME, "repl.kts")
|
||||
val scriptConfiguration = ScriptCompilationConfiguration {
|
||||
baseClass("kotlin.Any")
|
||||
dependencies.append(JsDependency("compiler/ir/serialization.js/build/fullRuntime/klib"))
|
||||
dependencies.append(JsDependency("libraries/stdlib/js-ir/build/fullRuntime/klib"))
|
||||
platform.put("JS")
|
||||
}
|
||||
configuration.add(
|
||||
|
||||
@@ -1,198 +0,0 @@
|
||||
plugins {
|
||||
id "com.github.node-gradle.node"
|
||||
}
|
||||
|
||||
description = 'Kotlin Standard Library for JS IR'
|
||||
|
||||
apply plugin: 'kotlin-platform-js'
|
||||
apply plugin: 'idea'
|
||||
|
||||
def originalBuiltinsDir = "${rootDir}/core/builtins"
|
||||
def builtinsSrcDir = "${buildDir}/builtin-sources"
|
||||
def nativeBuiltinsSrcDir = "${buildDir}/native-builtin-sources"
|
||||
|
||||
// Sync native built-ins to separate directory because we don't
|
||||
// need them all -- some of them are implemented as proper code in 'js-ir/builtins'.
|
||||
// Also, they don't compile on its own without error suppressing.
|
||||
task prepareNativeBuiltinsSources(type: Sync) {
|
||||
from("${originalBuiltinsDir}/native/kotlin") {
|
||||
include "Annotation.kt"
|
||||
include "Any.kt"
|
||||
include "Array.kt"
|
||||
include "Boolean.kt"
|
||||
include "CharSequence.kt"
|
||||
include "Comparable.kt"
|
||||
include "Coroutines.kt"
|
||||
include "Iterator.kt"
|
||||
include "Nothing.kt"
|
||||
include "Number.kt"
|
||||
include "String.kt"
|
||||
}
|
||||
|
||||
into nativeBuiltinsSrcDir
|
||||
|
||||
doLast {
|
||||
(new File(nativeBuiltinsSrcDir)).list().each { path ->
|
||||
def file = new File("${nativeBuiltinsSrcDir}/${path}")
|
||||
def sourceCode = """\
|
||||
@file:Suppress(
|
||||
"NON_ABSTRACT_FUNCTION_WITH_NO_BODY",
|
||||
"MUST_BE_INITIALIZED_OR_BE_ABSTRACT",
|
||||
"EXTERNAL_TYPE_EXTENDS_NON_EXTERNAL_TYPE",
|
||||
"PRIMARY_CONSTRUCTOR_DELEGATION_CALL_EXPECTED",
|
||||
"WRONG_MODIFIER_TARGET"
|
||||
)
|
||||
""".stripIndent() + file.getText()
|
||||
file.setText(sourceCode)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
task prepareBuiltinsSources(type: Sync) {
|
||||
from("${originalBuiltinsDir}/src/kotlin/") {
|
||||
exclude "ArrayIntrinsics.kt" // Used only for JVM
|
||||
}
|
||||
into builtinsSrcDir
|
||||
}
|
||||
|
||||
def jsCommonDir = "${buildDir}/common-js-sources"
|
||||
|
||||
task prepareCommonJsSources(type: Sync) {
|
||||
from("${projectDir}/../js/")
|
||||
exclude 'src/generated/**' // is used for legacy backend
|
||||
into jsCommonDir
|
||||
}
|
||||
|
||||
sourceSets {
|
||||
main {
|
||||
kotlin {
|
||||
srcDir "${projectDir}/builtins"
|
||||
srcDir "${projectDir}/runtime"
|
||||
srcDir "${projectDir}/src"
|
||||
|
||||
srcDir "${jsCommonDir}/src"
|
||||
srcDir "${jsCommonDir}/runtime"
|
||||
|
||||
srcDir builtinsSrcDir
|
||||
srcDir nativeBuiltinsSrcDir
|
||||
}
|
||||
}
|
||||
test {
|
||||
kotlin {
|
||||
srcDir "${jsCommonDir}/test/"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
configurations {
|
||||
commonSources
|
||||
}
|
||||
|
||||
dependencies {
|
||||
expectedBy project(":kotlin-stdlib-common")
|
||||
commonSources project(path: ":kotlin-stdlib-common", configuration: "sources")
|
||||
testCompile project(':kotlin-test:kotlin-test-js')
|
||||
}
|
||||
|
||||
|
||||
compileKotlin2Js {
|
||||
dependsOn prepareNativeBuiltinsSources
|
||||
dependsOn prepareBuiltinsSources
|
||||
dependsOn prepareCommonJsSources
|
||||
|
||||
kotlinOptions {
|
||||
outputFile = "${buildDir}/classes/main/kotlin.js"
|
||||
moduleKind = "umd"
|
||||
main = "noCall"
|
||||
verbose = true
|
||||
freeCompilerArgs += [
|
||||
"-Xir-produce-klib-dir",
|
||||
"-Xir-only",
|
||||
"-Xallow-kotlin-package",
|
||||
"-Xallow-result-return-type",
|
||||
"-Xuse-experimental=kotlin.Experimental",
|
||||
"-Xuse-experimental=kotlin.ExperimentalMultiplatform",
|
||||
"-Xuse-experimental=kotlin.contracts.ExperimentalContracts",
|
||||
"-Xinline-classes",
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
def testOutputFile = "${buildDir}/classes/kotlin/test/kotlin-stdlib-js-ir_test.js"
|
||||
def kotlinTestTestOutputFile = "${project(':kotlin-test:kotlin-test-js').buildDir}/classes/kotlin/test/kotlin-test-js-ir_test.js"
|
||||
|
||||
compileTestKotlin2Js {
|
||||
kotlinOptions {
|
||||
moduleKind = "umd"
|
||||
verbose = true
|
||||
outputFile = testOutputFile
|
||||
freeCompilerArgs += [
|
||||
"-Xir-produce-js",
|
||||
"-verbose",
|
||||
"-Xuse-experimental=kotlin.Experimental",
|
||||
"-Xuse-experimental=kotlin.ExperimentalUnsignedTypes",
|
||||
"-Xuse-experimental=kotlin.ExperimentalStdlibApi"
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
archivesBaseName = 'kotlin-stdlib-js-ir'
|
||||
|
||||
jar {
|
||||
manifestAttributes(manifest, project, 'Main')
|
||||
duplicatesStrategy = DuplicatesStrategy.FAIL
|
||||
}
|
||||
|
||||
task sourcesJar(type: Jar, dependsOn: classes) {
|
||||
classifier = 'sources'
|
||||
duplicatesStrategy = DuplicatesStrategy.FAIL
|
||||
from (sourceSets.main.allSource)
|
||||
}
|
||||
|
||||
artifacts {
|
||||
archives sourcesJar
|
||||
}
|
||||
|
||||
node {
|
||||
download = true
|
||||
version = '8.9.4' // The default 6.9.1 has buggy hyperbolic functions implementation
|
||||
nodeModulesDir = buildDir
|
||||
}
|
||||
|
||||
task install() {
|
||||
// dummy task to make coreLibsInstall aggregate task not fail
|
||||
}
|
||||
|
||||
task installMocha(type: NpmTask) {
|
||||
args = ['install', 'mocha']
|
||||
}
|
||||
|
||||
task installTeamcityReporter(type: NpmTask) {
|
||||
args = ['install', 'mocha-teamcity-reporter']
|
||||
}
|
||||
|
||||
task runMocha(type: NodeTask) {
|
||||
dependsOn compileTestKotlin2Js
|
||||
dependsOn installMocha
|
||||
dependsOn ':kotlin-test:kotlin-test-js:testClasses'
|
||||
|
||||
script = file("${buildDir}/node_modules/mocha/bin/mocha")
|
||||
|
||||
if (project.hasProperty("teamcity")) {
|
||||
dependsOn installTeamcityReporter
|
||||
args = ['--reporter', 'mocha-teamcity-reporter',
|
||||
'--reporter-options', 'topLevelSuite=stdlib-js-ir']
|
||||
}
|
||||
else {
|
||||
args = ['--reporter', 'min']
|
||||
}
|
||||
|
||||
args += [testOutputFile, kotlinTestTestOutputFile]
|
||||
|
||||
execOverrides {
|
||||
it.ignoreExitValue = rootProject.ignoreTestFailures
|
||||
it.workingDir = buildDir
|
||||
}
|
||||
}
|
||||
|
||||
test.dependsOn runMocha
|
||||
@@ -0,0 +1,339 @@
|
||||
import com.moowork.gradle.node.npm.NpmTask
|
||||
import com.moowork.gradle.node.task.NodeTask
|
||||
|
||||
plugins {
|
||||
kotlin("jvm")
|
||||
id("com.github.node-gradle.node")
|
||||
}
|
||||
|
||||
// A simple CLI for creating JS IR klibs.
|
||||
// Does not depend on backend lowerings and JS codegen.
|
||||
val jsIrKlibCli: Configuration by configurations.creating
|
||||
|
||||
// Full JS IR compiler CLI
|
||||
val fullJsIrCli: Configuration by configurations.creating
|
||||
|
||||
dependencies {
|
||||
jsIrKlibCli(project(":compiler:cli-js-klib"))
|
||||
|
||||
fullJsIrCli(project(":compiler:cli-js"))
|
||||
fullJsIrCli(project(":compiler:util"))
|
||||
fullJsIrCli(project(":compiler:cli-common"))
|
||||
fullJsIrCli(project(":compiler:cli"))
|
||||
fullJsIrCli(project(":compiler:frontend"))
|
||||
fullJsIrCli(project(":compiler:backend-common"))
|
||||
fullJsIrCli(project(":compiler:backend"))
|
||||
fullJsIrCli(project(":compiler:ir.backend.common"))
|
||||
fullJsIrCli(project(":compiler:ir.serialization.js"))
|
||||
fullJsIrCli(project(":compiler:backend.js"))
|
||||
fullJsIrCli(project(":js:js.translator"))
|
||||
fullJsIrCli(project(":js:js.serializer"))
|
||||
fullJsIrCli(project(":js:js.dce"))
|
||||
fullJsIrCli(kotlin("reflect"))
|
||||
fullJsIrCli(intellijCoreDep()) { includeJars("intellij-core") }
|
||||
fullJsIrCli(intellijDep()) {
|
||||
includeJars("picocontainer", "trove4j", "guava", "jdom", "asm-all", rootProject = rootProject)
|
||||
}
|
||||
}
|
||||
|
||||
val unimplementedNativeBuiltIns =
|
||||
(file("$rootDir/core/builtins/native/kotlin/").list().toSet() - file("$rootDir/libraries/stdlib/js-ir/builtins/").list())
|
||||
.map { "core/builtins/native/kotlin/$it" }
|
||||
|
||||
// Required to compile native builtins with the rest of runtime
|
||||
val builtInsHeader = """@file:Suppress(
|
||||
"NON_ABSTRACT_FUNCTION_WITH_NO_BODY",
|
||||
"MUST_BE_INITIALIZED_OR_BE_ABSTRACT",
|
||||
"EXTERNAL_TYPE_EXTENDS_NON_EXTERNAL_TYPE",
|
||||
"PRIMARY_CONSTRUCTOR_DELEGATION_CALL_EXPECTED",
|
||||
"WRONG_MODIFIER_TARGET"
|
||||
)
|
||||
"""
|
||||
|
||||
val fullRuntimeSources by task<Sync> {
|
||||
|
||||
val sources = listOf(
|
||||
"core/builtins/src/kotlin/",
|
||||
"libraries/stdlib/common/src/",
|
||||
"libraries/stdlib/src/kotlin/",
|
||||
"libraries/stdlib/unsigned/",
|
||||
"libraries/stdlib/js/src/",
|
||||
"libraries/stdlib/js/runtime/",
|
||||
"libraries/stdlib/js-ir/builtins/",
|
||||
"libraries/stdlib/js-ir/src/",
|
||||
"libraries/stdlib/js-ir/runtime/",
|
||||
|
||||
// TODO get rid - move to test module
|
||||
"js/js.translator/testData/_commonFiles/"
|
||||
) + unimplementedNativeBuiltIns
|
||||
|
||||
val excluded = listOf(
|
||||
// stdlib/js/src/generated is used exclusively for current `js-v1` backend.
|
||||
"libraries/stdlib/js/src/generated/**",
|
||||
|
||||
// JS-specific optimized version of emptyArray() already defined
|
||||
"core/builtins/src/kotlin/ArrayIntrinsics.kt"
|
||||
)
|
||||
|
||||
sources.forEach { path ->
|
||||
from("$rootDir/$path") {
|
||||
into(path.dropLastWhile { it != '/' })
|
||||
excluded.filter { it.startsWith(path) }.forEach {
|
||||
exclude(it.substring(path.length))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
into("$buildDir/fullRuntime/src")
|
||||
|
||||
doLast {
|
||||
unimplementedNativeBuiltIns.forEach { path ->
|
||||
val file = File("$buildDir/fullRuntime/src/$path")
|
||||
val sourceCode = builtInsHeader + file.readText()
|
||||
file.writeText(sourceCode)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
val reducedRuntimeSources by task<Sync> {
|
||||
dependsOn(fullRuntimeSources)
|
||||
|
||||
from(fullRuntimeSources.get().outputs.files.singleFile) {
|
||||
exclude(
|
||||
listOf(
|
||||
"libraries/stdlib/unsigned/**",
|
||||
"libraries/stdlib/common/src/generated/_Arrays.kt",
|
||||
"libraries/stdlib/common/src/generated/_Collections.kt",
|
||||
"libraries/stdlib/common/src/generated/_Comparisons.kt",
|
||||
"libraries/stdlib/common/src/generated/_Maps.kt",
|
||||
"libraries/stdlib/common/src/generated/_Sequences.kt",
|
||||
"libraries/stdlib/common/src/generated/_Sets.kt",
|
||||
"libraries/stdlib/common/src/generated/_Strings.kt",
|
||||
"libraries/stdlib/common/src/generated/_UArrays.kt",
|
||||
"libraries/stdlib/common/src/generated/_URanges.kt",
|
||||
"libraries/stdlib/common/src/generated/_UCollections.kt",
|
||||
"libraries/stdlib/common/src/generated/_UComparisons.kt",
|
||||
"libraries/stdlib/common/src/generated/_USequences.kt",
|
||||
"libraries/stdlib/common/src/kotlin/SequencesH.kt",
|
||||
"libraries/stdlib/common/src/kotlin/TextH.kt",
|
||||
"libraries/stdlib/common/src/kotlin/UMath.kt",
|
||||
"libraries/stdlib/common/src/kotlin/collections/**",
|
||||
"libraries/stdlib/common/src/kotlin/ioH.kt",
|
||||
"libraries/stdlib/js-ir/runtime/collectionsHacks.kt",
|
||||
"libraries/stdlib/js-ir/src/generated/**",
|
||||
"libraries/stdlib/js-ir/src/kotlin/text/**",
|
||||
"libraries/stdlib/js/src/jquery/**",
|
||||
"libraries/stdlib/js/src/org.w3c/**",
|
||||
"libraries/stdlib/js/src/kotlin/char.kt",
|
||||
"libraries/stdlib/js/src/kotlin/collections.kt",
|
||||
"libraries/stdlib/js/src/kotlin/collections/**",
|
||||
"libraries/stdlib/js/src/kotlin/time/**",
|
||||
"libraries/stdlib/js/src/kotlin/console.kt",
|
||||
"libraries/stdlib/js/src/kotlin/coreDeprecated.kt",
|
||||
"libraries/stdlib/js/src/kotlin/date.kt",
|
||||
"libraries/stdlib/js/src/kotlin/debug.kt",
|
||||
"libraries/stdlib/js/src/kotlin/grouping.kt",
|
||||
"libraries/stdlib/js/src/kotlin/json.kt",
|
||||
"libraries/stdlib/js/src/kotlin/promise.kt",
|
||||
"libraries/stdlib/js/src/kotlin/regexp.kt",
|
||||
"libraries/stdlib/js/src/kotlin/sequence.kt",
|
||||
"libraries/stdlib/js/src/kotlin/text/**",
|
||||
"libraries/stdlib/js/src/kotlin/reflect/KTypeHelpers.kt",
|
||||
"libraries/stdlib/js/src/kotlin/reflect/KTypeParameterImpl.kt",
|
||||
"libraries/stdlib/js/src/kotlin/reflect/KTypeImpl.kt",
|
||||
"libraries/stdlib/src/kotlin/collections/**",
|
||||
"libraries/stdlib/src/kotlin/experimental/bitwiseOperations.kt",
|
||||
"libraries/stdlib/src/kotlin/properties/Delegates.kt",
|
||||
"libraries/stdlib/src/kotlin/random/URandom.kt",
|
||||
"libraries/stdlib/src/kotlin/text/**",
|
||||
"libraries/stdlib/src/kotlin/time/**",
|
||||
"libraries/stdlib/src/kotlin/util/KotlinVersion.kt",
|
||||
"libraries/stdlib/src/kotlin/util/Tuples.kt",
|
||||
"libraries/stdlib/js/src/kotlin/dom/**",
|
||||
"libraries/stdlib/js/src/kotlin/browser/**"
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
from("$rootDir/libraries/stdlib/js-ir/smallRuntime") {
|
||||
into("libraries/stdlib/js-ir/runtime/")
|
||||
}
|
||||
|
||||
into("$buildDir/reducedRuntime/src")
|
||||
}
|
||||
|
||||
fun JavaExec.buildKLib(sources: List<String>, dependencies: List<String>, outPath: String, commonSources: List<String>) {
|
||||
inputs.files(sources)
|
||||
outputs.dir(file(outPath).parent)
|
||||
classpath = jsIrKlibCli
|
||||
main = "org.jetbrains.kotlin.ir.backend.js.GenerateJsIrKlibKt"
|
||||
workingDir = rootDir
|
||||
args = sources.toList() + listOf("-o", outPath) + dependencies.flatMap { listOf("-d", it) } + commonSources.flatMap { listOf("-c", it) }
|
||||
|
||||
dependsOn(":compiler:cli-js-klib:jar")
|
||||
passClasspathInJar()
|
||||
}
|
||||
|
||||
val fullRuntimeDir = buildDir.resolve("fullRuntime/klib")
|
||||
|
||||
val generateFullRuntimeKLib by eagerTask<NoDebugJavaExec> {
|
||||
dependsOn(fullRuntimeSources)
|
||||
|
||||
buildKLib(sources = listOf(fullRuntimeSources.get().outputs.files.singleFile.path),
|
||||
dependencies = emptyList(),
|
||||
outPath = fullRuntimeDir.absolutePath,
|
||||
commonSources = listOf("common", "src", "unsigned").map { "$buildDir/fullRuntime/src/libraries/stdlib/$it" }
|
||||
)
|
||||
}
|
||||
|
||||
val packFullRuntimeKLib by tasks.registering(Jar::class) {
|
||||
dependsOn(generateFullRuntimeKLib)
|
||||
from(fullRuntimeDir)
|
||||
destinationDirectory.set(rootProject.buildDir.resolve("js-ir-runtime"))
|
||||
archiveFileName.set("full-runtime.klib")
|
||||
}
|
||||
|
||||
val generateReducedRuntimeKLib by eagerTask<NoDebugJavaExec> {
|
||||
dependsOn(reducedRuntimeSources)
|
||||
|
||||
val outPath = buildDir.resolve("reducedRuntime/klib").absolutePath
|
||||
buildKLib(sources = listOf(reducedRuntimeSources.get().outputs.files.singleFile.path),
|
||||
dependencies = emptyList(),
|
||||
outPath = outPath,
|
||||
commonSources = listOf("common", "src", "unsigned").map { "$buildDir/reducedRuntime/src/libraries/stdlib/$it" }
|
||||
)
|
||||
}
|
||||
|
||||
val generateWasmRuntimeKLib by eagerTask<NoDebugJavaExec> {
|
||||
buildKLib(sources = listOf("$rootDir/libraries/stdlib/wasm"),
|
||||
dependencies = emptyList(),
|
||||
outPath = "$buildDir/wasmRuntime/klib",
|
||||
commonSources = emptyList()
|
||||
)
|
||||
}
|
||||
|
||||
val kotlinTestCommonSources = listOf(
|
||||
"$rootDir/libraries/kotlin.test/annotations-common/src/main",
|
||||
"$rootDir/libraries/kotlin.test/common/src/main"
|
||||
)
|
||||
val generateKotlinTestKLib by eagerTask<NoDebugJavaExec> {
|
||||
dependsOn(generateFullRuntimeKLib)
|
||||
|
||||
buildKLib(
|
||||
sources = listOf("$rootDir/libraries/kotlin.test/js/src/main") + kotlinTestCommonSources,
|
||||
dependencies = listOf("${generateFullRuntimeKLib.outputs.files.singleFile.path}/klib"),
|
||||
outPath = "$buildDir/kotlin.test/klib",
|
||||
commonSources = kotlinTestCommonSources
|
||||
)
|
||||
}
|
||||
|
||||
val jsTestDir = "${buildDir}/testSrc"
|
||||
|
||||
val prepareStdlibTestSources by task<Sync> {
|
||||
from("$rootDir/libraries/stdlib/test") {
|
||||
exclude("src/generated/**")
|
||||
into("test")
|
||||
}
|
||||
from("$rootDir/libraries/stdlib/common/test") {
|
||||
exclude("src/generated/**")
|
||||
into("common")
|
||||
}
|
||||
from("$rootDir/libraries/stdlib/js/test") {
|
||||
into("js")
|
||||
}
|
||||
into(jsTestDir)
|
||||
}
|
||||
|
||||
fun JavaExec.buildJs(sources: List<String>, dependencies: List<String>, outPath: String, commonSources: List<String>) {
|
||||
inputs.files(sources)
|
||||
outputs.dir(file(outPath).parent)
|
||||
classpath = fullJsIrCli
|
||||
main = "org.jetbrains.kotlin.cli.js.K2JsIrCompiler"
|
||||
workingDir = rootDir
|
||||
|
||||
val libraryString: String = dependencies.joinToString(File.pathSeparator)
|
||||
val libraryArgs: List<String> = if (libraryString.isEmpty()) emptyList() else listOf<String>("-libraries", libraryString, "-Xfriend-modules=$libraryString")
|
||||
val allArgs =
|
||||
sources.toList() + listOf("-output", outPath) + libraryArgs + listOf(
|
||||
"-Xir-produce-js",
|
||||
"-Xmulti-platform",
|
||||
"-Xuse-experimental=kotlin.Experimental",
|
||||
"-Xuse-experimental=kotlin.contracts.ExperimentalContracts",
|
||||
"-Xuse-experimental=kotlin.ExperimentalMultiplatform",
|
||||
"-Xuse-experimental=kotlin.ExperimentalStdlibApi",
|
||||
"-Xuse-experimental=kotlin.ExperimentalUnsignedTypes"
|
||||
)
|
||||
args = allArgs
|
||||
|
||||
dependsOn(":compiler:cli-js:jar")
|
||||
passClasspathInJar()
|
||||
}
|
||||
|
||||
val testOutputFile = "$buildDir/kotlin-stdlib-js-ir_test.js"
|
||||
|
||||
val tryRunFullCli by eagerTask<NoDebugJavaExec> {
|
||||
dependsOn(prepareStdlibTestSources)
|
||||
dependsOn(generateFullRuntimeKLib)
|
||||
dependsOn(generateKotlinTestKLib)
|
||||
|
||||
buildJs(
|
||||
sources = listOf(jsTestDir),
|
||||
dependencies = listOf(
|
||||
"${generateFullRuntimeKLib.outputs.files.singleFile.path}/klib",
|
||||
"${generateKotlinTestKLib.outputs.files.singleFile.path}/klib"
|
||||
),
|
||||
outPath = testOutputFile,
|
||||
commonSources = emptyList()
|
||||
)
|
||||
}
|
||||
|
||||
node {
|
||||
download = true
|
||||
version = "10.16.2"
|
||||
nodeModulesDir = buildDir
|
||||
}
|
||||
|
||||
val installMocha by task<NpmTask> {
|
||||
setArgs(listOf("install", "mocha"))
|
||||
}
|
||||
|
||||
val installTeamcityReporter by task<NpmTask> {
|
||||
setArgs(listOf("install", "mocha-teamcity-reporter"))
|
||||
}
|
||||
|
||||
// TODO: TEST OUTPUT FILE
|
||||
// val kotlinTestTestOutputFile = "${project(':kotlin-test:kotlin-test-js').buildDir}/classes/kotlin/test/kotlin-test-js-ir_test.js"
|
||||
|
||||
val runMocha by task<NodeTask> {
|
||||
dependsOn(installMocha)
|
||||
dependsOn(tryRunFullCli)
|
||||
|
||||
script = file("${buildDir}/node_modules/mocha/bin/mocha")
|
||||
|
||||
if (project.hasProperty("teamcity")) {
|
||||
dependsOn(installTeamcityReporter)
|
||||
setArgs(
|
||||
listOf(
|
||||
"--reporter",
|
||||
"mocha-teamcity-reporter",
|
||||
"--reporter-options",
|
||||
"topLevelSuite=stdlib-js-ir"
|
||||
)
|
||||
)
|
||||
}
|
||||
else {
|
||||
setArgs(listOf("--reporter", "min"))
|
||||
}
|
||||
|
||||
val allArgs = getArgs().toList() + listOf(testOutputFile/*, kotlinTestTestOutputFile*/)
|
||||
setArgs(allArgs)
|
||||
|
||||
setIgnoreExitValue(rootProject.getBooleanProperty("ignoreTestFailures") ?: false)
|
||||
setWorkingDir(buildDir)
|
||||
}
|
||||
|
||||
tasks {
|
||||
test {
|
||||
dependsOn(runMocha)
|
||||
}
|
||||
}
|
||||
@@ -310,8 +310,6 @@ task libraryJarWithoutIr(type: Jar, dependsOn: compileJs) {
|
||||
}
|
||||
|
||||
task libraryJarWithIr(type: Zip, dependsOn: libraryJarWithoutIr) {
|
||||
def irStdlibJar = tasks.getByPath(":kotlin-stdlib-js-ir:jar")
|
||||
dependsOn(irStdlibJar)
|
||||
|
||||
archiveExtension = "jar"
|
||||
destinationDirectory = file("$buildDir/libs")
|
||||
@@ -319,8 +317,10 @@ task libraryJarWithIr(type: Zip, dependsOn: libraryJarWithoutIr) {
|
||||
duplicatesStrategy DuplicatesStrategy.FAIL
|
||||
|
||||
from zipTree(libraryJarWithoutIr.archiveFile)
|
||||
from(zipTree(irStdlibJar.archiveFile)) {
|
||||
exclude 'META-INF/*'
|
||||
if (rootProject.includeStdlibJsIr) {
|
||||
def irKlib = tasks.getByPath(":kotlin-stdlib-js-ir:generateFullRuntimeKLib")
|
||||
dependsOn(irKlib)
|
||||
from fileTree("${irKlib.outputs.files.singleFile.path}/klib")
|
||||
}
|
||||
}
|
||||
|
||||
@@ -370,7 +370,7 @@ task distSourcesJar(type: Jar) {
|
||||
|
||||
|
||||
artifacts {
|
||||
runtime libraryJarWithIr
|
||||
runtime libraryJarWithoutIr
|
||||
archives libraryJarWithIr
|
||||
archives sourcesJar
|
||||
sources sourcesJar
|
||||
|
||||
+1
-1
@@ -31,7 +31,7 @@ import kotlin.script.experimental.jvm.JsDependency
|
||||
fun loadScriptConfiguration(configuration: CompilerConfiguration) {
|
||||
val scriptConfiguration = ScriptCompilationConfiguration {
|
||||
baseClass("kotlin.Any")
|
||||
dependencies.append(JsDependency("compiler/ir/serialization.js/build/fullRuntime/klib"))
|
||||
dependencies.append(JsDependency("libraries/stdlib/js-ir/build/fullRuntime/klib"))
|
||||
platform.put("JS")
|
||||
}
|
||||
configuration.add(
|
||||
|
||||
+1
-1
@@ -147,7 +147,7 @@ fun createCompileResult(lineId: LineId, code: String): ReplCompileResult.Compile
|
||||
|
||||
class DependencyLoader {
|
||||
// TODO: this should be taken from CompilerConfiguration
|
||||
private val commonPath = "compiler/ir/serialization.js/build/fullRuntime/klib"
|
||||
private val commonPath = "libraries/stdlib/js-ir/build/fullRuntime/klib"
|
||||
private val mappedNamesPath = "$commonPath/mappedNames.txt"
|
||||
private val scriptDependencyBinaryPath = "$commonPath/scriptDependencyBinary.js"
|
||||
|
||||
|
||||
@@ -90,7 +90,6 @@ val distLibraryProjects = listOfNotNull(
|
||||
":js:js.engines",
|
||||
":kotlin-stdlib-js-ir".takeIf { kotlinBuildProperties.jsIrDist },
|
||||
":kotlin-source-sections-compiler-plugin",
|
||||
":kotlin-test:kotlin-test-js".takeIf { !kotlinBuildProperties.isInJpsBuildIdeaSync },
|
||||
":kotlin-test:kotlin-test-junit",
|
||||
":kotlin-test:kotlin-test-junit5",
|
||||
":kotlin-test:kotlin-test-jvm",
|
||||
@@ -149,6 +148,7 @@ dependencies {
|
||||
libraries(kotlinStdlib("jdk8"))
|
||||
if (!kotlinBuildProperties.isInJpsBuildIdeaSync) {
|
||||
libraries(kotlinStdlib("js", "distLibrary"))
|
||||
libraries(project(":kotlin-test:kotlin-test-js", configuration = "distLibrary"))
|
||||
}
|
||||
|
||||
distLibraryProjects.forEach {
|
||||
|
||||
+4
-2
@@ -102,6 +102,7 @@ include ":kotlin-build-common",
|
||||
":compiler:ir.serialization.common",
|
||||
":compiler:ir.serialization.jvm",
|
||||
":compiler:ir.serialization.js",
|
||||
":kotlin-stdlib-js-ir",
|
||||
":compiler:backend.js",
|
||||
":compiler:backend.wasm",
|
||||
":compiler:backend.jvm",
|
||||
@@ -111,6 +112,7 @@ include ":kotlin-build-common",
|
||||
":compiler:light-classes",
|
||||
":compiler:cli",
|
||||
":compiler:cli-js",
|
||||
":compiler:cli-js-klib",
|
||||
":compiler:incremental-compilation-impl",
|
||||
":compiler:android-tests",
|
||||
":compiler:tests-common",
|
||||
@@ -322,7 +324,6 @@ if (buildProperties.inJpsBuildIdeaSync) {
|
||||
":kotlin-stdlib-common",
|
||||
":kotlin-stdlib",
|
||||
":kotlin-stdlib-js",
|
||||
":kotlin-stdlib-js-ir",
|
||||
":kotlin-stdlib-jdk7",
|
||||
":kotlin-stdlib-jdk8",
|
||||
":kotlin-stdlib:samples",
|
||||
@@ -338,7 +339,6 @@ if (buildProperties.inJpsBuildIdeaSync) {
|
||||
project(':kotlin-stdlib-common').projectDir = "$rootDir/libraries/stdlib/common" as File
|
||||
project(':kotlin-stdlib').projectDir = "$rootDir/libraries/stdlib/jvm" as File
|
||||
project(':kotlin-stdlib-js').projectDir = "$rootDir/libraries/stdlib/js-v1" as File
|
||||
project(':kotlin-stdlib-js-ir').projectDir = "$rootDir/libraries/stdlib/js-ir" as File
|
||||
project(':kotlin-stdlib-jdk7').projectDir = "$rootDir/libraries/stdlib/jdk7" as File
|
||||
project(':kotlin-stdlib-jdk8').projectDir = "$rootDir/libraries/stdlib/jdk8" as File
|
||||
project(':kotlin-stdlib:samples').projectDir = "$rootDir/libraries/stdlib/samples" as File
|
||||
@@ -375,6 +375,7 @@ project(':kotlin-preloader').projectDir = "$rootDir/compiler/preloader" as File
|
||||
project(':kotlin-build-common').projectDir = "$rootDir/build-common" as File
|
||||
project(':compiler:cli-common').projectDir = "$rootDir/compiler/cli/cli-common" as File
|
||||
project(':compiler:cli-js').projectDir = "$rootDir/compiler/cli/cli-js" as File
|
||||
project(':compiler:cli-js-klib').projectDir = "$rootDir/compiler/cli/cli-js-klib" as File
|
||||
project(':kotlin-runner').projectDir = "$rootDir/compiler/cli/cli-runner" as File
|
||||
project(':kotlin-daemon').projectDir = "$rootDir/compiler/daemon" as File
|
||||
project(':daemon-common').projectDir = "$rootDir/compiler/daemon/daemon-common" as File
|
||||
@@ -393,6 +394,7 @@ project(':compiler:backend.jvm').projectDir = "$rootDir/compiler/ir/backend.jvm"
|
||||
project(':compiler:ir.serialization.common').projectDir = "$rootDir/compiler/ir/serialization.common" as File
|
||||
project(':compiler:ir.serialization.jvm').projectDir = "$rootDir/compiler/ir/serialization.jvm" as File
|
||||
project(':compiler:ir.serialization.js').projectDir = "$rootDir/compiler/ir/serialization.js" as File
|
||||
project(':kotlin-stdlib-js-ir').projectDir = "$rootDir/libraries/stdlib/js-ir" as File
|
||||
project(':kotlin-util-io').projectDir = "$rootDir/compiler/util-io" as File
|
||||
project(':kotlin-util-klib').projectDir = "$rootDir/compiler/util-klib" as File
|
||||
project(':kotlin-util-klib-metadata').projectDir = "$rootDir/compiler/util-klib-metadata" as File
|
||||
|
||||
Reference in New Issue
Block a user