-
Notifications
You must be signed in to change notification settings - Fork 4
Expand file tree
/
Copy pathcibuild.sh
More file actions
executable file
·213 lines (185 loc) · 5.75 KB
/
cibuild.sh
File metadata and controls
executable file
·213 lines (185 loc) · 5.75 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
#!/usr/bin/env bash
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
set -e -x
WD=$(cd $(dirname $0) && pwd)
nuttx=$WD/../nuttx
apps=$WD/../apps
tools=$WD/../tools
prebuilt=$WD/../prebuilt
install="gen-romfs gperf kconfig-frontends arm-gcc-toolchain mips-gcc-toolchain riscv-gcc-toolchain c-cache"
function add_path {
PATH=$1:$PATH
}
function gen-romfs {
add_path $prebuilt/genromfs/usr/bin
if [ ! -f "$prebuilt/genromfs/usr/bin/genromfs" ]; then
if [ ! -d "$tools" ]; then
git clone https://github.com/nuttx/tools.git $tools
fi
mkdir -p $prebuilt; cd $tools
tar zxf genromfs-0.5.2.tar.gz -C $prebuilt
cd $prebuilt/genromfs-0.5.2
make install PREFIX=$prebuilt/genromfs
cd $prebuilt
rm -rf genromfs-0.5.2
fi
}
function gperf {
add_path $prebuilt/gperf/bin
if [ ! -f "$prebuilt/gperf/bin/gperf" ]; then
cd $prebuilt
wget http://ftp.gnu.org/pub/gnu/gperf/gperf-3.1.tar.gz
tar zxf gperf-3.1.tar.gz
cd $prebuilt/gperf-3.1
./configure --prefix=$prebuilt/gperf; make; make install
cd $prebuilt
rm -rf gperf-3.1; rm gperf-3.1.tar.gz
fi
}
function kconfig-frontends {
add_path $prebuilt/kconfig-frontends/bin
if [ ! -f "$prebuilt/kconfig-frontends/bin/kconfig-mconf" ]; then
cd $tools/kconfig-frontends
./configure --prefix=$prebuilt/kconfig-frontends --enable-mconf --disable-gconf --disable-qconf --enable-static
make install
cd $tools; git clean -xfd
fi
}
function arm-gcc-toolchain {
add_path $prebuilt/gcc-arm-none-eabi/bin
if [ ! -f "$prebuilt/gcc-arm-none-eabi/bin/arm-none-eabi-gcc" ]; then
cd $prebuilt
wget https://developer.arm.com/-/media/Files/downloads/gnu-rm/9-2019q4/RC2.1/gcc-arm-none-eabi-9-2019-q4-major-x86_64-linux.tar.bz2
tar jxf gcc-arm-none-eabi-9-2019-q4-major-x86_64-linux.tar.bz2
mv gcc-arm-none-eabi-9-2019-q4-major gcc-arm-none-eabi
rm gcc-arm-none-eabi-9-2019-q4-major-x86_64-linux.tar.bz2
fi
arm-none-eabi-gcc --version
}
function mips-gcc-toolchain {
add_path $prebuilt/pinguino-compilers/linux64/p32/bin
if [ ! -f "$prebuilt/pinguino-compilers/linux64/p32/bin/p32-gcc" ]; then
cd $prebuilt
git clone https://github.com/PinguinoIDE/pinguino-compilers
fi
p32-gcc --version
}
function riscv-gcc-toolchain {
add_path $prebuilt/riscv64-unknown-elf-gcc/bin
if [ ! -f "$prebuilt/riscv64-unknown-elf-gcc/bin/riscv64-unknown-elf-gcc" ]; then
cd $prebuilt
wget https://static.dev.sifive.com/dev-tools/riscv64-unknown-elf-gcc-8.3.0-2019.08.0-x86_64-linux-ubuntu14.tar.gz
tar zxf riscv64-unknown-elf-gcc-8.3.0-2019.08.0-x86_64-linux-ubuntu14.tar.gz
mv riscv64-unknown-elf-gcc-8.3.0-2019.08.0-x86_64-linux-ubuntu14 riscv64-unknown-elf-gcc
rm riscv64-unknown-elf-gcc-8.3.0-2019.08.0-x86_64-linux-ubuntu14.tar.gz
fi
riscv64-unknown-elf-gcc --version
}
function c-cache {
add_path $prebuilt/ccache/bin
if [ ! -f "$prebuilt/ccache/bin/ccache" ]; then
cd $prebuilt;
wget https://github.com/ccache/ccache/releases/download/v3.7.7/ccache-3.7.7.tar.gz
tar zxf ccache-3.7.7.tar.gz
cd ccache-3.7.7; ./configure --prefix=$prebuilt/ccache; make; make install
cd $prebuilt; rm -rf ccache-3.7.7; rm ccache-3.7.7.tar.gz
ln -sf $prebuilt/ccache/bin/ccache $prebuilt/ccache/bin/gcc
ln -sf $prebuilt/ccache/bin/ccache $prebuilt/ccache/bin/g++
ln -sf $prebuilt/ccache/bin/ccache $prebuilt/ccache/bin/arm-none-eabi-gcc
ln -sf $prebuilt/ccache/bin/ccache $prebuilt/ccache/bin/arm-none-eabi-g++
ln -sf $prebuilt/ccache/bin/ccache $prebuilt/ccache/bin/p32-gcc
ln -sf $prebuilt/ccache/bin/ccache $prebuilt/ccache/bin/riscv64-unknown-elf-gcc
ln -sf $prebuilt/ccache/bin/ccache $prebuilt/ccache/bin/riscv64-unknown-elf-g++
fi
ccache --version
}
function usage {
echo ""
echo "USAGE: $0 [-i] [-s] [-c] [-b <check|full>]"
echo " $0 -h"
echo ""
echo "Where:"
echo " -i install tools"
echo " -s setup repos"
echo " -c enable ccache"
echo " -b <check|full> do check or full CI Job"
echo " -h will show this help test and terminate"
echo ""
exit 1
}
function enable_ccache {
export USE_CCACHE=1;
export CCACHE_DIR=$prebuilt/ccache/.ccache;
ccache -c
ccache -M 5G;
ccache -s
}
function setup_repos {
if [ -d "$nuttx" ]; then
cd $nuttx; git pull
else
git clone https://github.com/apache/incubator-nuttx.git $nuttx
fi
if [ -d "$apps" ]; then
cd $apps; git pull
else
git clone https://github.com/apache/incubator-nuttx-apps.git $apps
fi
}
function install_tools {
for func in $install; do
$func
done
}
function run_builds {
local ncpus=`grep -c ^processor /proc/cpuinfo`
local options="-si -j $ncpus"
if [ "X$build" = "Xcheck" ]; then
options="$options -x"
fi
$nuttx/tools/testbuild.sh $options $WD/testlist/${build}list.dat
}
if [ -z "$1" ]; then
usage
fi
while [ ! -z "$1" ]; do
case "$1" in
-h )
usage
;;
-i )
install_tools
;;
-c )
enable_ccache
;;
-b )
shift
build="$1"
run_builds
break
;;
-s )
setup_repos
;;
* )
usage
;;
esac
shift
done