aboutsummaryrefslogtreecommitdiffstats
path: root/pkg/csource
diff options
context:
space:
mode:
authorDmitry Vyukov <dvyukov@google.com>2018-06-05 17:14:47 +0200
committerDmitry Vyukov <dvyukov@google.com>2018-06-06 10:02:03 +0200
commit6479ab2a752ba9ef714199de69d096cee0e6db2d (patch)
tree0bba334b61e1a2337cbd3e9af6e1b63ab12c480a /pkg/csource
parent65c0e1a37ca36fb4799f0d896182a3d070f7a034 (diff)
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.
Diffstat (limited to 'pkg/csource')
-rw-r--r--pkg/csource/build.go10
-rw-r--r--pkg/csource/common.go2
-rw-r--r--pkg/csource/csource.go2
3 files changed, 5 insertions, 9 deletions
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),
}