From 2eb7d542d221103ade14bfe64f05717e17bf6292 Mon Sep 17 00:00:00 2001 From: Li Jie Date: Thu, 21 Aug 2025 20:43:43 +0800 Subject: [PATCH] targets supports code-model, target-abi, relocation-model --- _demo/empty/build-targets-ci.sh | 1 + internal/crosscompile/crosscompile.go | 19 ++++++++++++++++--- internal/targets/config.go | 5 +++++ internal/targets/loader.go | 15 ++++++++++++--- 4 files changed, 34 insertions(+), 6 deletions(-) diff --git a/_demo/empty/build-targets-ci.sh b/_demo/empty/build-targets-ci.sh index 2681231b..9e379daa 100644 --- a/_demo/empty/build-targets-ci.sh +++ b/_demo/empty/build-targets-ci.sh @@ -78,6 +78,7 @@ m5stack \ m5stamp-c3 \ m5stick-c \ macropad-rp2040 \ +maixbit \ makerfabs-esp32c3spi35 \ matrixportal-m4 \ mch2022 \ diff --git a/internal/crosscompile/crosscompile.go b/internal/crosscompile/crosscompile.go index b12a4ae9..3bfe029c 100644 --- a/internal/crosscompile/crosscompile.go +++ b/internal/crosscompile/crosscompile.go @@ -22,9 +22,6 @@ type Export struct { LDFLAGS []string // Additional fields from target configuration - LLVMTarget string - CPU string - Features string BuildTags []string GOOS string GOARCH string @@ -525,6 +522,22 @@ func useTarget(targetName string) (export Export, err error) { } } + // Handle code generation configuration + if config.CodeModel != "" { + ccflags = append(ccflags, "-mcmodel="+config.CodeModel) + } + if config.TargetABI != "" { + ccflags = append(ccflags, "-mabi="+config.TargetABI) + } + if config.RelocationModel != "" { + switch config.RelocationModel { + case "pic": + ccflags = append(ccflags, "-fPIC") + case "static": + ccflags = append(ccflags, "-fno-pic") + } + } + // Handle Linker - keep it for external usage if config.Linker != "" { export.Linker = filepath.Join(clangRoot, "bin", config.Linker) diff --git a/internal/targets/config.go b/internal/targets/config.go index 821a38fc..1a35a41f 100644 --- a/internal/targets/config.go +++ b/internal/targets/config.go @@ -20,6 +20,11 @@ type Config struct { LinkerScript string `json:"linkerscript"` CFlags []string `json:"cflags"` LDFlags []string `json:"ldflags"` + + // Code generation configuration + CodeModel string `json:"code-model"` + TargetABI string `json:"target-abi"` + RelocationModel string `json:"relocation-model"` } // RawConfig represents the raw JSON configuration before inheritance resolution diff --git a/internal/targets/loader.go b/internal/targets/loader.go index 9ec30f28..6b2febcb 100644 --- a/internal/targets/loader.go +++ b/internal/targets/loader.go @@ -137,6 +137,18 @@ func (l *Loader) mergeConfig(dst, src *Config) { if src.Linker != "" { dst.Linker = src.Linker } + if src.LinkerScript != "" { + dst.LinkerScript = src.LinkerScript + } + if src.CodeModel != "" { + dst.CodeModel = src.CodeModel + } + if src.TargetABI != "" { + dst.TargetABI = src.TargetABI + } + if src.RelocationModel != "" { + dst.RelocationModel = src.RelocationModel + } // Merge slices (append, don't replace) if len(src.BuildTags) > 0 { @@ -148,9 +160,6 @@ func (l *Loader) mergeConfig(dst, src *Config) { if len(src.LDFlags) > 0 { dst.LDFlags = append(dst.LDFlags, src.LDFlags...) } - if src.LinkerScript != "" { - dst.LinkerScript = src.LinkerScript - } } // GetTargetsDir returns the targets directory path