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

# Préparation des sources
git clone https://github.com/tinygo-org/tinygo.git
cd tinygo
git checkout dev

# Mise à jour des dépendances
git submodule update --init --recursive
make gen-device
make llvm-source // nb: Tinygo n'a pas besoin des sources llvm , mais a besoin des fichiers du répertoire "llvm-project/compiler-rt"

# compilation
go build 
go install

Si vous souhaitez spécifier la version de llvm de votre système, vous pouvez utiliser un tag:

$ go build -tags llvm18
$ go install

NB:

A voir s'il est nécessaire de mettre à jour les sous modules:
$ git pull --recurse-submodules

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
...