Skip to content

Commit dcca47f

Browse files
aykevldeadprogram
authored andcommitted
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 [...]
1 parent 892efae commit dcca47f

File tree

1 file changed

+7
-7
lines changed

1 file changed

+7
-7
lines changed

main.go

+7-7
Original file line numberDiff line numberDiff line change
@@ -1304,19 +1304,20 @@ func (m globalValuesFlag) Set(value string) error {
13041304

13051305
// parseGoLinkFlag parses the -ldflags parameter. Its primary purpose right now
13061306
// is the -X flag, for setting the value of global string variables.
1307-
func parseGoLinkFlag(flagsString string) (map[string]map[string]string, error) {
1307+
func parseGoLinkFlag(flagsString string) (map[string]map[string]string, string, error) {
13081308
set := flag.NewFlagSet("link", flag.ExitOnError)
13091309
globalVarValues := make(globalValuesFlag)
13101310
set.Var(globalVarValues, "X", "Set the value of the string variable to the given value.")
1311+
extLDFlags := set.String("extldflags", "", "additional flags to pass to external linker")
13111312
flags, err := shlex.Split(flagsString)
13121313
if err != nil {
1313-
return nil, err
1314+
return nil, "", err
13141315
}
13151316
err = set.Parse(flags)
13161317
if err != nil {
1317-
return nil, err
1318+
return nil, "", err
13181319
}
1319-
return map[string]map[string]string(globalVarValues), nil
1320+
return map[string]map[string]string(globalVarValues), *extLDFlags, nil
13201321
}
13211322

13221323
// getListOfPackages returns a standard list of packages for a given list that might
@@ -1388,7 +1389,6 @@ func main() {
13881389
cpuprofile := flag.String("cpuprofile", "", "cpuprofile output")
13891390
monitor := flag.Bool("monitor", false, "enable serial monitor")
13901391
baudrate := flag.Int("baudrate", 115200, "baudrate of serial monitor")
1391-
extLDFlags := flag.String("extldflags", "", "additional flags to pass to external linker")
13921392

13931393
// Internal flags, that are only intended for TinyGo development.
13941394
printIR := flag.Bool("internal-printir", false, "print LLVM IR")
@@ -1449,7 +1449,7 @@ func main() {
14491449
}
14501450

14511451
flag.CommandLine.Parse(os.Args[2:])
1452-
globalVarValues, err := parseGoLinkFlag(*ldflags)
1452+
globalVarValues, extLDFlags, err := parseGoLinkFlag(*ldflags)
14531453
if err != nil {
14541454
fmt.Fprintln(os.Stderr, err)
14551455
os.Exit(1)
@@ -1504,7 +1504,7 @@ func main() {
15041504
Timeout: *timeout,
15051505
WITPackage: witPackage,
15061506
WITWorld: witWorld,
1507-
ExtLDFlags: *extLDFlags,
1507+
ExtLDFlags: extLDFlags,
15081508
}
15091509
if *printCommands {
15101510
options.PrintCommands = printCommand

0 commit comments

Comments
 (0)