Home | History | Annotate | Download | only in core
      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
     15 define 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)))))
     20 endef
     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 define version-list
     28 $(1)P1A $(1)P1B $(1)P2A $(1)P2B $(1)D1A $(1)D1B $(1)D2A $(1)D2B $(1)Q1A $(1)Q1B $(1)Q2A $(1)Q2B $(1)Q3A $(1)Q3B
     29 endef
     30 
     31 PREV_VERSIONS := OPR1 OPD1 OPD2 OPM1 OPM2 PPR1 PPD1 PPD2 PPM1 PPM2 QPR1
     32 ALL_VERSIONS := Q R S T U V W X Y Z
     33 ALL_VERSIONS := $(PREV_VERSIONS) $(foreach v,$(ALL_VERSIONS),$(call version-list,$(v)))
     34 PREV_VERSIONS :=
     35 
     36 # Filters ALL_VERSIONS down to the range [$1, $2], and errors if $1 > $2 or $3 is
     37 # not in [$1, $2]
     38 # $(1): min platform version
     39 # $(2): max platform version
     40 # $(3): default platform version
     41 define allowed-platform-versions
     42 $(strip \
     43   $(if $(filter $(ALL_VERSIONS),$(1)),,
     44     $(error Invalid MIN_PLATFORM_VERSION '$(1)'))
     45   $(if $(filter $(ALL_VERSIONS),$(2)),,
     46     $(error Invalid MAX_PLATFORM_VERSION '$(2)'))
     47   $(if $(filter $(ALL_VERSIONS),$(3)),,
     48     $(error Invalid DEFAULT_PLATFORM_VERSION '$(3)'))
     49 
     50   $(eval allowed_versions_ := $(call find_and_earlier,$(ALL_VERSIONS),$(2)))
     51 
     52   $(if $(filter $(allowed_versions_),$(1)),,
     53     $(error MIN_PLATFORM_VERSION '$(1)' must be before MAX_PLATFORM_VERSION '$(2)'))
     54 
     55   $(eval allowed_versions_ := $(1) \
     56     $(filter-out $(call find_and_earlier,$(allowed_versions_),$(1)),$(allowed_versions_)))
     57 
     58   $(if $(filter $(allowed_versions_),$(3)),,
     59     $(error DEFAULT_PLATFORM_VERSION '$(3)' must be between MIN_PLATFORM_VERSION '$(1)' and MAX_PLATFORM_VERSION '$(2)'))
     60 
     61   $(allowed_versions_))
     62 endef
     63 
     64 #$(warning $(call allowed-platform-versions,OPR1,PPR1,OPR1))
     65 #$(warning $(call allowed-platform-versions,OPM1,PPR1,OPR1))
     66 
     67 # Set up version information.
     68 include $(BUILD_SYSTEM)/version_defaults.mk
     69 
     70 ENABLED_VERSIONS := $(call find_and_earlier,$(ALL_VERSIONS),$(TARGET_PLATFORM_VERSION))
     71 
     72 $(foreach v,$(ENABLED_VERSIONS), \
     73   $(eval IS_AT_LEAST_$(v) := true))
     74 
     75 # ---------------------------------------------------------------
     76 # If you update the build system such that the environment setup
     77 # or buildspec.mk need to be updated, increment this number, and
     78 # people who haven't re-run those will have to do so before they
     79 # can build.  Make sure to also update the corresponding value in
     80 # buildspec.mk.default and envsetup.sh.
     81 CORRECT_BUILD_ENV_SEQUENCE_NUMBER := 13
     82 
     83 # ---------------------------------------------------------------
     84 # The product defaults to generic on hardware
     85 # NOTE: This will be overridden in product_config.mk if make
     86 # was invoked with a PRODUCT-xxx-yyy goal.
     87 ifeq ($(TARGET_PRODUCT),)
     88 TARGET_PRODUCT := aosp_arm
     89 endif
     90 
     91 
     92 # the variant -- the set of files that are included for a build
     93 ifeq ($(strip $(TARGET_BUILD_VARIANT)),)
     94 TARGET_BUILD_VARIANT := eng
     95 endif
     96 
     97 # ---------------------------------------------------------------
     98 # Set up configuration for host machine.  We don't do cross-
     99 # compiles except for arm/mips, so the HOST is whatever we are
    100 # running on
    101 
    102 # HOST_OS
    103 ifneq (,$(findstring Linux,$(UNAME)))
    104   HOST_OS := linux
    105 endif
    106 ifneq (,$(findstring Darwin,$(UNAME)))
    107   HOST_OS := darwin
    108 endif
    109 ifneq (,$(findstring Macintosh,$(UNAME)))
    110   HOST_OS := darwin
    111 endif
    112 
    113 HOST_OS_EXTRA := $(shell uname -rsm)
    114 ifeq ($(HOST_OS),linux)
    115   ifneq ($(wildcard /etc/os-release),)
    116     HOST_OS_EXTRA += $(shell source /etc/os-release; echo $$PRETTY_NAME)
    117   endif
    118 else ifeq ($(HOST_OS),darwin)
    119   HOST_OS_EXTRA += $(shell sw_vers -productVersion)
    120 endif
    121 HOST_OS_EXTRA := $(subst $(space),-,$(HOST_OS_EXTRA))
    122 
    123 # BUILD_OS is the real host doing the build.
    124 BUILD_OS := $(HOST_OS)
    125 
    126 HOST_CROSS_OS :=
    127 # We can cross-build Windows binaries on Linux
    128 ifeq ($(HOST_OS),linux)
    129 ifeq ($(BUILD_HOST_static),)
    130 HOST_CROSS_OS := windows
    131 HOST_CROSS_ARCH := x86
    132 HOST_CROSS_2ND_ARCH := x86_64
    133 2ND_HOST_CROSS_IS_64_BIT := true
    134 endif
    135 endif
    136 
    137 ifeq ($(HOST_OS),)
    138 $(error Unable to determine HOST_OS from uname -sm: $(UNAME)!)
    139 endif
    140 
    141 # HOST_ARCH
    142 ifneq (,$(findstring x86_64,$(UNAME)))
    143   HOST_ARCH := x86_64
    144   HOST_2ND_ARCH := x86
    145   HOST_IS_64_BIT := true
    146 else
    147 ifneq (,$(findstring i686,$(UNAME))$(findstring x86,$(UNAME)))
    148 $(error Building on a 32-bit x86 host is not supported: $(UNAME)!)
    149 endif
    150 endif
    151 
    152 ifeq ($(HOST_OS),darwin)
    153   # Mac no longer supports 32-bit executables
    154   HOST_2ND_ARCH :=
    155 endif
    156 
    157 HOST_2ND_ARCH_VAR_PREFIX := 2ND_
    158 HOST_2ND_ARCH_MODULE_SUFFIX := _32
    159 HOST_CROSS_2ND_ARCH_VAR_PREFIX := 2ND_
    160 HOST_CROSS_2ND_ARCH_MODULE_SUFFIX := _64
    161 TARGET_2ND_ARCH_VAR_PREFIX := 2ND_
    162 .KATI_READONLY := \
    163   HOST_ARCH \
    164   HOST_2ND_ARCH \
    165   HOST_IS_64_BIT \
    166   HOST_2ND_ARCH_VAR_PREFIX \
    167   HOST_2ND_ARCH_MODULE_SUFFIX \
    168   HOST_CROSS_2ND_ARCH_VAR_PREFIX \
    169   HOST_CROSS_2ND_ARCH_MODULE_SUFFIX \
    170   TARGET_2ND_ARCH_VAR_PREFIX \
    171 
    172 combo_target := HOST_
    173 combo_2nd_arch_prefix :=
    174 include $(BUILD_COMBOS)/select.mk
    175 
    176 ifdef HOST_2ND_ARCH
    177   combo_2nd_arch_prefix := $(HOST_2ND_ARCH_VAR_PREFIX)
    178   include $(BUILD_SYSTEM)/combo/select.mk
    179 endif
    180 
    181 # Load the windows cross compiler under Linux
    182 ifdef HOST_CROSS_OS
    183   combo_target := HOST_CROSS_
    184   combo_2nd_arch_prefix :=
    185   include $(BUILD_SYSTEM)/combo/select.mk
    186 
    187   ifdef HOST_CROSS_2ND_ARCH
    188     combo_2nd_arch_prefix := $(HOST_CROSS_2ND_ARCH_VAR_PREFIX)
    189     include $(BUILD_SYSTEM)/combo/select.mk
    190   endif
    191 endif
    192 
    193 # on windows, the tools have .exe at the end, and we depend on the
    194 # host config stuff being done first
    195 
    196 BUILD_ARCH := $(HOST_ARCH)
    197 BUILD_2ND_ARCH := $(HOST_2ND_ARCH)
    198 
    199 ifeq ($(HOST_ARCH),)
    200 $(error Unable to determine HOST_ARCH from uname -sm: $(UNAME)!)
    201 endif
    202 
    203 # the host build defaults to release, and it must be release or debug
    204 ifeq ($(HOST_BUILD_TYPE),)
    205 HOST_BUILD_TYPE := release
    206 endif
    207 
    208 ifneq ($(HOST_BUILD_TYPE),release)
    209 ifneq ($(HOST_BUILD_TYPE),debug)
    210 $(error HOST_BUILD_TYPE must be either release or debug, not '$(HOST_BUILD_TYPE)')
    211 endif
    212 endif
    213 
    214 # We don't want to move all the prebuilt host tools to a $(HOST_OS)-x86_64 dir.
    215 HOST_PREBUILT_ARCH := x86
    216 # This is the standard way to name a directory containing prebuilt host
    217 # objects. E.g., prebuilt/$(HOST_PREBUILT_TAG)/cc
    218 HOST_PREBUILT_TAG := $(BUILD_OS)-$(HOST_PREBUILT_ARCH)
    219 
    220 # TARGET_COPY_OUT_* are all relative to the staging directory, ie PRODUCT_OUT.
    221 # Define them here so they can be used in product config files.
    222 TARGET_COPY_OUT_SYSTEM := system
    223 TARGET_COPY_OUT_SYSTEM_OTHER := system_other
    224 TARGET_COPY_OUT_DATA := data
    225 TARGET_COPY_OUT_ASAN := $(TARGET_COPY_OUT_DATA)/asan
    226 TARGET_COPY_OUT_OEM := oem
    227 TARGET_COPY_OUT_RAMDISK := ramdisk
    228 TARGET_COPY_OUT_DEBUG_RAMDISK := debug_ramdisk
    229 TARGET_COPY_OUT_ROOT := root
    230 TARGET_COPY_OUT_RECOVERY := recovery
    231 # The directory used for optional partitions depend on the BoardConfig, so
    232 # they're defined to placeholder values here and swapped after reading the
    233 # BoardConfig, to be either the partition dir, or a subdir within 'system'.
    234 _vendor_path_placeholder := ||VENDOR-PATH-PH||
    235 _product_path_placeholder := ||PRODUCT-PATH-PH||
    236 _product_services_path_placeholder := ||PRODUCT_SERVICES-PATH-PH||
    237 _odm_path_placeholder := ||ODM-PATH-PH||
    238 TARGET_COPY_OUT_VENDOR := $(_vendor_path_placeholder)
    239 TARGET_COPY_OUT_PRODUCT := $(_product_path_placeholder)
    240 TARGET_COPY_OUT_PRODUCT_SERVICES := $(_product_services_path_placeholder)
    241 TARGET_COPY_OUT_ODM := $(_odm_path_placeholder)
    242 
    243 # Returns the non-sanitized version of the path provided in $1.
    244 define get_non_asan_path
    245 $(patsubst $(PRODUCT_OUT)/$(TARGET_COPY_OUT_ASAN)/%,$(PRODUCT_OUT)/%,$1)
    246 endef
    247 
    248 #################################################################
    249 # Set up minimal BOOTCLASSPATH list of jars to build/execute
    250 # java code with dalvikvm/art.
    251 # Jars present in the runtime apex. These should match exactly the list of
    252 # Java libraries in the runtime apex build rule.
    253 RUNTIME_APEX_JARS := core-oj core-libart okhttp bouncycastle apache-xml
    254 TARGET_CORE_JARS := $(RUNTIME_APEX_JARS) conscrypt
    255 ifeq ($(EMMA_INSTRUMENT),true)
    256   ifneq ($(EMMA_INSTRUMENT_STATIC),true)
    257     # For instrumented build, if Jacoco is not being included statically
    258     # in instrumented packages then include Jacoco classes into the
    259     # bootclasspath.
    260     TARGET_CORE_JARS += jacocoagent
    261   endif # EMMA_INSTRUMENT_STATIC
    262 endif # EMMA_INSTRUMENT
    263 HOST_CORE_JARS := $(addsuffix -hostdex,$(TARGET_CORE_JARS))
    264 #################################################################
    265 
    266 # Read the product specs so we can get TARGET_DEVICE and other
    267 # variables that we need in order to locate the output files.
    268 include $(BUILD_SYSTEM)/product_config.mk
    269 
    270 build_variant := $(filter-out eng user userdebug,$(TARGET_BUILD_VARIANT))
    271 ifneq ($(build_variant)-$(words $(TARGET_BUILD_VARIANT)),-1)
    272 $(warning bad TARGET_BUILD_VARIANT: $(TARGET_BUILD_VARIANT))
    273 $(error must be empty or one of: eng user userdebug)
    274 endif
    275 
    276 SDK_HOST_ARCH := x86
    277 TARGET_OS := linux
    278 
    279 include $(BUILD_SYSTEM)/board_config.mk
    280 
    281 # the target build type defaults to release
    282 ifneq ($(TARGET_BUILD_TYPE),debug)
    283 TARGET_BUILD_TYPE := release
    284 endif
    285 
    286 # ---------------------------------------------------------------
    287 # figure out the output directories
    288 
    289 SOONG_OUT_DIR := $(OUT_DIR)/soong
    290 
    291 TARGET_OUT_ROOT := $(OUT_DIR)/target
    292 
    293 HOST_OUT_ROOT := $(OUT_DIR)/host
    294 
    295 .KATI_READONLY := SOONG_OUT_DIR TARGET_OUT_ROOT HOST_OUT_ROOT
    296 
    297 # We want to avoid two host bin directories in multilib build.
    298 HOST_OUT := $(HOST_OUT_ROOT)/$(HOST_OS)-$(HOST_PREBUILT_ARCH)
    299 SOONG_HOST_OUT := $(SOONG_OUT_DIR)/host/$(HOST_OS)-$(HOST_PREBUILT_ARCH)
    300 
    301 HOST_CROSS_OUT := $(HOST_OUT_ROOT)/windows-$(HOST_PREBUILT_ARCH)
    302 
    303 .KATI_READONLY := HOST_OUT SOONG_HOST_OUT HOST_CROSS_OUT
    304 
    305 TARGET_PRODUCT_OUT_ROOT := $(TARGET_OUT_ROOT)/product
    306 
    307 TARGET_COMMON_OUT_ROOT := $(TARGET_OUT_ROOT)/common
    308 HOST_COMMON_OUT_ROOT := $(HOST_OUT_ROOT)/common
    309 
    310 PRODUCT_OUT := $(TARGET_PRODUCT_OUT_ROOT)/$(TARGET_DEVICE)
    311 
    312 .KATI_READONLY := TARGET_PRODUCT_OUT_ROOT TARGET_COMMON_OUT_ROOT HOST_COMMON_OUT_ROOT PRODUCT_OUT
    313 
    314 OUT_DOCS := $(TARGET_COMMON_OUT_ROOT)/docs
    315 OUT_NDK_DOCS := $(TARGET_COMMON_OUT_ROOT)/ndk-docs
    316 .KATI_READONLY := OUT_DOCS OUT_NDK_DOCS
    317 
    318 $(call KATI_obsolete,BUILD_OUT,Use HOST_OUT instead)
    319 
    320 BUILD_OUT_EXECUTABLES := $(HOST_OUT)/bin
    321 SOONG_HOST_OUT_EXECUTABLES := $(SOONG_HOST_OUT)/bin
    322 .KATI_READONLY := BUILD_OUT_EXECUTABLES SOONG_HOST_OUT_EXECUTABLES
    323 
    324 HOST_OUT_EXECUTABLES := $(HOST_OUT)/bin
    325 HOST_OUT_SHARED_LIBRARIES := $(HOST_OUT)/lib64
    326 HOST_OUT_RENDERSCRIPT_BITCODE := $(HOST_OUT_SHARED_LIBRARIES)
    327 HOST_OUT_JAVA_LIBRARIES := $(HOST_OUT)/framework
    328 HOST_OUT_SDK_ADDON := $(HOST_OUT)/sdk_addon
    329 HOST_OUT_NATIVE_TESTS := $(HOST_OUT)/nativetest64
    330 HOST_OUT_COVERAGE := $(HOST_OUT)/coverage
    331 HOST_OUT_TESTCASES := $(HOST_OUT)/testcases
    332 .KATI_READONLY := \
    333   HOST_OUT_EXECUTABLES \
    334   HOST_OUT_SHARED_LIBRARIES \
    335   HOST_OUT_RENDERSCRIPT_BITCODE \
    336   HOST_OUT_JAVA_LIBRARIES \
    337   HOST_OUT_SDK_ADDON \
    338   HOST_OUT_NATIVE_TESTS \
    339   HOST_OUT_COVERAGE \
    340   HOST_OUT_TESTCASES
    341 
    342 HOST_CROSS_OUT_EXECUTABLES := $(HOST_CROSS_OUT)/bin
    343 HOST_CROSS_OUT_SHARED_LIBRARIES := $(HOST_CROSS_OUT)/lib
    344 HOST_CROSS_OUT_NATIVE_TESTS := $(HOST_CROSS_OUT)/nativetest
    345 HOST_CROSS_OUT_COVERAGE := $(HOST_CROSS_OUT)/coverage
    346 HOST_CROSS_OUT_TESTCASES := $(HOST_CROSS_OUT)/testcases
    347 .KATI_READONLY := \
    348   HOST_CROSS_OUT_EXECUTABLES \
    349   HOST_CROSS_OUT_SHARED_LIBRARIES \
    350   HOST_CROSS_OUT_NATIVE_TESTS \
    351   HOST_CROSS_OUT_COVERAGE \
    352   HOST_CROSS_OUT_TESTCASES
    353 
    354 HOST_OUT_INTERMEDIATES := $(HOST_OUT)/obj
    355 HOST_OUT_NOTICE_FILES := $(HOST_OUT_INTERMEDIATES)/NOTICE_FILES
    356 HOST_OUT_COMMON_INTERMEDIATES := $(HOST_COMMON_OUT_ROOT)/obj
    357 HOST_OUT_FAKE := $(HOST_OUT)/fake_packages
    358 .KATI_READONLY := \
    359   HOST_OUT_INTERMEDIATES \
    360   HOST_OUT_NOTICE_FILES \
    361   HOST_OUT_COMMON_INTERMEDIATES \
    362   HOST_OUT_FAKE
    363 
    364 # Nano environment config
    365 include $(BUILD_SYSTEM)/aux_config.mk
    366 
    367 HOST_CROSS_OUT_INTERMEDIATES := $(HOST_CROSS_OUT)/obj
    368 HOST_CROSS_OUT_NOTICE_FILES := $(HOST_CROSS_OUT_INTERMEDIATES)/NOTICE_FILES
    369 .KATI_READONLY := \
    370   HOST_CROSS_OUT_INTERMEDIATES \
    371   HOST_CROSS_OUT_NOTICE_FILES
    372 
    373 HOST_OUT_GEN := $(HOST_OUT)/gen
    374 HOST_OUT_COMMON_GEN := $(HOST_COMMON_OUT_ROOT)/gen
    375 .KATI_READONLY := \
    376   HOST_OUT_GEN \
    377   HOST_OUT_COMMON_GEN
    378 
    379 HOST_CROSS_OUT_GEN := $(HOST_CROSS_OUT)/gen
    380 .KATI_READONLY := HOST_CROSS_OUT_GEN
    381 
    382 HOST_OUT_TEST_CONFIG := $(HOST_OUT)/test_config
    383 .KATI_READONLY := HOST_OUT_TEST_CONFIG
    384 
    385 # Out for HOST_2ND_ARCH
    386 $(HOST_2ND_ARCH_VAR_PREFIX)HOST_OUT_INTERMEDIATES := $(HOST_OUT)/obj32
    387 $(HOST_2ND_ARCH_VAR_PREFIX)HOST_OUT_SHARED_LIBRARIES := $(HOST_OUT)/lib
    388 $(HOST_2ND_ARCH_VAR_PREFIX)HOST_OUT_EXECUTABLES := $(HOST_OUT_EXECUTABLES)
    389 $(HOST_2ND_ARCH_VAR_PREFIX)HOST_OUT_JAVA_LIBRARIES := $(HOST_OUT_JAVA_LIBRARIES)
    390 $(HOST_2ND_ARCH_VAR_PREFIX)HOST_OUT_NATIVE_TESTS := $(HOST_OUT)/nativetest
    391 $(HOST_2ND_ARCH_VAR_PREFIX)HOST_OUT_TESTCASES := $(HOST_OUT_TESTCASES)
    392 .KATI_READONLY := \
    393   $(HOST_2ND_ARCH_VAR_PREFIX)HOST_OUT_INTERMEDIATES \
    394   $(HOST_2ND_ARCH_VAR_PREFIX)HOST_OUT_SHARED_LIBRARIES \
    395   $(HOST_2ND_ARCH_VAR_PREFIX)HOST_OUT_EXECUTABLES \
    396   $(HOST_2ND_ARCH_VAR_PREFIX)HOST_OUT_JAVA_LIBRARIES \
    397   $(HOST_2ND_ARCH_VAR_PREFIX)HOST_OUT_NATIVE_TESTS \
    398   $(HOST_2ND_ARCH_VAR_PREFIX)HOST_OUT_TESTCASES
    399 
    400 # The default host library path.
    401 # It always points to the path where we build libraries in the default bitness.
    402 HOST_LIBRARY_PATH := $(HOST_OUT_SHARED_LIBRARIES)
    403 .KATI_READONLY := HOST_LIBRARY_PATH
    404 
    405 # Out for HOST_CROSS_2ND_ARCH
    406 $(HOST_CROSS_2ND_ARCH_VAR_PREFIX)HOST_CROSS_OUT_INTERMEDIATES := $(HOST_CROSS_OUT)/obj64
    407 $(HOST_CROSS_2ND_ARCH_VAR_PREFIX)HOST_CROSS_OUT_SHARED_LIBRARIES := $(HOST_CROSS_OUT)/lib64
    408 $(HOST_CROSS_2ND_ARCH_VAR_PREFIX)HOST_CROSS_OUT_EXECUTABLES := $(HOST_CROSS_OUT_EXECUTABLES)
    409 $(HOST_CROSS_2ND_ARCH_VAR_PREFIX)HOST_CROSS_OUT_NATIVE_TESTS := $(HOST_CROSS_OUT)/nativetest64
    410 .KATI_READONLY := \
    411   $(HOST_CROSS_2ND_ARCH_VAR_PREFIX)HOST_CROSS_OUT_INTERMEDIATES \
    412   $(HOST_CROSS_2ND_ARCH_VAR_PREFIX)HOST_CROSS_OUT_SHARED_LIBRARIES \
    413   $(HOST_CROSS_2ND_ARCH_VAR_PREFIX)HOST_CROSS_OUT_EXECUTABLES \
    414   $(HOST_CROSS_2ND_ARCH_VAR_PREFIX)HOST_CROSS_OUT_NATIVE_TESTS
    415 
    416 ifneq ($(filter address,$(SANITIZE_TARGET)),)
    417   TARGET_OUT_INTERMEDIATES := $(PRODUCT_OUT)/obj_asan
    418 else
    419   TARGET_OUT_INTERMEDIATES := $(PRODUCT_OUT)/obj
    420 endif
    421 TARGET_OUT_HEADERS := $(TARGET_OUT_INTERMEDIATES)/include
    422 .KATI_READONLY := TARGET_OUT_INTERMEDIATES TARGET_OUT_HEADERS
    423 
    424 ifneq ($(filter address,$(SANITIZE_TARGET)),)
    425   TARGET_OUT_COMMON_INTERMEDIATES := $(TARGET_COMMON_OUT_ROOT)/obj_asan
    426 else
    427   TARGET_OUT_COMMON_INTERMEDIATES := $(TARGET_COMMON_OUT_ROOT)/obj
    428 endif
    429 .KATI_READONLY := TARGET_OUT_COMMON_INTERMEDIATES
    430 
    431 TARGET_OUT_GEN := $(PRODUCT_OUT)/gen
    432 TARGET_OUT_COMMON_GEN := $(TARGET_COMMON_OUT_ROOT)/gen
    433 .KATI_READONLY := TARGET_OUT_GEN TARGET_OUT_COMMON_GEN
    434 
    435 TARGET_OUT := $(PRODUCT_OUT)/$(TARGET_COPY_OUT_SYSTEM)
    436 .KATI_READONLY := TARGET_OUT
    437 ifneq ($(filter address,$(SANITIZE_TARGET)),)
    438 target_out_shared_libraries_base := $(PRODUCT_OUT)/$(TARGET_COPY_OUT_ASAN)/system
    439 ifeq ($(SANITIZE_LITE),true)
    440 # When using SANITIZE_LITE, APKs must not be packaged with sanitized libraries, as they will not
    441 # work with unsanitized app_process. For simplicity, generate APKs into /data/asan/.
    442 target_out_app_base := $(PRODUCT_OUT)/$(TARGET_COPY_OUT_ASAN)/system
    443 else
    444 target_out_app_base := $(TARGET_OUT)
    445 endif
    446 else
    447 target_out_shared_libraries_base := $(TARGET_OUT)
    448 target_out_app_base := $(TARGET_OUT)
    449 endif
    450 
    451 TARGET_OUT_EXECUTABLES := $(TARGET_OUT)/bin
    452 TARGET_OUT_OPTIONAL_EXECUTABLES := $(TARGET_OUT)/xbin
    453 ifeq ($(TARGET_IS_64_BIT),true)
    454 # /system/lib always contains 32-bit libraries,
    455 # and /system/lib64 (if present) always contains 64-bit libraries.
    456 TARGET_OUT_SHARED_LIBRARIES := $(target_out_shared_libraries_base)/lib64
    457 else
    458 TARGET_OUT_SHARED_LIBRARIES := $(target_out_shared_libraries_base)/lib
    459 endif
    460 TARGET_OUT_RENDERSCRIPT_BITCODE := $(TARGET_OUT_SHARED_LIBRARIES)
    461 TARGET_OUT_JAVA_LIBRARIES := $(TARGET_OUT)/framework
    462 TARGET_OUT_APPS := $(target_out_app_base)/app
    463 TARGET_OUT_APPS_PRIVILEGED := $(target_out_app_base)/priv-app
    464 TARGET_OUT_KEYLAYOUT := $(TARGET_OUT)/usr/keylayout
    465 TARGET_OUT_KEYCHARS := $(TARGET_OUT)/usr/keychars
    466 TARGET_OUT_ETC := $(TARGET_OUT)/etc
    467 TARGET_OUT_NOTICE_FILES := $(TARGET_OUT_INTERMEDIATES)/NOTICE_FILES
    468 TARGET_OUT_FAKE := $(PRODUCT_OUT)/fake_packages
    469 TARGET_OUT_TESTCASES := $(PRODUCT_OUT)/testcases
    470 TARGET_OUT_TEST_CONFIG := $(PRODUCT_OUT)/test_config
    471 .KATI_READONLY := \
    472   TARGET_OUT_EXECUTABLES \
    473   TARGET_OUT_OPTIONAL_EXECUTABLES \
    474   TARGET_OUT_SHARED_LIBRARIES \
    475   TARGET_OUT_RENDERSCRIPT_BITCODE \
    476   TARGET_OUT_JAVA_LIBRARIES \
    477   TARGET_OUT_APPS \
    478   TARGET_OUT_APPS_PRIVILEGED \
    479   TARGET_OUT_KEYLAYOUT \
    480   TARGET_OUT_KEYCHARS \
    481   TARGET_OUT_ETC \
    482   TARGET_OUT_NOTICE_FILES \
    483   TARGET_OUT_FAKE \
    484   TARGET_OUT_TESTCASES \
    485   TARGET_OUT_TEST_CONFIG
    486 
    487 ifeq ($(SANITIZE_LITE),true)
    488 # When using SANITIZE_LITE, APKs must not be packaged with sanitized libraries, as they will not
    489 # work with unsanitized app_process. For simplicity, generate APKs into /data/asan/.
    490 TARGET_OUT_SYSTEM_OTHER := $(PRODUCT_OUT)/$(TARGET_COPY_OUT_ASAN)/$(TARGET_COPY_OUT_SYSTEM_OTHER)
    491 else
    492 TARGET_OUT_SYSTEM_OTHER := $(PRODUCT_OUT)/$(TARGET_COPY_OUT_SYSTEM_OTHER)
    493 endif
    494 .KATI_READONLY := TARGET_OUT_SYSTEM_OTHER
    495 
    496 # Out for TARGET_2ND_ARCH
    497 ifeq ($(TARGET_TRANSLATE_2ND_ARCH),true)
    498 # With this you can reference the arm binary translation library with libfoo_arm in PRODUCT_PACKAGES.
    499 TARGET_2ND_ARCH_MODULE_SUFFIX := _$(TARGET_2ND_ARCH)
    500 else
    501 TARGET_2ND_ARCH_MODULE_SUFFIX := $(HOST_2ND_ARCH_MODULE_SUFFIX)
    502 endif
    503 .KATI_READONLY := TARGET_2ND_ARCH_MODULE_SUFFIX
    504 
    505 ifneq ($(filter address,$(SANITIZE_TARGET)),)
    506   $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_INTERMEDIATES := $(PRODUCT_OUT)/obj_$(TARGET_2ND_ARCH)_asan
    507 else
    508   $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_INTERMEDIATES := $(PRODUCT_OUT)/obj_$(TARGET_2ND_ARCH)
    509 endif
    510 ifeq ($(TARGET_TRANSLATE_2ND_ARCH),true)
    511 $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_SHARED_LIBRARIES := $(target_out_shared_libraries_base)/lib/$(TARGET_2ND_ARCH)
    512 else
    513 $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_SHARED_LIBRARIES := $(target_out_shared_libraries_base)/lib
    514 endif
    515 $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_RENDERSCRIPT_BITCODE := $($(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_SHARED_LIBRARIES)
    516 $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_EXECUTABLES := $(TARGET_OUT_EXECUTABLES)
    517 $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_APPS := $(TARGET_OUT_APPS)
    518 $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_APPS_PRIVILEGED := $(TARGET_OUT_APPS_PRIVILEGED)
    519 $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_TESTCASES := $(TARGET_OUT_TESTCASES)
    520 .KATI_READONLY := \
    521   $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_INTERMEDIATES \
    522   $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_SHARED_LIBRARIES \
    523   $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_RENDERSCRIPT_BITCODE \
    524   $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_EXECUTABLES \
    525   $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_APPS \
    526   $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_APPS_PRIVILEGED \
    527   $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_TESTCASES
    528 
    529 MODULE_CLASS_APPS := app
    530 MODULE_CLASS_EXECUTABLES := bin
    531 MODULE_CLASS_JAVA_LIBRARIES := framework
    532 MODULE_CLASS_NATIVE_TESTS := nativetest
    533 MODULE_CLASS_METRIC_TESTS := benchmarktest
    534 TARGET_OUT_DATA := $(PRODUCT_OUT)/$(TARGET_COPY_OUT_DATA)
    535 TARGET_OUT_DATA_EXECUTABLES := $(TARGET_OUT_EXECUTABLES)
    536 TARGET_OUT_DATA_SHARED_LIBRARIES := $(TARGET_OUT_SHARED_LIBRARIES)
    537 TARGET_OUT_DATA_JAVA_LIBRARIES := $(TARGET_OUT_DATA)/framework
    538 TARGET_OUT_DATA_APPS := $(TARGET_OUT_DATA)/app
    539 TARGET_OUT_DATA_KEYLAYOUT := $(TARGET_OUT_KEYLAYOUT)
    540 TARGET_OUT_DATA_KEYCHARS := $(TARGET_OUT_KEYCHARS)
    541 TARGET_OUT_DATA_ETC := $(TARGET_OUT_ETC)
    542 ifeq ($(TARGET_IS_64_BIT),true)
    543 TARGET_OUT_DATA_NATIVE_TESTS := $(TARGET_OUT_DATA)/nativetest64
    544 TARGET_OUT_DATA_METRIC_TESTS := $(TARGET_OUT_DATA)/benchmarktest64
    545 TARGET_OUT_VENDOR_NATIVE_TESTS := $(TARGET_OUT_DATA)/nativetest64$(TARGET_VENDOR_TEST_SUFFIX)
    546 TARGET_OUT_VENDOR_METRIC_TESTS := $(TARGET_OUT_DATA)/benchmarktest64$(TARGET_VENDOR_TEST_SUFFIX)
    547 else
    548 TARGET_OUT_DATA_NATIVE_TESTS := $(TARGET_OUT_DATA)/nativetest
    549 TARGET_OUT_DATA_METRIC_TESTS := $(TARGET_OUT_DATA)/benchmarktest
    550 TARGET_OUT_VENDOR_NATIVE_TESTS := $(TARGET_OUT_DATA)/nativetest$(TARGET_VENDOR_TEST_SUFFIX)
    551 TARGET_OUT_VENDOR_METRIC_TESTS := $(TARGET_OUT_DATA)/benchmarktest$(TARGET_VENDOR_TEST_SUFFIX)
    552 endif
    553 MODULE_CLASS_FAKE := fake_packages
    554 TARGET_OUT_DATA_FAKE := $(TARGET_OUT_DATA)/fake_packages
    555 .KATI_READONLY := \
    556   TARGET_OUT_DATA \
    557   TARGET_OUT_DATA_EXECUTABLES \
    558   TARGET_OUT_DATA_SHARED_LIBRARIES \
    559   TARGET_OUT_DATA_JAVA_LIBRARIES \
    560   TARGET_OUT_DATA_APPS \
    561   TARGET_OUT_DATA_KEYLAYOUT \
    562   TARGET_OUT_DATA_KEYCHARS \
    563   TARGET_OUT_DATA_ETC \
    564   TARGET_OUT_DATA_NATIVE_TESTS \
    565   TARGET_OUT_DATA_METRIC_TESTS \
    566   TARGET_OUT_VENDOR_NATIVE_TESTS \
    567   TARGET_OUT_VENDOR_METRIC_TESTS \
    568   TARGET_OUT_DATA_FAKE \
    569   MODULE_CLASS_APPS \
    570   MODULE_CLASS_EXECUTABLES \
    571   MODULE_CLASS_JAVA_LIBRARIES \
    572   MODULE_CLASS_NATIVE_TESTS \
    573   MODULE_CLASS_METRIC_TESTS \
    574   MODULE_CLASS_FAKE
    575 
    576 $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_DATA_EXECUTABLES := $(TARGET_OUT_DATA_EXECUTABLES)
    577 $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_DATA_SHARED_LIBRARIES := $($(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_SHARED_LIBRARIES)
    578 $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_DATA_APPS := $(TARGET_OUT_DATA_APPS)
    579 ifeq ($(TARGET_TRANSLATE_2ND_ARCH),true)
    580 $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_DATA_NATIVE_TESTS := $(TARGET_OUT_DATA)/nativetest/$(TARGET_2ND_ARCH)
    581 $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_DATA_METRIC_TESTS := $(TARGET_OUT_DATA)/benchmarktest/$(TARGET_2ND_ARCH)
    582 $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_VENDOR_NATIVE_TESTS := $(TARGET_OUT_DATA)/nativetest/$(TARGET_2ND_ARCH)$(TARGET_VENDOR_TEST_SUFFIX)
    583 $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_VENDOR_METRIC_TESTS := $(TARGET_OUT_DATA)/benchmarktest/$(TARGET_2ND_ARCH)$(TARGET_VENDOR_TEST_SUFFIX)
    584 else
    585 $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_DATA_NATIVE_TESTS := $(TARGET_OUT_DATA)/nativetest
    586 $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_DATA_METRIC_TESTS := $(TARGET_OUT_DATA)/benchmarktest
    587 $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_VENDOR_NATIVE_TESTS := $(TARGET_OUT_DATA)/nativetest$(TARGET_VENDOR_TEST_SUFFIX)
    588 $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_VENDOR_METRIC_TESTS := $(TARGET_OUT_DATA)/benchmarktest$(TARGET_VENDOR_TEST_SUFFIX)
    589 endif
    590 .KATI_READONLY := \
    591   $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_DATA_EXECUTABLES \
    592   $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_DATA_SHARED_LIBRARIES \
    593   $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_DATA_APPS \
    594   $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_DATA_NATIVE_TESTS \
    595   $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_DATA_METRIC_TESTS \
    596   $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_VENDOR_NATIVE_TESTS \
    597   $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_VENDOR_METRIC_TESTS \
    598 
    599 TARGET_OUT_CACHE := $(PRODUCT_OUT)/cache
    600 .KATI_READONLY := TARGET_OUT_CACHE
    601 
    602 TARGET_OUT_VENDOR := $(PRODUCT_OUT)/$(TARGET_COPY_OUT_VENDOR)
    603 .KATI_READONLY := TARGET_OUT_VENDOR
    604 ifneq ($(filter address,$(SANITIZE_TARGET)),)
    605 target_out_vendor_shared_libraries_base := $(PRODUCT_OUT)/$(TARGET_COPY_OUT_ASAN)/$(TARGET_COPY_OUT_VENDOR)
    606 ifeq ($(SANITIZE_LITE),true)
    607 # When using SANITIZE_LITE, APKs must not be packaged with sanitized libraries, as they will not
    608 # work with unsanitized app_process. For simplicity, generate APKs into /data/asan/.
    609 target_out_vendor_app_base := $(PRODUCT_OUT)/$(TARGET_COPY_OUT_ASAN)/$(TARGET_COPY_OUT_VENDOR)
    610 else
    611 target_out_vendor_app_base := $(TARGET_OUT_VENDOR)
    612 endif
    613 else
    614 target_out_vendor_shared_libraries_base := $(TARGET_OUT_VENDOR)
    615 target_out_vendor_app_base := $(TARGET_OUT_VENDOR)
    616 endif
    617 
    618 TARGET_OUT_VENDOR_EXECUTABLES := $(TARGET_OUT_VENDOR)/bin
    619 TARGET_OUT_VENDOR_OPTIONAL_EXECUTABLES := $(TARGET_OUT_VENDOR)/xbin
    620 ifeq ($(TARGET_IS_64_BIT),true)
    621 TARGET_OUT_VENDOR_SHARED_LIBRARIES := $(target_out_vendor_shared_libraries_base)/lib64
    622 else
    623 TARGET_OUT_VENDOR_SHARED_LIBRARIES := $(target_out_vendor_shared_libraries_base)/lib
    624 endif
    625 TARGET_OUT_VENDOR_RENDERSCRIPT_BITCODE := $(TARGET_OUT_VENDOR_SHARED_LIBRARIES)
    626 TARGET_OUT_VENDOR_JAVA_LIBRARIES := $(TARGET_OUT_VENDOR)/framework
    627 TARGET_OUT_VENDOR_APPS := $(target_out_vendor_app_base)/app
    628 TARGET_OUT_VENDOR_APPS_PRIVILEGED := $(target_out_vendor_app_base)/priv-app
    629 TARGET_OUT_VENDOR_ETC := $(TARGET_OUT_VENDOR)/etc
    630 .KATI_READONLY := \
    631   TARGET_OUT_VENDOR_EXECUTABLES \
    632   TARGET_OUT_VENDOR_OPTIONAL_EXECUTABLES \
    633   TARGET_OUT_VENDOR_SHARED_LIBRARIES \
    634   TARGET_OUT_VENDOR_RENDERSCRIPT_BITCODE \
    635   TARGET_OUT_VENDOR_JAVA_LIBRARIES \
    636   TARGET_OUT_VENDOR_APPS \
    637   TARGET_OUT_VENDOR_APPS_PRIVILEGED \
    638   TARGET_OUT_VENDOR_ETC
    639 
    640 $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_VENDOR_EXECUTABLES := $(TARGET_OUT_VENDOR_EXECUTABLES)
    641 ifeq ($(TARGET_TRANSLATE_2ND_ARCH),true)
    642 $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_VENDOR_SHARED_LIBRARIES := $(target_out_vendor_shared_libraries_base)/lib/$(TARGET_2ND_ARCH)
    643 else
    644 $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_VENDOR_SHARED_LIBRARIES := $(target_out_vendor_shared_libraries_base)/lib
    645 endif
    646 $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_VENDOR_RENDERSCRIPT_BITCODE := $($(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_VENDOR_SHARED_LIBRARIES)
    647 $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_VENDOR_APPS := $(TARGET_OUT_VENDOR_APPS)
    648 $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_VENDOR_APPS_PRIVILEGED := $(TARGET_OUT_VENDOR_APPS_PRIVILEGED)
    649 .KATI_READONLY := \
    650   $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_VENDOR_EXECUTABLES \
    651   $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_VENDOR_SHARED_LIBRARIES \
    652   $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_VENDOR_RENDERSCRIPT_BITCODE \
    653   $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_VENDOR_APPS \
    654   $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_VENDOR_APPS_PRIVILEGED
    655 
    656 TARGET_OUT_OEM := $(PRODUCT_OUT)/$(TARGET_COPY_OUT_OEM)
    657 TARGET_OUT_OEM_EXECUTABLES := $(TARGET_OUT_OEM)/bin
    658 ifeq ($(TARGET_IS_64_BIT),true)
    659 TARGET_OUT_OEM_SHARED_LIBRARIES := $(TARGET_OUT_OEM)/lib64
    660 else
    661 TARGET_OUT_OEM_SHARED_LIBRARIES := $(TARGET_OUT_OEM)/lib
    662 endif
    663 # We don't expect Java libraries in the oem.img.
    664 # TARGET_OUT_OEM_JAVA_LIBRARIES:= $(TARGET_OUT_OEM)/framework
    665 TARGET_OUT_OEM_APPS := $(TARGET_OUT_OEM)/app
    666 TARGET_OUT_OEM_ETC := $(TARGET_OUT_OEM)/etc
    667 .KATI_READONLY := \
    668   TARGET_OUT_OEM \
    669   TARGET_OUT_OEM_EXECUTABLES \
    670   TARGET_OUT_OEM_SHARED_LIBRARIES \
    671   TARGET_OUT_OEM_APPS \
    672   TARGET_OUT_OEM_ETC
    673 
    674 $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_OEM_EXECUTABLES := $(TARGET_OUT_OEM_EXECUTABLES)
    675 ifeq ($(TARGET_TRANSLATE_2ND_ARCH),true)
    676 $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_OEM_SHARED_LIBRARIES := $(TARGET_OUT_OEM)/lib/$(TARGET_2ND_ARCH)
    677 else
    678 $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_OEM_SHARED_LIBRARIES := $(TARGET_OUT_OEM)/lib
    679 endif
    680 $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_OEM_APPS := $(TARGET_OUT_OEM_APPS)
    681 .KATI_READONLY := \
    682   $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_OEM_EXECUTABLES \
    683   $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_OEM_SHARED_LIBRARIES \
    684   $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_OEM_APPS \
    685 
    686 TARGET_OUT_ODM := $(PRODUCT_OUT)/$(TARGET_COPY_OUT_ODM)
    687 ifneq ($(filter address,$(SANITIZE_TARGET)),)
    688 target_out_odm_shared_libraries_base := $(PRODUCT_OUT)/$(TARGET_COPY_OUT_ASAN)/$(TARGET_COPY_OUT_OEM)
    689 ifeq ($(SANITIZE_LITE),true)
    690 # When using SANITIZE_LITE, APKs must not be packaged with sanitized libraries, as they will not
    691 # work with unsanitized app_process. For simplicity, generate APKs into /data/asan/.
    692 target_out_odm_app_base := $(PRODUCT_OUT)/$(TARGET_COPY_OUT_ASAN)/$(TARGET_COPY_OUT_OEM)
    693 else
    694 target_out_odm_app_base := $(TARGET_OUT_ODM)
    695 endif
    696 else
    697 target_out_odm_shared_libraries_base := $(TARGET_OUT_ODM)
    698 target_out_odm_app_base := $(TARGET_OUT_ODM)
    699 endif
    700 
    701 TARGET_OUT_ODM_EXECUTABLES := $(TARGET_OUT_ODM)/bin
    702 TARGET_OUT_ODM_OPTIONAL_EXECUTABLES := $(TARGET_OUT_ODM)/xbin
    703 ifeq ($(TARGET_IS_64_BIT),true)
    704 TARGET_OUT_ODM_SHARED_LIBRARIES := $(target_out_odm_shared_libraries_base)/lib64
    705 else
    706 TARGET_OUT_ODM_SHARED_LIBRARIES := $(target_out_odm_shared_libraries_base)/lib
    707 endif
    708 TARGET_OUT_ODM_RENDERSCRIPT_BITCODE := $(TARGET_OUT_ODM_SHARED_LIBRARIES)
    709 TARGET_OUT_ODM_JAVA_LIBRARIES := $(TARGET_OUT_ODM)/framework
    710 TARGET_OUT_ODM_APPS := $(target_out_odm_app_base)/app
    711 TARGET_OUT_ODM_APPS_PRIVILEGED := $(target_out_odm_app_base)/priv-app
    712 TARGET_OUT_ODM_ETC := $(TARGET_OUT_ODM)/etc
    713 .KATI_READONLY := \
    714   TARGET_OUT_ODM \
    715   TARGET_OUT_ODM_EXECUTABLES \
    716   TARGET_OUT_ODM_OPTIONAL_EXECUTABLES \
    717   TARGET_OUT_ODM_SHARED_LIBRARIES \
    718   TARGET_OUT_ODM_RENDERSCRIPT_BITCODE \
    719   TARGET_OUT_ODM_JAVA_LIBRARIES \
    720   TARGET_OUT_ODM_APPS \
    721   TARGET_OUT_ODM_APPS_PRIVILEGED \
    722   TARGET_OUT_ODM_ETC
    723 
    724 $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_ODM_EXECUTABLES := $(TARGET_OUT_ODM_EXECUTABLES)
    725 ifeq ($(TARGET_TRANSLATE_2ND_ARCH),true)
    726 $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_ODM_SHARED_LIBRARIES := $(target_out_odm_shared_libraries_base)/lib/$(TARGET_2ND_ARCH)
    727 else
    728 $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_ODM_SHARED_LIBRARIES := $(target_out_odm_shared_libraries_base)/lib
    729 endif
    730 $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_ODM_RENDERSCRIPT_BITCODE := $($(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_ODM_SHARED_LIBRARIES)
    731 $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_ODM_APPS := $(TARGET_OUT_ODM_APPS)
    732 $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_ODM_APPS_PRIVILEGED := $(TARGET_OUT_ODM_APPS_PRIVILEGED)
    733 .KATI_READONLY := \
    734   $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_ODM_EXECUTABLES \
    735   $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_ODM_SHARED_LIBRARIES \
    736   $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_ODM_RENDERSCRIPT_BITCODE \
    737   $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_ODM_APPS \
    738   $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_ODM_APPS_PRIVILEGED
    739 
    740 TARGET_OUT_PRODUCT := $(PRODUCT_OUT)/$(TARGET_COPY_OUT_PRODUCT)
    741 TARGET_OUT_PRODUCT_EXECUTABLES := $(TARGET_OUT_PRODUCT)/bin
    742 .KATI_READONLY := TARGET_OUT_PRODUCT
    743 ifneq ($(filter address,$(SANITIZE_TARGET)),)
    744 target_out_product_shared_libraries_base := $(PRODUCT_OUT)/$(TARGET_COPY_OUT_ASAN)/$(TARGET_COPY_OUT_PRODUCT)
    745 ifeq ($(SANITIZE_LITE),true)
    746 # When using SANITIZE_LITE, APKs must not be packaged with sanitized libraries, as they will not
    747 # work with unsanitized app_process. For simplicity, generate APKs into /data/asan/.
    748 target_out_product_app_base := $(PRODUCT_OUT)/$(TARGET_COPY_OUT_ASAN)/$(TARGET_COPY_OUT_PRODUCT)
    749 else
    750 target_out_product_app_base := $(TARGET_OUT_PRODUCT)
    751 endif
    752 else
    753 target_out_product_shared_libraries_base := $(TARGET_OUT_PRODUCT)
    754 target_out_product_app_base := $(TARGET_OUT_PRODUCT)
    755 endif
    756 
    757 ifeq ($(TARGET_IS_64_BIT),true)
    758 TARGET_OUT_PRODUCT_SHARED_LIBRARIES := $(target_out_product_shared_libraries_base)/lib64
    759 else
    760 TARGET_OUT_PRODUCT_SHARED_LIBRARIES := $(target_out_product_shared_libraries_base)/lib
    761 endif
    762 TARGET_OUT_PRODUCT_JAVA_LIBRARIES := $(TARGET_OUT_PRODUCT)/framework
    763 TARGET_OUT_PRODUCT_APPS := $(target_out_product_app_base)/app
    764 TARGET_OUT_PRODUCT_APPS_PRIVILEGED := $(target_out_product_app_base)/priv-app
    765 TARGET_OUT_PRODUCT_ETC := $(TARGET_OUT_PRODUCT)/etc
    766 .KATI_READONLY := \
    767   TARGET_OUT_PRODUCT_EXECUTABLES \
    768   TARGET_OUT_PRODUCT_SHARED_LIBRARIES \
    769   TARGET_OUT_PRODUCT_JAVA_LIBRARIES \
    770   TARGET_OUT_PRODUCT_APPS \
    771   TARGET_OUT_PRODUCT_APPS_PRIVILEGED \
    772   TARGET_OUT_PRODUCT_ETC
    773 
    774 $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_PRODUCT_EXECUTABLES := $(TARGET_OUT_PRODUCT_EXECUTABLES)
    775 ifeq ($(TARGET_TRANSLATE_2ND_ARCH),true)
    776 $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_PRODUCT_SHARED_LIBRARIES := $(target_out_product_shared_libraries_base)/lib/$(TARGET_2ND_ARCH)
    777 else
    778 $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_PRODUCT_SHARED_LIBRARIES := $(target_out_product_shared_libraries_base)/lib
    779 endif
    780 $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_PRODUCT_APPS := $(TARGET_OUT_PRODUCT_APPS)
    781 $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_PRODUCT_APPS_PRIVILEGED := $(TARGET_OUT_PRODUCT_APPS_PRIVILEGED)
    782 .KATI_READONLY := \
    783   $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_PRODUCT_EXECUTABLES \
    784   $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_PRODUCT_SHARED_LIBRARIES \
    785   $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_PRODUCT_APPS \
    786   $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_PRODUCT_APPS_PRIVILEGED
    787 
    788 TARGET_OUT_PRODUCT_SERVICES := $(PRODUCT_OUT)/$(TARGET_COPY_OUT_PRODUCT_SERVICES)
    789 ifneq ($(filter address,$(SANITIZE_TARGET)),)
    790 target_out_product_services_shared_libraries_base := $(PRODUCT_OUT)/$(TARGET_COPY_OUT_ASAN)/$(TARGET_COPY_OUT_PRODUCT_SERVICES)
    791 ifeq ($(SANITIZE_LITE),true)
    792 # When using SANITIZE_LITE, APKs must not be packaged with sanitized libraries, as they will not
    793 # work with unsanitized app_process. For simplicity, generate APKs into /data/asan/.
    794 target_out_product_services_app_base := $(PRODUCT_OUT)/$(TARGET_COPY_OUT_ASAN)/$(TARGET_COPY_OUT_PRODUCT_SERVICES)
    795 else
    796 target_out_product_services_app_base := $(TARGET_OUT_PRODUCT_SERVICES)
    797 endif
    798 else
    799 target_out_product_services_shared_libraries_base := $(TARGET_OUT_PRODUCT_SERVICES)
    800 target_out_product_services_app_base := $(TARGET_OUT_PRODUCT_SERVICES)
    801 endif
    802 
    803 ifeq ($(TARGET_IS_64_BIT),true)
    804 TARGET_OUT_PRODUCT_SERVICES_SHARED_LIBRARIES := $(target_out_product_services_shared_libraries_base)/lib64
    805 else
    806 TARGET_OUT_PRODUCT_SERVICES_SHARED_LIBRARIES := $(target_out_product_services_shared_libraries_base)/lib
    807 endif
    808 TARGET_OUT_PRODUCT_SERVICES_JAVA_LIBRARIES:= $(TARGET_OUT_PRODUCT_SERVICES)/framework
    809 TARGET_OUT_PRODUCT_SERVICES_APPS := $(target_out_product_services_app_base)/app
    810 TARGET_OUT_PRODUCT_SERVICES_APPS_PRIVILEGED := $(target_out_product_services_app_base)/priv-app
    811 TARGET_OUT_PRODUCT_SERVICES_ETC := $(TARGET_OUT_PRODUCT_SERVICES)/etc
    812 
    813 ifeq ($(TARGET_TRANSLATE_2ND_ARCH),true)
    814 $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_PRODUCT_SERVICES_SHARED_LIBRARIES := $(target_out_product_services_shared_libraries_base)/lib/$(TARGET_2ND_ARCH)
    815 else
    816 $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_PRODUCT_SERVICES_SHARED_LIBRARIES := $(target_out_product_services_shared_libraries_base)/lib
    817 endif
    818 $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_PRODUCT_SERVICES_APPS := $(TARGET_OUT_PRODUCT_SERVICES_APPS)
    819 $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_PRODUCT_SERVICES_APPS_PRIVILEGED := $(TARGET_OUT_PRODUCT_SERVICES_APPS_PRIVILEGED)
    820 
    821 TARGET_OUT_BREAKPAD := $(PRODUCT_OUT)/breakpad
    822 .KATI_READONLY := TARGET_OUT_BREAKPAD
    823 
    824 TARGET_OUT_UNSTRIPPED := $(PRODUCT_OUT)/symbols
    825 TARGET_OUT_EXECUTABLES_UNSTRIPPED := $(TARGET_OUT_UNSTRIPPED)/system/bin
    826 TARGET_OUT_SHARED_LIBRARIES_UNSTRIPPED := $(TARGET_OUT_UNSTRIPPED)/system/lib
    827 TARGET_OUT_VENDOR_SHARED_LIBRARIES_UNSTRIPPED := $(TARGET_OUT_UNSTRIPPED)/$(TARGET_COPY_OUT_VENDOR)/lib
    828 TARGET_ROOT_OUT_UNSTRIPPED := $(TARGET_OUT_UNSTRIPPED)
    829 TARGET_ROOT_OUT_SBIN_UNSTRIPPED := $(TARGET_OUT_UNSTRIPPED)/sbin
    830 TARGET_ROOT_OUT_BIN_UNSTRIPPED := $(TARGET_OUT_UNSTRIPPED)/bin
    831 TARGET_OUT_COVERAGE := $(PRODUCT_OUT)/coverage
    832 .KATI_READONLY := \
    833   TARGET_OUT_UNSTRIPPED \
    834   TARGET_OUT_EXECUTABLES_UNSTRIPPED \
    835   TARGET_OUT_SHARED_LIBRARIES_UNSTRIPPED \
    836   TARGET_OUT_VENDOR_SHARED_LIBRARIES_UNSTRIPPED \
    837   TARGET_ROOT_OUT_UNSTRIPPED \
    838   TARGET_ROOT_OUT_SBIN_UNSTRIPPED \
    839   TARGET_ROOT_OUT_BIN_UNSTRIPPED \
    840   TARGET_OUT_COVERAGE
    841 
    842 TARGET_RAMDISK_OUT := $(PRODUCT_OUT)/$(TARGET_COPY_OUT_RAMDISK)
    843 TARGET_RAMDISK_OUT_UNSTRIPPED := $(TARGET_OUT_UNSTRIPPED)
    844 TARGET_DEBUG_RAMDISK_OUT := $(PRODUCT_OUT)/$(TARGET_COPY_OUT_DEBUG_RAMDISK)
    845 
    846 TARGET_ROOT_OUT := $(PRODUCT_OUT)/$(TARGET_COPY_OUT_ROOT)
    847 TARGET_ROOT_OUT_BIN := $(TARGET_ROOT_OUT)/bin
    848 TARGET_ROOT_OUT_SBIN := $(TARGET_ROOT_OUT)/sbin
    849 TARGET_ROOT_OUT_ETC := $(TARGET_ROOT_OUT)/etc
    850 TARGET_ROOT_OUT_USR := $(TARGET_ROOT_OUT)/usr
    851 .KATI_READONLY := \
    852   TARGET_ROOT_OUT \
    853   TARGET_ROOT_OUT_BIN \
    854   TARGET_ROOT_OUT_SBIN \
    855   TARGET_ROOT_OUT_ETC \
    856   TARGET_ROOT_OUT_USR
    857 
    858 TARGET_RECOVERY_OUT := $(PRODUCT_OUT)/$(TARGET_COPY_OUT_RECOVERY)
    859 TARGET_RECOVERY_ROOT_OUT := $(TARGET_RECOVERY_OUT)/root
    860 .KATI_READONLY := \
    861   TARGET_RECOVERY_OUT \
    862   TARGET_RECOVERY_ROOT_OUT
    863 
    864 TARGET_SYSLOADER_OUT := $(PRODUCT_OUT)/sysloader
    865 TARGET_SYSLOADER_ROOT_OUT := $(TARGET_SYSLOADER_OUT)/root
    866 TARGET_SYSLOADER_SYSTEM_OUT := $(TARGET_SYSLOADER_OUT)/root/system
    867 .KATI_READONLY := \
    868   TARGET_SYSLOADER_OUT \
    869   TARGET_SYSLOADER_ROOT_OUT \
    870   TARGET_SYSLOADER_SYSTEM_OUT
    871 
    872 TARGET_INSTALLER_OUT := $(PRODUCT_OUT)/installer
    873 TARGET_INSTALLER_DATA_OUT := $(TARGET_INSTALLER_OUT)/data
    874 TARGET_INSTALLER_ROOT_OUT := $(TARGET_INSTALLER_OUT)/root
    875 TARGET_INSTALLER_SYSTEM_OUT := $(TARGET_INSTALLER_OUT)/root/system
    876 .KATI_READONLY := \
    877   TARGET_INSTALLER_OUT \
    878   TARGET_INSTALLER_DATA_OUT \
    879   TARGET_INSTALLER_ROOT_OUT \
    880   TARGET_INSTALLER_SYSTEM_OUT
    881 
    882 COMMON_MODULE_CLASSES := TARGET-NOTICE_FILES HOST-NOTICE_FILES HOST-JAVA_LIBRARIES
    883 PER_ARCH_MODULE_CLASSES := SHARED_LIBRARIES STATIC_LIBRARIES EXECUTABLES GYP RENDERSCRIPT_BITCODE NATIVE_TESTS HEADER_LIBRARIES
    884 .KATI_READONLY := COMMON_MODULE_CLASSES PER_ARCH_MODULE_CLASSES
    885 
    886 ifeq ($(CALLED_FROM_SETUP),true)
    887 PRINT_BUILD_CONFIG ?= true
    888 endif
    889