1# Variables we check:
2#     HOST_BUILD_TYPE = { release debug }
3#     TARGET_BUILD_TYPE = { release debug }
4# and we output a bunch of variables, see the case statement at
5# the bottom for the full list
6#     OUT_DIR is also set to "out" if it's not already set.
7#         this allows you to set it to somewhere else if you like
8#     SCAN_EXCLUDE_DIRS is an optional, whitespace separated list of
9#         directories that will also be excluded from full checkout tree
10#         searches for source or make files, in addition to OUT_DIR.
11#         This can be useful if you set OUT_DIR to be a different directory
12#         than other outputs of your build system.
13
14# Returns all words in $1 up to and including $2
15define find_and_earlier
16  $(strip $(if $(1),
17    $(firstword $(1))
18    $(if $(filter $(firstword $(1)),$(2)),,
19      $(call find_and_earlier,$(wordlist 2,$(words $(1)),$(1)),$(2)))))
20endef
21
22#$(warning $(call find_and_earlier,A B C,A))
23#$(warning $(call find_and_earlier,A B C,B))
24#$(warning $(call find_and_earlier,A B C,C))
25#$(warning $(call find_and_earlier,A B C,D))
26
27# Runs a starlark file, and sets all the variables in its top-level
28# variables_to_export_to_make variable as make variables.
29#
30# In order to avoid running starlark every time the stamp file is checked, we use
31# $(KATI_shell_no_rerun). Then, to make sure that we actually do rerun kati when
32# modifying the starlark files, we add the starlark files to the kati stamp file with
33# $(KATI_extra_file_deps).
34#
35# Arguments:
36#  $(1): A single starlark file to use as the entrypoint
37#  $(2): An optional list of starlark files to NOT include as kati dependencies.
38#  $(3): An optional list of extra flags to pass to rbcrun
39define run-starlark
40$(eval _starlark_results := $(OUT_DIR)/starlark_results/$(subst /,_,$(1)).mk)
41$(KATI_shell_no_rerun mkdir -p $(OUT_DIR)/starlark_results && $(OUT_DIR)/rbcrun --mode=make $(3) $(1) >$(_starlark_results) && touch -t 200001010000 $(_starlark_results))
42$(if $(filter-out 0,$(.SHELLSTATUS)),$(error Starlark failed to run))
43$(eval include $(_starlark_results))
44$(KATI_extra_file_deps $(filter-out $(2),$(LOADED_STARLARK_FILES)))
45$(eval LOADED_STARLARK_FILES :=)
46$(eval _starlark_results :=)
47endef
48
49# ---------------------------------------------------------------
50# Release config
51include $(BUILD_SYSTEM)/release_config.mk
52
53# ---------------------------------------------------------------
54# Set up version information
55include $(BUILD_SYSTEM)/version_util.mk
56
57# This used to be calculated, but is now fixed and not expected
58# to change over time anymore. New code attempting to use a
59# variable like IS_AT_LAST_* should instead use a
60# build system flag.
61
62ENABLED_VERSIONS := "OPR1 OPD1 OPD2 OPM1 OPM2 PPR1 PPD1 PPD2 PPM1 PPM2 QPR1 QP1A QP1B QP2A QP2B QD1A QD1B QD2A QD2B QQ1A QQ1B QQ2A QQ2B QQ3A QQ3B RP1A RP1B RP2A RP2B RD1A RD1B RD2A RD2B RQ1A RQ1B RQ2A RQ2B RQ3A RQ3B SP1A SP1B SP2A SP2B SD1A SD1B SD2A SD2B SQ1A SQ1B SQ2A SQ2B SQ3A SQ3B TP1A TP1B TP2A TP2B TD1A TD1B TD2A TD2B TQ1A TQ1B TQ2A TQ2B TQ3A TQ3B UP1A UP1B UP2A UP2B UD1A UD1B UD2A UD2B UQ1A UQ1B UQ2A UQ2B UQ3A UQ3B"
63
64$(foreach v,$(ENABLED_VERSIONS), \
65  $(eval IS_AT_LEAST_$(v) := true))
66
67# ---------------------------------------------------------------
68# If you update the build system such that the environment setup
69# or buildspec.mk need to be updated, increment this number, and
70# people who haven't re-run those will have to do so before they
71# can build.  Make sure to also update the corresponding value in
72# buildspec.mk.default and envsetup.sh.
73CORRECT_BUILD_ENV_SEQUENCE_NUMBER := 13
74
75# ---------------------------------------------------------------
76# The product defaults to generic on hardware
77ifeq ($(TARGET_PRODUCT),)
78TARGET_PRODUCT := aosp_arm64
79endif
80
81
82# the variant -- the set of files that are included for a build
83ifeq ($(strip $(TARGET_BUILD_VARIANT)),)
84TARGET_BUILD_VARIANT := eng
85endif
86
87TARGET_BUILD_APPS ?=
88TARGET_BUILD_UNBUNDLED_IMAGE ?=
89
90# Set to true for an unbundled build, i.e. a build without
91# support for platform targets like the system image. This also
92# disables consistency checks that only apply to full platform
93# builds.
94TARGET_BUILD_UNBUNDLED ?=
95
96# TARGET_BUILD_APPS implies unbundled build, otherwise we default
97# to bundled (i.e. platform targets such as the system image are
98# included).
99ifneq ($(TARGET_BUILD_APPS),)
100  TARGET_BUILD_UNBUNDLED := true
101endif
102
103# TARGET_BUILD_UNBUNDLED_IMAGE also implies unbundled build.
104# (i.e. it targets to only unbundled image, such as the vendor image,
105# ,or the product image).
106ifneq ($(TARGET_BUILD_UNBUNDLED_IMAGE),)
107  TARGET_BUILD_UNBUNDLED := true
108endif
109
110.KATI_READONLY := \
111  TARGET_PRODUCT \
112  TARGET_BUILD_VARIANT \
113  TARGET_BUILD_APPS \
114  TARGET_BUILD_UNBUNDLED \
115  TARGET_BUILD_UNBUNDLED_IMAGE \
116
117# ---------------------------------------------------------------
118# Set up configuration for host machine.  We don't do cross-
119# compiles except for arm, so the HOST is whatever we are
120# running on
121
122# HOST_OS
123ifneq (,$(findstring Linux,$(UNAME)))
124  HOST_OS := linux
125endif
126ifneq (,$(findstring Darwin,$(UNAME)))
127  HOST_OS := darwin
128endif
129
130ifeq ($(CALLED_FROM_SETUP),true)
131  HOST_OS_EXTRA := $(shell uname -rsm)
132  ifeq ($(HOST_OS),linux)
133    ifneq ($(wildcard /etc/os-release),)
134      HOST_OS_EXTRA += $(shell source /etc/os-release; echo $$PRETTY_NAME)
135    endif
136  else ifeq ($(HOST_OS),darwin)
137    HOST_OS_EXTRA += $(shell sw_vers -productVersion)
138  endif
139  HOST_OS_EXTRA := $(subst $(space),-,$(HOST_OS_EXTRA))
140endif
141
142# BUILD_OS is the real host doing the build.
143BUILD_OS := $(HOST_OS)
144
145# We can do the cross-build only on Linux
146ifeq ($(HOST_OS),linux)
147  # Windows has been the default host_cross OS
148  ifeq (,$(filter-out windows,$(HOST_CROSS_OS)))
149    # We can only create static host binaries for Linux, so if static host
150    # binaries are requested, turn off Windows cross-builds.
151    ifeq ($(BUILD_HOST_static),)
152      HOST_CROSS_OS := windows
153      HOST_CROSS_ARCH := x86
154      HOST_CROSS_2ND_ARCH := x86_64
155      2ND_HOST_CROSS_IS_64_BIT := true
156    endif
157  else ifeq ($(HOST_CROSS_OS),linux_bionic)
158    ifeq (,$(HOST_CROSS_ARCH))
159      $(error HOST_CROSS_ARCH missing.)
160    endif
161  else
162    $(error Unsupported HOST_CROSS_OS $(HOST_CROSS_OS))
163  endif
164else ifeq ($(HOST_OS),darwin)
165  HOST_CROSS_OS := darwin
166  HOST_CROSS_ARCH := arm64
167  HOST_CROSS_2ND_ARCH :=
168endif
169
170ifeq ($(HOST_OS),)
171$(error Unable to determine HOST_OS from uname -sm: $(UNAME)!)
172endif
173
174# HOST_ARCH
175ifneq (,$(findstring x86_64,$(UNAME)))
176  HOST_ARCH := x86_64
177  HOST_2ND_ARCH := x86
178  HOST_IS_64_BIT := true
179else
180ifneq (,$(findstring i686,$(UNAME))$(findstring x86,$(UNAME)))
181$(error Building on a 32-bit x86 host is not supported: $(UNAME)!)
182endif
183endif
184
185ifeq ($(HOST_OS),darwin)
186  # Mac no longer supports 32-bit executables
187  HOST_2ND_ARCH :=
188endif
189
190HOST_2ND_ARCH_VAR_PREFIX := 2ND_
191HOST_2ND_ARCH_MODULE_SUFFIX := _32
192HOST_CROSS_2ND_ARCH_VAR_PREFIX := 2ND_
193HOST_CROSS_2ND_ARCH_MODULE_SUFFIX := _64
194TARGET_2ND_ARCH_VAR_PREFIX := 2ND_
195.KATI_READONLY := \
196  HOST_ARCH \
197  HOST_2ND_ARCH \
198  HOST_IS_64_BIT \
199  HOST_2ND_ARCH_VAR_PREFIX \
200  HOST_2ND_ARCH_MODULE_SUFFIX \
201  HOST_CROSS_2ND_ARCH_VAR_PREFIX \
202  HOST_CROSS_2ND_ARCH_MODULE_SUFFIX \
203  TARGET_2ND_ARCH_VAR_PREFIX \
204
205combo_target := HOST_
206combo_2nd_arch_prefix :=
207include $(BUILD_COMBOS)/select.mk
208
209ifdef HOST_2ND_ARCH
210  combo_2nd_arch_prefix := $(HOST_2ND_ARCH_VAR_PREFIX)
211  include $(BUILD_SYSTEM)/combo/select.mk
212endif
213
214# Load the windows cross compiler under Linux
215ifdef HOST_CROSS_OS
216  combo_target := HOST_CROSS_
217  combo_2nd_arch_prefix :=
218  include $(BUILD_SYSTEM)/combo/select.mk
219
220  ifdef HOST_CROSS_2ND_ARCH
221    combo_2nd_arch_prefix := $(HOST_CROSS_2ND_ARCH_VAR_PREFIX)
222    include $(BUILD_SYSTEM)/combo/select.mk
223  endif
224endif
225
226# on windows, the tools have .exe at the end, and we depend on the
227# host config stuff being done first
228
229BUILD_ARCH := $(HOST_ARCH)
230BUILD_2ND_ARCH := $(HOST_2ND_ARCH)
231
232ifeq ($(HOST_ARCH),)
233$(error Unable to determine HOST_ARCH from uname -sm: $(UNAME)!)
234endif
235
236# the host build defaults to release, and it must be release or debug
237ifeq ($(HOST_BUILD_TYPE),)
238HOST_BUILD_TYPE := release
239endif
240
241ifneq ($(HOST_BUILD_TYPE),release)
242ifneq ($(HOST_BUILD_TYPE),debug)
243$(error HOST_BUILD_TYPE must be either release or debug, not '$(HOST_BUILD_TYPE)')
244endif
245endif
246
247# We don't want to move all the prebuilt host tools to a $(HOST_OS)-x86_64 dir.
248HOST_PREBUILT_ARCH := x86
249# This is the standard way to name a directory containing prebuilt host
250# objects. E.g., prebuilt/$(HOST_PREBUILT_TAG)/cc
251# This must match the logic in get_host_prebuilt_prefix in envsetup.sh
252HOST_PREBUILT_TAG := $(BUILD_OS)-$(HOST_PREBUILT_ARCH)
253
254# TARGET_COPY_OUT_* are all relative to the staging directory, ie PRODUCT_OUT.
255# Define them here so they can be used in product config files.
256TARGET_COPY_OUT_SYSTEM := system
257TARGET_COPY_OUT_SYSTEM_DLKM := system_dlkm
258TARGET_COPY_OUT_SYSTEM_OTHER := system_other
259TARGET_COPY_OUT_DATA := data
260TARGET_COPY_OUT_ASAN := $(TARGET_COPY_OUT_DATA)/asan
261TARGET_COPY_OUT_OEM := oem
262TARGET_COPY_OUT_RAMDISK := ramdisk
263TARGET_COPY_OUT_DEBUG_RAMDISK := debug_ramdisk
264TARGET_COPY_OUT_VENDOR_DEBUG_RAMDISK := vendor_debug_ramdisk
265TARGET_COPY_OUT_TEST_HARNESS_RAMDISK := test_harness_ramdisk
266TARGET_COPY_OUT_ROOT := root
267TARGET_COPY_OUT_RECOVERY := recovery
268# The directory used for optional partitions depend on the BoardConfig, so
269# they're defined to placeholder values here and swapped after reading the
270# BoardConfig, to be either the partition dir, or a subdir within 'system'.
271_vendor_path_placeholder := ||VENDOR-PATH-PH||
272_product_path_placeholder := ||PRODUCT-PATH-PH||
273_system_ext_path_placeholder := ||SYSTEM_EXT-PATH-PH||
274_odm_path_placeholder := ||ODM-PATH-PH||
275_vendor_dlkm_path_placeholder := ||VENDOR_DLKM-PATH-PH||
276_odm_dlkm_path_placeholder := ||ODM_DLKM-PATH-PH||
277_system_dlkm_path_placeholder := ||SYSTEM_DLKM-PATH-PH||
278TARGET_COPY_OUT_VENDOR := $(_vendor_path_placeholder)
279TARGET_COPY_OUT_VENDOR_RAMDISK := vendor_ramdisk
280TARGET_COPY_OUT_VENDOR_KERNEL_RAMDISK := vendor_kernel_ramdisk
281TARGET_COPY_OUT_PRODUCT := $(_product_path_placeholder)
282# TODO(b/135957588) TARGET_COPY_OUT_PRODUCT_SERVICES will copy the target to
283# product
284TARGET_COPY_OUT_PRODUCT_SERVICES := $(_product_path_placeholder)
285TARGET_COPY_OUT_SYSTEM_EXT := $(_system_ext_path_placeholder)
286TARGET_COPY_OUT_ODM := $(_odm_path_placeholder)
287TARGET_COPY_OUT_VENDOR_DLKM := $(_vendor_dlkm_path_placeholder)
288TARGET_COPY_OUT_ODM_DLKM := $(_odm_dlkm_path_placeholder)
289TARGET_COPY_OUT_SYSTEM_DLKM := $(_system_dlkm_path_placeholder)
290
291# Returns the non-sanitized version of the path provided in $1.
292define get_non_asan_path
293$(patsubst $(PRODUCT_OUT)/$(TARGET_COPY_OUT_ASAN)/%,$(PRODUCT_OUT)/%,$1)
294endef
295
296#################################################################
297# Set up minimal BOOTCLASSPATH list of jars to build/execute
298# java code with dalvikvm/art.
299# Jars present in the ART apex. These should match exactly the list of Java
300# libraries in art-bootclasspath-fragment. The APEX variant name
301# (com.android.art) is the same regardless which Soong module provides the ART
302# APEX. See the long comment in build/soong/java/dexprepopt_bootjars.go for
303# details.
304ART_APEX_JARS := \
305    com.android.art:core-oj \
306    com.android.art:core-libart \
307    com.android.art:okhttp \
308    com.android.art:bouncycastle \
309    com.android.art:apache-xml
310# With EMMA_INSTRUMENT_FRAMEWORK=true the Core libraries depend on jacoco.
311ifeq (true,$(EMMA_INSTRUMENT_FRAMEWORK))
312  ART_APEX_JARS += com.android.art:jacocoagent
313endif
314#################################################################
315
316# Dumps all variables that match [A-Z][A-Z0-9_]* (with a few exceptions)
317# to the file at $(1). It is used to print only the variables that are
318# likely to be relevant to the product or board configuration.
319# Soong config variables are dumped as $(call soong_config_set) calls
320# instead of the raw variable values, because mk2rbc can't read the
321# raw ones. There is a final sed command on the output file to
322# remove leading spaces because I couldn't figure out how to remove
323# them in pure make code.
324define dump-variables-rbc
325$(eval _dump_variables_rbc_excluded := \
326  BUILD_NUMBER \
327  DATE \
328  LOCAL_PATH \
329  MAKEFILE_LIST \
330  PRODUCTS \
331  PRODUCT_COPY_OUT_% \
332  RBC_PRODUCT_CONFIG \
333  RBC_BOARD_CONFIG \
334  SOONG_% \
335  TARGET_RELEASE \
336  TOPDIR \
337  TRACE_BEGIN_SOONG \
338  USER)
339$(file >$(OUT_DIR)/dump-variables-rbc-temp.txt,$(subst $(space),$(newline),$(sort $(filter-out $(_dump_variables_rbc_excluded),$(.VARIABLES)))))
340$(file >$(1),\
341$(foreach v, $(shell grep -he "^[A-Z][A-Z0-9_]*$$" $(OUT_DIR)/dump-variables-rbc-temp.txt),\
342$(v) := $(strip $($(v)))$(newline))\
343$(foreach ns,$(sort $(SOONG_CONFIG_NAMESPACES)),\
344$(foreach v,$(sort $(SOONG_CONFIG_$(ns))),\
345$$(call soong_config_set,$(ns),$(v),$(SOONG_CONFIG_$(ns)_$(v)))$(newline))))
346$(shell sed -i "s/^ *//g" $(1))
347endef
348
349# Read the product specs so we can get TARGET_DEVICE and other
350# variables that we need in order to locate the output files.
351include $(BUILD_SYSTEM)/product_config.mk
352
353build_variant := $(filter-out eng user userdebug,$(TARGET_BUILD_VARIANT))
354ifneq ($(build_variant)-$(words $(TARGET_BUILD_VARIANT)),-1)
355$(warning bad TARGET_BUILD_VARIANT: $(TARGET_BUILD_VARIANT))
356$(error must be empty or one of: eng user userdebug)
357endif
358
359SDK_HOST_ARCH := x86
360TARGET_OS := linux
361
362# Some board configuration files use $(PRODUCT_OUT)
363TARGET_OUT_ROOT := $(OUT_DIR)/target
364TARGET_PRODUCT_OUT_ROOT := $(TARGET_OUT_ROOT)/product
365PRODUCT_OUT := $(TARGET_PRODUCT_OUT_ROOT)/$(TARGET_DEVICE)
366.KATI_READONLY := TARGET_OUT_ROOT TARGET_PRODUCT_OUT_ROOT PRODUCT_OUT
367
368include $(BUILD_SYSTEM)/board_config.mk
369
370# the target build type defaults to release
371ifneq ($(TARGET_BUILD_TYPE),debug)
372TARGET_BUILD_TYPE := release
373endif
374
375include $(BUILD_SYSTEM)/product_validation_checks.mk
376
377# ---------------------------------------------------------------
378# figure out the output directories
379
380SOONG_OUT_DIR := $(OUT_DIR)/soong
381
382HOST_OUT_ROOT := $(OUT_DIR)/host
383
384.KATI_READONLY := SOONG_OUT_DIR HOST_OUT_ROOT
385
386# We want to avoid two host bin directories in multilib build.
387HOST_OUT := $(HOST_OUT_ROOT)/$(HOST_OS)-$(HOST_PREBUILT_ARCH)
388
389# Soong now installs to the same directory as Make.
390SOONG_HOST_OUT := $(HOST_OUT)
391
392HOST_CROSS_OUT := $(HOST_OUT_ROOT)/$(HOST_CROSS_OS)-$(HOST_CROSS_ARCH)
393
394.KATI_READONLY := HOST_OUT SOONG_HOST_OUT HOST_CROSS_OUT
395
396TARGET_COMMON_OUT_ROOT := $(TARGET_OUT_ROOT)/common
397HOST_COMMON_OUT_ROOT := $(HOST_OUT_ROOT)/common
398
399.KATI_READONLY := TARGET_COMMON_OUT_ROOT HOST_COMMON_OUT_ROOT
400
401OUT_DOCS := $(TARGET_COMMON_OUT_ROOT)/docs
402OUT_NDK_DOCS := $(TARGET_COMMON_OUT_ROOT)/ndk-docs
403.KATI_READONLY := OUT_DOCS OUT_NDK_DOCS
404
405$(call KATI_obsolete,BUILD_OUT,Use HOST_OUT instead)
406
407BUILD_OUT_EXECUTABLES := $(HOST_OUT)/bin
408SOONG_HOST_OUT_EXECUTABLES := $(SOONG_HOST_OUT)/bin
409.KATI_READONLY := BUILD_OUT_EXECUTABLES SOONG_HOST_OUT_EXECUTABLES
410
411HOST_OUT_EXECUTABLES := $(HOST_OUT)/bin
412HOST_OUT_SHARED_LIBRARIES := $(HOST_OUT)/lib64
413HOST_OUT_DYLIB_LIBRARIES := $(HOST_OUT)/lib64
414HOST_OUT_RENDERSCRIPT_BITCODE := $(HOST_OUT_SHARED_LIBRARIES)
415HOST_OUT_JAVA_LIBRARIES := $(HOST_OUT)/framework
416HOST_OUT_SDK_ADDON := $(HOST_OUT)/sdk_addon
417HOST_OUT_NATIVE_TESTS := $(HOST_OUT)/nativetest64
418HOST_OUT_COVERAGE := $(HOST_OUT)/coverage
419HOST_OUT_TESTCASES := $(HOST_OUT)/testcases
420.KATI_READONLY := \
421  HOST_OUT_EXECUTABLES \
422  HOST_OUT_SHARED_LIBRARIES \
423  HOST_OUT_RENDERSCRIPT_BITCODE \
424  HOST_OUT_JAVA_LIBRARIES \
425  HOST_OUT_SDK_ADDON \
426  HOST_OUT_NATIVE_TESTS \
427  HOST_OUT_COVERAGE \
428  HOST_OUT_TESTCASES
429
430HOST_CROSS_OUT_EXECUTABLES := $(HOST_CROSS_OUT)/bin
431HOST_CROSS_OUT_SHARED_LIBRARIES := $(HOST_CROSS_OUT)/lib
432HOST_CROSS_OUT_NATIVE_TESTS := $(HOST_CROSS_OUT)/nativetest
433HOST_CROSS_OUT_COVERAGE := $(HOST_CROSS_OUT)/coverage
434HOST_CROSS_OUT_TESTCASES := $(HOST_CROSS_OUT)/testcases
435.KATI_READONLY := \
436  HOST_CROSS_OUT_EXECUTABLES \
437  HOST_CROSS_OUT_SHARED_LIBRARIES \
438  HOST_CROSS_OUT_NATIVE_TESTS \
439  HOST_CROSS_OUT_COVERAGE \
440  HOST_CROSS_OUT_TESTCASES
441
442HOST_OUT_INTERMEDIATES := $(HOST_OUT)/obj
443HOST_OUT_NOTICE_FILES := $(HOST_OUT_INTERMEDIATES)/NOTICE_FILES
444HOST_OUT_COMMON_INTERMEDIATES := $(HOST_COMMON_OUT_ROOT)/obj
445HOST_OUT_FAKE := $(HOST_OUT)/fake_packages
446.KATI_READONLY := \
447  HOST_OUT_INTERMEDIATES \
448  HOST_OUT_NOTICE_FILES \
449  HOST_OUT_COMMON_INTERMEDIATES \
450  HOST_OUT_FAKE
451
452HOST_CROSS_OUT_INTERMEDIATES := $(HOST_CROSS_OUT)/obj
453HOST_CROSS_OUT_NOTICE_FILES := $(HOST_CROSS_OUT_INTERMEDIATES)/NOTICE_FILES
454.KATI_READONLY := \
455  HOST_CROSS_OUT_INTERMEDIATES \
456  HOST_CROSS_OUT_NOTICE_FILES
457
458HOST_OUT_GEN := $(HOST_OUT)/gen
459HOST_OUT_COMMON_GEN := $(HOST_COMMON_OUT_ROOT)/gen
460.KATI_READONLY := \
461  HOST_OUT_GEN \
462  HOST_OUT_COMMON_GEN
463
464HOST_CROSS_OUT_GEN := $(HOST_CROSS_OUT)/gen
465.KATI_READONLY := HOST_CROSS_OUT_GEN
466
467# Out for HOST_2ND_ARCH
468$(HOST_2ND_ARCH_VAR_PREFIX)HOST_OUT_INTERMEDIATES := $(HOST_OUT)/obj32
469$(HOST_2ND_ARCH_VAR_PREFIX)HOST_OUT_SHARED_LIBRARIES := $(HOST_OUT)/lib
470$(HOST_2ND_ARCH_VAR_PREFIX)HOST_OUT_EXECUTABLES := $(HOST_OUT_EXECUTABLES)
471$(HOST_2ND_ARCH_VAR_PREFIX)HOST_OUT_JAVA_LIBRARIES := $(HOST_OUT_JAVA_LIBRARIES)
472$(HOST_2ND_ARCH_VAR_PREFIX)HOST_OUT_NATIVE_TESTS := $(HOST_OUT)/nativetest
473$(HOST_2ND_ARCH_VAR_PREFIX)HOST_OUT_TESTCASES := $(HOST_OUT_TESTCASES)
474.KATI_READONLY := \
475  $(HOST_2ND_ARCH_VAR_PREFIX)HOST_OUT_INTERMEDIATES \
476  $(HOST_2ND_ARCH_VAR_PREFIX)HOST_OUT_SHARED_LIBRARIES \
477  $(HOST_2ND_ARCH_VAR_PREFIX)HOST_OUT_EXECUTABLES \
478  $(HOST_2ND_ARCH_VAR_PREFIX)HOST_OUT_JAVA_LIBRARIES \
479  $(HOST_2ND_ARCH_VAR_PREFIX)HOST_OUT_NATIVE_TESTS \
480  $(HOST_2ND_ARCH_VAR_PREFIX)HOST_OUT_TESTCASES
481
482# The default host library path.
483# It always points to the path where we build libraries in the default bitness.
484HOST_LIBRARY_PATH := $(HOST_OUT_SHARED_LIBRARIES)
485.KATI_READONLY := HOST_LIBRARY_PATH
486
487# Out for HOST_CROSS_2ND_ARCH
488$(HOST_CROSS_2ND_ARCH_VAR_PREFIX)HOST_CROSS_OUT_INTERMEDIATES := $(HOST_CROSS_OUT)/obj64
489$(HOST_CROSS_2ND_ARCH_VAR_PREFIX)HOST_CROSS_OUT_SHARED_LIBRARIES := $(HOST_CROSS_OUT)/lib64
490$(HOST_CROSS_2ND_ARCH_VAR_PREFIX)HOST_CROSS_OUT_EXECUTABLES := $(HOST_CROSS_OUT_EXECUTABLES)
491$(HOST_CROSS_2ND_ARCH_VAR_PREFIX)HOST_CROSS_OUT_NATIVE_TESTS := $(HOST_CROSS_OUT)/nativetest64
492.KATI_READONLY := \
493  $(HOST_CROSS_2ND_ARCH_VAR_PREFIX)HOST_CROSS_OUT_INTERMEDIATES \
494  $(HOST_CROSS_2ND_ARCH_VAR_PREFIX)HOST_CROSS_OUT_SHARED_LIBRARIES \
495  $(HOST_CROSS_2ND_ARCH_VAR_PREFIX)HOST_CROSS_OUT_EXECUTABLES \
496  $(HOST_CROSS_2ND_ARCH_VAR_PREFIX)HOST_CROSS_OUT_NATIVE_TESTS
497
498ifneq ($(filter address,$(SANITIZE_TARGET)),)
499  TARGET_OUT_INTERMEDIATES := $(PRODUCT_OUT)/obj_asan
500else
501  TARGET_OUT_INTERMEDIATES := $(PRODUCT_OUT)/obj
502endif
503TARGET_OUT_HEADERS := $(TARGET_OUT_INTERMEDIATES)/include
504.KATI_READONLY := TARGET_OUT_INTERMEDIATES TARGET_OUT_HEADERS
505
506ifneq ($(filter address,$(SANITIZE_TARGET)),)
507  TARGET_OUT_COMMON_INTERMEDIATES := $(TARGET_COMMON_OUT_ROOT)/obj_asan
508else
509  TARGET_OUT_COMMON_INTERMEDIATES := $(TARGET_COMMON_OUT_ROOT)/obj
510endif
511.KATI_READONLY := TARGET_OUT_COMMON_INTERMEDIATES
512
513TARGET_OUT_GEN := $(PRODUCT_OUT)/gen
514TARGET_OUT_COMMON_GEN := $(TARGET_COMMON_OUT_ROOT)/gen
515.KATI_READONLY := TARGET_OUT_GEN TARGET_OUT_COMMON_GEN
516
517TARGET_OUT := $(PRODUCT_OUT)/$(TARGET_COPY_OUT_SYSTEM)
518.KATI_READONLY := TARGET_OUT
519ifneq ($(filter address,$(SANITIZE_TARGET)),)
520target_out_shared_libraries_base := $(PRODUCT_OUT)/$(TARGET_COPY_OUT_ASAN)/system
521ifeq ($(SANITIZE_LITE),true)
522# When using SANITIZE_LITE, APKs must not be packaged with sanitized libraries, as they will not
523# work with unsanitized app_process. For simplicity, generate APKs into /data/asan/.
524target_out_app_base := $(PRODUCT_OUT)/$(TARGET_COPY_OUT_ASAN)/system
525else
526target_out_app_base := $(TARGET_OUT)
527endif
528else
529target_out_shared_libraries_base := $(TARGET_OUT)
530target_out_app_base := $(TARGET_OUT)
531endif
532
533TARGET_OUT_EXECUTABLES := $(TARGET_OUT)/bin
534TARGET_OUT_OPTIONAL_EXECUTABLES := $(TARGET_OUT)/xbin
535ifeq ($(TARGET_IS_64_BIT),true)
536# /system/lib always contains 32-bit libraries,
537# and /system/lib64 (if present) always contains 64-bit libraries.
538TARGET_OUT_SHARED_LIBRARIES := $(target_out_shared_libraries_base)/lib64
539else
540TARGET_OUT_SHARED_LIBRARIES := $(target_out_shared_libraries_base)/lib
541endif
542TARGET_OUT_RENDERSCRIPT_BITCODE := $(TARGET_OUT_SHARED_LIBRARIES)
543TARGET_OUT_JAVA_LIBRARIES := $(TARGET_OUT)/framework
544TARGET_OUT_APPS := $(target_out_app_base)/app
545TARGET_OUT_APPS_PRIVILEGED := $(target_out_app_base)/priv-app
546TARGET_OUT_KEYLAYOUT := $(TARGET_OUT)/usr/keylayout
547TARGET_OUT_KEYCHARS := $(TARGET_OUT)/usr/keychars
548TARGET_OUT_ETC := $(TARGET_OUT)/etc
549TARGET_OUT_NOTICE_FILES := $(TARGET_OUT_INTERMEDIATES)/NOTICE_FILES
550TARGET_OUT_FAKE := $(PRODUCT_OUT)/fake_packages
551TARGET_OUT_TESTCASES := $(PRODUCT_OUT)/testcases
552TARGET_OUT_FLAGS := $(TARGET_OUT_INTERMEDIATES)/FLAGS
553
554.KATI_READONLY := \
555  TARGET_OUT_EXECUTABLES \
556  TARGET_OUT_OPTIONAL_EXECUTABLES \
557  TARGET_OUT_SHARED_LIBRARIES \
558  TARGET_OUT_RENDERSCRIPT_BITCODE \
559  TARGET_OUT_JAVA_LIBRARIES \
560  TARGET_OUT_APPS \
561  TARGET_OUT_APPS_PRIVILEGED \
562  TARGET_OUT_KEYLAYOUT \
563  TARGET_OUT_KEYCHARS \
564  TARGET_OUT_ETC \
565  TARGET_OUT_NOTICE_FILES \
566  TARGET_OUT_FAKE \
567  TARGET_OUT_TESTCASES \
568  TARGET_OUT_FLAGS
569
570ifeq ($(SANITIZE_LITE),true)
571# When using SANITIZE_LITE, APKs must not be packaged with sanitized libraries, as they will not
572# work with unsanitized app_process. For simplicity, generate APKs into /data/asan/.
573TARGET_OUT_SYSTEM_OTHER := $(PRODUCT_OUT)/$(TARGET_COPY_OUT_ASAN)/$(TARGET_COPY_OUT_SYSTEM_OTHER)
574else
575TARGET_OUT_SYSTEM_OTHER := $(PRODUCT_OUT)/$(TARGET_COPY_OUT_SYSTEM_OTHER)
576endif
577.KATI_READONLY := TARGET_OUT_SYSTEM_OTHER
578
579# Out for TARGET_2ND_ARCH
580TARGET_2ND_ARCH_MODULE_SUFFIX := $(HOST_2ND_ARCH_MODULE_SUFFIX)
581.KATI_READONLY := TARGET_2ND_ARCH_MODULE_SUFFIX
582
583ifneq ($(filter address,$(SANITIZE_TARGET)),)
584  $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_INTERMEDIATES := $(PRODUCT_OUT)/obj_$(TARGET_2ND_ARCH)_asan
585else
586  $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_INTERMEDIATES := $(PRODUCT_OUT)/obj_$(TARGET_2ND_ARCH)
587endif
588$(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_SHARED_LIBRARIES := $(target_out_shared_libraries_base)/lib
589$(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_RENDERSCRIPT_BITCODE := $($(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_SHARED_LIBRARIES)
590$(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_EXECUTABLES := $(TARGET_OUT_EXECUTABLES)
591$(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_APPS := $(TARGET_OUT_APPS)
592$(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_APPS_PRIVILEGED := $(TARGET_OUT_APPS_PRIVILEGED)
593$(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_TESTCASES := $(TARGET_OUT_TESTCASES)
594.KATI_READONLY := \
595  $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_INTERMEDIATES \
596  $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_SHARED_LIBRARIES \
597  $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_RENDERSCRIPT_BITCODE \
598  $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_EXECUTABLES \
599  $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_APPS \
600  $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_APPS_PRIVILEGED \
601  $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_TESTCASES
602
603MODULE_CLASS_APPS := app
604MODULE_CLASS_EXECUTABLES := bin
605MODULE_CLASS_JAVA_LIBRARIES := framework
606MODULE_CLASS_NATIVE_TESTS := nativetest
607MODULE_CLASS_METRIC_TESTS := benchmarktest
608TARGET_OUT_DATA := $(PRODUCT_OUT)/$(TARGET_COPY_OUT_DATA)
609TARGET_OUT_DATA_EXECUTABLES := $(TARGET_OUT_EXECUTABLES)
610TARGET_OUT_DATA_SHARED_LIBRARIES := $(TARGET_OUT_SHARED_LIBRARIES)
611TARGET_OUT_DATA_JAVA_LIBRARIES := $(TARGET_OUT_DATA)/framework
612TARGET_OUT_DATA_APPS := $(TARGET_OUT_DATA)/app
613TARGET_OUT_DATA_KEYLAYOUT := $(TARGET_OUT_KEYLAYOUT)
614TARGET_OUT_DATA_KEYCHARS := $(TARGET_OUT_KEYCHARS)
615TARGET_OUT_DATA_ETC := $(TARGET_OUT_ETC)
616ifeq ($(TARGET_IS_64_BIT),true)
617TARGET_OUT_DATA_NATIVE_TESTS := $(TARGET_OUT_DATA)/nativetest64
618TARGET_OUT_DATA_METRIC_TESTS := $(TARGET_OUT_DATA)/benchmarktest64
619TARGET_OUT_VENDOR_NATIVE_TESTS := $(TARGET_OUT_DATA)/nativetest64$(TARGET_VENDOR_TEST_SUFFIX)
620TARGET_OUT_VENDOR_METRIC_TESTS := $(TARGET_OUT_DATA)/benchmarktest64$(TARGET_VENDOR_TEST_SUFFIX)
621else
622TARGET_OUT_DATA_NATIVE_TESTS := $(TARGET_OUT_DATA)/nativetest
623TARGET_OUT_DATA_METRIC_TESTS := $(TARGET_OUT_DATA)/benchmarktest
624TARGET_OUT_VENDOR_NATIVE_TESTS := $(TARGET_OUT_DATA)/nativetest$(TARGET_VENDOR_TEST_SUFFIX)
625TARGET_OUT_VENDOR_METRIC_TESTS := $(TARGET_OUT_DATA)/benchmarktest$(TARGET_VENDOR_TEST_SUFFIX)
626endif
627MODULE_CLASS_FAKE := fake_packages
628TARGET_OUT_DATA_FAKE := $(TARGET_OUT_DATA)/fake_packages
629.KATI_READONLY := \
630  TARGET_OUT_DATA \
631  TARGET_OUT_DATA_EXECUTABLES \
632  TARGET_OUT_DATA_SHARED_LIBRARIES \
633  TARGET_OUT_DATA_JAVA_LIBRARIES \
634  TARGET_OUT_DATA_APPS \
635  TARGET_OUT_DATA_KEYLAYOUT \
636  TARGET_OUT_DATA_KEYCHARS \
637  TARGET_OUT_DATA_ETC \
638  TARGET_OUT_DATA_NATIVE_TESTS \
639  TARGET_OUT_DATA_METRIC_TESTS \
640  TARGET_OUT_VENDOR_NATIVE_TESTS \
641  TARGET_OUT_VENDOR_METRIC_TESTS \
642  TARGET_OUT_DATA_FAKE \
643  MODULE_CLASS_APPS \
644  MODULE_CLASS_EXECUTABLES \
645  MODULE_CLASS_JAVA_LIBRARIES \
646  MODULE_CLASS_NATIVE_TESTS \
647  MODULE_CLASS_METRIC_TESTS \
648  MODULE_CLASS_FAKE
649
650$(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_DATA_EXECUTABLES := $(TARGET_OUT_DATA_EXECUTABLES)
651$(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_DATA_SHARED_LIBRARIES := $($(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_SHARED_LIBRARIES)
652$(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_DATA_APPS := $(TARGET_OUT_DATA_APPS)
653$(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_DATA_NATIVE_TESTS := $(TARGET_OUT_DATA)/nativetest
654$(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_DATA_METRIC_TESTS := $(TARGET_OUT_DATA)/benchmarktest
655$(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_VENDOR_NATIVE_TESTS := $(TARGET_OUT_DATA)/nativetest$(TARGET_VENDOR_TEST_SUFFIX)
656$(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_VENDOR_METRIC_TESTS := $(TARGET_OUT_DATA)/benchmarktest$(TARGET_VENDOR_TEST_SUFFIX)
657.KATI_READONLY := \
658  $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_DATA_EXECUTABLES \
659  $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_DATA_SHARED_LIBRARIES \
660  $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_DATA_APPS \
661  $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_DATA_NATIVE_TESTS \
662  $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_DATA_METRIC_TESTS \
663  $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_VENDOR_NATIVE_TESTS \
664  $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_VENDOR_METRIC_TESTS \
665
666TARGET_OUT_CACHE := $(PRODUCT_OUT)/cache
667.KATI_READONLY := TARGET_OUT_CACHE
668
669TARGET_OUT_VENDOR := $(PRODUCT_OUT)/$(TARGET_COPY_OUT_VENDOR)
670.KATI_READONLY := TARGET_OUT_VENDOR
671ifneq ($(filter address,$(SANITIZE_TARGET)),)
672target_out_vendor_shared_libraries_base := $(PRODUCT_OUT)/$(TARGET_COPY_OUT_ASAN)/$(TARGET_COPY_OUT_VENDOR)
673ifeq ($(SANITIZE_LITE),true)
674# When using SANITIZE_LITE, APKs must not be packaged with sanitized libraries, as they will not
675# work with unsanitized app_process. For simplicity, generate APKs into /data/asan/.
676target_out_vendor_app_base := $(PRODUCT_OUT)/$(TARGET_COPY_OUT_ASAN)/$(TARGET_COPY_OUT_VENDOR)
677else
678target_out_vendor_app_base := $(TARGET_OUT_VENDOR)
679endif
680else
681target_out_vendor_shared_libraries_base := $(TARGET_OUT_VENDOR)
682target_out_vendor_app_base := $(TARGET_OUT_VENDOR)
683endif
684
685TARGET_OUT_VENDOR_EXECUTABLES := $(TARGET_OUT_VENDOR)/bin
686TARGET_OUT_VENDOR_OPTIONAL_EXECUTABLES := $(TARGET_OUT_VENDOR)/xbin
687ifeq ($(TARGET_IS_64_BIT),true)
688TARGET_OUT_VENDOR_SHARED_LIBRARIES := $(target_out_vendor_shared_libraries_base)/lib64
689else
690TARGET_OUT_VENDOR_SHARED_LIBRARIES := $(target_out_vendor_shared_libraries_base)/lib
691endif
692TARGET_OUT_VENDOR_RENDERSCRIPT_BITCODE := $(TARGET_OUT_VENDOR_SHARED_LIBRARIES)
693TARGET_OUT_VENDOR_JAVA_LIBRARIES := $(TARGET_OUT_VENDOR)/framework
694TARGET_OUT_VENDOR_APPS := $(target_out_vendor_app_base)/app
695TARGET_OUT_VENDOR_APPS_PRIVILEGED := $(target_out_vendor_app_base)/priv-app
696TARGET_OUT_VENDOR_ETC := $(TARGET_OUT_VENDOR)/etc
697TARGET_OUT_VENDOR_FAKE := $(PRODUCT_OUT)/vendor_fake_packages
698.KATI_READONLY := \
699  TARGET_OUT_VENDOR_EXECUTABLES \
700  TARGET_OUT_VENDOR_OPTIONAL_EXECUTABLES \
701  TARGET_OUT_VENDOR_SHARED_LIBRARIES \
702  TARGET_OUT_VENDOR_RENDERSCRIPT_BITCODE \
703  TARGET_OUT_VENDOR_JAVA_LIBRARIES \
704  TARGET_OUT_VENDOR_APPS \
705  TARGET_OUT_VENDOR_APPS_PRIVILEGED \
706  TARGET_OUT_VENDOR_ETC \
707  TARGET_OUT_VENDOR_FAKE
708
709$(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_VENDOR_EXECUTABLES := $(TARGET_OUT_VENDOR_EXECUTABLES)
710$(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_VENDOR_SHARED_LIBRARIES := $(target_out_vendor_shared_libraries_base)/lib
711$(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_VENDOR_RENDERSCRIPT_BITCODE := $($(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_VENDOR_SHARED_LIBRARIES)
712$(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_VENDOR_APPS := $(TARGET_OUT_VENDOR_APPS)
713$(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_VENDOR_APPS_PRIVILEGED := $(TARGET_OUT_VENDOR_APPS_PRIVILEGED)
714.KATI_READONLY := \
715  $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_VENDOR_EXECUTABLES \
716  $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_VENDOR_SHARED_LIBRARIES \
717  $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_VENDOR_RENDERSCRIPT_BITCODE \
718  $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_VENDOR_APPS \
719  $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_VENDOR_APPS_PRIVILEGED
720
721TARGET_OUT_OEM := $(PRODUCT_OUT)/$(TARGET_COPY_OUT_OEM)
722TARGET_OUT_OEM_EXECUTABLES := $(TARGET_OUT_OEM)/bin
723ifeq ($(TARGET_IS_64_BIT),true)
724TARGET_OUT_OEM_SHARED_LIBRARIES := $(TARGET_OUT_OEM)/lib64
725else
726TARGET_OUT_OEM_SHARED_LIBRARIES := $(TARGET_OUT_OEM)/lib
727endif
728# We don't expect Java libraries in the oem.img.
729# TARGET_OUT_OEM_JAVA_LIBRARIES:= $(TARGET_OUT_OEM)/framework
730TARGET_OUT_OEM_APPS := $(TARGET_OUT_OEM)/app
731TARGET_OUT_OEM_ETC := $(TARGET_OUT_OEM)/etc
732.KATI_READONLY := \
733  TARGET_OUT_OEM \
734  TARGET_OUT_OEM_EXECUTABLES \
735  TARGET_OUT_OEM_SHARED_LIBRARIES \
736  TARGET_OUT_OEM_APPS \
737  TARGET_OUT_OEM_ETC
738
739$(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_OEM_EXECUTABLES := $(TARGET_OUT_OEM_EXECUTABLES)
740$(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_OEM_SHARED_LIBRARIES := $(TARGET_OUT_OEM)/lib
741$(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_OEM_APPS := $(TARGET_OUT_OEM_APPS)
742.KATI_READONLY := \
743  $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_OEM_EXECUTABLES \
744  $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_OEM_SHARED_LIBRARIES \
745  $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_OEM_APPS \
746
747TARGET_OUT_ODM := $(PRODUCT_OUT)/$(TARGET_COPY_OUT_ODM)
748ifneq ($(filter address,$(SANITIZE_TARGET)),)
749target_out_odm_shared_libraries_base := $(PRODUCT_OUT)/$(TARGET_COPY_OUT_ASAN)/$(TARGET_COPY_OUT_OEM)
750ifeq ($(SANITIZE_LITE),true)
751# When using SANITIZE_LITE, APKs must not be packaged with sanitized libraries, as they will not
752# work with unsanitized app_process. For simplicity, generate APKs into /data/asan/.
753target_out_odm_app_base := $(PRODUCT_OUT)/$(TARGET_COPY_OUT_ASAN)/$(TARGET_COPY_OUT_OEM)
754else
755target_out_odm_app_base := $(TARGET_OUT_ODM)
756endif
757else
758target_out_odm_shared_libraries_base := $(TARGET_OUT_ODM)
759target_out_odm_app_base := $(TARGET_OUT_ODM)
760endif
761
762TARGET_OUT_ODM_EXECUTABLES := $(TARGET_OUT_ODM)/bin
763TARGET_OUT_ODM_OPTIONAL_EXECUTABLES := $(TARGET_OUT_ODM)/xbin
764ifeq ($(TARGET_IS_64_BIT),true)
765TARGET_OUT_ODM_SHARED_LIBRARIES := $(target_out_odm_shared_libraries_base)/lib64
766else
767TARGET_OUT_ODM_SHARED_LIBRARIES := $(target_out_odm_shared_libraries_base)/lib
768endif
769TARGET_OUT_ODM_RENDERSCRIPT_BITCODE := $(TARGET_OUT_ODM_SHARED_LIBRARIES)
770TARGET_OUT_ODM_JAVA_LIBRARIES := $(TARGET_OUT_ODM)/framework
771TARGET_OUT_ODM_APPS := $(target_out_odm_app_base)/app
772TARGET_OUT_ODM_APPS_PRIVILEGED := $(target_out_odm_app_base)/priv-app
773TARGET_OUT_ODM_ETC := $(TARGET_OUT_ODM)/etc
774TARGET_OUT_ODM_FAKE := $(PRODUCT_OUT)/odm_fake_packages
775.KATI_READONLY := \
776  TARGET_OUT_ODM \
777  TARGET_OUT_ODM_EXECUTABLES \
778  TARGET_OUT_ODM_OPTIONAL_EXECUTABLES \
779  TARGET_OUT_ODM_SHARED_LIBRARIES \
780  TARGET_OUT_ODM_RENDERSCRIPT_BITCODE \
781  TARGET_OUT_ODM_JAVA_LIBRARIES \
782  TARGET_OUT_ODM_APPS \
783  TARGET_OUT_ODM_APPS_PRIVILEGED \
784  TARGET_OUT_ODM_ETC \
785  TARGET_OUT_ODM_FAKE
786
787$(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_ODM_EXECUTABLES := $(TARGET_OUT_ODM_EXECUTABLES)
788$(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_ODM_SHARED_LIBRARIES := $(target_out_odm_shared_libraries_base)/lib
789$(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_ODM_RENDERSCRIPT_BITCODE := $($(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_ODM_SHARED_LIBRARIES)
790$(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_ODM_APPS := $(TARGET_OUT_ODM_APPS)
791$(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_ODM_APPS_PRIVILEGED := $(TARGET_OUT_ODM_APPS_PRIVILEGED)
792.KATI_READONLY := \
793  $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_ODM_EXECUTABLES \
794  $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_ODM_SHARED_LIBRARIES \
795  $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_ODM_RENDERSCRIPT_BITCODE \
796  $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_ODM_APPS \
797  $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_ODM_APPS_PRIVILEGED
798
799TARGET_OUT_VENDOR_DLKM := $(PRODUCT_OUT)/$(TARGET_COPY_OUT_VENDOR_DLKM)
800
801TARGET_OUT_VENDOR_DLKM_ETC := $(TARGET_OUT_VENDOR_DLKM)/etc
802.KATI_READONLY := \
803  TARGET_OUT_VENDOR_DLKM_ETC
804
805# Unlike other partitions, vendor_dlkm should only contain kernel modules.
806TARGET_OUT_VENDOR_DLKM_EXECUTABLES :=
807TARGET_OUT_VENDOR_DLKM_OPTIONAL_EXECUTABLES :=
808TARGET_OUT_VENDOR_DLKM_SHARED_LIBRARIES :=
809TARGET_OUT_VENDOR_DLKM_RENDERSCRIPT_BITCODE :=
810TARGET_OUT_VENDOR_DLKM_JAVA_LIBRARIES :=
811TARGET_OUT_VENDOR_DLKM_APPS :=
812TARGET_OUT_VENDOR_DLKM_APPS_PRIVILEGED :=
813$(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_VENDOR_DLKM_EXECUTABLES :=
814$(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_VENDOR_DLKM_SHARED_LIBRARIES :=
815$(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_VENDOR_DLKM_RENDERSCRIPT_BITCODE :=
816$(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_VENDOR_DLKM_APPS :=
817$(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_VENDOR_DLKM_APPS_PRIVILEGED :=
818$(KATI_obsolete_var \
819    TARGET_OUT_VENDOR_DLKM_EXECUTABLES \
820    TARGET_OUT_VENDOR_DLKM_OPTIONAL_EXECUTABLES \
821    TARGET_OUT_VENDOR_DLKM_SHARED_LIBRARIES \
822    TARGET_OUT_VENDOR_DLKM_RENDERSCRIPT_BITCODE \
823    TARGET_OUT_VENDOR_DLKM_JAVA_LIBRARIES \
824    TARGET_OUT_VENDOR_DLKM_APPS \
825    TARGET_OUT_VENDOR_DLKM_APPS_PRIVILEGED \
826    $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_VENDOR_DLKM_EXECUTABLES \
827    $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_VENDOR_DLKM_SHARED_LIBRARIES \
828    $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_VENDOR_DLKM_RENDERSCRIPT_BITCODE \
829    $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_VENDOR_DLKM_APPS \
830    $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_VENDOR_DLKM_APPS_PRIVILEGED \
831    , vendor_dlkm should not contain any executables, libraries, or apps)
832
833TARGET_OUT_ODM_DLKM := $(PRODUCT_OUT)/$(TARGET_COPY_OUT_ODM_DLKM)
834
835TARGET_OUT_ODM_DLKM_ETC := $(TARGET_OUT_ODM_DLKM)/etc
836.KATI_READONLY := \
837  TARGET_OUT_ODM_DLKM_ETC
838
839# Unlike other partitions, odm_dlkm should only contain kernel modules.
840TARGET_OUT_ODM_DLKM_EXECUTABLES :=
841TARGET_OUT_ODM_DLKM_OPTIONAL_EXECUTABLES :=
842TARGET_OUT_ODM_DLKM_SHARED_LIBRARIES :=
843TARGET_OUT_ODM_DLKM_RENDERSCRIPT_BITCODE :=
844TARGET_OUT_ODM_DLKM_JAVA_LIBRARIES :=
845TARGET_OUT_ODM_DLKM_APPS :=
846TARGET_OUT_ODM_DLKM_APPS_PRIVILEGED :=
847$(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_ODM_DLKM_EXECUTABLES :=
848$(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_ODM_DLKM_SHARED_LIBRARIES :=
849$(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_ODM_DLKM_RENDERSCRIPT_BITCODE :=
850$(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_ODM_DLKM_APPS :=
851$(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_ODM_DLKM_APPS_PRIVILEGED :=
852$(KATI_obsolete_var \
853    TARGET_OUT_ODM_DLKM_EXECUTABLES \
854    TARGET_OUT_ODM_DLKM_OPTIONAL_EXECUTABLES \
855    TARGET_OUT_ODM_DLKM_SHARED_LIBRARIES \
856    TARGET_OUT_ODM_DLKM_RENDERSCRIPT_BITCODE \
857    TARGET_OUT_ODM_DLKM_JAVA_LIBRARIES \
858    TARGET_OUT_ODM_DLKM_APPS \
859    TARGET_OUT_ODM_DLKM_APPS_PRIVILEGED \
860    $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_ODM_DLKM_EXECUTABLES \
861    $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_ODM_DLKM_SHARED_LIBRARIES \
862    $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_ODM_DLKM_RENDERSCRIPT_BITCODE \
863    $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_ODM_DLKM_APPS \
864    $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_ODM_DLKM_APPS_PRIVILEGED \
865    , odm_dlkm should not contain any executables, libraries, or apps)
866
867TARGET_OUT_SYSTEM_DLKM := $(PRODUCT_OUT)/$(TARGET_COPY_OUT_SYSTEM_DLKM)
868
869# Unlike other partitions, system_dlkm should only contain kernel modules.
870TARGET_OUT_SYSTEM_DLKM_EXECUTABLES :=
871TARGET_OUT_SYSTEM_DLKM_OPTIONAL_EXECUTABLES :=
872TARGET_OUT_SYSTEM_DLKM_SHARED_LIBRARIES :=
873TARGET_OUT_SYSTEM_DLKM_RENDERSCRIPT_BITCODE :=
874TARGET_OUT_SYSTEM_DLKM_JAVA_LIBRARIES :=
875TARGET_OUT_SYSTEM_DLKM_APPS :=
876TARGET_OUT_SYSTEM_DLKM_APPS_PRIVILEGED :=
877$(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_SYSTEM_DLKM_EXECUTABLES :=
878$(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_SYSTEM_DLKM_SHARED_LIBRARIES :=
879$(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_SYSTEM_DLKM_RENDERSCRIPT_BITCODE :=
880$(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_SYSTEM_DLKM_APPS :=
881$(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_SYSTEM_DLKM_APPS_PRIVILEGED :=
882$(KATI_obsolete_var \
883    TARGET_OUT_SYSTEM_DLKM_EXECUTABLES \
884    TARGET_OUT_SYSTEM_DLKM_OPTIONAL_EXECUTABLES \
885    TARGET_OUT_SYSTEM_DLKM_SHARED_LIBRARIES \
886    TARGET_OUT_SYSTEM_DLKM_RENDERSCRIPT_BITCODE \
887    TARGET_OUT_SYSTEM_DLKM_JAVA_LIBRARIES \
888    TARGET_OUT_SYSTEM_DLKM_APPS \
889    TARGET_OUT_SYSTEM_DLKM_APPS_PRIVILEGED \
890    $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_SYSTEM_DLKM_EXECUTABLES \
891    $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_SYSTEM_DLKM_SHARED_LIBRARIES \
892    $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_SYSTEM_DLKM_RENDERSCRIPT_BITCODE \
893    $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_SYSTEM_DLKM_APPS \
894    $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_SYSTEM_DLKM_APPS_PRIVILEGED \
895    , system_dlkm should not contain any executables, libraries, or apps)
896
897TARGET_OUT_PRODUCT := $(PRODUCT_OUT)/$(TARGET_COPY_OUT_PRODUCT)
898TARGET_OUT_PRODUCT_EXECUTABLES := $(TARGET_OUT_PRODUCT)/bin
899.KATI_READONLY := TARGET_OUT_PRODUCT
900ifneq ($(filter address,$(SANITIZE_TARGET)),)
901target_out_product_shared_libraries_base := $(PRODUCT_OUT)/$(TARGET_COPY_OUT_ASAN)/$(TARGET_COPY_OUT_PRODUCT)
902ifeq ($(SANITIZE_LITE),true)
903# When using SANITIZE_LITE, APKs must not be packaged with sanitized libraries, as they will not
904# work with unsanitized app_process. For simplicity, generate APKs into /data/asan/.
905target_out_product_app_base := $(PRODUCT_OUT)/$(TARGET_COPY_OUT_ASAN)/$(TARGET_COPY_OUT_PRODUCT)
906else
907target_out_product_app_base := $(TARGET_OUT_PRODUCT)
908endif
909else
910target_out_product_shared_libraries_base := $(TARGET_OUT_PRODUCT)
911target_out_product_app_base := $(TARGET_OUT_PRODUCT)
912endif
913
914ifeq ($(TARGET_IS_64_BIT),true)
915TARGET_OUT_PRODUCT_SHARED_LIBRARIES := $(target_out_product_shared_libraries_base)/lib64
916else
917TARGET_OUT_PRODUCT_SHARED_LIBRARIES := $(target_out_product_shared_libraries_base)/lib
918endif
919TARGET_OUT_PRODUCT_JAVA_LIBRARIES := $(TARGET_OUT_PRODUCT)/framework
920TARGET_OUT_PRODUCT_APPS := $(target_out_product_app_base)/app
921TARGET_OUT_PRODUCT_APPS_PRIVILEGED := $(target_out_product_app_base)/priv-app
922TARGET_OUT_PRODUCT_ETC := $(TARGET_OUT_PRODUCT)/etc
923TARGET_OUT_PRODUCT_FAKE := $(TARGET_OUT_PRODUCT)/product_fake_packages
924.KATI_READONLY := \
925  TARGET_OUT_PRODUCT_EXECUTABLES \
926  TARGET_OUT_PRODUCT_SHARED_LIBRARIES \
927  TARGET_OUT_PRODUCT_JAVA_LIBRARIES \
928  TARGET_OUT_PRODUCT_APPS \
929  TARGET_OUT_PRODUCT_APPS_PRIVILEGED \
930  TARGET_OUT_PRODUCT_ETC \
931  TARGET_OUT_PRODUCT_FAKE
932
933$(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_PRODUCT_EXECUTABLES := $(TARGET_OUT_PRODUCT_EXECUTABLES)
934$(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_PRODUCT_SHARED_LIBRARIES := $(target_out_product_shared_libraries_base)/lib
935$(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_PRODUCT_APPS := $(TARGET_OUT_PRODUCT_APPS)
936$(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_PRODUCT_APPS_PRIVILEGED := $(TARGET_OUT_PRODUCT_APPS_PRIVILEGED)
937.KATI_READONLY := \
938  $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_PRODUCT_EXECUTABLES \
939  $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_PRODUCT_SHARED_LIBRARIES \
940  $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_PRODUCT_APPS \
941  $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_PRODUCT_APPS_PRIVILEGED
942
943TARGET_OUT_SYSTEM_EXT := $(PRODUCT_OUT)/$(TARGET_COPY_OUT_SYSTEM_EXT)
944ifneq ($(filter address,$(SANITIZE_TARGET)),)
945target_out_system_ext_shared_libraries_base := $(PRODUCT_OUT)/$(TARGET_COPY_OUT_ASAN)/$(TARGET_COPY_OUT_SYSTEM_EXT)
946ifeq ($(SANITIZE_LITE),true)
947# When using SANITIZE_LITE, APKs must not be packaged with sanitized libraries, as they will not
948# work with unsanitized app_process. For simplicity, generate APKs into /data/asan/.
949target_out_system_ext_app_base := $(PRODUCT_OUT)/$(TARGET_COPY_OUT_ASAN)/$(TARGET_COPY_OUT_SYSTEM_EXT)
950else
951target_out_system_ext_app_base := $(TARGET_OUT_SYSTEM_EXT)
952endif
953else
954target_out_system_ext_shared_libraries_base := $(TARGET_OUT_SYSTEM_EXT)
955target_out_system_ext_app_base := $(TARGET_OUT_SYSTEM_EXT)
956endif
957
958ifeq ($(TARGET_IS_64_BIT),true)
959TARGET_OUT_SYSTEM_EXT_SHARED_LIBRARIES := $(target_out_system_ext_shared_libraries_base)/lib64
960else
961TARGET_OUT_SYSTEM_EXT_SHARED_LIBRARIES := $(target_out_system_ext_shared_libraries_base)/lib
962endif
963TARGET_OUT_SYSTEM_EXT_JAVA_LIBRARIES:= $(TARGET_OUT_SYSTEM_EXT)/framework
964TARGET_OUT_SYSTEM_EXT_APPS := $(target_out_system_ext_app_base)/app
965TARGET_OUT_SYSTEM_EXT_APPS_PRIVILEGED := $(target_out_system_ext_app_base)/priv-app
966TARGET_OUT_SYSTEM_EXT_ETC := $(TARGET_OUT_SYSTEM_EXT)/etc
967TARGET_OUT_SYSTEM_EXT_EXECUTABLES := $(TARGET_OUT_SYSTEM_EXT)/bin
968TARGET_OUT_SYSTEM_EXT_FAKE := $(PRODUCT_OUT)/system_ext_fake_packages
969.KATI_READONLY := \
970  TARGET_OUT_SYSTEM_EXT_EXECUTABLES \
971  TARGET_OUT_SYSTEM_EXT_SHARED_LIBRARIES \
972  TARGET_OUT_SYSTEM_EXT_JAVA_LIBRARIES \
973  TARGET_OUT_SYSTEM_EXT_APPS \
974  TARGET_OUT_SYSTEM_EXT_APPS_PRIVILEGED \
975  TARGET_OUT_SYSTEM_EXT_ETC \
976  TARGET_OUT_SYSTEM_EXT_FAKE
977
978$(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_SYSTEM_EXT_EXECUTABLES := $(TARGET_OUT_SYSTEM_EXT_EXECUTABLES)
979$(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_SYSTEM_EXT_SHARED_LIBRARIES := $(target_out_system_ext_shared_libraries_base)/lib
980$(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_SYSTEM_EXT_APPS := $(TARGET_OUT_SYSTEM_EXT_APPS)
981$(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_SYSTEM_EXT_APPS_PRIVILEGED := $(TARGET_OUT_SYSTEM_EXT_APPS_PRIVILEGED)
982.KATI_READONLY := \
983  $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_SYSTEM_EXT_EXECUTABLES \
984  $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_SYSTEM_EXT_SHARED_LIBRARIES \
985  $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_SYSTEM_EXT_APPS \
986  $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_SYSTEM_EXT_APPS_PRIVILEGED
987
988TARGET_OUT_BREAKPAD := $(PRODUCT_OUT)/breakpad
989.KATI_READONLY := TARGET_OUT_BREAKPAD
990
991TARGET_OUT_UNSTRIPPED := $(PRODUCT_OUT)/symbols
992TARGET_OUT_EXECUTABLES_UNSTRIPPED := $(TARGET_OUT_UNSTRIPPED)/system/bin
993TARGET_OUT_SHARED_LIBRARIES_UNSTRIPPED := $(TARGET_OUT_UNSTRIPPED)/system/lib
994TARGET_OUT_VENDOR_SHARED_LIBRARIES_UNSTRIPPED := $(TARGET_OUT_UNSTRIPPED)/$(TARGET_COPY_OUT_VENDOR)/lib
995TARGET_ROOT_OUT_UNSTRIPPED := $(TARGET_OUT_UNSTRIPPED)
996TARGET_ROOT_OUT_BIN_UNSTRIPPED := $(TARGET_OUT_UNSTRIPPED)/bin
997TARGET_OUT_COVERAGE := $(PRODUCT_OUT)/coverage
998.KATI_READONLY := \
999  TARGET_OUT_UNSTRIPPED \
1000  TARGET_OUT_EXECUTABLES_UNSTRIPPED \
1001  TARGET_OUT_SHARED_LIBRARIES_UNSTRIPPED \
1002  TARGET_OUT_VENDOR_SHARED_LIBRARIES_UNSTRIPPED \
1003  TARGET_ROOT_OUT_UNSTRIPPED \
1004  TARGET_ROOT_OUT_BIN_UNSTRIPPED \
1005  TARGET_OUT_COVERAGE
1006
1007TARGET_RAMDISK_OUT := $(PRODUCT_OUT)/$(TARGET_COPY_OUT_RAMDISK)
1008TARGET_RAMDISK_OUT_UNSTRIPPED := $(TARGET_OUT_UNSTRIPPED)
1009TARGET_DEBUG_RAMDISK_OUT := $(PRODUCT_OUT)/$(TARGET_COPY_OUT_DEBUG_RAMDISK)
1010TARGET_VENDOR_DEBUG_RAMDISK_OUT := $(PRODUCT_OUT)/$(TARGET_COPY_OUT_VENDOR_DEBUG_RAMDISK)
1011TARGET_TEST_HARNESS_RAMDISK_OUT := $(PRODUCT_OUT)/$(TARGET_COPY_OUT_TEST_HARNESS_RAMDISK)
1012
1013TARGET_SYSTEM_DLKM_OUT := $(PRODUCT_OUT)/$(TARGET_COPY_OUT_SYSTEM_DLKM)
1014.KATI_READONLY := TARGET_SYSTEM_DLKM_OUT
1015
1016TARGET_VENDOR_RAMDISK_OUT := $(PRODUCT_OUT)/$(TARGET_COPY_OUT_VENDOR_RAMDISK)
1017TARGET_VENDOR_KERNEL_RAMDISK_OUT := $(PRODUCT_OUT)/$(TARGET_COPY_OUT_VENDOR_KERNEL_RAMDISK)
1018
1019TARGET_ROOT_OUT := $(PRODUCT_OUT)/$(TARGET_COPY_OUT_ROOT)
1020TARGET_ROOT_OUT_BIN := $(TARGET_ROOT_OUT)/bin
1021TARGET_ROOT_OUT_ETC := $(TARGET_ROOT_OUT)/etc
1022TARGET_ROOT_OUT_USR := $(TARGET_ROOT_OUT)/usr
1023.KATI_READONLY := \
1024  TARGET_ROOT_OUT \
1025  TARGET_ROOT_OUT_BIN \
1026  TARGET_ROOT_OUT_ETC \
1027  TARGET_ROOT_OUT_USR
1028
1029TARGET_RECOVERY_OUT := $(PRODUCT_OUT)/$(TARGET_COPY_OUT_RECOVERY)
1030TARGET_RECOVERY_ROOT_OUT := $(TARGET_RECOVERY_OUT)/root
1031.KATI_READONLY := \
1032  TARGET_RECOVERY_OUT \
1033  TARGET_RECOVERY_ROOT_OUT
1034
1035TARGET_SYSLOADER_OUT := $(PRODUCT_OUT)/sysloader
1036TARGET_SYSLOADER_ROOT_OUT := $(TARGET_SYSLOADER_OUT)/root
1037TARGET_SYSLOADER_SYSTEM_OUT := $(TARGET_SYSLOADER_OUT)/root/system
1038.KATI_READONLY := \
1039  TARGET_SYSLOADER_OUT \
1040  TARGET_SYSLOADER_ROOT_OUT \
1041  TARGET_SYSLOADER_SYSTEM_OUT
1042
1043TARGET_INSTALLER_OUT := $(PRODUCT_OUT)/installer
1044TARGET_INSTALLER_DATA_OUT := $(TARGET_INSTALLER_OUT)/data
1045TARGET_INSTALLER_ROOT_OUT := $(TARGET_INSTALLER_OUT)/root
1046TARGET_INSTALLER_SYSTEM_OUT := $(TARGET_INSTALLER_OUT)/root/system
1047.KATI_READONLY := \
1048  TARGET_INSTALLER_OUT \
1049  TARGET_INSTALLER_DATA_OUT \
1050  TARGET_INSTALLER_ROOT_OUT \
1051  TARGET_INSTALLER_SYSTEM_OUT
1052
1053COMMON_MODULE_CLASSES := TARGET_NOTICE_FILES HOST_NOTICE_FILES HOST_JAVA_LIBRARIES
1054PER_ARCH_MODULE_CLASSES := SHARED_LIBRARIES STATIC_LIBRARIES EXECUTABLES GYP RENDERSCRIPT_BITCODE NATIVE_TESTS HEADER_LIBRARIES RLIB_LIBRARIES DYLIB_LIBRARIES
1055.KATI_READONLY := COMMON_MODULE_CLASSES PER_ARCH_MODULE_CLASSES
1056
1057ifeq ($(CALLED_FROM_SETUP),true)
1058PRINT_BUILD_CONFIG ?= true
1059endif
1060