build.gradle.kts 4.8 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
plugins {
21
    `java`
22
}
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
val compile by configurations
36

37
val compilerBaseName = name
38 39 40

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

41

42

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

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

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

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

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

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

    fatJarContents(project(":core:builtins", configuration = "builtins"))
76 77
    fatJarContents(ideaSdkCoreDeps(*coreSdkJarsSimple))
    fatJarContents(ideaSdkDeps("jna-platform"))
78 79
    fatJarContents(commonDep("javax.inject"))
    fatJarContents(commonDep("org.jline", "jline"))
I
Ilya Chernikov 已提交
80
    fatJarContents(commonDep("org.fusesource.jansi", "jansi"))
81 82 83 84 85
    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"))
86
    fatJarContents(preloadedDeps("kotlinx-coroutines-core"))
87 88 89

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

    compile(project(":kotlin-stdlib"))
    compile(project(":kotlin-script-runtime"))
    compile(project(":kotlin-reflect"))
98 99
}

100 101
val packCompiler by task<ShadowJar> {
    configurations = listOf(fatJar)
102 103 104
    duplicatesStrategy = DuplicatesStrategy.EXCLUDE
    destinationDir = File(buildDir, "libs")
    dependsOn(protobufFullTask)
105 106 107

    setupPublicJar("before-proguard", "")
    from(fatJarContents)
108 109 110
    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") } }
111 112 113 114 115

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

116 117
val proguard by task<ProGuardTask> {
    dependsOn(packCompiler)
118 119
    configuration("$rootDir/compiler/compiler.pro")

120 121 122
    val outputJar = File(buildDir, "libs", "$compilerBaseName-after-proguard.jar")

    inputs.files(packCompiler.outputs.files.singleFile)
123 124 125 126
    outputs.file(outputJar)

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

131
    libraryjars(proguardLibraryJars)
132 133 134
    printconfiguration("$buildDir/compiler.pro.dump")
}

135 136 137
dist(targetName = compilerBaseName + ".jar",
     fromTask = if (shrink) proguard
                else packCompiler)
138

139 140
runtimeJarArtifactBy(proguard, proguard.outputs.files.singleFile) {
    name = compilerBaseName
141 142
    classifier = ""
}
143 144 145 146
sourcesJar {
    from(fatSourcesJarContents)
}
javadocJar()
147

148
publish()