- general
- fix
GOOS=wasip1
fortinygo test
- add
-C DIR
flag - add initial documentation for project governance
- add
-ldflags='-extldflags=...'
support - improve usage message with
tinygo help
and when passing invalid parameters
- fix
- compiler
builder
: remove environment variables when invoking Clang, to avoid the environment changing the behaviorbuilder
: check for the Go toolchain version used to compile TinyGocgo
: addC.CBytes
implementationcompiler
: fix passing weirdly-padded structs as parameters to new goroutinescompiler
: support pragmas on generic functionscompiler
: do not let the slice buffer escape when casting a[]byte
or[]rune
to a string, to help escape analysiscompiler
: conform to the latest iteration of the wasm types proposalloader
: don't panic when main package is not named 'main'loader
: make sure we always return type checker errors even without type errorstransform
: optimize range over[]byte(string)
- standard library
crypto/x509
: add package stub to build crypto/x509 on macOSmachine/usb/adc/midi
: fixPitchBend
os
: addTruncate
stub for baremetalos
: add stubs foros.File
deadlinesos
: add internalnet.newUnixFile
for the net packageruntime
: stub runtime_{Before,After}Exec for linkageruntime
: randomize map accessesruntime
: supportmaps.Clone
runtime
: add more fields toMemStats
runtime
: implement newcoro, coroswitch to support package iterruntime
: disallow defer in interruptsruntime
: add support for os/signal on Linux and MacOSruntime
: add gc layout info for some basic types to help the precise GCruntime
: bump GC mark stack size to avoid excessive heap rescans
- targets
darwin
: use Go standard library syscall package instead of a custom onefe310
: support GPIOPinInput
mips
: fix compiler crash with GOMIPS=softfloat and defermips
: add big-endian (GOARCH=mips) supportmips
: use MIPS32 (instead of MIPS32R2) as the instruction set for wider compatibilitywasi
: add relative and absolute --dir options to wasmtime argswasip2
: add wasmtime -S args to support network interfaceswasm
: add//go:wasmexport
support (for all WebAssembly targets)wasm
: use precise instead of conservative GC for WebAssembly (including WASI)wasm-unknown
: add bulk memory flags since basically every runtime has it now
- boards
- add RAKwireless RAK4631
- add WaveShare ESP-C3-32S-Kit
- 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
flagtest
: 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 conditionbuilder
: add package ID to compiler and optimization error messagesbuilder
: show better error messages for some common linker errorscgo
: support preprocessor macros passed on the command linecgo
: use absolute paths for error messagescgo
: add support for printfloader
: handlego list
errors inside TinyGo (for better error messages)transform
: fix incorrect alignment of heap-to-stack transformtransform
: 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 ConnectionSTateinternal/abi
: implement initial version of this packagemachine
: use newinternal/binary
packagemachine
: rewrite Reply() to fix sending long replies in I2C Target Modemachine/usb/descriptor
: Reset joystick physicalmachine/usb/descriptor
: Drop second joystick hatmachine/usb/descriptor
: Add more HID... functionsmachine/usb/descriptor
: Fix encoding of valuesmachine/usb/hid/joystick
: Allow more hat switchesos
: addChown
,Truncate
os/user
: use stdlib version of this packagereflect
: return correct name for theunsafe.Pointer
typereflect
: implementType.Overflow*
functionsruntime
: implement dummygetAuxv
to satisfy golang.org/x/sys/runtime
: don't zero out new allocations for-gc=leaking
when they are already zeroedruntime
: simplify slice growing/appending coderuntime
: print a message when a fatal signal like SIGSEGV happensruntime/debug
: addGoVersion
todebug.BuildInfo
sync
: addMap.Clear()
sync/atomic
: add And* and Or* compiler intrinsics needed for Go 1.23syscall
: addFork
andExecve
syscall
: add all MacOS errno valuestesting
: stub outT.Deadline
unique
: implement custom (naive) version of the unique package
- targets
arm
: supportGOARM=*,softfloat
(softfloat support for ARM v5, v6, and v7)mips
: add linux/mipsle (and experimental linux/mips) supportmips
: addGOMIPS=softfloat
supportwasip2
: add WASI preview 2 supportwasm/js
: addnode:
prefix inrequire()
call of wasm_exec.jswasm-unknown
: make sure theos
package can be importedwasm-unknown
: remove import-memory flag
-
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 passedbuilder
: make sure wasm-opt command line is printed if askedcgo
: implement shift operations in preprocessor macrosinterp
: checking for methodset existence
- move
-
standard library
machine
: add__tinygo_spi_tx
function to simulatormachine
: fix simulator I2C supportmachine
: add GetRNG support to simulatormachine
: addTxFifoFreeLevel
for CANos
: addLink
os
: addFindProcess
for posixos
: addProcess.Release
for unixos
: addSetReadDeadline
stubos
,os/signal
: add signal stubsos/user
: add stubs forLookup{,Group}
andGroup
reflect
: use int inStringHeader
andSliceHeader
on non-AVR platformsreflect
: fixNumMethods
for Interface typeruntime
: skip negative sleep durations in sleepTicks
-
targets
esp32
: add I2C supportrp2040
: move UART0 and UART1 to common filerp2040
: make all RP2040 boards available for simulationrp2040
: fix timeUnit typestm32
: add i2cFrequency
andSetBaudRate
function for chips that were missing implementationwasm-unknown
: add math and memory builtins that LLVM needswasip1
: replace existing-target=wasi
support with wasip1 as supported in Go 1.21+
-
boards
adafruit-esp32-feather-v2
: add the Adafruit ESP32 Feather V2badger2040-w
: add support for the Badger2040 Wfeather-nrf52840-sense
: fix lack of LXFOm5paper
: add support for the M5 Papermksnanov3
: limit programming speed to 1800 kHznucleol476rg
: add stm32 nucleol476rg supportpico-w
: add the Pico W (which is near-idential to the pico target)thingplus-rp2040
,waveshare-rp2040-zero
: add WS2812 definitionpca10059-s140v7
: add this variant to the PCA10059 board
-
general
- update the
net
submodule to updated version withBuffers
implementation
- update the
-
compiler
syscall
: add wasm_unknown tag to some additional files so it can compile more code
-
standard library
runtime
: add Frame.Entry field
-
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 signedinterp
: return a proper error message when indexing out of range
- 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 instancescgo
: addC._Bool
typecgo
: fix calling CGo callback inside generic functioncompileopts
: setpurego
build tag by default so that more packages can be builtcompileopts
: force-enable CGo to avoid build issuescompiler
: fix crash on type assert on interfaces with no methodsinterp
: print LLVM instruction in tracebackinterp
: support runtime times by running them at runtimeloader
: 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 functionsinternal/task
,machine
: make TinyGo code usable with "big Go" CGomachine
: implementI2C.SetBaudRate
consistently across chipsmachine
: implementSPI.Configure
consistently across chipsmachine
: addDeviceID
for nrf, rp2040, sam, stm32machine
: use smaller UART buffer size on atmega chipsmachine/usb
: allow setting a serial number using a linker flagmath
: support more math functions on baremetal (picolibc) systemsnet
: replace entire net package with a new one based on the netdev driveros/user
: add bare-bones implementation of this packagereflect
: stubCallSlice
andFuncOf
reflect
: addTypeFor[T]
reflect
: updateIsZero
to Go 1.22 semanticsreflect
: move indirect values into interface when setting interfacesruntime
: stubBreakpoint
sync
: implement trylock
- targets
atmega
: use UART double speed mode for fewer errors and higher throughputatmega328pb
: refactor to enable extra uartavr
: don't compile large parts of picolibc (math, stdio) for LLVM 17 supportesp32
: switch over to the official SVD fileesp32c3
: implement USB_SERIAL for USBCDC communicationesp32c3
: implement I2Cesp32c3
: implement RNGesp32c3
: add more ROM functions and update linker script for the in-progress wifi supportesp32c3
: update to newer SVD filesrp2040
: add support for UART hardware flow controlrp2040
: add definition formachine.PinToggle
rp2040
: set XOSC startup delay multipliersamd21
: add support for UART hardware flow controlsamd51
: add support for UART hardware flow controlwasm
: increase default stack size to 64k for wasi/wasm targetswasm
: bump wasi-libc version to SDK 20wasm
: remove line of dead code in wasm_exec.js
- new targets/boards
qtpy-esp32c3
: add Adafruit QT Py ESP32-C3 boardmksnanov3
: add support for the MKS Robin Nano V3.xnrf52840-generic
: add generic nrf52840 chip supportthumby
: add support for Thumbywasm
: add newwasm-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
: addninafw
build tag and some constants for BLE supportgopher-badge
: fix typo in USB product namenano-rp2040
: add UART1 and correct mappings for NINA via UARTpico
: bump default stack size from 2kB to 8kBwioterminal
: expose UART4
- general
- add LLVM 16 support, use it by default
- compiler
build
: work around a race condition by building Go SSA seriallycompiler
: fix a crash by not using the LLVM global context typesinterp
: don't copy unknown values inruntime.sliceCopy
to fix miscompileinterp
: fix crash in error report by not returning raw LLVM values
- standard library
machine/usb/adc/midi
: various improvements and API changesreflect
: add support for[...]T
→[]T
in reflect
- targets
atsamd21
,atsamd51
: add support for USB INTERRUPT OUTrp2040
: always use the USB device enumeration fix, even in chips that supposedly have the HW fixwasm
: 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
- 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 intinygo info
outputmain
: improve detection of filesystemsmain
: usego 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 functiontools/gen-device-svd
: small changes needed for Renesas MCUs
- compiler
builder
: update message for max supported Go versioncompiler,reflect
: NumMethods reports exported methods onlycompiler
: add compiler-rt and wasm symbols to tablecompiler
: add compiler-rt to wasm.jsoncompiler
: add min and max builtin supportcompiler
: implement clear builtin for mapscompiler
: implement clear builtin for slicescompiler
: improve panic message when a runtime call is unavailablecompiler
: update .ll test outputloader
: merge go.env file which is now required starting in Go 1.21 to correctly get required packages
- standard library
os
: define ErrNoDeadlinereflect
: Add FieldByNameFuncreflect
: add SetZeroreflect
: fix iterating over maps with interface{} keysreflect
: implement Value.Growreflect
: remove unnecessary heap allocationsreflect
: use .key() instead of a type assertsync
: add implementation from upstream Go for OnceFunc, OnceValue, and OnceValues
- targets
machine
: UART refactor (#3832)machine/avr
: pin change interruptmachine/macropad_rp2040
: add machine.BUTTONmachine/nrf
: add I2C timeoutmachine/nrf
: wait for stop condition after reading from the I2C busmachine/nRF52
: set SPI TX/RX lengths even data is empty. Fixes #3868 (#3877)machine/rp2040
: add missing suffix to CMD_READ_STATUSmachine/rp2040
: add NoPin supportmachine/rp2040
: move flash related functions into separate file from C imports for correct - LSP. Fixes #3852machine/rp2040
: wait for 1000 us after flash reset to avoid issues with busy USB busmachine/samd51,rp2040,nrf528xx,stm32
: implement watchdogmachine/samd51
: fix i2cTimeout was decreasing due to cache activationmachine/usb
: Add support for HID Keyboard LEDsmachine/usb
: allow USB Endpoint settings to be changed externallymachine/usb
: refactor endpoint configurationmachine/usb
: remove usbDescriptorConfigmachine/usb/hid,joystick
: fix hidreport (3) (#3802)machine/usb/hid
: add RxHandler interfacemachine/usb/hid
: rename Handler() to TxHandler()wasi
: allow zero inodes when reading directorieswasm
: add support for GOOS=wasip1wasm
: fix functions exported through //exportwasm
: remove i64 workaround, use BigInt insteadexample
: adjust time offsetexample
: simplify pininterrupt
- boards
targets
: add AKIZUKI DENSHI AE-RP2040targets
: adding new uf2 target for PCA10056 (#3765)
- 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 printok
for a successful compile-only
- compiler
builder
: remove non-ThinLTO build modebuilder
: fail earlier if Go is not availablebuilder
: improve-size=full
in a number of waysbuilder
: implement Nordic DFU file writer in Gocgo
: allowLDFLAGS: --export=...
compiler
: support recursive slice typescompiler
: zero struct padding during map operationscompiler
: add llvm.ident metadatacompiler
: removeunsafe.Pointer(uintptr(v) + idx)
optimization (useunsafe.Add
instead)compiler
: add debug info to//go:embed
data structures for better-size
outputcompiler
: add debug info to string constantscompiler
: fix a minor race conditioncompiler
: emit correct alignment in debug info for global variablescompiler
: correctly generate reflect data for local named typescompiler
: add alloc attributes toruntime.alloc
, reducing flash usage slightlycompiler
: for interface maps, use the original named type if availablecompiler
: implement most math/bits functions as LLVM intrinsicscompiler
: ensure all defers have been seen before creating rundefers
- standard library
internal/task
: disallow blocking inside an interruptmachine
: addCPUReset
machine/usb/hid
: add MediaKey supportmachine/usb/hid/joystick
: move joystick under HIDmachine/usb/hid/joystick
: allow joystick settings overridemachine/usb/hid/joystick
: handle case where we cannot find the correct HID descriptormachine/usb/hid/mouse
: add support for mouse back and forwardmachine/usb
: add ability to override default VID, PID, manufacturer name, and product namenet
: added missingTCPAddr
andUDPAddr
implementationsos
: add IsTimeout functionos
: fix resource leak in(*File).Close
os
: add(*File).Sync
os
: implement(*File).ReadDir
for wasios
: implement(*File).WriteAt
reflect
: make sure null bytes are supported in tagsreflect
: refactor this package to enable many new featuresreflect
: add map type methods:Elem
andKey
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 forType.Method
,CanConvert
,ArrayOf
,StructOf
,MapOf
reflect
: add stubs for channel select routines/typesreflect
: allow nil rawType to call Kind()reflect
: ensure all ValueError panics have Kind fieldsreflect
: add support for named typesreflect
: improveValue.String()
reflect
: setIndex
andPkgPath
field inType.Field
reflect
:Type.AssignableTo
: you can assign anything tointerface{}
reflect
: add type check toValue.Field
reflect
: letTypeOf(nil)
return nilreflect
: moveStructField.Anonymous
field to match upstream locationreflect
: addUnsafePointer
for Func typesreflect
:MapIter.Next
needs to allocate new keys/values every timereflect
: fixIsNil
for interfacesreflect
: fixType.Name
to return an empty string for non-named typesreflect
: addVisibleFields
reflect
: properly handle embedded structsreflect
: make surePointerTo
works for named typesreflect
:Set
: convert non-interface to interfacereflect
:Set
: fix direction of assignment checkreflect
: support channel directionsreflect
: print struct tags in Type.String()reflect
: properly handle read-only valuesruntime
: allow custom-gc SetFinalizer and clarify KeepAliveruntime
: implement KeepAlive using inline assemblyruntime
: check for heap allocations inside interruptsruntime
: properly turn pointer into empty interface when hashingruntime
: improve map size hint usageruntime
: zero map key/value on deletion to so GC doesn't see themruntime
: print the address where a panic happenedruntime/debug
: stubSetGCPercent
,BuildInfo.Settings
runtime/metrics
: add this package as a stubsyscall
:Stat_t
timespec fields are Atimespec on darwinsyscall
: addTimespec.Unix()
for wasisyscall
: add fsync using libctesting
: support -test.counttesting
: make test output unbuffered when verbosetesting
: add -test.skiptesting
: move runtime.GC() call to runN to match upstreamtesting
: add -test.shuffle to order randomize test and benchmark order
- targets
arm64
: fix register save/restore to include vector registersattiny1616
: add support for this chipcortexm
: refactor EnableInterrupts and DisableInterrupts to avoidarm.AsmFull
cortexm
: enable functions in RAM for go & cgocortexm
: convert SystemStack fromAsmFull
to C inline assemblycortexm
: fix crash due to wrong stack size offsetnrf
: samd21, stm32: add flash APInrf
: fix memory issue in ADC readnrf
: new peripheral type for nrf528xx chipsnrf
: implement target modenrf
: improve ADC and add oversampling, longer sample time, and reference voltagerp2040
: change calling order for device enumeration fix to do firstrp2040
: rtc delayed interruptrp2040
: provide better errors for invalid pins on I2C and SPIrp2040
: change uart to allow for a single pinrp2040
: implement Flash interfacerp2040
: remove SPIDataBits
propertyrp2040
: unify all linker scripts using LDFLAGSrp2040
: remove SPI deadline for improved performancerp2040
: use 4MHz as default frequency for SPIrp2040
: implement target moderp2040
: use DMA for send-only SPI transferssamd21
: rearrange switch case for get pin cfgsamd21
: fix issue with WS2812 driver by making pin accesses fastersamd51
: enable CMCC cache for greatly improved performancesamd51
: remove extra BK0RDY clearsamd51
: implement Flash interfacesamd51
: use correct SPI frequencysamd51
: remove extra BK0RDY clearsamd51
: fix ADC multisamplingwasi
: allow users to set theruntime_memhash_tsip
orruntime_memhash_fnv
build tagswasi
: setWASMTIME_BACKTRACE_DETAILS
when running in wasmtime.wasm
: implement the//go:wasmimport
directive
- boards
gameboy-advance
: switch to use register definitions in device/gbagameboy-advance
: rename display and make pointer receiversgopher-badge
: Added Gopher Badge supportlorae5
: add needed definition for UART2lorae5
: correct mapping for I2C bus, add pin mapping to enable powerpinetime
: update the target file (rename from pinetime-devkit0)qtpy
: fix bad pin assignmentwioterminal
: fix pin definition of BCM13xiao
: Pins D4 & D5 are I2C1. Use pins D2 & D3 for I2C0.xiao
: add DefaultUART
- 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 -xmain
: fix error message when a serial port can't be accessedmain
: add-timeout
flag to allow setting how long TinyGo will try looking for a MSD volume for flashingtest
: print PASS on pass when running standalone test binariestest
: fix printing of benchmark outputtest
: print package name when compilation failed (not just when the test failed)
- compiler
- refactor to support LLVM 15
builder
: print compiler commands while building a librarycompiler
: fix stack overflow when creating recursive pointer types (fix for LLVM 15+ only)compiler
: allow map keys and values of ≥256 bytescgo
: add support forC.float
andC.double
cgo
: support anonymous enums included in multiple Go filescgo
: add support for bitwise operatorsinterp
: add support for constant icmp instructionstransform
: fix memory corruption issues
- standard library
machine/usb
: remove allocs in USB ISRmachine/usb
: addPort()
and deprecateNew()
to have the API better match the singleton that is actually being returnedmachine/usb
: change HID usage-maximum to 0xFFmachine/usb
: add USB HID joystick supportmachine/usb
: change to not send before endpoint initializationnet
: implementPipe
os
: add stub foros.Chtimes
reflect
: stub outType.FieldByIndex
reflect
: addValue.IsZero
methodreflect
: fix bug in.Field
method when the field fits in a pointer but the parent doesn'truntime
: switch somepanic()
calls in the gc toruntimePanic()
for consistencyruntime
: add xorshift-based fastrand64runtime
: fix alignment for arm64, arm, xtensa, riscvruntime
: implement precise GCruntime/debug
: stubPrintStack
sync
: implement simple pooling insync.Pool
syscall
: stubbedSetuid
, Exec and friendssyscall
: add more stubs as needed for Go 1.20 supporttesting
: implementt.Setenv
unsafe
: add support for Go 1.20 slice/string functions
- targets
all
: do not set stack size per boardall
: update picolibc to v1.7.9atsame5x
: fix CAN extendedID handlingatsame5x
: reduce heap allocationavr
: drop GNU toolchain dependencyavr
: fix .data initialization for binaries over 64kBavr
: support ThinLTObaremetal
: implements callocdarwin
: fixsyscall.Open
on darwin/arm64darwin
: fix error withtinygo lldb
esp
: use LLVM Xtensa linker instead of Espressif toolchainesp
: use ThinLTO for Xtensaesp32c3
: add SPI supportlinux
: include muslgetpagesize
function in releasenrf51
: add ADC implementationnrf52840
: add PDM supportriscv
: add "target-abi" metadata flagrp2040
: remove mem allocation in GPIO ISRrp2040
: avoid allocating clock on heaprp2040
: add basic GPIO support for PIOrp2040
: fix USB interrupt issuerp2040
: fix RP2040-E5 USB erratastm32
: always set ADC pins to pullups floatingstm32f1
,stm32f4
: fix ADC by clearing the correct bit for rank after each readstm32wl
: Fix incomplete RNG initialisationstm32wlx
: change order for init so clock speeds are set before peripheral startwasi
: makes wasmtime "run" explicitwasm
: fix GC scanning of allocaswasm
: allow custom malloc implementationwasm
: remove-wasm-abi=
flag (use-target
instead)wasm
: fix scanning of the stackwasm
: fix panic when allocating 0 bytes using mallocwasm
: always run wasm-opt even with-scheduler=none
wasm
: avoid miscompile with ThinLTOwasm
: allow the emulator to expand{tmpDir}
wasm
: support ThinLTOwindows
: update mingw-w64 version to avoid linker warningwindows
: add ARM64 support
- boards
- Add Waveshare RP2040 Zero
- Add Arduino Leonardo support
- Add Adafruit KB2040
- Add Adafruit Feather M0 Express
- Add Makerfabs ESP32C3SPI35 TFT Touchscreen board
- Add Espressif ESP32-C3-DevKit-RUST-1 board
lgt92
: fix OpenOCD configurationxiao-rp2040
: fix D9 and D10 constantsxiao-rp2040
: add pin definitions
- general
- remove support for LLVM 13
- remove calls to deprecated ioutil package
- move from
os.IsFoo
toerrors.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 functionscgo
: fix panic when FuncType.Results is nilcompiler
: add aliases foredwards25519/field.feMul
andfield.feSquare
compiler
: fix incorrect DWARF type in some generic parameterscompiler
: use LLVM math builtins everywherecompiler
: replace some math operation bodies with LLVM intrinsicscompiler
: replace math aliases with intrinsicscompiler
: fixunsafe.Sizeof
for chan and map valuescompileopts
: use tags parser from buildutilcompileopts
: use backticks for regexp to avoid extra escapescompileopts
: fail fast on duplicate values in target field slicescompileopts
: fix windows/arm target triplecompileopts
: improve error handling when loading target/*.jsoncompileopts
: add support for stlink-dap programmercompileopts
: do not complain about-no-debug
on MacOSgoenv
: supportGOOS=android
interp
: fix reading from external globalloader
: fix link error forcrypto/internal/boring/sig.StandardCrypto
- standard library
- rename assembly files to .S extension
machine
: add PWM peripheral comments to pinsmachine
: improve UARTParity slightlymachine
: do not export DFU_MAGIC_* constants on nrf52840machine
: renamePinInputPullUp
/PinInputPullDown
machine
: addKHz
,MHz
,GHz
constants, deprecateTWI_FREQ_*
constantsmachine
: remove level triggered pin interruptsmachine
: do not exposeRESET_MAGIC_VALUE
machine
: useNoPin
constant where appropriate (instead of0
for example)net
: sync net.go with Go 1.18 stdlibos
: addSyscallError.Timeout
os
: addErrProcessDone
errorreflect
: implementCanInterface
and fix stringIndex
runtime
: makeMemStats
available to leaking collectorruntime
: addMemStats.TotalAlloc
runtime
: addMemStats.Mallocs
andFrees
runtime
: add support fortime.NewTimer
andtime.NewTicker
runtime
: implementresetTimer
runtime
: ensure some headroom for the GC to runruntime
: make gc and scheduler asserts settable with build tagsruntime/pprof
: addWriteHeapProfile
runtime/pprof
:runtime/trace
: stub some additional functionssync
: implementMap.LoadAndDelete
syscall
: group WASI consts by purposesyscall
: add WASI{D,R}SYNC
,NONBLOCK
FD flagssyscall
: add ENOTCONN on darwintesting
: add support for -benchmem
- targets
- remove USB vid/pid pair of bootloader
esp32c3
: remove unusedUARTStopBits
constantsnrf
: implementGetRNG
functionnrf
:rp2040
: addmachine.ReadTemperature
nrf52
: cleanup s140v6 and s140v7 uf2 targetsrp2040
: implement semi-random RNG based on ROSC based on pico-sdkwasm
: add summary of wasm examples and fix callback bugwasm
: do not allow undefined symbols (--allow-undefined
)wasm
: make sure buffers returned bymalloc
are kept untilfree
is calledwindows
: 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 tagshifive1-qemu
: remove this emulated boardwioterminal
: add UART3 for RTL8720DNxiao-ble
: fix usbpid
- command line
- change to ignore PortReset failures
- compiler
compiler
: darwin/arm64 is aarch64, not armcompiler
: don't clobber X18 and FP registers on darwin/arm64compiler
: fix issue with methods on generic structscompiler
: do not try to build generic functionscompiler
: fix type names for generic named structscompiler
: fix multiple defined function issue for generic functionscompiler
: implementunsafe.Alignof
andunsafe.Sizeof
for generic code
- standard library
machine
: add DTR and RTS to Serialer interfacemachine
: reorder pin definitions to improve pin list on tinygo.orgmachine/usb
: add support for MIDImachine/usb
: adjust buffer alignment (samd21, samd51, nrf52840)machine/usb/midi
: addNoteOn
,NoteOff
, andSendCC
methodsmachine/usb/midi
: add definition of MIDI note numberruntime
: add benchmarks for memhashruntime
: add support for printing slices via print/println
- targets
avr
: fix some apparent mistake in atmega1280/atmega2560 pin constantsesp32
: provide hardware pin constantsesp32
: fix WDT reset on the MCH2022 badgeesp32
: optimize SPI transmitesp32c3
: provide hardware pin constantsesp8266
: provide hardware pin constants likeGPIO2
nrf51
: define and useP0_xx
constantsnrf52840
,samd21
,samd51
: unify bootloader entry processnrf52840
,samd21
,samd51
: change usbSetup and sendZlp to publicnrf52840
,samd21
,samd51
: refactor handleStandardSetup and initEndpointnrf52840
,samd21
,samd51
: improve usb-device initializationnrf52840
,samd21
,samd51
: move usbcdc to machine/usb/cdcrp2040
: add usb serial vendor/product IDrp2040
: add support for usbrp2040
: change default for serial to usbrp2040
: add support formachine.EnterBootloader
rp2040
: turn off pullup/down when input type is not specifiedrp2040
: make picoprobe default openocd interfacesamd51
: add support forDAC1
samd51
: improve TRNGwasm
: stubruntime.buffered
,runtime.getchar
wasi
: make leveldb runtime hash the default
- boards
- add Challenger RP2040 LoRa
- add MCH2022 badge
- add XIAO RP2040
clue
: remove pinsD21
..D28
feather-rp2040
,macropad-rp2040
: fix qspi-flash settingsxiao-ble
: add support for flash-1200-bps-resetgopherbot
,gopherbot2
: add these aliases to simplify for newer users
- 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 Windowsbuilder
: free LLVM objects after use, to reduce memory leakingbuilder
: improve-no-debug
error messagescgo
: be more strict: CGo now requires every Go file to import the headers it needscompiler
: alignof(func) is 1 pointer, not 2compiler
: add support for type parameters (aka generics)compiler
: implementrecover()
built-in functioncompiler
: support atomic, volatile, and LLVM memcpy-like functions in defercompiler
: drop support for macos syscalls via inline assemblyinterp
: do not try to interpret past task.Pause()interp
: fix some buggy localValue handlinginterp
: do not unroll loopstransform
: fix MakeGCStackSlots that caused a possible GC bug on WebAssembly
- standard library
os
: enable os.Stdin for baremetal targetreflect
: addValue.UnsafePointer
methodruntime
: scan GC globals conservatively on Windows, MacOS, Linux and Nintendo Switchruntime
: add per-map hash seedsruntime
: handle nil map write panicsruntime
: add stronger hash functionssyscall
: implementGetpagesize
- targets
atmega2560
: support UART1-3 + example for uartavr
: use compiler-rt for improved float64 supportavr
: simplify timer-based timeavr
: fix race condition in stack writedarwin
: add support forGOARCH=arm64
(aka Apple Silicon)darwin
: support-size=short
and-size=full
flagrp2040
: replace sleep 'busy loop' with timer alarmrp2040
: align api forPortMaskSet
,PortMaskClear
rp2040
: fix GPIO interruptssamd21
,samd51
,nrf52840
: add support for USBHID (keyboard / mouse)wasm
: update wasi-libc versionwasm
: use newer WebAssembly features
- boards
- add Badger 2040
matrixportal-m4
: attach USB DP to the correct pinteensy40
: add I2C supportwioterminal
: fix I2C definition
- command line
- add
-work
flag - add Go 1.18 support
- add LLVM 14 support
run
: add support for command-line parametersbuild
: calculate default output path if-o
is not specifiedbuild
: add JSON outputtest
: support multiple test binaries with-c
test
: support flags like-v
on all targets (including emulated firmware)
- add
- compiler
- add support for ThinLTO
- use compiler-rt from LLVM
builder
: prefer GNU build ID over Go build ID for cachingbuilder
: add support for cross compiling to Darwinbuilder
: support machine outlining pass in stacksize calculationbuilder
: disable asynchronous unwind tablescompileopts
: fix emulator configuration on non-amd64 Linux architecturescompiler
: move allocations > 256 bytes to the heapcompiler
: fix incorrectunsafe.Alignof
on some 32-bit architecturescompiler
: accept alias for slicecap
builtincompiler
: allow slices of empty structscompiler
: fix difference in aliases in interface methodscompiler
: makeRawSyscall
an alias forSyscall
compiler
: remove support for memory references inAsmFull
loader
: only add Clang header path for CGotransform
: fix poison value in heap-to-stack transform
- standard library
internal/fuzz
: add this package as a shimos
: implement readdir for darwin and linuxos
: addDirFS
, which is used by many programs to access readdir.os
: isWine: be compatible with older versions of wine, tooos
: implementRemoveAll
os
: Use auintptr
forNewFile
os
: add stubs forexec.ExitError
andProcessState.ExitCode
os
: export correct values forDevNull
for each OSos
: improve support forSignal
by fixing various bugsos
: implementFile.Fd
methodos
: implementUserHomeDir
os
: addexec.ProcessState
stubos
: implementPipe
for darwinos
: define stubErrDeadlineExceeded
reflect
: add stubs for more missing methodsreflect
: renamereflect.Ptr
toreflect.Pointer
reflect
: addValue.FieldByIndexErr
stubruntime
: fix various small GC bugsruntime
: use memzero for leaking collector instead of manually zeroing objectsruntime
: implementmemhash
runtime
: implementfastrand
runtime
: add stub fordebug.ReadBuildInfo
runtime
: add stub forNumCPU
runtime
: don't inlineruntime.alloc
with-gc=leaking
runtime
: addVersion
runtime
: add stubs forNumCgoCall
andNumGoroutine
runtime
: stub {Lock,Unlock}OSThread on Windowsruntime
: be able to deal with a very small heapsyscall
: makeEnviron
return a copy of the environmentsyscall
: implement getpagesize and munmapsyscall
:wasi
: defineMAP_SHARED
andPROT_READ
syscall
: stub mmap(), munmap(), MAP_SHARED, PROT_READ, SIGBUS, etc. on nonhosted targetssyscall
: darwin: more complete list of signalssyscall
:wasi
: more complete list of signalssyscall
: stubWaitStatus
syscall/js
: allow copyBytesTo(Go|JS) to useUint8ClampedArray
testing
: implementTempDir
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 SPIesp
: support CGoesp32c3
: add support for input pinesp32c3
: add support for GPIO interruptsesp32c3
: add support to receive UART datarp2040
: fix PWM bug at high frequencyrp2040
: fix some minor I2C bugsrp2040
: fix incorrect inline assemblyrp2040
: fix spurious i2c STOP during write+read transactionrp2040
: improve ADC supportwasi
: remove--export-dynamic
linker flagwasm
: remove heap allocator from wasi-libc
- boards
circuitplay-bluefruit
: move pin mappings so board can be compiled for WASM use in Playgroundesp32-c3-12f
: add the ESP32-C3-12f Kitm5stamp-c3
: add pin setting of UARTmacropad-rp2040
: add the Adafruit MacroPad RP2040 boardnano-33-ble
: typo in LPS22HB peripheral definition and documentation (#2579)teensy41
: add the Teensy 4.1 boardteensy40
: add ADC supportteensy40
: add SPI supportthingplus-rp2040
: add the SparkFun Thing Plus RP2040 boardwioterminal
: add DefaultUARTwioterminal
: verify written data when flashing through OpenOCDxiao-ble
: add XIAO BLE nRF52840 support
- 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 emulatorsinfo
: add JSON output using the-json
flag
- compiler
builder
: fix off-by-one in size calculationbuilder
: handle concurrent library header renamebuilder
: use flock to avoid double-compilesbuilder
: use build ID as cache keybuilder
: add -fno-stack-protector to musl buildbuilder
: update clang header search path to look in /usr/libbuilder
: explicitly disable unwind tables for ARMcgo
: add support forC.CString
and related functionscompiler
: fix ranging over maps with particular map typescompiler
: add correct debug location to init instructionscompiler
: fix emission of large object layoutscompiler
: work around AVR atomics bugscompiler
: predeclare runtime.trackPointerinterp
: work around AVR function pointers in globalsinterp
: run goroutine starts and checks at runtimeinterp
: always run atomic and volatile loads/stores at runtimeinterp
: bump timeout to 180 secondsinterp
: handle type assertions on nil interfacesloader
: eliminate goroot cache inconsistencyloader
: respect $GOROOT when runninggo list
transform
: allocate the correct amount of bytes in an allocatransform
: remove switched func lowering
- standard library
crypto/rand
: show error if platform has no rngdevice/*
: add*_Msk
field for each bit field and avoid duplicatesdevice/*
: provide Set/Get for each register field described in the SVD filesinternal/task
: swap stack chain when switching goroutinesinternal/task
: remove-scheduler=coroutines
machine
: addDevice
string constantnet
: add bare Interface implementationnet
: add net.Buffersos
: stub out support for some featuresos
: obey TMPDIR on unix, TMP on Windows, etcos
: implementReadAt
,Mkdir
,Remove
,Stat
,Lstat
,CreateTemp
,MkdirAll
,Chdir
,Chmod
,Clearenv
,Unsetenv
,Setenv
,MkdirTemp
,Rename
,Seek
,ExpandEnv
,Symlink
,Readlink
os
: implementFile.Stat
os
: fixIsNotExist
on nonexistent pathos
: fix opening files on WASI in read-only modeos
: work around lack ofsyscall.seek
on 386 and armreflect
: make sure indirect pointers are handled correctlyruntime
: allow comparing interfacesruntime
: use LLVM intrinsic to read the stack pointerruntime
: strengthen hashmap hash function for structs and arraysruntime
: fix float/complex hashingruntime
: fix nil map dereferenceruntime
: add realloc implementation to GCsruntime
: handle negative sleep timesruntime
: correct GC scan boundsruntime
: remove extalloc GCrumtime
: implement__sync
libcalls as critical sections for most microcontrollersruntime
: add stubs forFunc.FileLine
andFrame.PC
sync
: fix concurrent read-lock on write-locked RWMutexsync
: add a package docsync
: add testssyscall
: add support forMmap
andMprotect
syscall
: fix array size for mmap slice creationsyscall
: enableGetwd
in wasitesting
: add a stub forCoverMode
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 doestesting
: implement testing.Cleanuptesting
: allow filtering subbenchmarks with the-bench
flagtesting
: implement-benchtime
flagtesting
: print durationtesting
: allow filtering of subtests using-run
- targets
all
: change LLVM features to match vanilla Clangavr
: use interrupt-based timer which is much more accuratenrf
: fix races in I2Csamd51
: implement TRNG for randomnessstm32
: pull-up on I2C linesstm32
: fix timeout for i2c commsstm32f4
,stm32f103
: initial implementation for ADCstm32f4
,stm32f7
,stm32l0x2
,stm32l4
,stm32l5
,stm32wl
: TRNG implementation in crypto/randstm32wl
: add I2C supportwindows
: add support for the-size=
flagwasm
: add support fortinygo 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 pinsstm32f4disco
: add definitions for ADC pinsstm32l552ze
: use supported stlink interfacemicrobit-v2
: add some pin definitions
- command line
- drop support for LLVM 10
build
: drop support for LLVM targets in the -target flagbuild
: fix paths in error messages on Windowsbuild
: add -p flag to set parallelismlldb
: implementtinygo lldb
subcommandtest
: use emulator exit code instead of parsing test outputtest
: pass testing arguments to wasmtime
- compiler
- use -opt flag for optimization level in CFlags (-Os, etc)
builder
: improve accuracy of the -size=full flagbuilder
: hardcode some more frame sizes for _aeabi* functionsbuilder
: add support for -size= flag for WebAssemblycgo
: fix line/column reporting in syntax error messagescgo
: support function definitions in CGo headerscgo
: implement rudimentary C array decayingcgo
: add support for stdio in picolibc and wasi-libccgo
: run CGo parser per file, not per CGo fragmentcompiler
: fix unintentionally exported math functionscompiler
: properly implement div and rem operationscompiler
: add support for recursive function typescompiler
: add support for thego
keyword on interface methodscompiler
: add minsize attribute for -Ozcompiler
: add "target-cpu" and "target-features" attributescompiler
: fix indices into strings and arrayscompiler
: fix string compare functionsinterp
: simplify some code to avoid some errorsinterp
: support recursive globals (like linked lists) in globalsinterp
: support constant globalsinterp
: fix reverting of extractvalue/insertvalue with multiple indicestransform
: 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 outputnet
,syscall
: Reduce code duplication by switching to internal/itoa.os
: don't try to read executable path on baremetalos
: implement Getwdos
: add File.WriteString and File.WriteAtreflect
: fix type.Size() to account for struct paddingreflect
: don't construct an interface-in-interface valuereflect
: implement Value.Elem() for interface valuesreflect
: fix Value.Index() in a specific casereflect
: add support for DeepEqualruntime
: add another set of invalid unicode runes to encodeUTF8()runtime
: only initialize os.runtime_args when neededruntime
: only use CRLF on baremetal systems for printlnruntime/debug
: stubdebug.SetMaxStack
runtime/debug
: stubdebug.Stack
testing
: add a stub for t.Parallel()testing
: add support for -test.short flagtesting
: stub B.ReportAllocs()testing
: addtesting.Verbose
testing
: stubtesting.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 peripheralsatsam
: move I2S0 to machine fileesp32
: fix SPI configurationesp32c3
: add support for GDB debuggingesp32c3
: add support for CPU interruptsesp32c3
: use tasks scheduler by defaultfe310
: increase CPU frequency from 16MHz to 320MHzfe310
: add support for bit banging driverslinux
: build static binaries using musllinux
: reduce binary size by callingwrite
instead ofputchar
linux
: add support for GOARMriscv
: implement 32-bit atomic operationsriscv
: align the heap to 16 bytesriscv
: switch to tasks-based schedulerrp2040
: add CPUFrequency()rp2040
: improve I2C baud rate configurationrp2040
: add pin interrupt APIrp2040
: refactor PWM code and fix Period calculationstm32f103
: fix SPIstm32f103
: make SPI frequency selection more flexibleqemu
: signal correct exit code to QEMUwasi
: run C/C++ constructors at startupwasm
: ensure heapptr is alignedwasm
: update wasi-libc dependencywasm
: wasi: use asyncifywasm
: support-scheduler=none
windows
: add support for Windows (amd64 only for now)
- boards
feather-stm32f405
,feather-rp2040
: add I2C pin namesm5stack-core2
: add M5Stack Core2nano-33-ble
: SoftDevice s140v7 supportnano-33-ble
: add constants for more on-board pins
- 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 commandbuilder:
strip debug information at link time instead of at compile timebuilder:
add missing error check forioutil.TempFile()
builder:
simplify running of jobscompiler:
move LLVM math builtin support into the compilercompiler:
move math aliases from the runtime to the compilercompiler:
add aliases for many hashing packagescompiler:
add*ssa.MakeSlice
bounds testscompiler:
fix max possible slicecompiler:
add support for new language features of Go 1.17compiler:
fix equally named structs in different scopescompiler:
avoid zero-sized alloca in channel operationsinterp:
don't ignore array indices for untyped objectsinterp:
keep reverted package initializers in orderinterp:
fix bug in compiler-time/run-time package initializersloader:
fix panic in CGo files with syntax errorstransform:
improve GC stack slot pass to work around a bug
- standard library
crypto/rand
: switch toarc4random_buf
math:
fixmath.Max
andmath.Min
math/big
: fix undefined symbols errornet:
add MAC address implementationos:
implementos.Executable
os:
addSEEK_SET
,SEEK_CUR
, andSEEK_END
reflect:
add StructField.IsExported methodruntime:
reset heapptr to heapStart after preinit()runtime:
addsubsections_via_symbols
to assembly files on darwintesting:
add subset implementation of Benchmarktesting:
test testing package usingtinygo test
testing:
add support for the-test.v
flag
- targets
386:
bump minimum requirement to the Pentium 4arm:
switch to Thumb instruction set on ARMatsamd:
fix copy-paste error for atsamd21/51 calibTrim blockbaremetal
,wasm
: support command line params and environment variablescortexm:
fix stack overflow because of unaligned stacksesp32c3:
add support for the ESP32-C3 from Espressifnrf52840:
fix ram sizenxpmk66f18:
fix a suspicious bitwise operationrp2040:
add SPI supportrp2040:
add I2C supportrp2040:
add PWM implementationrp2040:
add openocd configurationstm32:
add support for PortMask* functions for WS2812 supportunix:
fix time base for time.Now()unix:
check for mmap error and act accordinglywasm:
override dlmalloc heap implementation from wasi-libcwasm:
align heap to 16 byteswasm:
add support for the crypto/rand package
- boards
- add
DefaultUART
to adafruit boards arduino-mkrwifi1010:
add board definition for Arduino MKR WiFi 1010arduino-mkrwifi1010:
fix pin definition ofNINA_RESETN
feather-nrf52:
fix pin definition of uartfeather-rp2040:
add pin name definitiongameboy-advance:
fix ROM headermdbt50qrx-uf2:
add Raytac MDBT50Q-RX Dongle with TinyUF2nano-rp2040:
defineNINA_SPI
and fix wifinina pinsteensy40:
enable hardware UART reconfiguration, fix receive watermark interrupt
- add
- 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 ofremote
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 parsercompiler
: support chained interrupt handlerscompiler
: add support for running a builtin in a goroutinecompiler
: do not emit nil checks for loading closure variablescompiler
: skip context parameter when starting regular goroutinecompiler
: refactor method namescompiler
: add function and global section pragmascompiler
: implementsyscall.rawSyscallNoError
in inline assemblyinterp
: ignore inline assembly in markExternalinterp
: fix a bug in pointer cast workaroundloader
: fix testing a main package
- standard library
crypto/rand
: replace this package with a TinyGo versionmachine
: make USBCDC global a pointermachine
: make UART objects pointer receiversmachine
: define Serial as the default outputnet
: add initial support for net.IPnet
: add more net compatibilityos
: add stub for os.ReadDiros
: add FileMode constants from Go 1.16os
: add stubs required for net/httpos
: implement process related functionsreflect
: implement AppendSlicereflect
: add stubs required for net/httpruntime
: make task.Data a 64-bit integer to avoid overflowruntime
: expose memory statssync
: implement NewCondsyscall
: fix int type in libc version
- targets
cortexm
: do not disable interrupts on abortcortexm
: bump default stack size to 2048 bytesnrf
: avoid heap allocation in waitForEventnrf
: don't trigger a heap allocation in SPI.Transfernrf52840
: add support for flashing with the BOSSA toolrp2040
: add support for GPIO inputrp2040
: add basic support for ADCrp2040
: gpio and adc pin definitionsrp2040
: implement UARTrp2040
: patch elf to checksum 2nd stage bootstm32
: add PWM for most chipsstm32
: add support for pin interruptsstm32f103
: add support for PinInputPullup / PinInputPulldownwasi
: remove wasm build tag
- boards
feather-rp2040
: add support for this boardfeather-nrf52840-sense
: add board definition for this boardpca10059
: support flashing from Windowsnano-rp2040
: add this boardnano-33-ble
: add support for this boardpico
: add the Raspberry Pi Pico board with the new RP2040 chipqtpy
: add pin for neopixels- all: add definition for ws2812 for supported boards
- 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 parallelbuilder
: run interp per packagebuilder
: cache C and assembly file outputsbuilder
: add support for-x
flag to print commandsbuilder
: add optsize attribute while building the packagebuilder
: run function passes per packagebuilder
: hard code Clang compilercompiler
: do not usellvm.GlobalContext()
compiler
: remove SimpleDCE passcompiler
: do not emit nil checks for*ssa.Alloc
instructionscompiler
: mergeruntime.typecodeID
and runtime.typeInInterfacecompiler
: do not check for impossible type assertscompiler
: fix use of global context:llvm.Int32Type()
compiler
: add interface IR testcompiler
: fix lack of method name in interface matchingcompiler
: fix "fragment covers entire variable" bugcompiler
: optimize string literals and globalscompiler
: decouple func lowering from interface type codescompiler
: add function attributes to some runtime callscompiler
: improve position information in error messagescgo
: add support for CFLAGS in .c filesinterp
: support GEP on fixed (MMIO) addressesinterp
: handle(reflect.Type).Elem()
interp
: add support for runtime.interfaceMethodinterp
: make toLLVMValue return an error instead of panickinginterp
: add support for switch statementinterp
: fix phi instructioninterp
: remove map supportinterp
: support extractvalue/insertvalue with multiple operandstransform
: optimize string comparisons against ""transform
: optimizereflect.Type
Implements()
methodtransform
: fix bug in interface lowering when signatures are renamedtransform
: don't rely on struct name ofruntime.typecodeID
transform
: use IPSCCP pass instead of the constant propagation passtransform
: fix func lowering assertion failuretransform
: do not lower zero-sized alloc to allocatransform
: split interface and reflect lowering
- standard library
runtime
: add dummy debug packagemachine
: fix data shift/mask in newUSBSetupmachine
: makemachine.I2C0
and similar objects pointersmachine
: unify usbcdc codemachine
: refactor PWM supportmachine
: avoid heap allocations in USB codereflect
: letreflect.Type
be of interface typereflect
: implement a number of stub functionsreflect
: check for access in theInterface
method callreflect
: fixAssignableTo
andImplements
methodsreflect
: implementValue.CanAddr
reflect
: implementSizeof
andAlignof
for func valuesreflect
: implementNew
functionruntime
: implement command line arguments in hosted environmentsruntime
: implement environment variables for Linuxruntime
: improve timers on nrf, and samd chips
- targets
- all: use -Qunused-arguments only for assembly files
atmega1280
: add PWM supportattiny
: remove dummy UARTatsamd21
: improve SPIatsamd51
: fix PWM support in atsamd51p20atsamd5x
: improve SPIatsamd51
,atsame5x
: unify samd51 and same5xatsamd51
,atsamd21
: fixADC.Get()
value at 8bit and 10bitatsame5x
: add support for CANavr
: remove I2C stubs from attiny supportcortexm
: check forarm-none-eabi-gdb
andgdb-multiarch
commandscortexm
: add__isr_vector
symbolcortexm
: disable FPU on Cortex-M4cortexm
: clean up Cortex-M target filesfe310
: fix SPI readgameboy-advance
: Fix RGBA color interpretationnrf52833
: add PWM supportstm32l0
: use unified UART logicstm32
: move f103 (bluepill) to common i2c codestm32
: separate altfunc selection for UART Tx/Rxstm32
: i2c implementation for F7, L5 and L4 MCUsstm32
: make SPI CLK fast to fix data issuestm32
: support SPI on L4 seriesunix
: avoid possible heap allocation with-opt=0
unix
: use conservative GC by defaultunix
: use the tasks scheduler instead of coroutineswasi
: upgrade WASI version to wasi_snapshot_preview1wasi
: darwin: support basic file io based on libcwasm
: only export explicitly exported functionswasm
: use WASI ABI for exit functionwasm
: scan globals conservatively
- boards
arduino-mega1280
: add support for the Arduino Mega 1280arduino-nano-new
: Add Arduino Nano w/ New Bootloader targetatsame54-xpro
: add initial support this boardfeather-m4-can
: add initial support for this boardgrandcentral-m4
: add board support for Adafruit Grand Central M4 (SAMD51)lgt92
: update to new UART structuremicrobit
: remove LED constantmicrobit-v2
: add support for S113 SoftDevicenucleol432
: add support for this boardnucleo-l031k6
: add this boardpca10059
: initial support for this boardqtpy
: fix msd-volume-nameqtpy
: fix i2c settingteensy40
: move txBuffer allocation to UART declarationteensy40
: 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 buildbuilder
: remove unused cacheKey parameterbuilder
: add -mcpu flag while building librariesbuilder
: wait for running jobs to finishcgo
: add support for variadic functionscompiler
: fix undefined behavior in wordpackcompiler
: fix incorrect "exported function" paniccompiler
: fix non-int integer constants (fixing a crash)compiler
: refactor and add testscompiler
: emit a nil check when slicing an array pointercompiler
: saturate float-to-int conversionscompiler
: test float to int conversions and fix upper-bound calculationcompiler
: support all kinds of deferred builtinscompiler
: remove ir packagecompiler
: remove unnecessary main.main call workaroundcompiler
: move the setting of attributes to getFunctioncompiler
: create runtime types lazily when neededcompiler
: move settings to a separate Config structcompiler
: work around an ARM backend bug in LLVMinterp
: rewrite entire packageinterp
: fix alignment of untyped globalsloader
: use name "main" for the main packageloader
: support imports from vendor directoriesstacksize
: add support for DW_CFA_offset_extendedtransform
: show better error message in coroutines lowering
- standard library
machine
: accept configuration struct for ADC parametersmachine
: make I2C.Configure signature consistentreflect
: implement PtrToruntime
: refactor to simplify stack switchingruntime
: put metadata at the top end of the heap
- targets
atsam
: add a length check to findPinPadMappingatsam
: improve USBCDCatsam
: avoid infinite loop when USBCDC is disconnectedavr
: add SPI support for Atmega based chipsavr
: use Clang for compiling C and assembly filesesp32
: implement task based scheduleresp32
: enable the FPUesp8266
: implement task based scheduleresp
: add compiler-rt libraryesp
: add picolibcnrf
: refactor code a bit to reduce duplicationnrf
: use SPIM peripheral instead of the legacy SPI peripheralnrf
: update nrfx submodule to latest commitnrf52840
: ensure that USB CDC interface is only initialized oncenrf52840
: improve USBCDCstm32
: use stm32-rs SVDs which are of much higher qualitystm32
: harmonization of UART logicstm32
: replace I2C addressable interface with simpler typestm32
: fix i2c and add stm32f407 i2cstm32
: revert change that adds support for channels in interruptswasm
: implement a growable heapwasm
: fix typo in wasm_exec.js, syscall/js.valueLoadString()wasm
: Namespaced Wasm Imports so they don't conflict across modules, or reserved LLVM IRwasi
: support env variables based on libcwasi
: specify wasi-libc in a different way, to improve error message
- boards
matrixportal-m4
: add support for board Adafruit Matrix Portal M4mkr1000
: add this boardnucleo-f722ze
: add this boardclue
: correct volume name and add alias for release version of Adafruit Clue boardp1am-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 devicenicenano
: nice!nano board supportcircuitplay-bluefruit
: correct internal I2C pin mappingclue
: correct for lack of low frequency crystaldigispark
: split off attiny85 targetnucleo-l552ze
: implementation with CLOCK, LED, and UARTnrf52840-mdk-usb-dongle
: add this board
- 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
- 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
- support for Go 1.15
- compiler
- loader: work around Windows symlink limitation
- 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 configuration 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 supportriscv
: 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
- 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
- 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
- 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
- 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
- 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 IOT
- 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
- 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
- implement full slice expression:
- standard library
reflect
: add support for named typesreflect
: add support fort.Bits()
reflect
: add basic support fort.AssignableTo()
reflect
: implementt.Align()
reflect
: add support for struct typesreflect
: fix bug inv.IsNil
andv.Pointer
for addressable valuesreflect
: implement support for array typesreflect
: implementt.Comparable()
runtime
: implement stack-based schedulerruntime
: fix bug in the sleep queue of the schedulerruntime
: implementmemcpy
for Cortex-Mtesting
: implement stubtesting.B
structtesting
: add common test logging methods such as Errorf/Fatalf/Printf
- targets
386
: add support for linux/386 syscallsatsamd21
: make SPI pins configurable so that multiple SPI ports can be usedatsamd21
: correct issue with invalid first reading coming from ADCatsamd21
: add support for reset-to-bootloader using 1200baud over USB-CDCatsamd21
: make pin selection more flexible for peripheralsatsamd21
: fix minimum delay intime.Sleep
atsamd51
: fix minimum delay intime.Sleep
nrf
: improve SPI write-only speed, by making use of double bufferingstm32f103
: fix SPI frequency selectionstm32f103
: add machine.Pin.Get method for reading GPIO valuesstm32f103
: allow board specific UART usagenucleo-f103rb
: add support for NUCLEO-F103RB boarditsybitsy-m4
: add support for this board with a SAMD51 family chipcortex-m
: add support forarm.SystemReset()
gameboy-advance
: add initial support for the GameBoy Advancewasm
: add//go:wasm-module
magic comment to set the wasm module namewasm
: add syscall/js.valueSetIndex supportwasm
: add syscall/js.valueInvoke support
- targets
atsamd21
: add support for the-port
flag in the flash subcommand
- 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
: addos.Exit
andsyscall.Exit
os
: add several stubsruntime
: fix heap corruption in conservative GCruntime
: add support for math intrinsics where supported, massively speeding up some benchmarkstesting
: 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 boardhifive1
: add support for this RISC-V boardreelboard
: add e-paper pinsreelboard
: addPowerSupplyActive
to enable voltage for on-board deviceswasm
: put the stack at the start of linear memory, to detect stack overflows
- add support for a generic target that calls
- 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
andvoid*
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
- implement
- standard library
machine
: remove microbit matrix (moved to drivers repository)machine
: refactor pins to usePin
type instead ofGPIO
runtime
: print more interface types on panic, includingerror
- targets
arm
: print an error on HardFault (including stack overflows)atsamd21
: fix a bug in the ADC peripheralatsamd21
: add support for I2Sfeather-m0
: add support for this boardnrf51
: fix a bug in I2Cstm32f103xx
: fix a bug in I2Csyscall
: implementExit
on unixtrinket-m0
: add support for this boardwasm
: make main example smallerwasm
: don't cache wasm file in the server, for ease of debuggingwasm
: work around bug #41508 that caused a deadlock while linkingwasm
: add support forjs.FuncOf
- compiler driver
- use
wasm-ld
instead ofwasm-ld-8
on macOS - drop dependency on
llvm-ar
- fix linker script includes when running outside
TINYGOROOT
- use
- 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
: improveuintptr
supportcortexm
: implement memmove intrinsic generated by LLVMcortexm
: use the lld linker instead ofarm-none-eabi-ld
darwin
: use custom syscall package that links to libSystem.dylibmicrobit
: add blink examplesamd21
: support I2C1samd21
: machine/atsamd21: correct pad/pin handling when using both UART and USBCDC interfaces at same timestm32f4discovery
: add support for this boardwasm
: support async func valueswasm
: improve documentation and add extra example
- compiler
- fix
objcopy
replacement to include the .data section in the firmware image - use
llvm-ar-7
on Linux to fix the Docker image
- fix
- 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)
wheren
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 pinssamd21
: implement SPI peripheralsamd21
: implement ADC peripheralstm32
: fix a bug in timekeepingwasm
: fix a bug inwasm_exec.js
that caused corruption in linear memory when running on Node.js.
- compiler
- remove old
-initinterp
flag - add support for macOS
- remove old
- cgo
- add support for bool/float/complex types
- standard library
device/arm
: add support to disable/enable hardware interruptsmachine
: add CPU frequency for nrf-based boardssyscall
: add support for darwin/amd64
- targets
circuitplay_express
: add support for this boardmicrobit
: add regular pin constantssamd21
: fix time function for goroutine supportsamd21
: add support for USB-CDC (serial over USB)samd21
: add support for pins in port Bsamd21
: add support for pullup and pulldown pinswasm
: add support for Safari in example
- 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
andcomplex128
- cgo
- add support for external globals
- add support for pointers and function pointers
- standard library
fmt
: initial support,fmt.Println
worksmath
: support for most/all functionsos
: initial support (only stdin/stdout/stderr)reflect
: initial supportsyscall
: add support for amd64, arm, and arm64