diff --git a/compiler/internal/build/build.go b/compiler/internal/build/build.go index eda0d286..5b5f5a1f 100644 --- a/compiler/internal/build/build.go +++ b/compiler/internal/build/build.go @@ -488,7 +488,7 @@ func linkMainPkg(ctx *context, pkg *packages.Package, pkgs []*aPackage, linkArgs if verbose { fmt.Fprintln(os.Stderr, "clang", args) } - err = ctx.env.Clang().Exec(args...) + err = ctx.env.Clang().Link(args...) check(err) if IsRpathChangeEnabled() && runtime.GOOS == "darwin" { @@ -870,7 +870,7 @@ func clFile(ctx *context, args []string, cFile, expFile string, procFile func(li if verbose { fmt.Fprintln(os.Stderr, "clang", args) } - err := ctx.env.Clang().Exec(args...) + err := ctx.env.Clang().Compile(args...) check(err) procFile(llFile) } diff --git a/xtool/clang/clang.go b/xtool/clang/clang.go index cda12809..657883df 100644 --- a/xtool/clang/clang.go +++ b/xtool/clang/clang.go @@ -20,6 +20,7 @@ import ( "io" "os" "os/exec" + "strings" ) // ----------------------------------------------------------------------------- @@ -40,6 +41,32 @@ func New(app string) *Cmd { return &Cmd{app, os.Stdout, os.Stderr} } +func (p *Cmd) Compile(args ...string) error { + // Parse CFLAGS environment variable into separate arguments + cflags := strings.Fields(os.Getenv("CFLAGS")) + if len(cflags) > 0 { + // Create a new slice with capacity for all arguments + newArgs := make([]string, 0, len(cflags)+len(args)) + newArgs = append(newArgs, cflags...) + newArgs = append(newArgs, args...) + args = newArgs + } + return p.Exec(args...) +} + +func (p *Cmd) Link(args ...string) error { + // Parse LDFLAGS environment variable into separate arguments + ldflags := strings.Fields(os.Getenv("LDFLAGS")) + if len(ldflags) > 0 { + // Create a new slice with capacity for all arguments + newArgs := make([]string, 0, len(ldflags)+len(args)) + newArgs = append(newArgs, ldflags...) + newArgs = append(newArgs, args...) + args = newArgs + } + return p.Exec(args...) +} + // Exec executes a clang command. func (p *Cmd) Exec(args ...string) error { cmd := exec.Command(p.app, args...)