From 64828b388d4bf98cf15dbc3e29e2049e86d50156 Mon Sep 17 00:00:00 2001 From: nxptest <68574485+nxptest@users.noreply.github.com> Date: Thu, 14 Jul 2022 21:38:25 +0800 Subject: [PATCH] [MW320] Added CI workflow for MW320 (#20602) * Added CI workflow for MW320. Signed-off-by: David Lin * Corrected output file name. Signed-off-by: David Lin * Restyled. Signed-off-by: David Lin * Fixed errors when running test.py. Signed-off-by: David Lin --- .github/workflows/examples-mw320.yaml | 84 +++++++++++++++++++ examples/all-clusters-app/nxp/mw320/BUILD.gn | 2 +- examples/all-clusters-app/nxp/mw320/README.md | 6 +- scripts/build/BUILD.gn | 1 + scripts/build/build/targets.py | 8 ++ scripts/build/builders/mw320.py | 57 +++++++++++++ .../testdata/all_targets_except_host.txt | 1 + .../build/testdata/build_all_except_host.txt | 6 ++ .../glob_star_targets_except_host.txt | 1 + 9 files changed, 162 insertions(+), 4 deletions(-) create mode 100755 .github/workflows/examples-mw320.yaml mode change 100644 => 100755 scripts/build/build/targets.py create mode 100755 scripts/build/builders/mw320.py diff --git a/.github/workflows/examples-mw320.yaml b/.github/workflows/examples-mw320.yaml new file mode 100755 index 00000000000000..c22e74b8c86c8a --- /dev/null +++ b/.github/workflows/examples-mw320.yaml @@ -0,0 +1,84 @@ +# Copyright (c) 2020-2021 Project CHIP Authors +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +name: Build example - MW320 + +on: + push: + pull_request: + +concurrency: + group: ${{ github.ref }}-${{ github.workflow }}-${{ (github.event_name == 'pull_request' && github.event.number) || (github.event_name == 'workflow_dispatch' && github.run_number) || github.sha }} + cancel-in-progress: true + +jobs: + mw320: + name: MW320 + timeout-minutes: 60 + + env: + BUILD_TYPE: gn_mw320 + + runs-on: ubuntu-latest + if: github.actor != 'restyled-io[bot]' + + container: + image: connectedhomeip/chip-build:0.5.84 + volumes: + - "/tmp/bloat_reports:/tmp/bloat_reports" + steps: + - uses: Wandalen/wretry.action@v1.0.15 + name: Checkout + with: + action: actions/checkout@v3 + with: | + token: ${{ github.token }} + attempt_limit: 3 + attempt_delay: 2000 + - name: Checkout submodules + run: scripts/checkout_submodules.py --shallow --platform mw320 + + - name: Set up environment for size reports + if: ${{ !env.ACT }} + env: + GH_CONTEXT: ${{ toJson(github) }} + run: scripts/tools/memory/gh_sizes_environment.py "${GH_CONTEXT}" + + - name: Bootstrap + timeout-minutes: 25 + run: scripts/build/gn_bootstrap.sh + - name: Uploading bootstrap logs + uses: actions/upload-artifact@v2 + if: ${{ always() && !env.ACT }} + with: + name: bootstrap-logs + path: | + .environment/gn_out/.ninja_log + .environment/pigweed-venv/*.log + - name: Build MW320 all clusters example app + timeout-minutes: 20 + run: | + ./scripts/run_in_build_env.sh \ + "./scripts/build/build_examples.py \ + --target 'mw320-all-clusters-app' \ + build \ + --copy-artifacts-to out/artifacts \ + " + - name: Uploading Size Reports + uses: actions/upload-artifact@v2 + if: ${{ !env.ACT }} + with: + name: Size,MW320-Examples,${{ env.GH_EVENT_PR }},${{ env.GH_EVENT_HASH }},${{ env.GH_EVENT_PARENT }},${{ github.event_name }} + path: | + /tmp/bloat_reports/ diff --git a/examples/all-clusters-app/nxp/mw320/BUILD.gn b/examples/all-clusters-app/nxp/mw320/BUILD.gn index f267fe5875bebf..e93e919d6cf253 100644 --- a/examples/all-clusters-app/nxp/mw320/BUILD.gn +++ b/examples/all-clusters-app/nxp/mw320/BUILD.gn @@ -49,7 +49,7 @@ mw320_sdk("sdk") { mw320_executable("shell_mw320") { include_dirs = [] defines = [] - output_name = "all-cluster-mw320.out" + output_name = "chip-mw320-all-clusters-app.out" public_deps = [ ":sdk", diff --git a/examples/all-clusters-app/nxp/mw320/README.md b/examples/all-clusters-app/nxp/mw320/README.md index af1c09621398d8..95905446be40e3 100755 --- a/examples/all-clusters-app/nxp/mw320/README.md +++ b/examples/all-clusters-app/nxp/mw320/README.md @@ -39,8 +39,8 @@ $ gn gen out/debug $ ninja -v -C out/debug ``` -Example application binary file "all-cluster-mw320.bin" will be generated under -directory "out/debug". +Example application binary file "chip-mw320-all-clusters-app.bin" will be +generated under directory "out/debug". Note: @@ -74,7 +74,7 @@ Prepare MW320 download firmware image: ``` $ ln -sf third_party/connectedhomeip/third_party/nxp/mw320_sdk/repo mw320_sdk -$ mw320_sdk/tools/mw_img_conv/bin/mw_img_conv mcufw out/debug/all-cluster-mw320.bin out/debug/all-cluster-mw320.mcufw.bin 0x1F010000 +$ mw320_sdk/tools/mw_img_conv/bin/mw_img_conv mcufw out/debug/chip-mw320-all-clusters-app.bin out/debug/all-cluster-mw320.mcufw.bin 0x1F010000 $ cp out/debug/all-cluster-mw320.mcufw.bin mw320_sdk/mw320_matter_flash/Matter/. ``` diff --git a/scripts/build/BUILD.gn b/scripts/build/BUILD.gn index af69aa55f9b5bf..e2b0119566f126 100644 --- a/scripts/build/BUILD.gn +++ b/scripts/build/BUILD.gn @@ -44,6 +44,7 @@ pw_python_package("build_examples") { "builders/infineon.py", "builders/k32w.py", "builders/mbed.py", + "builders/mw320.py", "builders/nrf.py", "builders/qpg.py", "builders/telink.py", diff --git a/scripts/build/build/targets.py b/scripts/build/build/targets.py old mode 100644 new mode 100755 index 55b08215c11509..64565fb2e9cd78 --- a/scripts/build/build/targets.py +++ b/scripts/build/build/targets.py @@ -26,6 +26,7 @@ from builders.infineon import InfineonApp, InfineonBoard, InfineonBuilder from builders.k32w import K32WApp, K32WBuilder from builders.mbed import MbedApp, MbedBoard, MbedBuilder, MbedProfile +from builders.mw320 import MW320App, MW320Builder from builders.nrf import NrfApp, NrfBoard, NrfConnectBuilder from builders.qpg import QpgApp, QpgBoard, QpgBuilder from builders.telink import TelinkApp, TelinkBoard, TelinkBuilder @@ -595,6 +596,12 @@ def IMXTargets(): yield target.Extend('ota-provider-app-release', app=IMXApp.OTA_PROVIDER, release=True) +def MW320Targets(): + target = Target('mw320', MW320Builder) + + yield target.Extend('all-clusters-app', app=MW320App.ALL_CLUSTERS) + + ALL = [] target_generators = [ @@ -613,6 +620,7 @@ def IMXTargets(): TizenTargets(), Bl602Targets(), IMXTargets(), + MW320Targets(), ] for generator in target_generators: diff --git a/scripts/build/builders/mw320.py b/scripts/build/builders/mw320.py new file mode 100755 index 00000000000000..66b739321d8759 --- /dev/null +++ b/scripts/build/builders/mw320.py @@ -0,0 +1,57 @@ +# Copyright (c) 2021 Project CHIP Authors +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import os +from enum import Enum, auto + +from .gn import GnBuilder + + +class MW320App(Enum): + ALL_CLUSTERS = auto() + + def ExampleName(self): + if self == MW320App.ALL_CLUSTERS: + return 'all-clusters-app' + else: + raise Exception('Unknown app type: %r' % self) + + def AppNamePrefix(self): + if self == MW320App.ALL_CLUSTERS: + return 'chip-mw320-all-clusters-app' + else: + raise Exception('Unknown app type: %r' % self) + + def BuildRoot(self, root): + return os.path.join(root, 'examples', self.ExampleName(), 'nxp', 'mw320') + + +class MW320Builder(GnBuilder): + + def __init__(self, + root, + runner, + app: MW320App = MW320App.ALL_CLUSTERS): + super(MW320Builder, self).__init__( + root=app.BuildRoot(root), + runner=runner) + self.app = app + + def build_outputs(self): + items = {} + for extension in [".bin", ".out", ".out.map"]: + name = '%s%s' % (self.app.AppNamePrefix(), extension) + items[name] = os.path.join(self.output_dir, name) + + return items diff --git a/scripts/build/testdata/all_targets_except_host.txt b/scripts/build/testdata/all_targets_except_host.txt index 78dd8d3144b57a..74eb20b4af658e 100644 --- a/scripts/build/testdata/all_targets_except_host.txt +++ b/scripts/build/testdata/all_targets_except_host.txt @@ -205,6 +205,7 @@ mbed-CY8CPROTO_062_4343W-pigweed-release mbed-CY8CPROTO_062_4343W-shell-debug (NOGLOB: Compile only for debugging purpose - https://os.mbed.com/docs/mbed-os/latest/program-setup/build-profiles-and-rules.html) mbed-CY8CPROTO_062_4343W-shell-develop (NOGLOB: Compile only for debugging purpose - https://os.mbed.com/docs/mbed-os/latest/program-setup/build-profiles-and-rules.html) mbed-CY8CPROTO_062_4343W-shell-release +mw320-all-clusters-app nrf-native-posix-64-tests nrf-nrf52840dk-all-clusters nrf-nrf52840dk-all-clusters-minimal diff --git a/scripts/build/testdata/build_all_except_host.txt b/scripts/build/testdata/build_all_except_host.txt index 3ee3d9ab4b0d70..032696d366a38b 100644 --- a/scripts/build/testdata/build_all_except_host.txt +++ b/scripts/build/testdata/build_all_except_host.txt @@ -988,6 +988,9 @@ mbed-tools configure -t GCC_ARM -m CY8CPROTO_062_4343W -p {root}/examples/shell/ # Generating mbed-CY8CPROTO_062_4343W-shell-release cmake -S {root}/examples/shell/mbed -B {out}/mbed-CY8CPROTO_062_4343W-shell-release -GNinja -DCMAKE_BUILD_TYPE=release -DMBED_OS_PATH={root}/third_party/mbed-os/repo -DMBED_OS_POSIX_SOCKET_PATH={root}/third_party/mbed-os-posix-socket/repo +# Generating mw320-all-clusters-app +gn gen --check --fail-on-unused-args --export-compile-commands --root={root}/examples/all-clusters-app/nxp/mw320 {out}/mw320-all-clusters-app + # Generating nrf-native-posix-64-tests bash -c 'source "$ZEPHYR_BASE/zephyr-env.sh"; export GNUARMEMB_TOOLCHAIN_PATH="$PW_ARM_CIPD_INSTALL_DIR"; @@ -2213,6 +2216,9 @@ bash -c 'rm -rf {out}/mbed-CY8CPROTO_062_4343W-shell-release/chip-*' # Building mbed-CY8CPROTO_062_4343W-shell-release cmake --build {out}/mbed-CY8CPROTO_062_4343W-shell-release +# Building mw320-all-clusters-app +ninja -C {out}/mw320-all-clusters-app + # Building nrf-native-posix-64-tests ninja -C {out}/nrf-native-posix-64-tests diff --git a/scripts/build/testdata/glob_star_targets_except_host.txt b/scripts/build/testdata/glob_star_targets_except_host.txt index 5211dff002d074..d7090c2c52ccfd 100644 --- a/scripts/build/testdata/glob_star_targets_except_host.txt +++ b/scripts/build/testdata/glob_star_targets_except_host.txt @@ -85,6 +85,7 @@ mbed-CY8CPROTO_062_4343W-light-release mbed-CY8CPROTO_062_4343W-lock-release mbed-CY8CPROTO_062_4343W-pigweed-release mbed-CY8CPROTO_062_4343W-shell-release +mw320-all-clusters-app nrf-native-posix-64-tests nrf-nrf52840dk-all-clusters nrf-nrf52840dk-all-clusters-minimal