Files
llgo/internal/targets/config.go
Li Jie b80a54eb0f feat: implement target configuration system for issue #1176
Add comprehensive target configuration parsing and inheritance system:

- Create internal/targets package with config structures
- Support JSON configuration loading with inheritance resolution
- Implement multi-level inheritance (e.g., rp2040 → cortex-m0plus → cortex-m)
- Add 206 target configurations from TinyGo for embedded platforms
- Support core fields: name, llvm-target, cpu, features, build-tags, goos, goarch, cflags, ldflags
- Provide high-level resolver interface for target lookup
- Include comprehensive unit tests with 100% target parsing coverage

This foundation enables future -target parameter support for cross-compilation
to diverse embedded platforms beyond current GOOS/GOARCH limitations.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-29 15:12:58 +08:00

44 lines
1.2 KiB
Go

package targets
// Config represents a complete target configuration after inheritance resolution
type Config struct {
// Target identification
Name string `json:"-"`
// LLVM configuration
LLVMTarget string `json:"llvm-target"`
CPU string `json:"cpu"`
Features string `json:"features"`
// Build configuration
BuildTags []string `json:"build-tags"`
GOOS string `json:"goos"`
GOARCH string `json:"goarch"`
// Compiler and linker configuration
Linker string `json:"linker"`
CFlags []string `json:"cflags"`
LDFlags []string `json:"ldflags"`
}
// RawConfig represents the raw JSON configuration before inheritance resolution
type RawConfig struct {
Inherits []string `json:"inherits"`
Config
}
// IsEmpty returns true if the config appears to be uninitialized
func (c *Config) IsEmpty() bool {
return c.Name == "" && c.LLVMTarget == "" && c.GOOS == "" && c.GOARCH == ""
}
// HasInheritance returns true if this config inherits from other configs
func (rc *RawConfig) HasInheritance() bool {
return len(rc.Inherits) > 0
}
// GetInherits returns the list of configs this config inherits from
func (rc *RawConfig) GetInherits() []string {
return rc.Inherits
}