- Combines Testing and Validation sections for better organization - Emphasizes these steps are essential when fixing bugs or implementing features - Maintains all validation information with clearer structure Generated with [codeagent](https://github.com/qbox/codeagent) Co-authored-by: xgopilot <noreply@goplus.org>
4.8 KiB
LLGo Project AI Assistant Guide
This document provides essential information for AI assistants to help fix bugs and implement features in the LLGo project.
About LLGo
LLGo is a Go compiler based on LLVM designed to better integrate Go with the C ecosystem, including Python and JavaScript. It's a subproject of the XGo project that aims to expand the boundaries of Go/XGo for game development, AI and data science, WebAssembly, and embedded development.
Project Structure
cmd/llgo- Main llgo compiler command (usage similar togocommand)cl/- Core compiler logic that converts Go packages to LLVM IRssa/- LLVM IR file generation using Go SSA semanticsinternal/build/- Build process orchestrationruntime/- LLGo runtime librarychore/- Development tools (llgen, llpyg, ssadump, etc.)_demo/- Example programs (prefixed with_to prevent standardgocommand compilation)_cmptest/- Comparison tests to verify the same program gets the same output with Go and LLGo
Development Environment
For detailed dependency requirements and installation instructions, see the Dependencies and How to install sections in the README.
Build Commands
Build the entire project
go build -v ./...
Build llgo command specifically
go build -o llgo ./cmd/llgo
Check llgo version
llgo version
Testing & Validation
The following commands and workflows are essential when fixing bugs or implementing features in the LLGo project:
Run all tests
go test ./...
Note: Some tests may fail if optional dependencies (like Python) are not properly configured. The test suite includes comprehensive tests for:
- Compiler functionality
- SSA generation
- C interop
- Python integration (requires Python development headers)
Test a simple example
cd _demo/c/hello
LLGO_ROOT=/path/to/llgo llgo run .
Important: The LLGO_ROOT environment variable must be set to the repository root when running llgo commands during development.
Validated Commands and Expected Outputs
Build Validation
go build -v ./...- Successfully builds all packages without errorsgo build -o llgo ./cmd/llgo- Builds the llgo commandllgo version- Output:llgo v0.11.6-0.20251012014242-7e1abf1486b7 linux/amd64
Code Quality Validation
go fmt ./...- Runs successfully with no output (all files properly formatted)go vet ./...- Reports known issues inssa/type_cvt.goandcl/builtin_test.go
Testing Validation
go test ./...- Runs test suite (some tests require Python dependencies)LLGO_ROOT=/workspace llgo run .in_demo/c/hello- Output:hello world by println hello world by fmt.Println Hello world by c.Printf
Environment
- Go: 1.24.5 linux/amd64
- Operating System: Linux 5.4.0-164-generic
All failures or limitations are documented in the relevant sections above.
Code Quality
Format code
go fmt ./...
Run static analysis
go vet ./...
Note: Currently reports some issues related to lock passing by value in ssa/type_cvt.go and a possible unsafe.Pointer misuse in cl/builtin_test.go. These are known issues.
Running Examples
The _demo directory contains working examples:
C Standard Library Examples
cd _demo/c/hello
LLGO_ROOT=/path/to/llgo llgo run .
Other C examples:
_demo/c/concat- Variadic function with fprintf_demo/c/qsort- C function callbacks
Python Integration Examples
cd _demo/py/callpy
LLGO_ROOT=/path/to/llgo llgo run .
Other Python examples:
_demo/py/pi- Python constants_demo/py/statistics- Python list and statistics_demo/py/matrix- NumPy demo
Common Development Tasks
Install llgo for system-wide use
./install.sh
Build development tools
go install -v ./cmd/...
go install -v ./chore/...
Key Modules for Understanding
ssa- Generates LLVM IR using Go SSA semanticscl- Core compiler converting Go to LLVM IRinternal/build- Orchestrates the compilation process
Debugging
Disable Garbage Collection
For testing purposes, you can disable GC:
LLGO_ROOT=/path/to/llgo llgo run -tags nogc .
Important Notes
- LLGO_ROOT: Always set
LLGO_ROOTto the repository root when running llgo during development - Demo Directory: Examples in
_demoare prefixed with_to prevent standardgocommand from trying to compile them - Defer in Loops: LLGo intentionally does not support
deferin loops (considered bad practice) - C Ecosystem Integration: LLGo uses
go:linknamedirective to link external symbols through ABI - Python Integration: Third-party Python libraries require separate installation of library files