-
Notifications
You must be signed in to change notification settings - Fork 7
Expand file tree
/
Copy pathbuild-modules.sh
More file actions
executable file
·261 lines (215 loc) · 5.55 KB
/
Copy pathbuild-modules.sh
File metadata and controls
executable file
·261 lines (215 loc) · 5.55 KB
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
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
#!/bin/bash
# Script for building a selected module set
ModuleSetPath="modules/module-sets"
CppModulesPath="modules/cpp"
JavaModulesPath="modules/java"
# Scan all module sets
ModuleSets=()
for file in ${ModuleSetPath}/*txt; do
# Load module set
fileNoExt=${file%%.*}
setName=${fileNoExt:20}
ModuleSets+=($setName)
done
# Help output
function printHelp {
echo "Options:"
echo " -m [set] (mandatory) specify module set to build"
./util/print-modulesets.sh
echo " -t (optional) execute unittests during build";
echo " -b [targ] (optional) set build target, otherwise system default";
echo " default Build system default"
echo " pi Build for Raspberry Pi ARM"
echo " -c (optional) clean up build output directory before build";
echo " -v (optional) enable verbose output";
}
# Parse Parameters
SkiptTests=true
BuildTarget="default"
ModuleSetSelected=""
Verbose=false
ClearBuildFolder=false
while getopts m:hb:tcv flag; do
case $flag in
m)
ModuleSetSelected="${OPTARG}"
;;
h)
echo "Build script to build ZSDN modules"
echo
printHelp
exit 0
;;
b)
echo "-b build target: $OPTARG"
BuildTarget=$OPTARG
;;
t)
echo "-t Running with tests"
SkiptTests=$false
;;
c)
echo "-c Clearing build folder"
ClearBuildFolder=true
;;
v)
# TODO Implement verbose output
echo "Verbose Output enabled"
Verbose=true
;;
?)
echo "!!Unknown parameter: $flag"
;;
esac
done
# Check ModuleSetSelected
if [ "$ModuleSetSelected" == "" ] ; then
echo "!!! No ModuleSetSelected selected"
printHelp
exit 1
fi
# Check if existing module set
validModuleSet=false
for i in "${ModuleSets[@]}"
do
if [[ $ModuleSetSelected =~ $i ]]; then
validModuleSet=true
break
fi
done
if [ "$validModuleSet" = false ] ; then
echo "!!! Invalid ModuleSetSelected selected: $ModuleSetSelected"
echo
printHelp
exit 1
fi
echo "Building module set ${ModuleSetSelected}"
# Read modules to build from moduleset
CppModulesToBuild=()
JavaModulesToBuild=()
filename="$ModuleSetPath/${ModuleSetSelected}.txt"
while read -r line || [ -n "$line" ];
do
if [[ ${line:0:4} =~ "cpp/" ]]; then
CppModulesToBuild+=(${line:4})
elif [[ ${line:0:5} =~ "java/" ]]; then
JavaModulesToBuild+=(${line:5})
else
echo "Unknown module type $i"
fi
done < "$filename"
# Print modules to build
echo
echo "C++ Modules to build:"
for i in "${CppModulesToBuild[@]}"
do
echo " $i"
done
echo "Java Modules to build:"
for i in "${JavaModulesToBuild[@]}"
do
echo " $i"
done
echo
# Construct Build Parameters
CommonsBuildArgs=""
CmakeBuildArgs=""
MavenBuildArgs=""
if [ "$SkiptTests" = true ] ; then
echo "Build skipping Tests"
CmakeBuildArgs=$CmakeBuildArgs" -DNoTests=ON"
MavenBuildArgs="$MavenBuildArgs -DskipTests=true"
else
echo "Build with Tests"
CommonsBuildArgs=$CommonsBuildArgs" -t"
CmakeBuildArgs=$CmakeBuildArgs" -DNoTests=OFF"
fi
if [ "$Verbose" = true ] ; then
echo "Build Verbose"
CommonsBuildArgs=$CommonsBuildArgs" -v"
CmakeBuildArgs=$CmakeBuildArgs" -DVerbose=ON"
# TODO Maven verbosity
fi
if [ "$BuildTarget" = "pi" ] ; then
echo "Building for RasPi ARM target"
CmakeBuildArgs=$CmakeBuildArgs" -DPiTarget=ON -DCMAKE_TOOLCHAIN_FILE=$HOME/raspberrypi/pi.cmake"
elif [ "$BuildTarget" = "default" ] ; then
echo "Build with default target"
else
echo "!!Unknown build target: $BuildTarget"
exit 1
fi
# Clean up build folder
if [ "$ClearBuildFolder" = true ] ; then
rm -r "build/modules/$BuildTarget"
echo "# Cleared output folder"
fi
mkdir -p "build/modules/$BuildTarget"
# Build ZSDN Commons
echo
echo "### Start Build C++ ZSDN Commons ###"
cd common
if ./build-all-common.sh$CommonsBuildArgs; then
echo "# Build ZSDN Commons Success"
else
result=$?
echo "!! Failed to Build ZSDN Commons: "${result}
exit ${result}
fi
cd ..
# Copy module starter jar
cp util/module-starter/target/zsdn-module-starter-1.0.0-jar-with-dependencies.jar build/modules/default/module-starter.jar
# Build C++ modules
echo
echo "### Start Building C++ Modules ###"
cd $CppModulesPath
# Clear
echo
echo "Clearing C++ Module CMake before build"
for i in "${CppModulesToBuild[@]}"
do
find . -name CMakeCache.txt -delete
find . -name Makefile -delete
find . -name cmake_install.cmake -delete
find . -name CMakeFiles -type d -exec rm -rf {} +
echo "# Cleared Module " $i
done
echo "# Cleared Modules"
# Build
echo
echo "Building C++ Modules"
for i in "${CppModulesToBuild[@]}"
do
echo "# Build " $i
cd $i
cmake$CmakeBuildArgs .
if cmake --build .; then
echo "# Cmake Module success"
else
result=$?
echo "!! Failed to Cmake Module: "${result}
exit ${result}
fi
cd ..
done
cd ../..
echo "### Finished Build C++ Modules ###"
# Build Java Modules
echo "### Starting Build Java Modules ###"
cd $JavaModulesPath
for i in "${JavaModulesToBuild[@]}"
do
cd $i
if ! mvn clean install${MavenBuildArgs}; then
result=$?
echo "!! Failed to build java module $i"
exit ${result}
fi
# Copy to module jars to build
cp target*/*.jar ../../../build/modules/$BuildTarget
cp target*/*.war ../../../build/modules/$BuildTarget
cd ..
done
cd ../..
echo "### Finished Build Java Modules ###"
echo "### Finished Build ZSDN Modules ###"