@@ -27,6 +27,16 @@ function ci_gcc_riscv_setup {
2727 riscv64-unknown-elf-gcc --version
2828}
2929
30+ function ci_gcc_plugin_setup {
31+ if [ $# -eq 0 ]; then
32+ GCC_VER=$( echo __GNUC__ | gcc -P -E -)
33+ sudo apt-get install gcc-${GCC_VER} -plugin-dev
34+ else
35+ GCC_VER=$( echo __GNUC__ | ${1} -gcc -P -E -)
36+ sudo apt-get install gcc-${GCC_VER} -plugin-dev-${1}
37+ fi
38+ }
39+
3040function ci_picotool_setup {
3141 # Manually installing picotool ensures we use a release version, and speeds up the build.
3242 git clone https://github.com/raspberrypi/pico-sdk.git
@@ -132,6 +142,7 @@ function ci_mpy_format_setup {
132142 sudo apt-get update
133143 sudo apt-get install python2.7
134144 sudo pip3 install pyelftools
145+ ci_gcc_plugin_setup
135146 python2.7 --version
136147 python3 --version
137148}
@@ -282,11 +293,11 @@ function ci_mimxrt_setup {
282293function ci_mimxrt_build {
283294 make ${MAKEOPTS} -C mpy-cross
284295 make ${MAKEOPTS} -C ports/mimxrt BOARD=MIMXRT1020_EVK submodules
285- make ${MAKEOPTS} -C ports/mimxrt BOARD=MIMXRT1020_EVK
296+ make ${MAKEOPTS} -C ports/mimxrt BOARD=MIMXRT1020_EVK MICROPY_USE_COMPILER_PLUGIN=gcc
286297 make ${MAKEOPTS} -C ports/mimxrt BOARD=TEENSY40 submodules
287- make ${MAKEOPTS} -C ports/mimxrt BOARD=TEENSY40
298+ make ${MAKEOPTS} -C ports/mimxrt BOARD=TEENSY40 MICROPY_USE_COMPILER_PLUGIN=gcc
288299 make ${MAKEOPTS} -C ports/mimxrt BOARD=MIMXRT1060_EVK submodules
289- make ${MAKEOPTS} -C ports/mimxrt BOARD=MIMXRT1060_EVK CFLAGS_EXTRA=-DMICROPY_HW_USB_MSC=1
300+ make ${MAKEOPTS} -C ports/mimxrt BOARD=MIMXRT1060_EVK CFLAGS_EXTRA=-DMICROPY_HW_USB_MSC=1 MICROPY_USE_COMPILER_PLUGIN=gcc
290301}
291302
292303# #######################################################################################
@@ -300,10 +311,10 @@ function ci_nrf_build {
300311 ports/nrf/drivers/bluetooth/download_ble_stack.sh s140_nrf52_6_1_1
301312 make ${MAKEOPTS} -C mpy-cross
302313 make ${MAKEOPTS} -C ports/nrf submodules
303- make ${MAKEOPTS} -C ports/nrf BOARD=PCA10040
304- make ${MAKEOPTS} -C ports/nrf BOARD=MICROBIT
305- make ${MAKEOPTS} -C ports/nrf BOARD=PCA10056 SD=s140
306- make ${MAKEOPTS} -C ports/nrf BOARD=PCA10090
314+ make ${MAKEOPTS} -C ports/nrf BOARD=PCA10040 MICROPY_USE_COMPILER_PLUGIN=gcc
315+ make ${MAKEOPTS} -C ports/nrf BOARD=MICROBIT MICROPY_USE_COMPILER_PLUGIN=gcc
316+ make ${MAKEOPTS} -C ports/nrf BOARD=PCA10056 SD=s140 MICROPY_USE_COMPILER_PLUGIN=gcc
317+ make ${MAKEOPTS} -C ports/nrf BOARD=PCA10090 MICROPY_USE_COMPILER_PLUGIN=gcc
307318}
308319
309320# #######################################################################################
@@ -312,11 +323,12 @@ function ci_nrf_build {
312323function ci_powerpc_setup {
313324 sudo apt-get update
314325 sudo apt-get install gcc-powerpc64le-linux-gnu libc6-dev-ppc64el-cross
326+ ci_gcc_plugin_setup powerpc64le-linux-gnu
315327}
316328
317329function ci_powerpc_build {
318- make ${MAKEOPTS} -C ports/powerpc UART=potato
319- make ${MAKEOPTS} -C ports/powerpc UART=lpc_serial
330+ make ${MAKEOPTS} -C ports/powerpc UART=potato MICROPY_USE_COMPILER_PLUGIN=gcc
331+ make ${MAKEOPTS} -C ports/powerpc UART=lpc_serial MICROPY_USE_COMPILER_PLUGIN=gcc
320332}
321333
322334# #######################################################################################
@@ -347,17 +359,18 @@ function ci_qemu_build_arm_prepare {
347359
348360function ci_qemu_build_arm_bigendian {
349361 ci_qemu_build_arm_prepare
350- make ${MAKEOPTS} -C ports/qemu CFLAGS_EXTRA=-DMP_ENDIANNESS_BIG=1
362+ make ${MAKEOPTS} -C ports/qemu CFLAGS_EXTRA=-DMP_ENDIANNESS_BIG=1 MICROPY_USE_COMPILER_PLUGIN=gcc
351363}
352364
353365function ci_qemu_build_arm_sabrelite {
354366 ci_qemu_build_arm_prepare
355- make ${MAKEOPTS} -C ports/qemu BOARD=SABRELITE test_full
367+ make ${MAKEOPTS} -C ports/qemu BOARD=SABRELITE test_full MICROPY_USE_COMPILER_PLUGIN=gcc
356368}
357369
358370function ci_qemu_build_arm_thumb_softfp {
359371 ci_qemu_build_arm_prepare
360- make BOARD=MPS2_AN385 ${MAKEOPTS} -C ports/qemu test_full
372+ make BOARD=MPS2_AN385 ${MAKEOPTS} -C ports/qemu MICROPY_USE_COMPILER_PLUGIN=gcc test_full
373+ make ${MAKEOPTS} -C ports/qemu test_full MICROPY_USE_COMPILER_PLUGIN=gcc
361374
362375 # Test building native .mpy with ARM-M softfp architectures.
363376 ci_native_mpy_modules_build armv6m
@@ -384,7 +397,7 @@ function ci_qemu_build_arm_thumb_hardfp {
384397function ci_qemu_build_rv32 {
385398 make ${MAKEOPTS} -C mpy-cross
386399 make ${MAKEOPTS} -C ports/qemu BOARD=VIRT_RV32 submodules
387- make ${MAKEOPTS} -C ports/qemu BOARD=VIRT_RV32 test_full
400+ make ${MAKEOPTS} -C ports/qemu BOARD=VIRT_RV32 test_full MICROPY_USE_COMPILER_PLUGIN=gcc
388401
389402 # Test building and running native .mpy with rv32imc architecture.
390403 ci_native_mpy_modules_build rv32imc
@@ -402,13 +415,13 @@ function ci_renesas_ra_setup {
402415function ci_renesas_ra_board_build {
403416 make ${MAKEOPTS} -C mpy-cross
404417 make ${MAKEOPTS} -C ports/renesas-ra submodules
405- make ${MAKEOPTS} -C ports/renesas-ra BOARD=RA4M1_CLICKER
406- make ${MAKEOPTS} -C ports/renesas-ra BOARD=EK_RA6M2
407- make ${MAKEOPTS} -C ports/renesas-ra BOARD=EK_RA6M1
408- make ${MAKEOPTS} -C ports/renesas-ra BOARD=EK_RA4M1
409- make ${MAKEOPTS} -C ports/renesas-ra BOARD=EK_RA4W1
418+ make ${MAKEOPTS} -C ports/renesas-ra BOARD=RA4M1_CLICKER MICROPY_USE_COMPILER_PLUGIN=gcc
419+ make ${MAKEOPTS} -C ports/renesas-ra BOARD=EK_RA6M2 MICROPY_USE_COMPILER_PLUGIN=gcc
420+ make ${MAKEOPTS} -C ports/renesas-ra BOARD=EK_RA6M1 MICROPY_USE_COMPILER_PLUGIN=gcc
421+ make ${MAKEOPTS} -C ports/renesas-ra BOARD=EK_RA4M1 MICROPY_USE_COMPILER_PLUGIN=gcc
422+ make ${MAKEOPTS} -C ports/renesas-ra BOARD=EK_RA4W1 MICROPY_USE_COMPILER_PLUGIN=gcc
410423 make ${MAKEOPTS} -C ports/renesas-ra BOARD=ARDUINO_PORTENTA_C33 submodules
411- make ${MAKEOPTS} -C ports/renesas-ra BOARD=ARDUINO_PORTENTA_C33
424+ make ${MAKEOPTS} -C ports/renesas-ra BOARD=ARDUINO_PORTENTA_C33 MICROPY_USE_COMPILER_PLUGIN=gcc
412425}
413426
414427# #######################################################################################
@@ -446,8 +459,8 @@ function ci_samd_setup {
446459function ci_samd_build {
447460 make ${MAKEOPTS} -C mpy-cross
448461 make ${MAKEOPTS} -C ports/samd submodules
449- make ${MAKEOPTS} -C ports/samd BOARD=ADAFRUIT_ITSYBITSY_M0_EXPRESS
450- make ${MAKEOPTS} -C ports/samd BOARD=ADAFRUIT_ITSYBITSY_M4_EXPRESS
462+ make ${MAKEOPTS} -C ports/samd BOARD=ADAFRUIT_ITSYBITSY_M0_EXPRESS MICROPY_USE_COMPILER_PLUGIN=gcc
463+ make ${MAKEOPTS} -C ports/samd BOARD=ADAFRUIT_ITSYBITSY_M4_EXPRESS MICROPY_USE_COMPILER_PLUGIN=gcc
451464}
452465
453466# #######################################################################################
@@ -466,12 +479,12 @@ function ci_stm32_pyb_build {
466479 make ${MAKEOPTS} -C ports/stm32 BOARD=PYBD_SF2 submodules
467480 git submodule update --init lib/btstack
468481 git submodule update --init lib/mynewt-nimble
469- make ${MAKEOPTS} -C ports/stm32 BOARD=PYBV11 MICROPY_PY_NETWORK_WIZNET5K=5200 USER_C_MODULES=../../examples/usercmodule
470- make ${MAKEOPTS} -C ports/stm32 BOARD=PYBD_SF2
471- make ${MAKEOPTS} -C ports/stm32 BOARD=PYBD_SF6 COPT=-O2 NANBOX=1 MICROPY_BLUETOOTH_NIMBLE=0 MICROPY_BLUETOOTH_BTSTACK=1
472- make ${MAKEOPTS} -C ports/stm32/mboot BOARD=PYBV10 CFLAGS_EXTRA=' -DMBOOT_FSLOAD=1 -DMBOOT_VFS_LFS2=1'
473- make ${MAKEOPTS} -C ports/stm32/mboot BOARD=PYBD_SF6
474- make ${MAKEOPTS} -C ports/stm32/mboot BOARD=STM32F769DISC CFLAGS_EXTRA=' -DMBOOT_ADDRESS_SPACE_64BIT=1 -DMBOOT_SDCARD_ADDR=0x100000000ULL -DMBOOT_SDCARD_BYTE_SIZE=0x400000000ULL -DMBOOT_FSLOAD=1 -DMBOOT_VFS_FAT=1'
482+ make ${MAKEOPTS} -C ports/stm32 BOARD=PYBV11 MICROPY_PY_NETWORK_WIZNET5K=5200 USER_C_MODULES=../../examples/usercmodule MICROPY_USE_COMPILER_PLUGIN=gcc
483+ make ${MAKEOPTS} -C ports/stm32 BOARD=PYBD_SF2 MICROPY_USE_COMPILER_PLUGIN=gcc
484+ make ${MAKEOPTS} -C ports/stm32 BOARD=PYBD_SF6 COPT=-O2 NANBOX=1 MICROPY_BLUETOOTH_NIMBLE=0 MICROPY_BLUETOOTH_BTSTACK=1 MICROPY_USE_COMPILER_PLUGIN=gcc
485+ make ${MAKEOPTS} -C ports/stm32/mboot BOARD=PYBV10 CFLAGS_EXTRA=' -DMBOOT_FSLOAD=1 -DMBOOT_VFS_LFS2=1' MICROPY_USE_COMPILER_PLUGIN=gcc
486+ make ${MAKEOPTS} -C ports/stm32/mboot BOARD=PYBD_SF6 MICROPY_USE_COMPILER_PLUGIN=gcc
487+ make ${MAKEOPTS} -C ports/stm32/mboot BOARD=STM32F769DISC CFLAGS_EXTRA=' -DMBOOT_ADDRESS_SPACE_64BIT=1 -DMBOOT_SDCARD_ADDR=0x100000000ULL -DMBOOT_SDCARD_BYTE_SIZE=0x400000000ULL -DMBOOT_FSLOAD=1 -DMBOOT_VFS_FAT=1' MICROPY_USE_COMPILER_PLUGIN=gcc
475488}
476489
477490function ci_stm32_nucleo_build {
@@ -480,15 +493,15 @@ function ci_stm32_nucleo_build {
480493 git submodule update --init lib/mynewt-nimble
481494
482495 # Test building various MCU families, some with additional options.
483- make ${MAKEOPTS} -C ports/stm32 BOARD=NUCLEO_F091RC
484- make ${MAKEOPTS} -C ports/stm32 BOARD=STM32H573I_DK
485- make ${MAKEOPTS} -C ports/stm32 BOARD=NUCLEO_H743ZI COPT=-O2 CFLAGS_EXTRA=' -DMICROPY_PY_THREAD=1'
486- make ${MAKEOPTS} -C ports/stm32 BOARD=NUCLEO_L073RZ
487- make ${MAKEOPTS} -C ports/stm32 BOARD=NUCLEO_L476RG DEBUG=1
496+ make ${MAKEOPTS} -C ports/stm32 BOARD=NUCLEO_F091RC MICROPY_USE_COMPILER_PLUGIN=gcc
497+ make ${MAKEOPTS} -C ports/stm32 BOARD=STM32H573I_DK MICROPY_USE_COMPILER_PLUGIN=gcc
498+ make ${MAKEOPTS} -C ports/stm32 BOARD=NUCLEO_H743ZI COPT=-O2 CFLAGS_EXTRA=' -DMICROPY_PY_THREAD=1' MICROPY_USE_COMPILER_PLUGIN=gcc
499+ make ${MAKEOPTS} -C ports/stm32 BOARD=NUCLEO_L073RZ MICROPY_USE_COMPILER_PLUGIN=gcc
500+ make ${MAKEOPTS} -C ports/stm32 BOARD=NUCLEO_L476RG DEBUG=1 MICROPY_USE_COMPILER_PLUGIN=gcc
488501
489502 # Test building a board with mboot packing enabled (encryption, signing, compression).
490- make ${MAKEOPTS} -C ports/stm32 BOARD=NUCLEO_WB55 USE_MBOOT=1 MBOOT_ENABLE_PACKING=1
491- make ${MAKEOPTS} -C ports/stm32/mboot BOARD=NUCLEO_WB55 USE_MBOOT=1 MBOOT_ENABLE_PACKING=1
503+ make ${MAKEOPTS} -C ports/stm32 BOARD=NUCLEO_WB55 USE_MBOOT=1 MBOOT_ENABLE_PACKING=1 MICROPY_USE_COMPILER_PLUGIN=gcc
504+ make ${MAKEOPTS} -C ports/stm32/mboot BOARD=NUCLEO_WB55 USE_MBOOT=1 MBOOT_ENABLE_PACKING=1 MICROPY_USE_COMPILER_PLUGIN=gcc
492505 # Test mboot_pack_dfu.py created a valid file, and that its unpack-dfu command works.
493506 BOARD_WB55=ports/stm32/boards/NUCLEO_WB55
494507 BUILD_WB55=ports/stm32/build-NUCLEO_WB55
@@ -503,7 +516,7 @@ function ci_stm32_nucleo_build {
503516function ci_stm32_misc_build {
504517 make ${MAKEOPTS} -C mpy-cross
505518 make ${MAKEOPTS} -C ports/stm32 BOARD=ARDUINO_GIGA submodules
506- make ${MAKEOPTS} -C ports/stm32 BOARD=ARDUINO_GIGA
519+ make ${MAKEOPTS} -C ports/stm32 BOARD=ARDUINO_GIGA MICROPY_USE_COMPILER_PLUGIN=gcc
507520}
508521
509522# #######################################################################################
@@ -638,12 +651,15 @@ function ci_unix_coverage_setup {
638651 pip3 install setuptools
639652 pip3 install pyelftools
640653 pip3 install ar
654+ ci_gcc_plugin_setup
641655 gcc --version
642656 python3 --version
643657}
644658
645659function ci_unix_coverage_build {
646- ci_unix_build_helper VARIANT=coverage
660+ # (Ensure mpy-cross is built with the plugin too)
661+ make ${MAKEOPTS} -C mpy-cross MICROPY_USE_COMPILER_PLUGIN=gcc
662+ ci_unix_build_helper VARIANT=coverage MICROPY_USE_COMPILER_PLUGIN=gcc
647663 ci_unix_build_ffi_lib_helper gcc
648664}
649665
@@ -684,6 +700,7 @@ function ci_unix_32bit_setup {
684700 sudo dpkg --add-architecture i386
685701 sudo apt-get update
686702 sudo apt-get install gcc-multilib g++-multilib libffi-dev:i386 python2.7
703+ ci_gcc_plugin_setup
687704 sudo pip3 install setuptools
688705 sudo pip3 install pyelftools
689706 sudo pip3 install ar
@@ -693,7 +710,7 @@ function ci_unix_32bit_setup {
693710}
694711
695712function ci_unix_coverage_32bit_build {
696- ci_unix_build_helper VARIANT=coverage MICROPY_FORCE_32BIT=1
713+ ci_unix_build_helper VARIANT=coverage MICROPY_FORCE_32BIT=1 MICROPY_USE_COMPILER_PLUGIN=gcc
697714 ci_unix_build_ffi_lib_helper gcc -m32
698715}
699716
@@ -707,7 +724,7 @@ function ci_unix_coverage_32bit_run_native_mpy_tests {
707724
708725function ci_unix_nanbox_build {
709726 # Use Python 2 to check that it can run the build scripts
710- ci_unix_build_helper PYTHON=python2.7 VARIANT=nanbox CFLAGS_EXTRA=" -DMICROPY_PY_MATH_CONSTANTS=1"
727+ ci_unix_build_helper PYTHON=python2.7 VARIANT=nanbox CFLAGS_EXTRA=" -DMICROPY_PY_MATH_CONSTANTS=1" MICROPY_USE_COMPILER_PLUGIN=gcc
711728 ci_unix_build_ffi_lib_helper gcc -m32
712729}
713730
@@ -716,15 +733,19 @@ function ci_unix_nanbox_run_tests {
716733}
717734
718735function ci_unix_longlong_build {
719- ci_unix_build_helper VARIANT=longlong " ${CI_UNIX_OPTS_SANITIZE_UNDEFINED[@]} "
736+ ci_unix_build_helper VARIANT=longlong " ${CI_UNIX_OPTS_SANITIZE_UNDEFINED[@]} " MICROPY_USE_COMPILER_PLUGIN=gcc
720737}
721738
722739function ci_unix_longlong_run_tests {
723740 ci_unix_run_tests_full_helper longlong
724741}
725742
743+ function ci_unix_float_setup {
744+ ci_gcc_plugin_setup
745+ }
746+
726747function ci_unix_float_build {
727- ci_unix_build_helper VARIANT=standard CFLAGS_EXTRA=" -DMICROPY_FLOAT_IMPL=MICROPY_FLOAT_IMPL_FLOAT"
748+ ci_unix_build_helper VARIANT=standard CFLAGS_EXTRA=" -DMICROPY_FLOAT_IMPL=MICROPY_FLOAT_IMPL_FLOAT" MICROPY_USE_COMPILER_PLUGIN=gcc
728749 ci_unix_build_ffi_lib_helper gcc
729750}
730751
@@ -822,15 +843,16 @@ function ci_unix_macos_run_tests {
822843
823844function ci_unix_qemu_mips_setup {
824845 sudo apt-get update
825- sudo apt-get install gcc-mips-linux-gnu g++-mips-linux-gnu libc6-mips-cross
846+ sudo apt-get install gcc-10- mips-linux-gnu g++-mips-linux-gnu libc6-mips-cross
826847 sudo apt-get install qemu-user
848+ ci_gcc_plugin_setup mips-linux-gnu
827849 qemu-mips --version
828850 sudo mkdir /etc/qemu-binfmt
829851 sudo ln -s /usr/mips-linux-gnu/ /etc/qemu-binfmt/mips
830852}
831853
832854function ci_unix_qemu_mips_build {
833- ci_unix_build_helper " ${CI_UNIX_OPTS_QEMU_MIPS[@]} "
855+ ci_unix_build_helper " ${CI_UNIX_OPTS_QEMU_MIPS[@]} " MICROPY_USE_COMPILER_PLUGIN=gcc
834856 ci_unix_build_ffi_lib_helper mips-linux-gnu-gcc
835857}
836858
@@ -847,13 +869,14 @@ function ci_unix_qemu_arm_setup {
847869 sudo apt-get update
848870 sudo apt-get install gcc-arm-linux-gnueabi g++-arm-linux-gnueabi
849871 sudo apt-get install qemu-user
872+ ci_gcc_plugin_setup arm-linux-gnueabi
850873 qemu-arm --version
851874 sudo mkdir /etc/qemu-binfmt
852875 sudo ln -s /usr/arm-linux-gnueabi/ /etc/qemu-binfmt/arm
853876}
854877
855878function ci_unix_qemu_arm_build {
856- ci_unix_build_helper " ${CI_UNIX_OPTS_QEMU_ARM[@]} "
879+ ci_unix_build_helper " ${CI_UNIX_OPTS_QEMU_ARM[@]} " MICROPY_USE_COMPILER_PLUGIN=gcc
857880 ci_unix_build_ffi_lib_helper arm-linux-gnueabi-gcc
858881}
859882
@@ -871,13 +894,14 @@ function ci_unix_qemu_riscv64_setup {
871894 sudo apt-get update
872895 sudo apt-get install gcc-riscv64-linux-gnu g++-riscv64-linux-gnu
873896 sudo apt-get install qemu-user
897+ ci_gcc_plugin_setup riscv64-linux-gnu
874898 qemu-riscv64 --version
875899 sudo mkdir /etc/qemu-binfmt
876900 sudo ln -s /usr/riscv64-linux-gnu/ /etc/qemu-binfmt/riscv64
877901}
878902
879903function ci_unix_qemu_riscv64_build {
880- ci_unix_build_helper " ${CI_UNIX_OPTS_QEMU_RISCV64[@]} "
904+ ci_unix_build_helper " ${CI_UNIX_OPTS_QEMU_RISCV64[@]} " MICROPY_USE_COMPILER_PLUGIN=gcc
881905 ci_unix_build_ffi_lib_helper riscv64-linux-gnu-gcc
882906}
883907
@@ -901,7 +925,7 @@ function ci_windows_setup {
901925function ci_windows_build {
902926 make ${MAKEOPTS} -C mpy-cross
903927 make ${MAKEOPTS} -C ports/windows submodules
904- make ${MAKEOPTS} -C ports/windows CROSS_COMPILE=i686-w64-mingw32-
928+ make ${MAKEOPTS} -C ports/windows CROSS_COMPILE=${1- i686} -w64-mingw32- MICROPY_USE_COMPILER_PLUGIN=gcc
905929}
906930
907931# #######################################################################################
0 commit comments