0.33.0 --- * **general** - use latest version of x/tools - add chromeos 9p support for flashing - sort compiler error messages by source position in a package - don't include prebuilt libraries in the release to simplify packaging and reduce the release tarball size - show runtime panic addresses for `tinygo run` - support Go 1.23 (including all new language features) - `test`: support GOOS/GOARCH pairs in the `-target` flag - `test`: remove message after test binary built * **compiler** - remove unused registers for x86_64 linux syscalls - remove old atomics workaround for AVR (not necessary in modern LLVM versions) - support `golang.org/x/sys/unix` syscalls - `builder`: remove workaround for generics race condition - `builder`: add package ID to compiler and optimization error messages - `builder`: show better error messages for some common linker errors - `cgo`: support preprocessor macros passed on the command line - `cgo`: use absolute paths for error messages - `cgo`: add support for printf - `loader`: handle `go list` errors inside TinyGo (for better error messages) - `transform`: fix incorrect alignment of heap-to-stack transform - `transform`: use thinlto-pre-link passes (instead of the full pipeline) to speed up compilation speed slightly * **standard library** - `crypto/tls`: add CipherSuiteName and some extra fields to ConnectionSTate - `internal/abi`: implement initial version of this package - `machine`: use new `internal/binary` package - `machine`: rewrite Reply() to fix sending long replies in I2C Target Mode - `machine/usb/descriptor`: Reset joystick physical - `machine/usb/descriptor`: Drop second joystick hat - `machine/usb/descriptor`: Add more HID... functions - `machine/usb/descriptor`: Fix encoding of values - `machine/usb/hid/joystick`: Allow more hat switches - `os`: add `Chown`, `Truncate` - `os/user`: use stdlib version of this package - `reflect`: return correct name for the `unsafe.Pointer` type - `reflect`: implement `Type.Overflow*` functions - `runtime`: implement dummy `getAuxv` to satisfy golang.org/x/sys/ - `runtime`: don't zero out new allocations for `-gc=leaking` when they are already zeroed - `runtime`: simplify slice growing/appending code - `runtime`: print a message when a fatal signal like SIGSEGV happens - `runtime/debug`: add `GoVersion` to `debug.BuildInfo` - `sync`: add `Map.Clear()` - `sync/atomic`: add And* and Or* compiler intrinsics needed for Go 1.23 - `syscall`: add `Fork` and `Execve` - `syscall`: add all MacOS errno values - `testing`: stub out `T.Deadline` - `unique`: implement custom (naive) version of the unique package * **targets** - `arm`: support `GOARM=*,softfloat` (softfloat support for ARM v5, v6, and v7) - `mips`: add linux/mipsle (and experimental linux/mips) support - `mips`: add `GOMIPS=softfloat` support - `wasip2`: add WASI preview 2 support - `wasm/js`: add `node:` prefix in `require()` call of wasm_exec.js - `wasm-unknown`: make sure the `os` package can be imported - `wasm-unknown`: remove import-memory flag 0.32.0 --- * **general** - fix wasi-libc include headers on Nix - apply OpenOCD commands after target configuration - fix a minor race condition when determining the build tags - support UF2 drives with a space in their name on Linux - add LLVM 18 support - drop support for Go 1.18 to be able to stay up to date * **compiler** - move `-panic=trap` support to the compiler/runtime - fix symbol table index for WebAssembly archives - fix ed25519 build errors by adjusting the alias names - add aliases to generic AES functions - fix race condition by temporarily applying a proposed patch - `builder`: keep un-wasm-opt'd .wasm if -work was passed - `builder`: make sure wasm-opt command line is printed if asked - `cgo`: implement shift operations in preprocessor macros - `interp`: checking for methodset existence * **standard library** - `machine`: add `__tinygo_spi_tx` function to simulator - `machine`: fix simulator I2C support - `machine`: add GetRNG support to simulator - `machine`: add `TxFifoFreeLevel` for CAN - `os`: add `Link` - `os`: add `FindProcess` for posix - `os`: add `Process.Release` for unix - `os`: add `SetReadDeadline` stub - `os`, `os/signal`: add signal stubs - `os/user`: add stubs for `Lookup{,Group}` and `Group` - `reflect`: use int in `StringHeader` and `SliceHeader` on non-AVR platforms - `reflect`: fix `NumMethods` for Interface type - `runtime`: skip negative sleep durations in sleepTicks * **targets** - `esp32`: add I2C support - `rp2040`: move UART0 and UART1 to common file - `rp2040`: make all RP2040 boards available for simulation - `rp2040`: fix timeUnit type - `stm32`: add i2c `Frequency` and `SetBaudRate` function for chips that were missing implementation - `wasm-unknown`: add math and memory builtins that LLVM needs - `wasip1`: replace existing `-target=wasi` support with wasip1 as supported in Go 1.21+ * **boards** - `adafruit-esp32-feather-v2`: add the Adafruit ESP32 Feather V2 - `badger2040-w`: add support for the Badger2040 W - `feather-nrf52840-sense`: fix lack of LXFO - `m5paper`: add support for the M5 Paper - `mksnanov3`: limit programming speed to 1800 kHz - `nucleol476rg`: add stm32 nucleol476rg support - `pico-w`: add the Pico W (which is near-idential to the pico target) - `thingplus-rp2040`, `waveshare-rp2040-zero`: add WS2812 definition - `pca10059-s140v7`: add this variant to the PCA10059 board 0.31.2 --- * **general** * update the `net` submodule to updated version with `Buffers` implementation * **compiler** * `syscall`: add wasm_unknown tag to some additional files so it can compile more code * **standard library** * `runtime`: add Frame.Entry field 0.31.1 --- * **general** * fix Binaryen build in make task * update final build stage of Docker `dev` image to go1.22 * only use GHA cache for building Docker `dev` image * update the `net` submodule to latest version * **compiler** * `interp`: make getelementptr offsets signed * `interp`: return a proper error message when indexing out of range 0.31.0 --- * **general** * remove LLVM 14 support * add LLVM 17 support, and use it by default * add Nix flake support * update bundled Binaryen to version 116 * add `ports` subcommand that lists available serial ports for `-port` and `-monitor` * support wasmtime version 14 * add `-serial=rtt` for serial output over SWD * add Go 1.22 support and use it by default * change minimum Node.js version from 16 to 18 * **compiler** * use the new LLVM pass manager * allow systems with more stack space to allocate larger values on the stack * `build`: fix a crash due to sharing GlobalValues between build instances * `cgo`: add `C._Bool` type * `cgo`: fix calling CGo callback inside generic function * `compileopts`: set `purego` build tag by default so that more packages can be built * `compileopts`: force-enable CGo to avoid build issues * `compiler`: fix crash on type assert on interfaces with no methods * `interp`: print LLVM instruction in traceback * `interp`: support runtime times by running them at runtime * `loader`: enforce Go language version in the type checker (this may break existing programs with an incorrect Go version in go.mod) * `transform`: fix bug in StringToBytes optimization pass * **standard library** * `crypto/tls`: stub out a lot of functions * `internal/task`, `machine`: make TinyGo code usable with "big Go" CGo * `machine`: implement `I2C.SetBaudRate` consistently across chips * `machine`: implement `SPI.Configure` consistently across chips * `machine`: add `DeviceID` for nrf, rp2040, sam, stm32 * `machine`: use smaller UART buffer size on atmega chips * `machine/usb`: allow setting a serial number using a linker flag * `math`: support more math functions on baremetal (picolibc) systems * `net`: replace entire net package with a new one based on the netdev driver * `os/user`: add bare-bones implementation of this package * `reflect`: stub `CallSlice` and `FuncOf` * `reflect`: add `TypeFor[T]` * `reflect`: update `IsZero` to Go 1.22 semantics * `reflect`: move indirect values into interface when setting interfaces * `runtime`: stub `Breakpoint` * `sync`: implement trylock * **targets** * `atmega`: use UART double speed mode for fewer errors and higher throughput * `atmega328pb`: refactor to enable extra uart * `avr`: don't compile large parts of picolibc (math, stdio) for LLVM 17 support * `esp32`: switch over to the official SVD file * `esp32c3`: implement USB_SERIAL for USBCDC communication * `esp32c3`: implement I2C * `esp32c3`: implement RNG * `esp32c3`: add more ROM functions and update linker script for the in-progress wifi support * `esp32c3`: update to newer SVD files * `rp2040`: add support for UART hardware flow control * `rp2040`: add definition for `machine.PinToggle` * `rp2040`: set XOSC startup delay multiplier * `samd21`: add support for UART hardware flow control * `samd51`: add support for UART hardware flow control * `wasm`: increase default stack size to 64k for wasi/wasm targets * `wasm`: bump wasi-libc version to SDK 20 * `wasm`: remove line of dead code in wasm_exec.js * **new targets/boards** * `qtpy-esp32c3`: add Adafruit QT Py ESP32-C3 board * `mksnanov3`: add support for the MKS Robin Nano V3.x * `nrf52840-generic`: add generic nrf52840 chip support * `thumby`: add support for Thumby * `wasm`: add new `wasm-unknown` target that doesn't depend on WASI or a browser * **boards** * `arduino-mkrwifi1010`, `arduino-nano33`, `nano-rp2040`, `matrixportal-m4`, `metro-m4-airlift`, `pybadge`, `pyportal`: add `ninafw` build tag and some constants for BLE support * `gopher-badge`: fix typo in USB product name * `nano-rp2040`: add UART1 and correct mappings for NINA via UART * `pico`: bump default stack size from 2kB to 8kB * `wioterminal`: expose UART4 0.30.0 --- * **general** - add LLVM 16 support, use it by default * **compiler** - `build`: work around a race condition by building Go SSA serially - `compiler`: fix a crash by not using the LLVM global context types - `interp`: don't copy unknown values in `runtime.sliceCopy` to fix miscompile - `interp`: fix crash in error report by not returning raw LLVM values * **standard library** - `machine/usb/adc/midi`: various improvements and API changes - `reflect`: add support for `[...]T` → `[]T` in reflect * **targets** - `atsamd21`, `atsamd51`: add support for USB INTERRUPT OUT - `rp2040`: always use the USB device enumeration fix, even in chips that supposedly have the HW fix - `wasm`: increase default stack size to 32k for wasi/wasm * **boards** - `gobadge`: add GoBadge target as alias for PyBadge :) - `gemma-m0`: add support for the Adafruit Gemma M0 0.29.0 --- * **general** - Go 1.21 support - use https for renesas submodule #3856 - ci: rename release-double-zipped to something more useful - ci: update Node.js from version 14 to version 16 - ci: switch GH actions builds to use Go 1.21 final release - docker: update clang to version 15 - docker: use Go 1.21 for Docker dev container build - `main`: add target JSON file in `tinygo info` output - `main`: improve detection of filesystems - `main`: use `go env` instead of doing all detection manually - make: add make task to generate Renesas device wrappers - make: add task to check NodeJS version before running tests - add submodule for Renesas SVD file mirror repo - update to go-serial package v1.6.0 - `testing`: add Testing function - `tools/gen-device-svd`: small changes needed for Renesas MCUs * **compiler** - `builder`: update message for max supported Go version - `compiler,reflect`: NumMethods reports exported methods only - `compiler`: add compiler-rt and wasm symbols to table - `compiler`: add compiler-rt to wasm.json - `compiler`: add min and max builtin support - `compiler`: implement clear builtin for maps - `compiler`: implement clear builtin for slices - `compiler`: improve panic message when a runtime call is unavailable - `compiler`: update .ll test output - `loader`: merge go.env file which is now required starting in Go 1.21 to correctly get required packages * **standard library** - `os`: define ErrNoDeadline - `reflect`: Add FieldByNameFunc - `reflect`: add SetZero - `reflect`: fix iterating over maps with interface{} keys - `reflect`: implement Value.Grow - `reflect`: remove unnecessary heap allocations - `reflect`: use .key() instead of a type assert - `sync`: add implementation from upstream Go for OnceFunc, OnceValue, and OnceValues * **targets** - `machine`: UART refactor (#3832) - `machine/avr`: pin change interrupt - `machine/macropad_rp2040`: add machine.BUTTON - `machine/nrf`: add I2C timeout - `machine/nrf`: wait for stop condition after reading from the I2C bus - `machine/nRF52`: set SPI TX/RX lengths even data is empty. Fixes #3868 (#3877) - `machine/rp2040`: add missing suffix to CMD_READ_STATUS - `machine/rp2040`: add NoPin support - `machine/rp2040`: move flash related functions into separate file from C imports for correct - LSP. Fixes #3852 - `machine/rp2040`: wait for 1000 us after flash reset to avoid issues with busy USB bus - `machine/samd51,rp2040,nrf528xx,stm32`: implement watchdog - `machine/samd51`: fix i2cTimeout was decreasing due to cache activation - `machine/usb`: Add support for HID Keyboard LEDs - `machine/usb`: allow USB Endpoint settings to be changed externally - `machine/usb`: refactor endpoint configuration - `machine/usb`: remove usbDescriptorConfig - `machine/usb/hid,joystick`: fix hidreport (3) (#3802) - `machine/usb/hid`: add RxHandler interface - `machine/usb/hid`: rename Handler() to TxHandler() - `wasi`: allow zero inodes when reading directories - `wasm`: add support for GOOS=wasip1 - `wasm`: fix functions exported through //export - `wasm`: remove i64 workaround, use BigInt instead - `example`: adjust time offset - `example`: simplify pininterrupt * **boards** - `targets`: add AKIZUKI DENSHI AE-RP2040 - `targets`: adding new uf2 target for PCA10056 (#3765) 0.28.0 --- * **general** - fix parallelism in the compiler on Windows by building LLVM with thread support - support qemu-user debugging - make target JSON msd-volume-name an array - print source location when a panic happens in -monitor - `test`: don't print `ok` for a successful compile-only * **compiler** - `builder`: remove non-ThinLTO build mode - `builder`: fail earlier if Go is not available - `builder`: improve `-size=full` in a number of ways - `builder`: implement Nordic DFU file writer in Go - `cgo`: allow `LDFLAGS: --export=...` - `compiler`: support recursive slice types - `compiler`: zero struct padding during map operations - `compiler`: add llvm.ident metadata - `compiler`: remove `unsafe.Pointer(uintptr(v) + idx)` optimization (use `unsafe.Add` instead) - `compiler`: add debug info to `//go:embed` data structures for better `-size` output - `compiler`: add debug info to string constants - `compiler`: fix a minor race condition - `compiler`: emit correct alignment in debug info for global variables - `compiler`: correctly generate reflect data for local named types - `compiler`: add alloc attributes to `runtime.alloc`, reducing flash usage slightly - `compiler`: for interface maps, use the original named type if available - `compiler`: implement most math/bits functions as LLVM intrinsics - `compiler`: ensure all defers have been seen before creating rundefers * **standard library** - `internal/task`: disallow blocking inside an interrupt - `machine`: add `CPUReset` - `machine/usb/hid`: add MediaKey support - `machine/usb/hid/joystick`: move joystick under HID - `machine/usb/hid/joystick`: allow joystick settings override - `machine/usb/hid/joystick`: handle case where we cannot find the correct HID descriptor - `machine/usb/hid/mouse`: add support for mouse back and forward - `machine/usb`: add ability to override default VID, PID, manufacturer name, and product name - `net`: added missing `TCPAddr` and `UDPAddr` implementations - `os`: add IsTimeout function - `os`: fix resource leak in `(*File).Close` - `os`: add `(*File).Sync` - `os`: implement `(*File).ReadDir` for wasi - `os`: implement `(*File).WriteAt` - `reflect`: make sure null bytes are supported in tags - `reflect`: refactor this package to enable many new features - `reflect`: add map type methods: `Elem` and `Key` - `reflect`: add map methods: `MapIndex`, `MapRange`/`MapIter`, `SetMapIndex`, `MakeMap`, `MapKeys` - `reflect`: add slice methods: `Append`, `MakeSlice`, `Slice`, `Slice3`, `Copy`, `Bytes`, `SetLen` - `reflect`: add misc methods: `Zero`, `Addr`, `UnsafeAddr`, `OverflowFloat`, `OverflowInt`, `OverflowUint`, `SetBytes`, `Convert`, `CanInt`, `CanFloat`, `CanComplex`, `Comparable` - `reflect`: add type methods: `String`, `PkgPath`, `FieldByName`, `FieldByIndex`, `NumMethod` - `reflect`: add stubs for `Type.Method`, `CanConvert`, `ArrayOf`, `StructOf`, `MapOf` - `reflect`: add stubs for channel select routines/types - `reflect`: allow nil rawType to call Kind() - `reflect`: ensure all ValueError panics have Kind fields - `reflect`: add support for named types - `reflect`: improve `Value.String()` - `reflect`: set `Index` and `PkgPath` field in `Type.Field` - `reflect`: `Type.AssignableTo`: you can assign anything to `interface{}` - `reflect`: add type check to `Value.Field` - `reflect`: let `TypeOf(nil)` return nil - `reflect`: move `StructField.Anonymous` field to match upstream location - `reflect`: add `UnsafePointer` for Func types - `reflect`: `MapIter.Next` needs to allocate new keys/values every time - `reflect`: fix `IsNil` for interfaces - `reflect`: fix `Type.Name` to return an empty string for non-named types - `reflect`: add `VisibleFields` - `reflect`: properly handle embedded structs - `reflect`: make sure `PointerTo` works for named types - `reflect`: `Set`: convert non-interface to interface - `reflect`: `Set`: fix direction of assignment check - `reflect`: support channel directions - `reflect`: print struct tags in Type.String() - `reflect`: properly handle read-only values - `runtime`: allow custom-gc SetFinalizer and clarify KeepAlive - `runtime`: implement KeepAlive using inline assembly - `runtime`: check for heap allocations inside interrupts - `runtime`: properly turn pointer into empty interface when hashing - `runtime`: improve map size hint usage - `runtime`: zero map key/value on deletion to so GC doesn't see them - `runtime`: print the address where a panic happened - `runtime/debug`: stub `SetGCPercent`, `BuildInfo.Settings` - `runtime/metrics`: add this package as a stub - `syscall`: `Stat_t` timespec fields are Atimespec on darwin - `syscall`: add `Timespec.Unix()` for wasi - `syscall`: add fsync using libc - `testing`: support -test.count - `testing`: make test output unbuffered when verbose - `testing`: add -test.skip - `testing`: move runtime.GC() call to runN to match upstream - `testing`: add -test.shuffle to order randomize test and benchmark order * **targets** - `arm64`: fix register save/restore to include vector registers - `attiny1616`: add support for this chip - `cortexm`: refactor EnableInterrupts and DisableInterrupts to avoid `arm.AsmFull` - `cortexm`: enable functions in RAM for go & cgo - `cortexm`: convert SystemStack from `AsmFull` to C inline assembly - `cortexm`: fix crash due to wrong stack size offset - `nrf`: samd21, stm32: add flash API - `nrf`: fix memory issue in ADC read - `nrf`: new peripheral type for nrf528xx chips - `nrf`: implement target mode - `nrf`: improve ADC and add oversampling, longer sample time, and reference voltage - `rp2040`: change calling order for device enumeration fix to do first - `rp2040`: rtc delayed interrupt - `rp2040`: provide better errors for invalid pins on I2C and SPI - `rp2040`: change uart to allow for a single pin - `rp2040`: implement Flash interface - `rp2040`: remove SPI `DataBits` property - `rp2040`: unify all linker scripts using LDFLAGS - `rp2040`: remove SPI deadline for improved performance - `rp2040`: use 4MHz as default frequency for SPI - `rp2040`: implement target mode - `rp2040`: use DMA for send-only SPI transfers - `samd21`: rearrange switch case for get pin cfg - `samd21`: fix issue with WS2812 driver by making pin accesses faster - `samd51`: enable CMCC cache for greatly improved performance - `samd51`: remove extra BK0RDY clear - `samd51`: implement Flash interface - `samd51`: use correct SPI frequency - `samd51`: remove extra BK0RDY clear - `samd51`: fix ADC multisampling - `wasi`: allow users to set the `runtime_memhash_tsip` or `runtime_memhash_fnv` build tags - `wasi`: set `WASMTIME_BACKTRACE_DETAILS` when running in wasmtime. - `wasm`: implement the `//go:wasmimport` directive * **boards** - `gameboy-advance`: switch to use register definitions in device/gba - `gameboy-advance`: rename display and make pointer receivers - `gopher-badge`: Added Gopher Badge support - `lorae5`: add needed definition for UART2 - `lorae5`: correct mapping for I2C bus, add pin mapping to enable power - `pinetime`: update the target file (rename from pinetime-devkit0) - `qtpy`: fix bad pin assignment - `wioterminal`: fix pin definition of BCM13 - `xiao`: Pins D4 & D5 are I2C1. Use pins D2 & D3 for I2C0. - `xiao`: add DefaultUART 0.27.0 --- * **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=custom` option - `main`: print ldflags including ThinLTO flags with -x - `main`: fix error message when a serial port can't be accessed - `main`: add `-timeout` flag to allow setting how long TinyGo will try looking for a MSD volume for flashing - `test`: print PASS on pass when running standalone test binaries - `test`: fix printing of benchmark output - `test`: 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 library - `compiler`: fix stack overflow when creating recursive pointer types (fix for LLVM 15+ only) - `compiler`: allow map keys and values of ≥256 bytes - `cgo`: add support for `C.float` and `C.double` - `cgo`: support anonymous enums included in multiple Go files - `cgo`: add support for bitwise operators - `interp`: add support for constant icmp instructions - `transform`: fix memory corruption issues * **standard library** - `machine/usb`: remove allocs in USB ISR - `machine/usb`: add `Port()` and deprecate `New()` to have the API better match the singleton that is actually being returned - `machine/usb`: change HID usage-maximum to 0xFF - `machine/usb`: add USB HID joystick support - `machine/usb`: change to not send before endpoint initialization - `net`: implement `Pipe` - `os`: add stub for `os.Chtimes` - `reflect`: stub out `Type.FieldByIndex` - `reflect`: add `Value.IsZero` method - `reflect`: fix bug in `.Field` method when the field fits in a pointer but the parent doesn't - `runtime`: switch some `panic()` calls in the gc to `runtimePanic()` for consistency - `runtime`: add xorshift-based fastrand64 - `runtime`: fix alignment for arm64, arm, xtensa, riscv - `runtime`: implement precise GC - `runtime/debug`: stub `PrintStack` - `sync`: implement simple pooling in `sync.Pool` - `syscall`: stubbed `Setuid`, Exec and friends - `syscall`: add more stubs as needed for Go 1.20 support - `testing`: implement `t.Setenv` - `unsafe`: add support for Go 1.20 slice/string functions * **targets** - `all`: do not set stack size per board - `all`: update picolibc to v1.7.9 - `atsame5x`: fix CAN extendedID handling - `atsame5x`: reduce heap allocation - `avr`: drop GNU toolchain dependency - `avr`: fix .data initialization for binaries over 64kB - `avr`: support ThinLTO - `baremetal`: implements calloc - `darwin`: fix `syscall.Open` on darwin/arm64 - `darwin`: fix error with `tinygo lldb` - `esp`: use LLVM Xtensa linker instead of Espressif toolchain - `esp`: use ThinLTO for Xtensa - `esp32c3`: add SPI support - `linux`: include musl `getpagesize` function in release - `nrf51`: add ADC implementation - `nrf52840`: add PDM support - `riscv`: add "target-abi" metadata flag - `rp2040`: remove mem allocation in GPIO ISR - `rp2040`: avoid allocating clock on heap - `rp2040`: add basic GPIO support for PIO - `rp2040`: fix USB interrupt issue - `rp2040`: fix RP2040-E5 USB errata - `stm32`: always set ADC pins to pullups floating - `stm32f1`, `stm32f4`: fix ADC by clearing the correct bit for rank after each read - `stm32wl`: Fix incomplete RNG initialisation - `stm32wlx`: change order for init so clock speeds are set before peripheral start - `wasi`: makes wasmtime "run" explicit - `wasm`: fix GC scanning of allocas - `wasm`: allow custom malloc implementation - `wasm`: remove `-wasm-abi=` flag (use `-target` instead) - `wasm`: fix scanning of the stack - `wasm`: fix panic when allocating 0 bytes using malloc - `wasm`: always run wasm-opt even with `-scheduler=none` - `wasm`: avoid miscompile with ThinLTO - `wasm`: allow the emulator to expand `{tmpDir}` - `wasm`: support ThinLTO - `windows`: update mingw-w64 version to avoid linker warning - `windows`: 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 configuration - `xiao-rp2040`: fix D9 and D10 constants - `xiao-rp2040`: add pin definitions 0.26.0 --- * **general** - remove support for LLVM 13 - remove calls to deprecated ioutil package - move from `os.IsFoo` to `errors.Is(err, ErrFoo)` - fix for builds using an Android host - make interp timeout configurable from command line - ignore ports with VID/PID if there is no candidates - drop support for Go 1.16 and Go 1.17 - update serial package to v1.3.5 for latest bugfixes - remove GOARM from `tinygo info` - add flag for setting the goroutine stack size - add serial port monitoring functionality * **compiler** - `cgo`: implement support for static functions - `cgo`: fix panic when FuncType.Results is nil - `compiler`: add aliases for `edwards25519/field.feMul` and `field.feSquare` - `compiler`: fix incorrect DWARF type in some generic parameters - `compiler`: use LLVM math builtins everywhere - `compiler`: replace some math operation bodies with LLVM intrinsics - `compiler`: replace math aliases with intrinsics - `compiler`: fix `unsafe.Sizeof` for chan and map values - `compileopts`: use tags parser from buildutil - `compileopts`: use backticks for regexp to avoid extra escapes - `compileopts`: fail fast on duplicate values in target field slices - `compileopts`: fix windows/arm target triple - `compileopts`: improve error handling when loading target/*.json - `compileopts`: add support for stlink-dap programmer - `compileopts`: do not complain about `-no-debug` on MacOS - `goenv`: support `GOOS=android` - `interp`: fix reading from external global - `loader`: fix link error for `crypto/internal/boring/sig.StandardCrypto` * **standard library** - rename assembly files to .S extension - `machine`: add PWM peripheral comments to pins - `machine`: improve UARTParity slightly - `machine`: do not export DFU_MAGIC_* constants on nrf52840 - `machine`: rename `PinInputPullUp`/`PinInputPullDown` - `machine`: add `KHz`, `MHz`, `GHz` constants, deprecate `TWI_FREQ_*` constants - `machine`: remove level triggered pin interrupts - `machine`: do not expose `RESET_MAGIC_VALUE` - `machine`: use `NoPin` constant where appropriate (instead of `0` for example) - `net`: sync net.go with Go 1.18 stdlib - `os`: add `SyscallError.Timeout` - `os`: add `ErrProcessDone` error - `reflect`: implement `CanInterface` and fix string `Index` - `runtime`: make `MemStats` available to leaking collector - `runtime`: add `MemStats.TotalAlloc` - `runtime`: add `MemStats.Mallocs` and `Frees` - `runtime`: add support for `time.NewTimer` and `time.NewTicker` - `runtime`: implement `resetTimer` - `runtime`: ensure some headroom for the GC to run - `runtime`: make gc and scheduler asserts settable with build tags - `runtime/pprof`: add `WriteHeapProfile` - `runtime/pprof`: `runtime/trace`: stub some additional functions - `sync`: implement `Map.LoadAndDelete` - `syscall`: group WASI consts by purpose - `syscall`: add WASI `{D,R}SYNC`, `NONBLOCK` FD flags - `syscall`: add ENOTCONN on darwin - `testing`: add support for -benchmem * **targets** - remove USB vid/pid pair of bootloader - `esp32c3`: remove unused `UARTStopBits` constants - `nrf`: implement `GetRNG` function - `nrf`: `rp2040`: add `machine.ReadTemperature` - `nrf52`: cleanup s140v6 and s140v7 uf2 targets - `rp2040`: implement semi-random RNG based on ROSC based on pico-sdk - `wasm`: add summary of wasm examples and fix callback bug - `wasm`: do not allow undefined symbols (`--allow-undefined`) - `wasm`: make sure buffers returned by `malloc` are kept until `free` is called - `windows`: save and restore xmm registers when switching goroutines * **boards** - add Pimoroni's Tufty2040 - add XIAO ESP32C3 - add Adafruit QT2040 - add Adafruit QT Py RP2040 - `esp32c3-12f`: `matrixportal-m4`: `p1am-100`: remove duplicate build tags - `hifive1-qemu`: remove this emulated board - `wioterminal`: add UART3 for RTL8720DN - `xiao-ble`: fix usbpid 0.25.0 --- * **command line** - change to ignore PortReset failures * **compiler** - `compiler`: darwin/arm64 is aarch64, not arm - `compiler`: don't clobber X18 and FP registers on darwin/arm64 - `compiler`: fix issue with methods on generic structs - `compiler`: do not try to build generic functions - `compiler`: fix type names for generic named structs - `compiler`: fix multiple defined function issue for generic functions - `compiler`: implement `unsafe.Alignof` and `unsafe.Sizeof` for generic code * **standard library** - `machine`: add DTR and RTS to Serialer interface - `machine`: reorder pin definitions to improve pin list on tinygo.org - `machine/usb`: add support for MIDI - `machine/usb`: adjust buffer alignment (samd21, samd51, nrf52840) - `machine/usb/midi`: add `NoteOn`, `NoteOff`, and `SendCC` methods - `machine/usb/midi`: add definition of MIDI note number - `runtime`: add benchmarks for memhash - `runtime`: add support for printing slices via print/println * **targets** - `avr`: fix some apparent mistake in atmega1280/atmega2560 pin constants - `esp32`: provide hardware pin constants - `esp32`: fix WDT reset on the MCH2022 badge - `esp32`: optimize SPI transmit - `esp32c3`: provide hardware pin constants - `esp8266`: provide hardware pin constants like `GPIO2` - `nrf51`: define and use `P0_xx` constants - `nrf52840`, `samd21`, `samd51`: unify bootloader entry process - `nrf52840`, `samd21`, `samd51`: change usbSetup and sendZlp to public - `nrf52840`, `samd21`, `samd51`: refactor handleStandardSetup and initEndpoint - `nrf52840`, `samd21`, `samd51`: improve usb-device initialization - `nrf52840`, `samd21`, `samd51`: move usbcdc to machine/usb/cdc - `rp2040`: add usb serial vendor/product ID - `rp2040`: add support for usb - `rp2040`: change default for serial to usb - `rp2040`: add support for `machine.EnterBootloader` - `rp2040`: turn off pullup/down when input type is not specified - `rp2040`: make picoprobe default openocd interface - `samd51`: add support for `DAC1` - `samd51`: improve TRNG - `wasm`: stub `runtime.buffered`, `runtime.getchar` - `wasi`: make leveldb runtime hash the default * **boards** - add Challenger RP2040 LoRa - add MCH2022 badge - add XIAO RP2040 - `clue`: remove pins `D21`..`D28` - `feather-rp2040`, `macropad-rp2040`: fix qspi-flash settings - `xiao-ble`: add support for flash-1200-bps-reset - `gopherbot`, `gopherbot2`: add these aliases to simplify for newer users 0.24.0 --- * **command line** - remove support for go 1.15 - remove support for LLVM 11 and LLVM 12 - add initial Go 1.19 beta support - `test`: fix package/... syntax * **compiler** - add support for the embed package - `builder`: improve error message for "command not found" - `builder`: add support for ThinLTO on MacOS and Windows - `builder`: free LLVM objects after use, to reduce memory leaking - `builder`: improve `-no-debug` error messages - `cgo`: be more strict: CGo now requires every Go file to import the headers it needs - `compiler`: alignof(func) is 1 pointer, not 2 - `compiler`: add support for type parameters (aka generics) - `compiler`: implement `recover()` built-in function - `compiler`: support atomic, volatile, and LLVM memcpy-like functions in defer - `compiler`: drop support for macos syscalls via inline assembly - `interp`: do not try to interpret past task.Pause() - `interp`: fix some buggy localValue handling - `interp`: do not unroll loops - `transform`: fix MakeGCStackSlots that caused a possible GC bug on WebAssembly * **standard library** - `os`: enable os.Stdin for baremetal target - `reflect`: add `Value.UnsafePointer` method - `runtime`: scan GC globals conservatively on Windows, MacOS, Linux and Nintendo Switch - `runtime`: add per-map hash seeds - `runtime`: handle nil map write panics - `runtime`: add stronger hash functions - `syscall`: implement `Getpagesize` * **targets** - `atmega2560`: support UART1-3 + example for uart - `avr`: use compiler-rt for improved float64 support - `avr`: simplify timer-based time - `avr`: fix race condition in stack write - `darwin`: add support for `GOARCH=arm64` (aka Apple Silicon) - `darwin`: support `-size=short` and `-size=full` flag - `rp2040`: replace sleep 'busy loop' with timer alarm - `rp2040`: align api for `PortMaskSet`, `PortMaskClear` - `rp2040`: fix GPIO interrupts - `samd21`, `samd51`, `nrf52840`: add support for USBHID (keyboard / mouse) - `wasm`: update wasi-libc version - `wasm`: use newer WebAssembly features * **boards** - add Badger 2040 - `matrixportal-m4`: attach USB DP to the correct pin - `teensy40`: add I2C support - `wioterminal`: fix I2C definition 0.23.0 --- * **command line** - add `-work` flag - add Go 1.18 support - add LLVM 14 support - `run`: add support for command-line parameters - `build`: calculate default output path if `-o` is not specified - `build`: add JSON output - `test`: support multiple test binaries with `-c` - `test`: support flags like `-v` on all targets (including emulated firmware) * **compiler** - add support for ThinLTO - use compiler-rt from LLVM - `builder`: prefer GNU build ID over Go build ID for caching - `builder`: add support for cross compiling to Darwin - `builder`: support machine outlining pass in stacksize calculation - `builder`: disable asynchronous unwind tables - `compileopts`: fix emulator configuration on non-amd64 Linux architectures - `compiler`: move allocations > 256 bytes to the heap - `compiler`: fix incorrect `unsafe.Alignof` on some 32-bit architectures - `compiler`: accept alias for slice `cap` builtin - `compiler`: allow slices of empty structs - `compiler`: fix difference in aliases in interface methods - `compiler`: make `RawSyscall` an alias for `Syscall` - `compiler`: remove support for memory references in `AsmFull` - `loader`: only add Clang header path for CGo - `transform`: fix poison value in heap-to-stack transform * **standard library** - `internal/fuzz`: add this package as a shim - `os`: implement readdir for darwin and linux - `os`: add `DirFS`, which is used by many programs to access readdir. - `os`: isWine: be compatible with older versions of wine, too - `os`: implement `RemoveAll` - `os`: Use a `uintptr` for `NewFile` - `os`: add stubs for `exec.ExitError` and `ProcessState.ExitCode` - `os`: export correct values for `DevNull` for each OS - `os`: improve support for `Signal` by fixing various bugs - `os`: implement `File.Fd` method - `os`: implement `UserHomeDir` - `os`: add `exec.ProcessState` stub - `os`: implement `Pipe` for darwin - `os`: define stub `ErrDeadlineExceeded` - `reflect`: add stubs for more missing methods - `reflect`: rename `reflect.Ptr` to `reflect.Pointer` - `reflect`: add `Value.FieldByIndexErr` stub - `runtime`: fix various small GC bugs - `runtime`: use memzero for leaking collector instead of manually zeroing objects - `runtime`: implement `memhash` - `runtime`: implement `fastrand` - `runtime`: add stub for `debug.ReadBuildInfo` - `runtime`: add stub for `NumCPU` - `runtime`: don't inline `runtime.alloc` with `-gc=leaking` - `runtime`: add `Version` - `runtime`: add stubs for `NumCgoCall` and `NumGoroutine` - `runtime`: stub {Lock,Unlock}OSThread on Windows - `runtime`: be able to deal with a very small heap - `syscall`: make `Environ` return a copy of the environment - `syscall`: implement getpagesize and munmap - `syscall`: `wasi`: define `MAP_SHARED` and `PROT_READ` - `syscall`: stub mmap(), munmap(), MAP_SHARED, PROT_READ, SIGBUS, etc. on nonhosted targets - `syscall`: darwin: more complete list of signals - `syscall`: `wasi`: more complete list of signals - `syscall`: stub `WaitStatus` - `syscall/js`: allow copyBytesTo(Go|JS) to use `Uint8ClampedArray` - `testing`: implement `TempDir` - `testing`: nudge type TB closer to upstream; should be a no-op change. - `testing`: on baremetal platforms, use simpler test matcher * **targets** - `atsamd`: fix usbcdc initialization when `-serial=uart` - `atsamd51`: allow higher frequency when using SPI - `esp`: support CGo - `esp32c3`: add support for input pin - `esp32c3`: add support for GPIO interrupts - `esp32c3`: add support to receive UART data - `rp2040`: fix PWM bug at high frequency - `rp2040`: fix some minor I2C bugs - `rp2040`: fix incorrect inline assembly - `rp2040`: fix spurious i2c STOP during write+read transaction - `rp2040`: improve ADC support - `wasi`: remove `--export-dynamic` linker flag - `wasm`: remove heap allocator from wasi-libc * **boards** - `circuitplay-bluefruit`: move pin mappings so board can be compiled for WASM use in Playground - `esp32-c3-12f`: add the ESP32-C3-12f Kit - `m5stamp-c3`: add pin setting of UART - `macropad-rp2040`: add the Adafruit MacroPad RP2040 board - `nano-33-ble`: typo in LPS22HB peripheral definition and documentation (#2579) - `teensy41`: add the Teensy 4.1 board - `teensy40`: add ADC support - `teensy40`: add SPI support - `thingplus-rp2040`: add the SparkFun Thing Plus RP2040 board - `wioterminal`: add DefaultUART - `wioterminal`: verify written data when flashing through OpenOCD - `xiao-ble`: add XIAO BLE nRF52840 support 0.22.0 --- * **command line** - add asyncify to scheduler flag help - support -run for tests - remove FreeBSD target support - add LLVM 12 and LLVM 13 support, use LLVM 13 by default - add support for ARM64 MacOS - improve help - check /run/media as well as /media on Linux for non-debian-based distros - `test`: set cmd.Dir even when running emulators - `info`: add JSON output using the `-json` flag * **compiler** - `builder`: fix off-by-one in size calculation - `builder`: handle concurrent library header rename - `builder`: use flock to avoid double-compiles - `builder`: use build ID as cache key - `builder`: add -fno-stack-protector to musl build - `builder`: update clang header search path to look in /usr/lib - `builder`: explicitly disable unwind tables for ARM - `cgo`: add support for `C.CString` and related functions - `compiler`: fix ranging over maps with particular map types - `compiler`: add correct debug location to init instructions - `compiler`: fix emission of large object layouts - `compiler`: work around AVR atomics bugs - `compiler`: predeclare runtime.trackPointer - `interp`: work around AVR function pointers in globals - `interp`: run goroutine starts and checks at runtime - `interp`: always run atomic and volatile loads/stores at runtime - `interp`: bump timeout to 180 seconds - `interp`: handle type assertions on nil interfaces - `loader`: eliminate goroot cache inconsistency - `loader`: respect $GOROOT when running `go list` - `transform`: allocate the correct amount of bytes in an alloca - `transform`: remove switched func lowering * **standard library** - `crypto/rand`: show error if platform has no rng - `device/*`: add `*_Msk` field for each bit field and avoid duplicates - `device/*`: provide Set/Get for each register field described in the SVD files - `internal/task`: swap stack chain when switching goroutines - `internal/task`: remove `-scheduler=coroutines` - `machine`: add `Device` string constant - `net`: add bare Interface implementation - `net`: add net.Buffers - `os`: stub out support for some features - `os`: obey TMPDIR on unix, TMP on Windows, etc - `os`: implement `ReadAt`, `Mkdir`, `Remove`, `Stat`, `Lstat`, `CreateTemp`, `MkdirAll`, `Chdir`, `Chmod`, `Clearenv`, `Unsetenv`, `Setenv`, `MkdirTemp`, `Rename`, `Seek`, `ExpandEnv`, `Symlink`, `Readlink` - `os`: implement `File.Stat` - `os`: fix `IsNotExist` on nonexistent path - `os`: fix opening files on WASI in read-only mode - `os`: work around lack of `syscall.seek` on 386 and arm - `reflect`: make sure indirect pointers are handled correctly - `runtime`: allow comparing interfaces - `runtime`: use LLVM intrinsic to read the stack pointer - `runtime`: strengthen hashmap hash function for structs and arrays - `runtime`: fix float/complex hashing - `runtime`: fix nil map dereference - `runtime`: add realloc implementation to GCs - `runtime`: handle negative sleep times - `runtime`: correct GC scan bounds - `runtime`: remove extalloc GC - `rumtime`: implement `__sync` libcalls as critical sections for most microcontrollers - `runtime`: add stubs for `Func.FileLine` and `Frame.PC` - `sync`: fix concurrent read-lock on write-locked RWMutex - `sync`: add a package doc - `sync`: add tests - `syscall`: add support for `Mmap` and `Mprotect` - `syscall`: fix array size for mmap slice creation - `syscall`: enable `Getwd` in wasi - `testing`: add a stub for `CoverMode` - `testing`: support -bench option to run benchmarks matching the given pattern. - `testing`: support b.SetBytes(); implement sub-benchmarks. - `testing`: replace spaces with underscores in test/benchmark names, as upstream does - `testing`: implement testing.Cleanup - `testing`: allow filtering subbenchmarks with the `-bench` flag - `testing`: implement `-benchtime` flag - `testing`: print duration - `testing`: allow filtering of subtests using `-run` * **targets** - `all`: change LLVM features to match vanilla Clang - `avr`: use interrupt-based timer which is much more accurate - `nrf`: fix races in I2C - `samd51`: implement TRNG for randomness - `stm32`: pull-up on I2C lines - `stm32`: fix timeout for i2c comms - `stm32f4`, `stm32f103`: initial implementation for ADC - `stm32f4`, `stm32f7`, `stm32l0x2`, `stm32l4`, `stm32l5`, `stm32wl`: TRNG implementation in crypto/rand - `stm32wl`: add I2C support - `windows`: add support for the `-size=` flag - `wasm`: add support for `tinygo test` - `wasi`, `wasm`: raise default stack size to 16 KiB * **boards** - add M5Stack - add lorae5 (stm32wle) support - add Generic Node Sensor Edition - add STM32F469 Discovery - add M5Stamp C3 - add Blues Wireless Swan - `bluepill`: add definitions for ADC pins - `stm32f4disco`: add definitions for ADC pins - `stm32l552ze`: use supported stlink interface - `microbit-v2`: add some pin definitions 0.21.0 --- * **command line** - drop support for LLVM 10 - `build`: drop support for LLVM targets in the -target flag - `build`: fix paths in error messages on Windows - `build`: add -p flag to set parallelism - `lldb`: implement `tinygo lldb` subcommand - `test`: use emulator exit code instead of parsing test output - `test`: pass testing arguments to wasmtime * **compiler** - use -opt flag for optimization level in CFlags (-Os, etc) - `builder`: improve accuracy of the -size=full flag - `builder`: hardcode some more frame sizes for __aeabi_* functions - `builder`: add support for -size= flag for WebAssembly - `cgo`: fix line/column reporting in syntax error messages - `cgo`: support function definitions in CGo headers - `cgo`: implement rudimentary C array decaying - `cgo`: add support for stdio in picolibc and wasi-libc - `cgo`: run CGo parser per file, not per CGo fragment - `compiler`: fix unintentionally exported math functions - `compiler`: properly implement div and rem operations - `compiler`: add support for recursive function types - `compiler`: add support for the `go` keyword on interface methods - `compiler`: add minsize attribute for -Oz - `compiler`: add "target-cpu" and "target-features" attributes - `compiler`: fix indices into strings and arrays - `compiler`: fix string compare functions - `interp`: simplify some code to avoid some errors - `interp`: support recursive globals (like linked lists) in globals - `interp`: support constant globals - `interp`: fix reverting of extractvalue/insertvalue with multiple indices - `transform`: work around renamed return type after merging LLVM modules * **standard library** - `internal/bytealg`: fix indexing error in Compare() - `machine`: support Pin.Get() function when the pin is configured as output - `net`, `syscall`: Reduce code duplication by switching to internal/itoa. - `os`: don't try to read executable path on baremetal - `os`: implement Getwd - `os`: add File.WriteString and File.WriteAt - `reflect`: fix type.Size() to account for struct padding - `reflect`: don't construct an interface-in-interface value - `reflect`: implement Value.Elem() for interface values - `reflect`: fix Value.Index() in a specific case - `reflect`: add support for DeepEqual - `runtime`: add another set of invalid unicode runes to encodeUTF8() - `runtime`: only initialize os.runtime_args when needed - `runtime`: only use CRLF on baremetal systems for println - `runtime/debug`: stub `debug.SetMaxStack` - `runtime/debug`: stub `debug.Stack` - `testing`: add a stub for t.Parallel() - `testing`: add support for -test.short flag - `testing`: stub B.ReportAllocs() - `testing`: add `testing.Verbose` - `testing`: stub `testing.AllocsPerRun` * **targets** - fix gen-device-svd to handle 64-bit values - add CPU and Features property to all targets - match LLVM triple to the one Clang uses - `atsam`: simplify definition of SERCOM UART, I2C and SPI peripherals - `atsam`: move I2S0 to machine file - `esp32`: fix SPI configuration - `esp32c3`: add support for GDB debugging - `esp32c3`: add support for CPU interrupts - `esp32c3`: use tasks scheduler by default - `fe310`: increase CPU frequency from 16MHz to 320MHz - `fe310`: add support for bit banging drivers - `linux`: build static binaries using musl - `linux`: reduce binary size by calling `write` instead of `putchar` - `linux`: add support for GOARM - `riscv`: implement 32-bit atomic operations - `riscv`: align the heap to 16 bytes - `riscv`: switch to tasks-based scheduler - `rp2040`: add CPUFrequency() - `rp2040`: improve I2C baud rate configuration - `rp2040`: add pin interrupt API - `rp2040`: refactor PWM code and fix Period calculation - `stm32f103`: fix SPI - `stm32f103`: make SPI frequency selection more flexible - `qemu`: signal correct exit code to QEMU - `wasi`: run C/C++ constructors at startup - `wasm`: ensure heapptr is aligned - `wasm`: update wasi-libc dependency - `wasm`: wasi: use asyncify - `wasm`: support `-scheduler=none` - `windows`: add support for Windows (amd64 only for now) * **boards** - `feather-stm32f405`, `feather-rp2040`: add I2C pin names - `m5stack-core2`: add M5Stack Core2 - `nano-33-ble`: SoftDevice s140v7 support - `nano-33-ble`: add constants for more on-board pins 0.20.0 --- * **command line** - add support for Go 1.17 - improve Go version detection - add support for the Black Magic Probe (BMP) - add a flag for creating cpu profiles * **compiler** - `builder:` list libraries at the end of the linker command - `builder:` strip debug information at link time instead of at compile time - `builder:` add missing error check for `ioutil.TempFile()` - `builder:` simplify running of jobs - `compiler:` move LLVM math builtin support into the compiler - `compiler:` move math aliases from the runtime to the compiler - `compiler:` add aliases for many hashing packages - `compiler:` add `*ssa.MakeSlice` bounds tests - `compiler:` fix max possible slice - `compiler:` add support for new language features of Go 1.17 - `compiler:` fix equally named structs in different scopes - `compiler:` avoid zero-sized alloca in channel operations - `interp:` don't ignore array indices for untyped objects - `interp:` keep reverted package initializers in order - `interp:` fix bug in compiler-time/run-time package initializers - `loader:` fix panic in CGo files with syntax errors - `transform:` improve GC stack slot pass to work around a bug * **standard library** - `crypto/rand`: switch to `arc4random_buf` - `math:` fix `math.Max` and `math.Min` - `math/big`: fix undefined symbols error - `net:` add MAC address implementation - `os:` implement `os.Executable` - `os:` add `SEEK_SET`, `SEEK_CUR`, and `SEEK_END` - `reflect:` add StructField.IsExported method - `runtime:` reset heapptr to heapStart after preinit() - `runtime:` add `subsections_via_symbols` to assembly files on darwin - `testing:` add subset implementation of Benchmark - `testing:` test testing package using `tinygo test` - `testing:` add support for the `-test.v` flag * **targets** - `386:` bump minimum requirement to the Pentium 4 - `arm:` switch to Thumb instruction set on ARM - `atsamd:` fix copy-paste error for atsamd21/51 calibTrim block - `baremetal`,`wasm`: support command line params and environment variables - `cortexm:` fix stack overflow because of unaligned stacks - `esp32c3:` add support for the ESP32-C3 from Espressif - `nrf52840:` fix ram size - `nxpmk66f18:` fix a suspicious bitwise operation - `rp2040:` add SPI support - `rp2040:` add I2C support - `rp2040:` add PWM implementation - `rp2040:` add openocd configuration - `stm32:` add support for PortMask* functions for WS2812 support - `unix:` fix time base for time.Now() - `unix:` check for mmap error and act accordingly - `wasm:` override dlmalloc heap implementation from wasi-libc - `wasm:` align heap to 16 bytes - `wasm:` add support for the crypto/rand package * **boards** - add `DefaultUART` to adafruit boards - `arduino-mkrwifi1010:` add board definition for Arduino MKR WiFi 1010 - `arduino-mkrwifi1010:` fix pin definition of `NINA_RESETN` - `feather-nrf52:` fix pin definition of uart - `feather-rp2040:` add pin name definition - `gameboy-advance:` fix ROM header - `mdbt50qrx-uf2:` add Raytac MDBT50Q-RX Dongle with TinyUF2 - `nano-rp2040:` define `NINA_SPI` and fix wifinina pins - `teensy40:` enable hardware UART reconfiguration, fix receive watermark interrupt 0.19.0 --- * **command line** - don't consider compile-only tests as failing - add -test flag for `tinygo list` - escape commands while printing them with the -x flag - make flash-command portable and safer to use - use `extended-remote` instead of `remote` in GDB - detect specific serial port IDs based on USB vid/pid - add a flag to the command line to select the serial implementation * **compiler** - `cgo`: improve constant parser - `compiler`: support chained interrupt handlers - `compiler`: add support for running a builtin in a goroutine - `compiler`: do not emit nil checks for loading closure variables - `compiler`: skip context parameter when starting regular goroutine - `compiler`: refactor method names - `compiler`: add function and global section pragmas - `compiler`: implement `syscall.rawSyscallNoError` in inline assembly - `interp`: ignore inline assembly in markExternal - `interp`: fix a bug in pointer cast workaround - `loader`: fix testing a main package * **standard library** - `crypto/rand`: replace this package with a TinyGo version - `machine`: make USBCDC global a pointer - `machine`: make UART objects pointer receivers - `machine`: define Serial as the default output - `net`: add initial support for net.IP - `net`: add more net compatibility - `os`: add stub for os.ReadDir - `os`: add FileMode constants from Go 1.16 - `os`: add stubs required for net/http - `os`: implement process related functions - `reflect`: implement AppendSlice - `reflect`: add stubs required for net/http - `runtime`: make task.Data a 64-bit integer to avoid overflow - `runtime`: expose memory stats - `sync`: implement NewCond - `syscall`: fix int type in libc version * **targets** - `cortexm`: do not disable interrupts on abort - `cortexm`: bump default stack size to 2048 bytes - `nrf`: avoid heap allocation in waitForEvent - `nrf`: don't trigger a heap allocation in SPI.Transfer - `nrf52840`: add support for flashing with the BOSSA tool - `rp2040`: add support for GPIO input - `rp2040`: add basic support for ADC - `rp2040`: gpio and adc pin definitions - `rp2040`: implement UART - `rp2040`: patch elf to checksum 2nd stage boot - `stm32`: add PWM for most chips - `stm32`: add support for pin interrupts - `stm32f103`: add support for PinInputPullup / PinInputPulldown - `wasi`: remove wasm build tag * **boards** - `feather-rp2040`: add support for this board - `feather-nrf52840-sense`: add board definition for this board - `pca10059`: support flashing from Windows - `nano-rp2040`: add this board - `nano-33-ble`: add support for this board - `pico`: add the Raspberry Pi Pico board with the new RP2040 chip - `qtpy`: add pin for neopixels - all: add definition for ws2812 for supported boards 0.18.0 --- * **command line** - drop support for Go 1.11 and 1.12 - throw an error when no target is specified on Windows - improve error messages in `getDefaultPort()`, support for multiple ports - remove `-cflags` and `-ldflags` flags - implement `-ldflags="-X ..."` - add `-print-allocs` flag that lets you print all heap allocations - openocd commands in tinygo command line - add `-llvm-features` parameter - match `go test` output - discover USB ports only, this will ignore f.ex. bluetooth - use physicmal path instead of cached GOROOT in function getGoroot - add goroot for snap installs * **compiler** - `builder`: add support for `-opt=0` - `builder`, `compiler`: compile and cache packages in parallel - `builder`: run interp per package - `builder`: cache C and assembly file outputs - `builder`: add support for `-x` flag to print commands - `builder`: add optsize attribute while building the package - `builder`: run function passes per package - `builder`: hard code Clang compiler - `compiler`: do not use `llvm.GlobalContext()` - `compiler`: remove SimpleDCE pass - `compiler`: do not emit nil checks for `*ssa.Alloc` instructions - `compiler`: merge `runtime.typecodeID` and runtime.typeInInterface - `compiler`: do not check for impossible type asserts - `compiler`: fix use of global context: `llvm.Int32Type()` - `compiler`: add interface IR test - `compiler`: fix lack of method name in interface matching - `compiler`: fix "fragment covers entire variable" bug - `compiler`: optimize string literals and globals - `compiler`: decouple func lowering from interface type codes - `compiler`: add function attributes to some runtime calls - `compiler`: improve position information in error messages - `cgo`: add support for CFLAGS in .c files - `interp`: support GEP on fixed (MMIO) addresses - `interp`: handle `(reflect.Type).Elem()` - `interp`: add support for runtime.interfaceMethod - `interp`: make toLLVMValue return an error instead of panicking - `interp`: add support for switch statement - `interp`: fix phi instruction - `interp`: remove map support - `interp`: support extractvalue/insertvalue with multiple operands - `transform`: optimize string comparisons against "" - `transform`: optimize `reflect.Type` `Implements()` method - `transform`: fix bug in interface lowering when signatures are renamed - `transform`: don't rely on struct name of `runtime.typecodeID` - `transform`: use IPSCCP pass instead of the constant propagation pass - `transform`: fix func lowering assertion failure - `transform`: do not lower zero-sized alloc to alloca - `transform`: split interface and reflect lowering * **standard library** - `runtime`: add dummy debug package - `machine`: fix data shift/mask in newUSBSetup - `machine`: make `machine.I2C0` and similar objects pointers - `machine`: unify usbcdc code - `machine`: refactor PWM support - `machine`: avoid heap allocations in USB code - `reflect`: let `reflect.Type` be of interface type - `reflect`: implement a number of stub functions - `reflect`: check for access in the `Interface` method call - `reflect`: fix `AssignableTo` and `Implements` methods - `reflect`: implement `Value.CanAddr` - `reflect`: implement `Sizeof` and `Alignof` for func values - `reflect`: implement `New` function - `runtime`: implement command line arguments in hosted environments - `runtime`: implement environment variables for Linux - `runtime`: improve timers on nrf, and samd chips * **targets** - all: use -Qunused-arguments only for assembly files - `atmega1280`: add PWM support - `attiny`: remove dummy UART - `atsamd21`: improve SPI - `atsamd51`: fix PWM support in atsamd51p20 - `atsamd5x`: improve SPI - `atsamd51`, `atsame5x`: unify samd51 and same5x - `atsamd51`, `atsamd21`: fix `ADC.Get()` value at 8bit and 10bit - `atsame5x`: add support for CAN - `avr`: remove I2C stubs from attiny support - `cortexm`: check for `arm-none-eabi-gdb` and `gdb-multiarch` commands - `cortexm`: add `__isr_vector` symbol - `cortexm`: disable FPU on Cortex-M4 - `cortexm`: clean up Cortex-M target files - `fe310`: fix SPI read - `gameboy-advance`: Fix RGBA color interpretation - `nrf52833`: add PWM support - `stm32l0`: use unified UART logic - `stm32`: move f103 (bluepill) to common i2c code - `stm32`: separate altfunc selection for UART Tx/Rx - `stm32`: i2c implementation for F7, L5 and L4 MCUs - `stm32`: make SPI CLK fast to fix data issue - `stm32`: support SPI on L4 series - `unix`: avoid possible heap allocation with `-opt=0` - `unix`: use conservative GC by default - `unix`: use the tasks scheduler instead of coroutines - `wasi`: upgrade WASI version to wasi_snapshot_preview1 - `wasi`: darwin: support basic file io based on libc - `wasm`: only export explicitly exported functions - `wasm`: use WASI ABI for exit function - `wasm`: scan globals conservatively * **boards** - `arduino-mega1280`: add support for the Arduino Mega 1280 - `arduino-nano-new`: Add Arduino Nano w/ New Bootloader target - `atsame54-xpro`: add initial support this board - `feather-m4-can`: add initial support for this board - `grandcentral-m4`: add board support for Adafruit Grand Central M4 (SAMD51) - `lgt92`: update to new UART structure - `microbit`: remove LED constant - `microbit-v2`: add support for S113 SoftDevice - `nucleol432`: add support for this board - `nucleo-l031k6`: add this board - `pca10059`: initial support for this board - `qtpy`: fix msd-volume-name - `qtpy`: fix i2c setting - `teensy40`: move txBuffer allocation to UART declaration - `teensy40`: add UART0 as alias for UART1 0.17.0 --- * **command line** - switch to LLVM 11 for static builds - support gdb debugging with AVR - add support for additional openocd commands - add `-x` flag to print commands - use LLVM 11 by default when linking LLVM dynamically - update go-llvm to use LLVM 11 on macOS - bump go.bug.st/serial to version 1.1.2 - do not build LLVM with libxml to work around a bugo on macOS - add support for Go 1.16 - support gdb daemonization on Windows - remove support for LLVM 9, to fix CI - kill OpenOCD if it does not exit with a regular quit signal - support `-ocd-output` on Windows * **compiler** - `builder`: parallelize most of the build - `builder`: remove unused cacheKey parameter - `builder`: add -mcpu flag while building libraries - `builder`: wait for running jobs to finish - `cgo`: add support for variadic functions - `compiler`: fix undefined behavior in wordpack - `compiler`: fix incorrect "exported function" panic - `compiler`: fix non-int integer constants (fixing a crash) - `compiler`: refactor and add tests - `compiler`: emit a nil check when slicing an array pointer - `compiler`: saturate float-to-int conversions - `compiler`: test float to int conversions and fix upper-bound calculation - `compiler`: support all kinds of deferred builtins - `compiler`: remove ir package - `compiler`: remove unnecessary main.main call workaround - `compiler`: move the setting of attributes to getFunction - `compiler`: create runtime types lazily when needed - `compiler`: move settings to a separate Config struct - `compiler`: work around an ARM backend bug in LLVM - `interp`: rewrite entire package - `interp`: fix alignment of untyped globals - `loader`: use name "main" for the main package - `loader`: support imports from vendor directories - `stacksize`: add support for DW_CFA_offset_extended - `transform`: show better error message in coroutines lowering * **standard library** - `machine`: accept configuration struct for ADC parameters - `machine`: make I2C.Configure signature consistent - `reflect`: implement PtrTo - `runtime`: refactor to simplify stack switching - `runtime`: put metadata at the top end of the heap * **targets** - `atsam`: add a length check to findPinPadMapping - `atsam`: improve USBCDC - `atsam`: avoid infinite loop when USBCDC is disconnected - `avr`: add SPI support for Atmega based chips - `avr`: use Clang for compiling C and assembly files - `esp32`: implement task based scheduler - `esp32`: enable the FPU - `esp8266`: implement task based scheduler - `esp`: add compiler-rt library - `esp`: add picolibc - `nrf`: refactor code a bit to reduce duplication - `nrf`: use SPIM peripheral instead of the legacy SPI peripheral - `nrf`: update nrfx submodule to latest commit - `nrf52840`: ensure that USB CDC interface is only initialized once - `nrf52840`: improve USBCDC - `stm32`: use stm32-rs SVDs which are of much higher quality - `stm32`: harmonization of UART logic - `stm32`: replace I2C addressable interface with simpler type - `stm32`: fix i2c and add stm32f407 i2c - `stm32`: revert change that adds support for channels in interrupts - `wasm`: implement a growable heap - `wasm`: fix typo in wasm_exec.js, syscall/js.valueLoadString() - `wasm`: Namespaced Wasm Imports so they don't conflict across modules, or reserved LLVM IR - `wasi`: support env variables based on libc - `wasi`: specify wasi-libc in a different way, to improve error message * **boards** - `matrixportal-m4`: add support for board Adafruit Matrix Portal M4 - `mkr1000`: add this board - `nucleo-f722ze`: add this board - `clue`: correct volume name and add alias for release version of Adafruit Clue board - `p1am-100`: add support for the P1AM-100 (similar to Arduino MKR) - `microbit-v2`: add initial support based on work done by @alankrantas thank you! - `lgt92`: support for STM32L0 MCUs and Dragino LGT92 device - `nicenano`: nice!nano board support - `circuitplay-bluefruit`: correct internal I2C pin mapping - `clue`: correct for lack of low frequency crystal - `digispark`: split off attiny85 target - `nucleo-l552ze`: implementation with CLOCK, LED, and UART - `nrf52840-mdk-usb-dongle`: add this board 0.16.0 --- * **command-line** - add initial support for LLVM 11 - make lib64 clang include path check more robust - `build`: improve support for GOARCH=386 and add tests - `gdb`: add support for qemu-user targets - `test`: support non-host tests - `test`: add support for -c and -o flags - `test`: implement some benchmark stubs * **compiler** - `builder`: improve detection of clang on Fedora - `compiler`: fix floating point comparison bugs - `compiler`: implement negate for complex numbers - `loader`: fix linkname in test binaries - `transform`: add missing return pointer restore for regular coroutine tail calls * **standard library** - `machine`: switch default frequency to 4MHz - `machine`: clarify caller's responsibility in `SetInterrupt` - `os`: add `LookupEnv()` stub - `reflect`: implement `Swapper` - `runtime`: fix UTF-8 decoding - `runtime`: gc: use raw stack access whenever possible - `runtime`: use dedicated printfloat32 - `runtime`: allow ranging over a nil map - `runtime`: avoid device/nxp dependency in HardFault handler - `testing`: implement dummy Helper method - `testing`: add Run method * **targets** - `arm64`: add support for SVCall intrinsic - `atsamd51`: avoid panic when configuring SPI with SDI=NoPin - `avr`: properly support the `.rodata` section - `esp8266`: implement `Pin.Get` function - `nintendoswitch`: fix crash when printing long lines (> 120) - `nintendoswitch`: add env parser and removed unused stuff - `nrf`: add I2C error checking - `nrf`: give more flexibility in picking SPI speeds - `nrf`: fix nrf52832 flash size - `stm32f103`: support wakeups from interrupts - `stm32f405`: add SPI support - `stm32f405`: add I2C support - `wasi`: add support for this target - `wasi`: use 'generic' ABI by default - `wasi`: remove --no-threads flag from wasm-ld - `wasm`: add instanceof support for WebAssembly - `wasm`: use fixed length buffer for putchar * **boards** - `d1mini`: add this ESP8266 based board - `esp32`: use board definitions instead of chip names - `qtpy`: add board definition for Adafruit QTPy - `teensy40`: add this board 0.15.0 --- * **command-line** - add cached GOROOT to info subcommand - embed git-hash in tinygo-dev executable - implement tinygo targets to list usable targets - use simpler file copy instead of file renaming to avoid issues on nrf52840 UF2 bootloaders - use ToSlash() to specify program path - support flashing esp32/esp8266 directly from tinygo - when flashing call PortReset only on other than openocd * **compiler** - `compileopts`: add support for custom binary formats - `compiler`: improve display of goroutine wrappers - `interp`: don't panic in the Store method - `interp`: replace some panics with error messages - `interp`: show error line in first line of the traceback - `loader`: be more robust when creating the cached GOROOT - `loader`: rewrite/refactor much of the code to use go list directly - `loader`: use ioutil.TempDir to create a temporary directory - `stacksize`: deal with DW_CFA_advance_loc1 * **standard library** - `runtime`: use waitForEvents when appropriate * **wasm** - `wasm`: Remove --no-threads from wasm-ld calls. - `wasm`: update wasi-libc dependency * **targets** - `arduino-mega2560`: fix flashing on Windows - `arm`: automatically determine stack sizes - `arm64`: make dynamic loader structs and constants private - `avr`: configure emulator in board files - `cortexm`: fix stack size calculation with interrupts - `flash`: add openocd settings to atsamd21 / atsamd51 - `flash`: add openocd settings to nrf5 - `microbit`: reelboard: flash using OpenOCD when needed - `nintendoswitch`: Add dynamic loader for runtime loading PIE sections - `nintendoswitch`: fix import cycle on dynamic_arm64.go - `nintendoswitch`: Fix invalid memory read / write in print calls - `nintendoswitch`: simplified assembly code - `nintendoswitch`: support outputting .nro files directly * **boards** - `arduino-zero`: Adding support for the Arduino Zero (#1365) - `atsamd2x`: fix BAUD value - `atsamd5x`: fix BAUD value - `bluepill`: Enable stm32's USART2 for the board and map it to UART1 tinygo's device - `device/atsamd51x`: add all remaining bitfield values for PCHCTRLm Mapping - `esp32`: add libgcc ROM functions to linker script - `esp32`: add SPI support - `esp32`: add support for basic GPIO - `esp32`: add support for the Espressif ESP32 chip - `esp32`: configure the I/O matrix for GPIO pins - `esp32`: export machine.PortMask* for bitbanging implementations - `esp8266`: add support for this chip - `machine/atsamd51x,runtime/atsamd51x`: fixes needed for full support for all PWM pins. Also adds some useful constants to clarify peripheral clock usage - `machine/itsybitsy-nrf52840`: add support for Adafruit Itsybitsy nrf52840 (#1243) - `machine/stm32f4`: refactor common code and add new build tag stm32f4 (#1332) - `nrf`: add SoftDevice support for the Circuit Playground Bluefruit - `nrf`: call sd_app_evt_wait when the SoftDevice is enabled - `nrf52840`: add build tags for SoftDevice support - `nrf52840`: use higher priority for USB-CDC code - `runtime/atsamd51x`: use PCHCTRL_GCLK_SERCOMX_SLOW for setting clocks on all SERCOM ports - `stm32f405`: add basic UART handler - `stm32f405`: add STM32F405 machine/runtime, and new board/target feather-stm32f405 * **build** - `all`: run test binaries in the correct directory - `build`: Fix arch release job - `ci`: run `tinygo test` for known-working packages - `ci`: set git-fetch-depth to 1 - `docker`: fix the problem with the wasm build (#1357) - `Makefile`: check whether submodules have been downloaded in some common cases * **docs** - add ESP32, ESP8266, and Adafruit Feather STM32F405 to list of supported boards 0.14.1 --- * **command-line** - support for Go 1.15 * **compiler** - loader: work around Windows symlink limitation 0.14.0 --- * **command-line** - fix `getDefaultPort()` on non-English Windows locales - compileopts: improve error reporting of unsupported flags - fix test subcommand - use auto-retry to locate MSD for UF2 and HEX flashing - fix touchSerialPortAt1200bps on Windows - support package names with backslashes on Windows * **compiler** - fix a few crashes due to named types - add support for atomic operations - move the channel blocked list onto the stack - fix -gc=none - fix named string to `[]byte` slice conversion - implement func value and builtin defers - add proper parameter names to runtime.initAll, to fix a panic - builder: fix picolibc include path - builder: use newer version of gohex - builder: try to determine stack size information at compile time - builder: remove -opt=0 - interp: fix sync/atomic.Value load/store methods - loader: add Go module support - transform: fix debug information in func lowering pass - transform: do not special-case zero or one implementations of a method call - transform: introduce check for method calls on nil interfaces - transform: gc: track 0-index GEPs to fix miscompilation * **cgo** - Add LDFlags support * **standard library** - extend stdlib to allow import of more packages - replace master/slave terminology with appropriate alternatives (MOSI->SDO etc) - `internal/bytealg`: reimplement bytealg in pure Go - `internal/task`: fix nil panic in (*internal/task.Stack).Pop - `os`: add Args and stub it with mock data - `os`: implement virtual filesystem support - `reflect`: add Cap and Len support for map and chan - `runtime`: fix return address in scheduler on RISC-V - `runtime`: avoid recursion in printuint64 function - `runtime`: replace ReadRegister with AsmFull inline assembly - `runtime`: fix compilation errors when using gc.extalloc - `runtime`: add cap and len support for chans - `runtime`: refactor time handling (improving accuracy) - `runtime`: make channels work in interrupts - `runtime/interrupt`: add cross-chip disable/restore interrupt support - `sync`: implement `sync.Cond` - `sync`: add WaitGroup * **targets** - `arm`: allow nesting in DisableInterrupts and EnableInterrupts - `arm`: make FPU configuration consistent - `arm`: do not mask fault handlers in critical sections - `atmega2560`: fix pin mapping for pins D2, D5 and the L port - `atsamd`: return an error when an incorrect PWM pin is used - `atsamd`: add support for pin change interrupts - `atsamd`: add DAC support - `atsamd21`: add more ADC pins - `atsamd51`: fix ROM / RAM size on atsamd51j20 - `atsamd51`: add more pins - `atsamd51`: add more ADC pins - `atsamd51`: add pin change interrupt settings - `atsamd51`: extend pinPadMapping - `arduino-nano33`: use (U)SB flag to ensure that device can be found when not on default port - `arduino-nano33`: remove (d)ebug flag to reduce console noise when flashing - `avr`: use standard pin numbering - `avr`: unify GPIO pin/port code - `avr`: add support for PinInputPullup - `avr`: work around codegen bug in LLVM 10 - `avr`: fix target triple - `fe310`: remove extra println left in by mistake - `feather-nrf52840`: add support for the Feather nRF52840 - `maixbit`: add board definition and dummy runtime - `nintendoswitch`: Add experimental Nintendo Switch support without CRT - `nrf`: expose the RAM base address - `nrf`: add support for pin change interrupts - `nrf`: add microbit-s110v8 target - `nrf`: fix bug in SPI.Tx - `nrf`: support debugging the PCA10056 - `pygamer`: add Adafruit PyGamer support - `riscv`: fix interrupt configuration bug - `riscv`: disable linker relaxations during gp init - `stm32f4disco`: add new target with ST-Link v2.1 debugger - `teensy36`: add Teensy 3.6 support - `wasm`: fix event handling - `wasm`: add --no-demangle linker option - `wioterminal`: add support for the Seeed Wio Terminal - `xiao`: add support for the Seeed XIAO 0.13.1 --- * **standard library** - `runtime`: do not put scheduler and GC code in the same section - `runtime`: copy stack scan assembly for GBA * **boards** - `gameboy-advance`: always use ARM mode instead of Thumb mode 0.13.0 --- * **command line** - use `gdb-multiarch` for debugging Cortex-M chips - support `tinygo run` with simavr - support LLVM 10 - support Go 1.14 - retry 3 times when attempting to do a 1200-baud reset * **compiler** - mark the `abort` function as noreturn - fix deferred calls to exported functions - add debug info for local variables - check for channel size limit - refactor coroutine lowering - add `dereferenceable_or_null` attribute to pointer parameters - do not perform nil checking when indexing slices and on `unsafe.Pointer` - remove `runtime.isnil` hack - use LLVM builtins for runtime `memcpy`/`memmove`/`memzero` functions - implement spec-compliant shifts on negative/overflow - support anonymous type asserts - track pointer result of string concatenation for GC - track PHI nodes for GC - add debug info to goroutine start wrappers - optimize comparing interface values against nil - fix miscompilation when deferring an interface call - builder: include picolibc for most baremetal targets - builder: run tools (clang, lld) as separate processes - builder: use `-fshort-enums` consistently - interp: add support for constant type asserts - interp: better support for interface operations - interp: include backtrace with error - transform: do not track const globals for GC - transform: replace panics with source locations - transform: fix error in interface lowering pass - transform: make coroutine lowering deterministic - transform: fix miscompilation in func lowering * **cgo** - make `-I` and `-L` paths absolute * **standard library** - `machine`: set the USB VID and PID to the manufacturer values - `machine`: correct USB CDC composite descriptors - `machine`: move `errors.New` calls to globals - `runtime`: support operations on nil maps - `runtime`: fix copy builtin return value on AVR - `runtime`: refactor goroutines - `runtime`: support `-scheduler=none` on most platforms - `runtime`: run package initialization in the main goroutine - `runtime`: export `malloc` / `free` for use from C - `runtime`: add garbage collector that uses an external allocator - `runtime`: scan callee-saved registers while marking the stack - `runtime`: remove recursion from conservative GC - `runtime`: fix blocking select on nil channel - `runtime/volatile`: include `ReplaceBits` method - `sync`: implement trivial `sync.Map` * **targets** - `arm`: use `-fomit-frame-pointer` - `atmega1284`: support this chip for testing purposes - `atsamd51`: make QSPI available on all boards - `atsamd51`: add support for ADC1 - `atsamd51`: use new interrupt registration in UART code - `attiny`: clean up pin definitions - `avr`: use the correct RAM start address - `avr`: pass the correct `-mmcu` flag to the linker - `avr`: add support for tasks scheduler (disabled by default) - `avr`: fix linker problem with overlapping program/data areas - `nrf`: fix typo in pin configuration options - `nrf`: add lib/nrfx/mdk to include dirs - `nrf52840`: implement USB-CDC - `riscv`: implement VirtIO target and add RISC-V integration test - `riscv`: add I2C support for the HiFive1 rev B board - `stm32`: refactor GPIO pin handling - `stm32`: refactor UART code - `stm32f4`: add SPI - `wasm`: support Go 1.14 (breaking previous versions) - `wasm`: support `syscall/js.CopyBytesToJS` - `wasm`: sync polyfills from Go 1.14. * **boards** - `arduino-mega2560`: add the Arduino Mega 2560 - `clue-alpha`: add the Adafruit CLUE Alpha - `gameboy-advance`: enable debugging with GDB - `particle-argon`: add the Particle Argon board - `particle-boron`: add the Particle Boron board - `particle-xenon`: add the Particle Xenon board - `reelboard`: add `reelboard-s140v7` SoftDevice target 0.12.0 --- * **command line** - add initial FreeBSD support - remove getting a serial port in gdb subcommand - add support for debugging through JLinkGDBServer - fix CGo when cross compiling - remove default port check for Digispark as micronucleus communicates directly using HID - differentiate between various serial/USB error messages * **builder** - improve detection of Clang headers * **compiler** - fix assertion on empty interface - don't crash when encountering `types.Invalid` - revise defer to use heap allocations when running a variable number of times - improve error messages for failed imports - improve "function redeclared" error - add globaldce pass to start of optimization pipeline - add support for debugging globals - implement RISC-V CSR operations as intrinsics - add support for CGO_ENABLED environment variable - do not emit debug info for extern globals (bugfix) - add support for interrupts - implement maps for arbitrary keys - interp: error location for "unknown GEP" error - wasm-abi: create temporary allocas in the entry block * **cgo** - add support for symbols in `#define` - fix a bug in number tokenization * **standard library** - `machine`: avoid bytes package in USB logic - `runtime`: fix external address declarations - `runtime`: provide implementation for `internal/bytealg.IndexByte` * **targets** - `atsamd51`: fix volatile usage - `atsamd51`: fix ADC, updating to 12-bits precision - `atsamd51`: refactor SPI pin configuration to only look at pin numbers - `atsamd51`: switch UART to use new pin configuration - `atsamd51`: fix obvious bug in I2C code - `atsamd51`: use only the necessary UART interrupts - `atsamd51`: refactor I2C pin handling to auto-detect pin mode - `avr`: use a garbage collector - `fe310`: use CLINT peripheral for timekeeping - `fe310`: add support for PLIC interrupts - `fe310`: implement UART receive interrupts - `riscv`: support sleeping in QEMU - `riscv`: add bare-bones interrupt support - `riscv`: print exception PC and code - `wasm`: implement memcpy and memset - `wasm`: include wasi-libc - `wasm`: use wasi ABI for basic startup/stdout * **boards** - `arduino`: make avrdude command line compatible with Windows - `arduino-nano`: add this board - `arduino-nano33`: fix UART1 and UART2 - `circuitplay-bluefruit`: add this board - `digispark`: add clock speed and pin mappings - `gameboy-advance`: include compiler-rt in build - `gameboy-advance`: implement interrupt handler - `hifive1b`: add support for gdb subcommand - `pyportal`: add this board - `pyportal`: remove manual SPI pin mapping as now handled by default 0.11.0 --- * **command line** - add support for QEMU in `gdb` subcommand - use builtin Clang when building statically, dropping the clang-9 dependency - search for default serial port on both macOS and Linux - windows: support `tinygo flash` directly by using win32 wmi * **compiler** - add location information to the IR checker - make reflection sidetables constant globals - improve error locations in goroutine lowering - interp: improve support for maps with string keys - interp: add runtime fallback for mapassign operations * **standard library** - `machine`: add support for `SPI.Tx()` on play.tinygo.org - `machine`: rename `CPU_FREQUENCY` to `CPUFrequency()` * **targets** - `adafruit-pybadge`: add Adafruit Pybadge - `arduino-nano33`: allow simulation on play.tinygo.org - `arduino-nano33`: fix default SPI pin numbers to be D13/D11/D12 - `circuitplay-express`: allow simulation on play.tinygo.org - `hifive1-qemu`: add target for testing RISC-V bare metal in QEMU - `riscv`: fix heap corruption due to changes in LLVM 9 - `riscv`: add support for compiler-rt - `qemu`: rename to `cortex-m-qemu` 0.10.0 --- * **command line** - halt GDB after flashing with `gdb` subcommand - fix a crash when using `-ocd-output` - add `info` subcommand - add `-programmer` flag * **builder** - macos: use llvm@8 instead of just llvm in paths - add `linkerscript` key to target JSON files - write a symbol table when writing out the compiler-rt lib - make Clang header detection more robust - switch to LLVM 9 * **compiler** - fix interface miscompilation with reflect - fix miscompile of static goroutine calls to closures - fix `todo: store` panic - fix incorrect starting value for optimized allocations in a loop - optimize coroutines on non-Cortex-M targets - fix crash for programs which have heap allocations but never hit the GC - add support for async interface calls - fix inserting non-const values in a const global - interp: improve error reporting - interp: implement comparing ptrtoint to 0 * **cgo** - improve diagnostics - implement the constant parser (for `#define`) as a real parser - rename reserved field names such as `type` - avoid `"unsafe" imported but not used` error - include all enums in the CGo Go AST - add support for nested structs and unions - implement `#cgo CFLAGS` * **standard library** - `reflect`: add implementation of array alignment - `runtime`: improve scheduler performance when no goroutines are queued - `runtime`: add blocking select - `runtime`: implement interface equality in non-trivial cases - `runtime`: add AdjustTimeOffset to update current time - `runtime`: only implement CountString for required platforms - `runtime`: use MSP/PSP registers for scheduling on Cortex-M * **targets** - `arm`: add system timer registers - `atmega`: add port C GPIO support - `atsamd21`: correct handling of pins >= 32 - `atsamd21`: i2s initialization fixes - `atsamd51`: fix clock init code - `atsamd51`: correct initialization for RTC - `atsamd51`: fix pin function selection - `atsamd51`: pin method cleanup - `atsamd51`: allow setting pin mode for each of the SPI pins - `atsamd51`: correct channel init and pin map for ADC based on ItsyBitsy-M4 - `feather-m4`: add Adafruit Feather M4 board - `hifive1b`: add support for SPI1 - `hifive1b`: fix compiling in simulation - `linux`: fix time on arm32 - `metro-m4`: add support for Adafruit Metro M4 Express Airlift board - `metro-m4`: fixes for UART2 - `pinetime-devkit0`: add support for the PineTime dev kit - `x9pro`: add support for this smartwatch - `pca10040-s132v6`: add support for SoftDevice - `pca10056-s140v7`: add support for SoftDevice - `arduino-nano33`: added SPI1 connected to NINA-W102 chip on Arduino Nano 33 IOT 0.9.0 --- * **command line** - implement 1200-baud UART bootloader reset when flashing boards that support it - flash using mass-storage device for boards that support it - implement `tinygo env` - add support for Windows (but not yet producing Windows binaries) - add Go version to `tinygo env` - update SVD files for up-to-date peripheral interfaces * **compiler** - add `//go:align` pragma - fix bug related to type aliases - add support for buffered channels - remove incorrect reflect optimization - implement copying slices in init interpretation - add support for constant indices with a named type - add support for recursive types like linked lists - fix miscompile of function nil panics - fix bug related to goroutines * **standard library** - `machine`: do not check for nil slices in `SPI.Tx` - `reflectlite`: add support for Go 1.13 - `runtime`: implement `internal/bytealg.CountString` - `sync`: properly handle nil `New` func in `sync.Pool` * **targets** - `arduino`: fix .bss section initialization - `fe310`: implement `Pin.Get` - `gameboy-advance`: support directly outputting .gba files - `samd`: reduce code size by avoiding reflection - `samd21`: do not hardcode pin numbers for peripherals - `stm32f103`: avoid issue with `time.Sleep` less than 200µs 0.8.0 --- * **command line** - fix parsing of beta Go versions - check the major/minor installed version of Go before compiling - validate `-target` flag better to not panic on an invalid target * **compiler** - implement full slice expression: `s[:2:4]` - fix a crash when storing a linked list in an interface - fix comparing struct types by making type IDs more unique - fix some bugs in IR generation - add support for linked lists in reflect data - implement `[]rune` to string conversion - implement support for `go` on func values * **standard library** - `reflect`: add support for named types - `reflect`: add support for `t.Bits()` - `reflect`: add basic support for `t.AssignableTo()` - `reflect`: implement `t.Align()` - `reflect`: add support for struct types - `reflect`: fix bug in `v.IsNil` and `v.Pointer` for addressable values - `reflect`: implement support for array types - `reflect`: implement `t.Comparable()` - `runtime`: implement stack-based scheduler - `runtime`: fix bug in the sleep queue of the scheduler - `runtime`: implement `memcpy` for Cortex-M - `testing`: implement stub `testing.B` struct - `testing`: add common test logging methods such as Errorf/Fatalf/Printf * **targets** - `386`: add support for linux/386 syscalls - `atsamd21`: make SPI pins configurable so that multiple SPI ports can be used - `atsamd21`: correct issue with invalid first reading coming from ADC - `atsamd21`: add support for reset-to-bootloader using 1200baud over USB-CDC - `atsamd21`: make pin selection more flexible for peripherals - `atsamd21`: fix minimum delay in `time.Sleep` - `atsamd51`: fix minimum delay in `time.Sleep` - `nrf`: improve SPI write-only speed, by making use of double buffering - `stm32f103`: fix SPI frequency selection - `stm32f103`: add machine.Pin.Get method for reading GPIO values - `stm32f103`: allow board specific UART usage - `nucleo-f103rb`: add support for NUCLEO-F103RB board - `itsybitsy-m4`: add support for this board with a SAMD51 family chip - `cortex-m`: add support for `arm.SystemReset()` - `gameboy-advance`: add initial support for the GameBoy Advance - `wasm`: add `//go:wasm-module` magic comment to set the wasm module name - `wasm`: add syscall/js.valueSetIndex support - `wasm`: add syscall/js.valueInvoke support 0.7.1 --- * **targets** - `atsamd21`: add support for the `-port` flag in the flash subcommand 0.7.0 --- * **command line** - try more locations to find Clang built-in headers - add support for `tinygo test` - build current directory if no package is specified - support custom .json target spec with `-target` flag - use zversion.go to detect version of GOROOT version - make initial heap size configurable for some targets (currently WebAssembly only) * **cgo** - add support for bitfields using generated getters and setters - add support for anonymous structs * **compiler** - show an error instead of panicking on duplicate function definitions - allow packages like github.com/tinygo-org/tinygo/src/\* by aliasing it - remove `//go:volatile` support It has been replaced with the runtime/volatile package. - allow pointers in map keys - support non-constant syscall numbers - implement non-blocking selects - add support for the `-tags` flag - add support for `string` to `[]rune` conversion - implement a portable conservative garbage collector (with support for wasm) - add the `//go:noinline` pragma * **standard library** - `os`: add `os.Exit` and `syscall.Exit` - `os`: add several stubs - `runtime`: fix heap corruption in conservative GC - `runtime`: add support for math intrinsics where supported, massively speeding up some benchmarks - `testing`: add basic support for testing * **targets** - add support for a generic target that calls `__tinygo_*` functions for peripheral access - `arduino-nano33`: add support for this board - `hifive1`: add support for this RISC-V board - `reelboard`: add e-paper pins - `reelboard`: add `PowerSupplyActive` to enable voltage for on-board devices - `wasm`: put the stack at the start of linear memory, to detect stack overflows 0.6.0 --- * **command line** - some portability improvements - make `$GOROOT` more robust and configurable - check for Clang at the Homebrew install location as fallback * **compiler driver** - support multiple variations of LLVM commands, for non-Debian distributions * **compiler** - improve code quality in multiple ways - make panic configurable, adding trap on panic - refactor many internal parts of the compiler - print all errors encountered during compilation - implement calling function values of a named type - implement returning values from blocking functions - allow larger-than-int values to be sent across a channel - implement complex arithmetic - improve hashmap support - add debuginfo for function arguments - insert nil checks on stores (increasing code size) - implement volatile operations as compiler builtins - add `//go:inline` pragma - add build tags for the Go stdlib version * **cgo** - implement `char`, `enum` and `void*` types - support `#include` for builtin headers - improve typedef/struct/enum support - only include symbols that are necessary, for broader support - mark external function args as `nocapture` - implement support for some `#define` constants - implement support for multiple CGo files in a single package - **standard library** - `machine`: remove microbit matrix (moved to drivers repository) - `machine`: refactor pins to use `Pin` type instead of `GPIO` - `runtime`: print more interface types on panic, including `error` * **targets** - `arm`: print an error on HardFault (including stack overflows) - `atsamd21`: fix a bug in the ADC peripheral - `atsamd21`: add support for I2S - `feather-m0`: add support for this board - `nrf51`: fix a bug in I2C - `stm32f103xx`: fix a bug in I2C - `syscall`: implement `Exit` on unix - `trinket-m0`: add support for this board - `wasm`: make _main_ example smaller - `wasm`: don't cache wasm file in the server, for ease of debugging - `wasm`: work around bug #41508 that caused a deadlock while linking - `wasm`: add support for `js.FuncOf` 0.5.0 --- - **compiler driver** - use `wasm-ld` instead of `wasm-ld-8` on macOS - drop dependency on `llvm-ar` - fix linker script includes when running outside `TINYGOROOT` - **compiler** - switch to LLVM 8 - add support for the Go 1.12 standard library (Go 1.11 is still supported) - work around lack of escape analysis due to nil checks - implement casting named structs and pointers to them - fix int casting to use the source signedness - fix some bugs around `make([]T, …)` with uncommon index types - some other optimizations - support interface asserts in interp for "math/rand" support - resolve all func value targets at compile time (wasm-only at the moment) - **cgo** - improve diagnostics - implement C `struct`, `union`, and arrays - fix CGo-related crash in libclang - implement `C.struct_` types - **targets** - all baremetal: pretend to be linux/arm instead of js/wasm - `avr`: improve `uintptr` support - `cortexm`: implement memmove intrinsic generated by LLVM - `cortexm`: use the lld linker instead of `arm-none-eabi-ld` - `darwin`: use custom syscall package that links to libSystem.dylib - `microbit`: add blink example - `samd21`: support I2C1 - `samd21`: machine/atsamd21: correct pad/pin handling when using both UART and USBCDC interfaces at same time - `stm32f4discovery`: add support for this board - `wasm`: support async func values - `wasm`: improve documentation and add extra example 0.4.1 --- - **compiler** - fix `objcopy` replacement to include the .data section in the firmware image - use `llvm-ar-7` on Linux to fix the Docker image 0.4.0 --- - **compiler** - switch to the hardfloat ABI on ARM, which is more widely used - avoid a dependency on `objcopy` (`arm-none-eabi-objcopy` etc.) - fix a bug in `make([]T, n)` where `n` is 64-bits on a 32-bit platform - adapt to a change in the AVR backend in LLVM 8 - directly support the .uf2 firmware format as used on Adafruit boards - fix a bug when calling `panic()` at init time outside of the main package - implement nil checks, which results in a ~5% increase in code size - inline slice bounds checking, which results in a ~1% decrease in code size - **targets** - `samd21`: fix a bug in port B pins - `samd21`: implement SPI peripheral - `samd21`: implement ADC peripheral - `stm32`: fix a bug in timekeeping - `wasm`: fix a bug in `wasm_exec.js` that caused corruption in linear memory when running on Node.js. 0.3.0 --- - **compiler** - remove old `-initinterp` flag - add support for macOS - **cgo** - add support for bool/float/complex types - **standard library** - `device/arm`: add support to disable/enable hardware interrupts - `machine`: add CPU frequency for nrf-based boards - `syscall`: add support for darwin/amd64 - **targets** - `circuitplay_express`: add support for this board - `microbit`: add regular pin constants - `samd21`: fix time function for goroutine support - `samd21`: add support for USB-CDC (serial over USB) - `samd21`: add support for pins in port B - `samd21`: add support for pullup and pulldown pins - `wasm`: add support for Safari in example 0.2.0 --- - **command line** - add version subcommand - **compiler** - fix a bug in floating point comparisons with NaN values - fix a bug when calling `panic` in package initialization code - add support for comparing `complex64` and `complex128` - **cgo** - add support for external globals - add support for pointers and function pointers - **standard library** - `fmt`: initial support, `fmt.Println` works - `math`: support for most/all functions - `os`: initial support (only stdin/stdout/stderr) - `reflect`: initial support - `syscall`: add support for amd64, arm, and arm64