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
420HOST_OUT_ETC := $(HOST_OUT)/etc
421.KATI_READONLY := \
422  HOST_OUT_EXECUTABLES \
423  HOST_OUT_SHARED_LIBRARIES \
424  HOST_OUT_RENDERSCRIPT_BITCODE \
425  HOST_OUT_JAVA_LIBRARIES \
426  HOST_OUT_SDK_ADDON \
427  HOST_OUT_NATIVE_TESTS \
428  HOST_OUT_COVERAGE \
429  HOST_OUT_TESTCASES \
430  HOST_OUT_ETC
431
432HOST_CROSS_OUT_EXECUTABLES := $(HOST_CROSS_OUT)/bin
433HOST_CROSS_OUT_SHARED_LIBRARIES := $(HOST_CROSS_OUT)/lib
434HOST_CROSS_OUT_NATIVE_TESTS := $(HOST_CROSS_OUT)/nativetest
435HOST_CROSS_OUT_COVERAGE := $(HOST_CROSS_OUT)/coverage
436HOST_CROSS_OUT_TESTCASES := $(HOST_CROSS_OUT)/testcases
437.KATI_READONLY := \
438  HOST_CROSS_OUT_EXECUTABLES \
439  HOST_CROSS_OUT_SHARED_LIBRARIES \
440  HOST_CROSS_OUT_NATIVE_TESTS \
441  HOST_CROSS_OUT_COVERAGE \
442  HOST_CROSS_OUT_TESTCASES
443
444HOST_OUT_INTERMEDIATES := $(HOST_OUT)/obj
445HOST_OUT_NOTICE_FILES := $(HOST_OUT_INTERMEDIATES)/NOTICE_FILES
446HOST_OUT_COMMON_INTERMEDIATES := $(HOST_COMMON_OUT_ROOT)/obj
447HOST_OUT_FAKE := $(HOST_OUT)/fake_packages
448.KATI_READONLY := \
449  HOST_OUT_INTERMEDIATES \
450  HOST_OUT_NOTICE_FILES \
451  HOST_OUT_COMMON_INTERMEDIATES \
452  HOST_OUT_FAKE
453
454HOST_CROSS_OUT_INTERMEDIATES := $(HOST_CROSS_OUT)/obj
455HOST_CROSS_OUT_NOTICE_FILES := $(HOST_CROSS_OUT_INTERMEDIATES)/NOTICE_FILES
456.KATI_READONLY := \
457  HOST_CROSS_OUT_INTERMEDIATES \
458  HOST_CROSS_OUT_NOTICE_FILES
459
460HOST_OUT_GEN := $(HOST_OUT)/gen
461HOST_OUT_COMMON_GEN := $(HOST_COMMON_OUT_ROOT)/gen
462.KATI_READONLY := \
463  HOST_OUT_GEN \
464  HOST_OUT_COMMON_GEN
465
466HOST_CROSS_OUT_GEN := $(HOST_CROSS_OUT)/gen
467.KATI_READONLY := HOST_CROSS_OUT_GEN
468
469# Out for HOST_2ND_ARCH
470$(HOST_2ND_ARCH_VAR_PREFIX)HOST_OUT_INTERMEDIATES := $(HOST_OUT)/obj32
471$(HOST_2ND_ARCH_VAR_PREFIX)HOST_OUT_SHARED_LIBRARIES := $(HOST_OUT)/lib
472$(HOST_2ND_ARCH_VAR_PREFIX)HOST_OUT_EXECUTABLES := $(HOST_OUT_EXECUTABLES)
473$(HOST_2ND_ARCH_VAR_PREFIX)HOST_OUT_JAVA_LIBRARIES := $(HOST_OUT_JAVA_LIBRARIES)
474$(HOST_2ND_ARCH_VAR_PREFIX)HOST_OUT_NATIVE_TESTS := $(HOST_OUT)/nativetest
475$(HOST_2ND_ARCH_VAR_PREFIX)HOST_OUT_TESTCASES := $(HOST_OUT_TESTCASES)
476.KATI_READONLY := \
477  $(HOST_2ND_ARCH_VAR_PREFIX)HOST_OUT_INTERMEDIATES \
478  $(HOST_2ND_ARCH_VAR_PREFIX)HOST_OUT_SHARED_LIBRARIES \
479  $(HOST_2ND_ARCH_VAR_PREFIX)HOST_OUT_EXECUTABLES \
480  $(HOST_2ND_ARCH_VAR_PREFIX)HOST_OUT_JAVA_LIBRARIES \
481  $(HOST_2ND_ARCH_VAR_PREFIX)HOST_OUT_NATIVE_TESTS \
482  $(HOST_2ND_ARCH_VAR_PREFIX)HOST_OUT_TESTCASES
483
484# The default host library path.
485# It always points to the path where we build libraries in the default bitness.
486HOST_LIBRARY_PATH := $(HOST_OUT_SHARED_LIBRARIES)
487.KATI_READONLY := HOST_LIBRARY_PATH
488
489# Out for HOST_CROSS_2ND_ARCH
490$(HOST_CROSS_2ND_ARCH_VAR_PREFIX)HOST_CROSS_OUT_INTERMEDIATES := $(HOST_CROSS_OUT)/obj64
491$(HOST_CROSS_2ND_ARCH_VAR_PREFIX)HOST_CROSS_OUT_SHARED_LIBRARIES := $(HOST_CROSS_OUT)/lib64
492$(HOST_CROSS_2ND_ARCH_VAR_PREFIX)HOST_CROSS_OUT_EXECUTABLES := $(HOST_CROSS_OUT_EXECUTABLES)
493$(HOST_CROSS_2ND_ARCH_VAR_PREFIX)HOST_CROSS_OUT_NATIVE_TESTS := $(HOST_CROSS_OUT)/nativetest64
494.KATI_READONLY := \
495  $(HOST_CROSS_2ND_ARCH_VAR_PREFIX)HOST_CROSS_OUT_INTERMEDIATES \
496  $(HOST_CROSS_2ND_ARCH_VAR_PREFIX)HOST_CROSS_OUT_SHARED_LIBRARIES \
497  $(HOST_CROSS_2ND_ARCH_VAR_PREFIX)HOST_CROSS_OUT_EXECUTABLES \
498  $(HOST_CROSS_2ND_ARCH_VAR_PREFIX)HOST_CROSS_OUT_NATIVE_TESTS
499
500ifneq ($(filter address,$(SANITIZE_TARGET)),)
501  TARGET_OUT_INTERMEDIATES := $(PRODUCT_OUT)/obj_asan
502else
503  TARGET_OUT_INTERMEDIATES := $(PRODUCT_OUT)/obj
504endif
505TARGET_OUT_HEADERS := $(TARGET_OUT_INTERMEDIATES)/include
506.KATI_READONLY := TARGET_OUT_INTERMEDIATES TARGET_OUT_HEADERS
507
508ifneq ($(filter address,$(SANITIZE_TARGET)),)
509  TARGET_OUT_COMMON_INTERMEDIATES := $(TARGET_COMMON_OUT_ROOT)/obj_asan
510else
511  TARGET_OUT_COMMON_INTERMEDIATES := $(TARGET_COMMON_OUT_ROOT)/obj
512endif
513.KATI_READONLY := TARGET_OUT_COMMON_INTERMEDIATES
514
515TARGET_OUT_GEN := $(PRODUCT_OUT)/gen
516TARGET_OUT_COMMON_GEN := $(TARGET_COMMON_OUT_ROOT)/gen
517.KATI_READONLY := TARGET_OUT_GEN TARGET_OUT_COMMON_GEN
518
519TARGET_OUT := $(PRODUCT_OUT)/$(TARGET_COPY_OUT_SYSTEM)
520.KATI_READONLY := TARGET_OUT
521ifneq ($(filter address,$(SANITIZE_TARGET)),)
522target_out_shared_libraries_base := $(PRODUCT_OUT)/$(TARGET_COPY_OUT_ASAN)/system
523ifeq ($(SANITIZE_LITE),true)
524# When using SANITIZE_LITE, APKs must not be packaged with sanitized libraries, as they will not
525# work with unsanitized app_process. For simplicity, generate APKs into /data/asan/.
526target_out_app_base := $(PRODUCT_OUT)/$(TARGET_COPY_OUT_ASAN)/system
527else
528target_out_app_base := $(TARGET_OUT)
529endif
530else
531target_out_shared_libraries_base := $(TARGET_OUT)
532target_out_app_base := $(TARGET_OUT)
533endif
534
535TARGET_OUT_EXECUTABLES := $(TARGET_OUT)/bin
536TARGET_OUT_OPTIONAL_EXECUTABLES := $(TARGET_OUT)/xbin
537ifeq ($(TARGET_IS_64_BIT),true)
538# /system/lib always contains 32-bit libraries,
539# and /system/lib64 (if present) always contains 64-bit libraries.
540TARGET_OUT_SHARED_LIBRARIES := $(target_out_shared_libraries_base)/lib64
541else
542TARGET_OUT_SHARED_LIBRARIES := $(target_out_shared_libraries_base)/lib
543endif
544TARGET_OUT_RENDERSCRIPT_BITCODE := $(TARGET_OUT_SHARED_LIBRARIES)
545TARGET_OUT_JAVA_LIBRARIES := $(TARGET_OUT)/framework
546TARGET_OUT_APPS := $(target_out_app_base)/app
547TARGET_OUT_APPS_PRIVILEGED := $(target_out_app_base)/priv-app
548TARGET_OUT_KEYLAYOUT := $(TARGET_OUT)/usr/keylayout
549TARGET_OUT_KEYCHARS := $(TARGET_OUT)/usr/keychars
550TARGET_OUT_ETC := $(TARGET_OUT)/etc
551TARGET_OUT_NOTICE_FILES := $(TARGET_OUT_INTERMEDIATES)/NOTICE_FILES
552TARGET_OUT_FAKE := $(PRODUCT_OUT)/fake_packages
553TARGET_OUT_TESTCASES := $(PRODUCT_OUT)/testcases
554TARGET_OUT_FLAGS := $(TARGET_OUT_INTERMEDIATES)/FLAGS
555
556.KATI_READONLY := \
557  TARGET_OUT_EXECUTABLES \
558  TARGET_OUT_OPTIONAL_EXECUTABLES \
559  TARGET_OUT_SHARED_LIBRARIES \
560  TARGET_OUT_RENDERSCRIPT_BITCODE \
561  TARGET_OUT_JAVA_LIBRARIES \
562  TARGET_OUT_APPS \
563  TARGET_OUT_APPS_PRIVILEGED \
564  TARGET_OUT_KEYLAYOUT \
565  TARGET_OUT_KEYCHARS \
566  TARGET_OUT_ETC \
567  TARGET_OUT_NOTICE_FILES \
568  TARGET_OUT_FAKE \
569  TARGET_OUT_TESTCASES \
570  TARGET_OUT_FLAGS
571
572ifeq ($(SANITIZE_LITE),true)
573# When using SANITIZE_LITE, APKs must not be packaged with sanitized libraries, as they will not
574# work with unsanitized app_process. For simplicity, generate APKs into /data/asan/.
575TARGET_OUT_SYSTEM_OTHER := $(PRODUCT_OUT)/$(TARGET_COPY_OUT_ASAN)/$(TARGET_COPY_OUT_SYSTEM_OTHER)
576else
577TARGET_OUT_SYSTEM_OTHER := $(PRODUCT_OUT)/$(TARGET_COPY_OUT_SYSTEM_OTHER)
578endif
579.KATI_READONLY := TARGET_OUT_SYSTEM_OTHER
580
581# Out for TARGET_2ND_ARCH
582TARGET_2ND_ARCH_MODULE_SUFFIX := $(HOST_2ND_ARCH_MODULE_SUFFIX)
583.KATI_READONLY := TARGET_2ND_ARCH_MODULE_SUFFIX
584
585ifneq ($(filter address,$(SANITIZE_TARGET)),)
586  $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_INTERMEDIATES := $(PRODUCT_OUT)/obj_$(TARGET_2ND_ARCH)_asan
587else
588  $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_INTERMEDIATES := $(PRODUCT_OUT)/obj_$(TARGET_2ND_ARCH)
589endif
590$(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_SHARED_LIBRARIES := $(target_out_shared_libraries_base)/lib
591$(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_RENDERSCRIPT_BITCODE := $($(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_SHARED_LIBRARIES)
592$(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_EXECUTABLES := $(TARGET_OUT_EXECUTABLES)
593$(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_APPS := $(TARGET_OUT_APPS)
594$(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_APPS_PRIVILEGED := $(TARGET_OUT_APPS_PRIVILEGED)
595$(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_TESTCASES := $(TARGET_OUT_TESTCASES)
596.KATI_READONLY := \
597  $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_INTERMEDIATES \
598  $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_SHARED_LIBRARIES \
599  $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_RENDERSCRIPT_BITCODE \
600  $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_EXECUTABLES \
601  $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_APPS \
602  $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_APPS_PRIVILEGED \
603  $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_TESTCASES
604
605MODULE_CLASS_APPS := app
606MODULE_CLASS_EXECUTABLES := bin
607MODULE_CLASS_JAVA_LIBRARIES := framework
608MODULE_CLASS_NATIVE_TESTS := nativetest
609MODULE_CLASS_METRIC_TESTS := benchmarktest
610TARGET_OUT_DATA := $(PRODUCT_OUT)/$(TARGET_COPY_OUT_DATA)
611TARGET_OUT_DATA_EXECUTABLES := $(TARGET_OUT_EXECUTABLES)
612TARGET_OUT_DATA_SHARED_LIBRARIES := $(TARGET_OUT_SHARED_LIBRARIES)
613TARGET_OUT_DATA_JAVA_LIBRARIES := $(TARGET_OUT_DATA)/framework
614TARGET_OUT_DATA_APPS := $(TARGET_OUT_DATA)/app
615TARGET_OUT_DATA_KEYLAYOUT := $(TARGET_OUT_KEYLAYOUT)
616TARGET_OUT_DATA_KEYCHARS := $(TARGET_OUT_KEYCHARS)
617TARGET_OUT_DATA_ETC := $(TARGET_OUT_ETC)
618ifeq ($(TARGET_IS_64_BIT),true)
619TARGET_OUT_DATA_NATIVE_TESTS := $(TARGET_OUT_DATA)/nativetest64
620TARGET_OUT_DATA_METRIC_TESTS := $(TARGET_OUT_DATA)/benchmarktest64
621TARGET_OUT_VENDOR_NATIVE_TESTS := $(TARGET_OUT_DATA)/nativetest64$(TARGET_VENDOR_TEST_SUFFIX)
622TARGET_OUT_VENDOR_METRIC_TESTS := $(TARGET_OUT_DATA)/benchmarktest64$(TARGET_VENDOR_TEST_SUFFIX)
623else
624TARGET_OUT_DATA_NATIVE_TESTS := $(TARGET_OUT_DATA)/nativetest
625TARGET_OUT_DATA_METRIC_TESTS := $(TARGET_OUT_DATA)/benchmarktest
626TARGET_OUT_VENDOR_NATIVE_TESTS := $(TARGET_OUT_DATA)/nativetest$(TARGET_VENDOR_TEST_SUFFIX)
627TARGET_OUT_VENDOR_METRIC_TESTS := $(TARGET_OUT_DATA)/benchmarktest$(TARGET_VENDOR_TEST_SUFFIX)
628endif
629MODULE_CLASS_FAKE := fake_packages
630TARGET_OUT_DATA_FAKE := $(TARGET_OUT_DATA)/fake_packages
631.KATI_READONLY := \
632  TARGET_OUT_DATA \
633  TARGET_OUT_DATA_EXECUTABLES \
634  TARGET_OUT_DATA_SHARED_LIBRARIES \
635  TARGET_OUT_DATA_JAVA_LIBRARIES \
636  TARGET_OUT_DATA_APPS \
637  TARGET_OUT_DATA_KEYLAYOUT \
638  TARGET_OUT_DATA_KEYCHARS \
639  TARGET_OUT_DATA_ETC \
640  TARGET_OUT_DATA_NATIVE_TESTS \
641  TARGET_OUT_DATA_METRIC_TESTS \
642  TARGET_OUT_VENDOR_NATIVE_TESTS \
643  TARGET_OUT_VENDOR_METRIC_TESTS \
644  TARGET_OUT_DATA_FAKE \
645  MODULE_CLASS_APPS \
646  MODULE_CLASS_EXECUTABLES \
647  MODULE_CLASS_JAVA_LIBRARIES \
648  MODULE_CLASS_NATIVE_TESTS \
649  MODULE_CLASS_METRIC_TESTS \
650  MODULE_CLASS_FAKE
651
652$(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_DATA_EXECUTABLES := $(TARGET_OUT_DATA_EXECUTABLES)
653$(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_DATA_SHARED_LIBRARIES := $($(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_SHARED_LIBRARIES)
654$(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_DATA_APPS := $(TARGET_OUT_DATA_APPS)
655$(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_DATA_NATIVE_TESTS := $(TARGET_OUT_DATA)/nativetest
656$(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_DATA_METRIC_TESTS := $(TARGET_OUT_DATA)/benchmarktest
657$(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_VENDOR_NATIVE_TESTS := $(TARGET_OUT_DATA)/nativetest$(TARGET_VENDOR_TEST_SUFFIX)
658$(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_VENDOR_METRIC_TESTS := $(TARGET_OUT_DATA)/benchmarktest$(TARGET_VENDOR_TEST_SUFFIX)
659.KATI_READONLY := \
660  $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_DATA_EXECUTABLES \
661  $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_DATA_SHARED_LIBRARIES \
662  $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_DATA_APPS \
663  $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_DATA_NATIVE_TESTS \
664  $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_DATA_METRIC_TESTS \
665  $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_VENDOR_NATIVE_TESTS \
666  $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_VENDOR_METRIC_TESTS \
667
668TARGET_OUT_CACHE := $(PRODUCT_OUT)/cache
669.KATI_READONLY := TARGET_OUT_CACHE
670
671TARGET_OUT_VENDOR := $(PRODUCT_OUT)/$(TARGET_COPY_OUT_VENDOR)
672.KATI_READONLY := TARGET_OUT_VENDOR
673ifneq ($(filter address,$(SANITIZE_TARGET)),)
674target_out_vendor_shared_libraries_base := $(PRODUCT_OUT)/$(TARGET_COPY_OUT_ASAN)/$(TARGET_COPY_OUT_VENDOR)
675ifeq ($(SANITIZE_LITE),true)
676# When using SANITIZE_LITE, APKs must not be packaged with sanitized libraries, as they will not
677# work with unsanitized app_process. For simplicity, generate APKs into /data/asan/.
678target_out_vendor_app_base := $(PRODUCT_OUT)/$(TARGET_COPY_OUT_ASAN)/$(TARGET_COPY_OUT_VENDOR)
679else
680target_out_vendor_app_base := $(TARGET_OUT_VENDOR)
681endif
682else
683target_out_vendor_shared_libraries_base := $(TARGET_OUT_VENDOR)
684target_out_vendor_app_base := $(TARGET_OUT_VENDOR)
685endif
686
687TARGET_OUT_VENDOR_EXECUTABLES := $(TARGET_OUT_VENDOR)/bin
688TARGET_OUT_VENDOR_OPTIONAL_EXECUTABLES := $(TARGET_OUT_VENDOR)/xbin
689ifeq ($(TARGET_IS_64_BIT),true)
690TARGET_OUT_VENDOR_SHARED_LIBRARIES := $(target_out_vendor_shared_libraries_base)/lib64
691else
692TARGET_OUT_VENDOR_SHARED_LIBRARIES := $(target_out_vendor_shared_libraries_base)/lib
693endif
694TARGET_OUT_VENDOR_RENDERSCRIPT_BITCODE := $(TARGET_OUT_VENDOR_SHARED_LIBRARIES)
695TARGET_OUT_VENDOR_JAVA_LIBRARIES := $(TARGET_OUT_VENDOR)/framework
696TARGET_OUT_VENDOR_APPS := $(target_out_vendor_app_base)/app
697TARGET_OUT_VENDOR_APPS_PRIVILEGED := $(target_out_vendor_app_base)/priv-app
698TARGET_OUT_VENDOR_ETC := $(TARGET_OUT_VENDOR)/etc
699TARGET_OUT_VENDOR_FAKE := $(PRODUCT_OUT)/vendor_fake_packages
700.KATI_READONLY := \
701  TARGET_OUT_VENDOR_EXECUTABLES \
702  TARGET_OUT_VENDOR_OPTIONAL_EXECUTABLES \
703  TARGET_OUT_VENDOR_SHARED_LIBRARIES \
704  TARGET_OUT_VENDOR_RENDERSCRIPT_BITCODE \
705  TARGET_OUT_VENDOR_JAVA_LIBRARIES \
706  TARGET_OUT_VENDOR_APPS \
707  TARGET_OUT_VENDOR_APPS_PRIVILEGED \
708  TARGET_OUT_VENDOR_ETC \
709  TARGET_OUT_VENDOR_FAKE
710
711$(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_VENDOR_EXECUTABLES := $(TARGET_OUT_VENDOR_EXECUTABLES)
712$(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_VENDOR_SHARED_LIBRARIES := $(target_out_vendor_shared_libraries_base)/lib
713$(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_VENDOR_RENDERSCRIPT_BITCODE := $($(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_VENDOR_SHARED_LIBRARIES)
714$(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_VENDOR_APPS := $(TARGET_OUT_VENDOR_APPS)
715$(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_VENDOR_APPS_PRIVILEGED := $(TARGET_OUT_VENDOR_APPS_PRIVILEGED)
716.KATI_READONLY := \
717  $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_VENDOR_EXECUTABLES \
718  $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_VENDOR_SHARED_LIBRARIES \
719  $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_VENDOR_RENDERSCRIPT_BITCODE \
720  $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_VENDOR_APPS \
721  $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_VENDOR_APPS_PRIVILEGED
722
723TARGET_OUT_OEM := $(PRODUCT_OUT)/$(TARGET_COPY_OUT_OEM)
724TARGET_OUT_OEM_EXECUTABLES := $(TARGET_OUT_OEM)/bin
725ifeq ($(TARGET_IS_64_BIT),true)
726TARGET_OUT_OEM_SHARED_LIBRARIES := $(TARGET_OUT_OEM)/lib64
727else
728TARGET_OUT_OEM_SHARED_LIBRARIES := $(TARGET_OUT_OEM)/lib
729endif
730# We don't expect Java libraries in the oem.img.
731# TARGET_OUT_OEM_JAVA_LIBRARIES:= $(TARGET_OUT_OEM)/framework
732TARGET_OUT_OEM_APPS := $(TARGET_OUT_OEM)/app
733TARGET_OUT_OEM_ETC := $(TARGET_OUT_OEM)/etc
734.KATI_READONLY := \
735  TARGET_OUT_OEM \
736  TARGET_OUT_OEM_EXECUTABLES \
737  TARGET_OUT_OEM_SHARED_LIBRARIES \
738  TARGET_OUT_OEM_APPS \
739  TARGET_OUT_OEM_ETC
740
741$(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_OEM_EXECUTABLES := $(TARGET_OUT_OEM_EXECUTABLES)
742$(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_OEM_SHARED_LIBRARIES := $(TARGET_OUT_OEM)/lib
743$(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_OEM_APPS := $(TARGET_OUT_OEM_APPS)
744.KATI_READONLY := \
745  $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_OEM_EXECUTABLES \
746  $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_OEM_SHARED_LIBRARIES \
747  $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_OEM_APPS \
748
749TARGET_OUT_ODM := $(PRODUCT_OUT)/$(TARGET_COPY_OUT_ODM)
750ifneq ($(filter address,$(SANITIZE_TARGET)),)
751target_out_odm_shared_libraries_base := $(PRODUCT_OUT)/$(TARGET_COPY_OUT_ASAN)/$(TARGET_COPY_OUT_OEM)
752ifeq ($(SANITIZE_LITE),true)
753# When using SANITIZE_LITE, APKs must not be packaged with sanitized libraries, as they will not
754# work with unsanitized app_process. For simplicity, generate APKs into /data/asan/.
755target_out_odm_app_base := $(PRODUCT_OUT)/$(TARGET_COPY_OUT_ASAN)/$(TARGET_COPY_OUT_OEM)
756else
757target_out_odm_app_base := $(TARGET_OUT_ODM)
758endif
759else
760target_out_odm_shared_libraries_base := $(TARGET_OUT_ODM)
761target_out_odm_app_base := $(TARGET_OUT_ODM)
762endif
763
764TARGET_OUT_ODM_EXECUTABLES := $(TARGET_OUT_ODM)/bin
765TARGET_OUT_ODM_OPTIONAL_EXECUTABLES := $(TARGET_OUT_ODM)/xbin
766ifeq ($(TARGET_IS_64_BIT),true)
767TARGET_OUT_ODM_SHARED_LIBRARIES := $(target_out_odm_shared_libraries_base)/lib64
768else
769TARGET_OUT_ODM_SHARED_LIBRARIES := $(target_out_odm_shared_libraries_base)/lib
770endif
771TARGET_OUT_ODM_RENDERSCRIPT_BITCODE := $(TARGET_OUT_ODM_SHARED_LIBRARIES)
772TARGET_OUT_ODM_JAVA_LIBRARIES := $(TARGET_OUT_ODM)/framework
773TARGET_OUT_ODM_APPS := $(target_out_odm_app_base)/app
774TARGET_OUT_ODM_APPS_PRIVILEGED := $(target_out_odm_app_base)/priv-app
775TARGET_OUT_ODM_ETC := $(TARGET_OUT_ODM)/etc
776TARGET_OUT_ODM_FAKE := $(PRODUCT_OUT)/odm_fake_packages
777.KATI_READONLY := \
778  TARGET_OUT_ODM \
779  TARGET_OUT_ODM_EXECUTABLES \
780  TARGET_OUT_ODM_OPTIONAL_EXECUTABLES \
781  TARGET_OUT_ODM_SHARED_LIBRARIES \
782  TARGET_OUT_ODM_RENDERSCRIPT_BITCODE \
783  TARGET_OUT_ODM_JAVA_LIBRARIES \
784  TARGET_OUT_ODM_APPS \
785  TARGET_OUT_ODM_APPS_PRIVILEGED \
786  TARGET_OUT_ODM_ETC \
787  TARGET_OUT_ODM_FAKE
788
789$(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_ODM_EXECUTABLES := $(TARGET_OUT_ODM_EXECUTABLES)
790$(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_ODM_SHARED_LIBRARIES := $(target_out_odm_shared_libraries_base)/lib
791$(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_ODM_RENDERSCRIPT_BITCODE := $($(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_ODM_SHARED_LIBRARIES)
792$(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_ODM_APPS := $(TARGET_OUT_ODM_APPS)
793$(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_ODM_APPS_PRIVILEGED := $(TARGET_OUT_ODM_APPS_PRIVILEGED)
794.KATI_READONLY := \
795  $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_ODM_EXECUTABLES \
796  $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_ODM_SHARED_LIBRARIES \
797  $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_ODM_RENDERSCRIPT_BITCODE \
798  $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_ODM_APPS \
799  $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_ODM_APPS_PRIVILEGED
800
801TARGET_OUT_VENDOR_DLKM := $(PRODUCT_OUT)/$(TARGET_COPY_OUT_VENDOR_DLKM)
802
803TARGET_OUT_VENDOR_DLKM_ETC := $(TARGET_OUT_VENDOR_DLKM)/etc
804.KATI_READONLY := \
805  TARGET_OUT_VENDOR_DLKM_ETC
806
807# Unlike other partitions, vendor_dlkm should only contain kernel modules.
808TARGET_OUT_VENDOR_DLKM_EXECUTABLES :=
809TARGET_OUT_VENDOR_DLKM_OPTIONAL_EXECUTABLES :=
810TARGET_OUT_VENDOR_DLKM_SHARED_LIBRARIES :=
811TARGET_OUT_VENDOR_DLKM_RENDERSCRIPT_BITCODE :=
812TARGET_OUT_VENDOR_DLKM_JAVA_LIBRARIES :=
813TARGET_OUT_VENDOR_DLKM_APPS :=
814TARGET_OUT_VENDOR_DLKM_APPS_PRIVILEGED :=
815$(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_VENDOR_DLKM_EXECUTABLES :=
816$(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_VENDOR_DLKM_SHARED_LIBRARIES :=
817$(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_VENDOR_DLKM_RENDERSCRIPT_BITCODE :=
818$(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_VENDOR_DLKM_APPS :=
819$(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_VENDOR_DLKM_APPS_PRIVILEGED :=
820$(KATI_obsolete_var \
821    TARGET_OUT_VENDOR_DLKM_EXECUTABLES \
822    TARGET_OUT_VENDOR_DLKM_OPTIONAL_EXECUTABLES \
823    TARGET_OUT_VENDOR_DLKM_SHARED_LIBRARIES \
824    TARGET_OUT_VENDOR_DLKM_RENDERSCRIPT_BITCODE \
825    TARGET_OUT_VENDOR_DLKM_JAVA_LIBRARIES \
826    TARGET_OUT_VENDOR_DLKM_APPS \
827    TARGET_OUT_VENDOR_DLKM_APPS_PRIVILEGED \
828    $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_VENDOR_DLKM_EXECUTABLES \
829    $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_VENDOR_DLKM_SHARED_LIBRARIES \
830    $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_VENDOR_DLKM_RENDERSCRIPT_BITCODE \
831    $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_VENDOR_DLKM_APPS \
832    $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_VENDOR_DLKM_APPS_PRIVILEGED \
833    , vendor_dlkm should not contain any executables, libraries, or apps)
834
835TARGET_OUT_ODM_DLKM := $(PRODUCT_OUT)/$(TARGET_COPY_OUT_ODM_DLKM)
836
837TARGET_OUT_ODM_DLKM_ETC := $(TARGET_OUT_ODM_DLKM)/etc
838.KATI_READONLY := \
839  TARGET_OUT_ODM_DLKM_ETC
840
841# Unlike other partitions, odm_dlkm should only contain kernel modules.
842TARGET_OUT_ODM_DLKM_EXECUTABLES :=
843TARGET_OUT_ODM_DLKM_OPTIONAL_EXECUTABLES :=
844TARGET_OUT_ODM_DLKM_SHARED_LIBRARIES :=
845TARGET_OUT_ODM_DLKM_RENDERSCRIPT_BITCODE :=
846TARGET_OUT_ODM_DLKM_JAVA_LIBRARIES :=
847TARGET_OUT_ODM_DLKM_APPS :=
848TARGET_OUT_ODM_DLKM_APPS_PRIVILEGED :=
849$(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_ODM_DLKM_EXECUTABLES :=
850$(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_ODM_DLKM_SHARED_LIBRARIES :=
851$(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_ODM_DLKM_RENDERSCRIPT_BITCODE :=
852$(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_ODM_DLKM_APPS :=
853$(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_ODM_DLKM_APPS_PRIVILEGED :=
854$(KATI_obsolete_var \
855    TARGET_OUT_ODM_DLKM_EXECUTABLES \
856    TARGET_OUT_ODM_DLKM_OPTIONAL_EXECUTABLES \
857    TARGET_OUT_ODM_DLKM_SHARED_LIBRARIES \
858    TARGET_OUT_ODM_DLKM_RENDERSCRIPT_BITCODE \
859    TARGET_OUT_ODM_DLKM_JAVA_LIBRARIES \
860    TARGET_OUT_ODM_DLKM_APPS \
861    TARGET_OUT_ODM_DLKM_APPS_PRIVILEGED \
862    $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_ODM_DLKM_EXECUTABLES \
863    $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_ODM_DLKM_SHARED_LIBRARIES \
864    $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_ODM_DLKM_RENDERSCRIPT_BITCODE \
865    $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_ODM_DLKM_APPS \
866    $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_ODM_DLKM_APPS_PRIVILEGED \
867    , odm_dlkm should not contain any executables, libraries, or apps)
868
869TARGET_OUT_SYSTEM_DLKM := $(PRODUCT_OUT)/$(TARGET_COPY_OUT_SYSTEM_DLKM)
870
871# Unlike other partitions, system_dlkm should only contain kernel modules.
872TARGET_OUT_SYSTEM_DLKM_EXECUTABLES :=
873TARGET_OUT_SYSTEM_DLKM_OPTIONAL_EXECUTABLES :=
874TARGET_OUT_SYSTEM_DLKM_SHARED_LIBRARIES :=
875TARGET_OUT_SYSTEM_DLKM_RENDERSCRIPT_BITCODE :=
876TARGET_OUT_SYSTEM_DLKM_JAVA_LIBRARIES :=
877TARGET_OUT_SYSTEM_DLKM_APPS :=
878TARGET_OUT_SYSTEM_DLKM_APPS_PRIVILEGED :=
879$(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_SYSTEM_DLKM_EXECUTABLES :=
880$(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_SYSTEM_DLKM_SHARED_LIBRARIES :=
881$(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_SYSTEM_DLKM_RENDERSCRIPT_BITCODE :=
882$(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_SYSTEM_DLKM_APPS :=
883$(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_SYSTEM_DLKM_APPS_PRIVILEGED :=
884$(KATI_obsolete_var \
885    TARGET_OUT_SYSTEM_DLKM_EXECUTABLES \
886    TARGET_OUT_SYSTEM_DLKM_OPTIONAL_EXECUTABLES \
887    TARGET_OUT_SYSTEM_DLKM_SHARED_LIBRARIES \
888    TARGET_OUT_SYSTEM_DLKM_RENDERSCRIPT_BITCODE \
889    TARGET_OUT_SYSTEM_DLKM_JAVA_LIBRARIES \
890    TARGET_OUT_SYSTEM_DLKM_APPS \
891    TARGET_OUT_SYSTEM_DLKM_APPS_PRIVILEGED \
892    $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_SYSTEM_DLKM_EXECUTABLES \
893    $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_SYSTEM_DLKM_SHARED_LIBRARIES \
894    $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_SYSTEM_DLKM_RENDERSCRIPT_BITCODE \
895    $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_SYSTEM_DLKM_APPS \
896    $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_SYSTEM_DLKM_APPS_PRIVILEGED \
897    , system_dlkm should not contain any executables, libraries, or apps)
898
899TARGET_OUT_PRODUCT := $(PRODUCT_OUT)/$(TARGET_COPY_OUT_PRODUCT)
900TARGET_OUT_PRODUCT_EXECUTABLES := $(TARGET_OUT_PRODUCT)/bin
901.KATI_READONLY := TARGET_OUT_PRODUCT
902ifneq ($(filter address,$(SANITIZE_TARGET)),)
903target_out_product_shared_libraries_base := $(PRODUCT_OUT)/$(TARGET_COPY_OUT_ASAN)/$(TARGET_COPY_OUT_PRODUCT)
904ifeq ($(SANITIZE_LITE),true)
905# When using SANITIZE_LITE, APKs must not be packaged with sanitized libraries, as they will not
906# work with unsanitized app_process. For simplicity, generate APKs into /data/asan/.
907target_out_product_app_base := $(PRODUCT_OUT)/$(TARGET_COPY_OUT_ASAN)/$(TARGET_COPY_OUT_PRODUCT)
908else
909target_out_product_app_base := $(TARGET_OUT_PRODUCT)
910endif
911else
912target_out_product_shared_libraries_base := $(TARGET_OUT_PRODUCT)
913target_out_product_app_base := $(TARGET_OUT_PRODUCT)
914endif
915
916ifeq ($(TARGET_IS_64_BIT),true)
917TARGET_OUT_PRODUCT_SHARED_LIBRARIES := $(target_out_product_shared_libraries_base)/lib64
918else
919TARGET_OUT_PRODUCT_SHARED_LIBRARIES := $(target_out_product_shared_libraries_base)/lib
920endif
921TARGET_OUT_PRODUCT_JAVA_LIBRARIES := $(TARGET_OUT_PRODUCT)/framework
922TARGET_OUT_PRODUCT_APPS := $(target_out_product_app_base)/app
923TARGET_OUT_PRODUCT_APPS_PRIVILEGED := $(target_out_product_app_base)/priv-app
924TARGET_OUT_PRODUCT_ETC := $(TARGET_OUT_PRODUCT)/etc
925TARGET_OUT_PRODUCT_FAKE := $(TARGET_OUT_PRODUCT)/product_fake_packages
926.KATI_READONLY := \
927  TARGET_OUT_PRODUCT_EXECUTABLES \
928  TARGET_OUT_PRODUCT_SHARED_LIBRARIES \
929  TARGET_OUT_PRODUCT_JAVA_LIBRARIES \
930  TARGET_OUT_PRODUCT_APPS \
931  TARGET_OUT_PRODUCT_APPS_PRIVILEGED \
932  TARGET_OUT_PRODUCT_ETC \
933  TARGET_OUT_PRODUCT_FAKE
934
935$(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_PRODUCT_EXECUTABLES := $(TARGET_OUT_PRODUCT_EXECUTABLES)
936$(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_PRODUCT_SHARED_LIBRARIES := $(target_out_product_shared_libraries_base)/lib
937$(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_PRODUCT_APPS := $(TARGET_OUT_PRODUCT_APPS)
938$(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_PRODUCT_APPS_PRIVILEGED := $(TARGET_OUT_PRODUCT_APPS_PRIVILEGED)
939.KATI_READONLY := \
940  $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_PRODUCT_EXECUTABLES \
941  $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_PRODUCT_SHARED_LIBRARIES \
942  $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_PRODUCT_APPS \
943  $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_PRODUCT_APPS_PRIVILEGED
944
945TARGET_OUT_SYSTEM_EXT := $(PRODUCT_OUT)/$(TARGET_COPY_OUT_SYSTEM_EXT)
946ifneq ($(filter address,$(SANITIZE_TARGET)),)
947target_out_system_ext_shared_libraries_base := $(PRODUCT_OUT)/$(TARGET_COPY_OUT_ASAN)/$(TARGET_COPY_OUT_SYSTEM_EXT)
948ifeq ($(SANITIZE_LITE),true)
949# When using SANITIZE_LITE, APKs must not be packaged with sanitized libraries, as they will not
950# work with unsanitized app_process. For simplicity, generate APKs into /data/asan/.
951target_out_system_ext_app_base := $(PRODUCT_OUT)/$(TARGET_COPY_OUT_ASAN)/$(TARGET_COPY_OUT_SYSTEM_EXT)
952else
953target_out_system_ext_app_base := $(TARGET_OUT_SYSTEM_EXT)
954endif
955else
956target_out_system_ext_shared_libraries_base := $(TARGET_OUT_SYSTEM_EXT)
957target_out_system_ext_app_base := $(TARGET_OUT_SYSTEM_EXT)
958endif
959
960ifeq ($(TARGET_IS_64_BIT),true)
961TARGET_OUT_SYSTEM_EXT_SHARED_LIBRARIES := $(target_out_system_ext_shared_libraries_base)/lib64
962else
963TARGET_OUT_SYSTEM_EXT_SHARED_LIBRARIES := $(target_out_system_ext_shared_libraries_base)/lib
964endif
965TARGET_OUT_SYSTEM_EXT_JAVA_LIBRARIES:= $(TARGET_OUT_SYSTEM_EXT)/framework
966TARGET_OUT_SYSTEM_EXT_APPS := $(target_out_system_ext_app_base)/app
967TARGET_OUT_SYSTEM_EXT_APPS_PRIVILEGED := $(target_out_system_ext_app_base)/priv-app
968TARGET_OUT_SYSTEM_EXT_ETC := $(TARGET_OUT_SYSTEM_EXT)/etc
969TARGET_OUT_SYSTEM_EXT_EXECUTABLES := $(TARGET_OUT_SYSTEM_EXT)/bin
970TARGET_OUT_SYSTEM_EXT_FAKE := $(PRODUCT_OUT)/system_ext_fake_packages
971.KATI_READONLY := \
972  TARGET_OUT_SYSTEM_EXT_EXECUTABLES \
973  TARGET_OUT_SYSTEM_EXT_SHARED_LIBRARIES \
974  TARGET_OUT_SYSTEM_EXT_JAVA_LIBRARIES \
975  TARGET_OUT_SYSTEM_EXT_APPS \
976  TARGET_OUT_SYSTEM_EXT_APPS_PRIVILEGED \
977  TARGET_OUT_SYSTEM_EXT_ETC \
978  TARGET_OUT_SYSTEM_EXT_FAKE
979
980$(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_SYSTEM_EXT_EXECUTABLES := $(TARGET_OUT_SYSTEM_EXT_EXECUTABLES)
981$(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_SYSTEM_EXT_SHARED_LIBRARIES := $(target_out_system_ext_shared_libraries_base)/lib
982$(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_SYSTEM_EXT_APPS := $(TARGET_OUT_SYSTEM_EXT_APPS)
983$(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_SYSTEM_EXT_APPS_PRIVILEGED := $(TARGET_OUT_SYSTEM_EXT_APPS_PRIVILEGED)
984.KATI_READONLY := \
985  $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_SYSTEM_EXT_EXECUTABLES \
986  $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_SYSTEM_EXT_SHARED_LIBRARIES \
987  $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_SYSTEM_EXT_APPS \
988  $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_SYSTEM_EXT_APPS_PRIVILEGED
989
990TARGET_OUT_BREAKPAD := $(PRODUCT_OUT)/breakpad
991.KATI_READONLY := TARGET_OUT_BREAKPAD
992
993TARGET_OUT_UNSTRIPPED := $(PRODUCT_OUT)/symbols
994TARGET_OUT_EXECUTABLES_UNSTRIPPED := $(TARGET_OUT_UNSTRIPPED)/system/bin
995TARGET_OUT_SHARED_LIBRARIES_UNSTRIPPED := $(TARGET_OUT_UNSTRIPPED)/system/lib
996TARGET_OUT_VENDOR_SHARED_LIBRARIES_UNSTRIPPED := $(TARGET_OUT_UNSTRIPPED)/$(TARGET_COPY_OUT_VENDOR)/lib
997TARGET_ROOT_OUT_UNSTRIPPED := $(TARGET_OUT_UNSTRIPPED)
998TARGET_ROOT_OUT_BIN_UNSTRIPPED := $(TARGET_OUT_UNSTRIPPED)/bin
999TARGET_OUT_COVERAGE := $(PRODUCT_OUT)/coverage
1000.KATI_READONLY := \
1001  TARGET_OUT_UNSTRIPPED \
1002  TARGET_OUT_EXECUTABLES_UNSTRIPPED \
1003  TARGET_OUT_SHARED_LIBRARIES_UNSTRIPPED \
1004  TARGET_OUT_VENDOR_SHARED_LIBRARIES_UNSTRIPPED \
1005  TARGET_ROOT_OUT_UNSTRIPPED \
1006  TARGET_ROOT_OUT_BIN_UNSTRIPPED \
1007  TARGET_OUT_COVERAGE
1008
1009TARGET_RAMDISK_OUT := $(PRODUCT_OUT)/$(TARGET_COPY_OUT_RAMDISK)
1010TARGET_RAMDISK_OUT_UNSTRIPPED := $(TARGET_OUT_UNSTRIPPED)
1011TARGET_DEBUG_RAMDISK_OUT := $(PRODUCT_OUT)/$(TARGET_COPY_OUT_DEBUG_RAMDISK)
1012TARGET_VENDOR_DEBUG_RAMDISK_OUT := $(PRODUCT_OUT)/$(TARGET_COPY_OUT_VENDOR_DEBUG_RAMDISK)
1013TARGET_TEST_HARNESS_RAMDISK_OUT := $(PRODUCT_OUT)/$(TARGET_COPY_OUT_TEST_HARNESS_RAMDISK)
1014
1015TARGET_SYSTEM_DLKM_OUT := $(PRODUCT_OUT)/$(TARGET_COPY_OUT_SYSTEM_DLKM)
1016.KATI_READONLY := TARGET_SYSTEM_DLKM_OUT
1017
1018TARGET_VENDOR_RAMDISK_OUT := $(PRODUCT_OUT)/$(TARGET_COPY_OUT_VENDOR_RAMDISK)
1019TARGET_VENDOR_KERNEL_RAMDISK_OUT := $(PRODUCT_OUT)/$(TARGET_COPY_OUT_VENDOR_KERNEL_RAMDISK)
1020
1021TARGET_ROOT_OUT := $(PRODUCT_OUT)/$(TARGET_COPY_OUT_ROOT)
1022TARGET_ROOT_OUT_BIN := $(TARGET_ROOT_OUT)/bin
1023TARGET_ROOT_OUT_ETC := $(TARGET_ROOT_OUT)/etc
1024TARGET_ROOT_OUT_USR := $(TARGET_ROOT_OUT)/usr
1025.KATI_READONLY := \
1026  TARGET_ROOT_OUT \
1027  TARGET_ROOT_OUT_BIN \
1028  TARGET_ROOT_OUT_ETC \
1029  TARGET_ROOT_OUT_USR
1030
1031TARGET_RECOVERY_OUT := $(PRODUCT_OUT)/$(TARGET_COPY_OUT_RECOVERY)
1032TARGET_RECOVERY_ROOT_OUT := $(TARGET_RECOVERY_OUT)/root
1033.KATI_READONLY := \
1034  TARGET_RECOVERY_OUT \
1035  TARGET_RECOVERY_ROOT_OUT
1036
1037TARGET_SYSLOADER_OUT := $(PRODUCT_OUT)/sysloader
1038TARGET_SYSLOADER_ROOT_OUT := $(TARGET_SYSLOADER_OUT)/root
1039TARGET_SYSLOADER_SYSTEM_OUT := $(TARGET_SYSLOADER_OUT)/root/system
1040.KATI_READONLY := \
1041  TARGET_SYSLOADER_OUT \
1042  TARGET_SYSLOADER_ROOT_OUT \
1043  TARGET_SYSLOADER_SYSTEM_OUT
1044
1045TARGET_INSTALLER_OUT := $(PRODUCT_OUT)/installer
1046TARGET_INSTALLER_DATA_OUT := $(TARGET_INSTALLER_OUT)/data
1047TARGET_INSTALLER_ROOT_OUT := $(TARGET_INSTALLER_OUT)/root
1048TARGET_INSTALLER_SYSTEM_OUT := $(TARGET_INSTALLER_OUT)/root/system
1049.KATI_READONLY := \
1050  TARGET_INSTALLER_OUT \
1051  TARGET_INSTALLER_DATA_OUT \
1052  TARGET_INSTALLER_ROOT_OUT \
1053  TARGET_INSTALLER_SYSTEM_OUT
1054
1055COMMON_MODULE_CLASSES := TARGET_NOTICE_FILES HOST_NOTICE_FILES HOST_JAVA_LIBRARIES
1056PER_ARCH_MODULE_CLASSES := SHARED_LIBRARIES STATIC_LIBRARIES EXECUTABLES GYP RENDERSCRIPT_BITCODE NATIVE_TESTS HEADER_LIBRARIES RLIB_LIBRARIES DYLIB_LIBRARIES
1057.KATI_READONLY := COMMON_MODULE_CLASSES PER_ARCH_MODULE_CLASSES
1058
1059ifeq ($(CALLED_FROM_SETUP),true)
1060PRINT_BUILD_CONFIG ?= true
1061endif
1062