config.mk revision 0fb087fc7355a4f42ef5d403628fe5259f4d7ddd
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.
8ifdef ANDROID_BUILD_SHELL
9SHELL := $(ANDROID_BUILD_SHELL)
10else
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.
14SHELL := /bin/bash
15endif
16
17# Utility variables.
18empty :=
19space := $(empty) $(empty)
20comma := ,
21# Note that make will eat the newline just before endef.
22define newline
23
24
25endef
26# The pound character "#"
27define pound
28#
29endef
30# Unfortunately you can't simply define backslash as \ or \\.
31backslash := \a
32backslash := $(patsubst %a,%,$(backslash))
33
34# Tell python not to spam the source tree with .pyc files.  This
35# only has an effect on python 2.6 and above.
36export PYTHONDONTWRITEBYTECODE := 1
37
38ifneq ($(GREP_OPTIONS),)
39$(warning The build system needs unmodified output of grep.)
40$(error Please unset your $$GREP_OPTIONS.)
41endif
42
43# Standard source directories.
44SRC_DOCS:= $(TOPDIR)docs
45# TODO: Enforce some kind of layering; only add include paths
46#       when a module links against a particular library.
47# TODO: See if we can remove most of these from the global list.
48SRC_HEADERS := \
49	$(TOPDIR)system/core/include \
50	$(TOPDIR)system/media/audio/include \
51	$(TOPDIR)hardware/libhardware/include \
52	$(TOPDIR)hardware/libhardware_legacy/include \
53	$(TOPDIR)hardware/ril/include \
54	$(TOPDIR)libnativehelper/include \
55	$(TOPDIR)frameworks/native/include \
56	$(TOPDIR)frameworks/native/opengl/include \
57	$(TOPDIR)frameworks/av/include \
58	$(TOPDIR)frameworks/base/include
59SRC_HOST_HEADERS:=$(TOPDIR)tools/include
60SRC_LIBRARIES:= $(TOPDIR)libs
61SRC_SERVERS:= $(TOPDIR)servers
62SRC_TARGET_DIR := $(TOPDIR)build/target
63SRC_API_DIR := $(TOPDIR)prebuilts/sdk/api
64SRC_SYSTEM_API_DIR := $(TOPDIR)prebuilts/sdk/system-api
65SRC_TEST_API_DIR := $(TOPDIR)prebuilts/sdk/test-api
66
67# Some specific paths to tools
68SRC_DROIDDOC_DIR := $(TOPDIR)build/tools/droiddoc
69
70# Various mappings to avoid hard-coding paths all over the place
71include $(BUILD_SYSTEM)/pathmap.mk
72
73# ###############################################################
74# Build system internal files
75# ###############################################################
76
77BUILD_COMBOS:= $(BUILD_SYSTEM)/combo
78
79CLEAR_VARS:= $(BUILD_SYSTEM)/clear_vars.mk
80BUILD_HOST_STATIC_LIBRARY:= $(BUILD_SYSTEM)/host_static_library.mk
81BUILD_HOST_SHARED_LIBRARY:= $(BUILD_SYSTEM)/host_shared_library.mk
82BUILD_STATIC_LIBRARY:= $(BUILD_SYSTEM)/static_library.mk
83BUILD_SHARED_LIBRARY:= $(BUILD_SYSTEM)/shared_library.mk
84BUILD_EXECUTABLE:= $(BUILD_SYSTEM)/executable.mk
85BUILD_HOST_EXECUTABLE:= $(BUILD_SYSTEM)/host_executable.mk
86BUILD_PACKAGE:= $(BUILD_SYSTEM)/package.mk
87BUILD_PHONY_PACKAGE:= $(BUILD_SYSTEM)/phony_package.mk
88BUILD_HOST_PREBUILT:= $(BUILD_SYSTEM)/host_prebuilt.mk
89BUILD_PREBUILT:= $(BUILD_SYSTEM)/prebuilt.mk
90BUILD_MULTI_PREBUILT:= $(BUILD_SYSTEM)/multi_prebuilt.mk
91BUILD_JAVA_LIBRARY:= $(BUILD_SYSTEM)/java_library.mk
92BUILD_STATIC_JAVA_LIBRARY:= $(BUILD_SYSTEM)/static_java_library.mk
93BUILD_HOST_JAVA_LIBRARY:= $(BUILD_SYSTEM)/host_java_library.mk
94BUILD_DROIDDOC:= $(BUILD_SYSTEM)/droiddoc.mk
95BUILD_COPY_HEADERS := $(BUILD_SYSTEM)/copy_headers.mk
96BUILD_NATIVE_TEST := $(BUILD_SYSTEM)/native_test.mk
97BUILD_NATIVE_BENCHMARK := $(BUILD_SYSTEM)/native_benchmark.mk
98BUILD_HOST_NATIVE_TEST := $(BUILD_SYSTEM)/host_native_test.mk
99BUILD_FUZZ_TEST := $(BUILD_SYSTEM)/fuzz_test.mk
100BUILD_HOST_FUZZ_TEST := $(BUILD_SYSTEM)/host_fuzz_test.mk
101
102BUILD_SHARED_TEST_LIBRARY := $(BUILD_SYSTEM)/shared_test_lib.mk
103BUILD_HOST_SHARED_TEST_LIBRARY := $(BUILD_SYSTEM)/host_shared_test_lib.mk
104BUILD_STATIC_TEST_LIBRARY := $(BUILD_SYSTEM)/static_test_lib.mk
105BUILD_HOST_STATIC_TEST_LIBRARY := $(BUILD_SYSTEM)/host_static_test_lib.mk
106
107BUILD_NOTICE_FILE := $(BUILD_SYSTEM)/notice_files.mk
108BUILD_HOST_DALVIK_JAVA_LIBRARY := $(BUILD_SYSTEM)/host_dalvik_java_library.mk
109BUILD_HOST_DALVIK_STATIC_JAVA_LIBRARY := $(BUILD_SYSTEM)/host_dalvik_static_java_library.mk
110
111
112# ###############################################################
113# Parse out any modifier targets.
114# ###############################################################
115
116# The 'showcommands' goal says to show the full command
117# lines being executed, instead of a short message about
118# the kind of operation being done.
119SHOW_COMMANDS:= $(filter showcommands,$(MAKECMDGOALS))
120hide := $(if $(SHOW_COMMANDS),,@)
121
122################################################################
123# Tools needed in product configuration makefiles.
124################################################################
125NORMALIZE_PATH := build/tools/normalize_path.py
126
127# $(1): the paths to be normalized
128define normalize-paths
129$(if $(1),$(shell $(NORMALIZE_PATH) $(1)))
130endef
131
132# ###############################################################
133# Set common values
134# ###############################################################
135
136# These can be changed to modify both host and device modules.
137COMMON_GLOBAL_CFLAGS:= -DANDROID -fmessage-length=0 -W -Wall -Wno-unused -Winit-self -Wpointer-arith
138COMMON_RELEASE_CFLAGS:= -DNDEBUG -UDEBUG
139
140# Force gcc to always output color diagnostics.  Ninja will strip the ANSI
141# color codes if it is not running in a terminal.
142COMMON_GLOBAL_CFLAGS += -fdiagnostics-color
143
144COMMON_GLOBAL_CPPFLAGS:= -Wsign-promo
145COMMON_RELEASE_CPPFLAGS:=
146
147GLOBAL_CFLAGS_NO_OVERRIDE := \
148    -Werror=int-to-pointer-cast \
149    -Werror=pointer-to-int-cast \
150
151GLOBAL_CLANG_CFLAGS_NO_OVERRIDE := \
152    -Werror=address-of-temporary \
153    -Werror=null-dereference \
154    -Werror=return-type \
155
156GLOBAL_CPPFLAGS_NO_OVERRIDE :=
157
158# Set the extensions used for various packages
159COMMON_PACKAGE_SUFFIX := .zip
160COMMON_JAVA_PACKAGE_SUFFIX := .jar
161COMMON_ANDROID_PACKAGE_SUFFIX := .apk
162
163# list of flags to turn specific warnings in to errors
164TARGET_ERROR_FLAGS := -Werror=return-type -Werror=non-virtual-dtor -Werror=address -Werror=sequence-point
165
166ifdef TMPDIR
167JAVA_TMPDIR_ARG := -Djava.io.tmpdir=$(TMPDIR)
168else
169JAVA_TMPDIR_ARG :=
170endif
171
172# ###############################################################
173# Include sub-configuration files
174# ###############################################################
175
176# ---------------------------------------------------------------
177# Try to include buildspec.mk, which will try to set stuff up.
178# If this file doesn't exist, the environment variables will
179# be used, and if that doesn't work, then the default is an
180# arm build
181ifndef ANDROID_BUILDSPEC
182ANDROID_BUILDSPEC := $(TOPDIR)buildspec.mk
183endif
184-include $(ANDROID_BUILDSPEC)
185
186# ---------------------------------------------------------------
187# Define most of the global variables.  These are the ones that
188# are specific to the user's build configuration.
189include $(BUILD_SYSTEM)/envsetup.mk
190
191# Pruned directory options used when using findleaves.py
192# See envsetup.mk for a description of SCAN_EXCLUDE_DIRS
193FIND_LEAVES_EXCLUDES := $(addprefix --prune=, $(OUT_DIR) $(SCAN_EXCLUDE_DIRS) .repo .git)
194
195# ---------------------------------------------------------------
196# We run gcc/clang with PWD=/proc/self/cwd to remove the $TOP
197# from the debug output. That way two builds in two different
198# directories will create the same output.
199# /proc doesn't exist on Darwin.
200ifeq ($(HOST_OS),linux)
201RELATIVE_PWD := PWD=/proc/self/cwd
202# Remove this useless prefix from the debug output.
203COMMON_GLOBAL_CFLAGS += -fdebug-prefix-map=/proc/self/cwd=
204else
205RELATIVE_PWD :=
206endif
207
208# ---------------------------------------------------------------
209# Allow the C/C++ macros __DATE__ and __TIME__ to be set to the
210# build date and time, so that a build may be repeated.
211# Write the date and time to a file so that the command line
212# doesn't change every time, which would cause ninja to rebuild
213# the files.
214$(shell mkdir -p $(OUT_DIR) && \
215    $(DATE) "+%b %_d %Y" > $(OUT_DIR)/build_c_date.txt && \
216    $(DATE) +%T > $(OUT_DIR)/build_c_time.txt)
217BUILD_DATETIME_C_DATE := $$(cat $(OUT_DIR)/build_c_date.txt)
218BUILD_DATETIME_C_TIME := $$(cat $(OUT_DIR)/build_c_time.txt)
219
220ifeq ($(OVERRIDE_C_DATE_TIME),true)
221COMMON_GLOBAL_CFLAGS += -Wno-builtin-macro-redefined -D__DATE__="\"$(BUILD_DATETIME_C_DATE)\"" -D__TIME__=\"$(BUILD_DATETIME_C_TIME)\"
222endif
223
224# The build system exposes several variables for where to find the kernel
225# headers:
226#   TARGET_DEVICE_KERNEL_HEADERS is automatically created for the current
227#       device being built. It is set as $(TARGET_DEVICE_DIR)/kernel-headers,
228#       e.g. device/samsung/tuna/kernel-headers. This directory is not
229#       explicitly set by anyone, the build system always adds this subdir.
230#
231#   TARGET_BOARD_KERNEL_HEADERS is specified by the BoardConfig.mk file
232#       to allow other directories to be included. This is useful if there's
233#       some common place where a few headers are being kept for a group
234#       of devices. For example, device/<vendor>/common/kernel-headers could
235#       contain some headers for several of <vendor>'s devices.
236#
237#   TARGET_PRODUCT_KERNEL_HEADERS is generated by the product inheritance
238#       graph. This allows architecture products to provide headers for the
239#       devices using that architecture. For example,
240#       hardware/ti/omap4xxx/omap4.mk will specify
241#       PRODUCT_VENDOR_KERNEL_HEADERS variable that specify where the omap4
242#       specific headers are, e.g. hardware/ti/omap4xxx/kernel-headers.
243#       The build system then combines all the values specified by all the
244#       PRODUCT_VENDOR_KERNEL_HEADERS directives in the product inheritance
245#       tree and then exports a TARGET_PRODUCT_KERNEL_HEADERS variable.
246#
247# The layout of subdirs in any of the kernel-headers dir should mirror the
248# layout of the kernel include/ directory. For example,
249#     device/samsung/tuna/kernel-headers/linux/,
250#     hardware/ti/omap4xxx/kernel-headers/media/,
251#     etc.
252#
253# NOTE: These directories MUST contain post-processed headers using the
254# bionic/libc/kernel/clean_header.py tool. Additionally, the original kernel
255# headers must also be checked in, but in a different subdirectory. By
256# convention, the originals should be checked into original-kernel-headers
257# directory of the same parent dir. For example,
258#     device/samsung/tuna/kernel-headers            <----- post-processed
259#     device/samsung/tuna/original-kernel-headers   <----- originals
260#
261TARGET_DEVICE_KERNEL_HEADERS := $(strip $(wildcard $(TARGET_DEVICE_DIR)/kernel-headers))
262
263define validate-kernel-headers
264$(if $(firstword $(foreach hdr_dir,$(1),\
265         $(filter-out kernel-headers,$(notdir $(hdr_dir))))),\
266     $(error Kernel header dirs must be end in kernel-headers: $(1)))
267endef
268# also allow the board config to provide additional directories since
269# there could be device/oem/base_hw and device/oem/derived_hw
270# that both are valid devices but derived_hw needs to use kernel headers
271# from base_hw.
272TARGET_BOARD_KERNEL_HEADERS := $(strip $(wildcard $(TARGET_BOARD_KERNEL_HEADERS)))
273TARGET_BOARD_KERNEL_HEADERS := $(patsubst %/,%,$(TARGET_BOARD_KERNEL_HEADERS))
274$(call validate-kernel-headers,$(TARGET_BOARD_KERNEL_HEADERS))
275
276# then add product-inherited includes, to allow for
277# hardware/sivendor/chip/chip.mk to include their own headers
278TARGET_PRODUCT_KERNEL_HEADERS := $(strip $(wildcard $(PRODUCT_VENDOR_KERNEL_HEADERS)))
279TARGET_PRODUCT_KERNEL_HEADERS := $(patsubst %/,%,$(TARGET_PRODUCT_KERNEL_HEADERS))
280$(call validate-kernel-headers,$(TARGET_PRODUCT_KERNEL_HEADERS))
281
282# Clean up/verify variables defined by the board config file.
283TARGET_BOOTLOADER_BOARD_NAME := $(strip $(TARGET_BOOTLOADER_BOARD_NAME))
284TARGET_CPU_ABI := $(strip $(TARGET_CPU_ABI))
285ifeq ($(TARGET_CPU_ABI),)
286  $(error No TARGET_CPU_ABI defined by board config: $(board_config_mk))
287endif
288TARGET_CPU_ABI2 := $(strip $(TARGET_CPU_ABI2))
289
290# Commands to generate .toc file common to ELF .so files.
291define _gen_toc_command_for_elf
292$(hide) ($($(PRIVATE_2ND_ARCH_VAR_PREFIX)$(PRIVATE_PREFIX)READELF) -d $(1) | grep SONAME || echo "No SONAME for $1") > $(2)
293$(hide) $($(PRIVATE_2ND_ARCH_VAR_PREFIX)$(PRIVATE_PREFIX)NM) -gD -f p $(1) | cut -f1-2 -d" " >> $(2)
294endef
295
296# Commands to generate .toc file from Darwin dynamic library.
297define _gen_toc_command_for_macho
298$(hide) otool -l $(1) | grep LC_ID_DYLIB -A 5 > $(2)
299$(hide) nm -gP $(1) | cut -f1-2 -d" " | grep -v U$$ >> $(2)
300endef
301
302combo_target := HOST_
303combo_2nd_arch_prefix :=
304include $(BUILD_SYSTEM)/combo/select.mk
305
306# Load the 2nd host arch if it's needed.
307ifdef HOST_2ND_ARCH
308combo_target := HOST_
309combo_2nd_arch_prefix := $(HOST_2ND_ARCH_VAR_PREFIX)
310include $(BUILD_SYSTEM)/combo/select.mk
311endif
312
313# Load the windows cross compiler under Linux
314ifdef HOST_CROSS_OS
315combo_target := HOST_CROSS_
316combo_2nd_arch_prefix :=
317include $(BUILD_SYSTEM)/combo/select.mk
318endif
319
320# on windows, the tools have .exe at the end, and we depend on the
321# host config stuff being done first
322
323combo_target := TARGET_
324combo_2nd_arch_prefix :=
325include $(BUILD_SYSTEM)/combo/select.mk
326
327# Load the 2nd target arch if it's needed.
328ifdef TARGET_2ND_ARCH
329combo_target := TARGET_
330combo_2nd_arch_prefix := $(TARGET_2ND_ARCH_VAR_PREFIX)
331include $(BUILD_SYSTEM)/combo/select.mk
332endif
333
334include $(BUILD_SYSTEM)/ccache.mk
335include $(BUILD_SYSTEM)/goma.mk
336
337ifdef TARGET_PREFER_32_BIT
338TARGET_PREFER_32_BIT_APPS := true
339TARGET_PREFER_32_BIT_EXECUTABLES := true
340endif
341
342ifeq (,$(TARGET_SUPPORTS_32_BIT_APPS)$(TARGET_SUPPORTS_64_BIT_APPS))
343  TARGET_SUPPORTS_32_BIT_APPS := true
344endif
345
346# "ro.product.cpu.abilist32" and "ro.product.cpu.abilist64" are
347# comma separated lists of the 32 and 64 bit ABIs (in order of
348# preference) that the target supports. If TARGET_CPU_ABI_LIST_{32,64}_BIT
349# are defined by the board config, we use them. Else, we construct
350# these lists based on whether TARGET_IS_64_BIT is set.
351#
352# Note that this assumes that the 2ND_CPU_ABI for a 64 bit target
353# is always 32 bits. If this isn't the case, these variables should
354# be overriden in the board configuration.
355ifeq (,$(TARGET_CPU_ABI_LIST_64_BIT))
356  ifeq (true|true,$(TARGET_IS_64_BIT)|$(TARGET_SUPPORTS_64_BIT_APPS))
357    TARGET_CPU_ABI_LIST_64_BIT := $(TARGET_CPU_ABI) $(TARGET_CPU_ABI2)
358  endif
359endif
360
361ifeq (,$(TARGET_CPU_ABI_LIST_32_BIT))
362  ifneq (true,$(TARGET_IS_64_BIT))
363    TARGET_CPU_ABI_LIST_32_BIT := $(TARGET_CPU_ABI) $(TARGET_CPU_ABI2)
364  else
365    ifeq (true,$(TARGET_SUPPORTS_32_BIT_APPS))
366      # For a 64 bit target, assume that the 2ND_CPU_ABI
367      # is a 32 bit ABI.
368      TARGET_CPU_ABI_LIST_32_BIT := $(TARGET_2ND_CPU_ABI) $(TARGET_2ND_CPU_ABI2)
369    endif
370  endif
371endif
372
373# "ro.product.cpu.abilist" is a comma separated list of ABIs (in order
374# of preference) that the target supports. If a TARGET_CPU_ABI_LIST
375# is specified by the board configuration, we use that. If not, we
376# build a list out of the TARGET_CPU_ABIs specified by the config.
377ifeq (,$(TARGET_CPU_ABI_LIST))
378  ifeq ($(TARGET_IS_64_BIT)|$(TARGET_PREFER_32_BIT_APPS),true|true)
379    TARGET_CPU_ABI_LIST := $(TARGET_CPU_ABI_LIST_32_BIT) $(TARGET_CPU_ABI_LIST_64_BIT)
380  else
381    TARGET_CPU_ABI_LIST := $(TARGET_CPU_ABI_LIST_64_BIT) $(TARGET_CPU_ABI_LIST_32_BIT)
382  endif
383endif
384
385# Strip whitespace from the ABI list string.
386TARGET_CPU_ABI_LIST := $(subst $(space),$(comma),$(strip $(TARGET_CPU_ABI_LIST)))
387TARGET_CPU_ABI_LIST_32_BIT := $(subst $(space),$(comma),$(strip $(TARGET_CPU_ABI_LIST_32_BIT)))
388TARGET_CPU_ABI_LIST_64_BIT := $(subst $(space),$(comma),$(strip $(TARGET_CPU_ABI_LIST_64_BIT)))
389
390# Compute TARGET_TOOLCHAIN_ROOT from TARGET_TOOLS_PREFIX
391# if only TARGET_TOOLS_PREFIX is passed to the make command.
392ifndef TARGET_TOOLCHAIN_ROOT
393TARGET_TOOLCHAIN_ROOT := $(patsubst %/, %, $(dir $(TARGET_TOOLS_PREFIX)))
394TARGET_TOOLCHAIN_ROOT := $(patsubst %/, %, $(dir $(TARGET_TOOLCHAIN_ROOT)))
395TARGET_TOOLCHAIN_ROOT := $(wildcard $(TARGET_TOOLCHAIN_ROOT))
396endif
397
398# Normalize WITH_STATIC_ANALYZER and WITH_SYNTAX_CHECK
399ifeq ($(strip $(WITH_STATIC_ANALYZER)),0)
400  WITH_STATIC_ANALYZER :=
401endif
402ifeq ($(strip $(WITH_SYNTAX_CHECK)),0)
403  WITH_SYNTAX_CHECK :=
404endif
405
406# Disable WITH_STATIC_ANALYZER and WITH_SYNTAX_CHECK if tool can't be found
407SYNTAX_TOOLS_PREFIX := prebuilts/misc/$(HOST_PREBUILT_TAG)/analyzer/bin
408ifneq ($(strip $(WITH_STATIC_ANALYZER)),)
409  ifeq ($(wildcard $(SYNTAX_TOOLS_PREFIX)/ccc-analyzer),)
410    $(warning *** Disable WITH_STATIC_ANALYZER because $(SYNTAX_TOOLS_PREFIX)/ccc-analyzer does not exist)
411    WITH_STATIC_ANALYZER :=
412  endif
413endif
414ifneq ($(strip $(WITH_SYNTAX_CHECK)),)
415  ifeq ($(wildcard $(SYNTAX_TOOLS_PREFIX)/ccc-syntax),)
416    $(warning *** Disable WITH_SYNTAX_CHECK because $(SYNTAX_TOOLS_PREFIX)/ccc-syntax does not exist)
417    WITH_SYNTAX_CHECK :=
418  endif
419endif
420
421# WITH_STATIC_ANALYZER trumps WITH_SYNTAX_CHECK
422ifneq ($(strip $(WITH_STATIC_ANALYZER)),)
423  ifneq ($(strip $(WITH_SYNTAX_CHECK)),)
424    $(warning *** Disable WITH_SYNTAX_CHECK in the presence of static analyzer WITH_STATIC_ANALYZER)
425    WITH_SYNTAX_CHECK :=
426  endif
427endif
428
429# Pick a Java compiler.
430include $(BUILD_SYSTEM)/combo/javac.mk
431
432# ---------------------------------------------------------------
433# Check that the configuration is current.  We check that
434# BUILD_ENV_SEQUENCE_NUMBER is current against this value.
435# Don't fail if we're called from envsetup, so they have a
436# chance to update their environment.
437
438ifeq (,$(strip $(CALLED_FROM_SETUP)))
439ifneq (,$(strip $(BUILD_ENV_SEQUENCE_NUMBER)))
440ifneq ($(BUILD_ENV_SEQUENCE_NUMBER),$(CORRECT_BUILD_ENV_SEQUENCE_NUMBER))
441$(warning BUILD_ENV_SEQUENCE_NUMBER is set incorrectly.)
442$(info *** If you use envsetup/lunch/choosecombo:)
443$(info ***   - Re-execute envsetup (". envsetup.sh"))
444$(info ***   - Re-run lunch or choosecombo)
445$(info *** If you use buildspec.mk:)
446$(info ***   - Look at buildspec.mk.default to see what has changed)
447$(info ***   - Update BUILD_ENV_SEQUENCE_NUMBER to "$(CORRECT_BUILD_ENV_SEQUENCE_NUMBER)")
448$(error bailing..)
449endif
450endif
451endif
452
453
454# ---------------------------------------------------------------
455# Generic tools.
456JACK := $(HOST_OUT_EXECUTABLES)/jack
457JACK_JAR := $(HOST_OUT_JAVA_LIBRARIES)/jack.jar
458JILL_JAR := $(HOST_OUT_JAVA_LIBRARIES)/jill.jar
459
460LEX := prebuilts/misc/$(BUILD_OS)-$(HOST_PREBUILT_ARCH)/flex/flex-2.5.39
461# The default PKGDATADIR built in the prebuilt bison is a relative path
462# external/bison/data.
463# To run bison from elsewhere you need to set up enviromental variable
464# BISON_PKGDATADIR.
465BISON_PKGDATADIR := $(PWD)/external/bison/data
466BISON := prebuilts/misc/$(BUILD_OS)-$(HOST_PREBUILT_ARCH)/bison/bison
467YACC := $(BISON) -d
468
469YASM := prebuilts/misc/$(BUILD_OS)-$(HOST_PREBUILT_ARCH)/yasm/yasm
470
471DOXYGEN:= doxygen
472AAPT := $(HOST_OUT_EXECUTABLES)/aapt$(HOST_EXECUTABLE_SUFFIX)
473AIDL := $(HOST_OUT_EXECUTABLES)/aidl$(HOST_EXECUTABLE_SUFFIX)
474AIDL_CPP := $(HOST_OUT_EXECUTABLES)/aidl-cpp$(HOST_EXECUTABLE_SUFFIX)
475ifeq ($(HOST_OS),linux)
476BREAKPAD_DUMP_SYMS := $(HOST_OUT_EXECUTABLES)/dump_syms
477else
478# For non-supported hosts, do not generate breakpad symbols.
479BREAKPAD_GENERATE_SYMBOLS := false
480endif
481PROTOC := $(HOST_OUT_EXECUTABLES)/aprotoc$(HOST_EXECUTABLE_SUFFIX)
482DBUS_GENERATOR := $(HOST_OUT_EXECUTABLES)/dbus-binding-generator
483SIGNAPK_JAR := $(HOST_OUT_JAVA_LIBRARIES)/signapk$(COMMON_JAVA_PACKAGE_SUFFIX)
484MKBOOTFS := $(HOST_OUT_EXECUTABLES)/mkbootfs$(HOST_EXECUTABLE_SUFFIX)
485MINIGZIP := $(HOST_OUT_EXECUTABLES)/minigzip$(HOST_EXECUTABLE_SUFFIX)
486ifeq (,$(strip $(BOARD_CUSTOM_MKBOOTIMG)))
487MKBOOTIMG := $(HOST_OUT_EXECUTABLES)/mkbootimg$(HOST_EXECUTABLE_SUFFIX)
488else
489MKBOOTIMG := $(BOARD_CUSTOM_MKBOOTIMG)
490endif
491APICHECK := $(HOST_OUT_EXECUTABLES)/apicheck$(HOST_EXECUTABLE_SUFFIX)
492FS_GET_STATS := $(HOST_OUT_EXECUTABLES)/fs_get_stats$(HOST_EXECUTABLE_SUFFIX)
493MAKE_EXT4FS := $(HOST_OUT_EXECUTABLES)/make_ext4fs$(HOST_EXECUTABLE_SUFFIX)
494MKEXTUSERIMG := $(HOST_OUT_EXECUTABLES)/mkuserimg.sh
495ifeq ($(HOST_OS),linux)
496MAKE_SQUASHFS := $(HOST_OUT_EXECUTABLES)/mksquashfs$(HOST_EXECUTABLE_SUFFIX)
497MKSQUASHFSUSERIMG := $(HOST_OUT_EXECUTABLES)/mksquashfsimage.sh
498else
499MAKE_SQUASHFS :=
500MKSQUASHFSUSERIMG :=
501endif
502MAKE_F2FS := $(HOST_OUT_EXECUTABLES)/make_f2fs$(HOST_EXECUTABLE_SUFFIX)
503MKF2FSUSERIMG := $(HOST_OUT_EXECUTABLES)/mkf2fsuserimg.sh
504SIMG2IMG := $(HOST_OUT_EXECUTABLES)/simg2img$(HOST_EXECUTABLE_SUFFIX)
505IMG2SIMG := $(HOST_OUT_EXECUTABLES)/img2simg$(HOST_EXECUTABLE_SUFFIX)
506E2FSCK := $(HOST_OUT_EXECUTABLES)/e2fsck$(HOST_EXECUTABLE_SUFFIX)
507MKTARBALL := build/tools/mktarball.sh
508TUNE2FS := $(HOST_OUT_EXECUTABLES)/tune2fs$(HOST_EXECUTABLE_SUFFIX)
509E2FSCK := $(HOST_OUT_EXECUTABLES)/e2fsck$(HOST_EXECUTABLE_SUFFIX)
510JARJAR := $(HOST_OUT_JAVA_LIBRARIES)/jarjar.jar
511DATA_BINDING_COMPILER := $(HOST_OUT_JAVA_LIBRARIES)/databinding-compiler.jar
512
513ifeq ($(ANDROID_COMPILE_WITH_JACK),true)
514DEFAULT_JACK_ENABLED:=full
515else
516DEFAULT_JACK_ENABLED:=
517endif
518ifneq ($(ANDROID_JACK_EXTRA_ARGS),)
519DEFAULT_JACK_EXTRA_ARGS := $(ANDROID_JACK_EXTRA_ARGS)
520else
521DEFAULT_JACK_EXTRA_ARGS := @$(BUILD_SYSTEM)/jack-default.args
522endif
523# Turn off jack warnings by default.
524DEFAULT_JACK_EXTRA_ARGS += --verbose error
525
526JILL := java -jar $(JILL_JAR)
527PROGUARD := external/proguard/bin/proguard.sh
528JAVATAGS := build/tools/java-event-log-tags.py
529LLVM_RS_CC := $(HOST_OUT_EXECUTABLES)/llvm-rs-cc$(HOST_EXECUTABLE_SUFFIX)
530BCC_COMPAT := $(HOST_OUT_EXECUTABLES)/bcc_compat$(HOST_EXECUTABLE_SUFFIX)
531RMTYPEDEFS := $(HOST_OUT_EXECUTABLES)/rmtypedefs
532APPEND2SIMG := $(HOST_OUT_EXECUTABLES)/append2simg
533VERITY_SIGNER := $(HOST_OUT_EXECUTABLES)/verity_signer
534BUILD_VERITY_TREE := $(HOST_OUT_EXECUTABLES)/build_verity_tree
535BOOT_SIGNER := $(HOST_OUT_EXECUTABLES)/boot_signer
536FUTILITY := prebuilts/misc/$(BUILD_OS)-$(HOST_PREBUILT_ARCH)/futility/futility
537VBOOT_SIGNER := prebuilts/misc/scripts/vboot_signer/vboot_signer.sh
538FEC := $(HOST_OUT_EXECUTABLES)/fec
539
540# ACP is always for the build OS, not for the host OS
541ACP := $(BUILD_OUT_EXECUTABLES)/acp$(BUILD_EXECUTABLE_SUFFIX)
542
543# dx is java behind a shell script; no .exe necessary.
544DX := $(HOST_OUT_EXECUTABLES)/dx
545ZIPALIGN := $(HOST_OUT_EXECUTABLES)/zipalign$(HOST_EXECUTABLE_SUFFIX)
546ifndef TARGET_BUILD_APPS
547ZIPTIME := $(HOST_OUT_EXECUTABLES)/ziptime$(HOST_EXECUTABLE_SUFFIX)
548endif
549
550# relocation packer
551RELOCATION_PACKER := prebuilts/misc/$(BUILD_OS)-$(HOST_PREBUILT_ARCH)/relocation_packer/relocation_packer
552
553FINDBUGS_DIR := external/owasp/sanitizer/tools/findbugs/bin
554FINDBUGS := $(FINDBUGS_DIR)/findbugs
555EMMA_JAR := external/emma/lib/emma$(COMMON_JAVA_PACKAGE_SUFFIX)
556
557# Tool to merge AndroidManifest.xmls
558ANDROID_MANIFEST_MERGER := java -classpath prebuilts/devtools/tools/lib/manifest-merger.jar com.android.manifmerger.Main merge
559
560YACC_HEADER_SUFFIX:= .hpp
561
562COLUMN:= column
563
564# We may not have the right JAVA_HOME/PATH set up yet when this is run from envsetup.sh.
565ifneq ($(CALLED_FROM_SETUP),true)
566HOST_JDK_TOOLS_JAR:= $(shell $(BUILD_SYSTEM)/find-jdk-tools-jar.sh)
567
568ifneq ($(HOST_JDK_TOOLS_JAR),)
569ifeq ($(wildcard $(HOST_JDK_TOOLS_JAR)),)
570$(error Error: could not find jdk tools.jar at $(HOST_JDK_TOOLS_JAR), please check if your JDK was installed correctly)
571endif
572endif
573
574# Is the host JDK 64-bit version?
575HOST_JDK_IS_64BIT_VERSION :=
576ifneq ($(filter 64-Bit, $(shell java -version 2>&1)),)
577HOST_JDK_IS_64BIT_VERSION := true
578endif
579endif  # CALLED_FROM_SETUP not true
580
581# It's called md5 on Mac OS and md5sum on Linux
582ifeq ($(HOST_OS),darwin)
583MD5SUM:=md5 -q
584else
585MD5SUM:=md5sum
586endif
587
588APICHECK_CLASSPATH := $(HOST_JDK_TOOLS_JAR)
589APICHECK_CLASSPATH := $(APICHECK_CLASSPATH):$(HOST_OUT_JAVA_LIBRARIES)/doclava$(COMMON_JAVA_PACKAGE_SUFFIX)
590APICHECK_CLASSPATH := $(APICHECK_CLASSPATH):$(HOST_OUT_JAVA_LIBRARIES)/jsilver$(COMMON_JAVA_PACKAGE_SUFFIX)
591APICHECK_COMMAND := $(APICHECK) -JXmx1024m -J"classpath $(APICHECK_CLASSPATH)"
592
593# The default key if not set as LOCAL_CERTIFICATE
594ifdef PRODUCT_DEFAULT_DEV_CERTIFICATE
595  DEFAULT_SYSTEM_DEV_CERTIFICATE := $(PRODUCT_DEFAULT_DEV_CERTIFICATE)
596else
597  DEFAULT_SYSTEM_DEV_CERTIFICATE := build/target/product/security/testkey
598endif
599
600# ###############################################################
601# Set up final options.
602# ###############################################################
603
604HOST_GLOBAL_CFLAGS += $(COMMON_GLOBAL_CFLAGS)
605HOST_RELEASE_CFLAGS += $(COMMON_RELEASE_CFLAGS)
606
607HOST_GLOBAL_CPPFLAGS += $(COMMON_GLOBAL_CPPFLAGS)
608HOST_RELEASE_CPPFLAGS += $(COMMON_RELEASE_CPPFLAGS)
609
610TARGET_GLOBAL_CFLAGS += $(COMMON_GLOBAL_CFLAGS)
611TARGET_RELEASE_CFLAGS += $(COMMON_RELEASE_CFLAGS)
612
613TARGET_GLOBAL_CPPFLAGS += $(COMMON_GLOBAL_CPPFLAGS)
614TARGET_RELEASE_CPPFLAGS += $(COMMON_RELEASE_CPPFLAGS)
615
616HOST_GLOBAL_LD_DIRS += -L$(HOST_OUT_INTERMEDIATE_LIBRARIES)
617TARGET_GLOBAL_LD_DIRS += -L$(TARGET_OUT_INTERMEDIATE_LIBRARIES)
618
619HOST_PROJECT_INCLUDES:= $(SRC_HEADERS) $(SRC_HOST_HEADERS) $(HOST_OUT_HEADERS)
620TARGET_PROJECT_INCLUDES:= $(SRC_HEADERS) $(TARGET_OUT_HEADERS) \
621		$(TARGET_DEVICE_KERNEL_HEADERS) $(TARGET_BOARD_KERNEL_HEADERS) \
622		$(TARGET_PRODUCT_KERNEL_HEADERS)
623
624# Many host compilers don't support these flags, so we have to make
625# sure to only specify them for the target compilers checked in to
626# the source tree.
627TARGET_GLOBAL_CFLAGS += $(TARGET_ERROR_FLAGS)
628
629HOST_GLOBAL_CFLAGS += $(HOST_RELEASE_CFLAGS)
630HOST_GLOBAL_CPPFLAGS += $(HOST_RELEASE_CPPFLAGS)
631
632TARGET_GLOBAL_CFLAGS += $(TARGET_RELEASE_CFLAGS)
633TARGET_GLOBAL_CPPFLAGS += $(TARGET_RELEASE_CPPFLAGS)
634
635ifdef TARGET_2ND_ARCH
636$(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_GLOBAL_CFLAGS += $(COMMON_GLOBAL_CFLAGS)
637$(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_RELEASE_CFLAGS += $(COMMON_RELEASE_CFLAGS)
638$(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_GLOBAL_CPPFLAGS += $(COMMON_GLOBAL_CPPFLAGS)
639$(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_RELEASE_CPPFLAGS += $(COMMON_RELEASE_CPPFLAGS)
640$(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_GLOBAL_LD_DIRS += -L$($(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_INTERMEDIATE_LIBRARIES)
641$(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_PROJECT_INCLUDES := $(TARGET_PROJECT_INCLUDES)
642$(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_GLOBAL_CFLAGS += $(TARGET_ERROR_FLAGS)
643$(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_GLOBAL_CFLAGS += $($(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_RELEASE_CFLAGS)
644$(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_GLOBAL_CPPFLAGS += $($(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_RELEASE_CPPFLAGS)
645endif
646
647ifdef HOST_2ND_ARCH
648$(HOST_2ND_ARCH_VAR_PREFIX)HOST_GLOBAL_CFLAGS += $(COMMON_GLOBAL_CFLAGS)
649$(HOST_2ND_ARCH_VAR_PREFIX)HOST_RELEASE_CFLAGS += $(COMMON_RELEASE_CFLAGS)
650$(HOST_2ND_ARCH_VAR_PREFIX)HOST_GLOBAL_CPPFLAGS += $(COMMON_GLOBAL_CPPFLAGS)
651$(HOST_2ND_ARCH_VAR_PREFIX)HOST_RELEASE_CPPFLAGS += $(COMMON_RELEASE_CPPFLAGS)
652$(HOST_2ND_ARCH_VAR_PREFIX)HOST_GLOBAL_LD_DIRS += -L$($(HOST_2ND_ARCH_VAR_PREFIX)HOST_OUT_INTERMEDIATE_LIBRARIES)
653$(HOST_2ND_ARCH_VAR_PREFIX)HOST_PROJECT_INCLUDES := $(HOST_PROJECT_INCLUDES)
654$(HOST_2ND_ARCH_VAR_PREFIX)HOST_GLOBAL_CFLAGS += $($(HOST_2ND_ARCH_VAR_PREFIX)HOST_RELEASE_CFLAGS)
655$(HOST_2ND_ARCH_VAR_PREFIX)HOST_GLOBAL_CPPFLAGS += $($(HOST_2ND_ARCH_VAR_PREFIX)HOST_RELEASE_CPPFLAGS)
656endif
657
658ifdef HOST_CROSS_OS
659HOST_CROSS_GLOBAL_CFLAGS += $(filter-out $(HOST_CROSS_UNKNOWN_CFLAGS),$(COMMON_GLOBAL_CFLAGS))
660HOST_CROSS_RELEASE_CFLAGS += $(COMMON_RELEASE_CFLAGS)
661HOST_CROSS_GLOBAL_CPPFLAGS += $(COMMON_GLOBAL_CPPFLAGS)
662HOST_CROSS_RELEASE_CPPFLAGS += $(COMMON_RELEASE_CPPFLAGS)
663HOST_CROSS_GLOBAL_LD_DIRS += -L$(HOST_CROSS_OUT_INTERMEDIATE_LIBRARIES)
664HOST_CROSS_PROJECT_INCLUDES:= $(SRC_HEADERS) $(SRC_HOST_HEADERS) $(HOST_CROSS_OUT_HEADERS)
665HOST_CROSS_GLOBAL_CFLAGS += $(HOST_CROSS_RELEASE_CFLAGS)
666HOST_CROSS_GLOBAL_CPPFLAGS += $(HOST_CROSS_RELEASE_CPPFLAGS)
667endif
668
669# allow overriding default Java libraries on a per-target basis
670ifeq ($(TARGET_DEFAULT_JAVA_LIBRARIES),)
671  TARGET_DEFAULT_JAVA_LIBRARIES := core-oj core-libart core-junit ext framework okhttp
672endif
673
674# Flags for DEX2OAT
675first_non_empty_of_three = $(if $(1),$(1),$(if $(2),$(2),$(3)))
676DEX2OAT_TARGET_ARCH := $(TARGET_ARCH)
677DEX2OAT_TARGET_CPU_VARIANT := $(call first_non_empty_of_three,$(TARGET_CPU_VARIANT),$(TARGET_ARCH_VARIANT),default)
678DEX2OAT_TARGET_INSTRUCTION_SET_FEATURES := default
679
680ifdef TARGET_2ND_ARCH
681$(TARGET_2ND_ARCH_VAR_PREFIX)DEX2OAT_TARGET_ARCH := $(TARGET_2ND_ARCH)
682$(TARGET_2ND_ARCH_VAR_PREFIX)DEX2OAT_TARGET_CPU_VARIANT := $(call first_non_empty_of_three,$(TARGET_2ND_CPU_VARIANT),$(TARGET_2ND_ARCH_VARIANT),default)
683$(TARGET_2ND_ARCH_VAR_PREFIX)DEX2OAT_TARGET_INSTRUCTION_SET_FEATURES := default
684endif
685
686# define clang/llvm tools and global flags
687include $(BUILD_SYSTEM)/clang/config.mk
688
689# ###############################################################
690# Collect a list of the SDK versions that we could compile against
691# For use with the LOCAL_SDK_VERSION variable for include $(BUILD_PACKAGE)
692# ###############################################################
693
694HISTORICAL_SDK_VERSIONS_ROOT := $(TOPDIR)prebuilts/sdk
695HISTORICAL_NDK_VERSIONS_ROOT := $(TOPDIR)prebuilts/ndk
696
697# The path where app can reference the support library resources.
698ifdef TARGET_BUILD_APPS
699SUPPORT_LIBRARY_ROOT := $(HISTORICAL_SDK_VERSIONS_ROOT)/current/support
700else
701SUPPORT_LIBRARY_ROOT := frameworks/support
702endif
703
704# Historical SDK version N is stored in $(HISTORICAL_SDK_VERSIONS_ROOT)/N.
705# The 'current' version is whatever this source tree is.
706#
707# sgrax     is the opposite of xargs.  It takes the list of args and puts them
708#           on each line for sort to process.
709# sort -g   is a numeric sort, so 1 2 3 10 instead of 1 10 2 3.
710
711# Numerically sort a list of numbers
712# $(1): the list of numbers to be sorted
713define numerically_sort
714$(shell function sgrax() { \
715    while [ -n "$$1" ] ; do echo $$1 ; shift ; done \
716    } ; \
717    ( sgrax $(1) | sort -g ) )
718endef
719
720TARGET_AVAILABLE_SDK_VERSIONS := $(call numerically_sort,\
721    $(patsubst $(HISTORICAL_SDK_VERSIONS_ROOT)/%/android.jar,%, \
722    $(wildcard $(HISTORICAL_SDK_VERSIONS_ROOT)/*/android.jar)))
723
724# We don't have prebuilt test_current SDK yet.
725TARGET_AVAILABLE_SDK_VERSIONS := test_current $(TARGET_AVAILABLE_SDK_VERSIONS)
726
727INTERNAL_PLATFORM_API_FILE := $(TARGET_OUT_COMMON_INTERMEDIATES)/PACKAGING/public_api.txt
728INTERNAL_PLATFORM_REMOVED_API_FILE := $(TARGET_OUT_COMMON_INTERMEDIATES)/PACKAGING/removed.txt
729INTERNAL_PLATFORM_SYSTEM_API_FILE := $(TARGET_OUT_COMMON_INTERMEDIATES)/PACKAGING/system-api.txt
730INTERNAL_PLATFORM_SYSTEM_REMOVED_API_FILE := $(TARGET_OUT_COMMON_INTERMEDIATES)/PACKAGING/system-removed.txt
731INTERNAL_PLATFORM_TEST_API_FILE := $(TARGET_OUT_COMMON_INTERMEDIATES)/PACKAGING/test-api.txt
732INTERNAL_PLATFORM_TEST_REMOVED_API_FILE := $(TARGET_OUT_COMMON_INTERMEDIATES)/PACKAGING/test-removed.txt
733
734# This is the standard way to name a directory containing prebuilt target
735# objects. E.g., prebuilt/$(TARGET_PREBUILT_TAG)/libc.so
736TARGET_PREBUILT_TAG := android-$(TARGET_ARCH)
737ifdef TARGET_2ND_ARCH
738TARGET_2ND_PREBUILT_TAG := android-$(TARGET_2ND_ARCH)
739endif
740
741# Set up RS prebuilt variables for compatibility library
742
743RS_PREBUILT_CLCORE := prebuilts/sdk/renderscript/lib/$(TARGET_ARCH)/librsrt_$(TARGET_ARCH).bc
744RS_PREBUILT_COMPILER_RT := prebuilts/sdk/renderscript/lib/$(TARGET_ARCH)/libcompiler_rt.a
745ifeq (true,$(TARGET_IS_64_BIT))
746RS_PREBUILT_LIBPATH := -L prebuilts/ndk/current/platforms/android-21/arch-$(TARGET_ARCH)/usr/lib
747else
748RS_PREBUILT_LIBPATH := -L prebuilts/ndk/current/platforms/android-9/arch-$(TARGET_ARCH)/usr/lib
749endif
750
751# API Level lists for Renderscript Compat lib.
752RSCOMPAT_32BIT_ONLY_API_LEVELS := 8 9 10 11 12 13 14 15 16 17 18 19 20
753RSCOMPAT_NO_USAGEIO_API_LEVELS := 8 9 10 11 12 13
754
755include $(BUILD_SYSTEM)/dumpvar.mk
756