/* * Copyright (c) Hisilicon Technologies Co., Ltd.. 2020-2020. All rights reserved. * Description: Strictly control the compilation options not including options beginning with -Wno * Author: os_build * Create: 2020-03-05 */ package config import ( "strings" "android/soong/android" ) func init() { // remove all "-Wno-XXX" and "-Werror=XXX" options strictGlobalCflags, _ := RemovePrefixFromList("-Wno-", commonGlobalCflags) strictGlobalCflags, _ = RemovePrefixFromList("-Werror=", strictGlobalCflags) // remove "-Wformat" "-Winit-self" // "-Wformat" replaced by "-Wformat=2" // "-Wall" including "-Winit-self" _, strictGlobalCflags = RemoveFromList("-Wformat", strictGlobalCflags) _, strictGlobalCflags = RemoveFromList("-Winit-self", strictGlobalCflags) // Warning compilation options strictGlobalCflags = append(strictGlobalCflags, "-Wextra") strictGlobalCflags = append(strictGlobalCflags, "-Wdate-time") strictGlobalCflags = append(strictGlobalCflags, "-Wfloat-equal") strictGlobalCflags = append(strictGlobalCflags, "-Wshadow") strictGlobalCflags = append(strictGlobalCflags, "-Wformat=2") // Code generation options strictGlobalCflags = append(strictGlobalCflags, "-fno-common") strictGlobalCppflags, _:= RemovePrefixFromList("-Wno-", commonGlobalCppflags) strictGlobalCppflags, _= RemovePrefixFromList("-Werror=", strictGlobalCppflags) strictGlobalCppflags = append(strictGlobalCppflags, "-Weffc++") strictnoOverrideGlobalCflags, _:= RemovePrefixFromList("-Wno-", noOverrideGlobalCflags) strictnoOverrideGlobalCflags, _= RemovePrefixFromList("-Werror=", strictnoOverrideGlobalCflags) strictdeviceGlobalCflags,_ := RemovePrefixFromList("-Wno-", deviceGlobalCflags) strictdeviceGlobalCflags,_ = RemovePrefixFromList("-Werror=", strictdeviceGlobalCflags) stricthostGlobalCflags,_ := RemovePrefixFromList("-Wno-", hostGlobalCflags) stricthostGlobalCflags,_ = RemovePrefixFromList("-Werror=", stricthostGlobalCflags) pctx.StaticVariable("StrictClangGlobalCflags", strings.Join(append(ClangFilterUnknownCflags(strictGlobalCflags), "${ClangStrictCflags}"), " ")) pctx.StaticVariable("StrictClangGlobalCppflags", strings.Join(append(ClangFilterUnknownCflags(strictGlobalCppflags), "${ClangStrictCppflags}"), " ")) pctx.StaticVariable("StrictNoOverrideClangGlobalCflags", strings.Join(append(ClangFilterUnknownCflags(strictnoOverrideGlobalCflags), "${ClangStrictNoOverrideCflags}"), " ")) pctx.VariableFunc("DeviceStrictClangGlobalCflags", func(ctx android.PackageVarContext) string { if ctx.Config().Fuchsia() { return strings.Join(ClangFilterUnknownCflags(strictdeviceGlobalCflags), " ") } else { return strings.Join(append(ClangFilterUnknownCflags(strictdeviceGlobalCflags), "${ClangExtraTargetCflags}"), " ") } }) pctx.StaticVariable("HostStrictClangGlobalCflags", strings.Join(ClangFilterUnknownCflags(stricthostGlobalCflags), " ")) } func RemovePrefixFromList(Prefix string, list []string) (remainder []string, filtered []string) { for _, l := range list { if strings.HasPrefix(l, Prefix) { filtered = append(filtered, l) } else { remainder = append(remainder, l) } } return } func IndexList(s string, list []string) int { for i, l := range list { if l == s { return i } } return -1 } func RemoveFromList(s string, list []string) (bool, []string) { i := IndexList(s, list) if i == -1 { return false, list } result := make([]string, 0, len(list)-1) result = append(result, list[:i]...) for _, l := range list[i+1:] { if l != s { result = append(result, l) } } return true, result }