Commit Graph

1 Commits

Author SHA1 Message Date
Matt Godbolt (bot acct)
164d33bb42 Add TinyGo compiler support (#8456)
Adds support for [TinyGo](https://tinygo.org/), an LLVM-based Go
compiler targeting microcontrollers and WebAssembly.

## Changes

- **New `TinyGoCompiler` class** (`lib/compilers/tinygo.ts`): Extends
BaseCompiler with TinyGo-specific handling:
- Forces binary mode (TinyGo has no `-gcflags=-S` equivalent — it's
LLVM-based, not gc)
  - Sets up `TINYGOROOT`, `GOROOT`, and `PATH` environment variables
  - Uses `tinygo build -o <output>` as the compilation command
- User arguments (e.g. `-opt=2`, `-gc=none`, `-scheduler=none`) pass
through directly
- **Config**: Adds TinyGo 0.37.0 to `go.amazon.properties`
- **Registration**: Exports `TinyGoCompiler` from `_all.ts`

## Why TinyGo?

TinyGo produces significantly smaller binaries than standard Go (445KB
vs 1.5MB for a hello world). It targets a different niche —
microcontrollers, WASM, and resource-constrained environments — making
it an interesting comparison alongside the existing gc and gccgo
compilers.

## Testing

Tested locally with CE running on a non-default port:
-  Compiler detected and version parsed correctly
-  Compilation produces x86 assembly via objdump (5000+ lines for a
simple program)
-  Execution works (`println` output captured correctly)
-  User arguments like `-opt=2` pass through correctly
-  All pre-commit checks pass (ts-check, lint, properties validation,
related tests)

## Infra

TinyGo 0.37.0 is already configured in the infra repo
(`bin/yaml/go.yaml`) — installation is just a tarball download from
GitHub releases.

The config references `/opt/compiler-explorer/golang-1.24.2/go` as
GOROOT — TinyGo needs a standard Go installation for the stdlib.

Closes #3969

🤖 Generated by LLM (Claude, via OpenClaw)

---------

Co-authored-by: mattgodbolt-molty <mattgodbolt-molty@users.noreply.github.com>
2026-02-08 15:02:47 -06:00