Un memo pour préparer son environnement de développement TinyGo.

Pré-requis

Pour compiler TinyGO, il est nécessaire de disposer de llvm, clang :

$ pacman -Q go llvm llvm-libs clang
go 2:1.23.2-1
llvm 18.1.8-4
llvm-libs 18.1.8-4
clang 18.1.8-2

Compilation et installation Tinygo

# Téléchargement des sources de TinyGo
git clone https://github.com/tinygo-org/tinygo.git
cd tinygo

# Switch sur la branche de développement
git checkout dev

# Mise à jour des dépendances
git submodule update --init --recursive

# Générer les descripteurs de devices
go work use .   // Needed to build tools/gen-device-avr
make gen-device

# Récupérer les sources de llvm
make llvm-source // nb: Tinygo n'a pas besoin des sources llvm , mais a besoin des fichiers du répertoire "llvm-project/compiler-rt"

# Mise à jour de go-llvm 
go get tinygo.org/x/go-llvm

# Compilation (Le flag llvm21 est optionnel)
go build -tags llvm21
go install

NB: En cas d'upgrade, il peut être nécessaire de rejouer les commandes suivantes:

$ go get tinygo.org/x/go-llvm    # Mise à jour go-llvm
$ git pull --recurse-submodules  # Mise à jour des sub-modules

Test sur un RP2040

Le plus simple reste de récupérer le code LED Blink ici: https://tinygo.org/docs/tutorials/blinky/

package main

import (
    "machine"
    "time"
)

func main() {
    led := machine.LED
    led.Configure(machine.PinConfig{Mode: machine.PinOutput})
    for {
        println("Hello")
        led.Low()
        time.Sleep(time.Millisecond * 500)

        led.High()
        time.Sleep(time.Millisecond * 500)
    }
}

$ 

# Pour flasher la carte
$ tinygo flash -target=pico

# Pour lire la console UART:
tinygo monitor -target=pico 
Hello
Hello
...