Changelog History
Page 1
-
v0.16.0 Changes
November 18, 2020๐ 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 testsgdb
: add support for qemu-user targetstest
: support non-host teststest
: add support for -c and -o flagstest
: implement some benchmark stubs
- compiler
builder
: improve detection of clang on Fedoracompiler
: fix floating point comparison bugscompiler
: implement negate for complex numbersloader
: fix linkname in test binariestransform
: add missing return pointer restore for regular coroutine tail calls
- standard library
machine
: switch default frequency to 4MHzmachine
: clarify caller's responsibility inSetInterrupt
os
: addLookupEnv()
stubreflect
: implementSwapper
runtime
: fix UTF-8 decodingruntime
: gc: use raw stack access whenever possibleruntime
: use dedicated printfloat32runtime
: allow ranging over a nil mapruntime
: avoid device/nxp dependency in HardFault handlertesting
: implement dummy Helper methodtesting
: add Run method
- targets
arm64
: add support for SVCall intrinsicatsamd51
: avoid panic when configuring SPI with SDI=NoPinavr
: properly support the.rodata
sectionesp8266
: implementPin.Get
functionnintendoswitch
: fix crash when printing long lines (> 120)nintendoswitch
: add env parser and removed unused stuffnrf
: add I2C error checkingnrf
: give more flexibility in picking SPI speedsnrf
: fix nrf52832 flash sizestm32f103
: support wakeups from interruptsstm32f405
: add SPI supportstm32f405
: add I2C supportwasi
: add support for this targetwasi
: use 'generic' ABI by defaultwasi
: remove --no-threads flag from wasm-ldwasm
: add instanceof support for WebAssemblywasm
: use fixed length buffer for putchar
- boards
d1mini
: add this ESP8266 based boardesp32
: use board definitions instead of chip namesqtpy
: add board definition for Adafruit QTPyteensy40
: add this board
- command-line
-
v0.15.0 Changes
September 17, 2020๐ 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 formatscompiler
: improve display of goroutine wrappersinterp
: don't panic in the Store methodinterp
: replace some panics with error messagesinterp
: show error line in first line of the tracebackloader
: be more robust when creating the cached GOROOTloader
: rewrite/refactor much of the code to use go list directlyloader
: use ioutil.TempDir to create a temporary directorystacksize
: 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 Windowsarm
: automatically determine stack sizesarm64
: make dynamic loader structs and constants privateavr
: configure emulator in board filescortexm
: fix stack size calculation with interruptsflash
: add openocd settings to atsamd21 / atsamd51flash
: add openocd settings to nrf5microbit
: reelboard: flash using OpenOCD when needednintendoswitch
: Add dynamic loader for runtime loading PIE sectionsnintendoswitch
: fix import cycle on dynamic_arm64.gonintendoswitch
: Fix invalid memory read / write in print callsnintendoswitch
: simplified assembly codenintendoswitch
: support outputting .nro files directly
- boards
arduino-zero
: Adding support for the Arduino Zero (#1365)atsamd2x
: fix BAUD valueatsamd5x
: fix BAUD valuebluepill
: Enable stm32's USART2 for the board and map it to UART1 tinygo's devicedevice/atsamd51x
: add all remaining bitfield values for PCHCTRLm Mappingesp32
: add libgcc ROM functions to linker scriptesp32
: add SPI supportesp32
: add support for basic GPIOesp32
: add support for the Espressif ESP32 chipesp32
: configure the I/O matrix for GPIO pinsesp32
: export machine.PortMask* for bitbanging implementationsesp8266
: add support for this chipmachine/atsamd51x,runtime/atsamd51x
: fixes needed for full support for all PWM pins. Also adds some useful constants to clarify peripheral clock usagemachine/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 Bluefruitnrf
: call sd_app_evt_wait when the SoftDevice is enablednrf52840
: add build tags for SoftDevice supportnrf52840
: use higher priority for USB-CDC coderuntime/atsamd51x
: use PCHCTRL_GCLK_SERCOMX_SLOW for setting clocks on all SERCOM portsstm32f405
: add basic UART handlerstm32f405
: add STM32F405 machine/runtime, and new board/target feather-stm32f405
- ๐ build
all
: run test binaries in the correct directorybuild
: Fix arch release jobci
: runtinygo test
for known-working packagesci
: set git-fetch-depth to 1docker
: 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
- command-line
-
v0.14.1 Changes
August 19, 2020๐ 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
- command-line
-
v0.14.0 Changes
August 04, 2020๐ 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
- fix
- 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 Gointernal/task
: fix nil panic in (*internal/task.Stack).Popos
: add Args and stub it with mock dataos
: implement virtual filesystem supportreflect
: add Cap and Len support for map and chanruntime
: fix return address in scheduler on RISC-Vruntime
: avoid recursion in printuint64 functionruntime
: replace ReadRegister with AsmFull inline assemblyruntime
: fix compilation errors when using gc.extallocruntime
: add cap and len support for chansruntime
: refactor time handling (improving accuracy)runtime
: make channels work in interruptsruntime/interrupt
: add cross-chip disable/restore interrupt supportsync
: implementsync.Cond
sync
: add WaitGroup
- targets
arm
: allow nesting in DisableInterrupts and EnableInterruptsarm
: make FPU configuraton consistentarm
: do not mask fault handlers in critical sectionsatmega2560
: fix pin mapping for pins D2, D5 and the L portatsamd
: return an error when an incorrect PWM pin is usedatsamd
: add support for pin change interruptsatsamd
: add DAC supportatsamd21
: add more ADC pinsatsamd51
: fix ROM / RAM size on atsamd51j20atsamd51
: add more pinsatsamd51
: add more ADC pinsatsamd51
: add pin change interrupt settingsatsamd51
: extend pinPadMappingarduino-nano33
: use (U)SB flag to ensure that device can be found when not on default portarduino-nano33
: remove (d)ebug flag to reduce console noise when flashingavr
: use standard pin numberingavr
: unify GPIO pin/port codeavr
: add support for PinInputPullupavr
: work around codegen bug in LLVM 10avr
: fix target triplefe310
: remove extra println left in by mistakefeather-nrf52840
: add support for the Feather nRF52840maixbit
: add board definition and dummy runtimenintendoswitch
: Add experimental Nintendo Switch support without CRTnrf
: expose the RAM base addressnrf
: add support for pin change interruptsnrf
: add microbit-s110v8 targetnrf
: fix bug in SPI.Txnrf
: support debugging the PCA10056pygamer
: add Adafruit PyGamer suportriscv
: fix interrupt configuration bugriscv
: disable linker relaxations during gp initstm32f4disco
: add new target with ST-Link v2.1 debuggerteensy36
: add Teensy 3.6 supportwasm
: fix event handlingwasm
: add --no-demangle linker optionwioterminal
: add support for the Seeed Wio Terminalxiao
: add support for the Seeed XIAO
- command-line
-
v0.13.1 Changes
April 26, 2020๐ 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 sectionruntime
: copy stack scan assembly for GBA
- boards
gameboy-advance
: always use ARM mode instead of Thumb mode
- standard library
-
v0.13.0 Changes
April 14, 2020๐ 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.
๐ ARM builds (for the Raspberry Pi) will follow later.
๐ 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
- use
- 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
- mark the
- cgo
- make
-I
and-L
paths absolute
- make
- standard library
machine
: set the USB VID and PID to the manufacturer valuesmachine
: correct USB CDC composite descriptorsmachine
: moveerrors.New
calls to globalsruntime
: support operations on nil mapsruntime
: fix copy builtin return value on AVRruntime
: refactor goroutinesruntime
: support-scheduler=none
on most platformsruntime
: run package initialization in the main goroutineruntime
: exportmalloc
/free
for use from Cruntime
: add garbage collector that uses an external allocatorruntime
: scan callee-saved registers while marking the stackruntime
: remove recursion from conservative GCruntime
: fix blocking select on nil channelruntime/volatile
: includeReplaceBits
methodsync
: implement trivialsync.Map
- targets
arm
: use-fomit-frame-pointer
atmega1284
: support this chip for testing purposesatsamd51
: make QSPI available on all boardsatsamd51
: add support for ADC1atsamd51
: use new interrupt registration in UART codeattiny
: clean up pin definitionsavr
: use the correct RAM start addressavr
: pass the correct-mmcu
flag to the linkeravr
: add support for tasks scheduler (disabled by default)avr
: fix linker problem with overlapping program/data areasnrf
: fix typo in pin configuration optionsnrf
: add lib/nrfx/mdk to include dirsnrf52840
: implement USB-CDCriscv
: implement VirtIO target and add RISC-V integration testriscv
: add I2C support for the HiFive1 rev B boardstm32
: refactor GPIO pin handlingstm32
: refactor UART codestm32f4
: add SPIwasm
: support Go 1.14 (breaking previous versions)wasm
: supportsyscall/js.CopyBytesToJS
wasm
: sync polyfills from Go 1.14.
- boards
arduino-mega2560
: add the Arduino Mega 2560clue-alpha
: add the Adafruit CLUE Alphagameboy-advance
: enable debugging with GDBparticle-argon
: add the Particle Argon boardparticle-boron
: add the Particle Boron boardparticle-xenon
: add the Particle Xenon boardreelboard
: addreelboard-s140v7
SoftDevice target
- ๐ป command line
-
v0.12.0 Changes
January 31, 2020๐ 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
- add support for symbols in
- standard library
machine
: avoid bytes package in USB logicruntime
: fix external address declarationsruntime
: provide implementation forinternal/bytealg.IndexByte
- targets
atsamd51
: fix volatile usageatsamd51
: fix ADC, updating to 12-bits precisionatsamd51
: refactor SPI pin configuration to only look at pin numbersatsamd51
: switch UART to use new pin configurationatsamd51
: fix obvious bug in I2C codeatsamd51
: use only the necessary UART interruptsatsamd51
: refactor I2C pin handling to auto-detect pin modeavr
: use a garbage collectorfe310
: use CLINT peripheral for timekeepingfe310
: add support for PLIC interruptsfe310
: implement UART receive interruptsriscv
: support sleeping in QEMUriscv
: add bare-bones interrupt supportriscv
: print exception PC and codewasm
: implement memcpy and memsetwasm
: include wasi-libcwasm
: use wasi ABI for basic startup/stdout
- boards
arduino
: make avrdude command line compatible with Windowsarduino-nano
: add this boardarduino-nano33
: fix UART1 and UART2circuitplay-bluefruit
: add this boarddigispark
: add clock speed and pin mappingsgameboy-advance
: include compiler-rt in buildgameboy-advance
: implement interrupt handlerhifive1b
: add support for gdb subcommandpyportal
: add this boardpyportal
: remove manual SPI pin mapping as now handled by default
- ๐ป command line
-
v0.11.0 Changes
December 23, 2019๐ This release includes a few significant usability improvements: it bundles Clang in the release tarball, auto-detects the serial port on macOS, and adds support for
tinygo flash
on Windows. There are also other changes, such as the addition of the Adafruit PyBadge and a critical fix to RISC-V support.๐ Windows binaries will be uploaded soon, when the build is finished.
- ๐ป 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
- add support for QEMU in
- 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 forSPI.Tx()
on play.tinygo.orgmachine
: renameCPU_FREQUENCY
toCPUFrequency()
- targets
adafruit-pybadge
: add Adafruit Pybadgearduino-nano33
: allow simulation on play.tinygo.orgarduino-nano33
: fix default SPI pin numbers to be D13/D11/D12circuitplay-express
: allow simulation on play.tinygo.orghifive1-qemu
: add target for testing RISC-V bare metal in QEMUriscv
: fix heap corruption due to changes in LLVM 9riscv
: add support for compiler-rtqemu
: rename tocortex-m-qemu
- ๐ป command line
-
v0.10.0 Changes
November 26, 2019๐ This release adds support for blocking select, switches to LLVM 9, improves CGo support, improves support for the ATSAMD51 ("M4") chip, and generally has a lot of improvements and bug fixes throughout. It also adds support for a number of new boards: the Adafruit Feather M4, the Adafruit Metro M4 Express AirLift, the PineTime dev kit, and the "X9 Pro" smartwatch.
๐ง Note: binaries for linux/arm are still being built and will be added soon.
- ๐ป command line
- halt GDB after flashing with
gdb
subcommand - fix a crash when using
-ocd-output
- add
info
subcommand - add
-programmer
flag
- halt GDB after flashing with
- ๐ 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 alignmentruntime
: improve scheduler performance when no goroutines are queuedruntime
: add blocking selectruntime
: implement interface equality in non-trivial casesruntime
: add AdjustTimeOffset to update current timeruntime
: only implement CountString for required platformsruntime
: use MSP/PSP registers for scheduling on Cortex-M
- targets
arm
: add system timer registersatmega
: add port C GPIO supportatsamd21
: correct handling of pins >= 32atsamd21
: i2s initialization fixesatsamd51
: fix clock init codeatsamd51
: correct initialization for RTCatsamd51
: fix pin function selectionatsamd51
: pin method cleanupatsamd51
: allow setting pin mode for each of the SPI pinsatsamd51
: correct channel init and pin map for ADC based on ItsyBitsy-M4feather-m4
: add Adafruit Feather M4 boardhifive1b
: add support for SPI1hifive1b
: fix compiling in simulationlinux
: fix time on arm32metro-m4
: add support for Adafruit Metro M4 Express Airlift boardmetro-m4
: fixes for UART2pinetime-devkit0
: add support for the PineTime dev kitx9pro
: add support for this smartwatchpca10040-s132v6
: add support for SoftDevicepca10056-s140v7
: add support for SoftDevicearduino-nano33
: added SPI1 connected to NINA-W102 chip on Arduino Nano 33 IO
- ๐ป command line
-
v0.9.0 Changes
October 17, 2019๐ This release adds experimental support for Windows, updates to support Go 1.13, improves flashing experience of many boards (no more button pressing), and adds support for buffered channels. There are also lots of other smaller changes, see the list below.
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
- add
- standard library
machine
: do not check for nil slices inSPI.Tx
reflectlite
: add support for Go 1.13runtime
: implementinternal/bytealg.CountString
sync
: properly handle nilNew
func insync.Pool
- targets
arduino
: fix .bss section initializationfe310
: implementPin.Get
gameboy-advance
: support directly outputting .gba filessamd
: reduce code size by avoiding reflectionsamd21
: do not hardcode pin numbers for peripheralsstm32f103
: avoid issue withtime.Sleep
less than 200ยตs
- ๐ป command line