build.gradle.kts (146 lines of code) (raw):
import org.gradle.api.tasks.testing.logging.TestExceptionFormat
import org.gradle.api.tasks.testing.logging.TestLogEvent
import org.jetbrains.grammarkit.tasks.GenerateLexerTask
import org.jetbrains.grammarkit.tasks.GenerateParserTask
import org.jetbrains.intellij.platform.gradle.IntelliJPlatformType
import org.jetbrains.intellij.platform.gradle.TestFrameworkType
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
import org.jetbrains.intellij.platform.gradle.tasks.PatchPluginXmlTask
import org.jetbrains.intellij.platform.gradle.tasks.RunIdeTask
import org.jetbrains.kotlin.gradle.dsl.JvmTarget
import org.jetbrains.kotlin.gradle.dsl.KotlinVersion
val projectArend = gradle.includedBuild("Arend")
group = "org.arend.lang"
version = "1.10.0.3"
plugins {
idea
kotlin("jvm") version "2.0.0"
id("org.jetbrains.intellij.platform") version "2.0.1"
id("org.jetbrains.grammarkit") version "2022.3.2.2"
}
repositories {
mavenCentral()
intellijPlatform {
defaultRepositories()
}
}
dependencies {
implementation("org.arend:base")
implementation(kotlin("reflect"))
implementation(kotlin("stdlib-jdk8"))
implementation("org.scilab.forge:jlatexmath:1.0.7")
implementation("guru.nidi:graphviz-java:0.18.1")
testRuntimeOnly("org.junit.platform:junit-platform-launcher:1.6.1")
testCompileOnly("junit:junit:4.13.1")
intellijPlatform {
create(IntelliJPlatformType.IntellijIdeaCommunity, "2024.3")
instrumentationTools()
bundledPlugins("org.jetbrains.plugins.yaml", "com.intellij.java", "org.jetbrains.kotlin")
plugins("IdeaVIM:2.16.0")
testFramework(TestFrameworkType.Platform)
testFramework(TestFrameworkType.Plugin.Java)
}
}
java {
toolchain.languageVersion.set(JavaLanguageVersion.of(21))
sourceCompatibility = JavaVersion.VERSION_21
targetCompatibility = JavaVersion.VERSION_21
}
tasks["jar"].dependsOn(
projectArend.task(":api:jar"),
projectArend.task(":proto:jar"),
projectArend.task(":base:jar")
)
val generated = arrayOf("src/main/doc-lexer", "src/main/lexer", "src/main/parser")
sourceSets {
main {
java.srcDirs(*generated)
}
}
idea {
module {
generatedSourceDirs.addAll(generated.map(::file))
outputDir = file("$buildDir/classes/main")
testOutputDir = file("$buildDir/classes/test")
}
}
tasks {
val test by getting(Test::class) {
isScanForTestClasses = false
// Only run tests from classes that end with "Test"
include("**/*Test.class")
}
}
intellijPlatform {
pluginConfiguration {
name = "Arend"
}
instrumentCode = true
}
tasks.named<JavaExec>("runIde") {
jvmArgs = listOf("-Xmx4g")
}
tasks.withType<PatchPluginXmlTask>().configureEach {
version = project.version.toString()
pluginId.set(project.group.toString())
changeNotes.set(file("src/main/html/change-notes.html").readText())
pluginDescription.set(file("src/main/html/description.html").readText())
}
val generateArendLexer = tasks.register<GenerateLexerTask>("genArendLexer") {
description = "Generates lexer"
group = "build setup"
sourceFile.set(file("src/main/grammars/ArendLexer.flex"))
targetOutputDir.set(file("src/main/lexer/org/arend/lexer"))
purgeOldFiles.set(true)
}
val generateArendParser = tasks.register<GenerateParserTask>("genArendParser") {
description = "Generates parser"
group = "build setup"
sourceFile.set(file("src/main/grammars/ArendParser.bnf"))
targetRootOutputDir.set(file("src/main/parser"))
pathToParser.set("/org/arend/parser/ArendParser.java")
pathToPsiRoot.set("/org/arend/psi")
purgeOldFiles.set(true)
}
val generateArendDocLexer = tasks.register<GenerateLexerTask>("genArendDocLexer") {
description = "Generates doc lexer"
group = "build setup"
sourceFile.set(file("src/main/grammars/ArendDocLexer.flex"))
targetOutputDir.set(file("src/main/doc-lexer/org/arend/lexer"))
purgeOldFiles.set(true)
}
tasks.withType<KotlinCompile>().configureEach {
compilerOptions {
jvmTarget.set(JvmTarget.JVM_21)
languageVersion.set(KotlinVersion.KOTLIN_2_0)
apiVersion.set(KotlinVersion.KOTLIN_1_9)
freeCompilerArgs.set(listOf("-Xjvm-default=all"))
}
dependsOn(generateArendLexer, generateArendParser, generateArendDocLexer)
}
tasks.withType<Test>().configureEach {
maxHeapSize = "2048m"
testLogging {
if (prop("showTestStatus") == "true") {
events = setOf(TestLogEvent.PASSED, TestLogEvent.SKIPPED, TestLogEvent.FAILED)
}
exceptionFormat = TestExceptionFormat.FULL
}
}
tasks.register<Copy>("prelude") {
val dir = projectArend.projectDir
from(dir.resolve("lib/Prelude.ard"))
into("src/main/resources/lib")
dependsOn(projectArend.task(":cli:buildPrelude"))
}
tasks.withType<Wrapper> {
gradleVersion = "8.5"
}
tasks.register<RunIdeTask>("generateArendLibHTML") {
systemProperty("java.awt.headless", true)
args = listOf("generateArendLibHtml") +
(project.findProperty("pathToArendLib") as String? ?: "") +
(project.findProperty("pathToArendLibInArendSite") as String? ?: "") +
(project.findProperty("versionArendLib") as String? ?: "") +
(project.findProperty("updateColorScheme") as String? ?: "")
}
// Utils
fun prop(name: String): Any? = extra.properties[name]