188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#
288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# Copyright (C) 2008 The Android Open Source Project
388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#
488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# Licensed under the Apache License, Version 2.0 (the "License");
588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# you may not use this file except in compliance with the License.
688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# You may obtain a copy of the License at
788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#
888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#      http://www.apache.org/licenses/LICENSE-2.0
988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#
1088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# Unless required by applicable law or agreed to in writing, software
1188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# distributed under the License is distributed on an "AS IS" BASIS,
1288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# See the License for the specific language governing permissions and
1488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# limitations under the License.
1588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#
1688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
1788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project##
1888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## Common build system definitions.  Mostly standard
1988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## commands for building various types of targets, which
2088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## are used by others to construct the final targets.
2188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project##
2288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
2388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# These are variables we use to collect overall lists
2488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# of things being processed.
2588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
2688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# Full paths to all of the documentation
2788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source ProjectALL_DOCS:=
2888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
2988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# The short names of all of the targets in the system.
3088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# For each element of ALL_MODULES, two other variables
3188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# are defined:
3288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#   $(ALL_MODULES.$(target)).BUILT
3388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#   $(ALL_MODULES.$(target)).INSTALLED
3488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# The BUILT variable contains LOCAL_BUILT_MODULE for that
3588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# target, and the INSTALLED variable contains the LOCAL_INSTALLED_MODULE.
3688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# Some targets may have multiple files listed in the BUILT and INSTALLED
3788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# sub-variables.
3888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source ProjectALL_MODULES:=
3988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
4088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# Full paths to targets that should be added to the "make droid"
4188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# set of installed targets.
4288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source ProjectALL_DEFAULT_INSTALLED_MODULES:=
4388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
4488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# The list of tags that have been defined by
4588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# LOCAL_MODULE_TAGS.  Each word in this variable maps
4688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# to a corresponding ALL_MODULE_TAGS.<tagname> variable
4788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# that contains all of the INSTALLED_MODULEs with that tag.
4888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source ProjectALL_MODULE_TAGS:=
4988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
5088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# Similar to ALL_MODULE_TAGS, but contains the short names
5188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# of all targets for a particular tag.  The top-level variable
5288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# won't have the list of tags;  ust ALL_MODULE_TAGS to get
5388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# the list of all known tags.  (This means that this variable
5488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# will always be empty; it's just here as a placeholder for
5588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# its sub-variables.)
5688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source ProjectALL_MODULE_NAME_TAGS:=
5788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
58f85cb7c936db4b7a6b39b1163591a61e166d9e11Joe Onorato# All host modules are automatically installed (i.e. outside
59f85cb7c936db4b7a6b39b1163591a61e166d9e11Joe Onorato# of the product configuration scheme).  This is a list of the
60f85cb7c936db4b7a6b39b1163591a61e166d9e11Joe Onorato# install targets (LOCAL_INSTALLED_MODULE).
61f85cb7c936db4b7a6b39b1163591a61e166d9e11Joe OnoratoALL_HOST_INSTALLED_FILES:=
62f85cb7c936db4b7a6b39b1163591a61e166d9e11Joe Onorato
6388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# Full paths to all prebuilt files that will be copied
6488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# (used to make the dependency on acp)
6588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source ProjectALL_PREBUILT:=
6688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
6788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# Full path to all files that are made by some tool
6888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source ProjectALL_GENERATED_SOURCES:=
6988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
7088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# Full path to all asm, C, C++, lex and yacc generated C files.
7188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# These all have an order-only dependency on the copied headers
7288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source ProjectALL_C_CPP_ETC_OBJECTS:=
7388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
74b375e71d306f2fd356b9b356b636e568c4581fa1Iliyan Malchev# The list of dynamic binaries that haven't been stripped/compressed/etc.
7588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source ProjectALL_ORIGINAL_DYNAMIC_BINARIES:=
7688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
7788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# These files go into the SDK
7888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source ProjectALL_SDK_FILES:=
7988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
8088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# Files for dalvik.  This is often build without building the rest of the OS.
8188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source ProjectINTERNAL_DALVIK_MODULES:=
8288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
8388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# All findbugs xml files
8488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source ProjectALL_FINDBUGS_FILES:=
8588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
86fd626f2d21a55aec9133424f4303d5450ad9622eYing Wang# GPL module license files
87fd626f2d21a55aec9133424f4303d5450ad9622eYing WangALL_GPL_MODULE_LICENSE_FILES:=
88fd626f2d21a55aec9133424f4303d5450ad9622eYing Wang
89ae25ec1bcdeb028a2db3103abdf1f22768928f0aYing Wang# Generated class file names for Android resource.
90ae25ec1bcdeb028a2db3103abdf1f22768928f0aYing Wang# They are escaped and quoted so can be passed safely to a bash command.
91ae25ec1bcdeb028a2db3103abdf1f22768928f0aYing WangANDROID_RESOURCE_GENERATED_CLASSES := 'R.class' 'R$$*.class' 'Manifest.class' 'Manifest$$*.class'
92ae25ec1bcdeb028a2db3103abdf1f22768928f0aYing Wang
9388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
9488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## Debugging; prints a variable list to stdout
9588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
9688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
9788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# $(1): variable name list, not variable values
9888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine print-vars
9988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project$(foreach var,$(1), \
10088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project  $(info $(var):) \
10188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project  $(foreach word,$($(var)), \
10288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project    $(info $(space)$(space)$(word)) \
10388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project   ) \
10488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project )
10588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
10688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
10788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
10864d85d0d827489c514f6aec075482563c80cda73Joe Onorato## Evaluates to true if the string contains the word true,
10964d85d0d827489c514f6aec075482563c80cda73Joe Onorato## and empty otherwise
11064d85d0d827489c514f6aec075482563c80cda73Joe Onorato## $(1): a var to test
11164d85d0d827489c514f6aec075482563c80cda73Joe Onorato###########################################################
11264d85d0d827489c514f6aec075482563c80cda73Joe Onorato
11364d85d0d827489c514f6aec075482563c80cda73Joe Onoratodefine true-or-empty
11464d85d0d827489c514f6aec075482563c80cda73Joe Onorato$(filter true, $(1))
11564d85d0d827489c514f6aec075482563c80cda73Joe Onoratoendef
11664d85d0d827489c514f6aec075482563c80cda73Joe Onorato
11764d85d0d827489c514f6aec075482563c80cda73Joe Onorato
11864d85d0d827489c514f6aec075482563c80cda73Joe Onorato###########################################################
11988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## Retrieve the directory of the current makefile
12088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
12188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
12288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# Figure out where we are.
12388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine my-dir
124b392641d9b07d6321aed828c983af04115da8aabDave Bort$(strip \
12568f1c77a8db3ee6f92194cbaeeb1bf559bb79afdYing Wang  $(eval LOCAL_MODULE_MAKEFILE := $$(lastword $$(MAKEFILE_LIST))) \
12668f1c77a8db3ee6f92194cbaeeb1bf559bb79afdYing Wang  $(if $(filter $(CLEAR_VARS),$(LOCAL_MODULE_MAKEFILE)), \
127b392641d9b07d6321aed828c983af04115da8aabDave Bort    $(error LOCAL_PATH must be set before including $$(CLEAR_VARS)) \
128b392641d9b07d6321aed828c983af04115da8aabDave Bort   , \
12968f1c77a8db3ee6f92194cbaeeb1bf559bb79afdYing Wang    $(patsubst %/,%,$(dir $(LOCAL_MODULE_MAKEFILE))) \
130b392641d9b07d6321aed828c983af04115da8aabDave Bort   ) \
131b392641d9b07d6321aed828c983af04115da8aabDave Bort )
13288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
13388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
13488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
13588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## Retrieve a list of all makefiles immediately below some directory
13688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
13788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
13888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine all-makefiles-under
13988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project$(wildcard $(1)/*/Android.mk)
14088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
14188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
14288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
14388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## Look under a directory for makefiles that don't have parent
14488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## makefiles.
14588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
14688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
14788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# $(1): directory to search under
14888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# Ignores $(1)/Android.mk
14988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine first-makefiles-under
150dc1a728fb89677589bf3b5e3a5aab58164c9be6bJoe Onorato$(shell build/tools/findleaves.py --prune=out --prune=.repo --prune=.git \
151dc1a728fb89677589bf3b5e3a5aab58164c9be6bJoe Onorato        --mindepth=2 $(1) Android.mk)
15288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
15388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
15488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
15588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## Retrieve a list of all makefiles immediately below your directory
15688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
15788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
15888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine all-subdir-makefiles
15988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project$(call all-makefiles-under,$(call my-dir))
16088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
16188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
16288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
16388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## Look in the named list of directories for makefiles,
16488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## relative to the current directory.
16588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
16688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
16788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# $(1): List of directories to look for under this directory
16888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine all-named-subdir-makefiles
169e73c4bbc509f414cb8fbf487b7f44ab94af9cbb9Chih-Wei Huang$(wildcard $(addsuffix /Android.mk, $(addprefix $(call my-dir)/,$(1))))
17088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
17188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
17288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
17388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## Find all of the java files under the named directories.
17488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## Meant to be used like:
17588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project##    SRC_FILES := $(call all-java-files-under,src tests)
17688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
17788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
17888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine all-java-files-under
17988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project$(patsubst ./%,%, \
18088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project  $(shell cd $(LOCAL_PATH) ; \
18188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project          find $(1) -name "*.java" -and -not -name ".*") \
18288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project )
18388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
18488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
18588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
18688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## Find all of the java files from here.  Meant to be used like:
18788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project##    SRC_FILES := $(call all-subdir-java-files)
18888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
18988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
19088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine all-subdir-java-files
19188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project$(call all-java-files-under,.)
19288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
19388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
19488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
19588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## Find all of the c files under the named directories.
19688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## Meant to be used like:
19788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project##    SRC_FILES := $(call all-c-files-under,src tests)
19888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
19988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
20088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine all-c-files-under
20188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project$(patsubst ./%,%, \
20288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project  $(shell cd $(LOCAL_PATH) ; \
20388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project          find $(1) -name "*.c" -and -not -name ".*") \
20488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project )
20588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
20688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
20788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
20888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## Find all of the c files from here.  Meant to be used like:
20988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project##    SRC_FILES := $(call all-subdir-c-files)
21088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
21188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
21288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine all-subdir-c-files
21388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project$(call all-c-files-under,.)
21488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
21588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
21688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
21788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## Find all files named "I*.aidl" under the named directories,
21888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## which must be relative to $(LOCAL_PATH).  The returned list
21988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## is relative to $(LOCAL_PATH).
22088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
22188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
22288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine all-Iaidl-files-under
22388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project$(patsubst ./%,%, \
22488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project  $(shell cd $(LOCAL_PATH) ; \
22588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project          find $(1) -name "I*.aidl" -and -not -name ".*") \
22688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project )
22788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
22888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
22988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
23088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## Find all of the "I*.aidl" files under $(LOCAL_PATH).
23188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
23288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
23388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine all-subdir-Iaidl-files
23488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project$(call all-Iaidl-files-under,.)
23588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
23688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
23788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
238a89c990e31b39e58adecd1f72b517d47284b275aBjorn Bringert## Find all of the logtags files under the named directories.
239a89c990e31b39e58adecd1f72b517d47284b275aBjorn Bringert## Meant to be used like:
240a89c990e31b39e58adecd1f72b517d47284b275aBjorn Bringert##    SRC_FILES := $(call all-logtags-files-under,src)
241a89c990e31b39e58adecd1f72b517d47284b275aBjorn Bringert###########################################################
242a89c990e31b39e58adecd1f72b517d47284b275aBjorn Bringert
243a89c990e31b39e58adecd1f72b517d47284b275aBjorn Bringertdefine all-logtags-files-under
244a89c990e31b39e58adecd1f72b517d47284b275aBjorn Bringert$(patsubst ./%,%, \
245a89c990e31b39e58adecd1f72b517d47284b275aBjorn Bringert  $(shell cd $(LOCAL_PATH) ; \
246a89c990e31b39e58adecd1f72b517d47284b275aBjorn Bringert          find $(1) -name "*.logtags" -and -not -name ".*") \
247a89c990e31b39e58adecd1f72b517d47284b275aBjorn Bringert  )
248a89c990e31b39e58adecd1f72b517d47284b275aBjorn Bringertendef
249a89c990e31b39e58adecd1f72b517d47284b275aBjorn Bringert
250a89c990e31b39e58adecd1f72b517d47284b275aBjorn Bringert###########################################################
251a5fc87a93713b1976c5bfdd602d1c6bd285e7533Ying Wang## Find all of the .proto files under the named directories.
252a5fc87a93713b1976c5bfdd602d1c6bd285e7533Ying Wang## Meant to be used like:
253a5fc87a93713b1976c5bfdd602d1c6bd285e7533Ying Wang##    SRC_FILES := $(call all-proto-files-under,src)
254a5fc87a93713b1976c5bfdd602d1c6bd285e7533Ying Wang###########################################################
255a5fc87a93713b1976c5bfdd602d1c6bd285e7533Ying Wang
256a5fc87a93713b1976c5bfdd602d1c6bd285e7533Ying Wangdefine all-proto-files-under
257a5fc87a93713b1976c5bfdd602d1c6bd285e7533Ying Wang$(patsubst ./%,%, \
258a5fc87a93713b1976c5bfdd602d1c6bd285e7533Ying Wang  $(shell cd $(LOCAL_PATH) ; \
259a5fc87a93713b1976c5bfdd602d1c6bd285e7533Ying Wang          find $(1) -name "*.proto" -and -not -name ".*") \
260a5fc87a93713b1976c5bfdd602d1c6bd285e7533Ying Wang  )
261a5fc87a93713b1976c5bfdd602d1c6bd285e7533Ying Wangendef
262a5fc87a93713b1976c5bfdd602d1c6bd285e7533Ying Wang
263a5fc87a93713b1976c5bfdd602d1c6bd285e7533Ying Wang###########################################################
2640bd59a0a58f9891926ff6faf74a78307230d705bYing Wang## Find all of the RenderScript files under the named directories.
2650bd59a0a58f9891926ff6faf74a78307230d705bYing Wang##  Meant to be used like:
2660bd59a0a58f9891926ff6faf74a78307230d705bYing Wang##    SRC_FILES := $(call all-renderscript-files-under,src)
2670bd59a0a58f9891926ff6faf74a78307230d705bYing Wang###########################################################
2680bd59a0a58f9891926ff6faf74a78307230d705bYing Wang
2690bd59a0a58f9891926ff6faf74a78307230d705bYing Wangdefine all-renderscript-files-under
2700bd59a0a58f9891926ff6faf74a78307230d705bYing Wang$(patsubst ./%,%, \
2710bd59a0a58f9891926ff6faf74a78307230d705bYing Wang  $(shell cd $(LOCAL_PATH) ; \
2720ab6e3e6e62bed00f300fd60110a00ed4ee397cbStephen Hines          find $(1) \( -name "*.rs" -or -name "*.fs" \) -and -not -name ".*") \
2730bd59a0a58f9891926ff6faf74a78307230d705bYing Wang  )
2740bd59a0a58f9891926ff6faf74a78307230d705bYing Wangendef
2750bd59a0a58f9891926ff6faf74a78307230d705bYing Wang
2760bd59a0a58f9891926ff6faf74a78307230d705bYing Wang###########################################################
2770a3cfdc853efb7a57b06def3bd95127398366acbJean-Baptiste Queru## Find all of the html files under the named directories.
2780a3cfdc853efb7a57b06def3bd95127398366acbJean-Baptiste Queru## Meant to be used like:
2790a3cfdc853efb7a57b06def3bd95127398366acbJean-Baptiste Queru##    SRC_FILES := $(call all-html-files-under,src tests)
2800a3cfdc853efb7a57b06def3bd95127398366acbJean-Baptiste Queru###########################################################
2810a3cfdc853efb7a57b06def3bd95127398366acbJean-Baptiste Queru
2820a3cfdc853efb7a57b06def3bd95127398366acbJean-Baptiste Querudefine all-html-files-under
2830a3cfdc853efb7a57b06def3bd95127398366acbJean-Baptiste Queru$(patsubst ./%,%, \
2840a3cfdc853efb7a57b06def3bd95127398366acbJean-Baptiste Queru  $(shell cd $(LOCAL_PATH) ; \
2850a3cfdc853efb7a57b06def3bd95127398366acbJean-Baptiste Queru          find $(1) -name "*.html" -and -not -name ".*") \
2860a3cfdc853efb7a57b06def3bd95127398366acbJean-Baptiste Queru )
2870a3cfdc853efb7a57b06def3bd95127398366acbJean-Baptiste Queruendef
2880a3cfdc853efb7a57b06def3bd95127398366acbJean-Baptiste Queru
2890a3cfdc853efb7a57b06def3bd95127398366acbJean-Baptiste Queru###########################################################
29088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## Find all of the html files from here.  Meant to be used like:
29188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project##    SRC_FILES := $(call all-subdir-html-files)
29288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
29388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
29488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine all-subdir-html-files
2950a3cfdc853efb7a57b06def3bd95127398366acbJean-Baptiste Queru$(call all-html-files-under,.)
29688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
29788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
29888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
29988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## Find all of the files matching pattern
30088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project##    SRC_FILES := $(call find-subdir-files, <pattern>)
30188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
30288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
30388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine find-subdir-files
30488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project$(patsubst ./%,%,$(shell cd $(LOCAL_PATH) ; find $(1)))
30588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
30688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
30788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
30888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# find the files in the subdirectory $1 of LOCAL_DIR
30988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# matching pattern $2, filtering out files $3
31088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# e.g.
31188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#     SRC_FILES += $(call find-subdir-subdir-files, \
31288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#                         css, *.cpp, DontWantThis.cpp)
31388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
31488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
31588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine find-subdir-subdir-files
31688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project$(filter-out $(patsubst %,$(1)/%,$(3)),$(patsubst ./%,%,$(shell cd \
31788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project            $(LOCAL_PATH) ; find $(1) -maxdepth 1 -name $(2))))
31888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
31988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
32088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
32188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## Find all of the files matching pattern
32288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project##    SRC_FILES := $(call all-subdir-java-files)
32388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
32488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
32588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine find-subdir-assets
32688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project$(if $(1),$(patsubst ./%,%, \
3276ab5d6aa166f14c79f31240d2902b5b539253af3Ying Wang	$(shell if [ -d $(1) ] ; then cd $(1) ; find ./ -not -name '.*' -and -type f -and -not -type l ; fi)), \
32888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project	$(warning Empty argument supplied to find-subdir-assets) \
32988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project)
33088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
33188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
33288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
33388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## Find various file types in a list of directories relative to $(LOCAL_PATH)
33488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
33588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
33688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine find-other-java-files
33788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project	$(call find-subdir-files,$(1) -name "*.java" -and -not -name ".*")
33888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
33988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
34088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine find-other-html-files
34188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project	$(call find-subdir-files,$(1) -name "*.html" -and -not -name ".*")
34288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
34388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
34488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
34588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## Scan through each directory of $(1) looking for files
34688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## that match $(2) using $(wildcard).  Useful for seeing if
34788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## a given directory or one of its parents contains
34888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## a particular file.  Returns the first match found,
34988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## starting furthest from the root.
35088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
35188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
35288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine find-parent-file
35388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project$(strip \
354a67ce69e9a1ff267cb3c01bdd3214b6c68aa6f63Ying Wang  $(eval _fpf := $(wildcard $(foreach f, $(2), $(strip $(1))/$(f)))) \
35588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project  $(if $(_fpf),$(_fpf), \
35688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project       $(if $(filter-out ./ .,$(1)), \
35788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project             $(call find-parent-file,$(patsubst %/,%,$(dir $(1))),$(2)) \
35888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project        ) \
35988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project   ) \
36088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project)
36188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
36288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
36388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
36488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## Function we can evaluate to introduce a dynamic dependency
36588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
36688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
36788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine add-dependency
36888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project$(1): $(2)
36988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
37088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
37188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
37288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## Set up the dependencies for a prebuilt target
37388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project##  $(call add-prebuilt-file, srcfile, [targetclass])
37488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
37588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
37688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine add-prebuilt-file
37788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project    $(eval $(include-prebuilt))
37888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
37988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
38088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine include-prebuilt
38188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project    include $$(CLEAR_VARS)
38288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project    LOCAL_SRC_FILES := $(1)
38388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project    LOCAL_BUILT_MODULE_STEM := $(1)
38488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project    LOCAL_MODULE_SUFFIX := $$(suffix $(1))
38588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project    LOCAL_MODULE := $$(basename $(1))
38688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project    LOCAL_MODULE_CLASS := $(2)
38788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project    include $$(BUILD_PREBUILT)
38888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
38988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
39088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
39188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## do multiple prebuilts
39288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project##  $(call target class, files ...)
39388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
39488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
39588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine add-prebuilt-files
39688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project    $(foreach f,$(2),$(call add-prebuilt-file,$f,$(1)))
39788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
39888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
39988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
40088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
40188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
40288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## The intermediates directory.  Where object files go for
40388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## a given target.  We could technically get away without
40488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## the "_intermediates" suffix on the directory, but it's
40588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## nice to be able to grep for that string to find out if
40688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## anyone's abusing the system.
40788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
40888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
40988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# $(1): target class, like "APPS"
41088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# $(2): target name, like "NotePad"
41188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# $(3): if non-empty, this is a HOST target.
41288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# $(4): if non-empty, force the intermediates to be COMMON
41388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine intermediates-dir-for
41488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project$(strip \
41588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project    $(eval _idfClass := $(strip $(1))) \
41688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project    $(if $(_idfClass),, \
41788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project        $(error $(LOCAL_PATH): Class not defined in call to intermediates-dir-for)) \
41888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project    $(eval _idfName := $(strip $(2))) \
41988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project    $(if $(_idfName),, \
42088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project        $(error $(LOCAL_PATH): Name not defined in call to intermediates-dir-for)) \
42188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project    $(eval _idfPrefix := $(if $(strip $(3)),HOST,TARGET)) \
422a83940fa7851b35712e559be2246b56b5666b805Ying Wang    $(if $(filter $(_idfPrefix)-$(_idfClass),$(COMMON_MODULE_CLASSES))$(4), \
42388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project        $(eval _idfIntBase := $($(_idfPrefix)_OUT_COMMON_INTERMEDIATES)) \
42488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project      , \
42588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project        $(eval _idfIntBase := $($(_idfPrefix)_OUT_INTERMEDIATES)) \
42688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project     ) \
42788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project    $(_idfIntBase)/$(_idfClass)/$(_idfName)_intermediates \
42888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project)
42988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
43088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
43188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# Uses LOCAL_MODULE_CLASS, LOCAL_MODULE, and LOCAL_IS_HOST_MODULE
43288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# to determine the intermediates directory.
43388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#
43488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# $(1): if non-empty, force the intermediates to be COMMON
43588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine local-intermediates-dir
43688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project$(strip \
43788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project    $(if $(strip $(LOCAL_MODULE_CLASS)),, \
43888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project        $(error $(LOCAL_PATH): LOCAL_MODULE_CLASS not defined before call to local-intermediates-dir)) \
43988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project    $(if $(strip $(LOCAL_MODULE)),, \
44088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project        $(error $(LOCAL_PATH): LOCAL_MODULE not defined before call to local-intermediates-dir)) \
44188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project    $(call intermediates-dir-for,$(LOCAL_MODULE_CLASS),$(LOCAL_MODULE),$(LOCAL_IS_HOST_MODULE),$(1)) \
44288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project)
44388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
44488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
44588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
44688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## Convert "path/to/libXXX.so" to "-lXXX".
44788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## Any "path/to/libXXX.a" elements pass through unchanged.
44888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
44988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
45088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine normalize-libraries
45188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project$(foreach so,$(filter %.so,$(1)),-l$(patsubst lib%.so,%,$(notdir $(so))))\
45288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project$(filter-out %.so,$(1))
45388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
45488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
45588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# TODO: change users to call the common version.
45688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine normalize-host-libraries
45788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project$(call normalize-libraries,$(1))
45888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
45988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
46088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine normalize-target-libraries
46188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project$(call normalize-libraries,$(1))
46288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
46388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
46488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
46588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## Convert a list of short module names (e.g., "framework", "Browser")
46688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## into the list of files that are built for those modules.
46788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## NOTE: this won't return reliable results until after all
46888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## sub-makefiles have been included.
46988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## $(1): target list
47088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
47188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
47288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine module-built-files
47388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project$(foreach module,$(1),$(ALL_MODULES.$(module).BUILT))
47488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
47588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
47688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
47788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## Convert a list of short modules names (e.g., "framework", "Browser")
47888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## into the list of files that are installed for those modules.
47988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## NOTE: this won't return reliable results until after all
48088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## sub-makefiles have been included.
48188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## $(1): target list
48288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
48388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
48488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine module-installed-files
48588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project$(foreach module,$(1),$(ALL_MODULES.$(module).INSTALLED))
48688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
48788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
48888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
48964d85d0d827489c514f6aec075482563c80cda73Joe Onorato## Convert a list of short modules names (e.g., "framework", "Browser")
49064d85d0d827489c514f6aec075482563c80cda73Joe Onorato## into the list of files that should be used when linking
49164d85d0d827489c514f6aec075482563c80cda73Joe Onorato## against that module as a public API.
49264d85d0d827489c514f6aec075482563c80cda73Joe Onorato## TODO: Allow this for more than JAVA_LIBRARIES modules
49364d85d0d827489c514f6aec075482563c80cda73Joe Onorato## NOTE: this won't return reliable results until after all
49464d85d0d827489c514f6aec075482563c80cda73Joe Onorato## sub-makefiles have been included.
49564d85d0d827489c514f6aec075482563c80cda73Joe Onorato## $(1): target list
49664d85d0d827489c514f6aec075482563c80cda73Joe Onorato###########################################################
49764d85d0d827489c514f6aec075482563c80cda73Joe Onorato
49864d85d0d827489c514f6aec075482563c80cda73Joe Onoratodefine module-stubs-files
49964d85d0d827489c514f6aec075482563c80cda73Joe Onorato$(foreach module,$(1),$(ALL_MODULES.$(module).STUBS))
50064d85d0d827489c514f6aec075482563c80cda73Joe Onoratoendef
50164d85d0d827489c514f6aec075482563c80cda73Joe Onorato
50264d85d0d827489c514f6aec075482563c80cda73Joe Onorato###########################################################
50364d85d0d827489c514f6aec075482563c80cda73Joe Onorato## Evaluates to the timestamp file for a doc module, which
50464d85d0d827489c514f6aec075482563c80cda73Joe Onorato## is the dependency that should be used.
50564d85d0d827489c514f6aec075482563c80cda73Joe Onorato## $(1): doc module
50664d85d0d827489c514f6aec075482563c80cda73Joe Onorato###########################################################
50764d85d0d827489c514f6aec075482563c80cda73Joe Onorato
50864d85d0d827489c514f6aec075482563c80cda73Joe Onoratodefine doc-timestamp-for
50964d85d0d827489c514f6aec075482563c80cda73Joe Onorato$(OUT_DOCS)/$(strip $(1))-timestamp
51064d85d0d827489c514f6aec075482563c80cda73Joe Onoratoendef
51164d85d0d827489c514f6aec075482563c80cda73Joe Onorato
51264d85d0d827489c514f6aec075482563c80cda73Joe Onorato
51364d85d0d827489c514f6aec075482563c80cda73Joe Onorato###########################################################
514912f8286056586da76f1dd03ccfca2990ea5d258Ying Wang## Convert "core ext framework" to "out/.../javalib.jar ..."
51588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## $(1): library list
51688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## $(2): Non-empty if IS_HOST_MODULE
51788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
51888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
51988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# $(1): library name
52088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# $(2): Non-empty if IS_HOST_MODULE
52188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine _java-lib-dir
52288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project$(call intermediates-dir-for, \
523912f8286056586da76f1dd03ccfca2990ea5d258Ying Wang	JAVA_LIBRARIES,$(1),$(2),COMMON)
52488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
52588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
52688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# $(1): library name
52788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# $(2): Non-empty if IS_HOST_MODULE
52888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine _java-lib-full-classes.jar
529912f8286056586da76f1dd03ccfca2990ea5d258Ying Wang$(call _java-lib-dir,$(1),$(2))/classes$(COMMON_JAVA_PACKAGE_SUFFIX)
53088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
53188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
53288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# $(1): library name list
53388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# $(2): Non-empty if IS_HOST_MODULE
53488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine java-lib-files
53588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project$(foreach lib,$(1),$(call _java-lib-full-classes.jar,$(lib),$(2)))
53688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
53788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
53888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# $(1): library name
53988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# $(2): Non-empty if IS_HOST_MODULE
54088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine _java-lib-full-dep
541912f8286056586da76f1dd03ccfca2990ea5d258Ying Wang$(call _java-lib-dir,$(1),$(2))/javalib$(COMMON_JAVA_PACKAGE_SUFFIX)
54288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
54388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
54488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# $(1): library name list
54588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# $(2): Non-empty if IS_HOST_MODULE
54688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine java-lib-deps
54788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project$(foreach lib,$(1),$(call _java-lib-full-dep,$(lib),$(2)))
54888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
54988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
55088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
5518dc8faaaeadf83353b8144cc0db58972f19f5c7eJoe Onorato## Run rot13 on a string
5528dc8faaaeadf83353b8144cc0db58972f19f5c7eJoe Onorato## $(1): the string.  Must be one line.
5538dc8faaaeadf83353b8144cc0db58972f19f5c7eJoe Onorato###########################################################
5548dc8faaaeadf83353b8144cc0db58972f19f5c7eJoe Onoratodefine rot13
5558dc8faaaeadf83353b8144cc0db58972f19f5c7eJoe Onorato$(shell echo $(1) | tr 'a-zA-Z' 'n-za-mN-ZA-M')
5568dc8faaaeadf83353b8144cc0db58972f19f5c7eJoe Onoratoendef
5578dc8faaaeadf83353b8144cc0db58972f19f5c7eJoe Onorato
5588dc8faaaeadf83353b8144cc0db58972f19f5c7eJoe Onorato
5598dc8faaaeadf83353b8144cc0db58972f19f5c7eJoe Onorato###########################################################
5608dc8faaaeadf83353b8144cc0db58972f19f5c7eJoe Onorato## Returns true if $(1) and $(2) are equal.  Returns
5618dc8faaaeadf83353b8144cc0db58972f19f5c7eJoe Onorato## the empty string if they are not equal.
5628dc8faaaeadf83353b8144cc0db58972f19f5c7eJoe Onorato###########################################################
5638dc8faaaeadf83353b8144cc0db58972f19f5c7eJoe Onoratodefine streq
5648dc8faaaeadf83353b8144cc0db58972f19f5c7eJoe Onorato$(strip $(if $(strip $(1)),\
5658dc8faaaeadf83353b8144cc0db58972f19f5c7eJoe Onorato  $(if $(strip $(2)),\
5668dc8faaaeadf83353b8144cc0db58972f19f5c7eJoe Onorato    $(if $(filter-out __,_$(subst $(strip $(1)),,$(strip $(2)))$(subst $(strip $(2)),,$(strip $(1)))_),,true), \
5678dc8faaaeadf83353b8144cc0db58972f19f5c7eJoe Onorato    ),\
5688dc8faaaeadf83353b8144cc0db58972f19f5c7eJoe Onorato  $(if $(strip $(2)),\
5698dc8faaaeadf83353b8144cc0db58972f19f5c7eJoe Onorato    ,\
5708dc8faaaeadf83353b8144cc0db58972f19f5c7eJoe Onorato    true)\
5718dc8faaaeadf83353b8144cc0db58972f19f5c7eJoe Onorato ))
5728dc8faaaeadf83353b8144cc0db58972f19f5c7eJoe Onoratoendef
5738dc8faaaeadf83353b8144cc0db58972f19f5c7eJoe Onorato
5748dc8faaaeadf83353b8144cc0db58972f19f5c7eJoe Onorato###########################################################
57588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## Convert "a b c" into "a:b:c"
57688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
57788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine normalize-path-list
57888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project$(subst $(space),:,$(strip $(1)))
57988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
58088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
58188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
58264d85d0d827489c514f6aec075482563c80cda73Joe Onorato## Read the word out of a colon-separated list of words.
58364d85d0d827489c514f6aec075482563c80cda73Joe Onorato## This has the same behavior as the built-in function
58464d85d0d827489c514f6aec075482563c80cda73Joe Onorato## $(word n,str).
58564d85d0d827489c514f6aec075482563c80cda73Joe Onorato##
58664d85d0d827489c514f6aec075482563c80cda73Joe Onorato## The individual words may not contain spaces.
58764d85d0d827489c514f6aec075482563c80cda73Joe Onorato##
58864d85d0d827489c514f6aec075482563c80cda73Joe Onorato## $(1): 1 based index
58964d85d0d827489c514f6aec075482563c80cda73Joe Onorato## $(2): value of the form a:b:c...
59064d85d0d827489c514f6aec075482563c80cda73Joe Onorato###########################################################
59164d85d0d827489c514f6aec075482563c80cda73Joe Onorato
59264d85d0d827489c514f6aec075482563c80cda73Joe Onoratodefine word-colon
59364d85d0d827489c514f6aec075482563c80cda73Joe Onorato$(word $(1),$(subst :,$(space),$(2)))
59464d85d0d827489c514f6aec075482563c80cda73Joe Onoratoendef
59564d85d0d827489c514f6aec075482563c80cda73Joe Onorato
59664d85d0d827489c514f6aec075482563c80cda73Joe Onorato###########################################################
59788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## Convert "a=b c= d e = f" into "a=b c=d e=f"
59888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project##
59988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## $(1): list to collapse
60088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## $(2): if set, separator word; usually "=", ":", or ":="
60188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project##       Defaults to "=" if not set.
60288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
60388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
60488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine collapse-pairs
60588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project$(eval _cpSEP := $(strip $(if $(2),$(2),=)))\
60688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project$(subst $(space)$(_cpSEP)$(space),$(_cpSEP),$(strip \
60788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project    $(subst $(_cpSEP), $(_cpSEP) ,$(1))))
60888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
60988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
61088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
6117e8d442ca4f716dd3a67a63ae59779a1e1a6b45fYing Wang## Given a list of pairs, if multiple pairs have the same
6127e8d442ca4f716dd3a67a63ae59779a1e1a6b45fYing Wang## first components, keep only the first pair.
6137e8d442ca4f716dd3a67a63ae59779a1e1a6b45fYing Wang##
6147e8d442ca4f716dd3a67a63ae59779a1e1a6b45fYing Wang## $(1): list of pairs
6157e8d442ca4f716dd3a67a63ae59779a1e1a6b45fYing Wang## $(2): the separator word, such as ":", "=", etc.
6167e8d442ca4f716dd3a67a63ae59779a1e1a6b45fYing Wangdefine uniq-pairs-by-first-component
6177e8d442ca4f716dd3a67a63ae59779a1e1a6b45fYing Wang$(eval _upbfc_fc_set :=)\
6187e8d442ca4f716dd3a67a63ae59779a1e1a6b45fYing Wang$(strip $(foreach w,$(1), $(eval _first := $(word 1,$(subst $(2),$(space),$(w))))\
6197e8d442ca4f716dd3a67a63ae59779a1e1a6b45fYing Wang    $(if $(filter $(_upbfc_fc_set),$(_first)),,$(w)\
6207e8d442ca4f716dd3a67a63ae59779a1e1a6b45fYing Wang        $(eval _upbfc_fc_set += $(_first)))))\
6217e8d442ca4f716dd3a67a63ae59779a1e1a6b45fYing Wang$(eval _upbfc_fc_set :=)\
6227e8d442ca4f716dd3a67a63ae59779a1e1a6b45fYing Wang$(eval _first:=)
6237e8d442ca4f716dd3a67a63ae59779a1e1a6b45fYing Wangendef
6247e8d442ca4f716dd3a67a63ae59779a1e1a6b45fYing Wang
6257e8d442ca4f716dd3a67a63ae59779a1e1a6b45fYing Wang###########################################################
62688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## MODULE_TAG set operations
62788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
62888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
62988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# Given a list of tags, return the targets that specify
63088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# any of those tags.
63188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# $(1): tag list
63288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine modules-for-tag-list
63388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project$(sort $(foreach tag,$(1),$(ALL_MODULE_TAGS.$(tag))))
63488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
63588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
63688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# Same as modules-for-tag-list, but operates on
63788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# ALL_MODULE_NAME_TAGS.
63888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# $(1): tag list
63988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine module-names-for-tag-list
64088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project$(sort $(foreach tag,$(1),$(ALL_MODULE_NAME_TAGS.$(tag))))
64188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
64288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
64388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# Given an accept and reject list, find the matching
64488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# set of targets.  If a target has multiple tags and
64588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# any of them are rejected, the target is rejected.
64688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# Reject overrides accept.
64788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# $(1): list of tags to accept
64888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# $(2): list of tags to reject
64988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#TODO(dbort): do $(if $(strip $(1)),$(1),$(ALL_MODULE_TAGS))
65075127b769e20490f3348802e6b708d67c60c2b04Jean-Baptiste Queru#TODO(jbq): as of 20100106 nobody uses the second parameter
65188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine get-tagged-modules
65288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project$(filter-out \
65388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project	$(call modules-for-tag-list,$(2)), \
65488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project	    $(call modules-for-tag-list,$(1)))
65588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
65688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
65764d85d0d827489c514f6aec075482563c80cda73Joe Onorato###########################################################
65864d85d0d827489c514f6aec075482563c80cda73Joe Onorato## Append a leaf to a base path.  Properly deals with
65964d85d0d827489c514f6aec075482563c80cda73Joe Onorato## base paths ending in /.
66064d85d0d827489c514f6aec075482563c80cda73Joe Onorato##
66164d85d0d827489c514f6aec075482563c80cda73Joe Onorato## $(1): base path
66264d85d0d827489c514f6aec075482563c80cda73Joe Onorato## $(2): leaf path
66364d85d0d827489c514f6aec075482563c80cda73Joe Onorato###########################################################
66464d85d0d827489c514f6aec075482563c80cda73Joe Onorato
66564d85d0d827489c514f6aec075482563c80cda73Joe Onoratodefine append-path
66664d85d0d827489c514f6aec075482563c80cda73Joe Onorato$(subst //,/,$(1)/$(2))
66764d85d0d827489c514f6aec075482563c80cda73Joe Onoratoendef
66864d85d0d827489c514f6aec075482563c80cda73Joe Onorato
66988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
67088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
67188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## Package filtering
67288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
67388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
67488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# Given a list of installed modules (short or long names)
67588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# return a list of the packages (yes, .apk packages, not
67688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# modules in general) that are overridden by this list and,
67788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# therefore, should not be installed.
67888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# $(1): mixed list of installed modules
67988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# TODO: This is fragile; find a reliable way to get this information.
68088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine _get-package-overrides
68188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project $(eval ### Discard any words containing slashes, unless they end in .apk, \
68288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project        ### in which case trim off the directory component and the suffix. \
68388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project        ### If there are no slashes, keep the entire word.)
68488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project $(eval _gpo_names := $(subst /,@@@ @@@,$(1)))
68588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project $(eval _gpo_names := \
68688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project     $(filter %.apk,$(_gpo_names)) \
68788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project     $(filter-out %@@@ @@@%,$(_gpo_names)))
68888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project $(eval _gpo_names := $(patsubst %.apk,%,$(_gpo_names)))
68988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project $(eval _gpo_names := $(patsubst @@@%,%,$(_gpo_names)))
69088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
69188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project $(eval ### Remove any remaining words that contain dots.)
69288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project $(eval _gpo_names := $(subst .,@@@ @@@,$(_gpo_names)))
69388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project $(eval _gpo_names := $(filter-out %@@@ @@@%,$(_gpo_names)))
69488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
69588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project $(eval ### Now we have a list of any words that could possibly refer to \
69688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project        ### packages, although there may be words that do not.  Only \
69788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project        ### real packages will be present under PACKAGES.*, though.)
69888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project $(foreach _gpo_name,$(_gpo_names),$(PACKAGES.$(_gpo_name).OVERRIDES))
69988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
70088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
70188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine get-package-overrides
702d7a1a9b49b9d6e8331bcc5b2ece84903a94553deConley Owens$(sort $(strip $(call _get-package-overrides,$(1))))
70388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
70488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
70588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
70688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## Output the command lines, or not
70788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
70888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
70988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectifeq ($(strip $(SHOW_COMMANDS)),)
71088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine pretty
71188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project@echo $1
71288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
71388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projecthide := @
71488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectelse
71588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine pretty
71688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
71788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projecthide :=
71888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendif
71988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
72088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
72188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## Dump the variables that are associated with targets
72288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
72388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
72488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine dump-module-variables
72588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project@echo all_dependencies=$^
72688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project@echo PRIVATE_YACCFLAGS=$(PRIVATE_YACCFLAGS);
72788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project@echo PRIVATE_CFLAGS=$(PRIVATE_CFLAGS);
72888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project@echo PRIVATE_CPPFLAGS=$(PRIVATE_CPPFLAGS);
72988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project@echo PRIVATE_DEBUG_CFLAGS=$(PRIVATE_DEBUG_CFLAGS);
73088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project@echo PRIVATE_C_INCLUDES=$(PRIVATE_C_INCLUDES);
73188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project@echo PRIVATE_LDFLAGS=$(PRIVATE_LDFLAGS);
73288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project@echo PRIVATE_LDLIBS=$(PRIVATE_LDLIBS);
73388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project@echo PRIVATE_ARFLAGS=$(PRIVATE_ARFLAGS);
73488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project@echo PRIVATE_AAPT_FLAGS=$(PRIVATE_AAPT_FLAGS);
73588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project@echo PRIVATE_DX_FLAGS=$(PRIVATE_DX_FLAGS);
736f184a0f26db350693902ab623c414974978f4ac4Brian Carlstrom@echo PRIVATE_JAVACFLAGS=$(PRIVATE_JAVACFLAGS);
73788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project@echo PRIVATE_JAVA_LIBRARIES=$(PRIVATE_JAVA_LIBRARIES);
73888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project@echo PRIVATE_ALL_SHARED_LIBRARIES=$(PRIVATE_ALL_SHARED_LIBRARIES);
73988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project@echo PRIVATE_ALL_STATIC_LIBRARIES=$(PRIVATE_ALL_STATIC_LIBRARIES);
74088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project@echo PRIVATE_ALL_WHOLE_STATIC_LIBRARIES=$(PRIVATE_ALL_WHOLE_STATIC_LIBRARIES);
74188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project@echo PRIVATE_ALL_OBJECTS=$(PRIVATE_ALL_OBJECTS);
742703e7c6d50a5bddf0fb057a1a26618e2f7138c31Jeff Brown@echo PRIVATE_NO_CRT=$(PRIVATE_NO_CRT);
74388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
74488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
74588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
74688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## Commands for using sed to replace given variable values
74788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
74888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
74988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine transform-variables
75088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project@mkdir -p $(dir $@)
75188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project@echo "Sed: $(if $(PRIVATE_MODULE),$(PRIVATE_MODULE),$@) <= $<"
75288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project$(hide) sed $(foreach var,$(REPLACE_VARS),-e "s/{{$(var)}}/$(subst /,\/,$(PWD)/$($(var)))/g") $< >$@
75388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project$(hide) if [ "$(suffix $@)" = ".sh" ]; then chmod a+rx $@; fi
75488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
75588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
75688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
75788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
75888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## Commands for munging the dependency files GCC generates
75988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
760c23f4efdbbb8ce76fd5027ef4e2b6ee316ffeb2bYing Wang# $(1): the input .d file
761c23f4efdbbb8ce76fd5027ef4e2b6ee316ffeb2bYing Wang# $(2): the output .P file
762c23f4efdbbb8ce76fd5027ef4e2b6ee316ffeb2bYing Wangdefine transform-d-to-p-args
763c23f4efdbbb8ce76fd5027ef4e2b6ee316ffeb2bYing Wang$(hide) cp $(1) $(2); \
764c23f4efdbbb8ce76fd5027ef4e2b6ee316ffeb2bYing Wang	sed -e 's/#.*//' -e 's/^[^:]*: *//' -e 's/ *\\$$//' \
765c23f4efdbbb8ce76fd5027ef4e2b6ee316ffeb2bYing Wang		-e '/^$$/ d' -e 's/$$/ :/' < $(1) >> $(2); \
766c23f4efdbbb8ce76fd5027ef4e2b6ee316ffeb2bYing Wang	rm -f $(1)
767c23f4efdbbb8ce76fd5027ef4e2b6ee316ffeb2bYing Wangendef
76888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
76988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine transform-d-to-p
770c23f4efdbbb8ce76fd5027ef4e2b6ee316ffeb2bYing Wang$(call transform-d-to-p-args,$(@:%.o=%.d),$(@:%.o=%.P))
77188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
77288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
77388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
77488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## Commands for running lex
77588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
77688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
77788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine transform-l-to-cpp
77888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project@mkdir -p $(dir $@)
77988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project@echo "Lex: $(PRIVATE_MODULE) <= $<"
78088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project$(hide) $(LEX) -o$@ $<
78188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
78288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
78388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
78488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## Commands for running yacc
78588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project##
78688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## Because the extension of c++ files can change, the
78788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## extension must be specified in $1.
78888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## E.g, "$(call transform-y-to-cpp,.cpp)"
78988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
79088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
79188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine transform-y-to-cpp
79288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project@mkdir -p $(dir $@)
79388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project@echo "Yacc: $(PRIVATE_MODULE) <= $<"
79488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project$(YACC) $(PRIVATE_YACCFLAGS) -o $@ $<
79588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projecttouch $(@:$1=$(YACC_HEADER_SUFFIX))
79688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectecho '#ifndef '$(@F:$1=_h) > $(@:$1=.h)
79788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectecho '#define '$(@F:$1=_h) >> $(@:$1=.h)
79888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectcat $(@:$1=$(YACC_HEADER_SUFFIX)) >> $(@:$1=.h)
79988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectecho '#endif' >> $(@:$1=.h)
80088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectrm -f $(@:$1=$(YACC_HEADER_SUFFIX))
80188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
80288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
8030bd59a0a58f9891926ff6faf74a78307230d705bYing Wang###########################################################
8040bd59a0a58f9891926ff6faf74a78307230d705bYing Wang## Commands to compile RenderScript
8050bd59a0a58f9891926ff6faf74a78307230d705bYing Wang###########################################################
8060bd59a0a58f9891926ff6faf74a78307230d705bYing Wang
8070bd59a0a58f9891926ff6faf74a78307230d705bYing Wangdefine transform-renderscripts-to-java-and-bc
8080bd59a0a58f9891926ff6faf74a78307230d705bYing Wang@echo "RenderScript: $(PRIVATE_MODULE) <= $(PRIVATE_RS_SOURCE_FILES)"
8090bd59a0a58f9891926ff6faf74a78307230d705bYing Wang$(hide) rm -rf $(PRIVATE_RS_OUTPUT_DIR)
8100bd59a0a58f9891926ff6faf74a78307230d705bYing Wang$(hide) mkdir -p $(PRIVATE_RS_OUTPUT_DIR)/res/raw
8110bd59a0a58f9891926ff6faf74a78307230d705bYing Wang$(hide) mkdir -p $(PRIVATE_RS_OUTPUT_DIR)/src
8127d83ef8ff7679239063bb8484f0c1fdcf31abf8bYing Wang$(hide) $(PRIVATE_RS_CC) \
813ebfddaa55bfcc981c767ea9e3ddbf2f30b6046d1Ying Wang  -o $(PRIVATE_RS_OUTPUT_DIR)/res/raw \
814ebfddaa55bfcc981c767ea9e3ddbf2f30b6046d1Ying Wang  -p $(PRIVATE_RS_OUTPUT_DIR)/src \
81524e1c018ba83ce6465aa9faf0347071f271d2425Ying Wang  -d $(PRIVATE_RS_OUTPUT_DIR) \
81624e1c018ba83ce6465aa9faf0347071f271d2425Ying Wang  -a $@ -MD \
817c963eae72ca502ac847fa03e87644c660b868295Stephen Hines  $(addprefix -target-api , $(PRIVATE_RS_TARGET_API)) \
818914f7a2990ef0e02d4632dd77076c6c7bb11e6ddStephen Hines  $(PRIVATE_RS_FLAGS) \
819512802772a2516b817ab463659b62c2e6fa7442cYing Wang  $(foreach inc,$(PRIVATE_RS_INCLUDES),$(addprefix -I , $(inc))) \
820ebfddaa55bfcc981c767ea9e3ddbf2f30b6046d1Ying Wang  $(PRIVATE_RS_SOURCE_FILES)
821c656030f7d97ef86b4b99ab860cf70a283df7924Shih-wei Liao#$(hide) $(LLVM_RS_LINK) \
822c656030f7d97ef86b4b99ab860cf70a283df7924Shih-wei Liao#  $(PRIVATE_RS_OUTPUT_DIR)/res/raw/*.bc
8230bd59a0a58f9891926ff6faf74a78307230d705bYing Wang$(hide) mkdir -p $(dir $@)
8240bd59a0a58f9891926ff6faf74a78307230d705bYing Wang$(hide) touch $@
8250bd59a0a58f9891926ff6faf74a78307230d705bYing Wangendef
8260bd59a0a58f9891926ff6faf74a78307230d705bYing Wang
82788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
82888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
82988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## Commands for running aidl
83088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
83188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
83288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine transform-aidl-to-java
83388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project@mkdir -p $(dir $@)
83488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project@echo "Aidl: $(PRIVATE_MODULE) <= $<"
83588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project$(hide) $(AIDL) -d$(patsubst %.java,%.P,$@) $(PRIVATE_AIDL_FLAGS) $< $@
83688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
83788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#$(AIDL) $(PRIVATE_AIDL_FLAGS) $< - | indent -nut -br -npcs -l1000 > $@
83888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
83988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
8409bd4962af87257c6a97e9026af7e4764394412c2Doug Zongker###########################################################
8419bd4962af87257c6a97e9026af7e4764394412c2Doug Zongker## Commands for running java-event-log-tags.py
8429bd4962af87257c6a97e9026af7e4764394412c2Doug Zongker###########################################################
8439bd4962af87257c6a97e9026af7e4764394412c2Doug Zongker
8449bd4962af87257c6a97e9026af7e4764394412c2Doug Zongkerdefine transform-logtags-to-java
8459bd4962af87257c6a97e9026af7e4764394412c2Doug Zongker@mkdir -p $(dir $@)
8469bd4962af87257c6a97e9026af7e4764394412c2Doug Zongker@echo "logtags: $@ <= $<"
847abfbbe2e1dc0d8dc01b87492427c670dab70f81fDoug Zongker$(hide) $(JAVATAGS) -o $@ $^
8489bd4962af87257c6a97e9026af7e4764394412c2Doug Zongkerendef
8499bd4962af87257c6a97e9026af7e4764394412c2Doug Zongker
85088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
85188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
852a5fc87a93713b1976c5bfdd602d1c6bd285e7533Ying Wang## Commands for running protoc to compile .proto into .java
853a5fc87a93713b1976c5bfdd602d1c6bd285e7533Ying Wang###########################################################
854a5fc87a93713b1976c5bfdd602d1c6bd285e7533Ying Wang
855a5fc87a93713b1976c5bfdd602d1c6bd285e7533Ying Wangdefine transform-proto-to-java
856a5fc87a93713b1976c5bfdd602d1c6bd285e7533Ying Wang@mkdir -p $(dir $@)
857a5fc87a93713b1976c5bfdd602d1c6bd285e7533Ying Wang@echo "Protoc: $@ <= $(PRIVATE_PROTO_SRC_FILES)"
858a5fc87a93713b1976c5bfdd602d1c6bd285e7533Ying Wang@rm -rf $(PRIVATE_PROTO_JAVA_OUTPUT_DIR)
859a5fc87a93713b1976c5bfdd602d1c6bd285e7533Ying Wang@mkdir -p $(PRIVATE_PROTO_JAVA_OUTPUT_DIR)
86020f5efd82caf038697c03daa230345cdda9ae31dBjorn Bringert$(hide) for f in $(PRIVATE_PROTO_SRC_FILES); do \
86120f5efd82caf038697c03daa230345cdda9ae31dBjorn Bringert        $(PROTOC) \
86220f5efd82caf038697c03daa230345cdda9ae31dBjorn Bringert        $(addprefix --proto_path=, $(PRIVATE_PROTO_INCLUDES)) \
86320f5efd82caf038697c03daa230345cdda9ae31dBjorn Bringert        $(PRIVATE_PROTO_JAVA_OUTPUT_OPTION)=$(PRIVATE_PROTO_JAVA_OUTPUT_DIR) \
86420f5efd82caf038697c03daa230345cdda9ae31dBjorn Bringert        $(PRIVATE_PROTOC_FLAGS) \
865707328a3efcf9362bfff87c75831436006140d17Ying Wang        $$f || exit 33; \
86620f5efd82caf038697c03daa230345cdda9ae31dBjorn Bringert        done
867a5fc87a93713b1976c5bfdd602d1c6bd285e7533Ying Wang$(hide) touch $@
868a5fc87a93713b1976c5bfdd602d1c6bd285e7533Ying Wangendef
869a5fc87a93713b1976c5bfdd602d1c6bd285e7533Ying Wang
870a5fc87a93713b1976c5bfdd602d1c6bd285e7533Ying Wang######################################################################
871a5fc87a93713b1976c5bfdd602d1c6bd285e7533Ying Wang## Commands for running protoc to compile .proto into .pb.cc and .pb.h
872a5fc87a93713b1976c5bfdd602d1c6bd285e7533Ying Wang######################################################################
873a5fc87a93713b1976c5bfdd602d1c6bd285e7533Ying Wangdefine transform-proto-to-cc
874a5fc87a93713b1976c5bfdd602d1c6bd285e7533Ying Wang@mkdir -p $(dir $@)
875a5fc87a93713b1976c5bfdd602d1c6bd285e7533Ying Wang@echo "Protoc: $@ <= $<"
876a5fc87a93713b1976c5bfdd602d1c6bd285e7533Ying Wang$(hide) $(PROTOC) \
877a5fc87a93713b1976c5bfdd602d1c6bd285e7533Ying Wang	$(addprefix --proto_path=, $(PRIVATE_PROTO_INCLUDES)) \
87833c0d952fcba713f00c1cafc8213274e642aee4cYing Wang	$(PRIVATE_PROTOC_FLAGS) \
879a5fc87a93713b1976c5bfdd602d1c6bd285e7533Ying Wang	--cpp_out=$(PRIVATE_PROTO_CC_OUTPUT_DIR) $<
880a5fc87a93713b1976c5bfdd602d1c6bd285e7533Ying Wangendef
881a5fc87a93713b1976c5bfdd602d1c6bd285e7533Ying Wang
882a5fc87a93713b1976c5bfdd602d1c6bd285e7533Ying Wang
883a5fc87a93713b1976c5bfdd602d1c6bd285e7533Ying Wang###########################################################
88488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## Commands for running gcc to compile a C++ file
88588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
88688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
88788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine transform-cpp-to-o
88888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project@mkdir -p $(dir $@)
88988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project@echo "target $(PRIVATE_ARM_MODE) C++: $(PRIVATE_MODULE) <= $<"
89088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project$(hide) $(PRIVATE_CXX) \
891ddbcad8c852980aabd2c7b02b909726d5c697182Ying Wang	$(addprefix -I , $(PRIVATE_C_INCLUDES)) \
89285f3b219719657150c5bb63663983ea5a18be662Andrew Boie	$(shell cat $(PRIVATE_IMPORT_INCLUDES)) \
8934761e56a7175db89b98b6ac07a978f54dcc78213Ying Wang	$(addprefix -isystem ,\
8944761e56a7175db89b98b6ac07a978f54dcc78213Ying Wang	    $(if $(PRIVATE_NO_DEFAULT_COMPILER_FLAGS),, \
8954761e56a7175db89b98b6ac07a978f54dcc78213Ying Wang	        $(filter-out $(PRIVATE_C_INCLUDES), \
896ddbcad8c852980aabd2c7b02b909726d5c697182Ying Wang	            $(PRIVATE_TARGET_PROJECT_INCLUDES) \
8974761e56a7175db89b98b6ac07a978f54dcc78213Ying Wang	            $(PRIVATE_TARGET_C_INCLUDES)))) \
89888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project	-c \
89988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project	$(if $(PRIVATE_NO_DEFAULT_COMPILER_FLAGS),, \
9001a08100fa9d92c25de32ba4d13fd3958bbcab894Ying Wang	    $(PRIVATE_TARGET_GLOBAL_CFLAGS) \
9011a08100fa9d92c25de32ba4d13fd3958bbcab894Ying Wang	    $(PRIVATE_TARGET_GLOBAL_CPPFLAGS) \
90288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project	    $(PRIVATE_ARM_CFLAGS) \
90388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project	 ) \
9049a8ecf970bf53f7f43a8722212ff4b217a6bb403Doug Kwan	$(PRIVATE_RTTI_FLAG) \
90588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project	$(PRIVATE_CFLAGS) \
90688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project	$(PRIVATE_CPPFLAGS) \
90788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project	$(PRIVATE_DEBUG_CFLAGS) \
90860fe963c63c1b98255ad1cf40573b81b5d90d9c3Atte Peltomaki	-MD -MF $(patsubst %.o,%.d,$@) -o $@ $<
9093a7e4ccad9c910ac798a8c324f7718d137bd7692Ying Wang$(transform-d-to-p)
91088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
91188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
91288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
91388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
91488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## Commands for running gcc to compile a C file
91588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
91688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
91788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# $(1): extra flags
91888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine transform-c-or-s-to-o-no-deps
91988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project@mkdir -p $(dir $@)
92088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project$(hide) $(PRIVATE_CC) \
921ddbcad8c852980aabd2c7b02b909726d5c697182Ying Wang	$(addprefix -I , $(PRIVATE_C_INCLUDES)) \
92285f3b219719657150c5bb63663983ea5a18be662Andrew Boie	$(shell cat $(PRIVATE_IMPORT_INCLUDES)) \
9234761e56a7175db89b98b6ac07a978f54dcc78213Ying Wang	$(addprefix -isystem ,\
9244761e56a7175db89b98b6ac07a978f54dcc78213Ying Wang	    $(if $(PRIVATE_NO_DEFAULT_COMPILER_FLAGS),, \
9254761e56a7175db89b98b6ac07a978f54dcc78213Ying Wang	        $(filter-out $(PRIVATE_C_INCLUDES), \
926ddbcad8c852980aabd2c7b02b909726d5c697182Ying Wang	            $(PRIVATE_TARGET_PROJECT_INCLUDES) \
9274761e56a7175db89b98b6ac07a978f54dcc78213Ying Wang	            $(PRIVATE_TARGET_C_INCLUDES)))) \
92888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project	-c \
92988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project	$(if $(PRIVATE_NO_DEFAULT_COMPILER_FLAGS),, \
9301a08100fa9d92c25de32ba4d13fd3958bbcab894Ying Wang	    $(PRIVATE_TARGET_GLOBAL_CFLAGS) \
93188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project	    $(PRIVATE_ARM_CFLAGS) \
93288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project	 ) \
93388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project	$(PRIVATE_CFLAGS) \
93488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project	$(1) \
93588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project	$(PRIVATE_DEBUG_CFLAGS) \
93660fe963c63c1b98255ad1cf40573b81b5d90d9c3Atte Peltomaki	-MD -MF $(patsubst %.o,%.d,$@) -o $@ $<
93788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
93888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
93988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine transform-c-to-o-no-deps
94088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project@echo "target $(PRIVATE_ARM_MODE) C: $(PRIVATE_MODULE) <= $<"
94188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project$(call transform-c-or-s-to-o-no-deps, )
94288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
94388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
94488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine transform-s-to-o-no-deps
94588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project@echo "target asm: $(PRIVATE_MODULE) <= $<"
94688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project$(call transform-c-or-s-to-o-no-deps, $(PRIVATE_ASFLAGS))
94788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
94888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
94988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine transform-c-to-o
95088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project$(transform-c-to-o-no-deps)
9513a7e4ccad9c910ac798a8c324f7718d137bd7692Ying Wang$(transform-d-to-p)
95288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
95388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
95488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine transform-s-to-o
95588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project$(transform-s-to-o-no-deps)
9563a7e4ccad9c910ac798a8c324f7718d137bd7692Ying Wang$(transform-d-to-p)
95788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
95888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
95988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
9605dbb529de9f84e731e26b83525f3f599f1914acaDavid 'Digit' Turner## Commands for running gcc to compile an Objective-C file
9615dbb529de9f84e731e26b83525f3f599f1914acaDavid 'Digit' Turner## This should never happen for target builds but this
9625dbb529de9f84e731e26b83525f3f599f1914acaDavid 'Digit' Turner## will error at build time.
9635dbb529de9f84e731e26b83525f3f599f1914acaDavid 'Digit' Turner###########################################################
9645dbb529de9f84e731e26b83525f3f599f1914acaDavid 'Digit' Turner
9655dbb529de9f84e731e26b83525f3f599f1914acaDavid 'Digit' Turnerdefine transform-m-to-o-no-deps
9665dbb529de9f84e731e26b83525f3f599f1914acaDavid 'Digit' Turner@echo "target ObjC: $(PRIVATE_MODULE) <= $<"
9675dbb529de9f84e731e26b83525f3f599f1914acaDavid 'Digit' Turner$(call transform-c-or-s-to-o-no-deps)
9685dbb529de9f84e731e26b83525f3f599f1914acaDavid 'Digit' Turnerendef
9695dbb529de9f84e731e26b83525f3f599f1914acaDavid 'Digit' Turner
9705dbb529de9f84e731e26b83525f3f599f1914acaDavid 'Digit' Turnerdefine transform-m-to-o
9715dbb529de9f84e731e26b83525f3f599f1914acaDavid 'Digit' Turner$(transform-m-to-o-no-deps)
9723a7e4ccad9c910ac798a8c324f7718d137bd7692Ying Wang$(transform-d-to-p)
9735dbb529de9f84e731e26b83525f3f599f1914acaDavid 'Digit' Turnerendef
9745dbb529de9f84e731e26b83525f3f599f1914acaDavid 'Digit' Turner
9755dbb529de9f84e731e26b83525f3f599f1914acaDavid 'Digit' Turner###########################################################
97688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## Commands for running gcc to compile a host C++ file
97788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
97888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
97988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine transform-host-cpp-to-o
98088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project@mkdir -p $(dir $@)
98188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project@echo "host C++: $(PRIVATE_MODULE) <= $<"
98288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project$(hide) $(PRIVATE_CXX) \
983ddbcad8c852980aabd2c7b02b909726d5c697182Ying Wang	$(addprefix -I , $(PRIVATE_C_INCLUDES)) \
98485f3b219719657150c5bb63663983ea5a18be662Andrew Boie	$(shell cat $(PRIVATE_IMPORT_INCLUDES)) \
985ddbcad8c852980aabd2c7b02b909726d5c697182Ying Wang	$(addprefix -isystem ,\
98688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project	    $(if $(PRIVATE_NO_DEFAULT_COMPILER_FLAGS),, \
987ddbcad8c852980aabd2c7b02b909726d5c697182Ying Wang	        $(filter-out $(PRIVATE_C_INCLUDES), \
988ddbcad8c852980aabd2c7b02b909726d5c697182Ying Wang	            $(HOST_PROJECT_INCLUDES) \
989ddbcad8c852980aabd2c7b02b909726d5c697182Ying Wang	            $(HOST_C_INCLUDES)))) \
99088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project	-c \
99188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project	$(if $(PRIVATE_NO_DEFAULT_COMPILER_FLAGS),, \
99288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project	    $(HOST_GLOBAL_CFLAGS) \
99388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project	    $(HOST_GLOBAL_CPPFLAGS) \
99488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project	 ) \
99588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project	$(PRIVATE_CFLAGS) \
99688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project	$(PRIVATE_CPPFLAGS) \
99788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project	$(PRIVATE_DEBUG_CFLAGS) \
99860fe963c63c1b98255ad1cf40573b81b5d90d9c3Atte Peltomaki	-MD -MF $(patsubst %.o,%.d,$@) -o $@ $<
99988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project$(transform-d-to-p)
100088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
100188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
100288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
100388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
100488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## Commands for running gcc to compile a host C file
100588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
100688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
100788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# $(1): extra flags
100888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine transform-host-c-or-s-to-o-no-deps
100988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project@mkdir -p $(dir $@)
101088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project$(hide) $(PRIVATE_CC) \
1011ddbcad8c852980aabd2c7b02b909726d5c697182Ying Wang	$(addprefix -I , $(PRIVATE_C_INCLUDES)) \
101285f3b219719657150c5bb63663983ea5a18be662Andrew Boie	$(shell cat $(PRIVATE_IMPORT_INCLUDES)) \
1013ddbcad8c852980aabd2c7b02b909726d5c697182Ying Wang	$(addprefix -isystem ,\
101488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project	    $(if $(PRIVATE_NO_DEFAULT_COMPILER_FLAGS),, \
1015ddbcad8c852980aabd2c7b02b909726d5c697182Ying Wang	        $(filter-out $(PRIVATE_C_INCLUDES), \
1016ddbcad8c852980aabd2c7b02b909726d5c697182Ying Wang	            $(HOST_PROJECT_INCLUDES) \
1017ddbcad8c852980aabd2c7b02b909726d5c697182Ying Wang	            $(HOST_C_INCLUDES)))) \
101888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project	-c \
101988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project	$(if $(PRIVATE_NO_DEFAULT_COMPILER_FLAGS),, \
102088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project	    $(HOST_GLOBAL_CFLAGS) \
102188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project	 ) \
102288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project	$(PRIVATE_CFLAGS) \
102388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project	$(1) \
102488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project	$(PRIVATE_DEBUG_CFLAGS) \
102560fe963c63c1b98255ad1cf40573b81b5d90d9c3Atte Peltomaki	-MD -MF $(patsubst %.o,%.d,$@) -o $@ $<
102688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
102788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
102888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine transform-host-c-to-o-no-deps
102988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project@echo "host C: $(PRIVATE_MODULE) <= $<"
103088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project$(call transform-host-c-or-s-to-o-no-deps, )
103188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
103288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
103388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine transform-host-s-to-o-no-deps
103488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project@echo "host asm: $(PRIVATE_MODULE) <= $<"
103588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project$(call transform-host-c-or-s-to-o-no-deps, $(PRIVATE_ASFLAGS))
103688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
103788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
103888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine transform-host-c-to-o
103988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project$(transform-host-c-to-o-no-deps)
104088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project$(transform-d-to-p)
104188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
104288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
104388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine transform-host-s-to-o
104488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project$(transform-host-s-to-o-no-deps)
104588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project$(transform-d-to-p)
10465dbb529de9f84e731e26b83525f3f599f1914acaDavid 'Digit' Turnerendef
10475dbb529de9f84e731e26b83525f3f599f1914acaDavid 'Digit' Turner
10485dbb529de9f84e731e26b83525f3f599f1914acaDavid 'Digit' Turner###########################################################
10495dbb529de9f84e731e26b83525f3f599f1914acaDavid 'Digit' Turner## Commands for running gcc to compile a host Objective-C file
10505dbb529de9f84e731e26b83525f3f599f1914acaDavid 'Digit' Turner###########################################################
10515dbb529de9f84e731e26b83525f3f599f1914acaDavid 'Digit' Turner
10525dbb529de9f84e731e26b83525f3f599f1914acaDavid 'Digit' Turnerdefine transform-host-m-to-o-no-deps
10535dbb529de9f84e731e26b83525f3f599f1914acaDavid 'Digit' Turner@echo "host ObjC: $(PRIVATE_MODULE) <= $<"
10545dbb529de9f84e731e26b83525f3f599f1914acaDavid 'Digit' Turner$(call transform-host-c-or-s-to-o-no-deps)
10555dbb529de9f84e731e26b83525f3f599f1914acaDavid 'Digit' Turnerendef
10565dbb529de9f84e731e26b83525f3f599f1914acaDavid 'Digit' Turner
10575ca286d58bc2f8e2445ae77d7ca8b4046a016988David 'Digit' Turnerdefine transform-host-m-to-o
10585dbb529de9f84e731e26b83525f3f599f1914acaDavid 'Digit' Turner$(transform-host-m-to-o-no-deps)
10595dbb529de9f84e731e26b83525f3f599f1914acaDavid 'Digit' Turner$(transform-d-to-p)
106088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
106188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
106288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
106388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## Commands for running ar
106488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
106588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
1066e4b24ebab8757ce52a1bd3b3b9986e4d253f0166Ying Wangdefine _concat-if-arg2-not-empty
1067e4b24ebab8757ce52a1bd3b3b9986e4d253f0166Ying Wang$(if $(2),$(hide) $(1) $(2))
1068e4b24ebab8757ce52a1bd3b3b9986e4d253f0166Ying Wangendef
1069e4b24ebab8757ce52a1bd3b3b9986e4d253f0166Ying Wang
1070e4b24ebab8757ce52a1bd3b3b9986e4d253f0166Ying Wang# Split long argument list into smaller groups and call the command repeatedly
1071bffaef246a5b838eb40a642463b1186935424faeTorne (Richard Coles)# Call the command at least once even if there are no arguments, as otherwise
1072bffaef246a5b838eb40a642463b1186935424faeTorne (Richard Coles)# the output file won't be created.
1073e4b24ebab8757ce52a1bd3b3b9986e4d253f0166Ying Wang#
1074e4b24ebab8757ce52a1bd3b3b9986e4d253f0166Ying Wang# $(1): the command without arguments
1075e4b24ebab8757ce52a1bd3b3b9986e4d253f0166Ying Wang# $(2): the arguments
1076e4b24ebab8757ce52a1bd3b3b9986e4d253f0166Ying Wangdefine split-long-arguments
1077bffaef246a5b838eb40a642463b1186935424faeTorne (Richard Coles)$(hide) $(1) $(wordlist 1,500,$(2))
1078e4b24ebab8757ce52a1bd3b3b9986e4d253f0166Ying Wang$(call _concat-if-arg2-not-empty,$(1),$(wordlist 501,1000,$(2)))
1079e4b24ebab8757ce52a1bd3b3b9986e4d253f0166Ying Wang$(call _concat-if-arg2-not-empty,$(1),$(wordlist 1001,1500,$(2)))
1080e4b24ebab8757ce52a1bd3b3b9986e4d253f0166Ying Wang$(call _concat-if-arg2-not-empty,$(1),$(wordlist 1501,2000,$(2)))
1081e4b24ebab8757ce52a1bd3b3b9986e4d253f0166Ying Wang$(call _concat-if-arg2-not-empty,$(1),$(wordlist 2001,2500,$(2)))
1082e4b24ebab8757ce52a1bd3b3b9986e4d253f0166Ying Wang$(call _concat-if-arg2-not-empty,$(1),$(wordlist 2501,3000,$(2)))
1083e4b24ebab8757ce52a1bd3b3b9986e4d253f0166Ying Wang$(call _concat-if-arg2-not-empty,$(1),$(wordlist 3001,99999,$(2)))
1084e4b24ebab8757ce52a1bd3b3b9986e4d253f0166Ying Wangendef
1085e4b24ebab8757ce52a1bd3b3b9986e4d253f0166Ying Wang
1086a02d3d9f746a0cd267bd793fca256f355111484bYing Wang# $(1): the full path of the source static library.
1087a02d3d9f746a0cd267bd793fca256f355111484bYing Wangdefine _extract-and-include-single-target-whole-static-lib
1088a02d3d9f746a0cd267bd793fca256f355111484bYing Wang@echo "preparing StaticLib: $(PRIVATE_MODULE) [including $(1)]"
1089a02d3d9f746a0cd267bd793fca256f355111484bYing Wang$(hide) ldir=$(PRIVATE_INTERMEDIATES_DIR)/WHOLE/$(basename $(notdir $(1)))_objs;\
1090a02d3d9f746a0cd267bd793fca256f355111484bYing Wang    rm -rf $$ldir; \
1091a02d3d9f746a0cd267bd793fca256f355111484bYing Wang    mkdir -p $$ldir; \
1092a02d3d9f746a0cd267bd793fca256f355111484bYing Wang    filelist=; \
1093a02d3d9f746a0cd267bd793fca256f355111484bYing Wang    for f in `$(TARGET_AR) t $(1)`; do \
1094a02d3d9f746a0cd267bd793fca256f355111484bYing Wang        $(TARGET_AR) p $(1) $$f > $$ldir/$$f; \
1095a02d3d9f746a0cd267bd793fca256f355111484bYing Wang        filelist="$$filelist $$ldir/$$f"; \
1096a02d3d9f746a0cd267bd793fca256f355111484bYing Wang    done ; \
1097a02d3d9f746a0cd267bd793fca256f355111484bYing Wang    $(TARGET_AR) $(TARGET_GLOBAL_ARFLAGS) $(PRIVATE_ARFLAGS) $@ $$filelist
1098a02d3d9f746a0cd267bd793fca256f355111484bYing Wang
1099a02d3d9f746a0cd267bd793fca256f355111484bYing Wangendef
1100a02d3d9f746a0cd267bd793fca256f355111484bYing Wang
11013d02eacbdef0c1a0c0725d10628bec13f4139be9Dan Bornsteindefine extract-and-include-target-whole-static-libs
110246e9beca50057bd4ff375b35fd5958c05ce5bcb7Dima Zavin$(foreach lib,$(PRIVATE_ALL_WHOLE_STATIC_LIBRARIES), \
1103a02d3d9f746a0cd267bd793fca256f355111484bYing Wang    $(call _extract-and-include-single-target-whole-static-lib, $(lib)))
110446e9beca50057bd4ff375b35fd5958c05ce5bcb7Dima Zavinendef
110546e9beca50057bd4ff375b35fd5958c05ce5bcb7Dima Zavin
110688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# Explicitly delete the archive first so that ar doesn't
110788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# try to add to an existing archive.
110888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine transform-o-to-static-lib
110988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project@mkdir -p $(dir $@)
111088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project@rm -f $@
11113d02eacbdef0c1a0c0725d10628bec13f4139be9Dan Bornstein$(extract-and-include-target-whole-static-libs)
111246e9beca50057bd4ff375b35fd5958c05ce5bcb7Dima Zavin@echo "target StaticLib: $(PRIVATE_MODULE) ($@)"
1113e4b24ebab8757ce52a1bd3b3b9986e4d253f0166Ying Wang$(call split-long-arguments,$(TARGET_AR) $(TARGET_GLOBAL_ARFLAGS) $(PRIVATE_ARFLAGS) $@,$(filter %.o, $^))
111488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
111588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
111688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
111788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## Commands for running host ar
111888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
111988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
1120a02d3d9f746a0cd267bd793fca256f355111484bYing Wang# $(1): the full path of the source static library.
1121a02d3d9f746a0cd267bd793fca256f355111484bYing Wangdefine _extract-and-include-single-host-whole-static-lib
1122a02d3d9f746a0cd267bd793fca256f355111484bYing Wang@echo "preparing StaticLib: $(PRIVATE_MODULE) [including $(1)]"
1123a02d3d9f746a0cd267bd793fca256f355111484bYing Wang$(hide) ldir=$(PRIVATE_INTERMEDIATES_DIR)/WHOLE/$(basename $(notdir $(1)))_objs;\
1124a02d3d9f746a0cd267bd793fca256f355111484bYing Wang    rm -rf $$ldir; \
1125a02d3d9f746a0cd267bd793fca256f355111484bYing Wang    mkdir -p $$ldir; \
1126a02d3d9f746a0cd267bd793fca256f355111484bYing Wang    filelist=; \
1127293f9392ba39115a9429b5c8f98a5ca4054b3e21Jeff Hamilton    for f in `$(HOST_AR) t $(1) | \grep '\.o$$'`; do \
1128a02d3d9f746a0cd267bd793fca256f355111484bYing Wang        $(HOST_AR) p $(1) $$f > $$ldir/$$f; \
1129a02d3d9f746a0cd267bd793fca256f355111484bYing Wang        filelist="$$filelist $$ldir/$$f"; \
1130a02d3d9f746a0cd267bd793fca256f355111484bYing Wang    done ; \
1131a02d3d9f746a0cd267bd793fca256f355111484bYing Wang    $(HOST_AR) $(HOST_GLOBAL_ARFLAGS) $(PRIVATE_ARFLAGS) $@ $$filelist
1132a02d3d9f746a0cd267bd793fca256f355111484bYing Wang
1133a02d3d9f746a0cd267bd793fca256f355111484bYing Wangendef
1134a02d3d9f746a0cd267bd793fca256f355111484bYing Wang
11353d02eacbdef0c1a0c0725d10628bec13f4139be9Dan Bornsteindefine extract-and-include-host-whole-static-libs
11363d02eacbdef0c1a0c0725d10628bec13f4139be9Dan Bornstein$(foreach lib,$(PRIVATE_ALL_WHOLE_STATIC_LIBRARIES), \
1137a02d3d9f746a0cd267bd793fca256f355111484bYing Wang    $(call _extract-and-include-single-host-whole-static-lib, $(lib)))
11383d02eacbdef0c1a0c0725d10628bec13f4139be9Dan Bornsteinendef
11393d02eacbdef0c1a0c0725d10628bec13f4139be9Dan Bornstein
114088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# Explicitly delete the archive first so that ar doesn't
114188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# try to add to an existing archive.
114288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine transform-host-o-to-static-lib
114388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project@mkdir -p $(dir $@)
114488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project@rm -f $@
11453d02eacbdef0c1a0c0725d10628bec13f4139be9Dan Bornstein$(extract-and-include-host-whole-static-libs)
11466bffc91c5d85ee828b37fa56efb7d87a76214747Dan Bornstein@echo "host StaticLib: $(PRIVATE_MODULE) ($@)"
1147e4b24ebab8757ce52a1bd3b3b9986e4d253f0166Ying Wang$(call split-long-arguments,$(HOST_AR) $(HOST_GLOBAL_ARFLAGS) $(PRIVATE_ARFLAGS) $@,$(filter %.o, $^))
114888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
114988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
115088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
115188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
115288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## Commands for running gcc to link a shared library or package
115388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
115488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
115588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# ld just seems to be so finicky with command order that we allow
115688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# it to be overriden en-masse see combo/linux-arm.make for an example.
115788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectifneq ($(HOST_CUSTOM_LD_COMMAND),true)
115888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine transform-host-o-to-shared-lib-inner
11593a7e4ccad9c910ac798a8c324f7718d137bd7692Ying Wang$(hide) $(PRIVATE_CXX) \
116080e6cce93e36787be9123f9b5dc91da1a0d2f472Ying Wang	-Wl,-rpath-link=$(HOST_OUT_INTERMEDIATE_LIBRARIES) \
116188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project	-Wl,-rpath,\$$ORIGIN/../lib \
116288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project	-shared -Wl,-soname,$(notdir $@) \
116388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project	$(PRIVATE_LDFLAGS) \
116488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project	$(HOST_GLOBAL_LD_DIRS) \
116588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project	$(if $(PRIVATE_NO_DEFAULT_COMPILER_FLAGS),, \
116688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project	   $(HOST_GLOBAL_LDFLAGS) \
116788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project	) \
116888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project	$(PRIVATE_ALL_OBJECTS) \
116988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project	-Wl,--whole-archive \
117088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project	$(call normalize-host-libraries,$(PRIVATE_ALL_WHOLE_STATIC_LIBRARIES)) \
117188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project	-Wl,--no-whole-archive \
1172fcdabd4bdbb347399e77d2fd4b1aefd6281d75f8Ying Wang	$(if $(PRIVATE_GROUP_STATIC_LIBRARIES),-Wl$(comma)--start-group) \
117388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project	$(call normalize-host-libraries,$(PRIVATE_ALL_STATIC_LIBRARIES)) \
1174fcdabd4bdbb347399e77d2fd4b1aefd6281d75f8Ying Wang	$(if $(PRIVATE_GROUP_STATIC_LIBRARIES),-Wl$(comma)--end-group) \
117588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project	$(call normalize-host-libraries,$(PRIVATE_ALL_SHARED_LIBRARIES)) \
117688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project	-o $@ \
117788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project	$(PRIVATE_LDLIBS)
117888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
117988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendif
118088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
118188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine transform-host-o-to-shared-lib
118288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project@mkdir -p $(dir $@)
118388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project@echo "host SharedLib: $(PRIVATE_MODULE) ($@)"
11843a7e4ccad9c910ac798a8c324f7718d137bd7692Ying Wang$(transform-host-o-to-shared-lib-inner)
118588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
118688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
118788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine transform-host-o-to-package
118888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project@mkdir -p $(dir $@)
118988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project@echo "host Package: $(PRIVATE_MODULE) ($@)"
11903a7e4ccad9c910ac798a8c324f7718d137bd7692Ying Wang$(transform-host-o-to-shared-lib-inner)
119188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
119288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
119388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
119488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
119588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## Commands for running gcc to link a shared library or package
119688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
119788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
119888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#echo >$@.vers "{"; \
119988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#echo >>$@.vers " global:"; \
120088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#$(BUILD_SYSTEM)/filter_symbols.sh $(TARGET_NM) "  " ";" $(filter %.o,$^) | sort -u >>$@.vers; \
120188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#echo >>$@.vers " local:"; \
120288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#echo >>$@.vers "  *;"; \
120388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#echo >>$@.vers "};"; \
120488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
120588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#	-Wl,--version-script=$@.vers \
120688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
120788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# ld just seems to be so finicky with command order that we allow
120888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# it to be overriden en-masse see combo/linux-arm.make for an example.
120988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectifneq ($(TARGET_CUSTOM_LD_COMMAND),true)
121088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine transform-o-to-shared-lib-inner
12113a7e4ccad9c910ac798a8c324f7718d137bd7692Ying Wang$(hide) $(PRIVATE_CXX) \
12121a08100fa9d92c25de32ba4d13fd3958bbcab894Ying Wang	$(PRIVATE_TARGET_GLOBAL_LDFLAGS) \
121388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project	-Wl,-rpath-link=$(TARGET_OUT_INTERMEDIATE_LIBRARIES) \
121488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project	-Wl,-rpath,\$$ORIGIN/../lib \
121588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project	-shared -Wl,-soname,$(notdir $@) \
121688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project	$(PRIVATE_LDFLAGS) \
12171a08100fa9d92c25de32ba4d13fd3958bbcab894Ying Wang	$(PRIVATE_TARGET_GLOBAL_LD_DIRS) \
121888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project	$(PRIVATE_ALL_OBJECTS) \
121988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project	-Wl,--whole-archive \
122080e6cce93e36787be9123f9b5dc91da1a0d2f472Ying Wang	$(call normalize-target-libraries,$(PRIVATE_ALL_WHOLE_STATIC_LIBRARIES)) \
122188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project	-Wl,--no-whole-archive \
1222fcdabd4bdbb347399e77d2fd4b1aefd6281d75f8Ying Wang	$(if $(PRIVATE_GROUP_STATIC_LIBRARIES),-Wl$(comma)--start-group) \
122388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project	$(call normalize-target-libraries,$(PRIVATE_ALL_STATIC_LIBRARIES)) \
1224fcdabd4bdbb347399e77d2fd4b1aefd6281d75f8Ying Wang	$(if $(PRIVATE_GROUP_STATIC_LIBRARIES),-Wl$(comma)--end-group) \
122588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project	$(call normalize-target-libraries,$(PRIVATE_ALL_SHARED_LIBRARIES)) \
122688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project	-o $@ \
122788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project	$(PRIVATE_LDLIBS)
122888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
122988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendif
123088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
123188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine transform-o-to-shared-lib
123288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project@mkdir -p $(dir $@)
123388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project@echo "target SharedLib: $(PRIVATE_MODULE) ($@)"
12343a7e4ccad9c910ac798a8c324f7718d137bd7692Ying Wang$(transform-o-to-shared-lib-inner)
123588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
123688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
123788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine transform-o-to-package
123888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project@mkdir -p $(dir $@)
123988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project@echo "target Package: $(PRIVATE_MODULE) ($@)"
12403a7e4ccad9c910ac798a8c324f7718d137bd7692Ying Wang$(transform-o-to-shared-lib-inner)
124188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
124288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
124388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
124488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
124588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## Commands for filtering a target executable or library
124688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
124788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
124888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine transform-to-stripped
124988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project@mkdir -p $(dir $@)
125088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project@echo "target Strip: $(PRIVATE_MODULE) ($@)"
125145ac4341515f7ff4d483cfb8e2fba8d3c2cb1f6eBruce Beare$(hide) $(TARGET_STRIP_COMMAND)
125288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
125388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
125488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
125588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
125688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## Commands for running gcc to link an executable
125788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
125888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
125988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectifneq ($(TARGET_CUSTOM_LD_COMMAND),true)
126088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine transform-o-to-executable-inner
12613a7e4ccad9c910ac798a8c324f7718d137bd7692Ying Wang$(hide) $(PRIVATE_CXX) \
126257ddcb1bbce7a980e677dfd212ce76229fe33f55Ying Wang	$(PRIVATE_TARGET_GLOBAL_LDFLAGS) \
126357ddcb1bbce7a980e677dfd212ce76229fe33f55Ying Wang	$(PRIVATE_TARGET_GLOBAL_LD_DIRS) \
126488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project	-Wl,-rpath-link=$(TARGET_OUT_INTERMEDIATE_LIBRARIES) \
126588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project	-Wl,-rpath,\$$ORIGIN/../lib \
126688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project	$(PRIVATE_LDFLAGS) \
126788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project	$(PRIVATE_ALL_OBJECTS) \
126888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project	-Wl,--whole-archive \
126988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project	$(call normalize-target-libraries,$(PRIVATE_ALL_WHOLE_STATIC_LIBRARIES)) \
127088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project	-Wl,--no-whole-archive \
1271fcdabd4bdbb347399e77d2fd4b1aefd6281d75f8Ying Wang	$(if $(PRIVATE_GROUP_STATIC_LIBRARIES),-Wl$(comma)--start-group) \
127288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project	$(call normalize-target-libraries,$(PRIVATE_ALL_STATIC_LIBRARIES)) \
1273fcdabd4bdbb347399e77d2fd4b1aefd6281d75f8Ying Wang	$(if $(PRIVATE_GROUP_STATIC_LIBRARIES),-Wl$(comma)--end-group) \
127488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project	$(call normalize-target-libraries,$(PRIVATE_ALL_SHARED_LIBRARIES)) \
127588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project	-o $@ \
127688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project	$(PRIVATE_LDLIBS)
127788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
127888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendif
127988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
128088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine transform-o-to-executable
128188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project@mkdir -p $(dir $@)
128288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project@echo "target Executable: $(PRIVATE_MODULE) ($@)"
12833a7e4ccad9c910ac798a8c324f7718d137bd7692Ying Wang$(transform-o-to-executable-inner)
128488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
128588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
128688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
128788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
128888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## Commands for running gcc to link a statically linked
128988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## executable.  In practice, we only use this on arm, so
129088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## the other platforms don't have the
129188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## transform-o-to-static-executable defined
129288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
129388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
129488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectifneq ($(TARGET_CUSTOM_LD_COMMAND),true)
129588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine transform-o-to-static-executable-inner
129688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
129788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendif
129888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
129988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine transform-o-to-static-executable
130088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project@mkdir -p $(dir $@)
130188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project@echo "target StaticExecutable: $(PRIVATE_MODULE) ($@)"
13023a7e4ccad9c910ac798a8c324f7718d137bd7692Ying Wang$(transform-o-to-static-executable-inner)
130388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
130488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
130588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
130688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
130788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## Commands for running gcc to link a host executable
130888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
130988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
131088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectifneq ($(HOST_CUSTOM_LD_COMMAND),true)
131188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine transform-host-o-to-executable-inner
13123a7e4ccad9c910ac798a8c324f7718d137bd7692Ying Wang$(hide) $(PRIVATE_CXX) \
131388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project	$(PRIVATE_ALL_OBJECTS) \
131488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project	-Wl,--whole-archive \
131588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project	$(call normalize-host-libraries,$(PRIVATE_ALL_WHOLE_STATIC_LIBRARIES)) \
131688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project	-Wl,--no-whole-archive \
1317fcdabd4bdbb347399e77d2fd4b1aefd6281d75f8Ying Wang	$(if $(PRIVATE_GROUP_STATIC_LIBRARIES),-Wl$(comma)--start-group) \
131888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project	$(call normalize-host-libraries,$(PRIVATE_ALL_STATIC_LIBRARIES)) \
1319fcdabd4bdbb347399e77d2fd4b1aefd6281d75f8Ying Wang	$(if $(PRIVATE_GROUP_STATIC_LIBRARIES),-Wl$(comma)--end-group) \
132088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project	$(call normalize-host-libraries,$(PRIVATE_ALL_SHARED_LIBRARIES)) \
1321d9e7d257416a4c85f575161c10c589b3656db3e9Conley Owens	-Wl,-rpath-link=$(HOST_OUT_INTERMEDIATE_LIBRARIES) \
1322d9e7d257416a4c85f575161c10c589b3656db3e9Conley Owens	-Wl,-rpath,\$$ORIGIN/../lib \
1323d9e7d257416a4c85f575161c10c589b3656db3e9Conley Owens	$(HOST_GLOBAL_LD_DIRS) \
1324d9e7d257416a4c85f575161c10c589b3656db3e9Conley Owens	$(PRIVATE_LDFLAGS) \
1325d9e7d257416a4c85f575161c10c589b3656db3e9Conley Owens	$(if $(PRIVATE_NO_DEFAULT_COMPILER_FLAGS),, \
1326d9e7d257416a4c85f575161c10c589b3656db3e9Conley Owens		$(HOST_GLOBAL_LDFLAGS) \
1327d9e7d257416a4c85f575161c10c589b3656db3e9Conley Owens	) \
132888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project	-o $@ \
132988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project	$(PRIVATE_LDLIBS)
133088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
133188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendif
133288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
133388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine transform-host-o-to-executable
133488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project@mkdir -p $(dir $@)
133588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project@echo "host Executable: $(PRIVATE_MODULE) ($@)"
13363a7e4ccad9c910ac798a8c324f7718d137bd7692Ying Wang$(transform-host-o-to-executable-inner)
133788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
133888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
133988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
134088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
134188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## Commands for running javac to make .class files
134288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
134388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
134488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#@echo "Source intermediates dir: $(PRIVATE_SOURCE_INTERMEDIATES_DIR)"
134588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#@echo "Source intermediates: $$(find $(PRIVATE_SOURCE_INTERMEDIATES_DIR) -name '*.java')"
134688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
134788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# TODO: Right now we generate the asset resources twice, first as part
134888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# of generating the Java classes, then at the end when packaging the final
134988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# assets.  This should be changed to do one of two things: (1) Don't generate
135088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# any resource files the first time, only create classes during that stage;
135188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# or (2) Don't use the -c flag with the second stage, instead taking the
135288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# resource files from the first stage as additional input.  My original intent
135388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# was to use approach (2), but this requires a little more work in the tool.
135488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# Maybe we should just use approach (1).
135588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
135688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# This rule creates the R.java and Manifest.java files, both of which
13574f1ab92aac00a73276793ed25af669d112618a32Ying Wang# are PRODUCT-neutral.  Don't pass PRIVATE_PRODUCT_AAPT_CONFIG to this invocation.
135888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine create-resource-java-files
135988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project@mkdir -p $(PRIVATE_SOURCE_INTERMEDIATES_DIR)
136088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project@mkdir -p $(dir $(PRIVATE_RESOURCE_PUBLICS_OUTPUT))
1361c61d5932d3b1014352dd5cbcb2684a95b3e172a3Ying Wang$(hide) $(AAPT) package $(PRIVATE_AAPT_FLAGS) -m \
13624f1ab92aac00a73276793ed25af669d112618a32Ying Wang    $(eval # PRIVATE_PRODUCT_AAPT_CONFIG is intentionally missing-- see comment.) \
136388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project    $(addprefix -J , $(PRIVATE_SOURCE_INTERMEDIATES_DIR)) \
136488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project    $(addprefix -M , $(PRIVATE_ANDROID_MANIFEST)) \
136588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project    $(addprefix -P , $(PRIVATE_RESOURCE_PUBLICS_OUTPUT)) \
136688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project    $(addprefix -S , $(PRIVATE_RESOURCE_DIR)) \
136788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project    $(addprefix -A , $(PRIVATE_ASSET_DIR)) \
13689bd5404a9d30b82ba3d2750c0cb8cae88b33f82dDianne Hackborn    $(addprefix -I , $(PRIVATE_AAPT_INCLUDES)) \
13692daa2b3b059ac755e8280741b23d65360ae233bcJoe Onorato    $(addprefix -G , $(PRIVATE_PROGUARD_OPTIONS_FILE)) \
1370bb9c230b68e9b57fe60f050e231f8437324f107aYing Wang    $(addprefix --min-sdk-version , $(PRIVATE_DEFAULT_APP_TARGET_SDK)) \
1371bb9c230b68e9b57fe60f050e231f8437324f107aYing Wang    $(addprefix --target-sdk-version , $(PRIVATE_DEFAULT_APP_TARGET_SDK)) \
13721ae607add31de4708e732c7139e68d425b920595Ying Wang    $(if $(filter --version-code,$(PRIVATE_AAPT_FLAGS)),,$(addprefix --version-code , $(PLATFORM_SDK_VERSION))) \
13738f5069b1be9af316c948e9cd7bae2abdc33da5bcYing Wang    $(if $(filter --version-name,$(PRIVATE_AAPT_FLAGS)),,$(addprefix --version-name , $(PLATFORM_VERSION)-$(BUILD_NUMBER))) \
13748c254825a062fd240566404d9d6ecc7cc56b30baYing Wang    $(addprefix --rename-manifest-package , $(PRIVATE_MANIFEST_PACKAGE_NAME)) \
13753dae0ee46cf5fcde6eb424f9ab0c69f2d901a671Ying Wang    $(addprefix --rename-instrumentation-target-package , $(PRIVATE_MANIFEST_INSTRUMENTATION_FOR))
137688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
137788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
137888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectifeq ($(HOST_OS),windows)
137988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectxlint_unchecked :=
138088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectelse
13817adbf97d110ebe137579e1078e3846aa4f3c6c2cJeffrey Chyanxlint_unchecked := -Xlint:unchecked
138288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendif
138388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
1384bb7c6d88c6dd5ee48e8b8ec85ee04c0aa7bc5979Brian Carlstromifeq (true, $(ENABLE_INCREMENTALJAVAC))
1385bb7c6d88c6dd5ee48e8b8ec85ee04c0aa7bc5979Brian Carlstromincremental_dex := --incremental
1386bb7c6d88c6dd5ee48e8b8ec85ee04c0aa7bc5979Brian Carlstromelse
1387bb7c6d88c6dd5ee48e8b8ec85ee04c0aa7bc5979Brian Carlstromincremental_dex :=
1388bb7c6d88c6dd5ee48e8b8ec85ee04c0aa7bc5979Brian Carlstromendif
1389bb7c6d88c6dd5ee48e8b8ec85ee04c0aa7bc5979Brian Carlstrom
139088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# emit-line, <word list>, <output file>
139188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine emit-line
139288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project   $(if $(1),echo -n '$(strip $(1)) ' >> $(2))
139388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
139488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
139588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# dump-words-to-file, <word list>, <output file>
139688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine dump-words-to-file
139788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project        @rm -f $(2)
139888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project        @$(call emit-line,$(wordlist 1,200,$(1)),$(2))
139988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project        @$(call emit-line,$(wordlist 201,400,$(1)),$(2))
140088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project        @$(call emit-line,$(wordlist 401,600,$(1)),$(2))
140188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project        @$(call emit-line,$(wordlist 601,800,$(1)),$(2))
140288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project        @$(call emit-line,$(wordlist 801,1000,$(1)),$(2))
140388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project        @$(call emit-line,$(wordlist 1001,1200,$(1)),$(2))
140488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project        @$(call emit-line,$(wordlist 1201,1400,$(1)),$(2))
140588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project        @$(call emit-line,$(wordlist 1401,1600,$(1)),$(2))
140688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project        @$(call emit-line,$(wordlist 1601,1800,$(1)),$(2))
140788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project        @$(call emit-line,$(wordlist 1801,2000,$(1)),$(2))
140888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project        @$(call emit-line,$(wordlist 2001,2200,$(1)),$(2))
140988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project        @$(call emit-line,$(wordlist 2201,2400,$(1)),$(2))
141088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project        @$(call emit-line,$(wordlist 2401,2600,$(1)),$(2))
141188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project        @$(call emit-line,$(wordlist 2601,2800,$(1)),$(2))
141288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project        @$(call emit-line,$(wordlist 2801,3000,$(1)),$(2))
141388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project        @$(call emit-line,$(wordlist 3001,3200,$(1)),$(2))
141488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project        @$(call emit-line,$(wordlist 3201,3400,$(1)),$(2))
141588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project        @$(call emit-line,$(wordlist 3401,3600,$(1)),$(2))
141688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project        @$(call emit-line,$(wordlist 3601,3800,$(1)),$(2))
141788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project        @$(call emit-line,$(wordlist 3801,4000,$(1)),$(2))
141872c941a14757255a73f0bf31d689cc2b99fff6cfJesse Wilson        @$(call emit-line,$(wordlist 4001,4200,$(1)),$(2))
141972c941a14757255a73f0bf31d689cc2b99fff6cfJesse Wilson        @$(call emit-line,$(wordlist 4201,4400,$(1)),$(2))
142072c941a14757255a73f0bf31d689cc2b99fff6cfJesse Wilson        @$(call emit-line,$(wordlist 4401,4600,$(1)),$(2))
142172c941a14757255a73f0bf31d689cc2b99fff6cfJesse Wilson        @$(call emit-line,$(wordlist 4601,4800,$(1)),$(2))
142272c941a14757255a73f0bf31d689cc2b99fff6cfJesse Wilson        @$(call emit-line,$(wordlist 4801,5000,$(1)),$(2))
142372c941a14757255a73f0bf31d689cc2b99fff6cfJesse Wilson        @$(if $(wordlist 5001,5002,$(1)),$(error Too many words ($(words $(1)))))
142488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
142588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
142688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# For a list of jar files, unzip them to a specified directory,
142788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# but make sure that no META-INF files come along for the ride.
142888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#
142988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# $(1): files to unzip
143088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# $(2): destination directory
143188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine unzip-jar-files
143288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project  $(hide) for f in $(1); \
143388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project  do \
143488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project    if [ ! -f $$f ]; then \
143588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project      echo Missing file $$f; \
143688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project      exit 1; \
143788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project    fi; \
1438f1a55f8bfbaa1a68d96e229b4e73c9e9209d82cfSriram Raman    unzip -qo $$f -d $(2); \
14393a6f7589e8fcc691ec768b1fdcbf0364ff4596f2Ying Wang  done \
14403a6f7589e8fcc691ec768b1fdcbf0364ff4596f2Ying Wang  $(if $(PRIVATE_DONT_DELETE_JAR_META_INF),,;rm -rf $(2)/META-INF)
144188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
144288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
1443782695112d42ea3b9992e7c5f10a76f1854343d4Brian Carlstrom# Common definition to invoke javac on the host and target.
1444782695112d42ea3b9992e7c5f10a76f1854343d4Brian Carlstrom#
1445782695112d42ea3b9992e7c5f10a76f1854343d4Brian Carlstrom# Some historical notes:
1446782695112d42ea3b9992e7c5f10a76f1854343d4Brian Carlstrom# - below we write the list of java files to java-source-list to avoid argument
1447782695112d42ea3b9992e7c5f10a76f1854343d4Brian Carlstrom#   list length problems with Cygwin
1448782695112d42ea3b9992e7c5f10a76f1854343d4Brian Carlstrom# - we filter out duplicate java file names because eclipse's compiler
1449782695112d42ea3b9992e7c5f10a76f1854343d4Brian Carlstrom#   doesn't like them.
1450782695112d42ea3b9992e7c5f10a76f1854343d4Brian Carlstrom#
1451782695112d42ea3b9992e7c5f10a76f1854343d4Brian Carlstrom# $(1): javac
1452782695112d42ea3b9992e7c5f10a76f1854343d4Brian Carlstrom# $(2): bootclasspath
1453782695112d42ea3b9992e7c5f10a76f1854343d4Brian Carlstromdefine compile-java
145464d85d0d827489c514f6aec075482563c80cda73Joe Onorato$(hide) rm -f $@
145564d85d0d827489c514f6aec075482563c80cda73Joe Onorato$(hide) rm -rf $(PRIVATE_CLASS_INTERMEDIATES_DIR)
1456782695112d42ea3b9992e7c5f10a76f1854343d4Brian Carlstrom$(hide) mkdir -p $(dir $@)
145764d85d0d827489c514f6aec075482563c80cda73Joe Onorato$(hide) mkdir -p $(PRIVATE_CLASS_INTERMEDIATES_DIR)
1458782695112d42ea3b9992e7c5f10a76f1854343d4Brian Carlstrom$(call unzip-jar-files,$(PRIVATE_STATIC_JAVA_LIBRARIES),$(PRIVATE_CLASS_INTERMEDIATES_DIR))
1459015edd2c1b4a4300ccccee4036ec2ca7e9ad798aYing Wang$(call dump-words-to-file,$(PRIVATE_JAVA_SOURCES),$(PRIVATE_CLASS_INTERMEDIATES_DIR)/java-source-list)
146064d85d0d827489c514f6aec075482563c80cda73Joe Onorato$(hide) if [ -d "$(PRIVATE_SOURCE_INTERMEDIATES_DIR)" ]; then \
1461015edd2c1b4a4300ccccee4036ec2ca7e9ad798aYing Wang	    find $(PRIVATE_SOURCE_INTERMEDIATES_DIR) -name '*.java' >> $(PRIVATE_CLASS_INTERMEDIATES_DIR)/java-source-list; \
146288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectfi
1463015edd2c1b4a4300ccccee4036ec2ca7e9ad798aYing Wang$(hide) tr ' ' '\n' < $(PRIVATE_CLASS_INTERMEDIATES_DIR)/java-source-list \
1464015edd2c1b4a4300ccccee4036ec2ca7e9ad798aYing Wang    | sort -u > $(PRIVATE_CLASS_INTERMEDIATES_DIR)/java-source-list-uniq
1465e109a1d08d27ad18cc6ac70d9742de636ccae67eYing Wang$(hide) if [ -s $(PRIVATE_CLASS_INTERMEDIATES_DIR)/java-source-list-uniq ] ; then \
1466e109a1d08d27ad18cc6ac70d9742de636ccae67eYing Wang    $(1) -encoding UTF-8 \
1467782695112d42ea3b9992e7c5f10a76f1854343d4Brian Carlstrom    $(strip $(PRIVATE_JAVAC_DEBUG_FLAGS)) \
1468782695112d42ea3b9992e7c5f10a76f1854343d4Brian Carlstrom    $(if $(findstring true,$(LOCAL_WARNINGS_ENABLE)),$(xlint_unchecked),) \
1469782695112d42ea3b9992e7c5f10a76f1854343d4Brian Carlstrom    $(2) \
147088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project    $(addprefix -classpath ,$(strip \
147188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project        $(call normalize-path-list,$(PRIVATE_ALL_JAVA_LIBRARIES)))) \
1472782695112d42ea3b9992e7c5f10a76f1854343d4Brian Carlstrom    $(if $(findstring true,$(LOCAL_WARNINGS_ENABLE)),$(xlint_unchecked),) \
147388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project    -extdirs "" -d $(PRIVATE_CLASS_INTERMEDIATES_DIR) \
1474782695112d42ea3b9992e7c5f10a76f1854343d4Brian Carlstrom    $(PRIVATE_JAVACFLAGS) \
1475015edd2c1b4a4300ccccee4036ec2ca7e9ad798aYing Wang    \@$(PRIVATE_CLASS_INTERMEDIATES_DIR)/java-source-list-uniq \
1476e109a1d08d27ad18cc6ac70d9742de636ccae67eYing Wang    || ( rm -rf $(PRIVATE_CLASS_INTERMEDIATES_DIR) ; exit 41 ) \
1477e109a1d08d27ad18cc6ac70d9742de636ccae67eYing Wangfi
1478015edd2c1b4a4300ccccee4036ec2ca7e9ad798aYing Wang$(hide) rm -f $(PRIVATE_CLASS_INTERMEDIATES_DIR)/java-source-list
1479015edd2c1b4a4300ccccee4036ec2ca7e9ad798aYing Wang$(hide) rm -f $(PRIVATE_CLASS_INTERMEDIATES_DIR)/java-source-list-uniq
14805758b8ed96783861c72b94a822c0ed581f414388Ying Wang$(if $(PRIVATE_JAR_EXCLUDE_FILES), $(hide) find $(PRIVATE_CLASS_INTERMEDIATES_DIR) \
14815758b8ed96783861c72b94a822c0ed581f414388Ying Wang    -name $(word 1, $(PRIVATE_JAR_EXCLUDE_FILES)) \
14825758b8ed96783861c72b94a822c0ed581f414388Ying Wang    $(addprefix -o -name , $(wordlist 2, 999, $(PRIVATE_JAR_EXCLUDE_FILES))) \
14835758b8ed96783861c72b94a822c0ed581f414388Ying Wang    | xargs rm -rf)
148488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project$(hide) jar $(if $(strip $(PRIVATE_JAR_MANIFEST)),-cfm,-cf) \
148588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project    $@ $(PRIVATE_JAR_MANIFEST) -C $(PRIVATE_CLASS_INTERMEDIATES_DIR) .
1486782695112d42ea3b9992e7c5f10a76f1854343d4Brian Carlstromendef
1487782695112d42ea3b9992e7c5f10a76f1854343d4Brian Carlstrom
1488782695112d42ea3b9992e7c5f10a76f1854343d4Brian Carlstromdefine transform-java-to-classes.jar
1489782695112d42ea3b9992e7c5f10a76f1854343d4Brian Carlstrom@echo "target Java: $(PRIVATE_MODULE) ($(PRIVATE_CLASS_INTERMEDIATES_DIR))"
1490782695112d42ea3b9992e7c5f10a76f1854343d4Brian Carlstrom$(call compile-java,$(TARGET_JAVAC),$(PRIVATE_BOOTCLASSPATH))
149188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
149288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
1493015edd2c1b4a4300ccccee4036ec2ca7e9ad798aYing Wang# Override the above definitions if we want to do incremetal javac
1494015edd2c1b4a4300ccccee4036ec2ca7e9ad798aYing Wangifeq (true, $(ENABLE_INCREMENTALJAVAC))
1495015edd2c1b4a4300ccccee4036ec2ca7e9ad798aYing Wangdefine compile-java
1496015edd2c1b4a4300ccccee4036ec2ca7e9ad798aYing Wang$(hide) mkdir -p $(dir $@)
1497015edd2c1b4a4300ccccee4036ec2ca7e9ad798aYing Wang$(hide) mkdir -p $(PRIVATE_CLASS_INTERMEDIATES_DIR)
1498015edd2c1b4a4300ccccee4036ec2ca7e9ad798aYing Wang$(hide) touch $(PRIVATE_CLASS_INTERMEDIATES_DIR)/newstamp
1499015edd2c1b4a4300ccccee4036ec2ca7e9ad798aYing Wang$(call unzip-jar-files,$(PRIVATE_STATIC_JAVA_LIBRARIES),$(PRIVATE_CLASS_INTERMEDIATES_DIR))
1500015edd2c1b4a4300ccccee4036ec2ca7e9ad798aYing Wang$(hide) if [ -e $(PRIVATE_CLASS_INTERMEDIATES_DIR)/stamp ] ; then \
1501015edd2c1b4a4300ccccee4036ec2ca7e9ad798aYing Wang        newerFlag=$$(echo -n "-newer $(PRIVATE_CLASS_INTERMEDIATES_DIR)/stamp") ; \
1502015edd2c1b4a4300ccccee4036ec2ca7e9ad798aYing Wang    fi ; \
1503015edd2c1b4a4300ccccee4036ec2ca7e9ad798aYing Wang    find $(PRIVATE_JAVA_SOURCES) $$newerFlag > $(PRIVATE_CLASS_INTERMEDIATES_DIR)/java-source-list ; \
1504015edd2c1b4a4300ccccee4036ec2ca7e9ad798aYing Wang    if [ -d "$(PRIVATE_SOURCE_INTERMEDIATES_DIR)" ]; then \
1505015edd2c1b4a4300ccccee4036ec2ca7e9ad798aYing Wang        find $(PRIVATE_SOURCE_INTERMEDIATES_DIR) -name '*.java' $$newerFlag >> $(PRIVATE_CLASS_INTERMEDIATES_DIR)/java-source-list; \
1506015edd2c1b4a4300ccccee4036ec2ca7e9ad798aYing Wang    fi
1507015edd2c1b4a4300ccccee4036ec2ca7e9ad798aYing Wang$(hide) tr ' ' '\n' < $(PRIVATE_CLASS_INTERMEDIATES_DIR)/java-source-list \
1508015edd2c1b4a4300ccccee4036ec2ca7e9ad798aYing Wang    | sort -u > $(PRIVATE_CLASS_INTERMEDIATES_DIR)/java-source-list-uniq
1509015edd2c1b4a4300ccccee4036ec2ca7e9ad798aYing Wang@echo "(Incremental) build source files:"
1510015edd2c1b4a4300ccccee4036ec2ca7e9ad798aYing Wang@cat $(PRIVATE_CLASS_INTERMEDIATES_DIR)/java-source-list-uniq
1511015edd2c1b4a4300ccccee4036ec2ca7e9ad798aYing Wang$(hide) if [ -s $(PRIVATE_CLASS_INTERMEDIATES_DIR)/java-source-list-uniq ] ; then \
1512149dd914b8799d67b8c4a6fb502b44058a3e14b8Joe Onorato    $(1) -encoding UTF-8 \
1513015edd2c1b4a4300ccccee4036ec2ca7e9ad798aYing Wang    $(strip $(PRIVATE_JAVAC_DEBUG_FLAGS)) \
1514015edd2c1b4a4300ccccee4036ec2ca7e9ad798aYing Wang    $(if $(findstring true,$(LOCAL_WARNINGS_ENABLE)),$(xlint_unchecked),) \
1515015edd2c1b4a4300ccccee4036ec2ca7e9ad798aYing Wang    $(2) \
1516015edd2c1b4a4300ccccee4036ec2ca7e9ad798aYing Wang    $(addprefix -classpath ,$(strip \
1517015edd2c1b4a4300ccccee4036ec2ca7e9ad798aYing Wang        $(call normalize-path-list,$(PRIVATE_ALL_JAVA_LIBRARIES) $(PRIVATE_CLASS_INTERMEDIATES_DIR)))) \
1518015edd2c1b4a4300ccccee4036ec2ca7e9ad798aYing Wang    $(if $(findstring true,$(LOCAL_WARNINGS_ENABLE)),$(xlint_unchecked),) \
1519015edd2c1b4a4300ccccee4036ec2ca7e9ad798aYing Wang    -extdirs "" -d $(PRIVATE_CLASS_INTERMEDIATES_DIR) \
1520015edd2c1b4a4300ccccee4036ec2ca7e9ad798aYing Wang    $(PRIVATE_JAVACFLAGS) \
1521015edd2c1b4a4300ccccee4036ec2ca7e9ad798aYing Wang    \@$(PRIVATE_CLASS_INTERMEDIATES_DIR)/java-source-list-uniq \
1522015edd2c1b4a4300ccccee4036ec2ca7e9ad798aYing Wang    || ( exit 41 ) \
1523015edd2c1b4a4300ccccee4036ec2ca7e9ad798aYing Wangfi
1524015edd2c1b4a4300ccccee4036ec2ca7e9ad798aYing Wang$(hide) rm -f $(PRIVATE_CLASS_INTERMEDIATES_DIR)/java-source-list
1525015edd2c1b4a4300ccccee4036ec2ca7e9ad798aYing Wang$(hide) rm -f $(PRIVATE_CLASS_INTERMEDIATES_DIR)/java-source-list-uniq
1526015edd2c1b4a4300ccccee4036ec2ca7e9ad798aYing Wang$(hide) rm -f $@
1527ae25ec1bcdeb028a2db3103abdf1f22768928f0aYing Wang$(if $(PRIVATE_JAR_EXCLUDE_FILES), $(hide) find $(PRIVATE_CLASS_INTERMEDIATES_DIR) \
1528ae25ec1bcdeb028a2db3103abdf1f22768928f0aYing Wang    -name $(word 1, $(PRIVATE_JAR_EXCLUDE_FILES)) \
1529ae25ec1bcdeb028a2db3103abdf1f22768928f0aYing Wang    $(addprefix -o -name , $(wordlist 2, 999, $(PRIVATE_JAR_EXCLUDE_FILES))) \
1530ae25ec1bcdeb028a2db3103abdf1f22768928f0aYing Wang    | xargs rm -rf)
1531015edd2c1b4a4300ccccee4036ec2ca7e9ad798aYing Wang$(hide) jar $(if $(strip $(PRIVATE_JAR_MANIFEST)),-cfm,-cf) \
1532015edd2c1b4a4300ccccee4036ec2ca7e9ad798aYing Wang    $@ $(PRIVATE_JAR_MANIFEST) -C $(PRIVATE_CLASS_INTERMEDIATES_DIR) .
1533015edd2c1b4a4300ccccee4036ec2ca7e9ad798aYing Wang$(hide) mv $(PRIVATE_CLASS_INTERMEDIATES_DIR)/newstamp $(PRIVATE_CLASS_INTERMEDIATES_DIR)/stamp
1534015edd2c1b4a4300ccccee4036ec2ca7e9ad798aYing Wangendef
1535015edd2c1b4a4300ccccee4036ec2ca7e9ad798aYing Wang
1536015edd2c1b4a4300ccccee4036ec2ca7e9ad798aYing Wangdefine transform-java-to-classes.jar
1537015edd2c1b4a4300ccccee4036ec2ca7e9ad798aYing Wang@echo "target Java: $(PRIVATE_MODULE) ($(PRIVATE_CLASS_INTERMEDIATES_DIR))"
1538015edd2c1b4a4300ccccee4036ec2ca7e9ad798aYing Wang$(call compile-java,$(TARGET_JAVAC),$(PRIVATE_BOOTCLASSPATH))
1539015edd2c1b4a4300ccccee4036ec2ca7e9ad798aYing Wangendef
1540015edd2c1b4a4300ccccee4036ec2ca7e9ad798aYing Wangendif # ENABLE_INCREMENTALJAVAC
1541015edd2c1b4a4300ccccee4036ec2ca7e9ad798aYing Wang
154288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine transform-classes.jar-to-emma
154388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project$(hide) java -classpath $(EMMA_JAR) emma instr -outmode fullcopy -outfile \
1544155afe393faa0aae47d517fa687a7e4ab3cae91bGuang Zhu    $(PRIVATE_EMMA_COVERAGE_FILE) -ip $< -d $(PRIVATE_EMMA_INTERMEDIATES_DIR) \
15459cd3d8c6543ffb2eef7935d8f832f99675dc630eGuang Zhu    $(addprefix -ix , $(PRIVATE_EMMA_COVERAGE_FILTER))
154688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
154788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
154888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#TODO: use a smaller -Xmx value for most libraries;
154988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#      only core.jar and framework.jar need a heap this big.
1550f6ff4c5acf428d4b0cba828b836f1e11fa1442b4Raphael# Avoid the memory arguments on Windows, dx fails to load for some reason with them.
155188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine transform-classes.jar-to-dex
155288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project@echo "target Dex: $(PRIVATE_MODULE)"
155388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project@mkdir -p $(dir $@)
1554f6ff4c5acf428d4b0cba828b836f1e11fa1442b4Raphael$(hide) $(DX) \
155529b3afaf79e89e5707c6a28e7ed55d3c04810352Wink Saville    $(if $(findstring windows,$(HOST_OS)),,-JXms16M -JXmx2048M) \
155688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project    --dex --output=$@ \
1557bb7c6d88c6dd5ee48e8b8ec85ee04c0aa7bc5979Brian Carlstrom    $(incremental_dex) \
155888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project    $(if $(NO_OPTIMIZE_DX), \
155988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project        --no-optimize) \
156088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project    $(if $(GENERATE_DEX_DEBUG), \
156188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project	    --debug --verbose \
156288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project	    --dump-to=$(@:.dex=.lst) \
156388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project	    --dump-width=1000) \
156488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project    $(PRIVATE_DX_FLAGS) \
156588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project    $<
156688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
156788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
156888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# Create a mostly-empty .jar file that we'll add to later.
156988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# The MacOS jar tool doesn't like creating empty jar files,
157088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# so we need to give it something.
157188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine create-empty-package
157288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project@mkdir -p $(dir $@)
157388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project$(hide) touch $(dir $@)/dummy
157488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project$(hide) (cd $(dir $@) && jar cf $(notdir $@) dummy)
157588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project$(hide) zip -qd $@ dummy
157688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project$(hide) rm $(dir $@)/dummy
157788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
157888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
157988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#TODO: we kinda want to build different asset packages for
158088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#      different configurations, then combine them later (or something).
158188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#      Per-locale, etc.
158288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#      A list of dynamic and static parameters;  build layers for
158388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#      dynamic params that lay over the static ones.
158488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#TODO: update the manifest to point to the package file
15859bd5404a9d30b82ba3d2750c0cb8cae88b33f82dDianne Hackborn#Note that the version numbers are given to aapt as simple default
15869bd5404a9d30b82ba3d2750c0cb8cae88b33f82dDianne Hackborn#values; applications can override these by explicitly stating
15879bd5404a9d30b82ba3d2750c0cb8cae88b33f82dDianne Hackborn#them in their manifest.
158888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine add-assets-to-package
1589c61d5932d3b1014352dd5cbcb2684a95b3e172a3Ying Wang$(hide) $(AAPT) package -u $(PRIVATE_AAPT_FLAGS) \
15904f1ab92aac00a73276793ed25af669d112618a32Ying Wang    $(addprefix -c , $(PRIVATE_PRODUCT_AAPT_CONFIG)) \
1591a0f464a8e7f006177db084df7e925bbb8e5ffed3Dianne Hackborn    $(addprefix --preferred-configurations , $(PRIVATE_PRODUCT_AAPT_PREF_CONFIG)) \
159288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project    $(addprefix -M , $(PRIVATE_ANDROID_MANIFEST)) \
159388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project    $(addprefix -S , $(PRIVATE_RESOURCE_DIR)) \
159488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project    $(addprefix -A , $(PRIVATE_ASSET_DIR)) \
159588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project    $(addprefix -I , $(PRIVATE_AAPT_INCLUDES)) \
1596bb9c230b68e9b57fe60f050e231f8437324f107aYing Wang    $(addprefix --min-sdk-version , $(PRIVATE_DEFAULT_APP_TARGET_SDK)) \
1597bb9c230b68e9b57fe60f050e231f8437324f107aYing Wang    $(addprefix --target-sdk-version , $(PRIVATE_DEFAULT_APP_TARGET_SDK)) \
1598700b88e1451f216d137d8a356496bf51712512c6Joe Onorato    $(addprefix --product , $(TARGET_AAPT_CHARACTERISTICS)) \
15991ae607add31de4708e732c7139e68d425b920595Ying Wang    $(if $(filter --version-code,$(PRIVATE_AAPT_FLAGS)),,$(addprefix --version-code , $(PLATFORM_SDK_VERSION))) \
16008f5069b1be9af316c948e9cd7bae2abdc33da5bcYing Wang    $(if $(filter --version-name,$(PRIVATE_AAPT_FLAGS)),,$(addprefix --version-name , $(PLATFORM_VERSION)-$(BUILD_NUMBER))) \
1601bb67d21337f8d87628fbc09585be6cfe6ab0336cJeff Hamilton    $(addprefix --rename-manifest-package , $(PRIVATE_MANIFEST_PACKAGE_NAME)) \
16023dae0ee46cf5fcde6eb424f9ab0c69f2d901a671Ying Wang    $(addprefix --rename-instrumentation-target-package , $(PRIVATE_MANIFEST_INSTRUMENTATION_FOR)) \
160388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project    -F $@
160488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
160588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
160688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine add-jni-shared-libs-to-package
160788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project$(hide) rm -rf $(dir $@)lib
1608a0ab29b986af30351efc2983faaf93bcbf040303Jack Palevich$(hide) mkdir -p $(dir $@)lib/$(PRIVATE_JNI_SHARED_LIBRARIES_ABI)
1609a0ab29b986af30351efc2983faaf93bcbf040303Jack Palevich$(hide) cp $(PRIVATE_JNI_SHARED_LIBRARIES) $(dir $@)lib/$(PRIVATE_JNI_SHARED_LIBRARIES_ABI)
161088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project$(hide) (cd $(dir $@) && zip -r $(notdir $@) lib)
161188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project$(hide) rm -rf $(dir $@)lib
161288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
161388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
161488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#TODO: update the manifest to point to the dex file
161588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine add-dex-to-package
1616957fea52f3f617299309b6f119a7c99fb869bab3Ying Wang$(if $(filter classes.dex,$(notdir $(PRIVATE_DEX_FILE))),\
1617957fea52f3f617299309b6f119a7c99fb869bab3Ying Wang$(hide) $(AAPT) add -k $@ $(PRIVATE_DEX_FILE),\
16186e7db38de7cfc905413e27cc8967909727db3022Ying Wang$(hide) _adtp_classes_dex=$(dir $(PRIVATE_DEX_FILE))classes.dex; \
16196e7db38de7cfc905413e27cc8967909727db3022Ying Wangcp $(PRIVATE_DEX_FILE) $$_adtp_classes_dex && \
16206e7db38de7cfc905413e27cc8967909727db3022Ying Wang$(AAPT) add -k $@ $$_adtp_classes_dex && rm -f $$_adtp_classes_dex)
162188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
162288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
16233e500c63563c9a2ed1ed7b1ae8a094493dbc65d2Ying Wang# Add java resources added by the current module.
16243e500c63563c9a2ed1ed7b1ae8a094493dbc65d2Ying Wang#
162588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine add-java-resources-to-package
1626194a8ec8aee8511d90354c4b97fecfd0df52c837Ying Wang$(call dump-words-to-file, $(PRIVATE_EXTRA_JAR_ARGS), $(dir $@)jar-arg-list)
1627194a8ec8aee8511d90354c4b97fecfd0df52c837Ying Wang$(hide) jar uf $@ @$(dir $@)jar-arg-list
1628194a8ec8aee8511d90354c4b97fecfd0df52c837Ying Wang@rm -f $(dir $@)jar-arg-list
162988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
163088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
16313e500c63563c9a2ed1ed7b1ae8a094493dbc65d2Ying Wang# Add java resources carried by static Java libraries.
16323e500c63563c9a2ed1ed7b1ae8a094493dbc65d2Ying Wang#
16333e500c63563c9a2ed1ed7b1ae8a094493dbc65d2Ying Wangdefine add-carried-java-resources
16343e500c63563c9a2ed1ed7b1ae8a094493dbc65d2Ying Wang$(hide) if [ -d $(PRIVATE_CLASS_INTERMEDIATES_DIR) ] ; then \
16353e500c63563c9a2ed1ed7b1ae8a094493dbc65d2Ying Wang    java_res_jar_flags=$$(find $(PRIVATE_CLASS_INTERMEDIATES_DIR) -type f -a -not -name "*.class" \
16363e500c63563c9a2ed1ed7b1ae8a094493dbc65d2Ying Wang        | sed -e "s?^$(PRIVATE_CLASS_INTERMEDIATES_DIR)/? -C $(PRIVATE_CLASS_INTERMEDIATES_DIR) ?"); \
16373e500c63563c9a2ed1ed7b1ae8a094493dbc65d2Ying Wang    if [ -n "$$java_res_jar_flags" ] ; then \
16383e500c63563c9a2ed1ed7b1ae8a094493dbc65d2Ying Wang        echo $$java_res_jar_flags >$(dir $@)java_res_jar_flags; \
16393e500c63563c9a2ed1ed7b1ae8a094493dbc65d2Ying Wang        jar uf $@ $$java_res_jar_flags; \
16403e500c63563c9a2ed1ed7b1ae8a094493dbc65d2Ying Wang    fi; \
16413e500c63563c9a2ed1ed7b1ae8a094493dbc65d2Ying Wangfi
16423e500c63563c9a2ed1ed7b1ae8a094493dbc65d2Ying Wangendef
16433e500c63563c9a2ed1ed7b1ae8a094493dbc65d2Ying Wang
164488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# Sign a package using the specified key/cert.
164588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#
164688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine sign-package
164788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project$(hide) mv $@ $@.unsigned
164888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project$(hide) java -jar $(SIGNAPK_JAR) \
164988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project	$(PRIVATE_CERTIFICATE) $(PRIVATE_PRIVATE_KEY) $@.unsigned $@.signed
165088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project$(hide) mv $@.signed $@
165188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
165288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
165388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# Align STORED entries of a package on 4-byte boundaries
165488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# to make them easier to mmap.
165588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#
165688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine align-package
165788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project$(hide) mv $@ $@.unaligned
165888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project$(hide) $(ZIPALIGN) -f 4 $@.unaligned $@.aligned
165988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project$(hide) mv $@.aligned $@
166088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
166188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
166288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine install-dex-debug
166388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project$(hide) if [ -f "$(PRIVATE_INTERMEDIATES_DIR)/classes.dex" ]; then \
166488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project	    mkdir -p $(TOP)/dalvik/DEBUG-FILES; \
166588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project	    $(ACP) $(PRIVATE_INTERMEDIATES_DIR)/classes.dex \
166688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project		$(TOP)/dalvik/DEBUG-FILES/$(PRIVATE_MODULE).dex; \
166788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project	fi
166888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project$(hide) if [ -f "$(PRIVATE_INTERMEDIATES_DIR)/classes.lst" ]; then \
166988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project	    mkdir -p $(TOP)/dalvik/DEBUG-FILES; \
167088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project	    $(ACP) $(PRIVATE_INTERMEDIATES_DIR)/classes.lst \
167188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project		$(TOP)/dalvik/DEBUG-FILES/$(PRIVATE_MODULE).lst; \
167288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project	fi
167388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
167488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
167588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# TODO(joeo): If we can ever upgrade to post 3.81 make and get the
167688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# new prebuilt rules to work, we should change this to copy the
167788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# resources to the out directory and then copy the resources.
167888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
1679782695112d42ea3b9992e7c5f10a76f1854343d4Brian Carlstrom# Note: we intentionally don't clean PRIVATE_CLASS_INTERMEDIATES_DIR
1680782695112d42ea3b9992e7c5f10a76f1854343d4Brian Carlstrom# in transform-java-to-classes for the sake of vm-tests.
168188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine transform-host-java-to-package
168288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project@echo "host Java: $(PRIVATE_MODULE) ($(PRIVATE_CLASS_INTERMEDIATES_DIR))"
1683015edd2c1b4a4300ccccee4036ec2ca7e9ad798aYing Wang$(call compile-java,$(HOST_JAVAC),$(PRIVATE_BOOTCLASSPATH))
1684194a8ec8aee8511d90354c4b97fecfd0df52c837Ying Wang$(if $(PRIVATE_EXTRA_JAR_ARGS), $(call add-java-resources-to-package))
168588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
168688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
168788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
168888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## Obfuscate a jar file
168988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
169088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
169188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# PRIVATE_KEEP_FILE is a file containing a list of classes
169288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# PRIVATE_INTERMEDIATES_DIR is a directory we can use for temporary files
169388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# The module using this must depend on
169488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#        $(HOST_OUT_JAVA_LIBRARIES)/proguard-4.0.1.jar
169588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine obfuscate-jar
169688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project@echo "Obfuscate jar: $(notdir $@) ($@)"
169788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project@mkdir -p $(dir $@)
169888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project@rm -f $@
169988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project@mkdir -p $(PRIVATE_INTERMEDIATES_DIR)
170088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project$(hide) sed -e 's/^/-keep class /' < $(PRIVATE_KEEP_FILE) > \
170188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project		$(PRIVATE_INTERMEDIATES_DIR)/keep.pro
170288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project$(hide) java -Xmx512M -jar $(HOST_OUT_JAVA_LIBRARIES)/proguard-4.0.1.jar \
170388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project		-injars $< \
170488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project		-outjars $@ \
170588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project		-target 1.5 \
170688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project		-dontnote -dontwarn \
170788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project		-printmapping $(PRIVATE_INTERMEDIATES_DIR)/out.map \
170888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project		-forceprocessing \
170988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project		-renamesourcefileattribute SourceFile \
171088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project		-keepattributes Exceptions,InnerClasses,Signature,Deprecated,SourceFile,LineNumberTable,*Annotation*,EnclosingMethod \
171188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project		-repackageclasses \
171288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project		-keepclassmembers "class * { public protected *; }" \
171388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project		@$(PRIVATE_INTERMEDIATES_DIR)/keep.pro
171488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
171588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
171688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
171788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## Commands for copying files
171888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
171988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
172088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# Define a rule to copy a header.  Used via $(eval) by copy_headers.make.
172188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# $(1): source header
172288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# $(2): destination header
172388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine copy-one-header
172488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project$(2): $(1)
172588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project	@echo "Header: $$@"
172688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project	$$(copy-file-to-new-target-with-cp)
172788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
172888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
172988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# Define a rule to copy a file.  For use via $(eval).
173088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# $(1): source file
173188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# $(2): destination file
173288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine copy-one-file
173388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project$(2): $(1) | $(ACP)
173488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project	@echo "Copy: $$@"
173588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project	$$(copy-file-to-target)
173688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
173788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
1738e44705a86f80fe356ba83b3030864f5fcff3d394Joe Onorato# Copies many files.
1739e44705a86f80fe356ba83b3030864f5fcff3d394Joe Onorato# $(1): The files to copy.  Each entry is a ':' separated src:dst pair
1740e44705a86f80fe356ba83b3030864f5fcff3d394Joe Onorato# Evaluates to the list of the dst files (ie suitable for a dependency list)
1741e44705a86f80fe356ba83b3030864f5fcff3d394Joe Onoratodefine copy-many-files
1742e44705a86f80fe356ba83b3030864f5fcff3d394Joe Onorato$(foreach f, $(1), $(strip \
1743e44705a86f80fe356ba83b3030864f5fcff3d394Joe Onorato    $(eval _cmf_tuple := $(subst :, ,$(f))) \
1744e44705a86f80fe356ba83b3030864f5fcff3d394Joe Onorato    $(eval _cmf_src := $(word 1,$(_cmf_tuple))) \
1745e44705a86f80fe356ba83b3030864f5fcff3d394Joe Onorato    $(eval _cmf_dest := $(word 2,$(_cmf_tuple))) \
1746e44705a86f80fe356ba83b3030864f5fcff3d394Joe Onorato    $(eval $(call copy-one-file,$(_cmf_src),$(_cmf_dest))) \
1747e44705a86f80fe356ba83b3030864f5fcff3d394Joe Onorato    $(_cmf_dest)))
1748e44705a86f80fe356ba83b3030864f5fcff3d394Joe Onoratoendef
1749e44705a86f80fe356ba83b3030864f5fcff3d394Joe Onorato
17503ceecfa3daeb187c0631a84e6ee6b4dd89f111f8Ying Wang# Copy the file only if it's a well-formed xml file. For use via $(eval).
17513ceecfa3daeb187c0631a84e6ee6b4dd89f111f8Ying Wang# $(1): source file
17523ceecfa3daeb187c0631a84e6ee6b4dd89f111f8Ying Wang# $(2): destination file, must end with .xml.
17533ceecfa3daeb187c0631a84e6ee6b4dd89f111f8Ying Wangdefine copy-xml-file-checked
17543ceecfa3daeb187c0631a84e6ee6b4dd89f111f8Ying Wang$(2): $(1) | $(ACP)
17553ceecfa3daeb187c0631a84e6ee6b4dd89f111f8Ying Wang	@echo "Copy xml: $$@"
17563ceecfa3daeb187c0631a84e6ee6b4dd89f111f8Ying Wang	$(hide) xmllint $$< >/dev/null  # Don't print the xml file to stdout.
17573ceecfa3daeb187c0631a84e6ee6b4dd89f111f8Ying Wang	$$(copy-file-to-target)
17583ceecfa3daeb187c0631a84e6ee6b4dd89f111f8Ying Wangendef
17593ceecfa3daeb187c0631a84e6ee6b4dd89f111f8Ying Wang
176088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# The -t option to acp and the -p option to cp is
176188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# required for OSX.  OSX has a ridiculous restriction
176288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# where it's an error for a .a file's modification time
176388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# to disagree with an internal timestamp, and this
176488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# macro is used to install .a files (among other things).
176588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
176688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# Copy a single file from one place to another,
176788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# preserving permissions and overwriting any existing
176888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# file.
176976a6dc3a191e8800211eb49398d37deae731094eIan Rogers# We disable the "-t" option for acp cannot handle
177084ed6fa27b883de8ba7b41ddecaa2179e7f4b321Ying Wang# high resolution timestamp correctly on file systems like ext4.
177184ed6fa27b883de8ba7b41ddecaa2179e7f4b321Ying Wang# Therefore copy-file-to-target is the same as copy-file-to-new-target.
177288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine copy-file-to-target
177388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project@mkdir -p $(dir $@)
177484ed6fa27b883de8ba7b41ddecaa2179e7f4b321Ying Wang$(hide) $(ACP) -fp $< $@
177588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
177688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
177788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# The same as copy-file-to-target, but use the local
177888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# cp command instead of acp.
177988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine copy-file-to-target-with-cp
178088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project@mkdir -p $(dir $@)
178188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project$(hide) cp -fp $< $@
178288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
178388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
17849c0c4b7a588b3afe80dc16c133921fee991f53d3Dianne Hackborn# The same as copy-file-to-target, but use the zipalign tool to do so.
17859c0c4b7a588b3afe80dc16c133921fee991f53d3Dianne Hackborndefine copy-file-to-target-with-zipalign
17869c0c4b7a588b3afe80dc16c133921fee991f53d3Dianne Hackborn@mkdir -p $(dir $@)
17879c0c4b7a588b3afe80dc16c133921fee991f53d3Dianne Hackborn$(hide) $(ZIPALIGN) -f 4 $< $@
17889c0c4b7a588b3afe80dc16c133921fee991f53d3Dianne Hackbornendef
17899c0c4b7a588b3afe80dc16c133921fee991f53d3Dianne Hackborn
17901046d20624318563aba92cfdd7eb7d39ecc44703Doug Zongker# The same as copy-file-to-target, but strip out "# comment"-style
17911046d20624318563aba92cfdd7eb7d39ecc44703Doug Zongker# comments (for config files and such).
17921046d20624318563aba92cfdd7eb7d39ecc44703Doug Zongkerdefine copy-file-to-target-strip-comments
17931046d20624318563aba92cfdd7eb7d39ecc44703Doug Zongker@mkdir -p $(dir $@)
17941046d20624318563aba92cfdd7eb7d39ecc44703Doug Zongker$(hide) sed -e 's/#.*$$//' -e 's/[ \t]*$$//' -e '/^$$/d' < $< > $@
17951046d20624318563aba92cfdd7eb7d39ecc44703Doug Zongkerendef
17961046d20624318563aba92cfdd7eb7d39ecc44703Doug Zongker
179788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# The same as copy-file-to-target, but don't preserve
179888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# the old modification time.
179988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine copy-file-to-new-target
180088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project@mkdir -p $(dir $@)
180188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project$(hide) $(ACP) -fp $< $@
180288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
180388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
180488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# The same as copy-file-to-new-target, but use the local
180588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# cp command instead of acp.
180688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine copy-file-to-new-target-with-cp
180788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project@mkdir -p $(dir $@)
180888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project$(hide) cp -f $< $@
180988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
181088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
181188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# Copy a prebuilt file to a target location.
181288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine transform-prebuilt-to-target
181388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project@echo "$(if $(PRIVATE_IS_HOST_MODULE),host,target) Prebuilt: $(PRIVATE_MODULE) ($@)"
181488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project$(copy-file-to-target)
181588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
181688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
18179c0c4b7a588b3afe80dc16c133921fee991f53d3Dianne Hackborn# Copy a prebuilt file to a target location, using zipalign on it.
18189c0c4b7a588b3afe80dc16c133921fee991f53d3Dianne Hackborndefine transform-prebuilt-to-target-with-zipalign
18199c0c4b7a588b3afe80dc16c133921fee991f53d3Dianne Hackborn@echo "$(if $(PRIVATE_IS_HOST_MODULE),host,target) Prebuilt APK: $(PRIVATE_MODULE) ($@)"
18209c0c4b7a588b3afe80dc16c133921fee991f53d3Dianne Hackborn$(copy-file-to-target-with-zipalign)
18219c0c4b7a588b3afe80dc16c133921fee991f53d3Dianne Hackbornendef
18229c0c4b7a588b3afe80dc16c133921fee991f53d3Dianne Hackborn
18231046d20624318563aba92cfdd7eb7d39ecc44703Doug Zongker# Copy a prebuilt file to a target location, stripping "# comment" comments.
18241046d20624318563aba92cfdd7eb7d39ecc44703Doug Zongkerdefine transform-prebuilt-to-target-strip-comments
18251046d20624318563aba92cfdd7eb7d39ecc44703Doug Zongker@echo "$(if $(PRIVATE_IS_HOST_MODULE),host,target) Prebuilt: $(PRIVATE_MODULE) ($@)"
18261046d20624318563aba92cfdd7eb7d39ecc44703Doug Zongker$(copy-file-to-target-strip-comments)
18271046d20624318563aba92cfdd7eb7d39ecc44703Doug Zongkerendef
18281046d20624318563aba92cfdd7eb7d39ecc44703Doug Zongker
182988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
183088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## On some platforms (MacOS), after copying a static
183188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## library, ranlib must be run to update an internal
183288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## timestamp!?!?!
183388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
183488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
183588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectifeq ($(HOST_RUN_RANLIB_AFTER_COPYING),true)
183688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine transform-host-ranlib-copy-hack
183788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project    $(hide) ranlib $@ || true
183888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
183988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectelse
184088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine transform-host-ranlib-copy-hack
18410e27dff167faede2d13dae5d488866bce85c28bcPatrick Scott@true
184288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
184388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendif
184488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
184588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectifeq ($(TARGET_RUN_RANLIB_AFTER_COPYING),true)
184688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine transform-ranlib-copy-hack
184788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project    $(hide) ranlib $@
184888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
184988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectelse
185088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine transform-ranlib-copy-hack
18510e27dff167faede2d13dae5d488866bce85c28bcPatrick Scott@true
185288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
185388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendif
185488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
185588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
185688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
18573b2bdf10338fb048fc749ce9f65a77f917f7d304Ying Wang## Commands to call Proguard
18583b2bdf10338fb048fc749ce9f65a77f917f7d304Ying Wang###########################################################
18593b2bdf10338fb048fc749ce9f65a77f917f7d304Ying Wang
18603b2bdf10338fb048fc749ce9f65a77f917f7d304Ying Wang# Command to copy the file with acp, if proguard is disabled.
18613b2bdf10338fb048fc749ce9f65a77f917f7d304Ying Wangdefine proguard-disabled-commands
18623b2bdf10338fb048fc749ce9f65a77f917f7d304Ying Wang@echo Copying: $@
186384ed6fa27b883de8ba7b41ddecaa2179e7f4b321Ying Wang$(hide) $(ACP) -fp $< $@
18643b2bdf10338fb048fc749ce9f65a77f917f7d304Ying Wangendef
18653b2bdf10338fb048fc749ce9f65a77f917f7d304Ying Wang
18663b2bdf10338fb048fc749ce9f65a77f917f7d304Ying Wang# Command to call Proguard
18673b2bdf10338fb048fc749ce9f65a77f917f7d304Ying Wang# $(1): extra flags for instrumentation.
18683b2bdf10338fb048fc749ce9f65a77f917f7d304Ying Wangdefine proguard-enabled-commands
18693b2bdf10338fb048fc749ce9f65a77f917f7d304Ying Wang@echo Proguard: $@
18703b2bdf10338fb048fc749ce9f65a77f917f7d304Ying Wang$(hide) $(PROGUARD) -injars $< -outjars $@ $(PRIVATE_PROGUARD_FLAGS) $(1)
18713b2bdf10338fb048fc749ce9f65a77f917f7d304Ying Wangendef
18723b2bdf10338fb048fc749ce9f65a77f917f7d304Ying Wang
18733b2bdf10338fb048fc749ce9f65a77f917f7d304Ying Wang# Figure out the proguard dictionary file of the module that is instrumentationed for.
18743b2bdf10338fb048fc749ce9f65a77f917f7d304Ying Wangdefine get-instrumentation-proguard-flags
18753b2bdf10338fb048fc749ce9f65a77f917f7d304Ying Wang$(if $(PRIVATE_INSTRUMENTATION_FOR),$(if $(ALL_MODULES.$(PRIVATE_INSTRUMENTATION_FOR).PROGUARD_ENABLED),-applymapping $(call intermediates-dir-for,APPS,$(PRIVATE_INSTRUMENTATION_FOR),,COMMON)/proguard_dictionary))
18763b2bdf10338fb048fc749ce9f65a77f917f7d304Ying Wangendef
18773b2bdf10338fb048fc749ce9f65a77f917f7d304Ying Wang
18783b2bdf10338fb048fc749ce9f65a77f917f7d304Ying Wangdefine transform-jar-to-proguard
18793b2bdf10338fb048fc749ce9f65a77f917f7d304Ying Wang$(eval _instrumentation_proguard_flags:=$(call get-instrumentation-proguard-flags))
18803b2bdf10338fb048fc749ce9f65a77f917f7d304Ying Wang$(eval _enable_proguard:=$(PRIVATE_PROGUARD_ENABLED)$(_instrumentation_proguard_flags))
18813b2bdf10338fb048fc749ce9f65a77f917f7d304Ying Wang$(if $(_enable_proguard),$(call proguard-enabled-commands,$(_instrumentation_proguard_flags)),$(call proguard-disabled-commands))
18823b2bdf10338fb048fc749ce9f65a77f917f7d304Ying Wang$(eval _instrumentation_proguard_flags:=)
18833b2bdf10338fb048fc749ce9f65a77f917f7d304Ying Wang$(eval _enable_proguard:=)
18843b2bdf10338fb048fc749ce9f65a77f917f7d304Ying Wangendef
18853b2bdf10338fb048fc749ce9f65a77f917f7d304Ying Wang
18863b2bdf10338fb048fc749ce9f65a77f917f7d304Ying Wang
18873b2bdf10338fb048fc749ce9f65a77f917f7d304Ying Wang###########################################################
188888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## Stuff source generated from one-off tools
188988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
189088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
189188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine transform-generated-source
189288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project@echo "target Generated: $(PRIVATE_MODULE) <= $<"
189388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project@mkdir -p $(dir $@)
189488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project$(hide) $(PRIVATE_CUSTOM_TOOL)
189588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
189688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
189788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
189888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
189988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## Assertions about attributes of the target
190088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
190188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
190288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# $(1): The file to check
190388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectifndef get-file-size
190488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project$(error HOST_OS must define get-file-size)
190588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendif
190688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
19074647f12a4ff9dc54247184f17ff3de1cc423f213Doug Zongker# Convert a partition data size (eg, as reported in /proc/mtd) to the
19084647f12a4ff9dc54247184f17ff3de1cc423f213Doug Zongker# size of the image used to flash that partition (which includes a
19099cb8c2835232c8dc99cecca85a7e99bdee7109a9Lars Svensson# spare area for each page).
19104647f12a4ff9dc54247184f17ff3de1cc423f213Doug Zongker# $(1): the partition data size
19114647f12a4ff9dc54247184f17ff3de1cc423f213Doug Zongkerdefine image-size-from-data-size
19124a2ecaf5dc7434dd06a1fbcf14c56e6a7c7b383bYing Wang$(strip $(eval _isfds_value := $$(shell echo $$$$(($(1) / $(BOARD_NAND_PAGE_SIZE) * \
19134a2ecaf5dc7434dd06a1fbcf14c56e6a7c7b383bYing Wang  ($(BOARD_NAND_PAGE_SIZE)+$(BOARD_NAND_SPARE_SIZE))))))\
19144a2ecaf5dc7434dd06a1fbcf14c56e6a7c7b383bYing Wang$(if $(filter 0, $(_isfds_value)),$(shell echo $$(($(BOARD_NAND_PAGE_SIZE)+$(BOARD_NAND_SPARE_SIZE)))),$(_isfds_value))\
19154a2ecaf5dc7434dd06a1fbcf14c56e6a7c7b383bYing Wang$(eval _isfds_value :=))
19164647f12a4ff9dc54247184f17ff3de1cc423f213Doug Zongkerendef
19174647f12a4ff9dc54247184f17ff3de1cc423f213Doug Zongker
19184647f12a4ff9dc54247184f17ff3de1cc423f213Doug Zongker# $(1): The file(s) to check (often $@)
19194647f12a4ff9dc54247184f17ff3de1cc423f213Doug Zongker# $(2): The maximum total image size, in decimal bytes
19206dd2ae02c1a117f7494d8b880fdc6c35572adaa8Doug Zongker# $(3): the type of filesystem "yaffs" or "raw"
192188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#
192288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# If $(2) is empty, evaluates to "true"
192388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#
192488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# Reserve bad blocks.  Make sure that MAX(1% of partition size, 2 blocks)
192588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# is left over after the image has been flashed.  Round the 1% up to the
192688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# next whole flash block size.
192788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine assert-max-file-size
192888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project$(if $(2), \
1929742fa575d09272f1e06616fc208a1e08830c8f82Doug Zongker  size=$$(for i in $(1); do $(call get-file-size,$$i); echo +; done; echo 0); \
1930742fa575d09272f1e06616fc208a1e08830c8f82Doug Zongker  total=$$(( $$( echo "$$size" ) )); \
19314647f12a4ff9dc54247184f17ff3de1cc423f213Doug Zongker  printname=$$(echo -n "$(1)" | tr " " +); \
19324647f12a4ff9dc54247184f17ff3de1cc423f213Doug Zongker  img_blocksize=$(call image-size-from-data-size,$(BOARD_FLASH_BLOCK_SIZE)); \
19336dd2ae02c1a117f7494d8b880fdc6c35572adaa8Doug Zongker  if [ "$(3)" == "yaffs" ]; then \
193493d9ff44ce700c770fd78b9e15467be2af587559Doug Zongker    reservedblocks=8; \
19356dd2ae02c1a117f7494d8b880fdc6c35572adaa8Doug Zongker  else \
19364ac1ba61075190fa9ced594c85285beff6293184Doug Zongker    reservedblocks=0; \
19376dd2ae02c1a117f7494d8b880fdc6c35572adaa8Doug Zongker  fi; \
19384647f12a4ff9dc54247184f17ff3de1cc423f213Doug Zongker  twoblocks=$$((img_blocksize * 2)); \
19394647f12a4ff9dc54247184f17ff3de1cc423f213Doug Zongker  onepct=$$((((($(2) / 100) - 1) / img_blocksize + 1) * img_blocksize)); \
19406dd2ae02c1a117f7494d8b880fdc6c35572adaa8Doug Zongker  reserve=$$(((twoblocks > onepct ? twoblocks : onepct) + \
19416dd2ae02c1a117f7494d8b880fdc6c35572adaa8Doug Zongker               reservedblocks * img_blocksize)); \
19424647f12a4ff9dc54247184f17ff3de1cc423f213Doug Zongker  maxsize=$$(($(2) - reserve)); \
194399bcbeb355959d073e24dc5da9f858ee24cf7baaYing Wang  echo "$$printname maxsize=$$maxsize blocksize=$$img_blocksize total=$$total reserve=$$reserve"; \
19444647f12a4ff9dc54247184f17ff3de1cc423f213Doug Zongker  if [ "$$total" -gt "$$maxsize" ]; then \
19454647f12a4ff9dc54247184f17ff3de1cc423f213Doug Zongker    echo "error: $$printname too large ($$total > [$(2) - $$reserve])"; \
19464647f12a4ff9dc54247184f17ff3de1cc423f213Doug Zongker    false; \
1947742fa575d09272f1e06616fc208a1e08830c8f82Doug Zongker  elif [ "$$total" -gt $$((maxsize - 32768)) ]; then \
19484647f12a4ff9dc54247184f17ff3de1cc423f213Doug Zongker    echo "WARNING: $$printname approaching size limit ($$total now; limit $$maxsize)"; \
194988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project  fi \
195088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project , \
195188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project  true \
195288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project )
195388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
195488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
19558510a1e0d7d45179e5fa19bebf26d022ec4c4e91Doug Zongker# Like assert-max-file-size, but the second argument is a partition
19568510a1e0d7d45179e5fa19bebf26d022ec4c4e91Doug Zongker# size, which we'll convert to a max image size before checking it
19578510a1e0d7d45179e5fa19bebf26d022ec4c4e91Doug Zongker# against the files.
19588510a1e0d7d45179e5fa19bebf26d022ec4c4e91Doug Zongker#
19598510a1e0d7d45179e5fa19bebf26d022ec4c4e91Doug Zongker# $(1): The file(s) to check (often $@)
19608510a1e0d7d45179e5fa19bebf26d022ec4c4e91Doug Zongker# $(2): The partition size.
19618510a1e0d7d45179e5fa19bebf26d022ec4c4e91Doug Zongkerdefine assert-max-image-size
19628510a1e0d7d45179e5fa19bebf26d022ec4c4e91Doug Zongker$(if $(2), \
19638510a1e0d7d45179e5fa19bebf26d022ec4c4e91Doug Zongker  $(call assert-max-file-size,$(1),$(call image-size-from-data-size,$(2))), \
19648510a1e0d7d45179e5fa19bebf26d022ec4c4e91Doug Zongker  true)
19658510a1e0d7d45179e5fa19bebf26d022ec4c4e91Doug Zongkerendef
19668510a1e0d7d45179e5fa19bebf26d022ec4c4e91Doug Zongker
1967e01100c7ac15bd884ca02c64f42b908b93e37c26Doug Zongker
1968e01100c7ac15bd884ca02c64f42b908b93e37c26Doug Zongker###########################################################
1969e01100c7ac15bd884ca02c64f42b908b93e37c26Doug Zongker## Define device-specific radio files
1970e01100c7ac15bd884ca02c64f42b908b93e37c26Doug Zongker###########################################################
1971e01100c7ac15bd884ca02c64f42b908b93e37c26Doug Zongker
1972e01100c7ac15bd884ca02c64f42b908b93e37c26Doug Zongker# Copy a radio image file to the output location, and add it to
1973e01100c7ac15bd884ca02c64f42b908b93e37c26Doug Zongker# INSTALLED_RADIOIMAGE_TARGET.
1974e01100c7ac15bd884ca02c64f42b908b93e37c26Doug Zongker# $(1): filename
1975e01100c7ac15bd884ca02c64f42b908b93e37c26Doug Zongkerdefine add-radio-file
197614833605d26bf970cd5335c02af4354b68d93348Doug Zongker  $(eval $(call add-radio-file-internal,$(1),$(notdir $(1))))
1977e01100c7ac15bd884ca02c64f42b908b93e37c26Doug Zongkerendef
1978e01100c7ac15bd884ca02c64f42b908b93e37c26Doug Zongkerdefine add-radio-file-internal
197914833605d26bf970cd5335c02af4354b68d93348Doug ZongkerINSTALLED_RADIOIMAGE_TARGET += $$(PRODUCT_OUT)/$(2)
198014833605d26bf970cd5335c02af4354b68d93348Doug Zongker$$(PRODUCT_OUT)/$(2) : $$(LOCAL_PATH)/$(1) | $$(ACP)
1981e01100c7ac15bd884ca02c64f42b908b93e37c26Doug Zongker	$$(transform-prebuilt-to-target)
1982e01100c7ac15bd884ca02c64f42b908b93e37c26Doug Zongkerendef
1983e01100c7ac15bd884ca02c64f42b908b93e37c26Doug Zongker
19849296f092771a0261404f51bcbc1b62ba20654947Doug Zongker# Version of add-radio-file that also arranges for the version of the
19859296f092771a0261404f51bcbc1b62ba20654947Doug Zongker# file to be checked against the contents of
19869296f092771a0261404f51bcbc1b62ba20654947Doug Zongker# $(TARGET_BOARD_INFO_FILE).
19879296f092771a0261404f51bcbc1b62ba20654947Doug Zongker# $(1): filename
19889296f092771a0261404f51bcbc1b62ba20654947Doug Zongker# $(2): name of version variable in board-info (eg, "version-baseband")
19899296f092771a0261404f51bcbc1b62ba20654947Doug Zongkerdefine add-radio-file-checked
19909296f092771a0261404f51bcbc1b62ba20654947Doug Zongker  $(eval $(call add-radio-file-checked-internal,$(1),$(notdir $(1)),$(2)))
19919296f092771a0261404f51bcbc1b62ba20654947Doug Zongkerendef
19929296f092771a0261404f51bcbc1b62ba20654947Doug Zongkerdefine add-radio-file-checked-internal
19939296f092771a0261404f51bcbc1b62ba20654947Doug ZongkerINSTALLED_RADIOIMAGE_TARGET += $$(PRODUCT_OUT)/$(2)
19949296f092771a0261404f51bcbc1b62ba20654947Doug ZongkerBOARD_INFO_CHECK += $(3):$(LOCAL_PATH)/$(1)
19959296f092771a0261404f51bcbc1b62ba20654947Doug Zongker$$(PRODUCT_OUT)/$(2) : $$(LOCAL_PATH)/$(1) | $$(ACP)
19969296f092771a0261404f51bcbc1b62ba20654947Doug Zongker	$$(transform-prebuilt-to-target)
19979296f092771a0261404f51bcbc1b62ba20654947Doug Zongkerendef
19989296f092771a0261404f51bcbc1b62ba20654947Doug Zongker
1999e01100c7ac15bd884ca02c64f42b908b93e37c26Doug Zongker
200088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
2001899e62a841bebefe6d9ab37ddc682e72fcb0f92bJoe Onorato# Override the package defined in $(1), setting the
2002899e62a841bebefe6d9ab37ddc682e72fcb0f92bJoe Onorato# variables listed below differently.
2003899e62a841bebefe6d9ab37ddc682e72fcb0f92bJoe Onorato#
2004899e62a841bebefe6d9ab37ddc682e72fcb0f92bJoe Onorato#  $(1): The makefile to override (relative to the source
2005899e62a841bebefe6d9ab37ddc682e72fcb0f92bJoe Onorato#        tree root)
2006899e62a841bebefe6d9ab37ddc682e72fcb0f92bJoe Onorato#  $(2): Old LOCAL_PACKAGE_NAME value.
2007899e62a841bebefe6d9ab37ddc682e72fcb0f92bJoe Onorato#  $(3): New LOCAL_PACKAGE_NAME value.
20083dae0ee46cf5fcde6eb424f9ab0c69f2d901a671Ying Wang#  $(4): New LOCAL_MANIFEST_PACKAGE_NAME value.
20093dae0ee46cf5fcde6eb424f9ab0c69f2d901a671Ying Wang#  $(5): New LOCAL_CERTIFICATE value.
20103dae0ee46cf5fcde6eb424f9ab0c69f2d901a671Ying Wang#  $(6): New LOCAL_INSTRUMENTATION_FOR value.
20113dae0ee46cf5fcde6eb424f9ab0c69f2d901a671Ying Wang#  $(7): New LOCAL_MANIFEST_INSTRUMENTATION_FOR value.
2012899e62a841bebefe6d9ab37ddc682e72fcb0f92bJoe Onorato#
2013899e62a841bebefe6d9ab37ddc682e72fcb0f92bJoe Onorato# Note that LOCAL_PACKAGE_OVERRIDES is NOT cleared in
2014899e62a841bebefe6d9ab37ddc682e72fcb0f92bJoe Onorato# clear_vars.mk.
2015899e62a841bebefe6d9ab37ddc682e72fcb0f92bJoe Onorato###########################################################
2016899e62a841bebefe6d9ab37ddc682e72fcb0f92bJoe Onoratodefine inherit-package
20173dae0ee46cf5fcde6eb424f9ab0c69f2d901a671Ying Wang  $(eval $(call inherit-package-internal,$(1),$(2),$(3),$(4),$(5),$(6),$(7)))
2018899e62a841bebefe6d9ab37ddc682e72fcb0f92bJoe Onoratoendef
2019899e62a841bebefe6d9ab37ddc682e72fcb0f92bJoe Onorato
2020899e62a841bebefe6d9ab37ddc682e72fcb0f92bJoe Onoratodefine inherit-package-internal
2021899e62a841bebefe6d9ab37ddc682e72fcb0f92bJoe Onorato  LOCAL_PACKAGE_OVERRIDES \
20223dae0ee46cf5fcde6eb424f9ab0c69f2d901a671Ying Wang      := $(strip $(1))||$(strip $(2))||$(strip $(3))||$(strip $(4))||&&$(strip $(5))||&&$(strip $(6))||&&$(strip $(7)) $(LOCAL_PACKAGE_OVERRIDES)
2023899e62a841bebefe6d9ab37ddc682e72fcb0f92bJoe Onorato  include $(1)
2024899e62a841bebefe6d9ab37ddc682e72fcb0f92bJoe Onorato  LOCAL_PACKAGE_OVERRIDES \
2025899e62a841bebefe6d9ab37ddc682e72fcb0f92bJoe Onorato      := $(wordlist 1,$(words $(LOCAL_PACKAGE_OVERRIDES)), $(LOCAL_PACKAGE_OVERRIDES))
2026899e62a841bebefe6d9ab37ddc682e72fcb0f92bJoe Onoratoendef
2027899e62a841bebefe6d9ab37ddc682e72fcb0f92bJoe Onorato
2028899e62a841bebefe6d9ab37ddc682e72fcb0f92bJoe Onorato# To be used with inherit-package above
2029899e62a841bebefe6d9ab37ddc682e72fcb0f92bJoe Onorato# Evalutes to true if the package was overridden
2030899e62a841bebefe6d9ab37ddc682e72fcb0f92bJoe Onoratodefine set-inherited-package-variables
2031899e62a841bebefe6d9ab37ddc682e72fcb0f92bJoe Onorato$(strip $(call set-inherited-package-variables-internal))
2032899e62a841bebefe6d9ab37ddc682e72fcb0f92bJoe Onoratoendef
2033899e62a841bebefe6d9ab37ddc682e72fcb0f92bJoe Onorato
2034899e62a841bebefe6d9ab37ddc682e72fcb0f92bJoe Onoratodefine keep-or-override
2035899e62a841bebefe6d9ab37ddc682e72fcb0f92bJoe Onorato$(eval $(1) := $(if $(2),$(2),$($(1))))
2036899e62a841bebefe6d9ab37ddc682e72fcb0f92bJoe Onoratoendef
2037899e62a841bebefe6d9ab37ddc682e72fcb0f92bJoe Onorato
2038899e62a841bebefe6d9ab37ddc682e72fcb0f92bJoe Onoratodefine set-inherited-package-variables-internal
2039899e62a841bebefe6d9ab37ddc682e72fcb0f92bJoe Onorato  $(eval _o := $(subst ||, ,$(lastword $(LOCAL_PACKAGE_OVERRIDES))))
2040899e62a841bebefe6d9ab37ddc682e72fcb0f92bJoe Onorato  $(eval _n := $(subst ||, ,$(firstword $(LOCAL_PACKAGE_OVERRIDES))))
2041899e62a841bebefe6d9ab37ddc682e72fcb0f92bJoe Onorato  $(if $(filter $(word 2,$(_n)),$(LOCAL_PACKAGE_NAME)), \
2042899e62a841bebefe6d9ab37ddc682e72fcb0f92bJoe Onorato    $(eval LOCAL_PACKAGE_NAME := $(word 3,$(_o))) \
2043899e62a841bebefe6d9ab37ddc682e72fcb0f92bJoe Onorato    $(eval LOCAL_MANIFEST_PACKAGE_NAME := $(word 4,$(_o))) \
20443dae0ee46cf5fcde6eb424f9ab0c69f2d901a671Ying Wang    $(call keep-or-override,LOCAL_CERTIFICATE,$(patsubst &&%,%,$(word 5,$(_o)))) \
20453dae0ee46cf5fcde6eb424f9ab0c69f2d901a671Ying Wang    $(call keep-or-override,LOCAL_INSTRUMENTATION_FOR,$(patsubst &&%,%,$(word 6,$(_o)))) \
20463dae0ee46cf5fcde6eb424f9ab0c69f2d901a671Ying Wang    $(call keep-or-override,LOCAL_MANIFEST_INSTRUMENTATION_FOR,$(patsubst &&%,%,$(word 7,$(_o)))) \
2047899e62a841bebefe6d9ab37ddc682e72fcb0f92bJoe Onorato    $(eval LOCAL_OVERRIDES_PACKAGES := $(sort $(LOCAL_OVERRIDES_PACKAGES) $(word 2,$(_o)))) \
2048899e62a841bebefe6d9ab37ddc682e72fcb0f92bJoe Onorato    true \
2049899e62a841bebefe6d9ab37ddc682e72fcb0f92bJoe Onorato  ,)
2050899e62a841bebefe6d9ab37ddc682e72fcb0f92bJoe Onoratoendef
2051899e62a841bebefe6d9ab37ddc682e72fcb0f92bJoe Onorato
2052000e89a5b95a1d3071277ff279263204f49cbd78Ying Wang###########################################################
2053000e89a5b95a1d3071277ff279263204f49cbd78Ying Wang## Expand a module name list with REQUIRED modules
2054000e89a5b95a1d3071277ff279263204f49cbd78Ying Wang###########################################################
2055000e89a5b95a1d3071277ff279263204f49cbd78Ying Wang# $(1): The variable name that holds the initial module name list.
2056000e89a5b95a1d3071277ff279263204f49cbd78Ying Wang#       the variable will be modified to hold the expanded results.
2057000e89a5b95a1d3071277ff279263204f49cbd78Ying Wang# $(2): The initial module name list.
2058000e89a5b95a1d3071277ff279263204f49cbd78Ying Wang# Returns empty string (maybe with some whitespaces).
2059000e89a5b95a1d3071277ff279263204f49cbd78Ying Wangdefine expand-required-modules
2060000e89a5b95a1d3071277ff279263204f49cbd78Ying Wang$(eval _erm_new_modules := $(sort $(filter-out $($(1)),\
2061000e89a5b95a1d3071277ff279263204f49cbd78Ying Wang  $(foreach m,$(2),$(ALL_MODULES.$(m).REQUIRED)))))\
2062000e89a5b95a1d3071277ff279263204f49cbd78Ying Wang$(if $(_erm_new_modules),$(eval $(1) += $(_erm_new_modules))\
2063000e89a5b95a1d3071277ff279263204f49cbd78Ying Wang  $(call expand-required-modules,$(1),$(_erm_new_modules)))
2064000e89a5b95a1d3071277ff279263204f49cbd78Ying Wangendef
2065899e62a841bebefe6d9ab37ddc682e72fcb0f92bJoe Onorato
2066899e62a841bebefe6d9ab37ddc682e72fcb0f92bJoe Onorato###########################################################
206788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## Other includes
206888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
206988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
207088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# -----------------------------------------------------------------
207188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# Rules and functions to help copy important files to DIST_DIR
207288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# when requested.
207388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectinclude $(BUILD_SYSTEM)/distdir.mk
207488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
207588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# broken:
207688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#	$(foreach file,$^,$(if $(findstring,.a,$(suffix $file)),-l$(file),$(file)))
207788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
207888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
207988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## Misc notes
208088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
208188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
208288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#DEPDIR = .deps
208388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#df = $(DEPDIR)/$(*F)
208488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
208588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#SRCS = foo.c bar.c ...
208688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
208788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#%.o : %.c
208888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#	@$(MAKEDEPEND); \
208988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#	  cp $(df).d $(df).P; \
209088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#	  sed -e 's/#.*//' -e 's/^[^:]*: *//' -e 's/ *\\$$//' \
209188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#	      -e '/^$$/ d' -e 's/$$/ :/' < $(df).d >> $(df).P; \
209288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#	  rm -f $(df).d
209388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#	$(COMPILE.c) -o $@ $<
209488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
209588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#-include $(SRCS:%.c=$(DEPDIR)/%.P)
209688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
209788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
209888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#%.o : %.c
209988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#	$(COMPILE.c) -MD -o $@ $<
210088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#	@cp $*.d $*.P; \
210188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#	  sed -e 's/#.*//' -e 's/^[^:]*: *//' -e 's/ *\\$$//' \
210288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#	      -e '/^$$/ d' -e 's/$$/ :/' < $*.d >> $*.P; \
210388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#	  rm -f $*.d
2104