mirror of
https://github.com/hathach/tinyusb.git
synced 2025-01-31 05:52:55 +08:00
try to run arm-iar with circleci with new token (#2890)
* try to run arm-iar with circleci with new token * limit iar ci parallel build to 4 for medium+ and 6 for large * add hil-hfp to compile and test with IAR
This commit is contained in:
parent
eabf68bd91
commit
310b8657f0
@ -20,6 +20,7 @@ jobs:
|
|||||||
|
|
||||||
BUILDSYSTEM_TOOLCHAIN=(
|
BUILDSYSTEM_TOOLCHAIN=(
|
||||||
"cmake arm-clang"
|
"cmake arm-clang"
|
||||||
|
"cmake arm-iar"
|
||||||
"make aarch64-gcc"
|
"make aarch64-gcc"
|
||||||
"make arm-gcc"
|
"make arm-gcc"
|
||||||
"make msp430-gcc"
|
"make msp430-gcc"
|
||||||
@ -28,7 +29,27 @@ jobs:
|
|||||||
"cmake esp-idf"
|
"cmake esp-idf"
|
||||||
)
|
)
|
||||||
|
|
||||||
RESOURCE_LARGE='["nrf", "imxrt"]'
|
RESOURCE_LARGE='["nrf", "imxrt", "stm32f4", "stm32h7"]'
|
||||||
|
|
||||||
|
gen_build_entry() {
|
||||||
|
local build_system="$1"
|
||||||
|
local toolchain="$2"
|
||||||
|
local family="$3"
|
||||||
|
local resource_class="$4"
|
||||||
|
|
||||||
|
if [[ "$toolchain" == "esp-idf" ]]; then
|
||||||
|
echo " - build-vm:" >> .circleci/config2.yml
|
||||||
|
else
|
||||||
|
echo " - build:" >> .circleci/config2.yml
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo " matrix:" >> .circleci/config2.yml
|
||||||
|
echo " parameters:" >> .circleci/config2.yml
|
||||||
|
echo " build-system: ['$build_system']" >> .circleci/config2.yml
|
||||||
|
echo " toolchain: ['$toolchain']" >> .circleci/config2.yml
|
||||||
|
echo " family: $family" >> .circleci/config2.yml
|
||||||
|
echo " resource_class: ['$resource_class']" >> .circleci/config2.yml
|
||||||
|
}
|
||||||
|
|
||||||
for e in "${BUILDSYSTEM_TOOLCHAIN[@]}"; do
|
for e in "${BUILDSYSTEM_TOOLCHAIN[@]}"; do
|
||||||
e_arr=($e)
|
e_arr=($e)
|
||||||
@ -43,26 +64,14 @@ jobs:
|
|||||||
FAMILY=$(jq -n --argjson family "$FAMILY" --argjson resource "$RESOURCE_LARGE" '$family | map(select(IN($resource[]) | not))')
|
FAMILY=$(jq -n --argjson family "$FAMILY" --argjson resource "$RESOURCE_LARGE" '$family | map(select(IN($resource[]) | not))')
|
||||||
|
|
||||||
if [[ $toolchain == esp-idf ]]; then
|
if [[ $toolchain == esp-idf ]]; then
|
||||||
echo " - build-vm:" >> .circleci/config2.yml
|
gen_build_entry "$build_system" "$toolchain" "$FAMILY" "large"
|
||||||
else
|
else
|
||||||
echo " - build:" >> .circleci/config2.yml
|
gen_build_entry "$build_system" "$toolchain" "$FAMILY" "medium+"
|
||||||
fi
|
|
||||||
echo " matrix:" >> .circleci/config2.yml
|
|
||||||
echo " parameters:" >> .circleci/config2.yml
|
|
||||||
echo " build-system: ['$build_system']" >> .circleci/config2.yml
|
|
||||||
echo " toolchain: ['$toolchain']" >> .circleci/config2.yml
|
|
||||||
echo " family: $FAMILY" >> .circleci/config2.yml
|
|
||||||
#echo " resource_class: ['medium+']" >> .circleci/config2.yml
|
|
||||||
|
|
||||||
# add large resources
|
# add large resources if available
|
||||||
if [ "$(echo $FAMILY_LARGE | jq 'length')" -gt 0 ]; then
|
if [ "$(echo $FAMILY_LARGE | jq 'length')" -gt 0 ]; then
|
||||||
echo " - build:" >> .circleci/config2.yml
|
gen_build_entry "$build_system" "$toolchain" "$FAMILY_LARGE" "large"
|
||||||
echo " matrix:" >> .circleci/config2.yml
|
fi
|
||||||
echo " parameters:" >> .circleci/config2.yml
|
|
||||||
echo " build-system: ['$build_system']" >> .circleci/config2.yml
|
|
||||||
echo " toolchain: ['$toolchain']" >> .circleci/config2.yml
|
|
||||||
echo " family: $FAMILY_LARGE" >> .circleci/config2.yml
|
|
||||||
echo " resource_class: ['large']" >> .circleci/config2.yml
|
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
|
@ -16,7 +16,8 @@ commands:
|
|||||||
"arm-gcc": "https://github.com/xpack-dev-tools/arm-none-eabi-gcc-xpack/releases/download/v13.2.1-1.1/xpack-arm-none-eabi-gcc-13.2.1-1.1-linux-x64.tar.gz",
|
"arm-gcc": "https://github.com/xpack-dev-tools/arm-none-eabi-gcc-xpack/releases/download/v13.2.1-1.1/xpack-arm-none-eabi-gcc-13.2.1-1.1-linux-x64.tar.gz",
|
||||||
"msp430-gcc": "http://software-dl.ti.com/msp430/msp430_public_sw/mcu/msp430/MSPGCC/9_2_0_0/export/msp430-gcc-9.2.0.50_linux64.tar.bz2",
|
"msp430-gcc": "http://software-dl.ti.com/msp430/msp430_public_sw/mcu/msp430/MSPGCC/9_2_0_0/export/msp430-gcc-9.2.0.50_linux64.tar.bz2",
|
||||||
"riscv-gcc": "https://github.com/xpack-dev-tools/riscv-none-elf-gcc-xpack/releases/download/v13.2.0-2/xpack-riscv-none-elf-gcc-13.2.0-2-linux-x64.tar.gz",
|
"riscv-gcc": "https://github.com/xpack-dev-tools/riscv-none-elf-gcc-xpack/releases/download/v13.2.0-2/xpack-riscv-none-elf-gcc-13.2.0-2-linux-x64.tar.gz",
|
||||||
"rx-gcc": "https://llvm-gcc-renesas.com/downloads/get.php?f=rx/8.3.0.202004-gnurx/gcc-8.3.0.202004-GNURX-ELF.run"
|
"rx-gcc": "https://llvm-gcc-renesas.com/downloads/get.php?f=rx/8.3.0.202004-gnurx/gcc-8.3.0.202004-GNURX-ELF.run",
|
||||||
|
"arm-iar": "https://updates.iar.com/FileStore/STANDARD/001/003/322/cxarm-9.60.3.deb"
|
||||||
}'
|
}'
|
||||||
toolchain_url=$(echo $TOOLCHAIN_JSON | jq -r '.["<< parameters.toolchain >>"]')
|
toolchain_url=$(echo $TOOLCHAIN_JSON | jq -r '.["<< parameters.toolchain >>"]')
|
||||||
|
|
||||||
@ -38,18 +39,26 @@ commands:
|
|||||||
# download if folder does not exist (not cached)
|
# download if folder does not exist (not cached)
|
||||||
if [ ! -d ~/cache/<< parameters.toolchain >> ]; then
|
if [ ! -d ~/cache/<< parameters.toolchain >> ]; then
|
||||||
mkdir -p ~/cache/<< parameters.toolchain >>
|
mkdir -p ~/cache/<< parameters.toolchain >>
|
||||||
wget --progress=dot:giga $toolchain_url -O toolchain.tar.gz
|
|
||||||
if [[ << parameters.toolchain >> == rx-gcc ]]; then
|
if [[ << parameters.toolchain >> == rx-gcc ]]; then
|
||||||
mv toolchain.tar.gz toolchain.run
|
wget --progress=dot:giga $toolchain_url -O toolchain.run
|
||||||
chmod +x toolchain.run
|
chmod +x toolchain.run
|
||||||
./toolchain.run -p ~/cache/<< parameters.toolchain >>/gnurx -y
|
./toolchain.run -p ~/cache/<< parameters.toolchain >>/gnurx -y
|
||||||
|
elif [[ << parameters.toolchain >> == arm-iar ]]; then
|
||||||
|
wget --progress=dot:giga $toolchain_url -O ~/cache/<< parameters.toolchain >>/toolchain.deb
|
||||||
else
|
else
|
||||||
|
wget --progress=dot:giga $toolchain_url -O toolchain.tar.gz
|
||||||
tar -C ~/cache/<< parameters.toolchain >> -xaf toolchain.tar.gz
|
tar -C ~/cache/<< parameters.toolchain >> -xaf toolchain.tar.gz
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Add toolchain to PATH
|
# Add toolchain to PATH
|
||||||
echo "export PATH=$PATH:`echo ~/cache/<< parameters.toolchain >>/*/bin`" >> $BASH_ENV
|
if [[ << parameters.toolchain >> == arm-iar ]]; then
|
||||||
|
# Install IAR since we only cache deb file
|
||||||
|
sudo dpkg --ignore-depends=libusb-1.0-0 -i ~/cache/<< parameters.toolchain >>/toolchain.deb
|
||||||
|
echo "export PATH=$PATH:/opt/iar/cxarm/arm/bin" >> $BASH_ENV
|
||||||
|
else
|
||||||
|
echo "export PATH=$PATH:`echo ~/cache/<< parameters.toolchain >>/*/bin`" >> $BASH_ENV
|
||||||
|
fi
|
||||||
|
|
||||||
- save_cache:
|
- save_cache:
|
||||||
name: Save Toolchain Cache
|
name: Save Toolchain Cache
|
||||||
@ -110,6 +119,9 @@ commands:
|
|||||||
# Toolchain option default is gcc
|
# Toolchain option default is gcc
|
||||||
if [ << parameters.toolchain >> == arm-clang ]; then
|
if [ << parameters.toolchain >> == arm-clang ]; then
|
||||||
TOOLCHAIN_OPTION="--toolchain clang"
|
TOOLCHAIN_OPTION="--toolchain clang"
|
||||||
|
elif [ << parameters.toolchain >> == arm-iar ]; then
|
||||||
|
TOOLCHAIN_OPTION="--toolchain iar"
|
||||||
|
iccarm --version
|
||||||
elif [ << parameters.toolchain >> == arm-gcc ]; then
|
elif [ << parameters.toolchain >> == arm-gcc ]; then
|
||||||
TOOLCHAIN_OPTION="--toolchain gcc"
|
TOOLCHAIN_OPTION="--toolchain gcc"
|
||||||
fi
|
fi
|
||||||
|
10
.github/workflows/build.yml
vendored
10
.github/workflows/build.yml
vendored
@ -113,13 +113,12 @@ jobs:
|
|||||||
# Build IAR on HFP self-hosted
|
# Build IAR on HFP self-hosted
|
||||||
# ---------------------------------------
|
# ---------------------------------------
|
||||||
arm-iar:
|
arm-iar:
|
||||||
if: github.repository_owner == 'hathach'
|
if: github.repository_owner == 'hathach' && github.event_name == 'push'
|
||||||
needs: set-matrix
|
needs: set-matrix
|
||||||
runs-on: [self-hosted, Linux, X64, hifiphile]
|
runs-on: [self-hosted, Linux, X64, hifiphile]
|
||||||
env:
|
env:
|
||||||
BUILD_ARGS: ${{ join(fromJSON(needs.set-matrix.outputs.json)['arm-iar'], ' ') }}
|
BUILD_ARGS: ${{ join(fromJSON(needs.set-matrix.outputs.json)['arm-iar'], ' ') }}
|
||||||
IAR_LMS_CLOUD_URL: https://license.cloud.iar.com
|
# IAR_LMS_BEARER_TOKEN: ${{ secrets.IAR_LMS_BEARER_TOKEN }}
|
||||||
IAR_LMS_BEARER_TOKEN: ${{ secrets.IAR_LMS_BEARER_TOKEN }}
|
|
||||||
steps:
|
steps:
|
||||||
- name: Clean workspace
|
- name: Clean workspace
|
||||||
run: |
|
run: |
|
||||||
@ -138,8 +137,3 @@ jobs:
|
|||||||
|
|
||||||
- name: Build
|
- name: Build
|
||||||
run: python3 tools/build.py --one-per-family --toolchain iar $BUILD_ARGS
|
run: python3 tools/build.py --one-per-family --toolchain iar $BUILD_ARGS
|
||||||
|
|
||||||
- name: Test on actual hardware (hardware in the loop)
|
|
||||||
if: github.event_name == 'pull_request'
|
|
||||||
run: |
|
|
||||||
python3 test/hil/hil_test.py hfp.json
|
|
||||||
|
8
.github/workflows/ci_set_matrix.py
vendored
8
.github/workflows/ci_set_matrix.py
vendored
@ -55,14 +55,6 @@ def set_matrix_json():
|
|||||||
for toolchain in toolchain_list:
|
for toolchain in toolchain_list:
|
||||||
filtered_families = [family for family, supported_toolchain in family_list.items() if
|
filtered_families = [family for family, supported_toolchain in family_list.items() if
|
||||||
toolchain in supported_toolchain]
|
toolchain in supported_toolchain]
|
||||||
|
|
||||||
# always add board in hfp.json for arm-iar
|
|
||||||
if toolchain == 'arm-iar':
|
|
||||||
with open('test/hil/hfp.json') as f:
|
|
||||||
hfp_data = json.load(f)
|
|
||||||
hfp_boards = [f"-b{board['name']}" for board in hfp_data['boards']]
|
|
||||||
filtered_families = filtered_families + hfp_boards
|
|
||||||
|
|
||||||
matrix[toolchain] = filtered_families
|
matrix[toolchain] = filtered_families
|
||||||
|
|
||||||
print(json.dumps(matrix))
|
print(json.dumps(matrix))
|
||||||
|
40
.github/workflows/hil_test.yml
vendored
40
.github/workflows/hil_test.yml
vendored
@ -58,7 +58,7 @@ jobs:
|
|||||||
|
|
||||||
# ---------------------------------------
|
# ---------------------------------------
|
||||||
# Hardware in the loop (HIL)
|
# Hardware in the loop (HIL)
|
||||||
# self-hosted running on an VM. For attached hardware checkout HIL_JSON
|
# self-hosted on local VM, for attached hardware checkout HIL_JSON
|
||||||
# ---------------------------------------
|
# ---------------------------------------
|
||||||
hil-tinyusb:
|
hil-tinyusb:
|
||||||
if: github.repository_owner == 'hathach'
|
if: github.repository_owner == 'hathach'
|
||||||
@ -86,3 +86,41 @@ jobs:
|
|||||||
run: |
|
run: |
|
||||||
ls cmake-build/
|
ls cmake-build/
|
||||||
python3 test/hil/hil_test.py ${{ env.HIL_JSON }}
|
python3 test/hil/hil_test.py ${{ env.HIL_JSON }}
|
||||||
|
|
||||||
|
# ---------------------------------------
|
||||||
|
# Hardware in the loop (HIL)
|
||||||
|
# self-hosted by HFP, build with IAR toolchain, for attached hardware checkout test/hil/hfp.json
|
||||||
|
# ---------------------------------------
|
||||||
|
hil-hfp:
|
||||||
|
if: github.repository_owner == 'hathach'
|
||||||
|
runs-on: [self-hosted, Linux, X64, hifiphile]
|
||||||
|
#env:
|
||||||
|
# IAR_LMS_BEARER_TOKEN: ${{ secrets.IAR_LMS_BEARER_TOKEN }}
|
||||||
|
steps:
|
||||||
|
- name: Clean workspace
|
||||||
|
run: |
|
||||||
|
echo "Cleaning up previous run"
|
||||||
|
rm -rf "${{ github.workspace }}"
|
||||||
|
mkdir -p "${{ github.workspace }}"
|
||||||
|
|
||||||
|
- name: Toolchain version
|
||||||
|
run: iccarm --version
|
||||||
|
|
||||||
|
- name: Checkout TinyUSB
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Get build boards
|
||||||
|
run: |
|
||||||
|
MATRIX_JSON=$(python test/hil/hil_ci_set_matrix.py test/hil/hfp.json)
|
||||||
|
BUILD_ARGS=$(echo $MATRIX_JSON | jq -r '.["arm-gcc"] | join(" ")')
|
||||||
|
echo "BUILD_ARGS=$BUILD_ARGS"
|
||||||
|
echo "BUILD_ARGS=$BUILD_ARGS" >> $GITHUB_ENV
|
||||||
|
|
||||||
|
- name: Get Dependencies
|
||||||
|
run: python3 tools/get_deps.py $BUILD_ARGS
|
||||||
|
|
||||||
|
- name: Build
|
||||||
|
run: python3 tools/build.py --toolchain iar $BUILD_ARGS
|
||||||
|
|
||||||
|
- name: Test on actual hardware (hardware in the loop)
|
||||||
|
run: python3 test/hil/hil_test.py hfp.json
|
||||||
|
@ -109,7 +109,14 @@ def cmake_board(board, toolchain, build_flags_on):
|
|||||||
rcmd = run_cmd(f'cmake examples -B {build_dir} -G "Ninja" -DBOARD={board} -DCMAKE_BUILD_TYPE=MinSizeRel '
|
rcmd = run_cmd(f'cmake examples -B {build_dir} -G "Ninja" -DBOARD={board} -DCMAKE_BUILD_TYPE=MinSizeRel '
|
||||||
f'-DTOOLCHAIN={toolchain} {build_flags}')
|
f'-DTOOLCHAIN={toolchain} {build_flags}')
|
||||||
if rcmd.returncode == 0:
|
if rcmd.returncode == 0:
|
||||||
rcmd = run_cmd(f"cmake --build {build_dir}")
|
cmd = f"cmake --build {build_dir}"
|
||||||
|
# Due to IAR capability, limit parallel build to 4 (medium+) or 6 (large) docker
|
||||||
|
if toolchain == 'iar' and os.getenv('CIRCLECI'):
|
||||||
|
if 'large' in os.getenv('CIRCLE_JOB'):
|
||||||
|
cmd += ' --parallel 6'
|
||||||
|
else:
|
||||||
|
cmd += ' --parallel 4'
|
||||||
|
rcmd = run_cmd(cmd)
|
||||||
ret[0 if rcmd.returncode == 0 else 1] += 1
|
ret[0 if rcmd.returncode == 0 else 1] += 1
|
||||||
|
|
||||||
example = 'all'
|
example = 'all'
|
||||||
|
Loading…
x
Reference in New Issue
Block a user