From b9f88350dd9910fa2e394f4dcdcb20824e71d57d Mon Sep 17 00:00:00 2001 From: Svyatoslav Kuzmich Date: Thu, 17 Oct 2019 14:14:07 +0300 Subject: [PATCH] [JS IR] Build hybrid versions of stdlib and kotlin.test IR version of libraries are no published by default inside pre-IR JARs --- libraries/kotlin.test/js-ir/build.gradle | 70 ------------------------ libraries/kotlin.test/js/build.gradle | 6 +- libraries/stdlib/js-ir/build.gradle | 18 ++---- libraries/stdlib/js-v1/build.gradle | 25 ++++++++- prepare/compiler/build.gradle.kts | 4 +- settings.gradle | 2 - 6 files changed, 34 insertions(+), 91 deletions(-) delete mode 100644 libraries/kotlin.test/js-ir/build.gradle diff --git a/libraries/kotlin.test/js-ir/build.gradle b/libraries/kotlin.test/js-ir/build.gradle deleted file mode 100644 index f4e834378c7..00000000000 --- a/libraries/kotlin.test/js-ir/build.gradle +++ /dev/null @@ -1,70 +0,0 @@ -description = 'Kotlin Test for JS IR' - -apply plugin: 'kotlin-platform-js' - - -dependencies { - expectedBy project(':kotlin-test:kotlin-test-common') - expectedBy project(':kotlin-test:kotlin-test-annotations-common') - compile project(':kotlin-stdlib-js-ir') -} - -def jsCommonDir = "${buildDir}/common-js-sources" - -task prepareCommonJsSources(type: Sync) { - from "${projectDir}/../js/src/" - into jsCommonDir -} - -compileKotlin2Js { - dependsOn prepareCommonJsSources - - kotlinOptions { - moduleKind = "umd" - freeCompilerArgs = [ - "-Xir", - "-Xir-produce-only=klib", - "-Xallow-kotlin-package", - "-Xuse-experimental=kotlin.contracts.ExperimentalContracts", - ] - } -} - -sourceSets { - main { - kotlin { - srcDir jsCommonDir - } - } -} - -compileTestKotlin2Js { - kotlinOptions.freeCompilerArgs = [ - "-Xir", - "-Xir-produce-only=js", - "-Xallow-kotlin-package", - ] - kotlinOptions { - metaInfo = false - moduleKind = "umd" - } -} - -task sourcesJar(type: Jar, dependsOn: classes) { - classifier = 'sources' - from(sourceSets.main.allSource) -} - -archivesBaseName = 'kotlin-test-js-ir' - -jar { - manifestAttributes(manifest, project, 'Test') -} - -artifacts { - archives sourcesJar -} - -if (project.findProperty("kotlin.stdlib.js.ir.publish")?.toBoolean() == true) { - configurePublishing(project) -} diff --git a/libraries/kotlin.test/js/build.gradle b/libraries/kotlin.test/js/build.gradle index 054c1a33a35..892d916677f 100644 --- a/libraries/kotlin.test/js/build.gradle +++ b/libraries/kotlin.test/js/build.gradle @@ -16,7 +16,11 @@ dependencies { } compileKotlin2Js { - kotlinOptions.freeCompilerArgs = ["-Xallow-kotlin-package", "-Xuse-experimental=kotlin.contracts.ExperimentalContracts"] + kotlinOptions.freeCompilerArgs = [ + "-Xallow-kotlin-package", + "-Xuse-experimental=kotlin.contracts.ExperimentalContracts", + "-Xir-produce-klib-dir" + ] kotlinOptions { moduleKind = "umd" outputFile = "${buildDir}/classes/main/kotlin-test.js" diff --git a/libraries/stdlib/js-ir/build.gradle b/libraries/stdlib/js-ir/build.gradle index ab188847920..2993ed86adc 100644 --- a/libraries/stdlib/js-ir/build.gradle +++ b/libraries/stdlib/js-ir/build.gradle @@ -92,7 +92,7 @@ configurations { dependencies { expectedBy project(":kotlin-stdlib-common") commonSources project(path: ":kotlin-stdlib-common", configuration: "sources") - testCompile project(':kotlin-test:kotlin-test-js-ir') + testCompile project(':kotlin-test:kotlin-test-js') } @@ -107,8 +107,8 @@ compileKotlin2Js { main = "noCall" verbose = true freeCompilerArgs += [ - "-Xir", - "-Xir-produce-only=klib", + "-Xir-produce-klib-dir", + "-Xir-only", "-Xallow-kotlin-package", "-Xallow-result-return-type", "-Xuse-experimental=kotlin.Experimental", @@ -120,7 +120,7 @@ compileKotlin2Js { } def testOutputFile = "${buildDir}/classes/kotlin/test/kotlin-stdlib-js-ir_test.js" -def kotlinTestTestOutputFile = "${project(':kotlin-test:kotlin-test-js-ir').buildDir}/classes/kotlin/test/kotlin-test-js-ir_test.js" +def kotlinTestTestOutputFile = "${project(':kotlin-test:kotlin-test-js').buildDir}/classes/kotlin/test/kotlin-test-js-ir_test.js" compileTestKotlin2Js { kotlinOptions { @@ -128,8 +128,7 @@ compileTestKotlin2Js { verbose = true outputFile = testOutputFile freeCompilerArgs += [ - "-Xir", - "-Xir-produce-only=js", + "-Xir-produce-js", "-verbose", "-Xuse-experimental=kotlin.Experimental", "-Xuse-experimental=kotlin.ExperimentalUnsignedTypes", @@ -155,11 +154,6 @@ artifacts { archives sourcesJar } - -if (project.findProperty("kotlin.stdlib.js.ir.publish")?.toBoolean() == true) { - configurePublishing(project) -} - node { download = true version = '8.9.4' // The default 6.9.1 has buggy hyperbolic functions implementation @@ -177,7 +171,7 @@ task installTeamcityReporter(type: NpmTask) { task runMocha(type: NodeTask) { dependsOn compileTestKotlin2Js dependsOn installMocha - dependsOn ':kotlin-test:kotlin-test-js-ir:testClasses' + dependsOn ':kotlin-test:kotlin-test-js:testClasses' script = file("${buildDir}/node_modules/mocha/bin/mocha") diff --git a/libraries/stdlib/js-v1/build.gradle b/libraries/stdlib/js-v1/build.gradle index 3c4bb19fee4..6bd99aec564 100644 --- a/libraries/stdlib/js-v1/build.gradle +++ b/libraries/stdlib/js-v1/build.gradle @@ -14,6 +14,7 @@ configurations { commonSources distSources distJs + distLibrary } def builtinsSrcDir = "${buildDir}/builtin-sources" @@ -283,9 +284,10 @@ jar { enabled false } -task mergedJar(type: Jar, dependsOn: compileJs) { +task libraryJarWithoutIr(type: Jar, dependsOn: compileJs) { classifier = null manifestAttributes(manifest, project, 'Main') + destinationDirectory = file("$buildDir/lib/dist") // TODO: Use standard implementation title after js stdlib detector becomes more flexible (KT-17655) Properties properties = new Properties() @@ -307,6 +309,22 @@ task mergedJar(type: Jar, dependsOn: compileJs) { exclude "${experimentalJsModuleName}.*" } +task libraryJarWithIr(type: Zip, dependsOn: libraryJarWithoutIr) { + def irStdlibJar = tasks.getByPath(":kotlin-stdlib-js-ir:jar") + dependsOn(irStdlibJar) + + archiveExtension = "jar" + destinationDirectory = file("$buildDir/libs") + + duplicatesStrategy DuplicatesStrategy.FAIL + + from zipTree(libraryJarWithoutIr.archiveFile) + from(zipTree(irStdlibJar.archiveFile)) { + exclude 'META-INF/*' + } +} + + task sourcesJar(type: Jar, dependsOn: compileJs) { classifier = 'sources' includeEmptyDirs false @@ -352,11 +370,12 @@ task distSourcesJar(type: Jar) { artifacts { - runtime mergedJar - archives mergedJar + runtime libraryJarWithIr + archives libraryJarWithIr archives sourcesJar sources sourcesJar distSources distSourcesJar + distLibrary libraryJarWithoutIr compileJs.outputs.files.forEach { artifact -> distJs(artifact) { builtBy(compileJs) } diff --git a/prepare/compiler/build.gradle.kts b/prepare/compiler/build.gradle.kts index ad5286e95e0..7da284bb379 100644 --- a/prepare/compiler/build.gradle.kts +++ b/prepare/compiler/build.gradle.kts @@ -91,7 +91,6 @@ val distLibraryProjects = listOfNotNull( ":kotlin-stdlib-js-ir".takeIf { kotlinBuildProperties.jsIrDist }, ":kotlin-source-sections-compiler-plugin", ":kotlin-test:kotlin-test-js", - ":kotlin-test:kotlin-test-js-ir".takeIf { kotlinBuildProperties.jsIrDist }, ":kotlin-test:kotlin-test-junit", ":kotlin-test:kotlin-test-junit5", ":kotlin-test:kotlin-test-jvm", @@ -114,7 +113,6 @@ val distSourcesProjects = listOfNotNull( ":kotlin-script-runtime", ":kotlin-stdlib-js-ir".takeIf { kotlinBuildProperties.jsIrDist }, ":kotlin-test:kotlin-test-js", - ":kotlin-test:kotlin-test-js-ir".takeIf { kotlinBuildProperties.jsIrDist }, ":kotlin-test:kotlin-test-junit", ":kotlin-test:kotlin-test-junit5", ":kotlin-test:kotlin-test-jvm", @@ -149,7 +147,7 @@ dependencies { libraries(intellijDep()) { includeIntellijCoreJarDependencies(project) { it.startsWith("trove4j") } } libraries(commonDep("io.ktor", "ktor-network")) libraries(kotlinStdlib("jdk8")) - libraries(kotlinStdlib("js")) + libraries(kotlinStdlib("js", "distLibrary")) distLibraryProjects.forEach { libraries(project(it)) { isTransitive = false } diff --git a/settings.gradle b/settings.gradle index 30263849254..48905e76b2f 100644 --- a/settings.gradle +++ b/settings.gradle @@ -274,7 +274,6 @@ if (flags.inJpsBuildIdeaSync) { ":kotlin-stdlib-common", ":kotlin-stdlib", ":kotlin-stdlib-js", - ":kotlin-test:kotlin-test-js-ir", ":kotlin-stdlib-js-ir", ":kotlin-stdlib-jdk7", ":kotlin-stdlib-jdk8", @@ -289,7 +288,6 @@ if (flags.inJpsBuildIdeaSync) { 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-test:kotlin-test-js-ir').projectDir = "$rootDir/libraries/kotlin.test/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