[JS_IR] Use new plugin to build Kotlin/JS stdlib with IR compiler
- Switch to building stdlib with bootstrap compiler since IR is stable enough - Build stdlib with coreLibs by default - Include JS IR stdlib to kotlin distribution
This commit is contained in:
@@ -50,6 +50,9 @@ build/
|
|||||||
.idea/artifacts/kotlin_main_kts_jar.xml
|
.idea/artifacts/kotlin_main_kts_jar.xml
|
||||||
.idea/artifacts/kotlin_compiler_client_embeddable_jar.xml
|
.idea/artifacts/kotlin_compiler_client_embeddable_jar.xml
|
||||||
.idea/artifacts/kotlin_reflect_jar.xml
|
.idea/artifacts/kotlin_reflect_jar.xml
|
||||||
|
.idea/artifacts/kotlin_stdlib_js_ir_*
|
||||||
|
.idea/artifacts/kotlin_test_js_ir_*
|
||||||
|
.idea/artifacts/kotlin_stdlib_wasm_*
|
||||||
.idea/jarRepositories.xml
|
.idea/jarRepositories.xml
|
||||||
kotlin-ultimate/
|
kotlin-ultimate/
|
||||||
node_modules/
|
node_modules/
|
||||||
|
|||||||
Generated
+1
-1
@@ -66,7 +66,7 @@
|
|||||||
<component name="ProjectResources">
|
<component name="ProjectResources">
|
||||||
<default-html-doctype>http://www.w3.org/1999/xhtml</default-html-doctype>
|
<default-html-doctype>http://www.w3.org/1999/xhtml</default-html-doctype>
|
||||||
</component>
|
</component>
|
||||||
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" default="false" project-jdk-name="1.8" project-jdk-type="JavaSDK">
|
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" default="true" project-jdk-name="1.8" project-jdk-type="JavaSDK">
|
||||||
<output url="file://$PROJECT_DIR$/out" />
|
<output url="file://$PROJECT_DIR$/out" />
|
||||||
</component>
|
</component>
|
||||||
<component name="PsiViewerSettings">
|
<component name="PsiViewerSettings">
|
||||||
|
|||||||
+5
-6
@@ -38,6 +38,7 @@ if (kotlinBuildProperties.buildScanServer != null) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
plugins {
|
plugins {
|
||||||
|
base
|
||||||
idea
|
idea
|
||||||
id("jps-compatible")
|
id("jps-compatible")
|
||||||
id("org.jetbrains.gradle.plugin.idea-ext")
|
id("org.jetbrains.gradle.plugin.idea-ext")
|
||||||
@@ -53,7 +54,6 @@ pill {
|
|||||||
}
|
}
|
||||||
|
|
||||||
val isTeamcityBuild = project.kotlinBuildProperties.isTeamcityBuild
|
val isTeamcityBuild = project.kotlinBuildProperties.isTeamcityBuild
|
||||||
val includeStdlibJsIr by extra(project.kotlinBuildProperties.includeStdlibJsIr)
|
|
||||||
|
|
||||||
val configuredJdks: List<JdkId> =
|
val configuredJdks: List<JdkId> =
|
||||||
getConfiguredJdks().also {
|
getConfiguredJdks().also {
|
||||||
@@ -280,9 +280,7 @@ val coreLibProjects = listOfNotNull(
|
|||||||
":kotlin-stdlib",
|
":kotlin-stdlib",
|
||||||
":kotlin-stdlib-common",
|
":kotlin-stdlib-common",
|
||||||
":kotlin-stdlib-js",
|
":kotlin-stdlib-js",
|
||||||
// Exclude JS IR from core libs because it depends on local compiler build, which
|
":kotlin-stdlib-js-ir",
|
||||||
// in turn depends on local JVM stdlib. It slows down library testing.
|
|
||||||
":kotlin-stdlib-js-ir".takeIf { includeStdlibJsIr },
|
|
||||||
":kotlin-stdlib-jdk7",
|
":kotlin-stdlib-jdk7",
|
||||||
":kotlin-stdlib-jdk8",
|
":kotlin-stdlib-jdk8",
|
||||||
":kotlin-test:kotlin-test-annotations-common",
|
":kotlin-test:kotlin-test-annotations-common",
|
||||||
@@ -292,6 +290,7 @@ val coreLibProjects = listOfNotNull(
|
|||||||
":kotlin-test:kotlin-test-junit5",
|
":kotlin-test:kotlin-test-junit5",
|
||||||
":kotlin-test:kotlin-test-testng",
|
":kotlin-test:kotlin-test-testng",
|
||||||
":kotlin-test:kotlin-test-js".takeIf { !kotlinBuildProperties.isInJpsBuildIdeaSync },
|
":kotlin-test:kotlin-test-js".takeIf { !kotlinBuildProperties.isInJpsBuildIdeaSync },
|
||||||
|
":kotlin-test:kotlin-test-js-ir".takeIf { !kotlinBuildProperties.isInJpsBuildIdeaSync },
|
||||||
":kotlin-reflect",
|
":kotlin-reflect",
|
||||||
":kotlin-coroutines-experimental-compat"
|
":kotlin-coroutines-experimental-compat"
|
||||||
)
|
)
|
||||||
@@ -497,7 +496,7 @@ val ideaPlugin by task<Task> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
tasks {
|
tasks {
|
||||||
register("clean") {
|
named("clean") {
|
||||||
doLast {
|
doLast {
|
||||||
delete("$buildDir/repo")
|
delete("$buildDir/repo")
|
||||||
delete(distDir)
|
delete(distDir)
|
||||||
@@ -751,7 +750,7 @@ tasks {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
register("check") {
|
named("check") {
|
||||||
dependsOn("test")
|
dependsOn("test")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -18,5 +18,3 @@ val KotlinBuildProperties.proguard: Boolean get() = postProcessing && getBoolean
|
|||||||
val KotlinBuildProperties.jarCompression: Boolean get() = getBoolean("kotlin.build.jar.compression", isTeamcityBuild)
|
val KotlinBuildProperties.jarCompression: Boolean get() = getBoolean("kotlin.build.jar.compression", isTeamcityBuild)
|
||||||
|
|
||||||
val KotlinBuildProperties.ignoreTestFailures: Boolean get() = getBoolean("ignoreTestFailures", isTeamcityBuild)
|
val KotlinBuildProperties.ignoreTestFailures: Boolean get() = getBoolean("ignoreTestFailures", isTeamcityBuild)
|
||||||
|
|
||||||
val KotlinBuildProperties.includeStdlibJsIr: Boolean get() = getBoolean("include.stdlib.js.ir", isTeamcityBuild)
|
|
||||||
@@ -21,8 +21,7 @@ testsJar {}
|
|||||||
|
|
||||||
projectTest(parallel = true) {
|
projectTest(parallel = true) {
|
||||||
dependsOn(":dist")
|
dependsOn(":dist")
|
||||||
dependsOn(":kotlin-stdlib-js-ir:generateFullRuntimeKLib")
|
dependsOn(":kotlin-stdlib-js-ir:compileKotlinJs")
|
||||||
|
|
||||||
workingDir = rootDir
|
workingDir = rootDir
|
||||||
systemProperty("kotlin.test.script.classpath", testSourceSet.output.classesDirs.joinToString(File.pathSeparator))
|
systemProperty("kotlin.test.script.classpath", testSourceSet.output.classesDirs.joinToString(File.pathSeparator))
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -79,7 +79,7 @@ abstract class AbstractCompileKotlinAgainstKlibTest : AbstractBlackBoxCodegenTes
|
|||||||
listOf(
|
listOf(
|
||||||
"-output", klibName,
|
"-output", klibName,
|
||||||
"-Xir-produce-klib-file",
|
"-Xir-produce-klib-file",
|
||||||
"-libraries", "libraries/stdlib/js-ir/build/fullRuntime/klib/"
|
"-libraries", "libraries/stdlib/js-ir/build/classes/kotlin/js/main/"
|
||||||
) + sourceFiles
|
) + sourceFiles
|
||||||
)
|
)
|
||||||
if (exitCode != ExitCode.OK) {
|
if (exitCode != ExitCode.OK) {
|
||||||
|
|||||||
@@ -29,6 +29,7 @@ class CodeConformanceTest : TestCase() {
|
|||||||
private val SOURCES_BUNCH_FILE_PATTERN = Pattern.compile("(.+\\.java|.+\\.kt|.+\\.js)(\\.\\w+)?")
|
private val SOURCES_BUNCH_FILE_PATTERN = Pattern.compile("(.+\\.java|.+\\.kt|.+\\.js)(\\.\\w+)?")
|
||||||
private const val MAX_STEPS_COUNT = 100
|
private const val MAX_STEPS_COUNT = 100
|
||||||
private val EXCLUDED_FILES_AND_DIRS = listOf(
|
private val EXCLUDED_FILES_AND_DIRS = listOf(
|
||||||
|
"build/js",
|
||||||
"buildSrc",
|
"buildSrc",
|
||||||
"compiler/fir/lightTree/testData",
|
"compiler/fir/lightTree/testData",
|
||||||
"compiler/testData/psi/kdoc",
|
"compiler/testData/psi/kdoc",
|
||||||
@@ -48,6 +49,8 @@ class CodeConformanceTest : TestCase() {
|
|||||||
"libraries/reflect/build",
|
"libraries/reflect/build",
|
||||||
"libraries/stdlib/js-ir/.gradle",
|
"libraries/stdlib/js-ir/.gradle",
|
||||||
"libraries/stdlib/js-ir/build",
|
"libraries/stdlib/js-ir/build",
|
||||||
|
"libraries/stdlib/js-ir-minimal-for-test/.gradle",
|
||||||
|
"libraries/stdlib/js-ir-minimal-for-test/build",
|
||||||
"libraries/stdlib/js-v1/.gradle",
|
"libraries/stdlib/js-v1/.gradle",
|
||||||
"libraries/stdlib/js-v1/build",
|
"libraries/stdlib/js-v1/build",
|
||||||
"libraries/tools/binary-compatibility-validator/src/main/kotlin/org.jetbrains.kotlin.tools",
|
"libraries/tools/binary-compatibility-validator/src/main/kotlin/org.jetbrains.kotlin.tools",
|
||||||
@@ -67,6 +70,7 @@ class CodeConformanceTest : TestCase() {
|
|||||||
).map(::File)
|
).map(::File)
|
||||||
|
|
||||||
private val COPYRIGHT_EXCLUDED_FILES_AND_DIRS = listOf(
|
private val COPYRIGHT_EXCLUDED_FILES_AND_DIRS = listOf(
|
||||||
|
"build",
|
||||||
"buildSrc/prepare-deps/build",
|
"buildSrc/prepare-deps/build",
|
||||||
"compiler/tests/org/jetbrains/kotlin/code/CodeConformanceTest.kt",
|
"compiler/tests/org/jetbrains/kotlin/code/CodeConformanceTest.kt",
|
||||||
"dependencies",
|
"dependencies",
|
||||||
@@ -83,6 +87,8 @@ class CodeConformanceTest : TestCase() {
|
|||||||
"libraries/stdlib/js-ir/build",
|
"libraries/stdlib/js-ir/build",
|
||||||
"libraries/stdlib/js-ir/build/",
|
"libraries/stdlib/js-ir/build/",
|
||||||
"libraries/stdlib/js-ir/runtime/longjs.kt",
|
"libraries/stdlib/js-ir/runtime/longjs.kt",
|
||||||
|
"libraries/stdlib/js-ir-minimal-for-test/.gradle",
|
||||||
|
"libraries/stdlib/js-ir-minimal-for-test/build",
|
||||||
"libraries/stdlib/js-v1/.gradle",
|
"libraries/stdlib/js-v1/.gradle",
|
||||||
"libraries/stdlib/js-v1/build",
|
"libraries/stdlib/js-v1/build",
|
||||||
"libraries/stdlib/js-v1/node_modules",
|
"libraries/stdlib/js-v1/node_modules",
|
||||||
|
|||||||
@@ -39,7 +39,6 @@ dependencies {
|
|||||||
testCompileOnly(intellijDep()) { includeJars("idea", "idea_rt", "util") }
|
testCompileOnly(intellijDep()) { includeJars("idea", "idea_rt", "util") }
|
||||||
testCompile(project(":compiler:backend.js"))
|
testCompile(project(":compiler:backend.js"))
|
||||||
testCompile(project(":compiler:backend.wasm"))
|
testCompile(project(":compiler:backend.wasm"))
|
||||||
testCompile(project(":kotlin-stdlib-js-ir"))
|
|
||||||
testCompile(project(":js:js.translator"))
|
testCompile(project(":js:js.translator"))
|
||||||
testCompile(project(":js:js.serializer"))
|
testCompile(project(":js:js.serializer"))
|
||||||
testCompile(project(":js:js.dce"))
|
testCompile(project(":js:js.dce"))
|
||||||
@@ -103,9 +102,12 @@ fun Test.setUpJsBoxTests(jsEnabled: Boolean, jsIrEnabled: Boolean) {
|
|||||||
dependsOn(":dist")
|
dependsOn(":dist")
|
||||||
if (jsEnabled) dependsOn(testJsRuntime)
|
if (jsEnabled) dependsOn(testJsRuntime)
|
||||||
if (jsIrEnabled) {
|
if (jsIrEnabled) {
|
||||||
dependsOn(":kotlin-stdlib-js-ir:generateFullRuntimeKLib")
|
dependsOn(":kotlin-stdlib-js-ir:compileKotlinJs")
|
||||||
dependsOn(":kotlin-stdlib-js-ir:generateReducedRuntimeKLib")
|
systemProperty("kotlin.js.full.stdlib.path", "libraries/stdlib/js-ir/build/classes/kotlin/js/main")
|
||||||
dependsOn(":kotlin-stdlib-js-ir:generateKotlinTestKLib")
|
dependsOn(":kotlin-stdlib-js-ir-minimal-for-test:compileKotlinJs")
|
||||||
|
systemProperty("kotlin.js.reduced.stdlib.path", "libraries/stdlib/js-ir-minimal-for-test/build/classes/kotlin/js/main")
|
||||||
|
dependsOn(":kotlin-test:kotlin-test-js-ir:compileKotlinJs")
|
||||||
|
systemProperty("kotlin.js.kotlin.test.path", "libraries/kotlin.test/js-ir/build/classes/kotlin/js/main")
|
||||||
}
|
}
|
||||||
|
|
||||||
exclude("org/jetbrains/kotlin/js/test/wasm/semantics/*")
|
exclude("org/jetbrains/kotlin/js/test/wasm/semantics/*")
|
||||||
@@ -228,9 +230,12 @@ val unzipJsShell by task<Copy> {
|
|||||||
|
|
||||||
projectTest("wasmTest", true) {
|
projectTest("wasmTest", true) {
|
||||||
dependsOn(unzipJsShell)
|
dependsOn(unzipJsShell)
|
||||||
dependsOn(":kotlin-stdlib-js-ir:generateWasmRuntimeKLib")
|
|
||||||
include("org/jetbrains/kotlin/js/test/wasm/semantics/*")
|
include("org/jetbrains/kotlin/js/test/wasm/semantics/*")
|
||||||
val jsShellExecutablePath = File(unzipJsShell.get().destinationDir, "js").absolutePath
|
val jsShellExecutablePath = File(unzipJsShell.get().destinationDir, "js").absolutePath
|
||||||
systemProperty("javascript.engine.path.SpiderMonkey", jsShellExecutablePath)
|
systemProperty("javascript.engine.path.SpiderMonkey", jsShellExecutablePath)
|
||||||
|
|
||||||
|
dependsOn(":kotlin-stdlib-js-ir:compileKotlinJs")
|
||||||
|
systemProperty("kotlin.wasm.stdlib.path", "libraries/stdlib/wasm/build/classes/kotlin/js/main")
|
||||||
|
|
||||||
setUpBoxTests()
|
setUpBoxTests()
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -21,9 +21,9 @@ import org.jetbrains.kotlin.utils.fileUtils.withReplacedExtensionOrNull
|
|||||||
import java.io.File
|
import java.io.File
|
||||||
import java.lang.Boolean.getBoolean
|
import java.lang.Boolean.getBoolean
|
||||||
|
|
||||||
private val fullRuntimeKlib = "libraries/stdlib/js-ir/build/fullRuntime/klib"
|
private val fullRuntimeKlib: String = System.getProperty("kotlin.js.full.stdlib.path")
|
||||||
private val defaultRuntimeKlib = "libraries/stdlib/js-ir/build/reducedRuntime/klib"
|
private val defaultRuntimeKlib = System.getProperty("kotlin.js.reduced.stdlib.path")
|
||||||
private val kotlinTestKLib = "libraries/stdlib/js-ir/build/kotlin.test/klib"
|
private val kotlinTestKLib = System.getProperty("kotlin.js.kotlin.test.path")
|
||||||
|
|
||||||
abstract class BasicIrBoxTest(
|
abstract class BasicIrBoxTest(
|
||||||
pathToTestDir: String,
|
pathToTestDir: String,
|
||||||
|
|||||||
@@ -37,7 +37,7 @@ import java.io.File
|
|||||||
import java.lang.Boolean.getBoolean
|
import java.lang.Boolean.getBoolean
|
||||||
|
|
||||||
private val wasmRuntimeKlib =
|
private val wasmRuntimeKlib =
|
||||||
loadKlib("libraries/stdlib/js-ir/build/wasmRuntime/klib")
|
loadKlib(System.getProperty("kotlin.wasm.stdlib.path"))
|
||||||
|
|
||||||
abstract class BasicWasmBoxTest(
|
abstract class BasicWasmBoxTest(
|
||||||
private val pathToTestDir: String,
|
private val pathToTestDir: String,
|
||||||
|
|||||||
@@ -0,0 +1,57 @@
|
|||||||
|
import org.jetbrains.kotlin.gradle.dsl.KotlinCompile
|
||||||
|
|
||||||
|
plugins {
|
||||||
|
kotlin("multiplatform")
|
||||||
|
}
|
||||||
|
|
||||||
|
val commonMainSources by task<Sync> {
|
||||||
|
from(
|
||||||
|
"$rootDir/libraries/kotlin.test/common",
|
||||||
|
"$rootDir/libraries/kotlin.test/annotations-common"
|
||||||
|
)
|
||||||
|
into("$buildDir/commonMainSources")
|
||||||
|
}
|
||||||
|
|
||||||
|
val jsMainSources by task<Sync> {
|
||||||
|
from("$rootDir/libraries/kotlin.test/js/src")
|
||||||
|
into("$buildDir/jsMainSources")
|
||||||
|
}
|
||||||
|
|
||||||
|
kotlin {
|
||||||
|
js(IR) {
|
||||||
|
nodejs()
|
||||||
|
}
|
||||||
|
|
||||||
|
sourceSets {
|
||||||
|
val commonMain by getting {
|
||||||
|
dependencies {
|
||||||
|
api(project(":kotlin-stdlib-js-ir"))
|
||||||
|
}
|
||||||
|
kotlin.srcDir(commonMainSources.get().destinationDir)
|
||||||
|
}
|
||||||
|
val jsMain by getting {
|
||||||
|
dependencies {
|
||||||
|
api(project(":kotlin-stdlib-js-ir"))
|
||||||
|
}
|
||||||
|
kotlin.srcDir(jsMainSources.get().destinationDir)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
tasks.withType<KotlinCompile<*>>().configureEach {
|
||||||
|
kotlinOptions.freeCompilerArgs += listOf(
|
||||||
|
"-Xallow-kotlin-package",
|
||||||
|
"-Xallow-result-return-type",
|
||||||
|
"-Xuse-experimental=kotlin.Experimental",
|
||||||
|
"-Xuse-experimental=kotlin.ExperimentalMultiplatform",
|
||||||
|
"-Xuse-experimental=kotlin.contracts.ExperimentalContracts",
|
||||||
|
"-Xinline-classes"
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
tasks.named("compileKotlinJs") {
|
||||||
|
(this as KotlinCompile<*>).kotlinOptions.freeCompilerArgs += "-Xir-module-name=kotlin-test"
|
||||||
|
dependsOn(commonMainSources)
|
||||||
|
dependsOn(jsMainSources)
|
||||||
|
}
|
||||||
|
|
||||||
@@ -59,10 +59,11 @@ task libraryJarWithIr(type: Zip, dependsOn: libraryJarWithoutIr) {
|
|||||||
duplicatesStrategy DuplicatesStrategy.FAIL
|
duplicatesStrategy DuplicatesStrategy.FAIL
|
||||||
|
|
||||||
from zipTree(libraryJarWithoutIr.archiveFile)
|
from zipTree(libraryJarWithoutIr.archiveFile)
|
||||||
if (rootProject.includeStdlibJsIr) {
|
|
||||||
def irKlib = tasks.getByPath(":kotlin-stdlib-js-ir:generateKotlinTestKLib")
|
dependsOn(":kotlin-test:kotlin-test-js-ir:compileKotlinJs")
|
||||||
dependsOn(irKlib)
|
from {
|
||||||
from fileTree(irKlib.outputs.files.singleFile.path)
|
def irKlib = tasks.getByPath(":kotlin-test:kotlin-test-js-ir:compileKotlinJs")
|
||||||
|
fileTree(irKlib.outputs.files.first().path)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -76,7 +77,7 @@ task sourcesJar(type: Jar, dependsOn: classes) {
|
|||||||
artifacts {
|
artifacts {
|
||||||
runtime libraryJarWithIr
|
runtime libraryJarWithIr
|
||||||
archives libraryJarWithIr
|
archives libraryJarWithIr
|
||||||
distLibrary libraryJarWithoutIr
|
distLibrary libraryJarWithIr
|
||||||
archives sourcesJar
|
archives sourcesJar
|
||||||
sources sourcesJar
|
sources sourcesJar
|
||||||
distJs(file(compileKotlin2Js.kotlinOptions.outputFile)) {
|
distJs(file(compileKotlin2Js.kotlinOptions.outputFile)) {
|
||||||
|
|||||||
+1
-1
@@ -65,7 +65,7 @@ abstract class AbstractJsReplTest : Closeable {
|
|||||||
configuration.put(CommonConfigurationKeys.MODULE_NAME, "repl.kts")
|
configuration.put(CommonConfigurationKeys.MODULE_NAME, "repl.kts")
|
||||||
val scriptConfiguration = ScriptCompilationConfiguration {
|
val scriptConfiguration = ScriptCompilationConfiguration {
|
||||||
baseClass("kotlin.Any")
|
baseClass("kotlin.Any")
|
||||||
dependencies.append(JsDependency("libraries/stdlib/js-ir/build/fullRuntime/klib"))
|
dependencies.append(JsDependency("libraries/stdlib/js-ir/build/classes/kotlin/js/main/"))
|
||||||
platform.put("JS")
|
platform.put("JS")
|
||||||
}
|
}
|
||||||
configuration.add(
|
configuration.add(
|
||||||
|
|||||||
@@ -0,0 +1,123 @@
|
|||||||
|
import org.jetbrains.kotlin.gradle.dsl.KotlinCompile
|
||||||
|
|
||||||
|
plugins {
|
||||||
|
kotlin("multiplatform")
|
||||||
|
}
|
||||||
|
|
||||||
|
kotlin {
|
||||||
|
js(IR) {
|
||||||
|
nodejs()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
val commonMainSources by task<Sync> {
|
||||||
|
dependsOn(":kotlin-stdlib-js-ir:commonMainSources")
|
||||||
|
from {
|
||||||
|
val fullCommonMainSources = tasks.getByPath(":kotlin-stdlib-js-ir:commonMainSources")
|
||||||
|
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/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"
|
||||||
|
)
|
||||||
|
)
|
||||||
|
fullCommonMainSources.outputs.files.singleFile
|
||||||
|
}
|
||||||
|
|
||||||
|
into("$buildDir/commonMainSources")
|
||||||
|
}
|
||||||
|
|
||||||
|
val jsMainSources by task<Sync> {
|
||||||
|
dependsOn(":kotlin-stdlib-js-ir:jsMainSources")
|
||||||
|
|
||||||
|
from {
|
||||||
|
val fullJsMainSources = tasks.getByPath(":kotlin-stdlib-js-ir:jsMainSources")
|
||||||
|
exclude(
|
||||||
|
listOf(
|
||||||
|
"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/throwableExtensions.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/js/src/kotlin/dom/**",
|
||||||
|
"libraries/stdlib/js/src/kotlin/browser/**"
|
||||||
|
)
|
||||||
|
)
|
||||||
|
fullJsMainSources.outputs.files.singleFile
|
||||||
|
}
|
||||||
|
|
||||||
|
from("$rootDir/libraries/stdlib/js-ir-minimal-for-test/src")
|
||||||
|
into("$buildDir/jsMainSources")
|
||||||
|
}
|
||||||
|
|
||||||
|
kotlin {
|
||||||
|
sourceSets {
|
||||||
|
val commonMain by getting {
|
||||||
|
kotlin.srcDir(commonMainSources.get().destinationDir)
|
||||||
|
}
|
||||||
|
val jsMain by getting {
|
||||||
|
kotlin.srcDir(jsMainSources.get().destinationDir)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
tasks.withType<KotlinCompile<*>>().configureEach {
|
||||||
|
kotlinOptions.freeCompilerArgs += listOf(
|
||||||
|
"-Xallow-kotlin-package",
|
||||||
|
"-Xallow-result-return-type",
|
||||||
|
"-Xuse-experimental=kotlin.Experimental",
|
||||||
|
"-Xuse-experimental=kotlin.ExperimentalMultiplatform",
|
||||||
|
"-Xuse-experimental=kotlin.contracts.ExperimentalContracts",
|
||||||
|
"-Xinline-classes",
|
||||||
|
"-Xopt-in=kotlin.RequiresOptIn",
|
||||||
|
"-Xopt-in=kotlin.ExperimentalUnsignedTypes",
|
||||||
|
"-Xopt-in=kotlin.ExperimentalStdlibApi"
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
tasks.named("compileKotlinJs") {
|
||||||
|
(this as KotlinCompile<*>).kotlinOptions.freeCompilerArgs += "-Xir-module-name=kotlin"
|
||||||
|
dependsOn(commonMainSources)
|
||||||
|
dependsOn(jsMainSources)
|
||||||
|
}
|
||||||
@@ -1,49 +1,19 @@
|
|||||||
import com.moowork.gradle.node.npm.NpmTask
|
import org.jetbrains.kotlin.gradle.dsl.KotlinCompile
|
||||||
import com.moowork.gradle.node.task.NodeTask
|
import org.jetbrains.kotlin.gradle.plugin.KotlinJsCompilerType.IR
|
||||||
|
|
||||||
plugins {
|
plugins {
|
||||||
base
|
kotlin("multiplatform")
|
||||||
id("com.github.node-gradle.node") version "2.2.0"
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// A simple CLI for creating JS IR klibs.
|
kotlin {
|
||||||
// Does not depend on backend lowerings and JS codegen.
|
js(IR) {
|
||||||
val jsIrKlibCli: Configuration by configurations.creating
|
nodejs()
|
||||||
|
|
||||||
// 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(project(":kotlin-reflect"))
|
|
||||||
fullJsIrCli(intellijCoreDep()) { includeJars("intellij-core") }
|
|
||||||
if (Platform[193].orLower()) {
|
|
||||||
fullJsIrCli(intellijDep()) {
|
|
||||||
includeJars("picocontainer", rootProject = rootProject)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
fullJsIrCli(intellijDep()) {
|
|
||||||
includeJars("trove4j", "guava", "jdom", "asm-all", rootProject = rootProject)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
val unimplementedNativeBuiltIns =
|
val unimplementedNativeBuiltIns =
|
||||||
(file("$rootDir/core/builtins/native/kotlin/").list().toSortedSet() - file("$rootDir/libraries/stdlib/js-ir/builtins/").list())
|
(file("$rootDir/core/builtins/native/kotlin/").list().toSortedSet() - file("$rootDir/libraries/stdlib/js-ir/builtins/").list())
|
||||||
.map { "core/builtins/native/kotlin/$it" }
|
.map { "core/builtins/native/kotlin/$it" }
|
||||||
|
|
||||||
// Required to compile native builtins with the rest of runtime
|
// Required to compile native builtins with the rest of runtime
|
||||||
val builtInsHeader = """@file:Suppress(
|
val builtInsHeader = """@file:Suppress(
|
||||||
@@ -55,13 +25,25 @@ val builtInsHeader = """@file:Suppress(
|
|||||||
)
|
)
|
||||||
"""
|
"""
|
||||||
|
|
||||||
val fullRuntimeSources by task<Sync> {
|
val commonMainSources by task<Sync> {
|
||||||
|
|
||||||
val sources = listOf(
|
val sources = listOf(
|
||||||
"core/builtins/src/kotlin/",
|
|
||||||
"libraries/stdlib/common/src/",
|
"libraries/stdlib/common/src/",
|
||||||
"libraries/stdlib/src/kotlin/",
|
"libraries/stdlib/src/kotlin/",
|
||||||
"libraries/stdlib/unsigned/",
|
"libraries/stdlib/unsigned/"
|
||||||
|
)
|
||||||
|
|
||||||
|
sources.forEach { path ->
|
||||||
|
from("$rootDir/$path") {
|
||||||
|
into(path.dropLastWhile { it != '/' })
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
into("$buildDir/commonMainSources")
|
||||||
|
}
|
||||||
|
|
||||||
|
val jsMainSources by task<Sync> {
|
||||||
|
val sources = listOf(
|
||||||
|
"core/builtins/src/kotlin/",
|
||||||
"libraries/stdlib/js/src/",
|
"libraries/stdlib/js/src/",
|
||||||
"libraries/stdlib/js/runtime/",
|
"libraries/stdlib/js/runtime/",
|
||||||
"libraries/stdlib/js-ir/builtins/",
|
"libraries/stdlib/js-ir/builtins/",
|
||||||
@@ -89,276 +71,88 @@ val fullRuntimeSources by task<Sync> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
into("$buildDir/fullRuntime/src")
|
into("$buildDir/jsMainSources")
|
||||||
|
|
||||||
doLast {
|
doLast {
|
||||||
unimplementedNativeBuiltIns.forEach { path ->
|
unimplementedNativeBuiltIns.forEach { path ->
|
||||||
val file = File("$buildDir/fullRuntime/src/$path")
|
val file = File("$buildDir/jsMainSources/$path")
|
||||||
val sourceCode = builtInsHeader + file.readText()
|
val sourceCode = builtInsHeader + file.readText()
|
||||||
file.writeText(sourceCode)
|
file.writeText(sourceCode)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
val reducedRuntimeSources by task<Sync> {
|
val commonTestSources by task<Sync> {
|
||||||
dependsOn(fullRuntimeSources)
|
val sources = listOf(
|
||||||
|
"libraries/stdlib/test/",
|
||||||
from(fullRuntimeSources.get().outputs.files.singleFile) {
|
"libraries/stdlib/common/test/"
|
||||||
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/throwableExtensions.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(
|
|
||||||
moduleName: String,
|
|
||||||
sources: List<File>,
|
|
||||||
dependencies: List<File>,
|
|
||||||
outDir: File,
|
|
||||||
commonSources: List<File>
|
|
||||||
) {
|
|
||||||
inputs.files(sources)
|
|
||||||
.withPathSensitivity(PathSensitivity.RELATIVE)
|
|
||||||
|
|
||||||
outputs.dir(file(outDir))
|
|
||||||
outputs.cacheIf { true }
|
|
||||||
|
|
||||||
classpath = jsIrKlibCli
|
|
||||||
main = "org.jetbrains.kotlin.ir.backend.js.GenerateJsIrKlibKt"
|
|
||||||
workingDir = rootDir
|
|
||||||
args = sources.map(::pathRelativeToWorkingDir) +
|
|
||||||
listOf("-n", moduleName, "-o", pathRelativeToWorkingDir(outDir)) +
|
|
||||||
dependencies.flatMap { listOf("-d", pathRelativeToWorkingDir(it)) } +
|
|
||||||
commonSources.flatMap { listOf("-c", pathRelativeToWorkingDir(it)) }
|
|
||||||
|
|
||||||
dependsOn(":compiler:cli-js-klib:jar")
|
|
||||||
passClasspathInJar()
|
|
||||||
}
|
|
||||||
|
|
||||||
val fullRuntimeDir = buildDir.resolve("fullRuntime/klib")
|
|
||||||
|
|
||||||
val generateFullRuntimeKLib by eagerTask<NoDebugJavaExec> {
|
|
||||||
dependsOn(fullRuntimeSources)
|
|
||||||
|
|
||||||
buildKLib(moduleName = "kotlin",
|
|
||||||
sources = listOf(fullRuntimeSources.get().outputs.files.singleFile),
|
|
||||||
dependencies = emptyList(),
|
|
||||||
outDir = fullRuntimeDir,
|
|
||||||
commonSources = listOf("common", "src", "unsigned").map { file("$buildDir/fullRuntime/src/libraries/stdlib/$it") }
|
|
||||||
)
|
)
|
||||||
|
|
||||||
|
sources.forEach { path ->
|
||||||
|
from("$rootDir/$path") {
|
||||||
|
into(path.dropLastWhile { it != '/' })
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
into("$buildDir/commonTestSources")
|
||||||
|
}
|
||||||
|
|
||||||
|
val jsTestSources by task<Sync> {
|
||||||
|
from("$rootDir/libraries/stdlib/js/test/")
|
||||||
|
into("$buildDir/jsTestSources")
|
||||||
|
}
|
||||||
|
|
||||||
|
kotlin {
|
||||||
|
sourceSets {
|
||||||
|
val commonMain by getting {
|
||||||
|
kotlin.srcDir(commonMainSources.get().destinationDir)
|
||||||
|
}
|
||||||
|
val jsMain by getting {
|
||||||
|
kotlin.srcDir(jsMainSources.get().destinationDir)
|
||||||
|
}
|
||||||
|
val commonTest by getting {
|
||||||
|
dependencies {
|
||||||
|
api(project(":kotlin-test:kotlin-test-js-ir"))
|
||||||
|
}
|
||||||
|
kotlin.srcDir(commonTestSources.get().destinationDir)
|
||||||
|
}
|
||||||
|
val jsTest by getting {
|
||||||
|
dependencies {
|
||||||
|
api(project(":kotlin-test:kotlin-test-js-ir"))
|
||||||
|
}
|
||||||
|
kotlin.srcDir(jsTestSources.get().destinationDir)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
tasks.withType<KotlinCompile<*>>().configureEach {
|
||||||
|
kotlinOptions.freeCompilerArgs += listOf(
|
||||||
|
"-Xallow-kotlin-package",
|
||||||
|
"-Xallow-result-return-type",
|
||||||
|
"-Xuse-experimental=kotlin.Experimental",
|
||||||
|
"-Xuse-experimental=kotlin.ExperimentalMultiplatform",
|
||||||
|
"-Xuse-experimental=kotlin.contracts.ExperimentalContracts",
|
||||||
|
"-Xinline-classes",
|
||||||
|
"-Xopt-in=kotlin.RequiresOptIn",
|
||||||
|
"-Xopt-in=kotlin.ExperimentalUnsignedTypes",
|
||||||
|
"-Xopt-in=kotlin.ExperimentalStdlibApi"
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
tasks.named("compileKotlinJs") {
|
||||||
|
(this as KotlinCompile<*>).kotlinOptions.freeCompilerArgs += "-Xir-module-name=kotlin"
|
||||||
|
dependsOn(commonMainSources)
|
||||||
|
dependsOn(jsMainSources)
|
||||||
|
}
|
||||||
|
|
||||||
|
tasks.named("compileTestKotlinJs") {
|
||||||
|
dependsOn(commonTestSources)
|
||||||
|
dependsOn(jsTestSources)
|
||||||
}
|
}
|
||||||
|
|
||||||
val packFullRuntimeKLib by tasks.registering(Jar::class) {
|
val packFullRuntimeKLib by tasks.registering(Jar::class) {
|
||||||
dependsOn(generateFullRuntimeKLib)
|
dependsOn(tasks.named("compileKotlinJs"))
|
||||||
from(fullRuntimeDir)
|
from(buildDir.resolve("classes/kotlin/js/main"))
|
||||||
destinationDirectory.set(rootProject.buildDir.resolve("js-ir-runtime"))
|
destinationDirectory.set(rootProject.buildDir.resolve("js-ir-runtime"))
|
||||||
archiveFileName.set("full-runtime.klib")
|
archiveFileName.set("full-runtime.klib")
|
||||||
}
|
}
|
||||||
|
|
||||||
val generateReducedRuntimeKLib by eagerTask<NoDebugJavaExec> {
|
|
||||||
dependsOn(reducedRuntimeSources)
|
|
||||||
|
|
||||||
buildKLib(moduleName = "kotlin",
|
|
||||||
sources = listOf(reducedRuntimeSources.get().outputs.files.singleFile),
|
|
||||||
dependencies = emptyList(),
|
|
||||||
outDir = buildDir.resolve("reducedRuntime/klib"),
|
|
||||||
commonSources = listOf("common", "src", "unsigned").map { file("$buildDir/reducedRuntime/src/libraries/stdlib/$it") }
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
val generateWasmRuntimeKLib by eagerTask<NoDebugJavaExec> {
|
|
||||||
buildKLib(moduleName = "kotlin",
|
|
||||||
sources = listOf(file("$rootDir/libraries/stdlib/wasm")),
|
|
||||||
dependencies = emptyList(),
|
|
||||||
outDir = file("$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(
|
|
||||||
moduleName = "kotlin-test",
|
|
||||||
sources = (listOf("$rootDir/libraries/kotlin.test/js/src/main") + kotlinTestCommonSources).map(::file),
|
|
||||||
dependencies = listOf(generateFullRuntimeKLib.outputs.files.singleFile),
|
|
||||||
outDir = file("$buildDir/kotlin.test/klib"),
|
|
||||||
commonSources = kotlinTestCommonSources.map(::file)
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
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",
|
|
||||||
"-Xopt-in=kotlin.RequiresOptIn",
|
|
||||||
"-Xopt-in=kotlin.contracts.ExperimentalContracts",
|
|
||||||
"-Xopt-in=kotlin.ExperimentalMultiplatform",
|
|
||||||
"-Xopt-in=kotlin.ExperimentalStdlibApi",
|
|
||||||
"-Xopt-in=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,
|
|
||||||
generateKotlinTestKLib.outputs.files.singleFile.path
|
|
||||||
),
|
|
||||||
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(kotlinBuildProperties.ignoreTestFailures)
|
|
||||||
setWorkingDir(buildDir)
|
|
||||||
}
|
|
||||||
|
|
||||||
tasks {
|
|
||||||
val test by registering { dependsOn(runMocha) }
|
|
||||||
val check by existing { dependsOn(test) }
|
|
||||||
|
|
||||||
// dummy task to make coreLibsInstall aggregate task not fail
|
|
||||||
val install by registering
|
|
||||||
}
|
|
||||||
@@ -258,17 +258,16 @@ task libraryJarWithoutIr(type: Jar, dependsOn: compileJs) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
task libraryJarWithIr(type: Zip, dependsOn: libraryJarWithoutIr) {
|
task libraryJarWithIr(type: Zip, dependsOn: libraryJarWithoutIr) {
|
||||||
|
|
||||||
archiveExtension = "jar"
|
archiveExtension = "jar"
|
||||||
destinationDirectory = file("$buildDir/libs")
|
destinationDirectory = file("$buildDir/libs")
|
||||||
|
|
||||||
duplicatesStrategy DuplicatesStrategy.FAIL
|
duplicatesStrategy DuplicatesStrategy.FAIL
|
||||||
|
|
||||||
from zipTree(libraryJarWithoutIr.archiveFile)
|
from zipTree(libraryJarWithoutIr.archiveFile)
|
||||||
if (rootProject.includeStdlibJsIr) {
|
dependsOn(":kotlin-stdlib-js-ir:compileKotlinJs")
|
||||||
def irKlib = tasks.getByPath(":kotlin-stdlib-js-ir:generateFullRuntimeKLib")
|
from {
|
||||||
dependsOn(irKlib)
|
def irKlib = tasks.getByPath(":kotlin-stdlib-js-ir:compileKotlinJs")
|
||||||
from fileTree(irKlib.outputs.files.singleFile.path)
|
fileTree(irKlib.outputs.files.first().path)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,37 @@
|
|||||||
|
import org.jetbrains.kotlin.gradle.dsl.KotlinCompile
|
||||||
|
import org.jetbrains.kotlin.gradle.plugin.KotlinJsCompilerType.IR
|
||||||
|
import org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsRootExtension
|
||||||
|
import org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsRootPlugin
|
||||||
|
|
||||||
|
plugins {
|
||||||
|
kotlin("multiplatform")
|
||||||
|
}
|
||||||
|
|
||||||
|
kotlin {
|
||||||
|
js(IR) {
|
||||||
|
nodejs()
|
||||||
|
}
|
||||||
|
sourceSets {
|
||||||
|
val jsMain by getting {
|
||||||
|
kotlin.srcDirs("builtins", "internal", "runtime")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
tasks.withType<KotlinCompile<*>>().configureEach {
|
||||||
|
kotlinOptions.freeCompilerArgs += listOf(
|
||||||
|
"-Xallow-kotlin-package",
|
||||||
|
"-Xallow-result-return-type",
|
||||||
|
"-Xuse-experimental=kotlin.Experimental",
|
||||||
|
"-Xuse-experimental=kotlin.ExperimentalMultiplatform",
|
||||||
|
"-Xuse-experimental=kotlin.contracts.ExperimentalContracts",
|
||||||
|
"-Xinline-classes",
|
||||||
|
"-Xopt-in=kotlin.RequiresOptIn",
|
||||||
|
"-Xopt-in=kotlin.ExperimentalUnsignedTypes",
|
||||||
|
"-Xopt-in=kotlin.ExperimentalStdlibApi"
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
tasks.named("compileKotlinJs") {
|
||||||
|
(this as KotlinCompile<*>).kotlinOptions.freeCompilerArgs += "-Xir-module-name=kotlin"
|
||||||
|
}
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
/*
|
||||||
|
* 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
@file:kotlin.wasm.internal.ExcludedFromCodegen
|
||||||
|
|
||||||
|
package kotlin.ranges
|
||||||
|
|
||||||
|
// Stubs for unimplemented classes used by CommonBackendContext
|
||||||
|
|
||||||
|
class CharProgression
|
||||||
|
class IntProgression
|
||||||
|
class LongProgression
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2010-2019 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
* 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.
|
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
+1
-1
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2010-2019 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
* 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.
|
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@@ -1,9 +0,0 @@
|
|||||||
@file:kotlin.wasm.internal.ExcludedFromCodegen
|
|
||||||
|
|
||||||
package kotlin.ranges
|
|
||||||
|
|
||||||
// Stubs for unimplemented classes used by CommonBackendContext
|
|
||||||
|
|
||||||
class CharProgression
|
|
||||||
class IntProgression
|
|
||||||
class LongProgression
|
|
||||||
+1
-1
@@ -31,7 +31,7 @@ import kotlin.script.experimental.jvm.JsDependency
|
|||||||
fun loadScriptConfiguration(configuration: CompilerConfiguration) {
|
fun loadScriptConfiguration(configuration: CompilerConfiguration) {
|
||||||
val scriptConfiguration = ScriptCompilationConfiguration {
|
val scriptConfiguration = ScriptCompilationConfiguration {
|
||||||
baseClass("kotlin.Any")
|
baseClass("kotlin.Any")
|
||||||
dependencies.append(JsDependency("libraries/stdlib/js-ir/build/fullRuntime/klib"))
|
dependencies.append(JsDependency("libraries/stdlib/js-ir/build/classes/kotlin/js/main/"))
|
||||||
platform.put("JS")
|
platform.put("JS")
|
||||||
}
|
}
|
||||||
configuration.add(
|
configuration.add(
|
||||||
|
|||||||
+1
-1
@@ -149,7 +149,7 @@ fun createCompileResult(lineId: LineId, code: String): ReplCompileResult.Compile
|
|||||||
|
|
||||||
class DependencyLoader {
|
class DependencyLoader {
|
||||||
// TODO: this should be taken from CompilerConfiguration
|
// TODO: this should be taken from CompilerConfiguration
|
||||||
private val commonPath = "libraries/stdlib/js-ir/build/fullRuntime/klib"
|
private val commonPath = "libraries/stdlib/js-ir/build/classes/kotlin/js/main/"
|
||||||
private val mappedNamesPath = "$commonPath/mappedNames.txt"
|
private val mappedNamesPath = "$commonPath/mappedNames.txt"
|
||||||
private val scriptDependencyBinaryPath = "$commonPath/scriptDependencyBinary.js"
|
private val scriptDependencyBinaryPath = "$commonPath/scriptDependencyBinary.js"
|
||||||
|
|
||||||
|
|||||||
+8
-2
@@ -108,7 +108,6 @@ include ":kotlin-build-common",
|
|||||||
":compiler:ir.serialization.common",
|
":compiler:ir.serialization.common",
|
||||||
":compiler:ir.serialization.jvm",
|
":compiler:ir.serialization.jvm",
|
||||||
":compiler:ir.serialization.js",
|
":compiler:ir.serialization.js",
|
||||||
":kotlin-stdlib-js-ir",
|
|
||||||
":compiler:backend.js",
|
":compiler:backend.js",
|
||||||
":compiler:backend.wasm",
|
":compiler:backend.wasm",
|
||||||
":compiler:backend.jvm",
|
":compiler:backend.jvm",
|
||||||
@@ -349,6 +348,9 @@ if (buildProperties.inJpsBuildIdeaSync) {
|
|||||||
":kotlin-stdlib-common",
|
":kotlin-stdlib-common",
|
||||||
":kotlin-stdlib",
|
":kotlin-stdlib",
|
||||||
":kotlin-stdlib-js",
|
":kotlin-stdlib-js",
|
||||||
|
":kotlin-stdlib-js-ir",
|
||||||
|
":kotlin-stdlib-js-ir-minimal-for-test",
|
||||||
|
":kotlin-stdlib-wasm",
|
||||||
":kotlin-stdlib-jdk7",
|
":kotlin-stdlib-jdk7",
|
||||||
":kotlin-stdlib-jdk8",
|
":kotlin-stdlib-jdk8",
|
||||||
":kotlin-stdlib:samples",
|
":kotlin-stdlib:samples",
|
||||||
@@ -359,11 +361,15 @@ if (buildProperties.inJpsBuildIdeaSync) {
|
|||||||
":include:kotlin-stdlib-common-sources",
|
":include:kotlin-stdlib-common-sources",
|
||||||
|
|
||||||
":kotlin-test:kotlin-test-js",
|
":kotlin-test:kotlin-test-js",
|
||||||
|
":kotlin-test:kotlin-test-js-ir",
|
||||||
":kotlin-test:kotlin-test-js:kotlin-test-js-it"
|
":kotlin-test:kotlin-test-js:kotlin-test-js-it"
|
||||||
|
|
||||||
project(':kotlin-stdlib-common').projectDir = "$rootDir/libraries/stdlib/common" as File
|
project(':kotlin-stdlib-common').projectDir = "$rootDir/libraries/stdlib/common" as File
|
||||||
project(':kotlin-stdlib').projectDir = "$rootDir/libraries/stdlib/jvm" 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').projectDir = "$rootDir/libraries/stdlib/js-v1" as File
|
||||||
|
project(':kotlin-stdlib-js-ir').projectDir = "$rootDir/libraries/stdlib/js-ir" as File
|
||||||
|
project(':kotlin-stdlib-wasm').projectDir = "$rootDir/libraries/stdlib/wasm" as File
|
||||||
|
project(':kotlin-stdlib-js-ir-minimal-for-test').projectDir = "$rootDir/libraries/stdlib/js-ir-minimal-for-test" as File
|
||||||
project(':kotlin-stdlib-jdk7').projectDir = "$rootDir/libraries/stdlib/jdk7" 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-jdk8').projectDir = "$rootDir/libraries/stdlib/jdk8" as File
|
||||||
project(':kotlin-stdlib:samples').projectDir = "$rootDir/libraries/stdlib/samples" as File
|
project(':kotlin-stdlib:samples').projectDir = "$rootDir/libraries/stdlib/samples" as File
|
||||||
@@ -373,6 +379,7 @@ if (buildProperties.inJpsBuildIdeaSync) {
|
|||||||
project(':tools:kotlin-stdlib-gen').projectDir = "$rootDir/libraries/tools/kotlin-stdlib-gen" as File
|
project(':tools:kotlin-stdlib-gen').projectDir = "$rootDir/libraries/tools/kotlin-stdlib-gen" as File
|
||||||
|
|
||||||
project(':kotlin-test:kotlin-test-js').projectDir = "$rootDir/libraries/kotlin.test/js" as File
|
project(':kotlin-test:kotlin-test-js').projectDir = "$rootDir/libraries/kotlin.test/js" as File
|
||||||
|
project(':kotlin-test:kotlin-test-js-ir').projectDir = "$rootDir/libraries/kotlin.test/js-ir" as File
|
||||||
project(':kotlin-test:kotlin-test-js:kotlin-test-js-it').projectDir = "$rootDir/libraries/kotlin.test/js/it" as File
|
project(':kotlin-test:kotlin-test-js:kotlin-test-js-it').projectDir = "$rootDir/libraries/kotlin.test/js/it" as File
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -421,7 +428,6 @@ 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.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.jvm').projectDir = "$rootDir/compiler/ir/serialization.jvm" as File
|
||||||
project(':compiler:ir.serialization.js').projectDir = "$rootDir/compiler/ir/serialization.js" 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-io').projectDir = "$rootDir/compiler/util-io" as File
|
||||||
project(':kotlin-util-klib').projectDir = "$rootDir/compiler/util-klib" 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
|
project(':kotlin-util-klib-metadata').projectDir = "$rootDir/compiler/util-klib-metadata" as File
|
||||||
|
|||||||
Reference in New Issue
Block a user