xref: /aosp_15_r20/build/soong/cc/androidmk.go (revision 333d2b3687b3a337dbcca9d65000bca186795e39)
1*333d2b36SAndroid Build Coastguard Worker// Copyright 2015 Google Inc. All rights reserved.
2*333d2b36SAndroid Build Coastguard Worker//
3*333d2b36SAndroid Build Coastguard Worker// Licensed under the Apache License, Version 2.0 (the "License");
4*333d2b36SAndroid Build Coastguard Worker// you may not use this file except in compliance with the License.
5*333d2b36SAndroid Build Coastguard Worker// You may obtain a copy of the License at
6*333d2b36SAndroid Build Coastguard Worker//
7*333d2b36SAndroid Build Coastguard Worker//     http://www.apache.org/licenses/LICENSE-2.0
8*333d2b36SAndroid Build Coastguard Worker//
9*333d2b36SAndroid Build Coastguard Worker// Unless required by applicable law or agreed to in writing, software
10*333d2b36SAndroid Build Coastguard Worker// distributed under the License is distributed on an "AS IS" BASIS,
11*333d2b36SAndroid Build Coastguard Worker// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12*333d2b36SAndroid Build Coastguard Worker// See the License for the specific language governing permissions and
13*333d2b36SAndroid Build Coastguard Worker// limitations under the License.
14*333d2b36SAndroid Build Coastguard Worker
15*333d2b36SAndroid Build Coastguard Workerpackage cc
16*333d2b36SAndroid Build Coastguard Worker
17*333d2b36SAndroid Build Coastguard Workerimport (
18*333d2b36SAndroid Build Coastguard Worker	"fmt"
19*333d2b36SAndroid Build Coastguard Worker	"io"
20*333d2b36SAndroid Build Coastguard Worker	"path/filepath"
21*333d2b36SAndroid Build Coastguard Worker	"strings"
22*333d2b36SAndroid Build Coastguard Worker
23*333d2b36SAndroid Build Coastguard Worker	"android/soong/android"
24*333d2b36SAndroid Build Coastguard Worker)
25*333d2b36SAndroid Build Coastguard Worker
26*333d2b36SAndroid Build Coastguard Workervar (
27*333d2b36SAndroid Build Coastguard Worker	NativeBridgeSuffix  = ".native_bridge"
28*333d2b36SAndroid Build Coastguard Worker	ProductSuffix       = ".product"
29*333d2b36SAndroid Build Coastguard Worker	VendorSuffix        = ".vendor"
30*333d2b36SAndroid Build Coastguard Worker	RamdiskSuffix       = ".ramdisk"
31*333d2b36SAndroid Build Coastguard Worker	VendorRamdiskSuffix = ".vendor_ramdisk"
32*333d2b36SAndroid Build Coastguard Worker	RecoverySuffix      = ".recovery"
33*333d2b36SAndroid Build Coastguard Worker	sdkSuffix           = ".sdk"
34*333d2b36SAndroid Build Coastguard Worker)
35*333d2b36SAndroid Build Coastguard Worker
36*333d2b36SAndroid Build Coastguard Workertype AndroidMkContext interface {
37*333d2b36SAndroid Build Coastguard Worker	BaseModuleName() string
38*333d2b36SAndroid Build Coastguard Worker	Target() android.Target
39*333d2b36SAndroid Build Coastguard Worker	subAndroidMk(android.Config, *android.AndroidMkInfo, interface{})
40*333d2b36SAndroid Build Coastguard Worker	Arch() android.Arch
41*333d2b36SAndroid Build Coastguard Worker	Os() android.OsType
42*333d2b36SAndroid Build Coastguard Worker	Host() bool
43*333d2b36SAndroid Build Coastguard Worker	UseVndk() bool
44*333d2b36SAndroid Build Coastguard Worker	VndkVersion() string
45*333d2b36SAndroid Build Coastguard Worker	static() bool
46*333d2b36SAndroid Build Coastguard Worker	InRamdisk() bool
47*333d2b36SAndroid Build Coastguard Worker	InVendorRamdisk() bool
48*333d2b36SAndroid Build Coastguard Worker	InRecovery() bool
49*333d2b36SAndroid Build Coastguard Worker	NotInPlatform() bool
50*333d2b36SAndroid Build Coastguard Worker	InVendorOrProduct() bool
51*333d2b36SAndroid Build Coastguard Worker	ArchSpecific() bool
52*333d2b36SAndroid Build Coastguard Worker}
53*333d2b36SAndroid Build Coastguard Worker
54*333d2b36SAndroid Build Coastguard Workertype subAndroidMkProviderInfoProducer interface {
55*333d2b36SAndroid Build Coastguard Worker	prepareAndroidMKProviderInfo(android.Config, AndroidMkContext, *android.AndroidMkInfo)
56*333d2b36SAndroid Build Coastguard Worker}
57*333d2b36SAndroid Build Coastguard Worker
58*333d2b36SAndroid Build Coastguard Workertype subAndroidMkFooterInfoProducer interface {
59*333d2b36SAndroid Build Coastguard Worker	prepareAndroidMKFooterInfo(android.Config, AndroidMkContext, *android.AndroidMkInfo)
60*333d2b36SAndroid Build Coastguard Worker}
61*333d2b36SAndroid Build Coastguard Worker
62*333d2b36SAndroid Build Coastguard Workerfunc (c *Module) subAndroidMk(config android.Config, entries *android.AndroidMkInfo, obj interface{}) {
63*333d2b36SAndroid Build Coastguard Worker	if c.subAndroidMkOnce == nil {
64*333d2b36SAndroid Build Coastguard Worker		c.subAndroidMkOnce = make(map[subAndroidMkProviderInfoProducer]bool)
65*333d2b36SAndroid Build Coastguard Worker	}
66*333d2b36SAndroid Build Coastguard Worker	if androidmk, ok := obj.(subAndroidMkProviderInfoProducer); ok {
67*333d2b36SAndroid Build Coastguard Worker		if !c.subAndroidMkOnce[androidmk] {
68*333d2b36SAndroid Build Coastguard Worker			c.subAndroidMkOnce[androidmk] = true
69*333d2b36SAndroid Build Coastguard Worker			androidmk.prepareAndroidMKProviderInfo(config, c, entries)
70*333d2b36SAndroid Build Coastguard Worker		}
71*333d2b36SAndroid Build Coastguard Worker	}
72*333d2b36SAndroid Build Coastguard Worker}
73*333d2b36SAndroid Build Coastguard Worker
74*333d2b36SAndroid Build Coastguard Workervar _ android.AndroidMkProviderInfoProducer = (*Module)(nil)
75*333d2b36SAndroid Build Coastguard Worker
76*333d2b36SAndroid Build Coastguard Workerfunc (c *Module) PrepareAndroidMKProviderInfo(config android.Config) *android.AndroidMkProviderInfo {
77*333d2b36SAndroid Build Coastguard Worker	if c.hideApexVariantFromMake || c.Properties.HideFromMake {
78*333d2b36SAndroid Build Coastguard Worker		return &android.AndroidMkProviderInfo{
79*333d2b36SAndroid Build Coastguard Worker			PrimaryInfo: android.AndroidMkInfo{
80*333d2b36SAndroid Build Coastguard Worker				Disabled: true,
81*333d2b36SAndroid Build Coastguard Worker			},
82*333d2b36SAndroid Build Coastguard Worker		}
83*333d2b36SAndroid Build Coastguard Worker	}
84*333d2b36SAndroid Build Coastguard Worker
85*333d2b36SAndroid Build Coastguard Worker	providerData := android.AndroidMkProviderInfo{
86*333d2b36SAndroid Build Coastguard Worker		PrimaryInfo: android.AndroidMkInfo{
87*333d2b36SAndroid Build Coastguard Worker			OutputFile:   c.outputFile,
88*333d2b36SAndroid Build Coastguard Worker			Required:     c.Properties.AndroidMkRuntimeLibs,
89*333d2b36SAndroid Build Coastguard Worker			OverrideName: c.BaseModuleName(),
90*333d2b36SAndroid Build Coastguard Worker			Include:      "$(BUILD_SYSTEM)/soong_cc_rust_prebuilt.mk",
91*333d2b36SAndroid Build Coastguard Worker			EntryMap:     make(map[string][]string),
92*333d2b36SAndroid Build Coastguard Worker		},
93*333d2b36SAndroid Build Coastguard Worker	}
94*333d2b36SAndroid Build Coastguard Worker
95*333d2b36SAndroid Build Coastguard Worker	entries := &providerData.PrimaryInfo
96*333d2b36SAndroid Build Coastguard Worker	if len(c.Properties.Logtags) > 0 {
97*333d2b36SAndroid Build Coastguard Worker		entries.AddStrings("LOCAL_SOONG_LOGTAGS_FILES", c.logtagsPaths.Strings()...)
98*333d2b36SAndroid Build Coastguard Worker	}
99*333d2b36SAndroid Build Coastguard Worker	// Note: Pass the exact value of AndroidMkSystemSharedLibs to the Make
100*333d2b36SAndroid Build Coastguard Worker	// world, even if it is an empty list. In the Make world,
101*333d2b36SAndroid Build Coastguard Worker	// LOCAL_SYSTEM_SHARED_LIBRARIES defaults to "none", which is expanded
102*333d2b36SAndroid Build Coastguard Worker	// to the default list of system shared libs by the build system.
103*333d2b36SAndroid Build Coastguard Worker	// Soong computes the exact list of system shared libs, so we have to
104*333d2b36SAndroid Build Coastguard Worker	// override the default value when the list of libs is actually empty.
105*333d2b36SAndroid Build Coastguard Worker	entries.SetString("LOCAL_SYSTEM_SHARED_LIBRARIES", strings.Join(c.Properties.AndroidMkSystemSharedLibs, " "))
106*333d2b36SAndroid Build Coastguard Worker	if len(c.Properties.AndroidMkSharedLibs) > 0 {
107*333d2b36SAndroid Build Coastguard Worker		entries.AddStrings("LOCAL_SHARED_LIBRARIES", c.Properties.AndroidMkSharedLibs...)
108*333d2b36SAndroid Build Coastguard Worker	}
109*333d2b36SAndroid Build Coastguard Worker	if len(c.Properties.AndroidMkRuntimeLibs) > 0 {
110*333d2b36SAndroid Build Coastguard Worker		entries.AddStrings("LOCAL_RUNTIME_LIBRARIES", c.Properties.AndroidMkRuntimeLibs...)
111*333d2b36SAndroid Build Coastguard Worker	}
112*333d2b36SAndroid Build Coastguard Worker	entries.SetString("LOCAL_SOONG_LINK_TYPE", c.makeLinkType)
113*333d2b36SAndroid Build Coastguard Worker	if c.InVendor() {
114*333d2b36SAndroid Build Coastguard Worker		entries.SetBool("LOCAL_IN_VENDOR", true)
115*333d2b36SAndroid Build Coastguard Worker	} else if c.InProduct() {
116*333d2b36SAndroid Build Coastguard Worker		entries.SetBool("LOCAL_IN_PRODUCT", true)
117*333d2b36SAndroid Build Coastguard Worker	}
118*333d2b36SAndroid Build Coastguard Worker	if c.Properties.SdkAndPlatformVariantVisibleToMake {
119*333d2b36SAndroid Build Coastguard Worker		// Add the unsuffixed name to SOONG_SDK_VARIANT_MODULES so that Make can rewrite
120*333d2b36SAndroid Build Coastguard Worker		// dependencies to the .sdk suffix when building a module that uses the SDK.
121*333d2b36SAndroid Build Coastguard Worker		entries.SetString("SOONG_SDK_VARIANT_MODULES",
122*333d2b36SAndroid Build Coastguard Worker			"$(SOONG_SDK_VARIANT_MODULES) $(patsubst %.sdk,%,$(LOCAL_MODULE))")
123*333d2b36SAndroid Build Coastguard Worker	}
124*333d2b36SAndroid Build Coastguard Worker	entries.SetBoolIfTrue("LOCAL_UNINSTALLABLE_MODULE", c.IsSkipInstall())
125*333d2b36SAndroid Build Coastguard Worker
126*333d2b36SAndroid Build Coastguard Worker	for _, feature := range c.features {
127*333d2b36SAndroid Build Coastguard Worker		c.subAndroidMk(config, entries, feature)
128*333d2b36SAndroid Build Coastguard Worker	}
129*333d2b36SAndroid Build Coastguard Worker
130*333d2b36SAndroid Build Coastguard Worker	c.subAndroidMk(config, entries, c.compiler)
131*333d2b36SAndroid Build Coastguard Worker	c.subAndroidMk(config, entries, c.linker)
132*333d2b36SAndroid Build Coastguard Worker	if c.sanitize != nil {
133*333d2b36SAndroid Build Coastguard Worker		c.subAndroidMk(config, entries, c.sanitize)
134*333d2b36SAndroid Build Coastguard Worker	}
135*333d2b36SAndroid Build Coastguard Worker	c.subAndroidMk(config, entries, c.installer)
136*333d2b36SAndroid Build Coastguard Worker
137*333d2b36SAndroid Build Coastguard Worker	entries.SubName += c.Properties.SubName
138*333d2b36SAndroid Build Coastguard Worker
139*333d2b36SAndroid Build Coastguard Worker	// The footer info comes at the last step, previously it was achieved by
140*333d2b36SAndroid Build Coastguard Worker	// calling some extra footer function that were added earlier. Because we no
141*333d2b36SAndroid Build Coastguard Worker	// longer use these extra footer functions, we need to put this step at the
142*333d2b36SAndroid Build Coastguard Worker	// last one.
143*333d2b36SAndroid Build Coastguard Worker	if c.Properties.IsSdkVariant && c.Properties.SdkAndPlatformVariantVisibleToMake &&
144*333d2b36SAndroid Build Coastguard Worker		c.CcLibraryInterface() && c.Shared() {
145*333d2b36SAndroid Build Coastguard Worker		// Using the SDK variant as a JNI library needs a copy of the .so that
146*333d2b36SAndroid Build Coastguard Worker		// is not named .sdk.so so that it can be packaged into the APK with
147*333d2b36SAndroid Build Coastguard Worker		// the right name.
148*333d2b36SAndroid Build Coastguard Worker		entries.FooterStrings = []string{
149*333d2b36SAndroid Build Coastguard Worker			fmt.Sprintf("%s %s %s", "$(eval $(call copy-one-file,",
150*333d2b36SAndroid Build Coastguard Worker				"$(LOCAL_BUILT_MODULE),",
151*333d2b36SAndroid Build Coastguard Worker				"$(patsubst %.sdk.so,%.so,$(LOCAL_BUILT_MODULE))))")}
152*333d2b36SAndroid Build Coastguard Worker	}
153*333d2b36SAndroid Build Coastguard Worker
154*333d2b36SAndroid Build Coastguard Worker	for _, obj := range []interface{}{c.compiler, c.linker, c.sanitize, c.installer} {
155*333d2b36SAndroid Build Coastguard Worker		if obj == nil {
156*333d2b36SAndroid Build Coastguard Worker			continue
157*333d2b36SAndroid Build Coastguard Worker		}
158*333d2b36SAndroid Build Coastguard Worker		if p, ok := obj.(subAndroidMkFooterInfoProducer); ok {
159*333d2b36SAndroid Build Coastguard Worker			p.prepareAndroidMKFooterInfo(config, c, entries)
160*333d2b36SAndroid Build Coastguard Worker		}
161*333d2b36SAndroid Build Coastguard Worker	}
162*333d2b36SAndroid Build Coastguard Worker
163*333d2b36SAndroid Build Coastguard Worker	return &providerData
164*333d2b36SAndroid Build Coastguard Worker}
165*333d2b36SAndroid Build Coastguard Worker
166*333d2b36SAndroid Build Coastguard Workerfunc androidMkWriteExtraTestConfigs(extraTestConfigs android.Paths, entries *android.AndroidMkInfo) {
167*333d2b36SAndroid Build Coastguard Worker	if len(extraTestConfigs) > 0 {
168*333d2b36SAndroid Build Coastguard Worker		entries.AddStrings("LOCAL_EXTRA_FULL_TEST_CONFIGS", extraTestConfigs.Strings()...)
169*333d2b36SAndroid Build Coastguard Worker	}
170*333d2b36SAndroid Build Coastguard Worker}
171*333d2b36SAndroid Build Coastguard Worker
172*333d2b36SAndroid Build Coastguard Workerfunc makeOverrideModuleNames(ctx AndroidMkContext, overrides []string) []string {
173*333d2b36SAndroid Build Coastguard Worker	if ctx.Target().NativeBridge == android.NativeBridgeEnabled {
174*333d2b36SAndroid Build Coastguard Worker		var result []string
175*333d2b36SAndroid Build Coastguard Worker		for _, override := range overrides {
176*333d2b36SAndroid Build Coastguard Worker			result = append(result, override+NativeBridgeSuffix)
177*333d2b36SAndroid Build Coastguard Worker		}
178*333d2b36SAndroid Build Coastguard Worker		return result
179*333d2b36SAndroid Build Coastguard Worker	}
180*333d2b36SAndroid Build Coastguard Worker
181*333d2b36SAndroid Build Coastguard Worker	return overrides
182*333d2b36SAndroid Build Coastguard Worker}
183*333d2b36SAndroid Build Coastguard Worker
184*333d2b36SAndroid Build Coastguard Workerfunc (library *libraryDecorator) androidMkWriteExportedFlags(entries *android.AndroidMkInfo) {
185*333d2b36SAndroid Build Coastguard Worker	var exportedFlags []string
186*333d2b36SAndroid Build Coastguard Worker	var includeDirs android.Paths
187*333d2b36SAndroid Build Coastguard Worker	var systemIncludeDirs android.Paths
188*333d2b36SAndroid Build Coastguard Worker	var exportedDeps android.Paths
189*333d2b36SAndroid Build Coastguard Worker
190*333d2b36SAndroid Build Coastguard Worker	if library.flagExporterInfo != nil {
191*333d2b36SAndroid Build Coastguard Worker		exportedFlags = library.flagExporterInfo.Flags
192*333d2b36SAndroid Build Coastguard Worker		includeDirs = library.flagExporterInfo.IncludeDirs
193*333d2b36SAndroid Build Coastguard Worker		systemIncludeDirs = library.flagExporterInfo.SystemIncludeDirs
194*333d2b36SAndroid Build Coastguard Worker		exportedDeps = library.flagExporterInfo.Deps
195*333d2b36SAndroid Build Coastguard Worker	} else {
196*333d2b36SAndroid Build Coastguard Worker		exportedFlags = library.flagExporter.flags
197*333d2b36SAndroid Build Coastguard Worker		includeDirs = library.flagExporter.dirs
198*333d2b36SAndroid Build Coastguard Worker		systemIncludeDirs = library.flagExporter.systemDirs
199*333d2b36SAndroid Build Coastguard Worker		exportedDeps = library.flagExporter.deps
200*333d2b36SAndroid Build Coastguard Worker	}
201*333d2b36SAndroid Build Coastguard Worker	for _, dir := range includeDirs {
202*333d2b36SAndroid Build Coastguard Worker		exportedFlags = append(exportedFlags, "-I"+dir.String())
203*333d2b36SAndroid Build Coastguard Worker	}
204*333d2b36SAndroid Build Coastguard Worker	for _, dir := range systemIncludeDirs {
205*333d2b36SAndroid Build Coastguard Worker		exportedFlags = append(exportedFlags, "-isystem "+dir.String())
206*333d2b36SAndroid Build Coastguard Worker	}
207*333d2b36SAndroid Build Coastguard Worker	if len(exportedFlags) > 0 {
208*333d2b36SAndroid Build Coastguard Worker		entries.AddStrings("LOCAL_EXPORT_CFLAGS", exportedFlags...)
209*333d2b36SAndroid Build Coastguard Worker	}
210*333d2b36SAndroid Build Coastguard Worker	if len(exportedDeps) > 0 {
211*333d2b36SAndroid Build Coastguard Worker		entries.AddStrings("LOCAL_EXPORT_C_INCLUDE_DEPS", exportedDeps.Strings()...)
212*333d2b36SAndroid Build Coastguard Worker	}
213*333d2b36SAndroid Build Coastguard Worker}
214*333d2b36SAndroid Build Coastguard Worker
215*333d2b36SAndroid Build Coastguard Workerfunc (library *libraryDecorator) androidMkEntriesWriteAdditionalDependenciesForSourceAbiDiff(entries *android.AndroidMkInfo) {
216*333d2b36SAndroid Build Coastguard Worker	if !library.static() {
217*333d2b36SAndroid Build Coastguard Worker		entries.AddPaths("LOCAL_ADDITIONAL_DEPENDENCIES", library.sAbiDiff)
218*333d2b36SAndroid Build Coastguard Worker	}
219*333d2b36SAndroid Build Coastguard Worker}
220*333d2b36SAndroid Build Coastguard Worker
221*333d2b36SAndroid Build Coastguard Worker// TODO(ccross): remove this once apex/androidmk.go is converted to AndroidMkEntries
222*333d2b36SAndroid Build Coastguard Workerfunc (library *libraryDecorator) androidMkWriteAdditionalDependenciesForSourceAbiDiff(w io.Writer) {
223*333d2b36SAndroid Build Coastguard Worker	if !library.static() {
224*333d2b36SAndroid Build Coastguard Worker		fmt.Fprintln(w, "LOCAL_ADDITIONAL_DEPENDENCIES +=", strings.Join(library.sAbiDiff.Strings(), " "))
225*333d2b36SAndroid Build Coastguard Worker	}
226*333d2b36SAndroid Build Coastguard Worker}
227*333d2b36SAndroid Build Coastguard Worker
228*333d2b36SAndroid Build Coastguard Workerfunc (library *libraryDecorator) prepareAndroidMKProviderInfo(config android.Config, ctx AndroidMkContext, entries *android.AndroidMkInfo) {
229*333d2b36SAndroid Build Coastguard Worker	if library.static() {
230*333d2b36SAndroid Build Coastguard Worker		entries.Class = "STATIC_LIBRARIES"
231*333d2b36SAndroid Build Coastguard Worker	} else if library.shared() {
232*333d2b36SAndroid Build Coastguard Worker		entries.Class = "SHARED_LIBRARIES"
233*333d2b36SAndroid Build Coastguard Worker		entries.SetString("LOCAL_SOONG_TOC", library.toc().String())
234*333d2b36SAndroid Build Coastguard Worker		if !library.buildStubs() && library.unstrippedOutputFile != nil {
235*333d2b36SAndroid Build Coastguard Worker			entries.SetString("LOCAL_SOONG_UNSTRIPPED_BINARY", library.unstrippedOutputFile.String())
236*333d2b36SAndroid Build Coastguard Worker		}
237*333d2b36SAndroid Build Coastguard Worker		if len(library.Properties.Overrides) > 0 {
238*333d2b36SAndroid Build Coastguard Worker			entries.SetString("LOCAL_OVERRIDES_MODULES", strings.Join(makeOverrideModuleNames(ctx, library.Properties.Overrides), " "))
239*333d2b36SAndroid Build Coastguard Worker		}
240*333d2b36SAndroid Build Coastguard Worker		if len(library.postInstallCmds) > 0 {
241*333d2b36SAndroid Build Coastguard Worker			entries.SetString("LOCAL_POST_INSTALL_CMD", strings.Join(library.postInstallCmds, "&& "))
242*333d2b36SAndroid Build Coastguard Worker		}
243*333d2b36SAndroid Build Coastguard Worker	} else if library.header() {
244*333d2b36SAndroid Build Coastguard Worker		entries.Class = "HEADER_LIBRARIES"
245*333d2b36SAndroid Build Coastguard Worker	}
246*333d2b36SAndroid Build Coastguard Worker
247*333d2b36SAndroid Build Coastguard Worker	if library.distFile != nil {
248*333d2b36SAndroid Build Coastguard Worker		entries.DistFiles = android.MakeDefaultDistFiles(library.distFile)
249*333d2b36SAndroid Build Coastguard Worker	}
250*333d2b36SAndroid Build Coastguard Worker
251*333d2b36SAndroid Build Coastguard Worker	library.androidMkWriteExportedFlags(entries)
252*333d2b36SAndroid Build Coastguard Worker	library.androidMkEntriesWriteAdditionalDependenciesForSourceAbiDiff(entries)
253*333d2b36SAndroid Build Coastguard Worker
254*333d2b36SAndroid Build Coastguard Worker	if entries.OutputFile.Valid() {
255*333d2b36SAndroid Build Coastguard Worker		_, _, ext := android.SplitFileExt(entries.OutputFile.Path().Base())
256*333d2b36SAndroid Build Coastguard Worker		entries.SetString("LOCAL_BUILT_MODULE_STEM", "$(LOCAL_MODULE)"+ext)
257*333d2b36SAndroid Build Coastguard Worker	}
258*333d2b36SAndroid Build Coastguard Worker
259*333d2b36SAndroid Build Coastguard Worker	if library.coverageOutputFile.Valid() {
260*333d2b36SAndroid Build Coastguard Worker		entries.SetString("LOCAL_PREBUILT_COVERAGE_ARCHIVE", library.coverageOutputFile.String())
261*333d2b36SAndroid Build Coastguard Worker	}
262*333d2b36SAndroid Build Coastguard Worker
263*333d2b36SAndroid Build Coastguard Worker	if library.shared() && !library.buildStubs() {
264*333d2b36SAndroid Build Coastguard Worker		ctx.subAndroidMk(config, entries, library.baseInstaller)
265*333d2b36SAndroid Build Coastguard Worker	} else {
266*333d2b36SAndroid Build Coastguard Worker		if library.buildStubs() && library.stubsVersion() != "" {
267*333d2b36SAndroid Build Coastguard Worker			entries.SubName = "." + library.stubsVersion()
268*333d2b36SAndroid Build Coastguard Worker		}
269*333d2b36SAndroid Build Coastguard Worker		// library.makeUninstallable() depends on this to bypass HideFromMake() for
270*333d2b36SAndroid Build Coastguard Worker		// static libraries.
271*333d2b36SAndroid Build Coastguard Worker		entries.SetBool("LOCAL_UNINSTALLABLE_MODULE", true)
272*333d2b36SAndroid Build Coastguard Worker		if library.buildStubs() {
273*333d2b36SAndroid Build Coastguard Worker			entries.SetBool("LOCAL_NO_NOTICE_FILE", true)
274*333d2b36SAndroid Build Coastguard Worker		}
275*333d2b36SAndroid Build Coastguard Worker	}
276*333d2b36SAndroid Build Coastguard Worker	// If a library providing a stub is included in an APEX, the private APIs of the library
277*333d2b36SAndroid Build Coastguard Worker	// is accessible only inside the APEX. From outside of the APEX, clients can only use the
278*333d2b36SAndroid Build Coastguard Worker	// public APIs via the stub. To enforce this, the (latest version of the) stub gets the
279*333d2b36SAndroid Build Coastguard Worker	// name of the library. The impl library instead gets the `.bootstrap` suffix to so that
280*333d2b36SAndroid Build Coastguard Worker	// they can be exceptionally used directly when APEXes are not available (e.g. during the
281*333d2b36SAndroid Build Coastguard Worker	// very early stage in the boot process).
282*333d2b36SAndroid Build Coastguard Worker	if len(library.Properties.Stubs.Versions) > 0 && !ctx.Host() && ctx.NotInPlatform() &&
283*333d2b36SAndroid Build Coastguard Worker		!ctx.InRamdisk() && !ctx.InVendorRamdisk() && !ctx.InRecovery() && !ctx.InVendorOrProduct() && !ctx.static() {
284*333d2b36SAndroid Build Coastguard Worker		if library.buildStubs() && library.isLatestStubVersion() {
285*333d2b36SAndroid Build Coastguard Worker			entries.SubName = ""
286*333d2b36SAndroid Build Coastguard Worker		}
287*333d2b36SAndroid Build Coastguard Worker		if !library.buildStubs() {
288*333d2b36SAndroid Build Coastguard Worker			entries.SubName = ".bootstrap"
289*333d2b36SAndroid Build Coastguard Worker		}
290*333d2b36SAndroid Build Coastguard Worker	}
291*333d2b36SAndroid Build Coastguard Worker}
292*333d2b36SAndroid Build Coastguard Worker
293*333d2b36SAndroid Build Coastguard Workerfunc (object *objectLinker) prepareAndroidMKProviderInfo(config android.Config, ctx AndroidMkContext, entries *android.AndroidMkInfo) {
294*333d2b36SAndroid Build Coastguard Worker	entries.Class = "STATIC_LIBRARIES"
295*333d2b36SAndroid Build Coastguard Worker}
296*333d2b36SAndroid Build Coastguard Worker
297*333d2b36SAndroid Build Coastguard Workerfunc (object *objectLinker) prepareAndroidMKFooterInfo(config android.Config, ctx AndroidMkContext, entries *android.AndroidMkInfo) {
298*333d2b36SAndroid Build Coastguard Worker	out := entries.OutputFile.Path()
299*333d2b36SAndroid Build Coastguard Worker	name := ctx.BaseModuleName()
300*333d2b36SAndroid Build Coastguard Worker	if entries.OverrideName != "" {
301*333d2b36SAndroid Build Coastguard Worker		name = entries.OverrideName
302*333d2b36SAndroid Build Coastguard Worker	}
303*333d2b36SAndroid Build Coastguard Worker
304*333d2b36SAndroid Build Coastguard Worker	prefix := ""
305*333d2b36SAndroid Build Coastguard Worker	if ctx.ArchSpecific() {
306*333d2b36SAndroid Build Coastguard Worker		switch ctx.Os().Class {
307*333d2b36SAndroid Build Coastguard Worker		case android.Host:
308*333d2b36SAndroid Build Coastguard Worker			if ctx.Target().HostCross {
309*333d2b36SAndroid Build Coastguard Worker				prefix = "HOST_CROSS_"
310*333d2b36SAndroid Build Coastguard Worker			} else {
311*333d2b36SAndroid Build Coastguard Worker				prefix = "HOST_"
312*333d2b36SAndroid Build Coastguard Worker			}
313*333d2b36SAndroid Build Coastguard Worker		case android.Device:
314*333d2b36SAndroid Build Coastguard Worker			prefix = "TARGET_"
315*333d2b36SAndroid Build Coastguard Worker
316*333d2b36SAndroid Build Coastguard Worker		}
317*333d2b36SAndroid Build Coastguard Worker
318*333d2b36SAndroid Build Coastguard Worker		if ctx.Arch().ArchType != config.Targets[ctx.Os()][0].Arch.ArchType {
319*333d2b36SAndroid Build Coastguard Worker			prefix = "2ND_" + prefix
320*333d2b36SAndroid Build Coastguard Worker		}
321*333d2b36SAndroid Build Coastguard Worker	}
322*333d2b36SAndroid Build Coastguard Worker
323*333d2b36SAndroid Build Coastguard Worker	varname := fmt.Sprintf("SOONG_%sOBJECT_%s%s", prefix, name, entries.SubName)
324*333d2b36SAndroid Build Coastguard Worker
325*333d2b36SAndroid Build Coastguard Worker	entries.FooterStrings = append(entries.FooterStrings,
326*333d2b36SAndroid Build Coastguard Worker		fmt.Sprintf("\n%s := %s\n.KATI_READONLY: %s", varname, out.String(), varname))
327*333d2b36SAndroid Build Coastguard Worker}
328*333d2b36SAndroid Build Coastguard Worker
329*333d2b36SAndroid Build Coastguard Workerfunc (test *testDecorator) prepareAndroidMKProviderInfo(config android.Config, ctx AndroidMkContext, entries *android.AndroidMkInfo) {
330*333d2b36SAndroid Build Coastguard Worker	if len(test.InstallerProperties.Test_suites) > 0 {
331*333d2b36SAndroid Build Coastguard Worker		entries.AddCompatibilityTestSuites(test.InstallerProperties.Test_suites...)
332*333d2b36SAndroid Build Coastguard Worker	}
333*333d2b36SAndroid Build Coastguard Worker}
334*333d2b36SAndroid Build Coastguard Worker
335*333d2b36SAndroid Build Coastguard Workerfunc (binary *binaryDecorator) prepareAndroidMKProviderInfo(config android.Config, ctx AndroidMkContext, entries *android.AndroidMkInfo) {
336*333d2b36SAndroid Build Coastguard Worker	ctx.subAndroidMk(config, entries, binary.baseInstaller)
337*333d2b36SAndroid Build Coastguard Worker
338*333d2b36SAndroid Build Coastguard Worker	entries.Class = "EXECUTABLES"
339*333d2b36SAndroid Build Coastguard Worker	entries.DistFiles = binary.distFiles
340*333d2b36SAndroid Build Coastguard Worker	entries.SetString("LOCAL_SOONG_UNSTRIPPED_BINARY", binary.unstrippedOutputFile.String())
341*333d2b36SAndroid Build Coastguard Worker	if len(binary.symlinks) > 0 {
342*333d2b36SAndroid Build Coastguard Worker		entries.AddStrings("LOCAL_MODULE_SYMLINKS", binary.symlinks...)
343*333d2b36SAndroid Build Coastguard Worker	}
344*333d2b36SAndroid Build Coastguard Worker
345*333d2b36SAndroid Build Coastguard Worker	if binary.coverageOutputFile.Valid() {
346*333d2b36SAndroid Build Coastguard Worker		entries.SetString("LOCAL_PREBUILT_COVERAGE_ARCHIVE", binary.coverageOutputFile.String())
347*333d2b36SAndroid Build Coastguard Worker	}
348*333d2b36SAndroid Build Coastguard Worker
349*333d2b36SAndroid Build Coastguard Worker	if len(binary.Properties.Overrides) > 0 {
350*333d2b36SAndroid Build Coastguard Worker		entries.SetString("LOCAL_OVERRIDES_MODULES", strings.Join(makeOverrideModuleNames(ctx, binary.Properties.Overrides), " "))
351*333d2b36SAndroid Build Coastguard Worker	}
352*333d2b36SAndroid Build Coastguard Worker	if len(binary.postInstallCmds) > 0 {
353*333d2b36SAndroid Build Coastguard Worker		entries.SetString("LOCAL_POST_INSTALL_CMD", strings.Join(binary.postInstallCmds, "&& "))
354*333d2b36SAndroid Build Coastguard Worker	}
355*333d2b36SAndroid Build Coastguard Worker}
356*333d2b36SAndroid Build Coastguard Worker
357*333d2b36SAndroid Build Coastguard Workerfunc (benchmark *benchmarkDecorator) prepareAndroidMKProviderInfo(config android.Config, ctx AndroidMkContext, entries *android.AndroidMkInfo) {
358*333d2b36SAndroid Build Coastguard Worker	ctx.subAndroidMk(config, entries, benchmark.binaryDecorator)
359*333d2b36SAndroid Build Coastguard Worker	entries.Class = "NATIVE_TESTS"
360*333d2b36SAndroid Build Coastguard Worker	if len(benchmark.Properties.Test_suites) > 0 {
361*333d2b36SAndroid Build Coastguard Worker		entries.AddCompatibilityTestSuites(benchmark.Properties.Test_suites...)
362*333d2b36SAndroid Build Coastguard Worker	}
363*333d2b36SAndroid Build Coastguard Worker	if benchmark.testConfig != nil {
364*333d2b36SAndroid Build Coastguard Worker		entries.SetString("LOCAL_FULL_TEST_CONFIG", benchmark.testConfig.String())
365*333d2b36SAndroid Build Coastguard Worker	}
366*333d2b36SAndroid Build Coastguard Worker	entries.SetBool("LOCAL_NATIVE_BENCHMARK", true)
367*333d2b36SAndroid Build Coastguard Worker	if !BoolDefault(benchmark.Properties.Auto_gen_config, true) {
368*333d2b36SAndroid Build Coastguard Worker		entries.SetBool("LOCAL_DISABLE_AUTO_GENERATE_TEST_CONFIG", true)
369*333d2b36SAndroid Build Coastguard Worker	}
370*333d2b36SAndroid Build Coastguard Worker}
371*333d2b36SAndroid Build Coastguard Worker
372*333d2b36SAndroid Build Coastguard Workerfunc (test *testBinary) prepareAndroidMKProviderInfo(config android.Config, ctx AndroidMkContext, entries *android.AndroidMkInfo) {
373*333d2b36SAndroid Build Coastguard Worker	ctx.subAndroidMk(config, entries, test.binaryDecorator)
374*333d2b36SAndroid Build Coastguard Worker	ctx.subAndroidMk(config, entries, test.testDecorator)
375*333d2b36SAndroid Build Coastguard Worker
376*333d2b36SAndroid Build Coastguard Worker	entries.Class = "NATIVE_TESTS"
377*333d2b36SAndroid Build Coastguard Worker	if test.testConfig != nil {
378*333d2b36SAndroid Build Coastguard Worker		entries.SetString("LOCAL_FULL_TEST_CONFIG", test.testConfig.String())
379*333d2b36SAndroid Build Coastguard Worker	}
380*333d2b36SAndroid Build Coastguard Worker	if !BoolDefault(test.Properties.Auto_gen_config, true) {
381*333d2b36SAndroid Build Coastguard Worker		entries.SetBool("LOCAL_DISABLE_AUTO_GENERATE_TEST_CONFIG", true)
382*333d2b36SAndroid Build Coastguard Worker	}
383*333d2b36SAndroid Build Coastguard Worker	entries.AddStrings("LOCAL_TEST_MAINLINE_MODULES", test.Properties.Test_mainline_modules...)
384*333d2b36SAndroid Build Coastguard Worker
385*333d2b36SAndroid Build Coastguard Worker	entries.SetBoolIfTrue("LOCAL_COMPATIBILITY_PER_TESTCASE_DIRECTORY", Bool(test.Properties.Per_testcase_directory))
386*333d2b36SAndroid Build Coastguard Worker	if len(test.Properties.Data_bins) > 0 {
387*333d2b36SAndroid Build Coastguard Worker		entries.AddStrings("LOCAL_TEST_DATA_BINS", test.Properties.Data_bins...)
388*333d2b36SAndroid Build Coastguard Worker	}
389*333d2b36SAndroid Build Coastguard Worker
390*333d2b36SAndroid Build Coastguard Worker	test.Properties.Test_options.CommonTestOptions.SetAndroidMkInfoEntries(entries)
391*333d2b36SAndroid Build Coastguard Worker
392*333d2b36SAndroid Build Coastguard Worker	androidMkWriteExtraTestConfigs(test.extraTestConfigs, entries)
393*333d2b36SAndroid Build Coastguard Worker}
394*333d2b36SAndroid Build Coastguard Worker
395*333d2b36SAndroid Build Coastguard Workerfunc (fuzz *fuzzBinary) prepareAndroidMKProviderInfo(config android.Config, ctx AndroidMkContext, entries *android.AndroidMkInfo) {
396*333d2b36SAndroid Build Coastguard Worker	ctx.subAndroidMk(config, entries, fuzz.binaryDecorator)
397*333d2b36SAndroid Build Coastguard Worker
398*333d2b36SAndroid Build Coastguard Worker	entries.SetBool("LOCAL_IS_FUZZ_TARGET", true)
399*333d2b36SAndroid Build Coastguard Worker	if fuzz.installedSharedDeps != nil {
400*333d2b36SAndroid Build Coastguard Worker		// TOOD: move to install dep
401*333d2b36SAndroid Build Coastguard Worker		entries.AddStrings("LOCAL_FUZZ_INSTALLED_SHARED_DEPS", fuzz.installedSharedDeps...)
402*333d2b36SAndroid Build Coastguard Worker	}
403*333d2b36SAndroid Build Coastguard Worker}
404*333d2b36SAndroid Build Coastguard Worker
405*333d2b36SAndroid Build Coastguard Workerfunc (test *testLibrary) prepareAndroidMKProviderInfo(config android.Config, ctx AndroidMkContext, entries *android.AndroidMkInfo) {
406*333d2b36SAndroid Build Coastguard Worker	ctx.subAndroidMk(config, entries, test.libraryDecorator)
407*333d2b36SAndroid Build Coastguard Worker	ctx.subAndroidMk(config, entries, test.testDecorator)
408*333d2b36SAndroid Build Coastguard Worker}
409*333d2b36SAndroid Build Coastguard Worker
410*333d2b36SAndroid Build Coastguard Workerfunc (installer *baseInstaller) prepareAndroidMKProviderInfo(config android.Config, ctx AndroidMkContext, entries *android.AndroidMkInfo) {
411*333d2b36SAndroid Build Coastguard Worker	if installer.path == (android.InstallPath{}) {
412*333d2b36SAndroid Build Coastguard Worker		return
413*333d2b36SAndroid Build Coastguard Worker	}
414*333d2b36SAndroid Build Coastguard Worker
415*333d2b36SAndroid Build Coastguard Worker	path, file := filepath.Split(installer.path.String())
416*333d2b36SAndroid Build Coastguard Worker	stem, suffix, _ := android.SplitFileExt(file)
417*333d2b36SAndroid Build Coastguard Worker	entries.SetString("LOCAL_MODULE_SUFFIX", suffix)
418*333d2b36SAndroid Build Coastguard Worker	entries.SetString("LOCAL_MODULE_PATH", path)
419*333d2b36SAndroid Build Coastguard Worker	entries.SetString("LOCAL_MODULE_STEM", stem)
420*333d2b36SAndroid Build Coastguard Worker}
421*333d2b36SAndroid Build Coastguard Worker
422*333d2b36SAndroid Build Coastguard Workerfunc (c *stubDecorator) prepareAndroidMKProviderInfo(config android.Config, ctx AndroidMkContext, entries *android.AndroidMkInfo) {
423*333d2b36SAndroid Build Coastguard Worker	entries.SubName = ndkLibrarySuffix + "." + c.apiLevel.String()
424*333d2b36SAndroid Build Coastguard Worker	entries.Class = "SHARED_LIBRARIES"
425*333d2b36SAndroid Build Coastguard Worker
426*333d2b36SAndroid Build Coastguard Worker	if !c.buildStubs() {
427*333d2b36SAndroid Build Coastguard Worker		entries.Disabled = true
428*333d2b36SAndroid Build Coastguard Worker		return
429*333d2b36SAndroid Build Coastguard Worker	}
430*333d2b36SAndroid Build Coastguard Worker
431*333d2b36SAndroid Build Coastguard Worker	path, file := filepath.Split(c.installPath.String())
432*333d2b36SAndroid Build Coastguard Worker	stem, suffix, _ := android.SplitFileExt(file)
433*333d2b36SAndroid Build Coastguard Worker	entries.SetString("LOCAL_MODULE_SUFFIX", suffix)
434*333d2b36SAndroid Build Coastguard Worker	entries.SetString("LOCAL_MODULE_PATH", path)
435*333d2b36SAndroid Build Coastguard Worker	entries.SetString("LOCAL_MODULE_STEM", stem)
436*333d2b36SAndroid Build Coastguard Worker	entries.SetBool("LOCAL_NO_NOTICE_FILE", true)
437*333d2b36SAndroid Build Coastguard Worker	if c.parsedCoverageXmlPath.String() != "" {
438*333d2b36SAndroid Build Coastguard Worker		entries.SetString("SOONG_NDK_API_XML", "$(SOONG_NDK_API_XML) "+c.parsedCoverageXmlPath.String())
439*333d2b36SAndroid Build Coastguard Worker	}
440*333d2b36SAndroid Build Coastguard Worker	entries.SetBool("LOCAL_UNINSTALLABLE_MODULE", true) // Stubs should not be installed
441*333d2b36SAndroid Build Coastguard Worker}
442*333d2b36SAndroid Build Coastguard Worker
443*333d2b36SAndroid Build Coastguard Workerfunc (c *vndkPrebuiltLibraryDecorator) prepareAndroidMKProviderInfo(config android.Config, ctx AndroidMkContext, entries *android.AndroidMkInfo) {
444*333d2b36SAndroid Build Coastguard Worker	entries.Class = "SHARED_LIBRARIES"
445*333d2b36SAndroid Build Coastguard Worker
446*333d2b36SAndroid Build Coastguard Worker	entries.SubName = c.androidMkSuffix
447*333d2b36SAndroid Build Coastguard Worker
448*333d2b36SAndroid Build Coastguard Worker	c.libraryDecorator.androidMkWriteExportedFlags(entries)
449*333d2b36SAndroid Build Coastguard Worker
450*333d2b36SAndroid Build Coastguard Worker	// Specifying stem is to pass check_elf_files when vendor modules link against vndk prebuilt.
451*333d2b36SAndroid Build Coastguard Worker	// We can't use install path because VNDKs are not installed. Instead, Srcs is directly used.
452*333d2b36SAndroid Build Coastguard Worker	_, file := filepath.Split(c.properties.Srcs[0])
453*333d2b36SAndroid Build Coastguard Worker	stem, suffix, ext := android.SplitFileExt(file)
454*333d2b36SAndroid Build Coastguard Worker	entries.SetString("LOCAL_BUILT_MODULE_STEM", "$(LOCAL_MODULE)"+ext)
455*333d2b36SAndroid Build Coastguard Worker	entries.SetString("LOCAL_MODULE_SUFFIX", suffix)
456*333d2b36SAndroid Build Coastguard Worker	entries.SetString("LOCAL_MODULE_STEM", stem)
457*333d2b36SAndroid Build Coastguard Worker
458*333d2b36SAndroid Build Coastguard Worker	if c.tocFile.Valid() {
459*333d2b36SAndroid Build Coastguard Worker		entries.SetString("LOCAL_SOONG_TOC", c.tocFile.String())
460*333d2b36SAndroid Build Coastguard Worker	}
461*333d2b36SAndroid Build Coastguard Worker
462*333d2b36SAndroid Build Coastguard Worker	// VNDK libraries available to vendor are not installed because
463*333d2b36SAndroid Build Coastguard Worker	// they are packaged in VNDK APEX and installed by APEX packages (apex/apex.go)
464*333d2b36SAndroid Build Coastguard Worker	entries.SetBool("LOCAL_UNINSTALLABLE_MODULE", true)
465*333d2b36SAndroid Build Coastguard Worker}
466*333d2b36SAndroid Build Coastguard Worker
467*333d2b36SAndroid Build Coastguard Workerfunc (p *prebuiltLinker) prepareAndroidMKProviderInfo(config android.Config, ctx AndroidMkContext, entries *android.AndroidMkInfo) {
468*333d2b36SAndroid Build Coastguard Worker	if p.properties.Check_elf_files != nil {
469*333d2b36SAndroid Build Coastguard Worker		entries.SetBool("LOCAL_CHECK_ELF_FILES", *p.properties.Check_elf_files)
470*333d2b36SAndroid Build Coastguard Worker	} else {
471*333d2b36SAndroid Build Coastguard Worker		// soong_cc_rust_prebuilt.mk does not include check_elf_file.mk by default
472*333d2b36SAndroid Build Coastguard Worker		// because cc_library_shared and cc_binary use soong_cc_rust_prebuilt.mk as well.
473*333d2b36SAndroid Build Coastguard Worker		// In order to turn on prebuilt ABI checker, set `LOCAL_CHECK_ELF_FILES` to
474*333d2b36SAndroid Build Coastguard Worker		// true if `p.properties.Check_elf_files` is not specified.
475*333d2b36SAndroid Build Coastguard Worker		entries.SetBool("LOCAL_CHECK_ELF_FILES", true)
476*333d2b36SAndroid Build Coastguard Worker	}
477*333d2b36SAndroid Build Coastguard Worker}
478*333d2b36SAndroid Build Coastguard Worker
479*333d2b36SAndroid Build Coastguard Workerfunc (p *prebuiltLibraryLinker) prepareAndroidMKProviderInfo(config android.Config, ctx AndroidMkContext, entries *android.AndroidMkInfo) {
480*333d2b36SAndroid Build Coastguard Worker	ctx.subAndroidMk(config, entries, p.libraryDecorator)
481*333d2b36SAndroid Build Coastguard Worker	if p.shared() {
482*333d2b36SAndroid Build Coastguard Worker		ctx.subAndroidMk(config, entries, &p.prebuiltLinker)
483*333d2b36SAndroid Build Coastguard Worker		androidMkWritePrebuiltOptions(p.baseLinker, entries)
484*333d2b36SAndroid Build Coastguard Worker	}
485*333d2b36SAndroid Build Coastguard Worker}
486*333d2b36SAndroid Build Coastguard Worker
487*333d2b36SAndroid Build Coastguard Workerfunc (p *prebuiltBinaryLinker) prepareAndroidMKProviderInfo(config android.Config, ctx AndroidMkContext, entries *android.AndroidMkInfo) {
488*333d2b36SAndroid Build Coastguard Worker	ctx.subAndroidMk(config, entries, p.binaryDecorator)
489*333d2b36SAndroid Build Coastguard Worker	ctx.subAndroidMk(config, entries, &p.prebuiltLinker)
490*333d2b36SAndroid Build Coastguard Worker	androidMkWritePrebuiltOptions(p.baseLinker, entries)
491*333d2b36SAndroid Build Coastguard Worker}
492*333d2b36SAndroid Build Coastguard Worker
493*333d2b36SAndroid Build Coastguard Workerfunc androidMkWritePrebuiltOptions(linker *baseLinker, entries *android.AndroidMkInfo) {
494*333d2b36SAndroid Build Coastguard Worker	allow := linker.Properties.Allow_undefined_symbols
495*333d2b36SAndroid Build Coastguard Worker	if allow != nil {
496*333d2b36SAndroid Build Coastguard Worker		entries.SetBool("LOCAL_ALLOW_UNDEFINED_SYMBOLS", *allow)
497*333d2b36SAndroid Build Coastguard Worker	}
498*333d2b36SAndroid Build Coastguard Worker	ignore := linker.Properties.Ignore_max_page_size
499*333d2b36SAndroid Build Coastguard Worker	if ignore != nil {
500*333d2b36SAndroid Build Coastguard Worker		entries.SetBool("LOCAL_IGNORE_MAX_PAGE_SIZE", *ignore)
501*333d2b36SAndroid Build Coastguard Worker	}
502*333d2b36SAndroid Build Coastguard Worker}
503