11# This workflow builds esp-idf examples:
22#
33# - usb device examples: with overridden esp_tinyusb from esp-usb/device/esp_tinyusb
4- # - Only IDF Latest
4+ # - Override esp_tinyusb component only for IDF >= 6.0 temporarily
55#
6- # - usb host examples: with overridden usb component from esp-usb/host/usb
7- # - Only service IDF releases
6+ # - usb host examples:
7+ # - Overridden usb component from esp-usb/host/usb and overridden class drivers from esp-usb/host/class
8+ # - Only service IDF releases
9+ # - Overridden class drivers from esp-usb/host/class
10+ # - All (service + maintenance IDF releases)
11+ #
12+ # - cherryusb examples are ignored
13+ # - usb_host_lib example -> manifest file must be created for IDF < 6.0 to override usb component
814
915name : Build ESP-IDF USB examples
1016
3238 env :
3339 CONFIG_PATH : ${{ github.workspace }}/.github/ci/.idf_build_examples_config.toml
3440 MANIFEST_PATH : ${{ github.workspace }}/.github/ci/.idf-build-examples-rules.yml
41+ EXAMPLES_PATH : ${{ github.workspace }} # Will be set-up in "Setup IDF Examples path" step
3542 steps :
3643 - uses : actions/checkout@v4
3744 with :
@@ -41,14 +48,81 @@ jobs:
4148 run : |
4249 . ${IDF_PATH}/export.sh
4350 pip install idf-component-manager>=2.1.2 idf-build-apps==2.12.2 pyyaml --upgrade
51+ - name : Setup IDF Examples path
52+ run : echo "EXAMPLES_PATH=${IDF_PATH}/examples/peripherals/usb" >> $GITHUB_ENV
53+ - name : Override device component
54+ # Override esp_tinyusb component only for IDF >= 6.0 temporarily
55+ if : contains('release-v6.0 latest', matrix.idf_ver)
56+ run : |
57+ . ${IDF_PATH}/export.sh
58+ python .github/ci/override_managed_component.py esp_tinyusb device/esp_tinyusb ${{ env.EXAMPLES_PATH }}/device/*
59+ - name : Override class components
60+ # Override all class drivers for all IDF releases
61+ run : |
62+ . ${IDF_PATH}/export.sh
63+
64+ # usb_host_cdc_acm component
65+ python .github/ci/override_managed_component.py usb_host_cdc_acm host/class/cdc/usb_host_cdc_acm ${{ env.EXAMPLES_PATH }}/host/cdc
66+
67+ # usb_host_ch34x_vcp component
68+ python .github/ci/override_managed_component.py usb_host_ch34x_vcp host/class/cdc/usb_host_ch34x_vcp ${{ env.EXAMPLES_PATH }}/host/cdc/cdc_acm_vcp
69+
70+ # usb_host_cp210x_vcp component
71+ python .github/ci/override_managed_component.py usb_host_cp210x_vcp host/class/cdc/usb_host_cp210x_vcp ${{ env.EXAMPLES_PATH }}/host/cdc/cdc_acm_vcp
72+
73+ # usb_host_ftdi_vcp component
74+ python .github/ci/override_managed_component.py usb_host_ftdi_vcp host/class/cdc/usb_host_ftdi_vcp ${{ env.EXAMPLES_PATH }}/host/cdc/cdc_acm_vcp
75+
76+ # usb_host_vcp component
77+ python .github/ci/override_managed_component.py usb_host_vcp host/class/cdc/usb_host_vcp ${{ env.EXAMPLES_PATH }}/host/cdc/cdc_acm_vcp
78+
79+ # usb_host_hid component
80+ python .github/ci/override_managed_component.py usb_host_hid host/class/hid/usb_host_hid ${{ env.EXAMPLES_PATH }}/host/hid
81+
82+ # usb_host_msc component
83+ python .github/ci/override_managed_component.py usb_host_msc host/class/msc/usb_host_msc ${{ env.EXAMPLES_PATH }}/host/msc
84+
85+ # usb_host_uvc component
86+ python .github/ci/override_managed_component.py usb_host_uvc host/class/uvc/usb_host_uvc ${{ env.EXAMPLES_PATH }}/host/uvc
87+
88+ - name : Create component manifest file for usb_host_lib
89+ # Create manifest file for usb_host_lib example, because the examples does not have it for IDF < 6.0
90+ # and we need to override the usb component
91+ if : contains('release-v5.4 release-v5.5', matrix.idf_ver)
92+ working-directory : ${{ env.EXAMPLES_PATH }}/host/usb_host_lib/main
93+ run : |
94+ python3 - << 'EOF'
95+ content = """## IDF Component Manager Manifest File
96+ dependencies:
97+ espressif/usb: "*"
98+ """
99+ with open("idf_component.yml", "w") as f:
100+ f.write(content)
101+ EOF
102+
103+ if [ -f idf_component.yml ]; then
104+ echo "✅ File created successfully." && cat idf_component.yml
105+ else
106+ echo "❌ File was not created"
107+ exit 1
108+ fi
109+ - name : Override usb component
110+ # Override usb host component only for service releases
111+ if : contains('release-v5.4 release-v5.5 release-v6.0 latest', matrix.idf_ver)
112+ run : |
113+ . ${IDF_PATH}/export.sh
114+ python .github/ci/override_managed_component.py usb host/usb ${{ env.EXAMPLES_PATH }}/host/*
44115 - name : Build ESP-IDF ${{ matrix.idf_ver }} USB examples
116+ # Build esp-idf examples with overridden components
45117 shell : bash
46118 run : |
47119 . ${IDF_PATH}/export.sh
48-
49- python .github/ci/override_managed_component.py esp_tinyusb device/esp_tinyusb ${IDF_PATH}/examples/peripherals/usb/device/*
50- python .github/ci/override_managed_component.py usb host/usb ${IDF_PATH}/examples/peripherals/usb/host/*
51120 cd ${IDF_PATH}
52121
122+ # Export compiler flags
123+ export PEDANTIC_FLAGS="-DIDF_CI_BUILD -Werror -Werror=deprecated-declarations -Werror=unused-variable -Werror=unused-but-set-variable -Werror=unused-function"
124+ export EXTRA_CFLAGS="${PEDANTIC_FLAGS} -Wstrict-prototypes"
125+ export EXTRA_CXXFLAGS="${PEDANTIC_FLAGS}"
126+
53127 idf-build-apps find --config-file ${CONFIG_PATH} --manifest-file ${MANIFEST_PATH}
54128 idf-build-apps build --config-file ${CONFIG_PATH} --manifest-file ${MANIFEST_PATH}
0 commit comments