mirror of
https://github.com/compiler-explorer/compiler-explorer.git
synced 2026-05-16 10:12:38 -04:00
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>