From 6479ab2a752ba9ef714199de69d096cee0e6db2d Mon Sep 17 00:00:00 2001 From: Dmitry Vyukov Date: Tue, 5 Jun 2018 17:14:47 +0200 Subject: Makefile, sys/targets: move all native compilation logic to sys/targets We currently have native cross-compilation logic duplicated in Makefile and in sys/targets. Some pieces are missed in one place, some are in another. Only pkg/csource knows how to check for -static support. Move all CC/CFLAGS logic to sys/targets and pull results in Makefile. This should make Makefile work on distros that have broken x86_64-linux-gnu-gcc, now we will use just gcc. And this removes the need to define NOSTATIC, as it's always auto-detected. This also paves the way for making pkg/csource work on OSes other than Linux. --- pkg/csource/build.go | 10 +++------- pkg/csource/common.go | 2 +- pkg/csource/csource.go | 2 +- 3 files changed, 5 insertions(+), 9 deletions(-) (limited to 'pkg/csource') diff --git a/pkg/csource/build.go b/pkg/csource/build.go index cd67aa4f3..185256b8d 100644 --- a/pkg/csource/build.go +++ b/pkg/csource/build.go @@ -19,8 +19,8 @@ import ( // Build builds a C/C++ program from source src and returns name of the resulting binary. // lang can be "c" or "c++". func Build(target *prog.Target, lang, src string) (string, error) { - sysTarget := targets.List[target.OS][target.Arch] - compiler := sysTarget.CCompilerPrefix + "gcc" + sysTarget := targets.Get(target.OS, target.Arch) + compiler := sysTarget.CCompiler if _, err := exec.LookPath(compiler); err != nil { return "", ErrNoCompiler } @@ -38,11 +38,7 @@ func Build(target *prog.Target, lang, src string) (string, error) { // We do generate uint64's for syscall arguments that overflow longs on 32-bit archs. flags = append(flags, "-Wno-overflow") } - out, err := osutil.Command(compiler, append(flags, "-static")...).CombinedOutput() - if err != nil { - // Some distributions don't have static libraries. - out, err = osutil.Command(compiler, flags...).CombinedOutput() - } + out, err := osutil.Command(compiler, flags...).CombinedOutput() if err != nil { os.Remove(bin) data, _ := ioutil.ReadFile(src) diff --git a/pkg/csource/common.go b/pkg/csource/common.go index e8fce42a6..11eff8384 100644 --- a/pkg/csource/common.go +++ b/pkg/csource/common.go @@ -113,7 +113,7 @@ func defineList(p *prog.Prog, opts Options) ([]string, error) { for _, c := range p.Calls { defines = append(defines, "__NR_"+c.Meta.CallName) } - defines = append(defines, targets.List[p.Target.OS][p.Target.Arch].CArch...) + defines = append(defines, targets.Get(p.Target.OS, p.Target.Arch).CArch...) return defines, nil } diff --git a/pkg/csource/csource.go b/pkg/csource/csource.go index 6ac68464f..ddb1fbf3f 100644 --- a/pkg/csource/csource.go +++ b/pkg/csource/csource.go @@ -22,7 +22,7 @@ func Write(p *prog.Prog, opts Options) ([]byte, error) { p: p, opts: opts, target: p.Target, - sysTarget: targets.List[p.Target.OS][p.Target.Arch], + sysTarget: targets.Get(p.Target.OS, p.Target.Arch), w: new(bytes.Buffer), calls: make(map[string]uint64), } -- cgit mrf-deployment