From 7dc24a13e49b92eb13a89859155e2360cd66bfe2 Mon Sep 17 00:00:00 2001 From: Vyacheslav Gerasimov Date: Tue, 4 Feb 2020 02:44:04 +0300 Subject: [PATCH] Build: Make ProGuard task cacheable Exclude jdk files form libraries input. Instead add jdk major version to inputs. JavaCompile task acts same to ignore fluctuations in JDK implementations since api should remain same --- build.gradle.kts | 1 - buildSrc/build.gradle.kts | 1 + .../src/main/kotlin/CacheableProguradTask.kt | 385 ++++++++++++++++++ buildSrc/src/main/kotlin/CommonUtil.kt | 8 + buildSrc/src/main/kotlin/artifacts.kt | 4 +- libraries/reflect/build.gradle.kts | 20 +- .../tools/kotlin-main-kts/build.gradle.kts | 24 +- prepare/compiler/build.gradle.kts | 52 ++- {compiler => prepare/compiler}/compiler.pro | 16 - .../compiler}/compiler.pro.191 | 16 - 10 files changed, 452 insertions(+), 75 deletions(-) create mode 100644 buildSrc/src/main/kotlin/CacheableProguradTask.kt rename {compiler => prepare/compiler}/compiler.pro (94%) rename {compiler => prepare/compiler}/compiler.pro.191 (94%) diff --git a/build.gradle.kts b/build.gradle.kts index 80d6d62a640..5d099c8bb5a 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -30,7 +30,6 @@ buildscript { classpath("org.jetbrains.kotlin:kotlin-build-gradle-plugin:0.0.15") classpath("com.gradle.publish:plugin-publish-plugin:0.9.7") classpath(kotlin("gradle-plugin", bootstrapKotlinVersion)) - classpath("net.sf.proguard:proguard-gradle:6.1.0") classpath("org.jetbrains.dokka:dokka-gradle-plugin:0.9.17") } } diff --git a/buildSrc/build.gradle.kts b/buildSrc/build.gradle.kts index 83262855cff..01f58abe269 100644 --- a/buildSrc/build.gradle.kts +++ b/buildSrc/build.gradle.kts @@ -101,6 +101,7 @@ dependencies { implementation("com.jakewharton.dex:dex-method-list:3.0.0") implementation("com.github.jengelman.gradle.plugins:shadow:${rootProject.extra["versions.shadow"]}") + implementation("net.sf.proguard:proguard-gradle:6.2.2") implementation("org.jetbrains.intellij.deps:asm-all:7.0.1") implementation("gradle.plugin.org.jetbrains.gradle.plugin.idea-ext:gradle-idea-ext:0.5") diff --git a/buildSrc/src/main/kotlin/CacheableProguradTask.kt b/buildSrc/src/main/kotlin/CacheableProguradTask.kt new file mode 100644 index 00000000000..744f83e8317 --- /dev/null +++ b/buildSrc/src/main/kotlin/CacheableProguradTask.kt @@ -0,0 +1,385 @@ +/* + * 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. + */ + +import groovy.lang.Closure +import org.gradle.api.file.FileCollection +import org.gradle.api.tasks.* +import org.gradle.internal.jvm.Jvm +import org.gradle.internal.jvm.inspection.JvmVersionDetector +import proguard.ClassSpecification +import java.io.File +import javax.inject.Inject + + +@CacheableTask +open class CacheableProguardTask @Inject constructor( + private val jvmVersionDetector: JvmVersionDetector +) : proguard.gradle.ProGuardTask() { + + @Internal + var jdkHome: File? = null + + @get:Optional + @get:Input + internal val jdkMajorVersion: String? + get() = jdkHome?.let { jvmVersionDetector.getJavaVersion(Jvm.forHome(jdkHome)) }?.majorVersion + + @CompileClasspath + override fun getLibraryJarFileCollection(): FileCollection = super.getLibraryJarFileCollection().filter { libraryFile -> + jdkHome?.let { !libraryFile.absoluteFile.startsWith(it.absoluteFile) } ?: true + } + + @InputFiles + @PathSensitive(PathSensitivity.RELATIVE) + override fun getConfigurationFileCollection(): FileCollection = super.getConfigurationFileCollection() + + @InputFiles + @Classpath + override fun getInJarFileCollection(): FileCollection = super.getInJarFileCollection() + + @Optional + @OutputFiles + override fun getOutJarFileCollection(): FileCollection = super.getOutJarFileCollection() + + @get:Optional + @get:OutputFile + internal val printConfigurationFile: File? + get() = configuration.printConfiguration?.takeIf { it.path.isNotEmpty() } + + @Input + override fun getOutJarFilters(): MutableList = super.getOutJarFilters() + + @Input + override fun getInJarFilters(): MutableList = super.getInJarFilters() + + @Input + override fun getLibraryJarFilters(): MutableList = super.getLibraryJarFilters() + + @Internal + override fun getOutJarFiles(): MutableList = super.getOutJarFiles() + + @Internal + override fun getInJarFiles(): MutableList = super.getInJarFiles() + + @Internal + override fun getInJarCounts(): MutableList = super.getInJarCounts() + + @Internal + override fun getLibraryJarFiles(): MutableList = super.getLibraryJarFiles() + + /* + * Inputs properly declared these methods so we don't override them + * + * configuration(configurationFiles: Any?) + * libraryjars(libraryJarFiles: Any?) + * libraryjars(filterArgs: MutableMap?, libraryJarFiles: Any?) + * injars(inJarFiles: Any?) + * injars(filterArgs: MutableMap?, inJarFiles: Any?) + * outjars(outJarFiles: Any?) + * outjars(filterArgs: MutableMap?, outJarFiles: Any?) + * printconfiguration() + * printconfiguration(printConfiguration: Any?) + */ + + override fun renamesourcefileattribute() = throw NotImplementedError() + + override fun renamesourcefileattribute(newSourceFileAttribute: String?) = throw NotImplementedError() + + override fun dontshrink() = throw NotImplementedError() + + override fun assumenosideeffects(classSpecificationString: String?) = throw NotImplementedError() + + override fun assumenosideeffects(classSpecificationArgs: MutableMap?, classMembersClosure: Closure<*>?) = throw NotImplementedError() + + override fun keepnames(classSpecificationString: String?) = throw NotImplementedError() + + override fun keepnames(keepArgs: MutableMap?, classSpecificationString: String?) = throw NotImplementedError() + + override fun keepnames(keepClassSpecificationArgs: MutableMap?) = throw NotImplementedError() + + override fun keepnames(keepClassSpecificationArgs: MutableMap?, classMembersClosure: Closure<*>?) = throw NotImplementedError() + + override fun printmapping() = throw NotImplementedError() + + override fun printmapping(printMapping: Any?) = throw NotImplementedError() + + override fun keep(classSpecificationString: String?) = throw NotImplementedError() + + override fun keep(keepArgs: MutableMap?, classSpecificationString: String?) = throw NotImplementedError() + + override fun keep(keepClassSpecificationArgs: MutableMap?) = throw NotImplementedError() + + override fun keep(keepClassSpecificationArgs: MutableMap?, classMembersClosure: Closure<*>?) = throw NotImplementedError() + + override fun keepdirectories() = throw NotImplementedError() + + override fun keepdirectories(filter: String?) = throw NotImplementedError() + + override fun dontpreverify() = throw NotImplementedError() + + override fun dontnote() = throw NotImplementedError() + + override fun dontnote(filter: String?) = throw NotImplementedError() + + @Internal + override fun getrenamesourcefileattribute(): Any? = throw NotImplementedError() + + override fun useuniqueclassmembernames() = throw NotImplementedError() + + override fun overloadaggressively() = throw NotImplementedError() + + @Internal + override fun getprintusage(): Any? = throw NotImplementedError() + + @Internal + override fun getforceprocessing(): Any? = throw NotImplementedError() + + override fun whyareyoukeeping(classSpecificationString: String?) = throw NotImplementedError() + + override fun whyareyoukeeping(classSpecificationArgs: MutableMap?) = throw NotImplementedError() + + override fun whyareyoukeeping(classSpecificationArgs: MutableMap?, classMembersClosure: Closure<*>?) = throw NotImplementedError() + + override fun obfuscationdictionary(obfuscationDictionary: Any?) = throw NotImplementedError() + + override fun adaptclassstrings() = throw NotImplementedError() + + override fun adaptclassstrings(filter: String?) = throw NotImplementedError() + + override fun applymapping(applyMapping: Any?) = throw NotImplementedError() + + override fun mergeinterfacesaggressively() = throw NotImplementedError() + + @Internal + override fun getdontwarn(): Any? = throw NotImplementedError() + + override fun ignorewarnings() = throw NotImplementedError() + + @Internal + override fun getaddconfigurationdebugging(): Any? = throw NotImplementedError() + + override fun field(memberSpecificationArgs: MutableMap?) = throw NotImplementedError() + + @Internal + override fun getallowaccessmodification(): Any? = throw NotImplementedError() + + override fun constructor(memberSpecificationArgs: MutableMap?) = throw NotImplementedError() + + override fun dontusemixedcaseclassnames() = throw NotImplementedError() + + @Internal + override fun getignorewarnings(): Any? = throw NotImplementedError() + + @Internal + override fun getkeepdirectories(): Any? = throw NotImplementedError() + + override fun classobfuscationdictionary(classObfuscationDictionary: Any?) = throw NotImplementedError() + + override fun verbose() = throw NotImplementedError() + + override fun optimizations(filter: String?) = throw NotImplementedError() + + @Internal + override fun getuseuniqueclassmembernames(): Any? = throw NotImplementedError() + + @Internal + override fun getmicroedition(): Any? = throw NotImplementedError() + + override fun assumenoescapingparameters(classSpecificationString: String?) = throw NotImplementedError() + + override fun assumenoescapingparameters(classSpecificationArgs: MutableMap?, classMembersClosure: Closure<*>?) = throw NotImplementedError() + + @Internal + override fun getandroid(): Any? = throw NotImplementedError() + + override fun keeppackagenames() = throw NotImplementedError() + + override fun keeppackagenames(filter: String?) = throw NotImplementedError() + + @Internal + override fun getoverloadaggressively(): Any? = throw NotImplementedError() + + override fun skipnonpubliclibraryclasses() = throw NotImplementedError() + + @Internal + override fun getdontusemixedcaseclassnames(): Any? = throw NotImplementedError() + + @Internal + override fun getdontnote(): Any? = throw NotImplementedError() + + override fun assumenoexternalreturnvalues(classSpecificationString: String?) = throw NotImplementedError() + + override fun assumenoexternalreturnvalues(classSpecificationArgs: MutableMap?, classMembersClosure: Closure<*>?) = throw NotImplementedError() + + override fun target(targetClassVersion: String?) = throw NotImplementedError() + + override fun keepattributes() = throw NotImplementedError() + + override fun keepattributes(filter: String?) = throw NotImplementedError() + + override fun keepclassmembernames(classSpecificationString: String?) = throw NotImplementedError() + + override fun keepclassmembernames(keepArgs: MutableMap?, classSpecificationString: String?) = throw NotImplementedError() + + override fun keepclassmembernames(keepClassSpecificationArgs: MutableMap?) = throw NotImplementedError() + + override fun keepclassmembernames(keepClassSpecificationArgs: MutableMap?, classMembersClosure: Closure<*>?) = throw NotImplementedError() + + @Internal + override fun getdontpreverify(): Any? = throw NotImplementedError() + + @Internal + override fun getverbose(): Any? = throw NotImplementedError() + + @Internal + override fun getskipnonpubliclibraryclasses(): Any? = throw NotImplementedError() + + @Internal + override fun getdontoptimize(): Any? = throw NotImplementedError() + + override fun keepclasseswithmembernames(classSpecificationString: String?) = throw NotImplementedError() + + override fun keepclasseswithmembernames(keepArgs: MutableMap?, classSpecificationString: String?) = throw NotImplementedError() + + override fun keepclasseswithmembernames(keepClassSpecificationArgs: MutableMap?) = throw NotImplementedError() + + override fun keepclasseswithmembernames(keepClassSpecificationArgs: MutableMap?, classMembersClosure: Closure<*>?) = throw NotImplementedError() + + override fun keepclasseswithmembers(classSpecificationString: String?) = throw NotImplementedError() + + override fun keepclasseswithmembers(keepArgs: MutableMap?, classSpecificationString: String?) = throw NotImplementedError() + + override fun keepclasseswithmembers(keepClassSpecificationArgs: MutableMap?) = throw NotImplementedError() + + override fun keepclasseswithmembers(keepClassSpecificationArgs: MutableMap?, classMembersClosure: Closure<*>?) = throw NotImplementedError() + + @Internal + override fun getdump(): Any? = throw NotImplementedError() + + override fun printseeds() = throw NotImplementedError() + + override fun printseeds(printSeeds: Any?) = throw NotImplementedError() + + override fun dontoptimize() = throw NotImplementedError() + + override fun dontobfuscate() = throw NotImplementedError() + + override fun extendClassSpecifications( + classSpecifications: MutableList?, + classSpecification: ClassSpecification? + ): MutableList = throw NotImplementedError() + + override fun allowaccessmodification() = throw NotImplementedError() + + @Internal + override fun getdontobfuscate(): Any? = throw NotImplementedError() + + @Internal + override fun getprintmapping(): Any? = throw NotImplementedError() + + override fun flattenpackagehierarchy() = throw NotImplementedError() + + override fun flattenpackagehierarchy(flattenPackageHierarchy: String?) = throw NotImplementedError() + + override fun android() = throw NotImplementedError() + + override fun dump() = throw NotImplementedError() + + override fun dump(dump: Any?) = throw NotImplementedError() + + @Internal + override fun getdontshrink(): Any? = throw NotImplementedError() + + @Internal + override fun getkeepattributes(): Any? = throw NotImplementedError() + + override fun microedition() = throw NotImplementedError() + + override fun keepparameternames() = throw NotImplementedError() + + override fun addconfigurationdebugging() = throw NotImplementedError() + + override fun packageobfuscationdictionary(packageObfuscationDictionary: Any?) = throw NotImplementedError() + + @Internal + override fun getdontskipnonpubliclibraryclassmembers(): Any? = throw NotImplementedError() + + override fun dontskipnonpubliclibraryclassmembers() = throw NotImplementedError() + + @Internal + override fun getprintconfiguration(): Any? = throw NotImplementedError() + + override fun forceprocessing() = throw NotImplementedError() + + override fun keepclassmembers(classSpecificationString: String?) = throw NotImplementedError() + + override fun keepclassmembers(keepArgs: MutableMap?, classSpecificationString: String?) = throw NotImplementedError() + + override fun keepclassmembers(keepClassSpecificationArgs: MutableMap?) = throw NotImplementedError() + + override fun keepclassmembers(keepClassSpecificationArgs: MutableMap?, classMembersClosure: Closure<*>?) = throw NotImplementedError() + + @Internal + override fun getmergeinterfacesaggressively(): Any? = throw NotImplementedError() + + @Internal + override fun getConfigurationFiles(): MutableList = throw NotImplementedError() + + @Internal + override fun getkeeppackagenames(): Any? = throw NotImplementedError() + + override fun assumevalues(classSpecificationString: String?) = throw NotImplementedError() + + override fun assumevalues(classSpecificationArgs: MutableMap?, classMembersClosure: Closure<*>?) = throw NotImplementedError() + + override fun printusage() = throw NotImplementedError() + + override fun printusage(printUsage: Any?) = throw NotImplementedError() + + @Internal + override fun getprintseeds(): Any? = throw NotImplementedError() + + @Internal + override fun getadaptresourcefilenames(): Any? = throw NotImplementedError() + + override fun assumenoexternalsideeffects(classSpecificationString: String?) = throw NotImplementedError() + + override fun assumenoexternalsideeffects(classSpecificationArgs: MutableMap?, classMembersClosure: Closure<*>?) = throw NotImplementedError() + + override fun dontwarn() = throw NotImplementedError() + + override fun dontwarn(filter: String?) = throw NotImplementedError() + + @Internal + override fun getrepackageclasses(): Any? = throw NotImplementedError() + + @Internal + override fun getadaptresourcefilecontents(): Any? = throw NotImplementedError() + + @Internal + override fun getflattenpackagehierarchy(): Any? = throw NotImplementedError() + + override fun optimizationpasses(optimizationPasses: Int) = throw NotImplementedError() + + override fun adaptresourcefilenames() = throw NotImplementedError() + + override fun adaptresourcefilenames(filter: String?) = throw NotImplementedError() + + override fun method(memberSpecificationArgs: MutableMap?) = throw NotImplementedError() + + @Internal + override fun getadaptclassstrings(): Any? = throw NotImplementedError() + + override fun repackageclasses() = throw NotImplementedError() + + override fun repackageclasses(repackageClasses: String?) = throw NotImplementedError() + + @Internal + override fun getkeepparameternames(): Any? = throw NotImplementedError() + + override fun adaptresourcefilecontents() = throw NotImplementedError() + + override fun adaptresourcefilecontents(filter: String?) = throw NotImplementedError() +} diff --git a/buildSrc/src/main/kotlin/CommonUtil.kt b/buildSrc/src/main/kotlin/CommonUtil.kt index 2368a8b9fd4..17f4b1e07bc 100644 --- a/buildSrc/src/main/kotlin/CommonUtil.kt +++ b/buildSrc/src/main/kotlin/CommonUtil.kt @@ -10,7 +10,9 @@ import org.gradle.api.plugins.JavaPluginConvention import org.gradle.api.tasks.JavaExec import org.gradle.api.tasks.SourceSet import org.gradle.api.tasks.SourceSetOutput +import org.gradle.api.tasks.bundling.AbstractArchiveTask import org.gradle.kotlin.dsl.* +import proguard.gradle.ProGuardTask import java.io.File import java.util.concurrent.Callable @@ -71,3 +73,9 @@ fun Project.javaPluginConvention(): JavaPluginConvention = the() fun Project.findJavaPluginConvention(): JavaPluginConvention? = convention.findByType() ?: convention.findPlugin() fun JavaExec.pathRelativeToWorkingDir(file: File): String = file.relativeTo(workingDir).invariantSeparatorsPath + +fun Task.singleOutputFile(): File = when (this) { + is AbstractArchiveTask -> archiveFile.get().asFile + is ProGuardTask -> project.file(outJarFiles.single()!!) + else -> outputs.files.singleFile +} diff --git a/buildSrc/src/main/kotlin/artifacts.kt b/buildSrc/src/main/kotlin/artifacts.kt index 0d07dfecc5e..c57403bf016 100644 --- a/buildSrc/src/main/kotlin/artifacts.kt +++ b/buildSrc/src/main/kotlin/artifacts.kt @@ -64,6 +64,8 @@ fun Project.runtimeJarArtifactBy(task: Task, artifactRef: Any, body: Configurabl } } +fun Project.runtimeJar(body: Jar.() -> Unit = {}): TaskProvider = runtimeJar(getOrCreateTask("jar", body), { }) + fun Project.runtimeJar(task: TaskProvider, body: T.() -> Unit = {}): TaskProvider { tasks.named("jar").configure { removeArtifacts(configurations.getOrCreate("archives"), this) @@ -83,8 +85,6 @@ fun Project.runtimeJar(task: TaskProvider, body: T.() -> Unit = {}) return task } -fun Project.runtimeJar(body: Jar.() -> Unit = {}): TaskProvider = runtimeJar(getOrCreateTask("jar", body), { }) - fun Project.sourcesJar(body: Jar.() -> Unit = {}): TaskProvider { val task = tasks.register("sourcesJar") { duplicatesStrategy = DuplicatesStrategy.EXCLUDE diff --git a/libraries/reflect/build.gradle.kts b/libraries/reflect/build.gradle.kts index 7adaace964c..921bb2bbc9a 100644 --- a/libraries/reflect/build.gradle.kts +++ b/libraries/reflect/build.gradle.kts @@ -5,7 +5,6 @@ import com.github.jengelman.gradle.plugins.shadow.transformers.TransformerContex import kotlinx.metadata.jvm.KmModuleVisitor import kotlinx.metadata.jvm.KotlinModuleMetadata import org.gradle.api.tasks.PathSensitivity.RELATIVE -import proguard.gradle.ProGuardTask import shadow.org.apache.tools.zip.ZipEntry import shadow.org.apache.tools.zip.ZipOutputStream @@ -21,6 +20,8 @@ plugins { java } +val JDK_16: String by rootProject.extra + callGroovy("configureJavaOnlyJvm6Project", project) publish() @@ -43,7 +44,6 @@ dependencies { proguardDeps(kotlinStdlib()) proguardAdditionalInJars(project(":kotlin-annotations-jvm")) - proguardDeps(files(firstFromJavaHomeThatExists("jre/lib/rt.jar", "../Classes/classes.jar", jdkHome = File(property("JDK_16") as String)))) embedded(project(":core:type-system")) embedded(project(":kotlin-reflect-api")) @@ -56,7 +56,7 @@ dependencies { embedded(project(":core:util.runtime")) embedded("javax.inject:javax.inject:1") embedded(protobufLite()) - + compileOnly("org.jetbrains:annotations:13.0") } @@ -139,16 +139,16 @@ val stripMetadata by tasks.registering { val proguardOutput = "$libsDir/${property("archivesBaseName")}-proguard.jar" -val proguard by task { +val proguard by task { dependsOn(stripMetadata) - inputs.files(stripMetadata.get().outputs.files) - outputs.file(proguardOutput) injars(mapOf("filter" to "!META-INF/versions/**"), stripMetadata.get().outputs.files) injars(mapOf("filter" to "!META-INF/**,!**/*.kotlin_builtins"), proguardAdditionalInJars) outjars(proguardOutput) + jdkHome = File(JDK_16) libraryjars(mapOf("filter" to "!META-INF/versions/**"), proguardDeps) + libraryjars(firstFromJavaHomeThatExists("jre/lib/rt.jar", "../Classes/classes.jar", jdkHome = jdkHome!!)) configuration("$core/reflection.jvm/reflection.pro") } @@ -202,7 +202,7 @@ val intermediate = when { val result by task { dependsOn(intermediate) from { - zipTree(intermediate.get().outputs.files.singleFile) + zipTree(intermediate.get().singleOutputFile()) } callGroovy("manifestAttributes", manifest, project, "Main") } @@ -210,8 +210,10 @@ val result by task { val modularJar by task { dependsOn(intermediate) archiveClassifier.set("modular") - from(zipTree(intermediate.get().outputs.files.single())) - from(zipTree(reflectShadowJar.get().archivePath)) { + from { + zipTree(intermediate.get().singleOutputFile()) + } + from(zipTree(provider { reflectShadowJar.get().archiveFile.get().asFile })) { include("META-INF/versions/**") } callGroovy("manifestAttributes", manifest, project, "Main", true) diff --git a/libraries/tools/kotlin-main-kts/build.gradle.kts b/libraries/tools/kotlin-main-kts/build.gradle.kts index d4c69d1d3bc..97839efd114 100644 --- a/libraries/tools/kotlin-main-kts/build.gradle.kts +++ b/libraries/tools/kotlin-main-kts/build.gradle.kts @@ -8,6 +8,7 @@ plugins { id("jps-compatible") } +val JDK_18: String by rootProject.extra val jarBaseName = property("archivesBaseName") as String val proguardLibraryJars by configurations.creating @@ -31,9 +32,7 @@ dependencies { embedded(project(":kotlin-script-util")) { isTransitive = false } embedded("org.apache.ivy:ivy:2.5.0") embedded(commonDep("org.jetbrains.kotlinx", "kotlinx-coroutines-core")) { isTransitive = false } - proguardLibraryJars(files(firstFromJavaHomeThatExists("jre/lib/rt.jar", "../Classes/classes.jar"), - firstFromJavaHomeThatExists("jre/lib/jsse.jar", "../Classes/jsse.jar"), - toolsJarFile())) + proguardLibraryJars(kotlinStdlib()) proguardLibraryJars(project(":kotlin-reflect")) proguardLibraryJars(project(":kotlin-compiler")) @@ -67,20 +66,23 @@ val relocatedJar by task { } } -val proguard by task { +val proguard by task { dependsOn(relocatedJar) configuration("main-kts.pro") injars(mapOf("filter" to "!META-INF/versions/**"), relocatedJar.get().outputs.files) - val outputJar = fileFrom(buildDir, "libs", "$jarBaseName-$version-after-proguard.jar") - - outjars(outputJar) - - inputs.files(relocatedJar.get().outputs.files.singleFile) - outputs.file(outputJar) + outjars(fileFrom(buildDir, "libs", "$jarBaseName-$version-after-proguard.jar")) + jdkHome = File(JDK_18) libraryjars(mapOf("filter" to "!META-INF/versions/**"), proguardLibraryJars) + libraryjars( + files( + firstFromJavaHomeThatExists("jre/lib/rt.jar", "../Classes/classes.jar", jdkHome = jdkHome!!), + firstFromJavaHomeThatExists("jre/lib/jsse.jar", "../Classes/jsse.jar", jdkHome = jdkHome!!), + toolsJarFile(jdkHome = jdkHome!!) + ) + ) } val resultJar by task { @@ -88,7 +90,7 @@ val resultJar by task { dependsOn(pack) setupPublicJar(jarBaseName) from { - zipTree(pack.get().outputs.files.singleFile) + zipTree(pack.get().singleOutputFile()) } } diff --git a/prepare/compiler/build.gradle.kts b/prepare/compiler/build.gradle.kts index 42cbeaec7e7..6b05273ee8a 100644 --- a/prepare/compiler/build.gradle.kts +++ b/prepare/compiler/build.gradle.kts @@ -1,7 +1,6 @@ @file:Suppress("HasPlatformType") import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar -import proguard.gradle.ProGuardTask import java.util.regex.Pattern.quote description = "Kotlin Compiler" @@ -12,6 +11,8 @@ plugins { java } +val JDK_18: String by rootProject.extra + val fatJarContents by configurations.creating val fatJarContentsStripMetadata by configurations.creating val fatJarContentsStripServices by configurations.creating @@ -133,13 +134,6 @@ dependencies { compile(commonDep("org.jetbrains.intellij.deps", "trove4j")) proguardLibraries(project(":kotlin-annotations-jvm")) - proguardLibraries( - files( - firstFromJavaHomeThatExists("jre/lib/rt.jar", "../Classes/classes.jar"), - firstFromJavaHomeThatExists("jre/lib/jsse.jar", "../Classes/jsse.jar"), - toolsJarFile() - ) - ) compilerVersion(project(":compiler:compiler.version")) proguardLibraries(project(":compiler:compiler.version")) @@ -253,24 +247,42 @@ val packCompiler by task { } } -val proguard by task { +val proguard by task { dependsOn(packCompiler) - configuration("$rootDir/compiler/compiler.pro") - val outputJar = fileFrom(buildDir, "libs", "$compilerBaseName-after-proguard.jar") + jdkHome = File(JDK_18) - inputs.files(packCompiler.get().outputs.files.singleFile) - outputs.file(outputJar) + configuration("$projectDir/compiler.pro") + + injars( + mapOf("filter" to """ + !org/apache/log4j/jmx/Agent*, + !org/apache/log4j/net/JMS*, + !org/apache/log4j/net/SMTP*, + !org/apache/log4j/or/jms/MessageRenderer*, + !org/jdom/xpath/Jaxen*, + !org/jline/builtins/ssh/**, + !org/mozilla/javascript/xml/impl/xmlbeans/**, + !net/sf/cglib/**, + !META-INF/maven**, + **.class,**.properties,**.kt,**.kotlin_*,**.jnilib,**.so,**.dll,**.txt,**.caps, + META-INF/services/**,META-INF/native/**,META-INF/extensions/**,META-INF/MANIFEST.MF, + messages/**""".trimIndent()), + provider { packCompiler.get().outputs.files.singleFile } + ) + + outjars(fileFrom(buildDir, "libs", "$compilerBaseName-after-proguard.jar")) libraryjars(mapOf("filter" to "!META-INF/versions/**"), proguardLibraries) + libraryjars( + files( + firstFromJavaHomeThatExists("jre/lib/rt.jar", "../Classes/classes.jar", jdkHome = jdkHome!!), + firstFromJavaHomeThatExists("jre/lib/jsse.jar", "../Classes/jsse.jar", jdkHome = jdkHome!!), + toolsJarFile(jdkHome = jdkHome!!) + ) + ) printconfiguration("$buildDir/compiler.pro.dump") - - // This properties are used by proguard config compiler.pro - doFirst { - System.setProperty("kotlin-compiler-jar-before-shrink", packCompiler.get().outputs.files.singleFile.canonicalPath) - System.setProperty("kotlin-compiler-jar", outputJar.canonicalPath) - } } val pack = if (kotlinBuildProperties.proguard) proguard else packCompiler @@ -281,7 +293,7 @@ val jar = runtimeJar { dependsOn(compilerVersion) from { - zipTree(pack.get().outputs.files.singleFile) + zipTree(pack.get().singleOutputFile()) } from { diff --git a/compiler/compiler.pro b/prepare/compiler/compiler.pro similarity index 94% rename from compiler/compiler.pro rename to prepare/compiler/compiler.pro index 520088a3c1d..bab2a4bafb7 100644 --- a/compiler/compiler.pro +++ b/prepare/compiler/compiler.pro @@ -1,19 +1,3 @@ --injars ''( -!org/apache/log4j/jmx/Agent*, -!org/apache/log4j/net/JMS*, -!org/apache/log4j/net/SMTP*, -!org/apache/log4j/or/jms/MessageRenderer*, -!org/jdom/xpath/Jaxen*, -!org/jline/builtins/ssh/**, -!org/mozilla/javascript/xml/impl/xmlbeans/**, -!net/sf/cglib/**, -!META-INF/maven**, -**.class,**.properties,**.kt,**.kotlin_*,**.jnilib,**.so,**.dll,**.txt,**.caps, -META-INF/services/**,META-INF/native/**,META-INF/extensions/**,META-INF/MANIFEST.MF, -messages/**) - --outjars '' - -dontnote ** -dontwarn apple.awt.* -dontwarn dk.brics.automaton.* diff --git a/compiler/compiler.pro.191 b/prepare/compiler/compiler.pro.191 similarity index 94% rename from compiler/compiler.pro.191 rename to prepare/compiler/compiler.pro.191 index fb2958f5949..219031a3413 100644 --- a/compiler/compiler.pro.191 +++ b/prepare/compiler/compiler.pro.191 @@ -1,19 +1,3 @@ --injars ''( -!org/apache/log4j/jmx/Agent*, -!org/apache/log4j/net/JMS*, -!org/apache/log4j/net/SMTP*, -!org/apache/log4j/or/jms/MessageRenderer*, -!org/jdom/xpath/Jaxen*, -!org/jline/builtins/ssh/**, -!org/mozilla/javascript/xml/impl/xmlbeans/**, -!net/sf/cglib/**, -!META-INF/maven**, -**.class,**.properties,**.kt,**.kotlin_*,**.jnilib,**.so,**.dll,**.txt,**.caps, -META-INF/services/**,META-INF/native/**,META-INF/extensions/**,META-INF/MANIFEST.MF, -messages/**) - --outjars '' - -dontnote ** -dontwarn com.intellij.util.ui.IsRetina* -dontwarn com.intellij.util.ui.UIUtilities