Skip to main content
aboutsummaryrefslogtreecommitdiffstats
path: root/gradle
diff options
context:
space:
mode:
authorJan Belle2017-09-17 15:00:32 +0000
committerJan Belle2017-09-17 15:00:32 +0000
commit216b91e9103d80043239ecda7052fecb0999b085 (patch)
tree0c2d2f573f6c5d498e183bce322fa06713d1718a /gradle
parent26e553de11a137a1487074bce959a3b4423f2e1c (diff)
downloadorg.eclipse.etrice-216b91e9103d80043239ecda7052fecb0999b085.tar.gz
org.eclipse.etrice-216b91e9103d80043239ecda7052fecb0999b085.tar.xz
org.eclipse.etrice-216b91e9103d80043239ecda7052fecb0999b085.zip
cleaned up buildnewbuild
Diffstat (limited to 'gradle')
-rw-r--r--gradle/etGenerator.gradle25
-rw-r--r--gradle/etTest.gradle111
-rw-r--r--gradle/etUnitConverter.gradle22
-rw-r--r--gradle/publish.gradle27
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

Back to the top