summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHa Thach <[email protected]>2024-12-05 18:01:16 +0700
committerGitHub <[email protected]>2024-12-05 18:01:16 +0700
commit310b8657f06570362740c4dda89705f694c81538 (patch)
tree9b36abf565b5cd0f8ddfcb3f4532929ec16d74b2
parenteabf68bd9154672821531c9139118a63076b9e9d (diff)
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
-rw-r--r--.circleci/config.yml47
-rw-r--r--.circleci/config2.yml20
-rw-r--r--.github/workflows/build.yml10
-rwxr-xr-x.github/workflows/ci_set_matrix.py8
-rw-r--r--.github/workflows/hil_test.yml40
-rwxr-xr-xtools/build.py9
6 files changed, 93 insertions, 41 deletions
diff --git a/.circleci/config.yml b/.circleci/config.yml
index 28afafb00..451b79085 100644
--- a/.circleci/config.yml
+++ b/.circleci/config.yml
@@ -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
diff --git a/.circleci/config2.yml b/.circleci/config2.yml
index e811ef3ed..e6ae87e77 100644
--- a/.circleci/config2.yml
+++ b/.circleci/config2.yml
@@ -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
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index 283b72061..67482c748 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -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
diff --git a/.github/workflows/ci_set_matrix.py b/.github/workflows/ci_set_matrix.py
index 78fcac68a..410508246 100755
--- a/.github/workflows/ci_set_matrix.py
+++ b/.github/workflows/ci_set_matrix.py
@@ -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))
diff --git a/.github/workflows/hil_test.yml b/.github/workflows/hil_test.yml
index c6e7f33b0..bfa2b5704 100644
--- a/.github/workflows/hil_test.yml
+++ b/.github/workflows/hil_test.yml
@@ -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
diff --git a/tools/build.py b/tools/build.py
index 3a9239bc2..bbc98e9c4 100755
--- a/tools/build.py
+++ b/tools/build.py
@@ -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'