aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorAyke van Laethem <[email protected]>2024-09-18 11:46:16 +0200
committerRon Evans <[email protected]>2024-09-18 12:43:05 +0200
commitdcca47f1f6088ea2565468e4a93a96e4308af480 (patch)
treed2253123c6147c1331d21976e9a5fdffcb56cf03
parent892efaec973aa7fe5442ca0f16f05f4951ac73a3 (diff)
downloadtinygo-dcca47f1f6088ea2565468e4a93a96e4308af480.tar.gz
tinygo-dcca47f1f6088ea2565468e4a93a96e4308af480.zip
main: add -ldflags='-extldflags=...' support
This matches upstream Go. Example: $ go test -ldflags='-extldflags=-foobar' os # os.test /usr/local/go1.23.1/pkg/tool/linux_arm64/link: running gcc failed: exit status 1 /usr/bin/gcc -s -o $WORK/b001/os.test -rdynamic /tmp/go-link-914594215/go.o /tmp/go-link-914594215/000000.o /tmp/go-link-914594215/000001.o /tmp/go-link-914594215/000002.o /tmp/go-link-914594215/000003.o /tmp/go-link-914594215/000004.o /tmp/go-link-914594215/000005.o /tmp/go-link-914594215/000006.o /tmp/go-link-914594215/000007.o /tmp/go-link-914594215/000008.o /tmp/go-link-914594215/000009.o /tmp/go-link-914594215/000010.o /tmp/go-link-914594215/000011.o /tmp/go-link-914594215/000012.o /tmp/go-link-914594215/000013.o /tmp/go-link-914594215/000014.o /tmp/go-link-914594215/000015.o /tmp/go-link-914594215/000016.o /tmp/go-link-914594215/000017.o /tmp/go-link-914594215/000018.o /tmp/go-link-914594215/000019.o /tmp/go-link-914594215/000020.o /tmp/go-link-914594215/000021.o -O2 -g -O2 -g -lresolv -O2 -g -lpthread -foobar gcc: error: unrecognized command-line option ‘-foobar’ FAIL os [build failed] FAIL And TinyGo, with this patch: $ tinygo test -ldflags='-extldflags=-foobar' os FAIL os 0.000s ld.lld: error: unknown argument '-foobar' Also note that Go doesn't support the `-extldflags` directly (which was previously the case with TinyGo): $ go test -extldflags='-foobar' os flag provided but not defined: -extldflags [...]
-rw-r--r--main.go14
1 files changed, 7 insertions, 7 deletions
diff --git a/main.go b/main.go
index 64d022fb9..202d98a36 100644
--- a/main.go
+++ b/main.go
@@ -1304,19 +1304,20 @@ func (m globalValuesFlag) Set(value string) error {
// parseGoLinkFlag parses the -ldflags parameter. Its primary purpose right now
// is the -X flag, for setting the value of global string variables.
-func parseGoLinkFlag(flagsString string) (map[string]map[string]string, error) {
+func parseGoLinkFlag(flagsString string) (map[string]map[string]string, string, error) {
set := flag.NewFlagSet("link", flag.ExitOnError)
globalVarValues := make(globalValuesFlag)
set.Var(globalVarValues, "X", "Set the value of the string variable to the given value.")
+ extLDFlags := set.String("extldflags", "", "additional flags to pass to external linker")
flags, err := shlex.Split(flagsString)
if err != nil {
- return nil, err
+ return nil, "", err
}
err = set.Parse(flags)
if err != nil {
- return nil, err
+ return nil, "", err
}
- return map[string]map[string]string(globalVarValues), nil
+ return map[string]map[string]string(globalVarValues), *extLDFlags, nil
}
// getListOfPackages returns a standard list of packages for a given list that might
@@ -1388,7 +1389,6 @@ func main() {
cpuprofile := flag.String("cpuprofile", "", "cpuprofile output")
monitor := flag.Bool("monitor", false, "enable serial monitor")
baudrate := flag.Int("baudrate", 115200, "baudrate of serial monitor")
- extLDFlags := flag.String("extldflags", "", "additional flags to pass to external linker")
// Internal flags, that are only intended for TinyGo development.
printIR := flag.Bool("internal-printir", false, "print LLVM IR")
@@ -1449,7 +1449,7 @@ func main() {
}
flag.CommandLine.Parse(os.Args[2:])
- globalVarValues, err := parseGoLinkFlag(*ldflags)
+ globalVarValues, extLDFlags, err := parseGoLinkFlag(*ldflags)
if err != nil {
fmt.Fprintln(os.Stderr, err)
os.Exit(1)
@@ -1504,7 +1504,7 @@ func main() {
Timeout: *timeout,
WITPackage: witPackage,
WITWorld: witWorld,
- ExtLDFlags: *extLDFlags,
+ ExtLDFlags: extLDFlags,
}
if *printCommands {
options.PrintCommands = printCommand