Skip to content
Snippets Groups Projects
Select Git revision
  • main default protected
  • feature/waiting
  • feature/control
  • feature/tracing
  • feature/demo
  • wip
6 results

build.gradle

Blame
  • build.gradle 7.75 KiB
    plugins {
        id 'java'
        id 'application'
        id 'idea'
        id 'org.jastadd' version "${jastaddgradle_version}"
        id "com.google.protobuf" version "${protobuf_plugin_version}"
    }
    
    group 'de.tudresden.inf.st'
    
    ext {
        mainClassName = 'de.tudresden.inf.st.mg.Main'
    }
    
    // set the main class name for `gradle run`
    application.mainClass = "${mainClassName}"
    
    java.toolchain.languageVersion = JavaLanguageVersion.of(11)
    
    protobuf {
        protoc {
            // The artifact spec for the Protobuf Compiler
            artifact = "com.google.protobuf:protoc:${protobuf_version}"
        }
    }
    
    repositories {
        mavenCentral()
        maven {
            name 'gitlab-maven'
            url 'https://git-st.inf.tu-dresden.de/api/v4/groups/jastadd/-/packages/maven'
        }
    }
    
    configurations {
        // add a configuration to store the grammar printing dependency in
        grammar2uml
        relast
        ragconnect
    }
    
    File genSrc = file("src/gen/java")
    idea.module.generatedSourceDirs += genSrc
    sourceSets.main.java.srcDir genSrc
    
    dependencies {
        implementation group: 'de.tudresden.inf.st', name: 'dumpAst', version: "${dumpAst_version}"
        grammar2uml group: 'de.tudresden.inf.st', name: 'grammar2uml', version: "${grammar2uml_version}"
        relast group: 'org.jastadd', name: 'relast', version: "${relast_version}"
        testImplementation group: 'org.assertj', name: 'assertj-core', version: "${assertj_version}"
        testImplementation group: 'org.junit.jupiter', name: 'junit-jupiter-api', version: "${jupyter_version}"
        testRuntimeOnly group: 'org.junit.jupiter', name: 'junit-jupiter-engine', version: "${jupyter_version}"
        implementation group: 'io.javalin', name: 'javalin', version: "${javalin_version}"
        implementation group: 'org.json', name: 'json', version: '20220320'
        implementation group: 'com.fasterxml.jackson.core', name: 'jackson-databind', version: '2.13.3'
        implementation group: 'com.fasterxml.jackson.core', name: 'jackson-core', version: '2.13.3'
        implementation group: 'com.fasterxml.jackson.dataformat', name: 'jackson-dataformat-yaml', version: '2.13.3'
        implementation group: 'org.slf4j', name: 'slf4j-simple', version: '1.7.31'
        ragconnect group: 'de.tudresden.inf.st', name: 'ragconnect', version: '1.0.0'
        jastadd2 "org.jastadd:jastadd2:2.3.5-dresden-6"
        implementation group: 'com.google.protobuf', name: 'protobuf-java', version: "${protobuf_version}"
        implementation group: 'com.google.protobuf', name: 'protobuf-java-util', version: "${protobuf_version}"
        implementation group: 'org.fusesource.mqtt-client', name: 'mqtt-client', version: '1.15'
    }
    
    def versionFile = 'src/main/resources/Version.properties'
    def oldProps = new Properties()
    
    try {
        file(versionFile).withInputStream { stream -> oldProps.load(stream) }
        version = oldProps['version']
    } catch (e) {
        // this happens, if either the properties file is not present, or cannot be read from
        throw new GradleException("File ${versionFile} not found or unreadable. Aborting.", e)
    }
    
    task printVersion() {
        doLast {
            println(version)
        }
    }
    
    task newVersion() {
        doFirst {
            def props = new Properties()
            props['version'] = value
            props.store(file(versionFile).newWriter(), null)
        }
    }
    
    test {
        testLogging.showStandardStreams = true
        useJUnitPlatform()
    }
    
    jar {
        manifest {
            attributes 'Main-Class': "${mainClassName}"
        }
    
        from {
            configurations.runtimeClasspath.collect { return (it.isDirectory() ? it : zipTree(it)) }
        }
        duplicatesStrategy = DuplicatesStrategy.WARN
    }
    
    def relastFiles = ['./src/gen/jastadd/MotionGrammar.relast', './src/main/jastadd/load/LoadWorld.relast', './src/gen/jastadd/RobotWorld.relast', './src/main/jastadd/load/LoadUnload.relast', './src/main/jastadd/cleanup/Cleanup.relast']
    def loadingRelastFiles = ['./src/main/jastadd/common/MotionGrammar.relast', './src/main/jastadd/load/LoadWorld.relast', './src/main/jastadd/load/LoadUnload.relast']
    def cleaningRelastFiles = ['./src/main/jastadd/common/MotionGrammar.relast', './src/main/jastadd/cleanup/RobotWorld.relast', './src/main/jastadd/cleanup/Cleanup.relast']
    def grammarPrefix = './src/gen/jastadd/MotionGrammar'
    def loadingGrammarDiagramFile = './src/gen/resources/diagrams/grammar/loading.png'
    def cleaningGrammarDiagramFile = './src/gen/resources/diagrams/grammar/cleaning.png'
    def jastAddListName = 'JastAddList'
    
    // phases: ragConnect -> RelAst -> JastAdd
    // phase: ragConnect
    task ragConnect(type: JavaExec) {
        group = 'Build'
        main = 'org.jastadd.ragconnect.compiler.Compiler'
        classpath = configurations.ragconnect
    
        args([
                '--o=src/gen/jastadd',
                './src/main/jastadd/common/MotionGrammar.relast',
                './src/main/jastadd/cleanup/RobotWorld.relast',
                './src/main/jastadd/cleanup/RobotWorld.connect',
    //            '--logReads',
    //            '--logWrites',
    //            '--logIncremental',
    //            '--verbose',
                '--rootNode=RobotWorld',
                '--protocols=mqtt',
                "--List=${jastAddListName}",
                '--experimental-jastadd-329',
                '--incremental=param',
                '--tracing=cache,flush',
                '--evaluationCounter'
        ])
    
    }
    
    task generateLoadingGrammarDiagrams(type: JavaExec) {
        group = 'Documentation'
        classpath = configurations.grammar2uml
        mainClass = 'de.tudresden.inf.st.jastadd.grammar2uml.compiler.Compiler'
    
        args "--output=${loadingGrammarDiagramFile}", '--defaultFolders'
        args loadingRelastFiles
    
        inputs.files loadingRelastFiles
        outputs.files file(cleaningGrammarDiagramFile)
    }
    
    task generateCleaningGrammarDiagrams(type: JavaExec) {
        group = 'Documentation'
        classpath = configurations.grammar2uml
        mainClass = 'de.tudresden.inf.st.jastadd.grammar2uml.compiler.Compiler'
    
        args "--output=${cleaningGrammarDiagramFile}", '--defaultFolders'
        args cleaningRelastFiles
    
        inputs.files cleaningRelastFiles
        outputs.files file(cleaningGrammarDiagramFile)
    }
    
    task relastToJastAdd(type: JavaExec) {
        group = 'Build'
        classpath = configurations.relast
        mainClass = 'org.jastadd.relast.compiler.Compiler'
    
        args "--grammarName=${grammarPrefix}",
                '--useJastAddNames',
                '--listClass=java.util.ArrayList',
                "--jastAddList=${jastAddListName}",
                '--resolverHelper',
                '--file',
                '--serializer=jackson'
        args relastFiles
    
        inputs.files relastFiles
        outputs.files file("${grammarPrefix}.ast"), file("${grammarPrefix}.jadd")
    }
    
    jastadd {
        configureModuleBuild()
        modules {
            //noinspection GroovyAssignabilityCheck
            module('mg') {
    
                java {
                    basedir 'src/'
                    include 'main/**/*.java'
                    include 'gen/**/*.java'
                }
    
                jastadd {
                    basedir 'src/'
                    include 'main/jastadd/**/*.ast'
                    include 'main/jastadd/**/*.jadd'
                    include 'main/jastadd/**/*.jrag'
                    include 'gen/jastadd/**/*.ast'
                    include 'gen/jastadd/**/*.jadd'
                    include 'gen/jastadd/**/*.jrag'
                }
            }
        }
    
        cleanGen.doFirst {
            delete 'src/gen/'
            delete 'src/gen-res/'
        }
    
        module = 'mg'
        astPackage = 'de.tudresden.inf.st.mg.jastadd.model'
        genDir = 'src/gen/java'
        buildInfoDir = 'src/gen-res'
    
        // default options are: '--rewrite=cnta', '--safeLazy', '--visitCheck=false', '--cacheCycle=false'
        extraJastAddOptions = ["--List=${jastAddListName}",
                               "--flush=api",
                               "--incremental=param,debug",
                               "--tracing=cache,flush"]
    }
    
    // Workflow configuration for phases
    clean.dependsOn cleanGen
    generateAst.dependsOn relastToJastAdd
    generateAst.dependsOn generateLoadingGrammarDiagrams, generateCleaningGrammarDiagrams
    relastToJastAdd.dependsOn ragConnect