diff options
author | Jan Belle | 2017-09-17 15:00:32 +0000 |
---|---|---|
committer | Jan Belle | 2017-09-17 15:00:32 +0000 |
commit | 216b91e9103d80043239ecda7052fecb0999b085 (patch) | |
tree | 0c2d2f573f6c5d498e183bce322fa06713d1718a /gradle | |
parent | 26e553de11a137a1487074bce959a3b4423f2e1c (diff) | |
download | org.eclipse.etrice-216b91e9103d80043239ecda7052fecb0999b085.tar.gz org.eclipse.etrice-216b91e9103d80043239ecda7052fecb0999b085.tar.xz org.eclipse.etrice-216b91e9103d80043239ecda7052fecb0999b085.zip |
cleaned up buildnewbuild
Change-Id: If73690f1c77f6716758f60019c3d8886d899894f
Diffstat (limited to 'gradle')
-rw-r--r-- | gradle/etGenerator.gradle | 25 | ||||
-rw-r--r-- | gradle/etTest.gradle | 111 | ||||
-rw-r--r-- | gradle/etUnitConverter.gradle | 22 | ||||
-rw-r--r-- | gradle/publish.gradle | 27 |
4 files changed, 185 insertions, 0 deletions
diff --git a/gradle/etGenerator.gradle b/gradle/etGenerator.gradle new file mode 100644 index 000000000..399088d2f --- /dev/null +++ b/gradle/etGenerator.gradle @@ -0,0 +1,25 @@ + +evaluationDependsOn(':plugins:org.eclipse.etrice.generator.c') +evaluationDependsOn(':plugins:org.eclipse.etrice.generator.cpp') +evaluationDependsOn(':plugins:org.eclipse.etrice.generator.java') + +/** + * Creates an eTrice generator task + * @param name: The name of the new task + * @param models: A list of models passed to the generator + * @param genDir: The generation directory + * @param options: The eTrice generator options + */ +ext.createGeneratorTask = { name, lang, models, genDir = 'src-gen', options = [] -> + def generator = ":plugins:org.eclipse.etrice.generator.$lang" + + return tasks.create(name: name, type: JavaExec, dependsOn: "$generator:classes") { + main = project(generator).mainClassName + classpath = project(generator).sourceSets.main.runtimeClasspath + args '-msc_instr', '-genDir', genDir + args options + args models + inputs.files models + outputs.dir genDir + } +}
\ No newline at end of file diff --git a/gradle/etTest.gradle b/gradle/etTest.gradle new file mode 100644 index 000000000..2112b083f --- /dev/null +++ b/gradle/etTest.gradle @@ -0,0 +1,111 @@ +import static org.apache.tools.ant.taskdefs.condition.Os.* + +apply from: "$rootDir/gradle/etGenerator.gradle" +apply from: "$rootDir/gradle/etUnitConverter.gradle" + +def outputDir = 'log' +def srcGenDir = 'src-gen' + +clean.delete srcGenDir, outputDir + +def getMainClass(String genDir) { + // search for SubSystemRunner java file + def mainFile = fileTree(genDir, { include '**/*Runner.java' }).getSingleFile() + // relativize path to generation directory + def relPath = file(genDir).toPath().relativize(mainFile.toPath()).normalize().toString() + // remove '.java' at the end + def path = relPath.substring(0, relPath.length() - 5) + // replace all separators with '.' + def mainClass = path.replace(File.separatorChar, '.' as char) + return mainClass +} + +/** + * Creates all needed tasks for one test execution + * @param lang: The eTrice generator type ('c', 'cpp', 'java') + * @param name: The test name starting with a lower case letter + * @param models: Models that are passed to the eTrice generator + * @param options: Options that are passed to the eTrice generator + */ +ext.createTest = { lang, name, models, options = [] -> + + def nameCap = name.capitalize() + def langCap = lang.capitalize() + def testName = "$name$langCap" + def testNameCap = testName.capitalize() + def suiteName = "${project.name}.$testNameCap" + def genDir = "$srcGenDir/$testName" + def workingDir = "$outputDir/$testName" + def etuFile = "$workingDir/log/${nameCap}.etu" + + def generateTask = createGeneratorTask("generate$testNameCap", lang, models, genDir, options) + generateTask.environment 'etModellib', "org.eclipse.etrice.modellib.$lang" + + def runTask + + if(lang == 'c' || lang == 'cpp') { + model { + components { + "$testName"(NativeExecutableSpec) { + sources."$lang" { + builtBy generateTask + source { + srcDirs = [genDir] + include "**/*.$lang" + } + exportedHeaders { + srcDirs = [genDir] + } + lib project: ":runtime:org.eclipse.etrice.modellib.$lang", library: "etrice_modellib_$lang", linkage: 'static' + if(lang == 'cpp') lib project: ':runtime:org.eclipse.etrice.runtime.cpp', library: 'etrice_runtime_cpp', linkage: 'static' + lib project: ':runtime:org.eclipse.etrice.runtime.c', library: 'etrice_runtime_c', linkage: 'static' + } + binaries.all { + cCompiler.args '-g3' + cppCompiler.args '-g3' + if(isFamily(FAMILY_UNIX)) { linker.args '-lpthread', '-lrt', '-lm' } + } + } + } + } + + def exeFile = "$buildDir/exe/$testName/$testName" + runTask = tasks.create(name: "run$testNameCap", type: Exec) { + dependsOn "${testName}Executable" + commandLine exeFile, '-run_as_test' + inputs.file exeFile + outputs.file etuFile + it.workingDir = workingDir + } + } + + else if(lang == 'java') { + def testSourceSet = sourceSets.create(name) { + java.srcDirs = [genDir] + } + + dependencies { + add "${name}Compile", project(':runtime:org.eclipse.etrice.modellib.java') + add "${name}Compile", project(':runtime:org.eclipse.etrice.runtime.java') + } + + tasks.getByName("compile${nameCap}Java").dependsOn generateTask + + runTask = tasks.create(name: "run$testNameCap", type: JavaExec) { + dependsOn "${name}Classes" + classpath = testSourceSet.runtimeClasspath + args '-run_as_test' + outputs.file etuFile + it.workingDir = workingDir + + doFirst { main = getMainClass(genDir) } + } + } + + runTask.doFirst { file("$workingDir/log").mkdirs() } + + def convertTask = createEtUnitConverterTask("convert$testNameCap", [etuFile], ['-suite', suiteName]) + convertTask.dependsOn runTask + + check.dependsOn tasks.create(name: testName, dependsOn: convertTask, group: 'verification') +} diff --git a/gradle/etUnitConverter.gradle b/gradle/etUnitConverter.gradle new file mode 100644 index 000000000..cd1369bde --- /dev/null +++ b/gradle/etUnitConverter.gradle @@ -0,0 +1,22 @@ + +def etUnitConverter = ':plugins:org.eclipse.etrice.etunit.converter' +evaluationDependsOn(etUnitConverter) + +/** + * Creates a tasks that converts etu files to xml files + * @param name: The name of the new task + * @param etuFiles: A list of etu files + * @param options: The options passed to the converter + */ +ext.createEtUnitConverterTask = { name, etuFiles, options = [] -> + def xmlFiles = etuFiles.collect { it.replace('.etu', '.xml') } + + return tasks.create(name: name, type: JavaExec, dependsOn: "$etUnitConverter:classes") { + main = project(etUnitConverter).mainClassName + classpath = project(etUnitConverter).sourceSets.main.runtimeClasspath + args options + args etuFiles + inputs.files etuFiles + outputs.files xmlFiles + } +}
\ No newline at end of file diff --git a/gradle/publish.gradle b/gradle/publish.gradle new file mode 100644 index 000000000..1bcf65198 --- /dev/null +++ b/gradle/publish.gradle @@ -0,0 +1,27 @@ +apply plugin: 'maven-publish' + +publishing { + publications { + mavenJava(MavenPublication) { + from components.java + } + } + repositories { + maven { + name 'snapshots' + url 'https://repo.eclipse.org/content/repositories/etrice-snapshots' + credentials { + username project.properties.eclipseRepoUsername + password project.properties.eclipseRepoPassword + } + } + maven { + name 'releases' + url 'https://repo.eclipse.org/content/repositories/etrice-releases' + credentials { + username project.properties.eclipseRepoUsername + password project.properties.eclipseRepoPassword + } + } + } +}
\ No newline at end of file |