forked from EduMIPS64/edumips64
-
Notifications
You must be signed in to change notification settings - Fork 0
/
build.gradle
157 lines (141 loc) · 4.26 KB
/
build.gradle
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
/*
* EduMIPS64 Gradle build configuration
*/
plugins {
id 'java'
// The Eclipse plugin adds the "eclipse" task, which generates
// files needed for Visual Studio Code and other IDEs.
id 'eclipse'
id 'application'
id 'jacoco'
id 'com.dorongold.task-tree' version '1.3.1'
}
repositories {
jcenter()
}
dependencies {
compileOnly 'com.google.gwt:gwt-user:2.8.2'
implementation 'javax.help:javahelp:2.0.05'
testImplementation 'junit:junit:4.12'
}
mainClassName = 'org.edumips64.Main'
version = '1.2.5'
ext.codename = 'Eden'
/*
* Documentation tasks
*/
task htmlDocsIt(type: Exec) {
workingDir "${projectDir}/docs/user/en/src"
commandLine "make", "html", "BUILDDIR=${buildDir}/docs/en", "SPHINXOPTS=-N -a -E -Q"
}
task htmlDocsEn(type: Exec) {
workingDir "${projectDir}/docs/user/it/src"
commandLine "make", "html", "BUILDDIR=${buildDir}/docs/it", "SPHINXOPTS=-N -a -E -Q"
}
task pdfDocsEn(type: Exec) {
workingDir "${projectDir}/docs/user/en/src"
commandLine "make", "latexpdf", "BUILDDIR=${buildDir}/docs/en", "LATEXMKOPTS=-xelatex", "SPHINXOPTS=-N -a -E -Q"
}
task pdfDocsIt(type: Exec) {
workingDir "${projectDir}/docs/user/it/src"
commandLine "make", "latexpdf", "BUILDDIR=${buildDir}/docs/it", "LATEXMKOPTS=-xelatex", "SPHINXOPTS=-N -a -E -Q"
}
// Catch-all task for documentation
task allDocs(type: GradleBuild) {
tasks = ['htmlDocsIt', 'htmlDocsEn', 'pdfDocsEn', 'pdfDocsIt']
description = 'Run all documentation tasks'
}
// Include allDocs task in check task
check.dependsOn(allDocs)
/*
* Jar tasks
*/
// Compile HTML docs for JavaHelp before processResources task
processResources.dependsOn htmlDocsIt
processResources.dependsOn htmlDocsEn
// Include the docs folder at the root of the jar, for JavaHelp
processResources {
from ("${buildDir}/docs/en") {
into 'docs/user/en'
includes = ["html/**"]
excludes = ["**/_sources/**"]
}
from ("${buildDir}/docs/it") {
into 'docs/user/it'
includes = ["html/**"]
excludes = ["**/_sources/**"]
}
from ('docs/') {
into 'docs'
excludes = ["**/src/**", "**/design/**", "**/*.py", "**/*.md", "**/__pycache__/**"]
}
}
// The 'classes' task is also ran by unit tests. We don't want unit tests to copy around
// resources, especially since processResources depends on compiling the HTML docs.
classes.dependsOn.remove('processResources')
def getGitRevisionId() {
def branch = 'git rev-parse --abbrev-ref HEAD'.execute().text.trim()
def commitHash = 'git rev-parse --verify --short HEAD'.execute().text.trim()
return 'edumips64:' + branch + ':' + commitHash
}
ext.sharedManifest = manifest {
attributes(
'Signature-Version': version,
'Codename': codename,
'Build-Date': new Date(),
'Git-Revision': getGitRevisionId() )
}
// "Slim / nodeps" jar
jar {
//classifier = 'nodeps'
manifest {
attributes 'Main-Class': mainClassName
attributes 'SplashScreen-Image': 'images/splash.png'
from sharedManifest
}
}
// Cli jar
task cliJar(type: Jar, dependsOn: jar) {
classifier = 'cli'
from sourceSets.main.output
manifest {
attributes 'Main-Class': 'org.edumips64.MainCLI'
from sharedManifest
}
}
assemble.dependsOn(cliJar)
// "Fat" / standalone jar (includes all dependencies)
task standaloneJar(type: Jar, dependsOn: configurations.runtimeClasspath) {
classifier = 'standalone'
from sourceSets.main.output
from {
configurations.runtimeClasspath.findAll { it.name.endsWith('jar') }.collect { zipTree(it) }
}
manifest {
attributes 'Main-Class': mainClassName
from sharedManifest
}
}
// Not sure why standaloneJar does not depend on jar. Anyway, adding this dependency for now.
standaloneJar.dependsOn(processResources)
assemble.dependsOn(standaloneJar)
/*
* Test tasks
*/
test {
// Add verbose logging of test execution
afterTest { desc, result ->
logger.quiet "Executed test ${desc.name} [${desc.className}] with result: ${result.resultType}"
}
}
/*
* Code coverage report tasks
*/
jacocoTestReport {
reports {
xml.enabled true
csv.enabled false
html.enabled false
}
}
check.dependsOn jacocoTestReport