From 1f0595438e0d785cb1cad763347e6d59a5b526a9 Mon Sep 17 00:00:00 2001 From: Ayke van Laethem Date: Sat, 27 Apr 2019 19:10:42 +0200 Subject: [PATCH] main: do not set working directory for Clang invocation This commit avoids setting the working directory to the TinyGo root when invocating Clang. This helps to weed out issues before we add support for bundling Clang in a release. --- builtins.go | 1 - main.go | 31 ++++++++++++++++++++----------- targets/nrf51.json | 2 +- targets/nrf52.json | 2 +- targets/nrf52840.json | 2 +- 5 files changed, 23 insertions(+), 15 deletions(-) diff --git a/builtins.go b/builtins.go index 6ab5198d..75b6592a 100644 --- a/builtins.go +++ b/builtins.go @@ -243,7 +243,6 @@ func compileBuiltins(target string, callback func(path string) error) error { cmd := exec.Command(commands["clang"], "-c", "-Oz", "-g", "-Werror", "-Wall", "-std=c11", "-fshort-enums", "-nostdlibinc", "-ffunction-sections", "-fdata-sections", "--target="+target, "-fdebug-prefix-map="+dir+"="+remapDir, "-o", objpath, srcpath) cmd.Stdout = os.Stdout cmd.Stderr = os.Stderr - cmd.Dir = dir err = cmd.Run() if err != nil { return &commandError{"failed to build", srcpath, err} diff --git a/main.go b/main.go index 82ac31e8..a06825ee 100644 --- a/main.go +++ b/main.go @@ -62,9 +62,19 @@ func Compile(pkgName, outpath string, spec *TargetSpec, config *BuildConfig, act config.gc = spec.GC } - // Append command line passed CFlags and LDFlags - spec.CFlags = append(spec.CFlags, config.cFlags...) - spec.LDFlags = append(spec.LDFlags, config.ldFlags...) + root := sourceDir() + + // Merge and adjust CFlags. + cflags := append([]string{}, config.cFlags...) + for _, flag := range spec.CFlags { + cflags = append(cflags, strings.Replace(flag, "{root}", root, -1)) + } + + // Merge and adjust LDFlags. + ldflags := append([]string{}, config.ldFlags...) + for _, flag := range spec.LDFlags { + ldflags = append(ldflags, strings.Replace(flag, "{root}", root, -1)) + } compilerConfig := compiler.Config{ Triple: spec.Triple, @@ -73,11 +83,11 @@ func Compile(pkgName, outpath string, spec *TargetSpec, config *BuildConfig, act GOARCH: spec.GOARCH, GC: config.gc, PanicStrategy: config.panicStrategy, - CFlags: spec.CFlags, - LDFlags: spec.LDFlags, + CFlags: cflags, + LDFlags: ldflags, Debug: config.debug, DumpSSA: config.dumpSSA, - RootDir: sourceDir(), + RootDir: root, GOPATH: getGopath(), BuildTags: spec.BuildTags, } @@ -203,22 +213,22 @@ func Compile(pkgName, outpath string, spec *TargetSpec, config *BuildConfig, act // Prepare link command. executable := filepath.Join(dir, "main") tmppath := executable // final file - ldflags := append(spec.LDFlags, "-o", executable, objfile, "-L", sourceDir()) + ldflags := append(ldflags, "-o", executable, objfile, "-L", root) if spec.RTLib == "compiler-rt" { ldflags = append(ldflags, librt) } // Compile extra files. for i, path := range spec.ExtraFiles { + abspath := filepath.Join(root, path) outpath := filepath.Join(dir, "extra-"+strconv.Itoa(i)+"-"+filepath.Base(path)+".o") cmdName := spec.Compiler if name, ok := commands[cmdName]; ok { cmdName = name } - cmd := exec.Command(cmdName, append(spec.CFlags, "-c", "-o", outpath, path)...) + cmd := exec.Command(cmdName, append(cflags, "-c", "-o", outpath, abspath)...) cmd.Stdout = os.Stdout cmd.Stderr = os.Stderr - cmd.Dir = sourceDir() err := cmd.Run() if err != nil { return &commandError{"failed to build", path, err} @@ -235,10 +245,9 @@ func Compile(pkgName, outpath string, spec *TargetSpec, config *BuildConfig, act if name, ok := commands[cmdName]; ok { cmdName = name } - cmd := exec.Command(cmdName, append(spec.CFlags, "-c", "-o", outpath, path)...) + cmd := exec.Command(cmdName, append(cflags, "-c", "-o", outpath, path)...) cmd.Stdout = os.Stdout cmd.Stderr = os.Stderr - cmd.Dir = sourceDir() err := cmd.Run() if err != nil { return &commandError{"failed to build", path, err} diff --git a/targets/nrf51.json b/targets/nrf51.json index f37db3e9..05ca1dee 100644 --- a/targets/nrf51.json +++ b/targets/nrf51.json @@ -6,7 +6,7 @@ "--target=armv6m-none-eabi", "-Qunused-arguments", "-DNRF51", - "-Ilib/CMSIS/CMSIS/Include" + "-I{root}/lib/CMSIS/CMSIS/Include" ], "ldflags": [ "-T", "targets/nrf51.ld" diff --git a/targets/nrf52.json b/targets/nrf52.json index 46bf567e..945a4151 100644 --- a/targets/nrf52.json +++ b/targets/nrf52.json @@ -7,7 +7,7 @@ "-mfloat-abi=soft", "-Qunused-arguments", "-DNRF52832_XXAA", - "-Ilib/CMSIS/CMSIS/Include" + "-I{root}/lib/CMSIS/CMSIS/Include" ], "ldflags": [ "-T", "targets/nrf52.ld" diff --git a/targets/nrf52840.json b/targets/nrf52840.json index 10a3cbbc..dd6f1e08 100644 --- a/targets/nrf52840.json +++ b/targets/nrf52840.json @@ -7,7 +7,7 @@ "-mfloat-abi=soft", "-Qunused-arguments", "-DNRF52840_XXAA", - "-Ilib/CMSIS/CMSIS/Include" + "-I{root}/lib/CMSIS/CMSIS/Include" ], "ldflags": [ "-T", "targets/nrf52840.ld"