0.27.0
This release adds support for Go 1.20 and LLVM 15. In addition, it drops a dependency on the AVR and Xtensa toolchains, so you don't need to install avr-gcc or xtensa-esp32-elf-ld making TinyGo much easier to install. Instead, it uses the built-in LLVM linker instead.
Newly supported targets are windows/arm64 (or "Windows on ARM64"), Waveshare RP2040 Zero, Arduino Leonardo, Adafruit KB2040, Adafruit Feather M0 Express, Makerfabs ESP32C3SPI35, and Espressif ESP32-C3-DevKit-RUST-1. As usual, there are also a ton of smaller fixes and improvements.
Here is a detailed changelog for this release:
- general
- all: update musl
- all: remove "acm:"` prefix for USB vid/pid pair
- all: add support for LLVM 15
- all: use DWARF version 4
- all: add initial (incomplete) support for Go 1.20
- all: add
-gc=customoption main: print ldflags including ThinLTO flags with -xmain: fix error message when a serial port can't be accessedmain: add-timeoutflag to allow setting how long TinyGo will try looking for a MSD volume for flashingtest: print PASS on pass when running standalone test binariestest: fix printing of benchmark outputtest: print package name when compilation failed (not just when the test failed)
- compiler
- refactor to support LLVM 15
builder: print compiler commands while building a librarycompiler: fix stack overflow when creating recursive pointer types (fix for LLVM 15+ only)compiler: allow map keys and values of ≥256 bytescgo: add support forC.floatandC.doublecgo: support anonymous enums included in multiple Go filescgo: add support for bitwise operatorsinterp: add support for constant icmp instructionstransform: fix memory corruption issues
- standard library
machine/usb: remove allocs in USB ISRmachine/usb: addPort()and deprecateNew()to have the API better match the singleton that is actually being returnedmachine/usb: change HID usage-maximum to 0xFFmachine/usb: add USB HID joystick supportmachine/usb: change to not send before endpoint initializationnet: implementPipeos: add stub foros.Chtimesreflect: stub outType.FieldByIndexreflect: addValue.IsZeromethodreflect: fix bug in.Fieldmethod when the field fits in a pointer but the parent doesn'truntime: switch somepanic()calls in the gc toruntimePanic()for consistencyruntime: add xorshift-based fastrand64runtime: fix alignment for arm64, arm, xtensa, riscvruntime: implement precise GCruntime/debug: stubPrintStacksync: implement simple pooling insync.Poolsyscall: stubbedSetuid, Exec and friendssyscall: add more stubs as needed for Go 1.20 supporttesting: implementt.Setenvunsafe: add support for Go 1.20 slice/string functions
- targets
all: do not set stack size per boardall: update picolibc to v1.7.9atsame5x: fix CAN extendedID handlingatsame5x: reduce heap allocationavr: drop GNU toolchain dependencyavr: fix .data initialization for binaries over 64kBavr: support ThinLTObaremetal: implements callocdarwin: fixsyscall.Openon darwin/arm64darwin: fix error withtinygo lldbesp: use LLVM Xtensa linker instead of Espressif toolchainesp: use ThinLTO for Xtensaesp32c3: add SPI supportlinux: include muslgetpagesizefunction in releasenrf51: add ADC implementationnrf52840: add PDM supportriscv: add "target-abi" metadata flagrp2040: remove mem allocation in GPIO ISRrp2040: avoid allocating clock on heaprp2040: add basic GPIO support for PIOrp2040: fix USB interrupt issuerp2040: fix RP2040-E5 USB erratastm32: always set ADC pins to pullups floatingstm32f1,stm32f4: fix ADC by clearing the correct bit for rank after each readstm32wl: Fix incomplete RNG initialisationstm32wlx: change order for init so clock speeds are set before peripheral startwasi: makes wasmtime "run" explicitwasm: fix GC scanning of allocaswasm: allow custom malloc implementationwasm: remove-wasm-abi=flag (use-targetinstead)wasm: fix scanning of the stackwasm: fix panic when allocating 0 bytes using mallocwasm: always run wasm-opt even with-scheduler=nonewasm: avoid miscompile with ThinLTOwasm: allow the emulator to expand{tmpDir}wasm: support ThinLTOwindows: update mingw-w64 version to avoid linker warningwindows: add ARM64 support
- boards
- Add Waveshare RP2040 Zero
- Add Arduino Leonardo support
- Add Adafruit KB2040
- Add Adafruit Feather M0 Express
- Add Makerfabs ESP32C3SPI35 TFT Touchscreen board
- Add Espressif ESP32-C3-DevKit-RUST-1 board
lgt92: fix OpenOCD configurationxiao-rp2040: fix D9 and D10 constantsxiao-rp2040: add pin definitions