build.gradle.kts 4.6 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 15 16 17 18 19
buildscript {
    repositories {
        jcenter()
    }

    dependencies {
        classpath("com.github.jengelman.gradle.plugins:shadow:1.2.3")
        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-runtime.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 46 47 48 49 50 51 52 53 54 55
val compilerModules: Array<String> by rootProject.extra

val packagesToRelocate =
        listOf("com.intellij",
                "com.google",
                "com.sampullara",
                "org.apache",
                "org.jdom",
                "org.picocontainer",
                "jline",
                "gnu",
                "javax.inject",
                "org.fusesource")

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

142
publish()