aboutsummaryrefslogtreecommitdiffstats
path: root/sys
diff options
context:
space:
mode:
authorDmitry Vyukov <dvyukov@google.com>2019-01-19 19:06:02 +0100
committerDmitry Vyukov <dvyukov@google.com>2019-01-19 19:20:39 +0100
commite935237c9c7214eb37cb35a93c9930b590016094 (patch)
tree08a598517b381cac5e6f1f2773aaa7663c330fcc /sys
parentd2bc932090d1b341921e50191fe1568820f05ca5 (diff)
Makefile: enable -Wunused-const-variable
See discussion in PR #942. Extend support for optional flags in sys/targets as this flag is not supported by gcc 5. Make flags consistent across Makefile and pkg/csource.
Diffstat (limited to 'sys')
-rw-r--r--sys/targets/targets.go65
1 files changed, 46 insertions, 19 deletions
diff --git a/sys/targets/targets.go b/sys/targets/targets.go
index b5acb68d7..5c2222808 100644
--- a/sys/targets/targets.go
+++ b/sys/targets/targets.go
@@ -60,7 +60,7 @@ func Get(OS, arch string) *Target {
return nil
}
target.init.Do(func() {
- checkStaticBuild(target)
+ checkOptionalFlags(target)
})
return target
}
@@ -172,13 +172,11 @@ var List = map[string]map[string]*Target{
},
"freebsd": {
"amd64": {
- PtrSize: 8,
- PageSize: 4 << 10,
- CFlags: []string{"-m64"},
- CrossCFlags: []string{"-m64", "-static"},
- NeedSyscallDefine: func(uint64) bool {
- return false
- },
+ PtrSize: 8,
+ PageSize: 4 << 10,
+ CFlags: []string{"-m64"},
+ CrossCFlags: []string{"-m64", "-static"},
+ NeedSyscallDefine: dontNeedSyscallDefine,
},
},
"netbsd": {
@@ -352,6 +350,22 @@ var oses = map[string]osCommon{
},
}
+var (
+ commonCFlags = []string{
+ "-O2",
+ "-pthread",
+ "-Wall",
+ "-Werror",
+ "-Wparentheses",
+ "-Wunused-const-variable",
+ "-Wframe-larger-than=8192",
+ }
+ optionalCFlags = map[string]bool{
+ "-static": true, // some distributions don't have static libraries
+ "-Wunused-const-variable": true, // gcc 5 does not support this flag
+ }
+)
+
func init() {
for OS, archs := range List {
for arch, target := range archs {
@@ -400,23 +414,36 @@ func initTarget(target *Target, OS, arch string) {
target.CCompiler = fmt.Sprintf("cant-build-%v-on-%v", target.OS, runtime.GOOS)
target.CPP = target.CCompiler
}
+ target.CrossCFlags = append(append([]string{}, commonCFlags...), target.CrossCFlags...)
}
-func checkStaticBuild(target *Target) {
- for i, flag := range target.CrossCFlags {
- if flag == "-static" {
- // Some distributions don't have static libraries.
- if !supportsStatic(target) {
- copy(target.CrossCFlags[i:], target.CrossCFlags[i+1:])
- target.CrossCFlags = target.CrossCFlags[:len(target.CrossCFlags)-1]
- }
- break
+func checkOptionalFlags(target *Target) {
+ flags := make(map[string]*bool)
+ var wg sync.WaitGroup
+ for _, flag := range target.CrossCFlags {
+ if !optionalCFlags[flag] {
+ continue
+ }
+ flags[flag] = new(bool)
+ flag, res := flag, flags[flag]
+ wg.Add(1)
+ go func() {
+ defer wg.Done()
+ *res = checkFlagSupported(target, flag)
+ }()
+ }
+ wg.Wait()
+ for i := 0; i < len(target.CrossCFlags); i++ {
+ if res := flags[target.CrossCFlags[i]]; res != nil && !*res {
+ copy(target.CrossCFlags[i:], target.CrossCFlags[i+1:])
+ target.CrossCFlags = target.CrossCFlags[:len(target.CrossCFlags)-1]
+ i--
}
}
}
-func supportsStatic(target *Target) bool {
- cmd := exec.Command(target.CCompiler, "-x", "c", "-", "-o", "/dev/null", "-static")
+func checkFlagSupported(target *Target, flag string) bool {
+ cmd := exec.Command(target.CCompiler, "-x", "c", "-", "-o", "/dev/null", flag)
cmd.Stdin = strings.NewReader("int main(){}")
return cmd.Run() == nil
}