2019-09-30 01:01:29 +02:00
|
|
|
#!/bin/bash
|
|
|
|
|
2019-09-30 11:10:48 +02:00
|
|
|
export PLATFORMIO_ESP32_PATH="$HOME/.platformio/packages/framework-arduinoespressif32"
|
IDF master d93887f9f (#5336)
* Update toolchain
* Update package_esp32_index.template.json
* add optional component dependencies after Kconfig options are known (#5404)
Until this commit, Kconfig options (e.g. CONFIG_TINYUSB_ENABLED) were
used in conditions preceding idf_component_register to determine which
components need to be added to `arduino` component requirements.
However the Kconfig options aren't known at the early expansion stage,
when the component CMakeLists.txt files are expanded the first time
and requirements are evaluated. So all the conditions evaluated as if
the options were not set.
This commit changes the logic to only add these components as
dependencies when the Kconfig options are known. Dependencies become
"weak", which means that if one of the components isn't included into
the build for some reason, it is not added as a dependency.
This may happen, for example, if the component is not present in the
`components` directory or is excluded by setting `COMPONENTS` variable
in the project CMakeLists.txt file.
This also ensures that if the component is not present, it will not be
added as a dependency, and this will allow the build to proceed.
Follow-up to https://github.com/espressif/arduino-esp32/pull/5391.
Closes https://github.com/espressif/arduino-esp32/issues/5319.
* IDF master d93887f9f
* PlatformIO updates for CI (#5387)
* Update PlatformIO CI build script
- Switch to the latest toolchains 8.4.0 for ESP32, ESP32S2, ESP32C3
- Use PlatformIO from master branch for better robustness
* Update package.json for PlatformIO
Co-authored-by: Ivan Grokhotkov <ivan@espressif.com>
Co-authored-by: Valerii Koval <valeros@users.noreply.github.com>
2021-07-17 00:57:49 +02:00
|
|
|
PLATFORMIO_ESP32_URL="https://github.com/platformio/platform-espressif32.git#feature/arduino-idf-master"
|
|
|
|
|
|
|
|
XTENSA32_TOOLCHAIN_VERSION="8.4.0+2021r1"
|
|
|
|
XTENSA32S2_TOOLCHAIN_VERSION="8.4.0+2021r1"
|
|
|
|
RISCV_TOOLCHAIN_VERSION="8.4.0+2021r1"
|
|
|
|
ESPTOOLPY_VERSION="~1.30100.0"
|
|
|
|
ESPRESSIF_ORGANIZATION_NAME="espressif"
|
2019-09-30 11:10:48 +02:00
|
|
|
|
2019-10-02 10:58:02 +02:00
|
|
|
echo "Installing Python Wheel ..."
|
2019-09-30 01:01:29 +02:00
|
|
|
pip install wheel > /dev/null 2>&1
|
|
|
|
|
2019-10-02 10:58:02 +02:00
|
|
|
echo "Installing PlatformIO ..."
|
IDF master d93887f9f (#5336)
* Update toolchain
* Update package_esp32_index.template.json
* add optional component dependencies after Kconfig options are known (#5404)
Until this commit, Kconfig options (e.g. CONFIG_TINYUSB_ENABLED) were
used in conditions preceding idf_component_register to determine which
components need to be added to `arduino` component requirements.
However the Kconfig options aren't known at the early expansion stage,
when the component CMakeLists.txt files are expanded the first time
and requirements are evaluated. So all the conditions evaluated as if
the options were not set.
This commit changes the logic to only add these components as
dependencies when the Kconfig options are known. Dependencies become
"weak", which means that if one of the components isn't included into
the build for some reason, it is not added as a dependency.
This may happen, for example, if the component is not present in the
`components` directory or is excluded by setting `COMPONENTS` variable
in the project CMakeLists.txt file.
This also ensures that if the component is not present, it will not be
added as a dependency, and this will allow the build to proceed.
Follow-up to https://github.com/espressif/arduino-esp32/pull/5391.
Closes https://github.com/espressif/arduino-esp32/issues/5319.
* IDF master d93887f9f
* PlatformIO updates for CI (#5387)
* Update PlatformIO CI build script
- Switch to the latest toolchains 8.4.0 for ESP32, ESP32S2, ESP32C3
- Use PlatformIO from master branch for better robustness
* Update package.json for PlatformIO
Co-authored-by: Ivan Grokhotkov <ivan@espressif.com>
Co-authored-by: Valerii Koval <valeros@users.noreply.github.com>
2021-07-17 00:57:49 +02:00
|
|
|
pip install -U https://github.com/platformio/platformio/archive/master.zip > /dev/null 2>&1
|
2019-09-30 01:01:29 +02:00
|
|
|
|
2019-10-02 10:58:02 +02:00
|
|
|
echo "Installing Platform ESP32 ..."
|
IDF master d93887f9f (#5336)
* Update toolchain
* Update package_esp32_index.template.json
* add optional component dependencies after Kconfig options are known (#5404)
Until this commit, Kconfig options (e.g. CONFIG_TINYUSB_ENABLED) were
used in conditions preceding idf_component_register to determine which
components need to be added to `arduino` component requirements.
However the Kconfig options aren't known at the early expansion stage,
when the component CMakeLists.txt files are expanded the first time
and requirements are evaluated. So all the conditions evaluated as if
the options were not set.
This commit changes the logic to only add these components as
dependencies when the Kconfig options are known. Dependencies become
"weak", which means that if one of the components isn't included into
the build for some reason, it is not added as a dependency.
This may happen, for example, if the component is not present in the
`components` directory or is excluded by setting `COMPONENTS` variable
in the project CMakeLists.txt file.
This also ensures that if the component is not present, it will not be
added as a dependency, and this will allow the build to proceed.
Follow-up to https://github.com/espressif/arduino-esp32/pull/5391.
Closes https://github.com/espressif/arduino-esp32/issues/5319.
* IDF master d93887f9f
* PlatformIO updates for CI (#5387)
* Update PlatformIO CI build script
- Switch to the latest toolchains 8.4.0 for ESP32, ESP32S2, ESP32C3
- Use PlatformIO from master branch for better robustness
* Update package.json for PlatformIO
Co-authored-by: Ivan Grokhotkov <ivan@espressif.com>
Co-authored-by: Valerii Koval <valeros@users.noreply.github.com>
2021-07-17 00:57:49 +02:00
|
|
|
python -m platformio platform install $PLATFORMIO_ESP32_URL > /dev/null 2>&1
|
2019-09-30 01:01:29 +02:00
|
|
|
|
IDF master d93887f9f (#5336)
* Update toolchain
* Update package_esp32_index.template.json
* add optional component dependencies after Kconfig options are known (#5404)
Until this commit, Kconfig options (e.g. CONFIG_TINYUSB_ENABLED) were
used in conditions preceding idf_component_register to determine which
components need to be added to `arduino` component requirements.
However the Kconfig options aren't known at the early expansion stage,
when the component CMakeLists.txt files are expanded the first time
and requirements are evaluated. So all the conditions evaluated as if
the options were not set.
This commit changes the logic to only add these components as
dependencies when the Kconfig options are known. Dependencies become
"weak", which means that if one of the components isn't included into
the build for some reason, it is not added as a dependency.
This may happen, for example, if the component is not present in the
`components` directory or is excluded by setting `COMPONENTS` variable
in the project CMakeLists.txt file.
This also ensures that if the component is not present, it will not be
added as a dependency, and this will allow the build to proceed.
Follow-up to https://github.com/espressif/arduino-esp32/pull/5391.
Closes https://github.com/espressif/arduino-esp32/issues/5319.
* IDF master d93887f9f
* PlatformIO updates for CI (#5387)
* Update PlatformIO CI build script
- Switch to the latest toolchains 8.4.0 for ESP32, ESP32S2, ESP32C3
- Use PlatformIO from master branch for better robustness
* Update package.json for PlatformIO
Co-authored-by: Ivan Grokhotkov <ivan@espressif.com>
Co-authored-by: Valerii Koval <valeros@users.noreply.github.com>
2021-07-17 00:57:49 +02:00
|
|
|
echo "Replacing the package versions ..."
|
|
|
|
replace_script="import json; import os;"
|
|
|
|
replace_script+="fp=open(os.path.expanduser('~/.platformio/platforms/espressif32/platform.json'), 'r+');"
|
|
|
|
replace_script+="data=json.load(fp);"
|
|
|
|
# Use framework sources from the repository
|
|
|
|
replace_script+="data['packages']['framework-arduinoespressif32']['version'] = '*';"
|
|
|
|
replace_script+="del data['packages']['framework-arduinoespressif32']['owner'];"
|
|
|
|
# Use toolchain packages from the "espressif" organization
|
|
|
|
replace_script+="data['packages']['toolchain-xtensa-esp32']['owner']='$ESPRESSIF_ORGANIZATION_NAME';"
|
|
|
|
replace_script+="data['packages']['toolchain-xtensa-esp32s2']['owner']='$ESPRESSIF_ORGANIZATION_NAME';"
|
|
|
|
replace_script+="data['packages']['toolchain-riscv32-esp']['owner']='$ESPRESSIF_ORGANIZATION_NAME';"
|
|
|
|
# Update versions to use the upstream
|
|
|
|
replace_script+="data['packages']['toolchain-xtensa-esp32']['version']='$XTENSA32_TOOLCHAIN_VERSION';"
|
|
|
|
replace_script+="data['packages']['toolchain-xtensa-esp32s2']['version']='$XTENSA32S2_TOOLCHAIN_VERSION';"
|
|
|
|
replace_script+="data['packages']['toolchain-riscv32-esp']['version']='$RISCV_TOOLCHAIN_VERSION';"
|
|
|
|
# esptool.py may require an upstream version (for now platformio is the owner)
|
|
|
|
replace_script+="data['packages']['tool-esptoolpy']['version']='$ESPTOOLPY_VERSION';"
|
|
|
|
# Save results
|
|
|
|
replace_script+="fp.seek(0);fp.truncate();json.dump(data, fp, indent=2);fp.close()"
|
|
|
|
python -c "$replace_script"
|
2019-09-30 01:01:29 +02:00
|
|
|
|
|
|
|
if [ "$GITHUB_REPOSITORY" == "espressif/arduino-esp32" ]; then
|
2019-10-02 10:58:02 +02:00
|
|
|
echo "Linking Core..."
|
2019-09-30 11:10:48 +02:00
|
|
|
ln -s $GITHUB_WORKSPACE "$PLATFORMIO_ESP32_PATH"
|
2019-09-30 01:01:29 +02:00
|
|
|
else
|
2019-10-02 10:58:02 +02:00
|
|
|
echo "Cloning Core Repository ..."
|
2020-08-31 17:06:34 +02:00
|
|
|
git clone --recursive https://github.com/espressif/arduino-esp32.git "$PLATFORMIO_ESP32_PATH" > /dev/null 2>&1
|
2019-09-30 01:01:29 +02:00
|
|
|
fi
|
|
|
|
|
|
|
|
echo "PlatformIO for ESP32 has been installed"
|
|
|
|
echo ""
|
|
|
|
|
2021-04-05 13:23:58 +02:00
|
|
|
function build_pio_sketch(){ # build_pio_sketch <board> <options> <path-to-ino>
|
|
|
|
if [ "$#" -lt 3 ]; then
|
2019-09-30 11:10:48 +02:00
|
|
|
echo "ERROR: Illegal number of parameters"
|
2021-04-05 13:23:58 +02:00
|
|
|
echo "USAGE: build_pio_sketch <board> <options> <path-to-ino>"
|
2019-09-30 11:10:48 +02:00
|
|
|
return 1
|
|
|
|
fi
|
|
|
|
|
2019-10-02 10:58:02 +02:00
|
|
|
local board="$1"
|
2021-04-05 13:23:58 +02:00
|
|
|
local options="$2"
|
|
|
|
local sketch="$3"
|
2019-10-02 10:58:02 +02:00
|
|
|
local sketch_dir=$(dirname "$sketch")
|
|
|
|
echo ""
|
|
|
|
echo "Compiling '"$(basename "$sketch")"' ..."
|
2021-04-05 13:23:58 +02:00
|
|
|
python -m platformio ci --board "$board" "$sketch_dir" --project-option="$options"
|
2019-09-30 01:01:29 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
function count_sketches() # count_sketches <examples-path>
|
|
|
|
{
|
2019-10-02 10:58:02 +02:00
|
|
|
local examples="$1"
|
|
|
|
rm -rf sketches.txt
|
|
|
|
if [ ! -d "$examples" ]; then
|
|
|
|
touch sketches.txt
|
|
|
|
return 0
|
|
|
|
fi
|
2019-09-30 01:01:29 +02:00
|
|
|
local sketches=$(find $examples -name *.ino)
|
|
|
|
local sketchnum=0
|
|
|
|
for sketch in $sketches; do
|
|
|
|
local sketchdir=$(dirname $sketch)
|
|
|
|
local sketchdirname=$(basename $sketchdir)
|
|
|
|
local sketchname=$(basename $sketch)
|
|
|
|
if [[ "${sketchdirname}.ino" != "$sketchname" ]]; then
|
|
|
|
continue
|
|
|
|
fi;
|
|
|
|
if [[ -f "$sketchdir/.test.skip" ]]; then
|
|
|
|
continue
|
|
|
|
fi
|
|
|
|
echo $sketch >> sketches.txt
|
|
|
|
sketchnum=$(($sketchnum + 1))
|
|
|
|
done
|
|
|
|
return $sketchnum
|
|
|
|
}
|
|
|
|
|
2021-04-05 13:23:58 +02:00
|
|
|
function build_pio_sketches() # build_pio_sketches <board> <options> <examples-path> <chunk> <total-chunks>
|
2019-09-30 01:01:29 +02:00
|
|
|
{
|
2021-04-05 13:23:58 +02:00
|
|
|
if [ "$#" -lt 3 ]; then
|
2019-09-30 11:10:48 +02:00
|
|
|
echo "ERROR: Illegal number of parameters"
|
2021-04-05 13:23:58 +02:00
|
|
|
echo "USAGE: build_pio_sketches <board> <options> <examples-path> [<chunk> <total-chunks>]"
|
2019-09-30 11:10:48 +02:00
|
|
|
return 1
|
|
|
|
fi
|
|
|
|
|
|
|
|
local board=$1
|
2021-04-05 13:23:58 +02:00
|
|
|
local options="$2"
|
|
|
|
local examples=$3
|
|
|
|
local chunk_idex=$4
|
|
|
|
local chunks_num=$5
|
2019-09-30 01:01:29 +02:00
|
|
|
|
2021-04-05 13:23:58 +02:00
|
|
|
if [ "$#" -lt 5 ]; then
|
2019-09-30 11:10:48 +02:00
|
|
|
chunk_idex="0"
|
|
|
|
chunks_num="1"
|
|
|
|
fi
|
|
|
|
|
2019-10-02 10:58:02 +02:00
|
|
|
if [ "$chunks_num" -le 0 ]; then
|
|
|
|
echo "ERROR: Chunks count must be positive number"
|
|
|
|
return 1
|
|
|
|
fi
|
|
|
|
if [ "$chunk_idex" -ge "$chunks_num" ]; then
|
|
|
|
echo "ERROR: Chunk index must be less than chunks count"
|
|
|
|
return 1
|
|
|
|
fi
|
2019-09-30 01:01:29 +02:00
|
|
|
|
2019-10-02 10:58:02 +02:00
|
|
|
set +e
|
2019-09-30 01:01:29 +02:00
|
|
|
count_sketches "$examples"
|
|
|
|
local sketchcount=$?
|
2019-10-02 10:58:02 +02:00
|
|
|
set -e
|
2019-09-30 01:01:29 +02:00
|
|
|
local sketches=$(cat sketches.txt)
|
|
|
|
rm -rf sketches.txt
|
|
|
|
|
|
|
|
local chunk_size=$(( $sketchcount / $chunks_num ))
|
|
|
|
local all_chunks=$(( $chunks_num * $chunk_size ))
|
|
|
|
if [ "$all_chunks" -lt "$sketchcount" ]; then
|
2019-10-02 10:58:02 +02:00
|
|
|
chunk_size=$(( $chunk_size + 1 ))
|
2019-09-30 01:01:29 +02:00
|
|
|
fi
|
|
|
|
|
|
|
|
local start_index=$(( $chunk_idex * $chunk_size ))
|
|
|
|
if [ "$sketchcount" -le "$start_index" ]; then
|
2019-10-02 10:58:02 +02:00
|
|
|
echo "Skipping job"
|
|
|
|
return 0
|
2019-09-30 01:01:29 +02:00
|
|
|
fi
|
|
|
|
|
|
|
|
local end_index=$(( $(( $chunk_idex + 1 )) * $chunk_size ))
|
|
|
|
if [ "$end_index" -gt "$sketchcount" ]; then
|
2019-10-02 10:58:02 +02:00
|
|
|
end_index=$sketchcount
|
2019-09-30 01:01:29 +02:00
|
|
|
fi
|
|
|
|
|
|
|
|
local start_num=$(( $start_index + 1 ))
|
|
|
|
echo "Found $sketchcount Sketches";
|
|
|
|
echo "Chunk Count : $chunks_num"
|
|
|
|
echo "Chunk Size : $chunk_size"
|
|
|
|
echo "Start Sketch: $start_num"
|
|
|
|
echo "End Sketch : $end_index"
|
|
|
|
|
|
|
|
local sketchnum=0
|
|
|
|
for sketch in $sketches; do
|
|
|
|
local sketchdir=$(dirname $sketch)
|
|
|
|
local sketchdirname=$(basename $sketchdir)
|
|
|
|
local sketchname=$(basename $sketch)
|
|
|
|
if [ "${sketchdirname}.ino" != "$sketchname" ] \
|
|
|
|
|| [ -f "$sketchdir/.test.skip" ]; then
|
|
|
|
continue
|
|
|
|
fi
|
|
|
|
sketchnum=$(($sketchnum + 1))
|
|
|
|
if [ "$sketchnum" -le "$start_index" ] \
|
|
|
|
|| [ "$sketchnum" -gt "$end_index" ]; then
|
2019-10-02 10:58:02 +02:00
|
|
|
continue
|
2019-09-30 01:01:29 +02:00
|
|
|
fi
|
2021-04-05 13:23:58 +02:00
|
|
|
build_pio_sketch "$board" "$options" "$sketch"
|
2019-09-30 01:01:29 +02:00
|
|
|
local result=$?
|
|
|
|
if [ $result -ne 0 ]; then
|
|
|
|
return $result
|
|
|
|
fi
|
|
|
|
done
|
|
|
|
return 0
|
|
|
|
}
|