| // Copyright 2025 Google Inc. All rights reserved. |
| // |
| // Licensed under the Apache License, Version 2.0 (the "License"); |
| // you may not use this file except in compliance with the License. |
| // You may obtain a copy of the License at |
| // |
| // http://www.apache.org/licenses/LICENSE-2.0 |
| // |
| // Unless required by applicable law or agreed to in writing, software |
| // distributed under the License is distributed on an "AS IS" BASIS, |
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| // See the License for the specific language governing permissions and |
| // limitations under the License. |
| |
| package cc |
| |
| import ( |
| "android/soong/android" |
| "strings" |
| ) |
| |
| func init() { |
| android.InitRegistrationContext.RegisterSingletonType("cc_misc_disted_files", ccMiscDistedFilesSingletonFactory) |
| } |
| |
| func ccMiscDistedFilesSingletonFactory() android.Singleton { |
| return &ccMiscDistedFilesSingleton{} |
| } |
| |
| type ccMiscDistedFilesSingleton struct { |
| warningsAllowed []string |
| usingWnoErrors []string |
| } |
| |
| func (s *ccMiscDistedFilesSingleton) GenerateBuildActions(ctx android.SingletonContext) { |
| var warningsAllowed []string |
| var usingWnoErrors []string |
| var missingProfiles []string |
| ctx.VisitAllModules(func(module android.Module) { |
| if v, ok := android.OtherModuleProvider(ctx, module, CcMakeVarsInfoProvider); ok { |
| warningsAllowed = android.AppendIfNotZero(warningsAllowed, v.WarningsAllowed) |
| usingWnoErrors = android.AppendIfNotZero(usingWnoErrors, v.UsingWnoError) |
| missingProfiles = android.AppendIfNotZero(missingProfiles, v.MissingProfile) |
| } |
| }) |
| |
| warningsAllowed = android.SortedUniqueStrings(warningsAllowed) |
| usingWnoErrors = android.SortedUniqueStrings(usingWnoErrors) |
| missingProfiles = android.SortedUniqueStrings(missingProfiles) |
| |
| s.warningsAllowed = warningsAllowed |
| s.usingWnoErrors = usingWnoErrors |
| |
| var sb strings.Builder |
| sb.WriteString("# Modules using -Wno-error\n") |
| for _, nwe := range usingWnoErrors { |
| sb.WriteString(nwe) |
| sb.WriteString("\n") |
| } |
| sb.WriteString("# Modules that allow warnings\n") |
| for _, wa := range warningsAllowed { |
| sb.WriteString(wa) |
| sb.WriteString("\n") |
| } |
| wallWerrFile := android.PathForOutput(ctx, "wall_werror.txt") |
| android.WriteFileRuleVerbatim(ctx, wallWerrFile, sb.String()) |
| |
| // Only dist this file in soong-only builds. In soong+make builds, it contains information |
| // from make modules, so we'll still rely on make to build and dist it. |
| if !ctx.Config().KatiEnabled() { |
| ctx.DistForGoal("droidcore-unbundled", wallWerrFile) |
| } |
| |
| var sb2 strings.Builder |
| sb2.WriteString("# Modules missing PGO profile files\n") |
| for _, mp := range missingProfiles { |
| sb2.WriteString(mp) |
| sb2.WriteString("\n") |
| } |
| profileMissingFile := android.PathForOutput(ctx, "pgo_profile_file_missing.txt") |
| android.WriteFileRuleVerbatim(ctx, profileMissingFile, sb2.String()) |
| |
| ctx.DistForGoal("droidcore-unbundled", profileMissingFile) |
| } |
| |
| func (s *ccMiscDistedFilesSingleton) MakeVars(ctx android.MakeVarsContext) { |
| ctx.Strict("SOONG_MODULES_WARNINGS_ALLOWED", strings.Join(s.warningsAllowed, " ")) |
| ctx.Strict("SOONG_MODULES_USING_WNO_ERROR", strings.Join(s.usingWnoErrors, " ")) |
| } |