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=(
|
||||
"cmake arm-clang"
|
||||
"cmake arm-iar"
|
||||
"make aarch64-gcc"
|
||||
"make arm-gcc"
|
||||
"make msp430-gcc"
|
||||
@ -28,7 +29,27 @@ jobs:
|
||||
"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
|
||||
e_arr=($e)
|
||||
@ -43,26 +64,14 @@ jobs:
|
||||
FAMILY=$(jq -n --argjson family "$FAMILY" --argjson resource "$RESOURCE_LARGE" '$family | map(select(IN($resource[]) | not))')
|
||||
|
||||
if [[ $toolchain == esp-idf ]]; then
|
||||
echo " - build-vm:" >> .circleci/config2.yml
|
||||
gen_build_entry "$build_system" "$toolchain" "$FAMILY" "large"
|
||||
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: ['medium+']" >> .circleci/config2.yml
|
||||
gen_build_entry "$build_system" "$toolchain" "$FAMILY" "medium+"
|
||||
|
||||
# add large resources
|
||||
if [ "$(echo $FAMILY_LARGE | jq 'length')" -gt 0 ]; then
|
||||
echo " - build:" >> .circleci/config2.yml
|
||||
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_LARGE" >> .circleci/config2.yml
|
||||
echo " resource_class: ['large']" >> .circleci/config2.yml
|
||||
# add large resources if available
|
||||
if [ "$(echo $FAMILY_LARGE | jq 'length')" -gt 0 ]; then
|
||||
gen_build_entry "$build_system" "$toolchain" "$FAMILY_LARGE" "large"
|
||||
fi
|
||||
fi
|
||||
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",
|
||||
"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",
|
||||
"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 >>"]')
|
||||
|
||||
@ -38,18 +39,26 @@ commands:
|
||||
# download if folder does not exist (not cached)
|
||||
if [ ! -d ~/cache/<< parameters.toolchain >> ]; then
|
||||
mkdir -p ~/cache/<< parameters.toolchain >>
|
||||
wget --progress=dot:giga $toolchain_url -O toolchain.tar.gz
|
||||
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
|
||||
./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
|
||||
wget --progress=dot:giga $toolchain_url -O toolchain.tar.gz
|
||||
tar -C ~/cache/<< parameters.toolchain >> -xaf toolchain.tar.gz
|
||||
fi
|
||||
fi
|
||||
|
||||
# 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:
|
||||
name: Save Toolchain Cache
|
||||
@ -110,6 +119,9 @@ commands:
|
||||
# Toolchain option default is gcc
|
||||
if [ << parameters.toolchain >> == arm-clang ]; then
|
||||
TOOLCHAIN_OPTION="--toolchain clang"
|
||||
elif [ << parameters.toolchain >> == arm-iar ]; then
|
||||
TOOLCHAIN_OPTION="--toolchain iar"
|
||||
iccarm --version
|
||||
elif [ << parameters.toolchain >> == arm-gcc ]; then
|
||||
TOOLCHAIN_OPTION="--toolchain gcc"
|
||||
fi
|
||||
|
10
.github/workflows/build.yml
vendored
10
.github/workflows/build.yml
vendored
@ -113,13 +113,12 @@ jobs:
|
||||
# Build IAR on HFP self-hosted
|
||||
# ---------------------------------------
|
||||
arm-iar:
|
||||
if: github.repository_owner == 'hathach'
|
||||
if: github.repository_owner == 'hathach' && github.event_name == 'push'
|
||||
needs: set-matrix
|
||||
runs-on: [self-hosted, Linux, X64, hifiphile]
|
||||
env:
|
||||
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:
|
||||
- name: Clean workspace
|
||||
run: |
|
||||
@ -138,8 +137,3 @@ jobs:
|
||||
|
||||
- name: Build
|
||||
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:
|
||||
filtered_families = [family for family, supported_toolchain in family_list.items() if
|
||||
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
|
||||
|
||||
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)
|
||||
# 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:
|
||||
if: github.repository_owner == 'hathach'
|
||||
@ -86,3 +86,41 @@ jobs:
|
||||
run: |
|
||||
ls cmake-build/
|
||||
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 '
|
||||
f'-DTOOLCHAIN={toolchain} {build_flags}')
|
||||
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
|
||||
|
||||
example = 'all'
|
||||
|
Loading…
x
Reference in New Issue
Block a user