Skip to content

Commit 4431582

Browse files
tests: Add options. (espressif#6916)
* .github/scripts: Add multiple parameters to the build and test scripts in case a customization is required. Signed-off-by: Abdelatif Guettouche <abdelatif.guettouche@espressif.com> * sketch_utils.sh: Get options from a JSON file. Signed-off-by: Abdelatif Guettouche <abdelatif.guettouche@espressif.com> * tests: Add a simple test for the JSON configurations option. Signed-off-by: Abdelatif Guettouche <abdelatif.guettouche@espressif.com> * tests: Accept multiple FQBNs in the config file. Signed-off-by: Abdelatif Guettouche <abdelatif.guettouche@espressif.com> * tests/: Run multiple tests if the build contained multiple configurations. Signed-off-by: Abdelatif Guettouche <abdelatif.guettouche@espressif.com> * ./github/scripts: Add option to erase the flash before flashing. Signed-off-by: Abdelatif Guettouche <abdelatif.guettouche@espressif.com> * .github: Fix building chunks and parameters passed from on-push.sh script. Multiple arguments and options were not set correctly. Signed-off-by: Abdelatif Guettouche <abdelatif.guettouche@espressif.com> * sketch_utils.sh: Pass the Windows parameters with the extra options. Signed-off-by: Abdelatif Guettouche <abdelatif.guettouche@espressif.com> * sketch_utils.sh: Remove the individual flash options and replace them with only one option take is supposed to take any extra FQBN addition. Signed-off-by: Abdelatif Guettouche <abdelatif.guettouche@espressif.com> * workflows/hil.yml: Install the jq program on the docker image. Signed-off-by: Abdelatif Guettouche <abdelatif.guettouche@espressif.com> * tests_run.sh: Fix the erase flash arguments. Signed-off-by: Abdelatif Guettouche <abdelatif.guettouche@espressif.com> * hil.yml: Fix the chunk matrix generation. Signed-off-by: Abdelatif Guettouche <abdelatif.guettouche@espressif.com> * tests_build.sh: Add a clean option. Useful locally for a quick clean up. Signed-off-by: Abdelatif Guettouche <abdelatif.guettouche@espressif.com> Co-authored-by: Vojtěch Bartoška <76958047+VojtechBartoska@users.noreply.github.com>
1 parent 08f26cc commit 4431582

File tree

9 files changed

+434
-193
lines changed

9 files changed

+434
-193
lines changed

Diff for: .github/scripts/on-push.sh

+14-15
Original file line numberDiff line numberDiff line change
@@ -14,26 +14,25 @@ function build(){
1414
local BUILD_SKETCH="${SCRIPTS_DIR}/sketch_utils.sh build"
1515
local BUILD_SKETCHES="${SCRIPTS_DIR}/sketch_utils.sh chunk_build"
1616

17-
local args="$ARDUINO_IDE_PATH $ARDUINO_USR_PATH"
17+
local args="-ai $ARDUINO_IDE_PATH -au $ARDUINO_USR_PATH"
1818

19-
args+=" \"$fqbn\""
19+
args+=" -t $target -fqbn $fqbn"
2020

2121
if [ "$OS_IS_LINUX" == "1" ]; then
22-
args+=" $target"
23-
args+=" $ARDUINO_ESP32_PATH/libraries"
24-
args+=" $chunk_index $chunks_cnt"
22+
args+=" -p $ARDUINO_ESP32_PATH/libraries"
23+
args+=" -i $chunk_index -m $chunks_cnt"
2524
${BUILD_SKETCHES} ${args}
2625
else
27-
if [ "$OS_IS_WINDOWS" == "1" ]; then
28-
local ctags_version=`ls "$ARDUINO_IDE_PATH/tools-builder/ctags/"`
29-
local preprocessor_version=`ls "$ARDUINO_IDE_PATH/tools-builder/arduino-preprocessor/"`
30-
win_opts="-prefs=runtime.tools.ctags.path=$ARDUINO_IDE_PATH/tools-builder/ctags/$ctags_version
31-
-prefs=runtime.tools.arduino-preprocessor.path=$ARDUINO_IDE_PATH/tools-builder/arduino-preprocessor/$preprocessor_version"
32-
args+=" ${win_opts}"
33-
fi
34-
3526
for sketch in ${sketches}; do
36-
${BUILD_SKETCH} ${args} ${sketch}
27+
args+=" -s $(dirname $sketch)"
28+
if [ "$OS_IS_WINDOWS" == "1" ]; then
29+
local ctags_version=`ls "$ARDUINO_IDE_PATH/tools-builder/ctags/"`
30+
local preprocessor_version=`ls "$ARDUINO_IDE_PATH/tools-builder/arduino-preprocessor/"`
31+
win_opts="-prefs=runtime.tools.ctags.path=$ARDUINO_IDE_PATH/tools-builder/ctags/$ctags_version
32+
-prefs=runtime.tools.arduino-preprocessor.path=$ARDUINO_IDE_PATH/tools-builder/arduino-preprocessor/$preprocessor_version"
33+
args+=" ${win_opts}"
34+
fi
35+
${BUILD_SKETCH} ${args}
3736
done
3837
fi
3938
}
@@ -82,7 +81,7 @@ if [ "$BUILD_PIO" -eq 0 ]; then
8281
build "esp32s3" $FQBN_ESP32S3 $CHUNK_INDEX $CHUNKS_CNT $SKETCHES_ESP32
8382
build "esp32s2" $FQBN_ESP32S2 $CHUNK_INDEX $CHUNKS_CNT $SKETCHES_ESP32XX
8483
build "esp32c3" $FQBN_ESP32C3 $CHUNK_INDEX $CHUNKS_CNT $SKETCHES_ESP32XX
85-
build "esp32" $FQBN_ESP32 $CHUNK_INDEX $CHUNKS_CNT $SKETCHES_ESP32
84+
build "esp32" $FQBN_ESP32 $CHUNK_INDEX $CHUNKS_CNT $SKETCHES_ESP32
8685
else
8786
source ${SCRIPTS_DIR}/install-platformio-esp32.sh
8887
# PlatformIO ESP32 Test

Diff for: .github/scripts/sketch_utils.sh

+200-69
Original file line numberDiff line numberDiff line change
@@ -1,43 +1,142 @@
11
#!/bin/bash
22

3-
function build_sketch(){ # build_sketch <ide_path> <user_path> <fqbn> <path-to-ino> [extra-options]
4-
if [ "$#" -lt 4 ]; then
5-
echo "ERROR: Illegal number of parameters"
6-
echo "USAGE: ${0} build <ide_path> <user_path> <fqbn> <path-to-ino> [extra-options]"
7-
return 1
3+
function build_sketch(){ # build_sketch <ide_path> <user_path> <path-to-ino> [extra-options]
4+
while [ ! -z "$1" ]; do
5+
case "$1" in
6+
-ai )
7+
shift
8+
ide_path=$1
9+
;;
10+
-au )
11+
shift
12+
user_path=$1
13+
;;
14+
-t )
15+
shift
16+
target=$1
17+
;;
18+
-fqbn )
19+
shift
20+
fqbn=$1
21+
;;
22+
-o )
23+
shift
24+
options=$1
25+
;;
26+
-s )
27+
shift
28+
sketchdir=$1
29+
;;
30+
* )
31+
break
32+
;;
33+
esac
34+
shift
35+
done
36+
37+
xtra_opts=$*
38+
39+
if [ -z $sketchdir ]; then
40+
echo "ERROR: Sketch directory not provided"
41+
echo "$USAGE"
42+
exit 1
843
fi
944

10-
local ide_path=$1
11-
local usr_path=$2
12-
local fqbn=$3
13-
local sketch=$4
14-
local xtra_opts=$5
15-
local win_opts=$6
45+
# No FQBN was passed, try to get it from other options
46+
47+
if [ -z $fqbn ]; then
48+
if [ -z $target ]; then
49+
echo "ERROR: Unspecified chip"
50+
echo "$USAGE"
51+
exit 1
52+
fi
53+
54+
# The options are either stored in the test directory, for a per test
55+
# customization or passed as parameters. Command line options take
56+
# precedence. Note that the following logic also falls to the default
57+
# parameters if no arguments were passed and no file was found.
58+
59+
if [ -z $options ] && [ -f $sketchdir/cfg.json ]; then
60+
# The config file could contain multiple FQBNs for one chip. If
61+
# that's the case we build one time for every FQBN.
62+
63+
len=`jq -r --arg chip $target '.targets[] | select(.name==$chip) | .fqbn | length' $sketchdir/cfg.json`
64+
fqbn=`jq -r --arg chip $target '.targets[] | select(.name==$chip) | .fqbn' $sketchdir/cfg.json`
65+
else
66+
# Since we are passing options, we will end up with only one FQBN to
67+
# build.
68+
69+
len=1
70+
71+
# Default FQBN options if none were passed in the command line.
72+
73+
esp32_opts="PSRAM=enabled,PartitionScheme=huge_app"
74+
esp32s2_opts="PSRAM=enabled,PartitionScheme=huge_app"
75+
esp32s3_opts="PSRAM=opi,USBMode=default,PartitionScheme=huge_app"
76+
esp32c3_opts="PartitionScheme=huge_app"
77+
78+
# Select the common part of the FQBN based on the target. The rest will be
79+
# appended depending on the passed options.
80+
81+
case "$target" in
82+
"esp32")
83+
fqbn="espressif:esp32:esp32:${options:-$esp32_opts}"
84+
;;
85+
"esp32s2")
86+
fqbn="espressif:esp32:esp32s2:${options:-$esp32s2_opts}"
87+
;;
88+
"esp32c3")
89+
fqbn="espressif:esp32:esp32c3:${options:-$esp32c3_opts}"
90+
;;
91+
"esp32s3")
92+
fqbn="espressif:esp32:esp32s3:${options:-$esp32s3_opts}"
93+
;;
94+
esac
95+
96+
# Make it look like a JSON array.
97+
98+
fqbn="[\"$fqbn\"]"
99+
fi
100+
else
101+
# An FQBN was passed. Make it look like a JSON array.
102+
103+
len=1
104+
fqbn="[\"$fqbn\"]"
105+
fi
106+
107+
if [ -z "$fqbn" ]; then
108+
echo "No FQBN passed or unvalid chip: $target"
109+
exit 1
110+
fi
16111

17112
ARDUINO_CACHE_DIR="$HOME/.arduino/cache.tmp"
18113
if [ -z "$ARDUINO_BUILD_DIR" ]; then
19-
build_dir="$(dirname $sketch)/build"
114+
build_dir="$sketchdir/build"
20115
else
21116
build_dir="$ARDUINO_BUILD_DIR"
22117
fi
23118

24-
echo $sketch
25-
26-
rm -rf "$build_dir"
27-
mkdir -p "$build_dir"
28119
mkdir -p "$ARDUINO_CACHE_DIR"
29-
$ide_path/arduino-builder -compile -logger=human -core-api-version=10810 \
30-
-fqbn=$fqbn \
31-
-warnings="all" \
32-
-tools "$ide_path/tools-builder" \
33-
-tools "$ide_path/tools" \
34-
-built-in-libraries "$ide_path/libraries" \
35-
-hardware "$ide_path/hardware" \
36-
-hardware "$usr_path/hardware" \
37-
-libraries "$usr_path/libraries" \
38-
-build-cache "$ARDUINO_CACHE_DIR" \
39-
-build-path "$build_dir" \
40-
$win_opts $xtra_opts "$sketch"
120+
for i in `seq 0 $(($len - 1))`
121+
do
122+
rm -rf "$build_dir$i"
123+
mkdir -p "$build_dir$i"
124+
currfqbn=`echo $fqbn | jq -r --argjson i $i '.[$i]'`
125+
sketchname=$(basename $sketchdir)
126+
echo "Building $sketchname with FQBN=$currfqbn"
127+
$ide_path/arduino-builder -compile -logger=human -core-api-version=10810 \
128+
-fqbn=\"$currfqbn\" \
129+
-warnings="all" \
130+
-tools "$ide_path/tools-builder" \
131+
-tools "$ide_path/tools" \
132+
-built-in-libraries "$ide_path/libraries" \
133+
-hardware "$ide_path/hardware" \
134+
-hardware "$user_path/hardware" \
135+
-libraries "$user_path/libraries" \
136+
-build-cache "$ARDUINO_CACHE_DIR" \
137+
-build-path "$build_dir$i" \
138+
$xtra_opts "${sketchdir}/${sketchname}.ino"
139+
done
41140
}
42141

43142
function count_sketches(){ # count_sketches <path> [target]
@@ -73,29 +172,63 @@ function count_sketches(){ # count_sketches <path> [target]
73172
return $sketchnum
74173
}
75174

76-
function build_sketches(){ # build_sketches <ide_path> <user_path> <fqbn> <target> <path> <chunk> <total-chunks> [extra-options]
77-
local ide_path=$1
78-
local usr_path=$2
79-
local fqbn=$3
80-
local target=$4
81-
local path=$5
82-
local chunk_idex=$6
83-
local chunks_num=$7
84-
local xtra_opts=$8
85-
86-
if [ "$#" -lt 7 ]; then
87-
echo "ERROR: Illegal number of parameters"
88-
echo "USAGE: ${0} chunk_build <ide_path> <user_path> <fqbn> <target> <path> [<chunk> <total-chunks>] [extra-options]"
89-
return 1
175+
function build_sketches(){ # build_sketches <ide_path> <user_path> <target> <path> <chunk> <total-chunks> [extra-options]
176+
177+
local args=""
178+
while [ ! -z "$1" ]; do
179+
case $1 in
180+
-ai )
181+
shift
182+
ide_path=$1
183+
;;
184+
-au )
185+
shift
186+
user_path=$1
187+
;;
188+
-t )
189+
shift
190+
target=$1
191+
args+=" -t $target"
192+
;;
193+
-fqbn )
194+
shift
195+
fqbn=$1
196+
args+=" -fqbn $fqbn"
197+
;;
198+
-p )
199+
shift
200+
path=$1
201+
;;
202+
-i )
203+
shift
204+
chunk_index=$1
205+
;;
206+
-m )
207+
shift
208+
chunk_max=$1
209+
;;
210+
* )
211+
break
212+
;;
213+
esac
214+
shift
215+
done
216+
217+
local xtra_opts=$*
218+
219+
if [ -z $chunk_index ] || [ -z $chunk_max ]; then
220+
echo "ERROR: Invalid chunk paramters"
221+
echo "$USAGE"
222+
exit 1
90223
fi
91224

92-
if [ "$chunks_num" -le 0 ]; then
225+
if [ "$chunk_max" -le 0 ]; then
93226
echo "ERROR: Chunks count must be positive number"
94227
return 1
95228
fi
96-
if [ "$chunk_idex" -ge "$chunks_num" ] && [ "$chunks_num" -ge 2 ]; then
97-
echo "ERROR: Chunk index must be less than chunks count"
98-
return 1
229+
230+
if [ "$chunk_index" -gt "$chunk_max" ] && [ "$chunk_max" -ge 2 ]; then
231+
chunk_index=$chunk_max
99232
fi
100233

101234
set +e
@@ -105,51 +238,52 @@ function build_sketches(){ # build_sketches <ide_path> <user_path> <fqbn> <targe
105238
local sketches=$(cat sketches.txt)
106239
rm -rf sketches.txt
107240

108-
local chunk_size=$(( $sketchcount / $chunks_num ))
109-
local all_chunks=$(( $chunks_num * $chunk_size ))
241+
local chunk_size=$(( $sketchcount / $chunk_max ))
242+
local all_chunks=$(( $chunk_max * $chunk_size ))
110243
if [ "$all_chunks" -lt "$sketchcount" ]; then
111244
chunk_size=$(( $chunk_size + 1 ))
112245
fi
113246

114247
local start_index=0
115248
local end_index=0
116-
if [ "$chunk_idex" -ge "$chunks_num" ]; then
117-
start_index=$chunk_idex
249+
if [ "$chunk_index" -ge "$chunk_max" ]; then
250+
start_index=$chunk_index
118251
end_index=$sketchcount
119252
else
120-
start_index=$(( $chunk_idex * $chunk_size ))
253+
start_index=$(( $chunk_index * $chunk_size ))
121254
if [ "$sketchcount" -le "$start_index" ]; then
122255
echo "Skipping job"
123256
return 0
124257
fi
125258

126-
end_index=$(( $(( $chunk_idex + 1 )) * $chunk_size ))
259+
end_index=$(( $(( $chunk_index + 1 )) * $chunk_size ))
127260
if [ "$end_index" -gt "$sketchcount" ]; then
128261
end_index=$sketchcount
129262
fi
130263
fi
131264

132265
local start_num=$(( $start_index + 1 ))
133266
echo "Found $sketchcount Sketches for target '$target'";
134-
echo "Chunk Index : $chunk_idex"
135-
echo "Chunk Count : $chunks_num"
267+
echo "Chunk Index : $chunk_index"
268+
echo "Chunk Count : $chunk_max"
136269
echo "Chunk Size : $chunk_size"
137270
echo "Start Sketch: $start_num"
138271
echo "End Sketch : $end_index"
139272

140273
local sketchnum=0
274+
args+=" -ai $ide_path -au $user_path"
141275
for sketch in $sketches; do
142276
local sketchdir=$(dirname $sketch)
143277
local sketchdirname=$(basename $sketchdir)
144-
local sketchname=$(basename $sketch)
145278
sketchnum=$(($sketchnum + 1))
146279
if [ "$sketchnum" -le "$start_index" ] \
147280
|| [ "$sketchnum" -gt "$end_index" ]; then
148281
continue
149282
fi
150283
echo ""
151284
echo "Building Sketch Index $(($sketchnum - 1)) - $sketchdirname"
152-
build_sketch "$ide_path" "$usr_path" "$fqbn" "$sketch" "$xtra_opts"
285+
args+=" -s $sketchdir $xtra_opts"
286+
build_sketch $args
153287
local result=$?
154288
if [ $result -ne 0 ]; then
155289
return $result
@@ -169,24 +303,21 @@ Available commands:
169303
cmd=$1
170304
shift
171305
if [ -z $cmd ]; then
172-
echo "ERROR: No command supplied"
173-
echo "$USAGE"
174-
exit 2
306+
echo "ERROR: No command supplied"
307+
echo "$USAGE"
308+
exit 2
175309
fi
176310

177311
case "$cmd" in
178-
"count")
179-
count_sketches $*
312+
"count") count_sketches $*
180313
;;
181-
"build")
182-
build_sketch $*
314+
"build") build_sketch $*
183315
;;
184-
"chunk_build")
185-
build_sketches $*
316+
"chunk_build") build_sketches $*
186317
;;
187-
*)
188-
echo "ERROR: Unrecognized command"
189-
echo "$USAGE"
190-
exit 2
318+
*)
319+
echo "ERROR: Unrecognized command"
320+
echo "$USAGE"
321+
exit 2
191322
esac
192323

0 commit comments

Comments
 (0)