build.gradle.kts 4.7 KB
Newer Older
1 2 3 4 5 6

import java.io.File
import proguard.gradle.ProGuardTask
import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar
import org.gradle.api.file.DuplicatesStrategy

7 8
description = "Kotlin Compiler"

9 10 11 12 13 14
buildscript {
    repositories {
        jcenter()
    }

    dependencies {
15
        classpath("com.github.jengelman.gradle.plugins:shadow:${property("versions.shadow")}")
16 17 18 19
        classpath("net.sf.proguard:proguard-gradle:5.3.1")
    }
}

20 21 22
plugins {
    `java-base`
}
23 24 25 26

// Set to false to disable proguard run on kotlin-compiler.jar. Speeds up the build
val shrink = true
val compilerManifestClassPath =
27
        "kotlin-stdlib.jar kotlin-reflect.jar kotlin-script-runtime.jar"
28

29 30 31 32 33 34
val fatJarContents by configurations.creating
val fatSourcesJarContents by configurations.creating
val proguardLibraryJars by configurations.creating
val fatJar by configurations.creating
val compilerJar by configurations.creating
val archives by configurations
35

36
val compilerBaseName = name
37 38 39

val outputJar = File(buildDir, "libs", "$compilerBaseName.jar")

40

41

42 43 44 45
val compilerModules: Array<String> by rootProject.extra

val packagesToRelocate =
        listOf("com.intellij",
46 47 48 49 50 51 52 53 54 55
               "com.google",
               "com.sampullara",
               "org.apache",
               "org.jdom",
               "org.picocontainer",
               "org.jline",
               "gnu",
               "javax.inject",
               "org.fusesource",
               "kotlinx.coroutines")
56

57 58 59
val ideaCoreSdkJars: Array<String> by rootProject.extra
val coreSdkJarsSimple = ideaCoreSdkJars.filterNot { it == "jdom" || it == "log4j" }.toTypedArray()

60 61 62 63 64
compilerModules.forEach { evaluationDependsOn(it) }

val compiledModulesSources = compilerModules.map {
    project(it).the<JavaPluginConvention>().sourceSets.getByName("main").allSource
}
65 66

dependencies {
67 68 69 70 71 72 73 74
    compilerModules.forEach {
        fatJarContents(project(it)) { isTransitive = false }
    }
    compiledModulesSources.forEach {
        fatSourcesJarContents(it)
    }

    fatJarContents(project(":core:builtins", configuration = "builtins"))
75 76
    fatJarContents(ideaSdkCoreDeps(*coreSdkJarsSimple))
    fatJarContents(ideaSdkDeps("jna-platform"))
77 78
    fatJarContents(commonDep("javax.inject"))
    fatJarContents(commonDep("org.jline", "jline"))
I
Ilya Chernikov 已提交
79
    fatJarContents(commonDep("org.fusesource.jansi", "jansi"))
80 81 82 83 84
    fatJarContents(protobufFull())
    fatJarContents(commonDep("com.github.spullara.cli-parser", "cli-parser"))
    fatJarContents(commonDep("com.google.code.findbugs", "jsr305"))
    fatJarContents(commonDep("io.javaslang", "javaslang"))
    fatJarContents(preloadedDeps("json-org"))
85
    fatJarContents(preloadedDeps("kotlinx-coroutines-core"))
86 87 88

    proguardLibraryJars(files(firstFromJavaHomeThatExists("lib/rt.jar", "../Classes/classes.jar"),
            firstFromJavaHomeThatExists("lib/jsse.jar", "../Classes/jsse.jar"),
89
            toolsJar()))
90 91 92
    proguardLibraryJars(projectDist(":kotlin-stdlib"))
    proguardLibraryJars(projectDist(":kotlin-script-runtime"))
    proguardLibraryJars(projectDist(":kotlin-reflect"))
93 94
}

95 96
val packCompiler by task<ShadowJar> {
    configurations = listOf(fatJar)
97 98 99
    duplicatesStrategy = DuplicatesStrategy.EXCLUDE
    destinationDir = File(buildDir, "libs")
    dependsOn(protobufFullTask)
100 101 102

    setupPublicJar("before-proguard", "")
    from(fatJarContents)
103 104 105
    ideaSdkDeps("jps-model.jar", subdir = "jps").forEach { from(zipTree(it)) { exclude("META-INF/services/**") } }
    ideaSdkDeps("oromatcher").forEach { from(zipTree(it)) { exclude("META-INF/jb/** META-INF/LICENSE") } }
    ideaSdkCoreDeps("jdom", "log4j").forEach { from(zipTree(it)) { exclude("META-INF/jb/** META-INF/LICENSE") } }
106 107 108 109 110

    manifest.attributes.put("Class-Path", compilerManifestClassPath)
    manifest.attributes.put("Main-Class", "org.jetbrains.kotlin.cli.jvm.K2JVMCompiler")
}

111 112
val proguard by task<ProGuardTask> {
    dependsOn(packCompiler)
113 114
    configuration("$rootDir/compiler/compiler.pro")

115 116 117
    val outputJar = File(buildDir, "libs", "$compilerBaseName-after-proguard.jar")

    inputs.files(packCompiler.outputs.files.singleFile)
118 119 120 121
    outputs.file(outputJar)

    // TODO: remove after dropping compatibility with ant build
    doFirst {
122
        System.setProperty("kotlin-compiler-jar-before-shrink", packCompiler.outputs.files.singleFile.canonicalPath)
123 124 125
        System.setProperty("kotlin-compiler-jar", outputJar.canonicalPath)
    }

126
    libraryjars(proguardLibraryJars)
127 128 129
    printconfiguration("$buildDir/compiler.pro.dump")
}

130 131 132
dist(targetName = compilerBaseName + ".jar",
     fromTask = if (shrink) proguard
                else packCompiler)
133

134 135
runtimeJarArtifactBy(proguard, proguard.outputs.files.singleFile) {
    name = compilerBaseName
136 137
    classifier = ""
}
138 139 140 141
sourcesJar {
    from(fatSourcesJarContents)
}
javadocJar()
142

143
publish()