From 02384c941448e55cb97d460f93ab74e6e271a62b Mon Sep 17 00:00:00 2001 From: Hector Chu Date: Sun, 5 Jul 2026 09:17:26 +0100 Subject: [PATCH] add CGO_CFLAGS support (#5453) * add CGO_CFLAGS support * the environment variable must be split * use shlex to handle double quotes * wrap error --- goenv/goenv.go | 2 ++ loader/loader.go | 6 ++++++ 2 files changed, 8 insertions(+) diff --git a/goenv/goenv.go b/goenv/goenv.go index fe4c8bf63..cecb5a85d 100644 --- a/goenv/goenv.go +++ b/goenv/goenv.go @@ -151,6 +151,8 @@ func Get(name string) string { panic("could not find cache dir: " + err.Error()) } return filepath.Join(dir, "tinygo") + case "CGO_CFLAGS": + return os.Getenv("CGO_CFLAGS") case "CGO_ENABLED": // Always enable CGo. It is required by a number of targets, including // macOS and the rp2040. diff --git a/loader/loader.go b/loader/loader.go index b87a95416..5696abd06 100644 --- a/loader/loader.go +++ b/loader/loader.go @@ -22,6 +22,7 @@ import ( "strings" "unicode" + "github.com/google/shlex" "github.com/tinygo-org/tinygo/cgo" "github.com/tinygo-org/tinygo/compileopts" "github.com/tinygo-org/tinygo/goenv" @@ -506,6 +507,11 @@ func (p *Package) parseFiles() ([]*ast.File, error) { var initialCFlags []string initialCFlags = append(initialCFlags, p.program.config.CFlags(true)...) initialCFlags = append(initialCFlags, "-I"+p.Dir) + cgoCFlags, err := shlex.Split(goenv.Get("CGO_CFLAGS")) + if err != nil { + return nil, fmt.Errorf("failed to split CGO_CFLAGS: %w", err) + } + initialCFlags = append(initialCFlags, cgoCFlags...) generated, headerCode, cflags, ldflags, accessedFiles, errs := cgo.Process(files, p.program.workingDir, p.ImportPath, p.program.fset, initialCFlags, p.program.config.GOOS()) p.CFlags = append(initialCFlags, cflags...) p.CGoHeaders = headerCode