Home | History | Annotate | Download | only in core
      1 # This is included by the top-level Makefile.
      2 # It sets up standard variables based on the
      3 # current configuration and platform, which
      4 # are not specific to what is being built.
      5 
      6 # Only use ANDROID_BUILD_SHELL to wrap around bash.
      7 # DO NOT use other shells such as zsh.
      8 ifdef ANDROID_BUILD_SHELL
      9 SHELL := $(ANDROID_BUILD_SHELL)
     10 else
     11 # Use bash, not whatever shell somebody has installed as /bin/sh
     12 # This is repeated from main.mk, since envsetup.sh runs this file
     13 # directly.
     14 SHELL := /bin/bash
     15 endif
     16 
     17 # Utility variables.
     18 empty :=
     19 space := $(empty) $(empty)
     20 comma := ,
     21 # Note that make will eat the newline just before endef.
     22 define newline
     23 
     24 
     25 endef
     26 # Unfortunately you can't simply define backslash as \ or \\.
     27 backslash := \a
     28 backslash := $(patsubst %a,%,$(backslash))
     29 
     30 # Tell python not to spam the source tree with .pyc files.  This
     31 # only has an effect on python 2.6 and above.
     32 export PYTHONDONTWRITEBYTECODE := 1
     33 
     34 # Standard source directories.
     35 SRC_DOCS:= $(TOPDIR)docs
     36 # TODO: Enforce some kind of layering; only add include paths
     37 #       when a module links against a particular library.
     38 # TODO: See if we can remove most of these from the global list.
     39 SRC_HEADERS := \
     40 	$(TOPDIR)system/core/include \
     41 	$(TOPDIR)hardware/libhardware/include \
     42 	$(TOPDIR)hardware/libhardware_legacy/include \
     43 	$(TOPDIR)hardware/ril/include \
     44 	$(TOPDIR)libnativehelper/include \
     45 	$(TOPDIR)frameworks/native/include \
     46 	$(TOPDIR)frameworks/native/opengl/include \
     47 	$(TOPDIR)frameworks/av/include \
     48 	$(TOPDIR)frameworks/base/include
     49 SRC_HOST_HEADERS:=$(TOPDIR)tools/include
     50 SRC_LIBRARIES:= $(TOPDIR)libs
     51 SRC_SERVERS:= $(TOPDIR)servers
     52 SRC_TARGET_DIR := $(TOPDIR)build/target
     53 SRC_API_DIR := $(TOPDIR)prebuilts/sdk/api
     54 SRC_SYSTEM_API_DIR := $(TOPDIR)prebuilts/sdk/system-api
     55 
     56 # Some specific paths to tools
     57 SRC_DROIDDOC_DIR := $(TOPDIR)build/tools/droiddoc
     58 
     59 # Various mappings to avoid hard-coding paths all over the place
     60 include $(BUILD_SYSTEM)/pathmap.mk
     61 
     62 # ###############################################################
     63 # Build system internal files
     64 # ###############################################################
     65 
     66 BUILD_COMBOS:= $(BUILD_SYSTEM)/combo
     67 
     68 CLEAR_VARS:= $(BUILD_SYSTEM)/clear_vars.mk
     69 BUILD_HOST_STATIC_LIBRARY:= $(BUILD_SYSTEM)/host_static_library.mk
     70 BUILD_HOST_SHARED_LIBRARY:= $(BUILD_SYSTEM)/host_shared_library.mk
     71 BUILD_STATIC_LIBRARY:= $(BUILD_SYSTEM)/static_library.mk
     72 BUILD_RAW_STATIC_LIBRARY := $(BUILD_SYSTEM)/raw_static_library.mk
     73 BUILD_SHARED_LIBRARY:= $(BUILD_SYSTEM)/shared_library.mk
     74 BUILD_EXECUTABLE:= $(BUILD_SYSTEM)/executable.mk
     75 BUILD_RAW_EXECUTABLE:= $(BUILD_SYSTEM)/raw_executable.mk
     76 BUILD_HOST_EXECUTABLE:= $(BUILD_SYSTEM)/host_executable.mk
     77 BUILD_PACKAGE:= $(BUILD_SYSTEM)/package.mk
     78 BUILD_PHONY_PACKAGE:= $(BUILD_SYSTEM)/phony_package.mk
     79 BUILD_HOST_PREBUILT:= $(BUILD_SYSTEM)/host_prebuilt.mk
     80 BUILD_PREBUILT:= $(BUILD_SYSTEM)/prebuilt.mk
     81 BUILD_MULTI_PREBUILT:= $(BUILD_SYSTEM)/multi_prebuilt.mk
     82 BUILD_JAVA_LIBRARY:= $(BUILD_SYSTEM)/java_library.mk
     83 BUILD_STATIC_JAVA_LIBRARY:= $(BUILD_SYSTEM)/static_java_library.mk
     84 BUILD_HOST_JAVA_LIBRARY:= $(BUILD_SYSTEM)/host_java_library.mk
     85 BUILD_DROIDDOC:= $(BUILD_SYSTEM)/droiddoc.mk
     86 BUILD_COPY_HEADERS := $(BUILD_SYSTEM)/copy_headers.mk
     87 BUILD_NATIVE_TEST := $(BUILD_SYSTEM)/native_test.mk
     88 BUILD_HOST_NATIVE_TEST := $(BUILD_SYSTEM)/host_native_test.mk
     89 
     90 BUILD_SHARED_TEST_LIBRARY := $(BUILD_SYSTEM)/shared_test_lib.mk
     91 BUILD_HOST_SHARED_TEST_LIBRARY := $(BUILD_SYSTEM)/host_shared_test_lib.mk
     92 BUILD_STATIC_TEST_LIBRARY := $(BUILD_SYSTEM)/static_test_lib.mk
     93 BUILD_HOST_STATIC_TEST_LIBRARY := $(BUILD_SYSTEM)/host_static_test_lib.mk
     94 
     95 BUILD_NOTICE_FILE := $(BUILD_SYSTEM)/notice_files.mk
     96 BUILD_HOST_DALVIK_JAVA_LIBRARY := $(BUILD_SYSTEM)/host_dalvik_java_library.mk
     97 BUILD_HOST_DALVIK_STATIC_JAVA_LIBRARY := $(BUILD_SYSTEM)/host_dalvik_static_java_library.mk
     98 
     99 
    100 -include cts/build/config.mk
    101 
    102 # ###############################################################
    103 # Parse out any modifier targets.
    104 # ###############################################################
    105 
    106 # The 'showcommands' goal says to show the full command
    107 # lines being executed, instead of a short message about
    108 # the kind of operation being done.
    109 SHOW_COMMANDS:= $(filter showcommands,$(MAKECMDGOALS))
    110 
    111 
    112 # ###############################################################
    113 # Set common values
    114 # ###############################################################
    115 
    116 # These can be changed to modify both host and device modules.
    117 COMMON_GLOBAL_CFLAGS:= -DANDROID -fmessage-length=0 -W -Wall -Wno-unused -Winit-self -Wpointer-arith
    118 COMMON_RELEASE_CFLAGS:= -DNDEBUG -UDEBUG
    119 
    120 COMMON_GLOBAL_CPPFLAGS:= $(COMMON_GLOBAL_CFLAGS) -Wsign-promo
    121 COMMON_RELEASE_CPPFLAGS:= $(COMMON_RELEASE_CFLAGS)
    122 
    123 # Set the extensions used for various packages
    124 COMMON_PACKAGE_SUFFIX := .zip
    125 COMMON_JAVA_PACKAGE_SUFFIX := .jar
    126 COMMON_ANDROID_PACKAGE_SUFFIX := .apk
    127 
    128 # list of flags to turn specific warnings in to errors
    129 TARGET_ERROR_FLAGS := -Werror=return-type -Werror=non-virtual-dtor -Werror=address -Werror=sequence-point
    130 
    131 # TODO: do symbol compression
    132 TARGET_COMPRESS_MODULE_SYMBOLS := false
    133 
    134 # ###############################################################
    135 # Include sub-configuration files
    136 # ###############################################################
    137 
    138 # ---------------------------------------------------------------
    139 # Try to include buildspec.mk, which will try to set stuff up.
    140 # If this file doesn't exist, the environment variables will
    141 # be used, and if that doesn't work, then the default is an
    142 # arm build
    143 ifndef ANDROID_BUILDSPEC
    144 ANDROID_BUILDSPEC := $(TOPDIR)buildspec.mk
    145 endif
    146 -include $(ANDROID_BUILDSPEC)
    147 
    148 # ---------------------------------------------------------------
    149 # Define most of the global variables.  These are the ones that
    150 # are specific to the user's build configuration.
    151 include $(BUILD_SYSTEM)/envsetup.mk
    152 
    153 # The build system exposes several variables for where to find the kernel
    154 # headers:
    155 #   TARGET_DEVICE_KERNEL_HEADERS is automatically created for the current
    156 #       device being built. It is set as $(TARGET_DEVICE_DIR)/kernel-headers,
    157 #       e.g. device/samsung/tuna/kernel-headers. This directory is not
    158 #       explicitly set by anyone, the build system always adds this subdir.
    159 #
    160 #   TARGET_BOARD_KERNEL_HEADERS is specified by the BoardConfig.mk file
    161 #       to allow other directories to be included. This is useful if there's
    162 #       some common place where a few headers are being kept for a group
    163 #       of devices. For example, device/<vendor>/common/kernel-headers could
    164 #       contain some headers for several of <vendor>'s devices.
    165 #
    166 #   TARGET_PRODUCT_KERNEL_HEADERS is generated by the product inheritance
    167 #       graph. This allows architecture products to provide headers for the
    168 #       devices using that architecture. For example,
    169 #       hardware/ti/omap4xxx/omap4.mk will specify
    170 #       PRODUCT_VENDOR_KERNEL_HEADERS variable that specify where the omap4
    171 #       specific headers are, e.g. hardware/ti/omap4xxx/kernel-headers.
    172 #       The build system then combines all the values specified by all the
    173 #       PRODUCT_VENDOR_KERNEL_HEADERS directives in the product inheritance
    174 #       tree and then exports a TARGET_PRODUCT_KERNEL_HEADERS variable.
    175 #
    176 # The layout of subdirs in any of the kernel-headers dir should mirror the
    177 # layout of the kernel include/ directory. For example,
    178 #     device/samsung/tuna/kernel-headers/linux/,
    179 #     hardware/ti/omap4xxx/kernel-headers/media/,
    180 #     etc.
    181 #
    182 # NOTE: These directories MUST contain post-processed headers using the
    183 # bionic/libc/kernel/clean_header.py tool. Additionally, the original kernel
    184 # headers must also be checked in, but in a different subdirectory. By
    185 # convention, the originals should be checked into original-kernel-headers
    186 # directory of the same parent dir. For example,
    187 #     device/samsung/tuna/kernel-headers            <----- post-processed
    188 #     device/samsung/tuna/original-kernel-headers   <----- originals
    189 #
    190 TARGET_DEVICE_KERNEL_HEADERS := $(strip $(wildcard $(TARGET_DEVICE_DIR)/kernel-headers))
    191 
    192 define validate-kernel-headers
    193 $(if $(firstword $(foreach hdr_dir,$(1),\
    194          $(filter-out kernel-headers,$(notdir $(hdr_dir))))),\
    195      $(error Kernel header dirs must be end in kernel-headers: $(1)))
    196 endef
    197 # also allow the board config to provide additional directories since
    198 # there could be device/oem/base_hw and device/oem/derived_hw
    199 # that both are valid devices but derived_hw needs to use kernel headers
    200 # from base_hw.
    201 TARGET_BOARD_KERNEL_HEADERS := $(strip $(wildcard $(TARGET_BOARD_KERNEL_HEADERS)))
    202 TARGET_BOARD_KERNEL_HEADERS := $(patsubst %/,%,$(TARGET_BOARD_KERNEL_HEADERS))
    203 $(call validate-kernel-headers,$(TARGET_BOARD_KERNEL_HEADERS))
    204 
    205 # then add product-inherited includes, to allow for
    206 # hardware/sivendor/chip/chip.mk to include their own headers
    207 TARGET_PRODUCT_KERNEL_HEADERS := $(strip $(wildcard $(PRODUCT_VENDOR_KERNEL_HEADERS)))
    208 TARGET_PRODUCT_KERNEL_HEADERS := $(patsubst %/,%,$(TARGET_PRODUCT_KERNEL_HEADERS))
    209 $(call validate-kernel-headers,$(TARGET_PRODUCT_KERNEL_HEADERS))
    210 
    211 # Clean up/verify variables defined by the board config file.
    212 TARGET_BOOTLOADER_BOARD_NAME := $(strip $(TARGET_BOOTLOADER_BOARD_NAME))
    213 TARGET_CPU_ABI := $(strip $(TARGET_CPU_ABI))
    214 ifeq ($(TARGET_CPU_ABI),)
    215   $(error No TARGET_CPU_ABI defined by board config: $(board_config_mk))
    216 endif
    217 TARGET_CPU_ABI2 := $(strip $(TARGET_CPU_ABI2))
    218 
    219 # $(1): os/arch
    220 define select-android-config-h
    221 build/core/combo/include/arch/$(1)/AndroidConfig.h
    222 endef
    223 
    224 combo_target := HOST_
    225 combo_2nd_arch_prefix :=
    226 include $(BUILD_SYSTEM)/combo/select.mk
    227 
    228 # Load the 2nd host arch if it's needed.
    229 ifdef HOST_2ND_ARCH
    230 combo_target := HOST_
    231 combo_2nd_arch_prefix := $(HOST_2ND_ARCH_VAR_PREFIX)
    232 include $(BUILD_SYSTEM)/combo/select.mk
    233 endif
    234 
    235 # on windows, the tools have .exe at the end, and we depend on the
    236 # host config stuff being done first
    237 
    238 combo_target := TARGET_
    239 combo_2nd_arch_prefix :=
    240 include $(BUILD_SYSTEM)/combo/select.mk
    241 
    242 # Load the 2nd target arch if it's needed.
    243 ifdef TARGET_2ND_ARCH
    244 combo_target := TARGET_
    245 combo_2nd_arch_prefix := $(TARGET_2ND_ARCH_VAR_PREFIX)
    246 include $(BUILD_SYSTEM)/combo/select.mk
    247 endif
    248 
    249 ifdef TARGET_PREFER_32_BIT
    250 TARGET_PREFER_32_BIT_APPS := true
    251 TARGET_PREFER_32_BIT_EXECUTABLES := true
    252 endif
    253 
    254 ifeq (,$(TARGET_SUPPORTS_32_BIT_APPS)$(TARGET_SUPPORTS_64_BIT_APPS))
    255   TARGET_SUPPORTS_32_BIT_APPS := true
    256 endif
    257 
    258 # "ro.product.cpu.abilist32" and "ro.product.cpu.abilist64" are
    259 # comma separated lists of the 32 and 64 bit ABIs (in order of
    260 # preference) that the target supports. If TARGET_CPU_ABI_LIST_{32,64}_BIT
    261 # are defined by the board config, we use them. Else, we construct
    262 # these lists based on whether TARGET_IS_64_BIT is set.
    263 #
    264 # Note that this assumes that the 2ND_CPU_ABI for a 64 bit target
    265 # is always 32 bits. If this isn't the case, these variables should
    266 # be overriden in the board configuration.
    267 ifeq (,$(TARGET_CPU_ABI_LIST_64_BIT))
    268   ifeq (true|true,$(TARGET_IS_64_BIT)|$(TARGET_SUPPORTS_64_BIT_APPS))
    269     TARGET_CPU_ABI_LIST_64_BIT := $(TARGET_CPU_ABI) $(TARGET_CPU_ABI2)
    270   endif
    271 endif
    272 
    273 ifeq (,$(TARGET_CPU_ABI_LIST_32_BIT))
    274   ifneq (true,$(TARGET_IS_64_BIT))
    275     TARGET_CPU_ABI_LIST_32_BIT := $(TARGET_CPU_ABI) $(TARGET_CPU_ABI2)
    276   else
    277     ifeq (true,$(TARGET_SUPPORTS_32_BIT_APPS))
    278       # For a 64 bit target, assume that the 2ND_CPU_ABI
    279       # is a 32 bit ABI.
    280       TARGET_CPU_ABI_LIST_32_BIT := $(TARGET_2ND_CPU_ABI) $(TARGET_2ND_CPU_ABI2)
    281     endif
    282   endif
    283 endif
    284 
    285 # "ro.product.cpu.abilist" is a comma separated list of ABIs (in order
    286 # of preference) that the target supports. If a TARGET_CPU_ABI_LIST
    287 # is specified by the board configuration, we use that. If not, we
    288 # build a list out of the TARGET_CPU_ABIs specified by the config.
    289 ifeq (,$(TARGET_CPU_ABI_LIST))
    290   ifeq ($(TARGET_IS_64_BIT)|$(TARGET_PREFER_32_BIT_APPS),true|true)
    291     TARGET_CPU_ABI_LIST := $(TARGET_CPU_ABI_LIST_32_BIT) $(TARGET_CPU_ABI_LIST_64_BIT)
    292   else
    293     TARGET_CPU_ABI_LIST := $(TARGET_CPU_ABI_LIST_64_BIT) $(TARGET_CPU_ABI_LIST_32_BIT)
    294   endif
    295 endif
    296 
    297 # Strip whitespace from the ABI list string.
    298 TARGET_CPU_ABI_LIST := $(subst $(space),$(comma),$(strip $(TARGET_CPU_ABI_LIST)))
    299 TARGET_CPU_ABI_LIST_32_BIT := $(subst $(space),$(comma),$(strip $(TARGET_CPU_ABI_LIST_32_BIT)))
    300 TARGET_CPU_ABI_LIST_64_BIT := $(subst $(space),$(comma),$(strip $(TARGET_CPU_ABI_LIST_64_BIT)))
    301 
    302 # Compute TARGET_TOOLCHAIN_ROOT from TARGET_TOOLS_PREFIX
    303 # if only TARGET_TOOLS_PREFIX is passed to the make command.
    304 ifndef TARGET_TOOLCHAIN_ROOT
    305 TARGET_TOOLCHAIN_ROOT := $(patsubst %/, %, $(dir $(TARGET_TOOLS_PREFIX)))
    306 TARGET_TOOLCHAIN_ROOT := $(patsubst %/, %, $(dir $(TARGET_TOOLCHAIN_ROOT)))
    307 TARGET_TOOLCHAIN_ROOT := $(wildcard $(TARGET_TOOLCHAIN_ROOT))
    308 endif
    309 
    310 # Normalize WITH_STATIC_ANALYZER and WITH_SYNTAX_CHECK
    311 ifeq ($(strip $(WITH_STATIC_ANALYZER)),0)
    312   WITH_STATIC_ANALYZER :=
    313 endif
    314 ifeq ($(strip $(WITH_SYNTAX_CHECK)),0)
    315   WITH_SYNTAX_CHECK :=
    316 endif
    317 
    318 # Disable WITH_STATIC_ANALYZER and WITH_SYNTAX_CHECK if tool can't be found
    319 SYNTAX_TOOLS_PREFIX := prebuilts/misc/$(HOST_PREBUILT_TAG)/analyzer/bin
    320 ifneq ($(strip $(WITH_STATIC_ANALYZER)),)
    321   ifeq ($(wildcard $(SYNTAX_TOOLS_PREFIX)/ccc-analyzer),)
    322     $(warning *** Disable WITH_STATIC_ANALYZER because $(SYNTAX_TOOLS_PREFIX)/ccc-analyzer does not exist)
    323     WITH_STATIC_ANALYZER :=
    324   endif
    325 endif
    326 ifneq ($(strip $(WITH_SYNTAX_CHECK)),)
    327   ifeq ($(wildcard $(SYNTAX_TOOLS_PREFIX)/ccc-syntax),)
    328     $(warning *** Disable WITH_SYNTAX_CHECK because $(SYNTAX_TOOLS_PREFIX)/ccc-syntax does not exist)
    329     WITH_SYNTAX_CHECK :=
    330   endif
    331 endif
    332 
    333 # WITH_STATIC_ANALYZER trumps WITH_SYNTAX_CHECK
    334 ifneq ($(strip $(WITH_STATIC_ANALYZER)),)
    335   ifneq ($(strip $(WITH_SYNTAX_CHECK)),)
    336     $(warning *** Disable WITH_SYNTAX_CHECK in the presence of static analyzer WITH_STATIC_ANALYZER)
    337     WITH_SYNTAX_CHECK :=
    338   endif
    339 endif
    340 
    341 # Pick a Java compiler.
    342 include $(BUILD_SYSTEM)/combo/javac.mk
    343 
    344 # ---------------------------------------------------------------
    345 # Check that the configuration is current.  We check that
    346 # BUILD_ENV_SEQUENCE_NUMBER is current against this value.
    347 # Don't fail if we're called from envsetup, so they have a
    348 # chance to update their environment.
    349 
    350 ifeq (,$(strip $(CALLED_FROM_SETUP)))
    351 ifneq (,$(strip $(BUILD_ENV_SEQUENCE_NUMBER)))
    352 ifneq ($(BUILD_ENV_SEQUENCE_NUMBER),$(CORRECT_BUILD_ENV_SEQUENCE_NUMBER))
    353 $(warning BUILD_ENV_SEQUENCE_NUMBER is set incorrectly.)
    354 $(info *** If you use envsetup/lunch/choosecombo:)
    355 $(info ***   - Re-execute envsetup (". envsetup.sh"))
    356 $(info ***   - Re-run lunch or choosecombo)
    357 $(info *** If you use buildspec.mk:)
    358 $(info ***   - Look at buildspec.mk.default to see what has changed)
    359 $(info ***   - Update BUILD_ENV_SEQUENCE_NUMBER to "$(CORRECT_BUILD_ENV_SEQUENCE_NUMBER)")
    360 $(error bailing..)
    361 endif
    362 endif
    363 endif
    364 
    365 
    366 # ---------------------------------------------------------------
    367 # Generic tools.
    368 
    369 LEX := prebuilts/misc/$(BUILD_OS)-$(HOST_PREBUILT_ARCH)/flex/flex-2.5.39
    370 # The default PKGDATADIR built in the prebuilt bison is a relative path
    371 # external/bison/data.
    372 # To run bison from elsewhere you need to set up enviromental variable
    373 # BISON_PKGDATADIR.
    374 BISON_PKGDATADIR := $(PWD)/external/bison/data
    375 BISON := prebuilts/misc/$(BUILD_OS)-$(HOST_PREBUILT_ARCH)/bison/bison
    376 YACC := $(BISON) -d
    377 
    378 YASM := prebuilts/misc/$(BUILD_OS)-$(HOST_PREBUILT_ARCH)/yasm/yasm
    379 
    380 DOXYGEN:= doxygen
    381 AAPT := $(HOST_OUT_EXECUTABLES)/aapt$(HOST_EXECUTABLE_SUFFIX)
    382 AIDL := $(HOST_OUT_EXECUTABLES)/aidl$(HOST_EXECUTABLE_SUFFIX)
    383 PROTOC := $(HOST_OUT_EXECUTABLES)/aprotoc$(HOST_EXECUTABLE_SUFFIX)
    384 SIGNAPK_JAR := $(HOST_OUT_JAVA_LIBRARIES)/signapk$(COMMON_JAVA_PACKAGE_SUFFIX)
    385 MKBOOTFS := $(HOST_OUT_EXECUTABLES)/mkbootfs$(HOST_EXECUTABLE_SUFFIX)
    386 MINIGZIP := $(HOST_OUT_EXECUTABLES)/minigzip$(HOST_EXECUTABLE_SUFFIX)
    387 ifeq (,$(strip $(BOARD_CUSTOM_MKBOOTIMG)))
    388 MKBOOTIMG := $(HOST_OUT_EXECUTABLES)/mkbootimg$(HOST_EXECUTABLE_SUFFIX)
    389 else
    390 MKBOOTIMG := $(BOARD_CUSTOM_MKBOOTIMG)
    391 endif
    392 MKYAFFS2 := $(HOST_OUT_EXECUTABLES)/mkyaffs2image$(HOST_EXECUTABLE_SUFFIX)
    393 APICHECK := $(HOST_OUT_EXECUTABLES)/apicheck$(HOST_EXECUTABLE_SUFFIX)
    394 FS_GET_STATS := $(HOST_OUT_EXECUTABLES)/fs_get_stats$(HOST_EXECUTABLE_SUFFIX)
    395 MKEXT2IMG := $(HOST_OUT_EXECUTABLES)/genext2fs$(HOST_EXECUTABLE_SUFFIX)
    396 MAKE_EXT4FS := $(HOST_OUT_EXECUTABLES)/make_ext4fs$(HOST_EXECUTABLE_SUFFIX)
    397 MKEXTUSERIMG := $(HOST_OUT_EXECUTABLES)/mkuserimg.sh
    398 MAKE_F2FS := $(HOST_OUT_EXECUTABLES)/make_f2fs$(HOST_EXECUTABLE_SUFFIX)
    399 MKF2FSUSERIMG := $(HOST_OUT_EXECUTABLES)/mkf2fsuserimg.sh
    400 MKEXT2BOOTIMG := external/genext2fs/mkbootimg_ext2.sh
    401 SIMG2IMG := $(HOST_OUT_EXECUTABLES)/simg2img$(HOST_EXECUTABLE_SUFFIX)
    402 E2FSCK := $(HOST_OUT_EXECUTABLES)/e2fsck$(HOST_EXECUTABLE_SUFFIX)
    403 MKTARBALL := build/tools/mktarball.sh
    404 TUNE2FS := $(HOST_OUT_EXECUTABLES)/tune2fs$(HOST_EXECUTABLE_SUFFIX)
    405 E2FSCK := $(HOST_OUT_EXECUTABLES)/e2fsck$(HOST_EXECUTABLE_SUFFIX)
    406 JARJAR := $(HOST_OUT_JAVA_LIBRARIES)/jarjar.jar
    407 PROGUARD := external/proguard/bin/proguard.sh
    408 JAVATAGS := build/tools/java-event-log-tags.py
    409 LLVM_RS_CC := $(HOST_OUT_EXECUTABLES)/llvm-rs-cc$(HOST_EXECUTABLE_SUFFIX)
    410 BCC_COMPAT := $(HOST_OUT_EXECUTABLES)/bcc_compat$(HOST_EXECUTABLE_SUFFIX)
    411 LINT := prebuilts/sdk/tools/lint
    412 RMTYPEDEFS := $(HOST_OUT_EXECUTABLES)/rmtypedefs
    413 APPEND2SIMG := $(HOST_OUT_EXECUTABLES)/append2simg
    414 VERITY_SIGNER := $(HOST_OUT_EXECUTABLES)/verity_signer
    415 BUILD_VERITY_TREE := $(HOST_OUT_EXECUTABLES)/build_verity_tree
    416 BOOT_SIGNER := $(HOST_OUT_EXECUTABLES)/boot_signer
    417 
    418 # ACP is always for the build OS, not for the host OS
    419 ACP := $(BUILD_OUT_EXECUTABLES)/acp$(BUILD_EXECUTABLE_SUFFIX)
    420 
    421 # dx is java behind a shell script; no .exe necessary.
    422 DX := $(HOST_OUT_EXECUTABLES)/dx
    423 ZIPALIGN := $(HOST_OUT_EXECUTABLES)/zipalign$(HOST_EXECUTABLE_SUFFIX)
    424 FINDBUGS_DIR := external/owasp/sanitizer/tools/findbugs/bin
    425 FINDBUGS := $(FINDBUGS_DIR)/findbugs
    426 EMMA_JAR := external/emma/lib/emma$(COMMON_JAVA_PACKAGE_SUFFIX)
    427 
    428 # Tool to merge AndroidManifest.xmls
    429 ANDROID_MANIFEST_MERGER := java -classpath prebuilts/devtools/tools/lib/manifest-merger.jar com.android.manifmerger.Main merge
    430 
    431 YACC_HEADER_SUFFIX:= .hpp
    432 
    433 # Don't use column under Windows, cygwin or not
    434 ifeq ($(HOST_OS),windows)
    435 COLUMN:= cat
    436 else
    437 COLUMN:= column
    438 endif
    439 
    440 ifeq ($(HOST_OS),darwin)
    441 ifeq ($(LEGACY_USE_JAVA6),)
    442 HOST_JDK_TOOLS_JAR:= $(shell $(BUILD_SYSTEM)/find-jdk-tools-jar.sh)
    443 else
    444 # Deliberately set to blank for Java 6 installations on MacOS. These
    445 # versions allegedly use a non-standard directory structure.
    446 HOST_JDK_TOOLS_JAR :=
    447 endif
    448 else
    449 HOST_JDK_TOOLS_JAR:= $(shell $(BUILD_SYSTEM)/find-jdk-tools-jar.sh)
    450 endif
    451 
    452 ifneq ($(HOST_JDK_TOOLS_JAR),)
    453 ifeq ($(wildcard $(HOST_JDK_TOOLS_JAR)),)
    454 $(error Error: could not find jdk tools.jar, please check if your JDK was installed correctly)
    455 endif
    456 endif
    457 
    458 # Is the host JDK 64-bit version?
    459 HOST_JDK_IS_64BIT_VERSION :=
    460 ifneq ($(filter 64-Bit, $(shell java -version 2>&1)),)
    461 HOST_JDK_IS_64BIT_VERSION := true
    462 endif
    463 
    464 # It's called md5 on Mac OS and md5sum on Linux
    465 ifeq ($(HOST_OS),darwin)
    466 MD5SUM:=md5 -q
    467 else
    468 MD5SUM:=md5sum
    469 endif
    470 
    471 APICHECK_CLASSPATH := $(HOST_JDK_TOOLS_JAR)
    472 APICHECK_CLASSPATH := $(APICHECK_CLASSPATH):$(HOST_OUT_JAVA_LIBRARIES)/doclava$(COMMON_JAVA_PACKAGE_SUFFIX)
    473 APICHECK_CLASSPATH := $(APICHECK_CLASSPATH):$(HOST_OUT_JAVA_LIBRARIES)/jsilver$(COMMON_JAVA_PACKAGE_SUFFIX)
    474 APICHECK_COMMAND := $(APICHECK) -JXmx1024m -J"classpath $(APICHECK_CLASSPATH)"
    475 
    476 # The default key if not set as LOCAL_CERTIFICATE
    477 ifdef PRODUCT_DEFAULT_DEV_CERTIFICATE
    478   DEFAULT_SYSTEM_DEV_CERTIFICATE := $(PRODUCT_DEFAULT_DEV_CERTIFICATE)
    479 else
    480   DEFAULT_SYSTEM_DEV_CERTIFICATE := build/target/product/security/testkey
    481 endif
    482 
    483 # ###############################################################
    484 # Set up final options.
    485 # ###############################################################
    486 
    487 HOST_GLOBAL_CFLAGS += $(COMMON_GLOBAL_CFLAGS)
    488 HOST_RELEASE_CFLAGS += $(COMMON_RELEASE_CFLAGS)
    489 
    490 HOST_GLOBAL_CPPFLAGS += $(COMMON_GLOBAL_CPPFLAGS)
    491 HOST_RELEASE_CPPFLAGS += $(COMMON_RELEASE_CPPFLAGS)
    492 
    493 TARGET_GLOBAL_CFLAGS += $(COMMON_GLOBAL_CFLAGS)
    494 TARGET_RELEASE_CFLAGS += $(COMMON_RELEASE_CFLAGS)
    495 
    496 TARGET_GLOBAL_CPPFLAGS += $(COMMON_GLOBAL_CPPFLAGS)
    497 TARGET_RELEASE_CPPFLAGS += $(COMMON_RELEASE_CPPFLAGS)
    498 
    499 HOST_GLOBAL_LD_DIRS += -L$(HOST_OUT_INTERMEDIATE_LIBRARIES)
    500 TARGET_GLOBAL_LD_DIRS += -L$(TARGET_OUT_INTERMEDIATE_LIBRARIES)
    501 
    502 HOST_PROJECT_INCLUDES:= $(SRC_HEADERS) $(SRC_HOST_HEADERS) $(HOST_OUT_HEADERS)
    503 TARGET_PROJECT_INCLUDES:= $(SRC_HEADERS) $(TARGET_OUT_HEADERS) \
    504 		$(TARGET_DEVICE_KERNEL_HEADERS) $(TARGET_BOARD_KERNEL_HEADERS) \
    505 		$(TARGET_PRODUCT_KERNEL_HEADERS)
    506 
    507 # Many host compilers don't support these flags, so we have to make
    508 # sure to only specify them for the target compilers checked in to
    509 # the source tree.
    510 TARGET_GLOBAL_CFLAGS += $(TARGET_ERROR_FLAGS)
    511 TARGET_GLOBAL_CPPFLAGS += $(TARGET_ERROR_FLAGS)
    512 
    513 HOST_GLOBAL_CFLAGS += $(HOST_RELEASE_CFLAGS)
    514 HOST_GLOBAL_CPPFLAGS += $(HOST_RELEASE_CPPFLAGS)
    515 
    516 TARGET_GLOBAL_CFLAGS += $(TARGET_RELEASE_CFLAGS)
    517 TARGET_GLOBAL_CPPFLAGS += $(TARGET_RELEASE_CPPFLAGS)
    518 
    519 ifdef TARGET_2ND_ARCH
    520 $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_GLOBAL_CFLAGS += $(COMMON_GLOBAL_CFLAGS)
    521 $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_RELEASE_CFLAGS += $(COMMON_RELEASE_CFLAGS)
    522 $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_GLOBAL_CPPFLAGS += $(COMMON_GLOBAL_CPPFLAGS)
    523 $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_RELEASE_CPPFLAGS += $(COMMON_RELEASE_CPPFLAGS)
    524 $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_GLOBAL_LD_DIRS += -L$($(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_INTERMEDIATE_LIBRARIES)
    525 $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_PROJECT_INCLUDES := $(TARGET_PROJECT_INCLUDES)
    526 $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_GLOBAL_CFLAGS += $(TARGET_ERROR_FLAGS)
    527 $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_GLOBAL_CPPFLAGS += $(TARGET_ERROR_FLAGS)
    528 $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_GLOBAL_CFLAGS += $($(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_RELEASE_CFLAGS)
    529 $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_GLOBAL_CPPFLAGS += $($(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_RELEASE_CPPFLAGS)
    530 endif
    531 
    532 ifdef HOST_2ND_ARCH
    533 $(HOST_2ND_ARCH_VAR_PREFIX)HOST_GLOBAL_CFLAGS += $(COMMON_GLOBAL_CFLAGS)
    534 $(HOST_2ND_ARCH_VAR_PREFIX)HOST_RELEASE_CFLAGS += $(COMMON_RELEASE_CFLAGS)
    535 $(HOST_2ND_ARCH_VAR_PREFIX)HOST_GLOBAL_CPPFLAGS += $(COMMON_GLOBAL_CPPFLAGS)
    536 $(HOST_2ND_ARCH_VAR_PREFIX)HOST_RELEASE_CPPFLAGS += $(COMMON_RELEASE_CPPFLAGS)
    537 $(HOST_2ND_ARCH_VAR_PREFIX)HOST_GLOBAL_LD_DIRS += -L$($(HOST_2ND_ARCH_VAR_PREFIX)HOST_OUT_INTERMEDIATE_LIBRARIES)
    538 $(HOST_2ND_ARCH_VAR_PREFIX)HOST_PROJECT_INCLUDES := $(HOST_PROJECT_INCLUDES)
    539 $(HOST_2ND_ARCH_VAR_PREFIX)HOST_GLOBAL_CFLAGS += $($(HOST_2ND_ARCH_VAR_PREFIX)HOST_RELEASE_CFLAGS)
    540 $(HOST_2ND_ARCH_VAR_PREFIX)HOST_GLOBAL_CPPFLAGS += $($(HOST_2ND_ARCH_VAR_PREFIX)HOST_RELEASE_CPPFLAGS)
    541 endif
    542 
    543 # allow overriding default Java libraries on a per-target basis
    544 ifeq ($(TARGET_DEFAULT_JAVA_LIBRARIES),)
    545   TARGET_DEFAULT_JAVA_LIBRARIES := core-libart core-junit ext framework
    546 endif
    547 
    548 TARGET_CPU_SMP ?= true
    549 
    550 # Flags for DEX2OAT
    551 DEX2OAT_TARGET_ARCH := $(TARGET_ARCH)
    552 DEX2OAT_TARGET_CPU_VARIANT := $(TARGET_CPU_VARIANT)
    553 DEX2OAT_TARGET_INSTRUCTION_SET_FEATURES := default
    554 ifneq (,$(filter $(DEX2OAT_TARGET_CPU_VARIANT),cortex-a7 cortex-a15 krait denver))
    555   DEX2OAT_TARGET_INSTRUCTION_SET_FEATURES := div
    556 endif
    557 
    558 ifdef TARGET_2ND_ARCH
    559 $(TARGET_2ND_ARCH_VAR_PREFIX)DEX2OAT_TARGET_ARCH := $(TARGET_2ND_ARCH)
    560 $(TARGET_2ND_ARCH_VAR_PREFIX)DEX2OAT_TARGET_CPU_VARIANT := $(TARGET_2ND_CPU_VARIANT)
    561 $(TARGET_2ND_ARCH_VAR_PREFIX)DEX2OAT_TARGET_INSTRUCTION_SET_FEATURES := default
    562 ifneq (,$(filter $($(TARGET_2ND_ARCH_VAR_PREFIX)DEX2OAT_TARGET_CPU_VARIANT),cortex-a7 cortex-a15 krait denver))
    563   $(TARGET_2ND_ARCH_VAR_PREFIX)DEX2OAT_TARGET_INSTRUCTION_SET_FEATURES := div
    564 endif
    565 endif
    566 
    567 # define clang/llvm tools and global flags
    568 include $(BUILD_SYSTEM)/clang/config.mk
    569 
    570 # ###############################################################
    571 # Collect a list of the SDK versions that we could compile against
    572 # For use with the LOCAL_SDK_VERSION variable for include $(BUILD_PACKAGE)
    573 # ###############################################################
    574 
    575 HISTORICAL_SDK_VERSIONS_ROOT := $(TOPDIR)prebuilts/sdk
    576 HISTORICAL_NDK_VERSIONS_ROOT := $(TOPDIR)prebuilts/ndk
    577 
    578 # Historical SDK version N is stored in $(HISTORICAL_SDK_VERSIONS_ROOT)/N.
    579 # The 'current' version is whatever this source tree is.
    580 #
    581 # sgrax     is the opposite of xargs.  It takes the list of args and puts them
    582 #           on each line for sort to process.
    583 # sort -g   is a numeric sort, so 1 2 3 10 instead of 1 10 2 3.
    584 
    585 # Numerically sort a list of numbers
    586 # $(1): the list of numbers to be sorted
    587 define numerically_sort
    588 $(shell function sgrax() { \
    589     while [ -n "$$1" ] ; do echo $$1 ; shift ; done \
    590     } ; \
    591     ( sgrax $(1) | sort -g ) )
    592 endef
    593 
    594 TARGET_AVAILABLE_SDK_VERSIONS := $(call numerically_sort,\
    595     $(patsubst $(HISTORICAL_SDK_VERSIONS_ROOT)/%/android.jar,%, \
    596     $(wildcard $(HISTORICAL_SDK_VERSIONS_ROOT)/*/android.jar)))
    597 
    598 # We don't have prebuilt system_current SDK yet.
    599 TARGET_AVAILABLE_SDK_VERSIONS := $(TARGET_AVAILABLE_SDK_VERSIONS)
    600 
    601 INTERNAL_PLATFORM_API_FILE := $(TARGET_OUT_COMMON_INTERMEDIATES)/PACKAGING/public_api.txt
    602 INTERNAL_PLATFORM_REMOVED_API_FILE := $(TARGET_OUT_COMMON_INTERMEDIATES)/PACKAGING/removed.txt
    603 INTERNAL_PLATFORM_SYSTEM_API_FILE := $(TARGET_OUT_COMMON_INTERMEDIATES)/PACKAGING/system-api.txt
    604 INTERNAL_PLATFORM_SYSTEM_REMOVED_API_FILE := $(TARGET_OUT_COMMON_INTERMEDIATES)/PACKAGING/system-removed.txt
    605 
    606 # This is the standard way to name a directory containing prebuilt target
    607 # objects. E.g., prebuilt/$(TARGET_PREBUILT_TAG)/libc.so
    608 TARGET_PREBUILT_TAG := android-$(TARGET_ARCH)
    609 ifdef TARGET_2ND_ARCH
    610 TARGET_2ND_PREBUILT_TAG := android-$(TARGET_2ND_ARCH)
    611 endif
    612 
    613 # Set up RS prebuilt variables for compatibility library
    614 
    615 RS_PREBUILT_CLCORE := prebuilts/sdk/renderscript/lib/$(TARGET_ARCH)/librsrt_$(TARGET_ARCH).bc
    616 RS_PREBUILT_LIBPATH := -L prebuilts/ndk/8/platforms/android-9/arch-$(TARGET_ARCH)/usr/lib
    617 RS_PREBUILT_COMPILER_RT := prebuilts/sdk/renderscript/lib/$(TARGET_ARCH)/libcompiler_rt.a
    618 
    619 include $(BUILD_SYSTEM)/dumpvar.mk
    620