From e935237c9c7214eb37cb35a93c9930b590016094 Mon Sep 17 00:00:00 2001 From: Dmitry Vyukov Date: Sat, 19 Jan 2019 19:06:02 +0100 Subject: 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. --- sys/targets/targets.go | 65 +++++++++++++++++++++++++++++++++++--------------- 1 file changed, 46 insertions(+), 19 deletions(-) (limited to 'sys') 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 } -- cgit mrf-deployment