• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1// Copyright 2025 Google Inc. All rights reserved.
2//
3// Licensed under the Apache License, Version 2.0 (the "License");
4// you may not use this file except in compliance with the License.
5// You may obtain a copy of the License at
6//
7//     http://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS,
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12// See the License for the specific language governing permissions and
13// limitations under the License.
14
15package cc
16
17import (
18	"android/soong/android"
19	"strings"
20)
21
22func init() {
23	android.InitRegistrationContext.RegisterSingletonType("cc_misc_disted_files", ccMiscDistedFilesSingletonFactory)
24}
25
26func ccMiscDistedFilesSingletonFactory() android.Singleton {
27	return &ccMiscDistedFilesSingleton{}
28}
29
30type ccMiscDistedFilesSingleton struct {
31	warningsAllowed []string
32	usingWnoErrors  []string
33}
34
35func (s *ccMiscDistedFilesSingleton) GenerateBuildActions(ctx android.SingletonContext) {
36	var warningsAllowed []string
37	var usingWnoErrors []string
38	var missingProfiles []string
39	ctx.VisitAllModules(func(module android.Module) {
40		if v, ok := android.OtherModuleProvider(ctx, module, CcMakeVarsInfoProvider); ok {
41			warningsAllowed = android.AppendIfNotZero(warningsAllowed, v.WarningsAllowed)
42			usingWnoErrors = android.AppendIfNotZero(usingWnoErrors, v.UsingWnoError)
43			missingProfiles = android.AppendIfNotZero(missingProfiles, v.MissingProfile)
44		}
45	})
46
47	warningsAllowed = android.SortedUniqueStrings(warningsAllowed)
48	usingWnoErrors = android.SortedUniqueStrings(usingWnoErrors)
49	missingProfiles = android.SortedUniqueStrings(missingProfiles)
50
51	s.warningsAllowed = warningsAllowed
52	s.usingWnoErrors = usingWnoErrors
53
54	var sb strings.Builder
55	sb.WriteString("# Modules using -Wno-error\n")
56	for _, nwe := range usingWnoErrors {
57		sb.WriteString(nwe)
58		sb.WriteString("\n")
59	}
60	sb.WriteString("# Modules that allow warnings\n")
61	for _, wa := range warningsAllowed {
62		sb.WriteString(wa)
63		sb.WriteString("\n")
64	}
65	wallWerrFile := android.PathForOutput(ctx, "wall_werror.txt")
66	android.WriteFileRuleVerbatim(ctx, wallWerrFile, sb.String())
67
68	// Only dist this file in soong-only builds. In soong+make builds, it contains information
69	// from make modules, so we'll still rely on make to build and dist it.
70	if !ctx.Config().KatiEnabled() {
71		ctx.DistForGoal("droidcore-unbundled", wallWerrFile)
72	}
73
74	var sb2 strings.Builder
75	sb2.WriteString("# Modules missing PGO profile files\n")
76	for _, mp := range missingProfiles {
77		sb2.WriteString(mp)
78		sb2.WriteString("\n")
79	}
80	profileMissingFile := android.PathForOutput(ctx, "pgo_profile_file_missing.txt")
81	android.WriteFileRuleVerbatim(ctx, profileMissingFile, sb2.String())
82
83	ctx.DistForGoal("droidcore-unbundled", profileMissingFile)
84}
85
86func (s *ccMiscDistedFilesSingleton) MakeVars(ctx android.MakeVarsContext) {
87	ctx.Strict("SOONG_MODULES_WARNINGS_ALLOWED", strings.Join(s.warningsAllowed, " "))
88	ctx.Strict("SOONG_MODULES_USING_WNO_ERROR", strings.Join(s.usingWnoErrors, " "))
89}
90