diff options
| author | Dmitry Vyukov <dvyukov@google.com> | 2019-01-19 19:06:02 +0100 |
|---|---|---|
| committer | Dmitry Vyukov <dvyukov@google.com> | 2019-01-19 19:20:39 +0100 |
| commit | e935237c9c7214eb37cb35a93c9930b590016094 (patch) | |
| tree | 08a598517b381cac5e6f1f2773aaa7663c330fcc /sys | |
| parent | d2bc932090d1b341921e50191fe1568820f05ca5 (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.go | 65 |
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 } |
