xref: /aosp_15_r20/build/soong/java/config/config.go (revision 333d2b3687b3a337dbcca9d65000bca186795e39)
1*333d2b36SAndroid Build Coastguard Worker// Copyright 2017 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 config
16*333d2b36SAndroid Build Coastguard Worker
17*333d2b36SAndroid Build Coastguard Workerimport (
18*333d2b36SAndroid Build Coastguard Worker	"path/filepath"
19*333d2b36SAndroid Build Coastguard Worker	"runtime"
20*333d2b36SAndroid Build Coastguard Worker	"strings"
21*333d2b36SAndroid Build Coastguard Worker
22*333d2b36SAndroid Build Coastguard Worker	_ "github.com/google/blueprint/bootstrap"
23*333d2b36SAndroid Build Coastguard Worker
24*333d2b36SAndroid Build Coastguard Worker	"android/soong/android"
25*333d2b36SAndroid Build Coastguard Worker	"android/soong/remoteexec"
26*333d2b36SAndroid Build Coastguard Worker)
27*333d2b36SAndroid Build Coastguard Worker
28*333d2b36SAndroid Build Coastguard Workervar (
29*333d2b36SAndroid Build Coastguard Worker	pctx = android.NewPackageContext("android/soong/java/config")
30*333d2b36SAndroid Build Coastguard Worker
31*333d2b36SAndroid Build Coastguard Worker	LegacyCorePlatformBootclasspathLibraries = []string{"legacy.core.platform.api.stubs", "core-lambda-stubs"}
32*333d2b36SAndroid Build Coastguard Worker	LegacyCorePlatformSystemModules          = "legacy-core-platform-api-stubs-system-modules"
33*333d2b36SAndroid Build Coastguard Worker	StableCorePlatformBootclasspathLibraries = []string{"stable.core.platform.api.stubs", "core-lambda-stubs"}
34*333d2b36SAndroid Build Coastguard Worker	StableCorePlatformSystemModules          = "stable-core-platform-api-stubs-system-modules"
35*333d2b36SAndroid Build Coastguard Worker	FrameworkLibraries                       = []string{"ext", "framework"}
36*333d2b36SAndroid Build Coastguard Worker	DefaultLambdaStubsLibrary                = "core-lambda-stubs"
37*333d2b36SAndroid Build Coastguard Worker	SdkLambdaStubsPath                       = "prebuilts/sdk/tools/core-lambda-stubs.jar"
38*333d2b36SAndroid Build Coastguard Worker
39*333d2b36SAndroid Build Coastguard Worker	DefaultMakeJacocoExcludeFilter = []string{"org.junit.*", "org.jacoco.*", "org.mockito.*"}
40*333d2b36SAndroid Build Coastguard Worker	DefaultJacocoExcludeFilter     = []string{"org.junit.**", "org.jacoco.**", "org.mockito.**"}
41*333d2b36SAndroid Build Coastguard Worker
42*333d2b36SAndroid Build Coastguard Worker	InstrumentFrameworkModules = []string{
43*333d2b36SAndroid Build Coastguard Worker		"framework",
44*333d2b36SAndroid Build Coastguard Worker		"framework-minus-apex",
45*333d2b36SAndroid Build Coastguard Worker		"ims-common",
46*333d2b36SAndroid Build Coastguard Worker		"telephony-common",
47*333d2b36SAndroid Build Coastguard Worker		"services",
48*333d2b36SAndroid Build Coastguard Worker		"android.car",
49*333d2b36SAndroid Build Coastguard Worker		"android.car7",
50*333d2b36SAndroid Build Coastguard Worker		"android.car.builtin.impl",
51*333d2b36SAndroid Build Coastguard Worker		"conscrypt",
52*333d2b36SAndroid Build Coastguard Worker		"core-icu4j",
53*333d2b36SAndroid Build Coastguard Worker		"core-oj",
54*333d2b36SAndroid Build Coastguard Worker		"core-libart",
55*333d2b36SAndroid Build Coastguard Worker		"wear-sdk.impl",
56*333d2b36SAndroid Build Coastguard Worker	}
57*333d2b36SAndroid Build Coastguard Worker)
58*333d2b36SAndroid Build Coastguard Worker
59*333d2b36SAndroid Build Coastguard Workervar (
60*333d2b36SAndroid Build Coastguard Worker	JavacVmFlags    = strings.Join(javacVmFlagsList, " ")
61*333d2b36SAndroid Build Coastguard Worker	javaVmFlagsList = []string{
62*333d2b36SAndroid Build Coastguard Worker		`-XX:OnError="cat hs_err_pid%p.log"`,
63*333d2b36SAndroid Build Coastguard Worker		"-XX:CICompilerCount=6",
64*333d2b36SAndroid Build Coastguard Worker		"-XX:+UseDynamicNumberOfGCThreads",
65*333d2b36SAndroid Build Coastguard Worker	}
66*333d2b36SAndroid Build Coastguard Worker	javacVmFlagsList = []string{
67*333d2b36SAndroid Build Coastguard Worker		`-J-XX:OnError="cat hs_err_pid%p.log"`,
68*333d2b36SAndroid Build Coastguard Worker		"-J-XX:CICompilerCount=6",
69*333d2b36SAndroid Build Coastguard Worker		"-J-XX:+UseDynamicNumberOfGCThreads",
70*333d2b36SAndroid Build Coastguard Worker		"-J-XX:+TieredCompilation",
71*333d2b36SAndroid Build Coastguard Worker		"-J-XX:TieredStopAtLevel=1",
72*333d2b36SAndroid Build Coastguard Worker	}
73*333d2b36SAndroid Build Coastguard Worker	dexerJavaVmFlagsList = []string{
74*333d2b36SAndroid Build Coastguard Worker		`-JXX:OnError="cat hs_err_pid%p.log"`,
75*333d2b36SAndroid Build Coastguard Worker		"-JXX:CICompilerCount=6",
76*333d2b36SAndroid Build Coastguard Worker		"-JXX:+UseDynamicNumberOfGCThreads",
77*333d2b36SAndroid Build Coastguard Worker	}
78*333d2b36SAndroid Build Coastguard Worker)
79*333d2b36SAndroid Build Coastguard Worker
80*333d2b36SAndroid Build Coastguard Workerfunc init() {
81*333d2b36SAndroid Build Coastguard Worker	pctx.Import("github.com/google/blueprint/bootstrap")
82*333d2b36SAndroid Build Coastguard Worker
83*333d2b36SAndroid Build Coastguard Worker	pctx.StaticVariable("JavacHeapSize", "4096M")
84*333d2b36SAndroid Build Coastguard Worker	pctx.StaticVariable("JavacHeapFlags", "-J-Xmx${JavacHeapSize}")
85*333d2b36SAndroid Build Coastguard Worker
86*333d2b36SAndroid Build Coastguard Worker	// ErrorProne can use significantly more memory than javac alone, give it a higher heap
87*333d2b36SAndroid Build Coastguard Worker	// size (b/221480398).
88*333d2b36SAndroid Build Coastguard Worker	pctx.StaticVariable("ErrorProneHeapSize", "8192M")
89*333d2b36SAndroid Build Coastguard Worker	pctx.StaticVariable("ErrorProneHeapFlags", "-J-Xmx${ErrorProneHeapSize}")
90*333d2b36SAndroid Build Coastguard Worker
91*333d2b36SAndroid Build Coastguard Worker	// D8 invocations are shorter lived, so we restrict their JIT tiering relative to R8.
92*333d2b36SAndroid Build Coastguard Worker	// Note that the `-JXX` prefix syntax is specific to the R8/D8 invocation wrappers.
93*333d2b36SAndroid Build Coastguard Worker	pctx.StaticVariable("D8Flags", strings.Join(append([]string{
94*333d2b36SAndroid Build Coastguard Worker		"-JXmx4096M",
95*333d2b36SAndroid Build Coastguard Worker		"-JXX:+TieredCompilation",
96*333d2b36SAndroid Build Coastguard Worker		"-JXX:TieredStopAtLevel=1",
97*333d2b36SAndroid Build Coastguard Worker		"-JDcom.android.tools.r8.emitRecordAnnotationsInDex",
98*333d2b36SAndroid Build Coastguard Worker		"-JDcom.android.tools.r8.emitPermittedSubclassesAnnotationsInDex",
99*333d2b36SAndroid Build Coastguard Worker	}, dexerJavaVmFlagsList...), " "))
100*333d2b36SAndroid Build Coastguard Worker
101*333d2b36SAndroid Build Coastguard Worker	pctx.VariableFunc("R8Flags", func(ctx android.PackageVarContext) string {
102*333d2b36SAndroid Build Coastguard Worker		r8flags := append([]string{
103*333d2b36SAndroid Build Coastguard Worker			"-JXmx4096M",
104*333d2b36SAndroid Build Coastguard Worker			"-JDcom.android.tools.r8.emitRecordAnnotationsInDex",
105*333d2b36SAndroid Build Coastguard Worker			"-JDcom.android.tools.r8.emitPermittedSubclassesAnnotationsInDex",
106*333d2b36SAndroid Build Coastguard Worker		}, dexerJavaVmFlagsList...)
107*333d2b36SAndroid Build Coastguard Worker		if r8DumpDir := ctx.Config().Getenv("R8_DUMP_DIRECTORY"); r8DumpDir != "" {
108*333d2b36SAndroid Build Coastguard Worker			r8flags = append(r8flags, "-JDcom.android.tools.r8.dumpinputtodirectory="+r8DumpDir)
109*333d2b36SAndroid Build Coastguard Worker		}
110*333d2b36SAndroid Build Coastguard Worker		return strings.Join(r8flags, " ")
111*333d2b36SAndroid Build Coastguard Worker
112*333d2b36SAndroid Build Coastguard Worker	})
113*333d2b36SAndroid Build Coastguard Worker
114*333d2b36SAndroid Build Coastguard Worker	pctx.StaticVariable("CommonJdkFlags", strings.Join([]string{
115*333d2b36SAndroid Build Coastguard Worker		`-Xmaxerrs 9999999`,
116*333d2b36SAndroid Build Coastguard Worker		`-encoding UTF-8`,
117*333d2b36SAndroid Build Coastguard Worker		`-sourcepath ""`,
118*333d2b36SAndroid Build Coastguard Worker		`-g`,
119*333d2b36SAndroid Build Coastguard Worker		// Turbine leaves out bridges which can cause javac to unnecessarily insert them into
120*333d2b36SAndroid Build Coastguard Worker		// subclasses (b/65645120).  Setting this flag causes our custom javac to assume that
121*333d2b36SAndroid Build Coastguard Worker		// the missing bridges will exist at runtime and not recreate them in subclasses.
122*333d2b36SAndroid Build Coastguard Worker		// If a different javac is used the flag will be ignored and extra bridges will be inserted.
123*333d2b36SAndroid Build Coastguard Worker		// The flag is implemented by https://android-review.googlesource.com/c/486427
124*333d2b36SAndroid Build Coastguard Worker		`-XDskipDuplicateBridges=true`,
125*333d2b36SAndroid Build Coastguard Worker
126*333d2b36SAndroid Build Coastguard Worker		// b/65004097: prevent using java.lang.invoke.StringConcatFactory when using -target 1.9
127*333d2b36SAndroid Build Coastguard Worker		`-XDstringConcat=inline`,
128*333d2b36SAndroid Build Coastguard Worker	}, " "))
129*333d2b36SAndroid Build Coastguard Worker
130*333d2b36SAndroid Build Coastguard Worker	pctx.StaticVariable("JavaVmFlags", strings.Join(javaVmFlagsList, " "))
131*333d2b36SAndroid Build Coastguard Worker	pctx.StaticVariable("JavacVmFlags", strings.Join(javacVmFlagsList, " "))
132*333d2b36SAndroid Build Coastguard Worker
133*333d2b36SAndroid Build Coastguard Worker	pctx.VariableConfigMethod("hostPrebuiltTag", android.Config.PrebuiltOS)
134*333d2b36SAndroid Build Coastguard Worker
135*333d2b36SAndroid Build Coastguard Worker	pctx.VariableFunc("JavaHome", func(ctx android.PackageVarContext) string {
136*333d2b36SAndroid Build Coastguard Worker		// This is set up and guaranteed by soong_ui
137*333d2b36SAndroid Build Coastguard Worker		return ctx.Config().Getenv("ANDROID_JAVA_HOME")
138*333d2b36SAndroid Build Coastguard Worker	})
139*333d2b36SAndroid Build Coastguard Worker	pctx.VariableFunc("JlinkVersion", func(ctx android.PackageVarContext) string {
140*333d2b36SAndroid Build Coastguard Worker		if override := ctx.Config().Getenv("OVERRIDE_JLINK_VERSION_NUMBER"); override != "" {
141*333d2b36SAndroid Build Coastguard Worker			return override
142*333d2b36SAndroid Build Coastguard Worker		}
143*333d2b36SAndroid Build Coastguard Worker		return "21"
144*333d2b36SAndroid Build Coastguard Worker	})
145*333d2b36SAndroid Build Coastguard Worker
146*333d2b36SAndroid Build Coastguard Worker	pctx.SourcePathVariable("JavaToolchain", "${JavaHome}/bin")
147*333d2b36SAndroid Build Coastguard Worker	pctx.SourcePathVariableWithEnvOverride("JavacCmd",
148*333d2b36SAndroid Build Coastguard Worker		"${JavaToolchain}/javac", "ALTERNATE_JAVAC")
149*333d2b36SAndroid Build Coastguard Worker	pctx.SourcePathVariable("JavaCmd", "${JavaToolchain}/java")
150*333d2b36SAndroid Build Coastguard Worker	pctx.SourcePathVariable("JarCmd", "${JavaToolchain}/jar")
151*333d2b36SAndroid Build Coastguard Worker	pctx.SourcePathVariable("JavadocCmd", "${JavaToolchain}/javadoc")
152*333d2b36SAndroid Build Coastguard Worker	pctx.SourcePathVariable("JlinkCmd", "${JavaToolchain}/jlink")
153*333d2b36SAndroid Build Coastguard Worker	pctx.SourcePathVariable("JmodCmd", "${JavaToolchain}/jmod")
154*333d2b36SAndroid Build Coastguard Worker	pctx.SourcePathVariable("JrtFsJar", "${JavaHome}/lib/jrt-fs.jar")
155*333d2b36SAndroid Build Coastguard Worker	pctx.SourcePathVariable("JavaKytheExtractorJar", "prebuilts/build-tools/common/framework/javac_extractor.jar")
156*333d2b36SAndroid Build Coastguard Worker	pctx.SourcePathVariable("KotlinKytheExtractor", "prebuilts/build-tools/${hostPrebuiltTag}/bin/kotlinc_extractor")
157*333d2b36SAndroid Build Coastguard Worker	pctx.SourcePathVariable("Ziptime", "prebuilts/build-tools/${hostPrebuiltTag}/bin/ziptime")
158*333d2b36SAndroid Build Coastguard Worker
159*333d2b36SAndroid Build Coastguard Worker	pctx.SourcePathVariable("ResourceProcessorBusyBox", "prebuilts/bazel/common/android_tools/android_tools/all_android_tools_deploy.jar")
160*333d2b36SAndroid Build Coastguard Worker
161*333d2b36SAndroid Build Coastguard Worker	pctx.HostBinToolVariable("GenKotlinBuildFileCmd", "gen-kotlin-build-file")
162*333d2b36SAndroid Build Coastguard Worker
163*333d2b36SAndroid Build Coastguard Worker	pctx.SourcePathVariable("JarArgsCmd", "build/soong/scripts/jar-args.sh")
164*333d2b36SAndroid Build Coastguard Worker	pctx.SourcePathVariable("PackageCheckCmd", "build/soong/scripts/package-check.sh")
165*333d2b36SAndroid Build Coastguard Worker	pctx.HostBinToolVariable("ExtractJarPackagesCmd", "extract_jar_packages")
166*333d2b36SAndroid Build Coastguard Worker	pctx.HostBinToolVariable("SoongZipCmd", "soong_zip")
167*333d2b36SAndroid Build Coastguard Worker	pctx.HostBinToolVariable("MergeZipsCmd", "merge_zips")
168*333d2b36SAndroid Build Coastguard Worker	pctx.HostBinToolVariable("Zip2ZipCmd", "zip2zip")
169*333d2b36SAndroid Build Coastguard Worker	pctx.HostBinToolVariable("ZipSyncCmd", "zipsync")
170*333d2b36SAndroid Build Coastguard Worker	pctx.HostBinToolVariable("ApiCheckCmd", "apicheck")
171*333d2b36SAndroid Build Coastguard Worker	pctx.HostBinToolVariable("D8Cmd", "d8")
172*333d2b36SAndroid Build Coastguard Worker	pctx.HostBinToolVariable("R8Cmd", "r8")
173*333d2b36SAndroid Build Coastguard Worker	pctx.HostBinToolVariable("ResourceShrinkerCmd", "resourceshrinker")
174*333d2b36SAndroid Build Coastguard Worker	pctx.HostBinToolVariable("HiddenAPICmd", "hiddenapi")
175*333d2b36SAndroid Build Coastguard Worker	pctx.HostBinToolVariable("ExtractApksCmd", "extract_apks")
176*333d2b36SAndroid Build Coastguard Worker	pctx.VariableFunc("TurbineJar", func(ctx android.PackageVarContext) string {
177*333d2b36SAndroid Build Coastguard Worker		turbine := "turbine.jar"
178*333d2b36SAndroid Build Coastguard Worker		if ctx.Config().AlwaysUsePrebuiltSdks() {
179*333d2b36SAndroid Build Coastguard Worker			return "prebuilts/build-tools/common/framework/" + turbine
180*333d2b36SAndroid Build Coastguard Worker		} else {
181*333d2b36SAndroid Build Coastguard Worker			return ctx.Config().HostJavaToolPath(ctx, turbine).String()
182*333d2b36SAndroid Build Coastguard Worker		}
183*333d2b36SAndroid Build Coastguard Worker	})
184*333d2b36SAndroid Build Coastguard Worker
185*333d2b36SAndroid Build Coastguard Worker	pctx.HostJavaToolVariable("JarjarCmd", "jarjar.jar")
186*333d2b36SAndroid Build Coastguard Worker	pctx.HostJavaToolVariable("JsilverJar", "jsilver.jar")
187*333d2b36SAndroid Build Coastguard Worker	pctx.HostJavaToolVariable("DoclavaJar", "doclava.jar")
188*333d2b36SAndroid Build Coastguard Worker	pctx.HostJavaToolVariable("MetalavaJar", "metalava.jar")
189*333d2b36SAndroid Build Coastguard Worker	pctx.HostJavaToolVariable("DokkaJar", "dokka.jar")
190*333d2b36SAndroid Build Coastguard Worker	pctx.HostJavaToolVariable("JetifierJar", "jetifier.jar")
191*333d2b36SAndroid Build Coastguard Worker	pctx.HostJavaToolVariable("R8Jar", "r8.jar")
192*333d2b36SAndroid Build Coastguard Worker	pctx.HostJavaToolVariable("D8Jar", "d8.jar")
193*333d2b36SAndroid Build Coastguard Worker
194*333d2b36SAndroid Build Coastguard Worker	pctx.HostBinToolVariable("SoongJavacWrapper", "soong_javac_wrapper")
195*333d2b36SAndroid Build Coastguard Worker	pctx.HostBinToolVariable("DexpreoptGen", "dexpreopt_gen")
196*333d2b36SAndroid Build Coastguard Worker
197*333d2b36SAndroid Build Coastguard Worker	pctx.StaticVariableWithEnvOverride("REJavaPool", "RBE_JAVA_POOL", "java16")
198*333d2b36SAndroid Build Coastguard Worker	pctx.StaticVariableWithEnvOverride("REJavacExecStrategy", "RBE_JAVAC_EXEC_STRATEGY", remoteexec.RemoteLocalFallbackExecStrategy)
199*333d2b36SAndroid Build Coastguard Worker	pctx.StaticVariableWithEnvOverride("RED8ExecStrategy", "RBE_D8_EXEC_STRATEGY", remoteexec.RemoteLocalFallbackExecStrategy)
200*333d2b36SAndroid Build Coastguard Worker	pctx.StaticVariableWithEnvOverride("RER8ExecStrategy", "RBE_R8_EXEC_STRATEGY", remoteexec.RemoteLocalFallbackExecStrategy)
201*333d2b36SAndroid Build Coastguard Worker	pctx.StaticVariableWithEnvOverride("RETurbineExecStrategy", "RBE_TURBINE_EXEC_STRATEGY", remoteexec.LocalExecStrategy)
202*333d2b36SAndroid Build Coastguard Worker	pctx.StaticVariableWithEnvOverride("RESignApkExecStrategy", "RBE_SIGNAPK_EXEC_STRATEGY", remoteexec.LocalExecStrategy)
203*333d2b36SAndroid Build Coastguard Worker	pctx.StaticVariableWithEnvOverride("REJarExecStrategy", "RBE_JAR_EXEC_STRATEGY", remoteexec.LocalExecStrategy)
204*333d2b36SAndroid Build Coastguard Worker	pctx.StaticVariableWithEnvOverride("REZipExecStrategy", "RBE_ZIP_EXEC_STRATEGY", remoteexec.LocalExecStrategy)
205*333d2b36SAndroid Build Coastguard Worker
206*333d2b36SAndroid Build Coastguard Worker	pctx.HostJavaToolVariable("JacocoCLIJar", "jacoco-cli.jar")
207*333d2b36SAndroid Build Coastguard Worker
208*333d2b36SAndroid Build Coastguard Worker	pctx.HostBinToolVariable("ManifestCheckCmd", "manifest_check")
209*333d2b36SAndroid Build Coastguard Worker	pctx.HostBinToolVariable("ManifestFixerCmd", "manifest_fixer")
210*333d2b36SAndroid Build Coastguard Worker
211*333d2b36SAndroid Build Coastguard Worker	pctx.HostBinToolVariable("ManifestMergerCmd", "manifest-merger")
212*333d2b36SAndroid Build Coastguard Worker
213*333d2b36SAndroid Build Coastguard Worker	pctx.HostBinToolVariable("Class2NonSdkList", "class2nonsdklist")
214*333d2b36SAndroid Build Coastguard Worker	pctx.HostBinToolVariable("MergeCsvCommand", "merge_csv")
215*333d2b36SAndroid Build Coastguard Worker	pctx.HostBinToolVariable("HiddenAPI", "hiddenapi")
216*333d2b36SAndroid Build Coastguard Worker
217*333d2b36SAndroid Build Coastguard Worker	hostBinToolVariableWithSdkToolsPrebuilt("Aapt2Cmd", "aapt2")
218*333d2b36SAndroid Build Coastguard Worker	hostBinToolVariableWithBuildToolsPrebuilt("AidlCmd", "aidl")
219*333d2b36SAndroid Build Coastguard Worker	hostBinToolVariableWithBuildToolsPrebuilt("ZipAlign", "zipalign")
220*333d2b36SAndroid Build Coastguard Worker
221*333d2b36SAndroid Build Coastguard Worker	hostJavaToolVariableWithSdkToolsPrebuilt("SignapkCmd", "signapk")
222*333d2b36SAndroid Build Coastguard Worker	// TODO(ccross): this should come from the signapk dependencies, but we don't have any way
223*333d2b36SAndroid Build Coastguard Worker	// to express host JNI dependencies yet.
224*333d2b36SAndroid Build Coastguard Worker	hostJNIToolVariableWithSdkToolsPrebuilt("SignapkJniLibrary", "libconscrypt_openjdk_jni")
225*333d2b36SAndroid Build Coastguard Worker}
226*333d2b36SAndroid Build Coastguard Worker
227*333d2b36SAndroid Build Coastguard Workerfunc hostBinToolVariableWithSdkToolsPrebuilt(name, tool string) {
228*333d2b36SAndroid Build Coastguard Worker	pctx.VariableFunc(name, func(ctx android.PackageVarContext) string {
229*333d2b36SAndroid Build Coastguard Worker		if ctx.Config().AlwaysUsePrebuiltSdks() {
230*333d2b36SAndroid Build Coastguard Worker			return filepath.Join("prebuilts/sdk/tools", runtime.GOOS, "bin", tool)
231*333d2b36SAndroid Build Coastguard Worker		} else {
232*333d2b36SAndroid Build Coastguard Worker			return ctx.Config().HostToolPath(ctx, tool).String()
233*333d2b36SAndroid Build Coastguard Worker		}
234*333d2b36SAndroid Build Coastguard Worker	})
235*333d2b36SAndroid Build Coastguard Worker}
236*333d2b36SAndroid Build Coastguard Worker
237*333d2b36SAndroid Build Coastguard Workerfunc hostJavaToolVariableWithSdkToolsPrebuilt(name, tool string) {
238*333d2b36SAndroid Build Coastguard Worker	pctx.VariableFunc(name, func(ctx android.PackageVarContext) string {
239*333d2b36SAndroid Build Coastguard Worker		if ctx.Config().AlwaysUsePrebuiltSdks() {
240*333d2b36SAndroid Build Coastguard Worker			return filepath.Join("prebuilts/sdk/tools/lib", tool+".jar")
241*333d2b36SAndroid Build Coastguard Worker		} else {
242*333d2b36SAndroid Build Coastguard Worker			return ctx.Config().HostJavaToolPath(ctx, tool+".jar").String()
243*333d2b36SAndroid Build Coastguard Worker		}
244*333d2b36SAndroid Build Coastguard Worker	})
245*333d2b36SAndroid Build Coastguard Worker}
246*333d2b36SAndroid Build Coastguard Worker
247*333d2b36SAndroid Build Coastguard Workerfunc hostJNIToolVariableWithSdkToolsPrebuilt(name, tool string) {
248*333d2b36SAndroid Build Coastguard Worker	pctx.VariableFunc(name, func(ctx android.PackageVarContext) string {
249*333d2b36SAndroid Build Coastguard Worker		if ctx.Config().AlwaysUsePrebuiltSdks() {
250*333d2b36SAndroid Build Coastguard Worker			ext := ".so"
251*333d2b36SAndroid Build Coastguard Worker			if runtime.GOOS == "darwin" {
252*333d2b36SAndroid Build Coastguard Worker				ext = ".dylib"
253*333d2b36SAndroid Build Coastguard Worker			}
254*333d2b36SAndroid Build Coastguard Worker			return filepath.Join("prebuilts/sdk/tools", runtime.GOOS, "lib64", tool+ext)
255*333d2b36SAndroid Build Coastguard Worker		} else {
256*333d2b36SAndroid Build Coastguard Worker			return ctx.Config().HostJNIToolPath(ctx, tool).String()
257*333d2b36SAndroid Build Coastguard Worker		}
258*333d2b36SAndroid Build Coastguard Worker	})
259*333d2b36SAndroid Build Coastguard Worker}
260*333d2b36SAndroid Build Coastguard Worker
261*333d2b36SAndroid Build Coastguard Workerfunc hostBinToolVariableWithBuildToolsPrebuilt(name, tool string) {
262*333d2b36SAndroid Build Coastguard Worker	pctx.VariableFunc(name, func(ctx android.PackageVarContext) string {
263*333d2b36SAndroid Build Coastguard Worker		if ctx.Config().AlwaysUsePrebuiltSdks() {
264*333d2b36SAndroid Build Coastguard Worker			return filepath.Join("prebuilts/build-tools", ctx.Config().PrebuiltOS(), "bin", tool)
265*333d2b36SAndroid Build Coastguard Worker		} else {
266*333d2b36SAndroid Build Coastguard Worker			return ctx.Config().HostToolPath(ctx, tool).String()
267*333d2b36SAndroid Build Coastguard Worker		}
268*333d2b36SAndroid Build Coastguard Worker	})
269*333d2b36SAndroid Build Coastguard Worker}
270*333d2b36SAndroid Build Coastguard Worker
271*333d2b36SAndroid Build Coastguard Worker// JavaCmd returns a SourcePath object with the path to the java command.
272*333d2b36SAndroid Build Coastguard Workerfunc JavaCmd(ctx android.PathContext) android.SourcePath {
273*333d2b36SAndroid Build Coastguard Worker	return javaTool(ctx, "java")
274*333d2b36SAndroid Build Coastguard Worker}
275*333d2b36SAndroid Build Coastguard Worker
276*333d2b36SAndroid Build Coastguard Worker// JavadocCmd returns a SourcePath object with the path to the java command.
277*333d2b36SAndroid Build Coastguard Workerfunc JavadocCmd(ctx android.PathContext) android.SourcePath {
278*333d2b36SAndroid Build Coastguard Worker	return javaTool(ctx, "javadoc")
279*333d2b36SAndroid Build Coastguard Worker}
280*333d2b36SAndroid Build Coastguard Worker
281*333d2b36SAndroid Build Coastguard Workerfunc javaTool(ctx android.PathContext, tool string) android.SourcePath {
282*333d2b36SAndroid Build Coastguard Worker	type javaToolKey string
283*333d2b36SAndroid Build Coastguard Worker
284*333d2b36SAndroid Build Coastguard Worker	key := android.NewCustomOnceKey(javaToolKey(tool))
285*333d2b36SAndroid Build Coastguard Worker
286*333d2b36SAndroid Build Coastguard Worker	return ctx.Config().OnceSourcePath(key, func() android.SourcePath {
287*333d2b36SAndroid Build Coastguard Worker		return javaToolchain(ctx).Join(ctx, tool)
288*333d2b36SAndroid Build Coastguard Worker	})
289*333d2b36SAndroid Build Coastguard Worker
290*333d2b36SAndroid Build Coastguard Worker}
291*333d2b36SAndroid Build Coastguard Worker
292*333d2b36SAndroid Build Coastguard Workervar javaToolchainKey = android.NewOnceKey("javaToolchain")
293*333d2b36SAndroid Build Coastguard Worker
294*333d2b36SAndroid Build Coastguard Workerfunc javaToolchain(ctx android.PathContext) android.SourcePath {
295*333d2b36SAndroid Build Coastguard Worker	return ctx.Config().OnceSourcePath(javaToolchainKey, func() android.SourcePath {
296*333d2b36SAndroid Build Coastguard Worker		return javaHome(ctx).Join(ctx, "bin")
297*333d2b36SAndroid Build Coastguard Worker	})
298*333d2b36SAndroid Build Coastguard Worker}
299*333d2b36SAndroid Build Coastguard Worker
300*333d2b36SAndroid Build Coastguard Workervar javaHomeKey = android.NewOnceKey("javaHome")
301*333d2b36SAndroid Build Coastguard Worker
302*333d2b36SAndroid Build Coastguard Workerfunc javaHome(ctx android.PathContext) android.SourcePath {
303*333d2b36SAndroid Build Coastguard Worker	return ctx.Config().OnceSourcePath(javaHomeKey, func() android.SourcePath {
304*333d2b36SAndroid Build Coastguard Worker		// This is set up and guaranteed by soong_ui
305*333d2b36SAndroid Build Coastguard Worker		return android.PathForSource(ctx, ctx.Config().Getenv("ANDROID_JAVA_HOME"))
306*333d2b36SAndroid Build Coastguard Worker	})
307*333d2b36SAndroid Build Coastguard Worker}
308