Skip to content

Releases: tinygo-org/tinygo

0.19.0

01 Jul 10:55
Compare
Choose a tag to compare

This release contains a bunch of small changes such as improvements to serial output, various compiler improvements, and the addition of TinyGo versions of the net and crypto/rand packages. The net package isn't complete, it is a work in progress and will eventually allow for plugging in different network stacks.

When it comes to board support, this release has one significant addition: the RP2040 chip developed by the Raspberry Pi foundation used on boards from some vendors. It also adds support for two new nRF52840-based boards.

  • 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

12 May 12:35
Compare
Choose a tag to compare

This release is the combination of more than two months of work, including improvements to reflection, a big change to the PWM API to make it more powerful (including support for servos!), support for command line parameters and environment variables, many improvements to SAM and STM32 chip support. It also saw the addition of various new boards.

Note that this release drops support for Go 1.11 and Go 1.12, so if you're using one of those versions please upgrade to Go 1.13 or later.

  • 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

06 Mar 14:30
Compare
Choose a tag to compare

This is a large release of almost 3 months of work, with several improvements to the compiler, tinygo gdb, many improvements to the machine package and finally the addition of several new boards. We've also updated TinyGo with support for LLVM 11 and Go 1.16.

  • 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

18 Nov 12:39
Compare
Choose a tag to compare

This is the next release of TinyGo, this time featuring the addition of the Teensy 4.0 and the addition of initial WASI support, apart from numerous fixes and improvements (such as improved tinygo test support). See the full changelog below.

  • 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

17 Sep 10:26
Compare
Choose a tag to compare

This is a very major release that adds some long-awaited capabilities to TinyGo, like support for Bluetooth Low Energy via the Nordic Semiconductor nRF51/nRF52. and also support for the Espressif ESP32/ESP8266.

  • 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

Release 0.14.1

19 Aug 07:24
Compare
Choose a tag to compare

This is a patch release specifically for compatibility with Go 1.15.

  • command-line
    • support for Go 1.15
  • compiler
    • loader: work around Windows symlink limitation

Release 0.14.0

04 Aug 16:19
Compare
Choose a tag to compare

This is a big release with lots of small improvements. Some of the highlights include Go module support and the support for channel operations in interrupts for a few chips. This release also includes support for a number of new boards: the Adafruit Feather nRF52840 Express, the Adafruit PyGamer, the Sipeed MAix BiT with a 64-bit RISC-V MCU, the Teensy 3.6, the Seed WioTerminal, and the Seeed Xiao. Perhaps more interesting, it includes initial support for the Nintendo Switch.

  • 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 configuraton 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 suport
    • 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

Release 0.13.1

26 Apr 11:48
Compare
Choose a tag to compare

This is a patch release that fixes a few bugs in the previous 0.13.0 release related to the GC and in support for the GameBoy Advance.

  • 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

Release 0.13.0

14 Apr 17:52
Compare
Choose a tag to compare

This new release adds support for Go 1.14 and LLVM 10. It fixes a number of compiler and runtime bugs and also has had some significant refactoring in goroutine support. Perhaps most visible is that USB-CDC now works on all major OSes (Windows, macOS, and Linux) so that you can flash Adafruit boards without manually entering the bootloader.

This release adds support for five new boards: the Adafruit CLUE, Arduino Mega 2560, and the Particle Argon, Boron and Xenon.

Note that this release requires Go 1.14 to support WebAssembly.

Here is a detailed list of changes with this release:

  • 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

Release 0.12.0

31 Jan 13:24
1d913a6
Compare
Choose a tag to compare

This release incorporates a ton of smaller changes over more than a month. Notable changes are the addition of 3 new boards (Adafruit PyPortal, Adafruit Circuit Playground Bluefruit, Arduino Nano), improved support for interrupts, improved CGo support, and a number of improvements for the atsamd51 chip (for "M4" branded boards). Take a look below for a more detailed list of changes.

  • 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