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
5888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# Full paths to all prebuilt files that will be copied
5988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# (used to make the dependency on acp)
6088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source ProjectALL_PREBUILT:=
6188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
6288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# Full path to all files that are made by some tool
6388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source ProjectALL_GENERATED_SOURCES:=
6488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
6588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# Full path to all asm, C, C++, lex and yacc generated C files.
6688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# These all have an order-only dependency on the copied headers
6788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source ProjectALL_C_CPP_ETC_OBJECTS:=
6888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
69b375e71d306f2fd356b9b356b636e568c4581fa1Iliyan Malchev# The list of dynamic binaries that haven't been stripped/compressed/etc.
7088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source ProjectALL_ORIGINAL_DYNAMIC_BINARIES:=
7188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
7288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# These files go into the SDK
7388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source ProjectALL_SDK_FILES:=
7488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
7588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# Files for dalvik.  This is often build without building the rest of the OS.
7688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source ProjectINTERNAL_DALVIK_MODULES:=
7788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
7888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# All findbugs xml files
7988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source ProjectALL_FINDBUGS_FILES:=
8088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
81fd626f2d21a55aec9133424f4303d5450ad9622eYing Wang# GPL module license files
82fd626f2d21a55aec9133424f4303d5450ad9622eYing WangALL_GPL_MODULE_LICENSE_FILES:=
83fd626f2d21a55aec9133424f4303d5450ad9622eYing Wang
849485a57bb2e55535fc337f2be803e79cd1c46b62Ying Wang# Target and host installed module's dependencies on shared libraries.
85d6b1d61d84a95ba74bb3e4f9053014357ac363d1Ying Wang# They are list of "<module_name>:<installed_file>:lib1,lib2...".
869485a57bb2e55535fc337f2be803e79cd1c46b62Ying WangTARGET_DEPENDENCIES_ON_SHARED_LIBRARIES :=
87966c1e0cae6a59f15264d3b542af08e21e2dc06cYing Wang$(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_DEPENDENCIES_ON_SHARED_LIBRARIES :=
889485a57bb2e55535fc337f2be803e79cd1c46b62Ying WangHOST_DEPENDENCIES_ON_SHARED_LIBRARIES :=
89966c1e0cae6a59f15264d3b542af08e21e2dc06cYing Wang$(HOST_2ND_ARCH_VAR_PREFIX)HOST_DEPENDENCIES_ON_SHARED_LIBRARIES :=
909485a57bb2e55535fc337f2be803e79cd1c46b62Ying Wang
91ae25ec1bcdeb028a2db3103abdf1f22768928f0aYing Wang# Generated class file names for Android resource.
92ae25ec1bcdeb028a2db3103abdf1f22768928f0aYing Wang# They are escaped and quoted so can be passed safely to a bash command.
93ae25ec1bcdeb028a2db3103abdf1f22768928f0aYing WangANDROID_RESOURCE_GENERATED_CLASSES := 'R.class' 'R$$*.class' 'Manifest.class' 'Manifest$$*.class'
94ae25ec1bcdeb028a2db3103abdf1f22768928f0aYing Wang
9588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
9688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## Debugging; prints a variable list to stdout
9788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
9888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
9988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# $(1): variable name list, not variable values
10088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine print-vars
10188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project$(foreach var,$(1), \
10288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project  $(info $(var):) \
10388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project  $(foreach word,$($(var)), \
10488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project    $(info $(space)$(space)$(word)) \
10588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project   ) \
10688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project )
10788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
10888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
10988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
11064d85d0d827489c514f6aec075482563c80cda73Joe Onorato## Evaluates to true if the string contains the word true,
11164d85d0d827489c514f6aec075482563c80cda73Joe Onorato## and empty otherwise
11264d85d0d827489c514f6aec075482563c80cda73Joe Onorato## $(1): a var to test
11364d85d0d827489c514f6aec075482563c80cda73Joe Onorato###########################################################
11464d85d0d827489c514f6aec075482563c80cda73Joe Onorato
11564d85d0d827489c514f6aec075482563c80cda73Joe Onoratodefine true-or-empty
11664d85d0d827489c514f6aec075482563c80cda73Joe Onorato$(filter true, $(1))
11764d85d0d827489c514f6aec075482563c80cda73Joe Onoratoendef
11864d85d0d827489c514f6aec075482563c80cda73Joe Onorato
11964d85d0d827489c514f6aec075482563c80cda73Joe Onorato
12064d85d0d827489c514f6aec075482563c80cda73Joe Onorato###########################################################
12188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## Retrieve the directory of the current makefile
1223bbfddd2eae96b69be14baeca05726a70062ba6cYing Wang## Must be called before including any other makefile!!
12388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
12488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
12588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# Figure out where we are.
12688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine my-dir
127b392641d9b07d6321aed828c983af04115da8aabDave Bort$(strip \
12868f1c77a8db3ee6f92194cbaeeb1bf559bb79afdYing Wang  $(eval LOCAL_MODULE_MAKEFILE := $$(lastword $$(MAKEFILE_LIST))) \
1293bbfddd2eae96b69be14baeca05726a70062ba6cYing Wang  $(if $(filter $(BUILD_SYSTEM)/% $(OUT_DIR)/%,$(LOCAL_MODULE_MAKEFILE)), \
1303bbfddd2eae96b69be14baeca05726a70062ba6cYing Wang    $(error my-dir must be called before including any other makefile.) \
131b392641d9b07d6321aed828c983af04115da8aabDave Bort   , \
13268f1c77a8db3ee6f92194cbaeeb1bf559bb79afdYing Wang    $(patsubst %/,%,$(dir $(LOCAL_MODULE_MAKEFILE))) \
133b392641d9b07d6321aed828c983af04115da8aabDave Bort   ) \
134b392641d9b07d6321aed828c983af04115da8aabDave Bort )
13588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
13688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
13788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
13888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## Retrieve a list of all makefiles immediately below some directory
13988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
14088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
14188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine all-makefiles-under
14288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project$(wildcard $(1)/*/Android.mk)
14388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
14488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
14588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
14688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## Look under a directory for makefiles that don't have parent
14788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## makefiles.
14888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
14988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
15088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# $(1): directory to search under
15188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# Ignores $(1)/Android.mk
15288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine first-makefiles-under
1531390cac3cea58f1c5c738bf875b4de5ba4d68fa4JP Abgrall$(shell build/tools/findleaves.py --prune=$(OUT_DIR) --prune=.repo --prune=.git \
154dc1a728fb89677589bf3b5e3a5aab58164c9be6bJoe Onorato        --mindepth=2 $(1) Android.mk)
15588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
15688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
15788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
15888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## Retrieve a list of all makefiles immediately below your directory
1593bbfddd2eae96b69be14baeca05726a70062ba6cYing Wang## Must be called before including any other makefile!!
16088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
16188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
16288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine all-subdir-makefiles
16388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project$(call all-makefiles-under,$(call my-dir))
16488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
16588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
16688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
16788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## Look in the named list of directories for makefiles,
16888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## relative to the current directory.
1693bbfddd2eae96b69be14baeca05726a70062ba6cYing Wang## Must be called before including any other makefile!!
17088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
17188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
17288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# $(1): List of directories to look for under this directory
17388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine all-named-subdir-makefiles
174e73c4bbc509f414cb8fbf487b7f44ab94af9cbb9Chih-Wei Huang$(wildcard $(addsuffix /Android.mk, $(addprefix $(call my-dir)/,$(1))))
17588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
17688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
17788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
17888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## Find all of the java files under the named directories.
17988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## Meant to be used like:
18088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project##    SRC_FILES := $(call all-java-files-under,src tests)
18188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
18288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
18388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine all-java-files-under
18488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project$(patsubst ./%,%, \
18588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project  $(shell cd $(LOCAL_PATH) ; \
186f435739bac0507b8d7711957474e2f1c5c1fdc7bConley Owens          find -L $(1) -name "*.java" -and -not -name ".*") \
18788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project )
18888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
18988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
19088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
19188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## Find all of the java files from here.  Meant to be used like:
19288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project##    SRC_FILES := $(call all-subdir-java-files)
19388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
19488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
19588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine all-subdir-java-files
19688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project$(call all-java-files-under,.)
19788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
19888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
19988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
20088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## Find all of the c files under the named directories.
20188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## Meant to be used like:
20288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project##    SRC_FILES := $(call all-c-files-under,src tests)
20388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
20488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
20588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine all-c-files-under
20688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project$(patsubst ./%,%, \
20788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project  $(shell cd $(LOCAL_PATH) ; \
208f435739bac0507b8d7711957474e2f1c5c1fdc7bConley Owens          find -L $(1) -name "*.c" -and -not -name ".*") \
20988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project )
21088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
21188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
21288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
21388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## Find all of the c files from here.  Meant to be used like:
21488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project##    SRC_FILES := $(call all-subdir-c-files)
21588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
21688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
21788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine all-subdir-c-files
21888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project$(call all-c-files-under,.)
21988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
22088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
22188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
22288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## Find all files named "I*.aidl" under the named directories,
22388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## which must be relative to $(LOCAL_PATH).  The returned list
22488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## is relative to $(LOCAL_PATH).
22588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
22688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
22788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine all-Iaidl-files-under
22888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project$(patsubst ./%,%, \
22988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project  $(shell cd $(LOCAL_PATH) ; \
230f435739bac0507b8d7711957474e2f1c5c1fdc7bConley Owens          find -L $(1) -name "I*.aidl" -and -not -name ".*") \
23188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project )
23288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
23388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
23488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
23588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## Find all of the "I*.aidl" files under $(LOCAL_PATH).
23688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
23788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
23888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine all-subdir-Iaidl-files
23988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project$(call all-Iaidl-files-under,.)
24088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
24188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
24288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
243a89c990e31b39e58adecd1f72b517d47284b275aBjorn Bringert## Find all of the logtags files under the named directories.
244a89c990e31b39e58adecd1f72b517d47284b275aBjorn Bringert## Meant to be used like:
245a89c990e31b39e58adecd1f72b517d47284b275aBjorn Bringert##    SRC_FILES := $(call all-logtags-files-under,src)
246a89c990e31b39e58adecd1f72b517d47284b275aBjorn Bringert###########################################################
247a89c990e31b39e58adecd1f72b517d47284b275aBjorn Bringert
248a89c990e31b39e58adecd1f72b517d47284b275aBjorn Bringertdefine all-logtags-files-under
249a89c990e31b39e58adecd1f72b517d47284b275aBjorn Bringert$(patsubst ./%,%, \
250a89c990e31b39e58adecd1f72b517d47284b275aBjorn Bringert  $(shell cd $(LOCAL_PATH) ; \
251f435739bac0507b8d7711957474e2f1c5c1fdc7bConley Owens          find -L $(1) -name "*.logtags" -and -not -name ".*") \
252a89c990e31b39e58adecd1f72b517d47284b275aBjorn Bringert  )
253a89c990e31b39e58adecd1f72b517d47284b275aBjorn Bringertendef
254a89c990e31b39e58adecd1f72b517d47284b275aBjorn Bringert
255a89c990e31b39e58adecd1f72b517d47284b275aBjorn Bringert###########################################################
256a5fc87a93713b1976c5bfdd602d1c6bd285e7533Ying Wang## Find all of the .proto files under the named directories.
257a5fc87a93713b1976c5bfdd602d1c6bd285e7533Ying Wang## Meant to be used like:
258a5fc87a93713b1976c5bfdd602d1c6bd285e7533Ying Wang##    SRC_FILES := $(call all-proto-files-under,src)
259a5fc87a93713b1976c5bfdd602d1c6bd285e7533Ying Wang###########################################################
260a5fc87a93713b1976c5bfdd602d1c6bd285e7533Ying Wang
261a5fc87a93713b1976c5bfdd602d1c6bd285e7533Ying Wangdefine all-proto-files-under
262a5fc87a93713b1976c5bfdd602d1c6bd285e7533Ying Wang$(patsubst ./%,%, \
263a5fc87a93713b1976c5bfdd602d1c6bd285e7533Ying Wang  $(shell cd $(LOCAL_PATH) ; \
264f435739bac0507b8d7711957474e2f1c5c1fdc7bConley Owens          find -L $(1) -name "*.proto" -and -not -name ".*") \
265a5fc87a93713b1976c5bfdd602d1c6bd285e7533Ying Wang  )
266a5fc87a93713b1976c5bfdd602d1c6bd285e7533Ying Wangendef
267a5fc87a93713b1976c5bfdd602d1c6bd285e7533Ying Wang
268a5fc87a93713b1976c5bfdd602d1c6bd285e7533Ying Wang###########################################################
2690bd59a0a58f9891926ff6faf74a78307230d705bYing Wang## Find all of the RenderScript files under the named directories.
2700bd59a0a58f9891926ff6faf74a78307230d705bYing Wang##  Meant to be used like:
2710bd59a0a58f9891926ff6faf74a78307230d705bYing Wang##    SRC_FILES := $(call all-renderscript-files-under,src)
2720bd59a0a58f9891926ff6faf74a78307230d705bYing Wang###########################################################
2730bd59a0a58f9891926ff6faf74a78307230d705bYing Wang
2740bd59a0a58f9891926ff6faf74a78307230d705bYing Wangdefine all-renderscript-files-under
2750bd59a0a58f9891926ff6faf74a78307230d705bYing Wang$(patsubst ./%,%, \
2760bd59a0a58f9891926ff6faf74a78307230d705bYing Wang  $(shell cd $(LOCAL_PATH) ; \
277d26375733992298edc036652d25170e1cd7cbd49Stephen Hines          find -L $(1) \( -name "*.rs" -or -name "*.fs" \) -and -not -name ".*") \
2780bd59a0a58f9891926ff6faf74a78307230d705bYing Wang  )
2790bd59a0a58f9891926ff6faf74a78307230d705bYing Wangendef
2800bd59a0a58f9891926ff6faf74a78307230d705bYing Wang
2810bd59a0a58f9891926ff6faf74a78307230d705bYing Wang###########################################################
282e3b044a0cc5ffb4817dfba412118ee4a3d273b63Elliott Hughes## Find all of the S files under the named directories.
283e3b044a0cc5ffb4817dfba412118ee4a3d273b63Elliott Hughes## Meant to be used like:
284e3b044a0cc5ffb4817dfba412118ee4a3d273b63Elliott Hughes##    SRC_FILES := $(call all-c-files-under,src tests)
285e3b044a0cc5ffb4817dfba412118ee4a3d273b63Elliott Hughes###########################################################
286e3b044a0cc5ffb4817dfba412118ee4a3d273b63Elliott Hughes
287e3b044a0cc5ffb4817dfba412118ee4a3d273b63Elliott Hughesdefine all-S-files-under
288e3b044a0cc5ffb4817dfba412118ee4a3d273b63Elliott Hughes$(patsubst ./%,%, \
289e3b044a0cc5ffb4817dfba412118ee4a3d273b63Elliott Hughes  $(shell cd $(LOCAL_PATH) ; \
290e3b044a0cc5ffb4817dfba412118ee4a3d273b63Elliott Hughes          find -L $(1) -name "*.S" -and -not -name ".*") \
291e3b044a0cc5ffb4817dfba412118ee4a3d273b63Elliott Hughes )
292e3b044a0cc5ffb4817dfba412118ee4a3d273b63Elliott Hughesendef
293e3b044a0cc5ffb4817dfba412118ee4a3d273b63Elliott Hughes
294e3b044a0cc5ffb4817dfba412118ee4a3d273b63Elliott Hughes###########################################################
2950a3cfdc853efb7a57b06def3bd95127398366acbJean-Baptiste Queru## Find all of the html files under the named directories.
2960a3cfdc853efb7a57b06def3bd95127398366acbJean-Baptiste Queru## Meant to be used like:
2970a3cfdc853efb7a57b06def3bd95127398366acbJean-Baptiste Queru##    SRC_FILES := $(call all-html-files-under,src tests)
2980a3cfdc853efb7a57b06def3bd95127398366acbJean-Baptiste Queru###########################################################
2990a3cfdc853efb7a57b06def3bd95127398366acbJean-Baptiste Queru
3000a3cfdc853efb7a57b06def3bd95127398366acbJean-Baptiste Querudefine all-html-files-under
3010a3cfdc853efb7a57b06def3bd95127398366acbJean-Baptiste Queru$(patsubst ./%,%, \
3020a3cfdc853efb7a57b06def3bd95127398366acbJean-Baptiste Queru  $(shell cd $(LOCAL_PATH) ; \
303f435739bac0507b8d7711957474e2f1c5c1fdc7bConley Owens          find -L $(1) -name "*.html" -and -not -name ".*") \
3040a3cfdc853efb7a57b06def3bd95127398366acbJean-Baptiste Queru )
3050a3cfdc853efb7a57b06def3bd95127398366acbJean-Baptiste Queruendef
3060a3cfdc853efb7a57b06def3bd95127398366acbJean-Baptiste Queru
3070a3cfdc853efb7a57b06def3bd95127398366acbJean-Baptiste Queru###########################################################
30888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## Find all of the html files from here.  Meant to be used like:
30988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project##    SRC_FILES := $(call all-subdir-html-files)
31088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
31188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
31288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine all-subdir-html-files
3130a3cfdc853efb7a57b06def3bd95127398366acbJean-Baptiste Queru$(call all-html-files-under,.)
31488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
31588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
31688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
31788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## Find all of the files matching pattern
31888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project##    SRC_FILES := $(call find-subdir-files, <pattern>)
31988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
32088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
32188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine find-subdir-files
322f435739bac0507b8d7711957474e2f1c5c1fdc7bConley Owens$(patsubst ./%,%,$(shell cd $(LOCAL_PATH) ; find -L $(1)))
32388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
32488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
32588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
32688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# find the files in the subdirectory $1 of LOCAL_DIR
32788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# matching pattern $2, filtering out files $3
32888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# e.g.
32988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#     SRC_FILES += $(call find-subdir-subdir-files, \
33088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#                         css, *.cpp, DontWantThis.cpp)
33188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
33288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
33388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine find-subdir-subdir-files
33488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project$(filter-out $(patsubst %,$(1)/%,$(3)),$(patsubst ./%,%,$(shell cd \
335f435739bac0507b8d7711957474e2f1c5c1fdc7bConley Owens            $(LOCAL_PATH) ; find -L $(1) -maxdepth 1 -name $(2))))
33688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
33788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
33888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
33988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## Find all of the files matching pattern
34088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project##    SRC_FILES := $(call all-subdir-java-files)
34188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
34288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
34388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine find-subdir-assets
34488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project$(if $(1),$(patsubst ./%,%, \
3456ab5d6aa166f14c79f31240d2902b5b539253af3Ying Wang	$(shell if [ -d $(1) ] ; then cd $(1) ; find ./ -not -name '.*' -and -type f -and -not -type l ; fi)), \
34688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project	$(warning Empty argument supplied to find-subdir-assets) \
34788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project)
34888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
34988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
35088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
35188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## Find various file types in a list of directories relative to $(LOCAL_PATH)
35288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
35388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
35488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine find-other-java-files
35588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project	$(call find-subdir-files,$(1) -name "*.java" -and -not -name ".*")
35688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
35788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
35888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine find-other-html-files
35988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project	$(call find-subdir-files,$(1) -name "*.html" -and -not -name ".*")
36088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
36188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
36288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
36385898bca9969ec30c746cc852394bbae0195edbcYing Wang# Use utility find to find given files in the given subdirs.
36485898bca9969ec30c746cc852394bbae0195edbcYing Wang# This function uses $(1), instead of LOCAL_PATH as the base.
36585898bca9969ec30c746cc852394bbae0195edbcYing Wang# $(1): the base dir, relative to the root of the source tree.
36685898bca9969ec30c746cc852394bbae0195edbcYing Wang# $(2): the file name pattern to be passed to find as "-name".
36785898bca9969ec30c746cc852394bbae0195edbcYing Wang# $(3): a list of subdirs of the base dir.
36885898bca9969ec30c746cc852394bbae0195edbcYing Wang# Returns: a list of paths relative to the base dir.
36985898bca9969ec30c746cc852394bbae0195edbcYing Wang###########################################################
37085898bca9969ec30c746cc852394bbae0195edbcYing Wang
37185898bca9969ec30c746cc852394bbae0195edbcYing Wangdefine find-files-in-subdirs
37285898bca9969ec30c746cc852394bbae0195edbcYing Wang$(patsubst ./%,%, \
37385898bca9969ec30c746cc852394bbae0195edbcYing Wang  $(shell cd $(1) ; \
37485898bca9969ec30c746cc852394bbae0195edbcYing Wang          find -L $(3) -name $(2) -and -not -name ".*") \
37585898bca9969ec30c746cc852394bbae0195edbcYing Wang )
37685898bca9969ec30c746cc852394bbae0195edbcYing Wangendef
37785898bca9969ec30c746cc852394bbae0195edbcYing Wang
37885898bca9969ec30c746cc852394bbae0195edbcYing Wang###########################################################
37988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## Scan through each directory of $(1) looking for files
38088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## that match $(2) using $(wildcard).  Useful for seeing if
38188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## a given directory or one of its parents contains
38288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## a particular file.  Returns the first match found,
38388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## starting furthest from the root.
38488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
38588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
38688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine find-parent-file
38788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project$(strip \
388a67ce69e9a1ff267cb3c01bdd3214b6c68aa6f63Ying Wang  $(eval _fpf := $(wildcard $(foreach f, $(2), $(strip $(1))/$(f)))) \
38988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project  $(if $(_fpf),$(_fpf), \
39088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project       $(if $(filter-out ./ .,$(1)), \
39188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project             $(call find-parent-file,$(patsubst %/,%,$(dir $(1))),$(2)) \
39288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project        ) \
39388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project   ) \
39488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project)
39588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
39688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
39788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
39888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## Function we can evaluate to introduce a dynamic dependency
39988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
40088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
40188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine add-dependency
40288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project$(1): $(2)
40388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
40488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
40588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
40688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## The intermediates directory.  Where object files go for
40788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## a given target.  We could technically get away without
40888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## the "_intermediates" suffix on the directory, but it's
40988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## nice to be able to grep for that string to find out if
41088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## anyone's abusing the system.
41188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
41288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
41388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# $(1): target class, like "APPS"
41488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# $(2): target name, like "NotePad"
41588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# $(3): if non-empty, this is a HOST target.
41688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# $(4): if non-empty, force the intermediates to be COMMON
41761d499b965e3314308b9510f6b6d4c8919bb0b3aYing Wang# $(5): if non-empty, force the intermedistes to be for the 2nd arch
41888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine intermediates-dir-for
41988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project$(strip \
42088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project    $(eval _idfClass := $(strip $(1))) \
42188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project    $(if $(_idfClass),, \
42288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project        $(error $(LOCAL_PATH): Class not defined in call to intermediates-dir-for)) \
42388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project    $(eval _idfName := $(strip $(2))) \
42488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project    $(if $(_idfName),, \
42588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project        $(error $(LOCAL_PATH): Name not defined in call to intermediates-dir-for)) \
42688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project    $(eval _idfPrefix := $(if $(strip $(3)),HOST,TARGET)) \
427ae2986e51a52833deac6c03f55924e3271e3586dColin Cross    $(eval _idf2ndArchPrefix := $(if $(strip $(5)),$(TARGET_2ND_ARCH_VAR_PREFIX))) \
428a83940fa7851b35712e559be2246b56b5666b805Ying Wang    $(if $(filter $(_idfPrefix)-$(_idfClass),$(COMMON_MODULE_CLASSES))$(4), \
42988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project        $(eval _idfIntBase := $($(_idfPrefix)_OUT_COMMON_INTERMEDIATES)) \
4306feb6d5607ce86a446645564212043964628f540Ying Wang      ,$(if $(filter $(_idfClass),SHARED_LIBRARIES STATIC_LIBRARIES EXECUTABLES GYP),\
43102e31d240a9044b54ee793902ad958894f84e7a1Colin Cross          $(eval _idfIntBase := $($(_idf2ndArchPrefix)$(_idfPrefix)_OUT_INTERMEDIATES)) \
43202e31d240a9044b54ee793902ad958894f84e7a1Colin Cross       ,$(eval _idfIntBase := $($(_idfPrefix)_OUT_INTERMEDIATES)) \
43302e31d240a9044b54ee793902ad958894f84e7a1Colin Cross       ) \
43488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project     ) \
43588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project    $(_idfIntBase)/$(_idfClass)/$(_idfName)_intermediates \
43688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project)
43788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
43888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
43988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# Uses LOCAL_MODULE_CLASS, LOCAL_MODULE, and LOCAL_IS_HOST_MODULE
44088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# to determine the intermediates directory.
44188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#
44288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# $(1): if non-empty, force the intermediates to be COMMON
44361d499b965e3314308b9510f6b6d4c8919bb0b3aYing Wang# $(2): if non-empty, force the intermediates to be for the 2nd arch
44488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine local-intermediates-dir
44588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project$(strip \
44688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project    $(if $(strip $(LOCAL_MODULE_CLASS)),, \
44788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project        $(error $(LOCAL_PATH): LOCAL_MODULE_CLASS not defined before call to local-intermediates-dir)) \
44888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project    $(if $(strip $(LOCAL_MODULE)),, \
44988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project        $(error $(LOCAL_PATH): LOCAL_MODULE not defined before call to local-intermediates-dir)) \
45061d499b965e3314308b9510f6b6d4c8919bb0b3aYing Wang    $(call intermediates-dir-for,$(LOCAL_MODULE_CLASS),$(LOCAL_MODULE),$(LOCAL_IS_HOST_MODULE),$(1),$(2)) \
45188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project)
45288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
45388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
45488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
455d826264621a2c3d27228b395bc36edf5510bcc49Colin Cross## The generated sources directory.  Placing generated
456d826264621a2c3d27228b395bc36edf5510bcc49Colin Cross## source files directly in the intermediates directory
457d826264621a2c3d27228b395bc36edf5510bcc49Colin Cross## causes problems for multiarch builds, where there are
458d826264621a2c3d27228b395bc36edf5510bcc49Colin Cross## two intermediates directories for a single target. Put
459d826264621a2c3d27228b395bc36edf5510bcc49Colin Cross## them in a separate directory, and they will be copied to
460d826264621a2c3d27228b395bc36edf5510bcc49Colin Cross## each intermediates directory automatically.
461d826264621a2c3d27228b395bc36edf5510bcc49Colin Cross###########################################################
462d826264621a2c3d27228b395bc36edf5510bcc49Colin Cross
463d826264621a2c3d27228b395bc36edf5510bcc49Colin Cross# $(1): target class, like "APPS"
464d826264621a2c3d27228b395bc36edf5510bcc49Colin Cross# $(2): target name, like "NotePad"
465d826264621a2c3d27228b395bc36edf5510bcc49Colin Cross# $(3): if non-empty, this is a HOST target.
466d826264621a2c3d27228b395bc36edf5510bcc49Colin Cross# $(4): if non-empty, force the generated sources to be COMMON
467d826264621a2c3d27228b395bc36edf5510bcc49Colin Crossdefine generated-sources-dir-for
468d826264621a2c3d27228b395bc36edf5510bcc49Colin Cross$(strip \
469d826264621a2c3d27228b395bc36edf5510bcc49Colin Cross    $(eval _idfClass := $(strip $(1))) \
470d826264621a2c3d27228b395bc36edf5510bcc49Colin Cross    $(if $(_idfClass),, \
471d826264621a2c3d27228b395bc36edf5510bcc49Colin Cross        $(error $(LOCAL_PATH): Class not defined in call to generated-sources-dir-for)) \
472d826264621a2c3d27228b395bc36edf5510bcc49Colin Cross    $(eval _idfName := $(strip $(2))) \
473d826264621a2c3d27228b395bc36edf5510bcc49Colin Cross    $(if $(_idfName),, \
474d826264621a2c3d27228b395bc36edf5510bcc49Colin Cross        $(error $(LOCAL_PATH): Name not defined in call to generated-sources-dir-for)) \
475d826264621a2c3d27228b395bc36edf5510bcc49Colin Cross    $(eval _idfPrefix := $(if $(strip $(3)),HOST,TARGET)) \
476d826264621a2c3d27228b395bc36edf5510bcc49Colin Cross    $(if $(filter $(_idfPrefix)-$(_idfClass),$(COMMON_MODULE_CLASSES))$(4), \
477d826264621a2c3d27228b395bc36edf5510bcc49Colin Cross        $(eval _idfIntBase := $($(_idfPrefix)_OUT_GEN_COMMON)) \
478d826264621a2c3d27228b395bc36edf5510bcc49Colin Cross      , \
479d826264621a2c3d27228b395bc36edf5510bcc49Colin Cross        $(eval _idfIntBase := $($(_idfPrefix)_OUT_GEN)) \
480d826264621a2c3d27228b395bc36edf5510bcc49Colin Cross     ) \
481d826264621a2c3d27228b395bc36edf5510bcc49Colin Cross    $(_idfIntBase)/$(_idfClass)/$(_idfName)_intermediates \
482d826264621a2c3d27228b395bc36edf5510bcc49Colin Cross)
483d826264621a2c3d27228b395bc36edf5510bcc49Colin Crossendef
484d826264621a2c3d27228b395bc36edf5510bcc49Colin Cross
485d826264621a2c3d27228b395bc36edf5510bcc49Colin Cross# Uses LOCAL_MODULE_CLASS, LOCAL_MODULE, and LOCAL_IS_HOST_MODULE
486d826264621a2c3d27228b395bc36edf5510bcc49Colin Cross# to determine the generated sources directory.
487d826264621a2c3d27228b395bc36edf5510bcc49Colin Cross#
488d826264621a2c3d27228b395bc36edf5510bcc49Colin Cross# $(1): if non-empty, force the intermediates to be COMMON
489d826264621a2c3d27228b395bc36edf5510bcc49Colin Crossdefine local-generated-sources-dir
490d826264621a2c3d27228b395bc36edf5510bcc49Colin Cross$(strip \
491d826264621a2c3d27228b395bc36edf5510bcc49Colin Cross    $(if $(strip $(LOCAL_MODULE_CLASS)),, \
492d826264621a2c3d27228b395bc36edf5510bcc49Colin Cross        $(error $(LOCAL_PATH): LOCAL_MODULE_CLASS not defined before call to local-generated-sources-dir)) \
493d826264621a2c3d27228b395bc36edf5510bcc49Colin Cross    $(if $(strip $(LOCAL_MODULE)),, \
494d826264621a2c3d27228b395bc36edf5510bcc49Colin Cross        $(error $(LOCAL_PATH): LOCAL_MODULE not defined before call to local-generated-sources-dir)) \
495d826264621a2c3d27228b395bc36edf5510bcc49Colin Cross    $(call generated-sources-dir-for,$(LOCAL_MODULE_CLASS),$(LOCAL_MODULE),$(LOCAL_IS_HOST_MODULE),$(1)) \
496d826264621a2c3d27228b395bc36edf5510bcc49Colin Cross)
497d826264621a2c3d27228b395bc36edf5510bcc49Colin Crossendef
498d826264621a2c3d27228b395bc36edf5510bcc49Colin Cross
499d826264621a2c3d27228b395bc36edf5510bcc49Colin Cross###########################################################
50088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## Convert "path/to/libXXX.so" to "-lXXX".
50188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## Any "path/to/libXXX.a" elements pass through unchanged.
50288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
50388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
50488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine normalize-libraries
50588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project$(foreach so,$(filter %.so,$(1)),-l$(patsubst lib%.so,%,$(notdir $(so))))\
50688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project$(filter-out %.so,$(1))
50788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
50888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
50988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# TODO: change users to call the common version.
51088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine normalize-host-libraries
51188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project$(call normalize-libraries,$(1))
51288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
51388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
51488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine normalize-target-libraries
51588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project$(call normalize-libraries,$(1))
51688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
51788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
51888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
51988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## Convert a list of short module names (e.g., "framework", "Browser")
52088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## into the list of files that are built for those modules.
52188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## NOTE: this won't return reliable results until after all
52288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## sub-makefiles have been included.
52388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## $(1): target list
52488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
52588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
52688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine module-built-files
52788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project$(foreach module,$(1),$(ALL_MODULES.$(module).BUILT))
52888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
52988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
53088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
53188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## Convert a list of short modules names (e.g., "framework", "Browser")
53288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## into the list of files that are installed for those modules.
53388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## NOTE: this won't return reliable results until after all
53488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## sub-makefiles have been included.
53588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## $(1): target list
53688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
53788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
53888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine module-installed-files
53988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project$(foreach module,$(1),$(ALL_MODULES.$(module).INSTALLED))
54088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
54188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
54288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
54364d85d0d827489c514f6aec075482563c80cda73Joe Onorato## Convert a list of short modules names (e.g., "framework", "Browser")
54464d85d0d827489c514f6aec075482563c80cda73Joe Onorato## into the list of files that should be used when linking
54564d85d0d827489c514f6aec075482563c80cda73Joe Onorato## against that module as a public API.
54664d85d0d827489c514f6aec075482563c80cda73Joe Onorato## TODO: Allow this for more than JAVA_LIBRARIES modules
54764d85d0d827489c514f6aec075482563c80cda73Joe Onorato## NOTE: this won't return reliable results until after all
54864d85d0d827489c514f6aec075482563c80cda73Joe Onorato## sub-makefiles have been included.
54964d85d0d827489c514f6aec075482563c80cda73Joe Onorato## $(1): target list
55064d85d0d827489c514f6aec075482563c80cda73Joe Onorato###########################################################
55164d85d0d827489c514f6aec075482563c80cda73Joe Onorato
55264d85d0d827489c514f6aec075482563c80cda73Joe Onoratodefine module-stubs-files
55364d85d0d827489c514f6aec075482563c80cda73Joe Onorato$(foreach module,$(1),$(ALL_MODULES.$(module).STUBS))
55464d85d0d827489c514f6aec075482563c80cda73Joe Onoratoendef
55564d85d0d827489c514f6aec075482563c80cda73Joe Onorato
55664d85d0d827489c514f6aec075482563c80cda73Joe Onorato###########################################################
55764d85d0d827489c514f6aec075482563c80cda73Joe Onorato## Evaluates to the timestamp file for a doc module, which
55864d85d0d827489c514f6aec075482563c80cda73Joe Onorato## is the dependency that should be used.
55964d85d0d827489c514f6aec075482563c80cda73Joe Onorato## $(1): doc module
56064d85d0d827489c514f6aec075482563c80cda73Joe Onorato###########################################################
56164d85d0d827489c514f6aec075482563c80cda73Joe Onorato
56264d85d0d827489c514f6aec075482563c80cda73Joe Onoratodefine doc-timestamp-for
56364d85d0d827489c514f6aec075482563c80cda73Joe Onorato$(OUT_DOCS)/$(strip $(1))-timestamp
56464d85d0d827489c514f6aec075482563c80cda73Joe Onoratoendef
56564d85d0d827489c514f6aec075482563c80cda73Joe Onorato
56664d85d0d827489c514f6aec075482563c80cda73Joe Onorato
56764d85d0d827489c514f6aec075482563c80cda73Joe Onorato###########################################################
568912f8286056586da76f1dd03ccfca2990ea5d258Ying Wang## Convert "core ext framework" to "out/.../javalib.jar ..."
56988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## $(1): library list
57088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## $(2): Non-empty if IS_HOST_MODULE
57188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
57288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
57388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# $(1): library name
57488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# $(2): Non-empty if IS_HOST_MODULE
57588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine _java-lib-dir
57688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project$(call intermediates-dir-for, \
577912f8286056586da76f1dd03ccfca2990ea5d258Ying Wang	JAVA_LIBRARIES,$(1),$(2),COMMON)
57888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
57988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
58088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# $(1): library name
58188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# $(2): Non-empty if IS_HOST_MODULE
58288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine _java-lib-full-classes.jar
583912f8286056586da76f1dd03ccfca2990ea5d258Ying Wang$(call _java-lib-dir,$(1),$(2))/classes$(COMMON_JAVA_PACKAGE_SUFFIX)
58488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
58588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
58688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# $(1): library name list
58788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# $(2): Non-empty if IS_HOST_MODULE
58888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine java-lib-files
58988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project$(foreach lib,$(1),$(call _java-lib-full-classes.jar,$(lib),$(2)))
59088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
59188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
59288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# $(1): library name
59388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# $(2): Non-empty if IS_HOST_MODULE
59488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine _java-lib-full-dep
59545150f8b895d3256e83bc53219e393ab91d2ef20Ying Wang$(call _java-lib-dir,$(1),$(2))/$(if $(2),javalib,classes)$(COMMON_JAVA_PACKAGE_SUFFIX)
59688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
59788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
59888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# $(1): library name list
59988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# $(2): Non-empty if IS_HOST_MODULE
60088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine java-lib-deps
60188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project$(foreach lib,$(1),$(call _java-lib-full-dep,$(lib),$(2)))
60288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
60388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
60488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
6058dc8faaaeadf83353b8144cc0db58972f19f5c7eJoe Onorato## Run rot13 on a string
6068dc8faaaeadf83353b8144cc0db58972f19f5c7eJoe Onorato## $(1): the string.  Must be one line.
6078dc8faaaeadf83353b8144cc0db58972f19f5c7eJoe Onorato###########################################################
6088dc8faaaeadf83353b8144cc0db58972f19f5c7eJoe Onoratodefine rot13
6098dc8faaaeadf83353b8144cc0db58972f19f5c7eJoe Onorato$(shell echo $(1) | tr 'a-zA-Z' 'n-za-mN-ZA-M')
6108dc8faaaeadf83353b8144cc0db58972f19f5c7eJoe Onoratoendef
6118dc8faaaeadf83353b8144cc0db58972f19f5c7eJoe Onorato
6128dc8faaaeadf83353b8144cc0db58972f19f5c7eJoe Onorato
6138dc8faaaeadf83353b8144cc0db58972f19f5c7eJoe Onorato###########################################################
6148dc8faaaeadf83353b8144cc0db58972f19f5c7eJoe Onorato## Returns true if $(1) and $(2) are equal.  Returns
6158dc8faaaeadf83353b8144cc0db58972f19f5c7eJoe Onorato## the empty string if they are not equal.
6168dc8faaaeadf83353b8144cc0db58972f19f5c7eJoe Onorato###########################################################
6178dc8faaaeadf83353b8144cc0db58972f19f5c7eJoe Onoratodefine streq
6188dc8faaaeadf83353b8144cc0db58972f19f5c7eJoe Onorato$(strip $(if $(strip $(1)),\
6198dc8faaaeadf83353b8144cc0db58972f19f5c7eJoe Onorato  $(if $(strip $(2)),\
6208dc8faaaeadf83353b8144cc0db58972f19f5c7eJoe Onorato    $(if $(filter-out __,_$(subst $(strip $(1)),,$(strip $(2)))$(subst $(strip $(2)),,$(strip $(1)))_),,true), \
6218dc8faaaeadf83353b8144cc0db58972f19f5c7eJoe Onorato    ),\
6228dc8faaaeadf83353b8144cc0db58972f19f5c7eJoe Onorato  $(if $(strip $(2)),\
6238dc8faaaeadf83353b8144cc0db58972f19f5c7eJoe Onorato    ,\
6248dc8faaaeadf83353b8144cc0db58972f19f5c7eJoe Onorato    true)\
6258dc8faaaeadf83353b8144cc0db58972f19f5c7eJoe Onorato ))
6268dc8faaaeadf83353b8144cc0db58972f19f5c7eJoe Onoratoendef
6278dc8faaaeadf83353b8144cc0db58972f19f5c7eJoe Onorato
6288dc8faaaeadf83353b8144cc0db58972f19f5c7eJoe Onorato###########################################################
62988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## Convert "a b c" into "a:b:c"
63088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
63188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine normalize-path-list
63288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project$(subst $(space),:,$(strip $(1)))
63388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
63488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
63588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
63664d85d0d827489c514f6aec075482563c80cda73Joe Onorato## Read the word out of a colon-separated list of words.
63764d85d0d827489c514f6aec075482563c80cda73Joe Onorato## This has the same behavior as the built-in function
63864d85d0d827489c514f6aec075482563c80cda73Joe Onorato## $(word n,str).
63964d85d0d827489c514f6aec075482563c80cda73Joe Onorato##
64064d85d0d827489c514f6aec075482563c80cda73Joe Onorato## The individual words may not contain spaces.
64164d85d0d827489c514f6aec075482563c80cda73Joe Onorato##
64264d85d0d827489c514f6aec075482563c80cda73Joe Onorato## $(1): 1 based index
64364d85d0d827489c514f6aec075482563c80cda73Joe Onorato## $(2): value of the form a:b:c...
64464d85d0d827489c514f6aec075482563c80cda73Joe Onorato###########################################################
64564d85d0d827489c514f6aec075482563c80cda73Joe Onorato
64664d85d0d827489c514f6aec075482563c80cda73Joe Onoratodefine word-colon
64764d85d0d827489c514f6aec075482563c80cda73Joe Onorato$(word $(1),$(subst :,$(space),$(2)))
64864d85d0d827489c514f6aec075482563c80cda73Joe Onoratoendef
64964d85d0d827489c514f6aec075482563c80cda73Joe Onorato
65064d85d0d827489c514f6aec075482563c80cda73Joe Onorato###########################################################
65188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## Convert "a=b c= d e = f" into "a=b c=d e=f"
65288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project##
65388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## $(1): list to collapse
65488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## $(2): if set, separator word; usually "=", ":", or ":="
65588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project##       Defaults to "=" if not set.
65688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
65788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
65888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine collapse-pairs
65988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project$(eval _cpSEP := $(strip $(if $(2),$(2),=)))\
66088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project$(subst $(space)$(_cpSEP)$(space),$(_cpSEP),$(strip \
66188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project    $(subst $(_cpSEP), $(_cpSEP) ,$(1))))
66288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
66388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
66488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
6657e8d442ca4f716dd3a67a63ae59779a1e1a6b45fYing Wang## Given a list of pairs, if multiple pairs have the same
6667e8d442ca4f716dd3a67a63ae59779a1e1a6b45fYing Wang## first components, keep only the first pair.
6677e8d442ca4f716dd3a67a63ae59779a1e1a6b45fYing Wang##
6687e8d442ca4f716dd3a67a63ae59779a1e1a6b45fYing Wang## $(1): list of pairs
6697e8d442ca4f716dd3a67a63ae59779a1e1a6b45fYing Wang## $(2): the separator word, such as ":", "=", etc.
6707e8d442ca4f716dd3a67a63ae59779a1e1a6b45fYing Wangdefine uniq-pairs-by-first-component
6717e8d442ca4f716dd3a67a63ae59779a1e1a6b45fYing Wang$(eval _upbfc_fc_set :=)\
6727e8d442ca4f716dd3a67a63ae59779a1e1a6b45fYing Wang$(strip $(foreach w,$(1), $(eval _first := $(word 1,$(subst $(2),$(space),$(w))))\
6737e8d442ca4f716dd3a67a63ae59779a1e1a6b45fYing Wang    $(if $(filter $(_upbfc_fc_set),$(_first)),,$(w)\
6747e8d442ca4f716dd3a67a63ae59779a1e1a6b45fYing Wang        $(eval _upbfc_fc_set += $(_first)))))\
6757e8d442ca4f716dd3a67a63ae59779a1e1a6b45fYing Wang$(eval _upbfc_fc_set :=)\
6767e8d442ca4f716dd3a67a63ae59779a1e1a6b45fYing Wang$(eval _first:=)
6777e8d442ca4f716dd3a67a63ae59779a1e1a6b45fYing Wangendef
6787e8d442ca4f716dd3a67a63ae59779a1e1a6b45fYing Wang
6797e8d442ca4f716dd3a67a63ae59779a1e1a6b45fYing Wang###########################################################
68088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## MODULE_TAG set operations
68188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
68288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
68388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# Given a list of tags, return the targets that specify
68488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# any of those tags.
68588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# $(1): tag list
68688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine modules-for-tag-list
68788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project$(sort $(foreach tag,$(1),$(ALL_MODULE_TAGS.$(tag))))
68888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
68988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
69088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# Same as modules-for-tag-list, but operates on
69188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# ALL_MODULE_NAME_TAGS.
69288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# $(1): tag list
69388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine module-names-for-tag-list
69488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project$(sort $(foreach tag,$(1),$(ALL_MODULE_NAME_TAGS.$(tag))))
69588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
69688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
69788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# Given an accept and reject list, find the matching
69888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# set of targets.  If a target has multiple tags and
69988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# any of them are rejected, the target is rejected.
70088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# Reject overrides accept.
70188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# $(1): list of tags to accept
70288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# $(2): list of tags to reject
70388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#TODO(dbort): do $(if $(strip $(1)),$(1),$(ALL_MODULE_TAGS))
70475127b769e20490f3348802e6b708d67c60c2b04Jean-Baptiste Queru#TODO(jbq): as of 20100106 nobody uses the second parameter
70588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine get-tagged-modules
70688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project$(filter-out \
70788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project	$(call modules-for-tag-list,$(2)), \
70888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project	    $(call modules-for-tag-list,$(1)))
70988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
71088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
71164d85d0d827489c514f6aec075482563c80cda73Joe Onorato###########################################################
71264d85d0d827489c514f6aec075482563c80cda73Joe Onorato## Append a leaf to a base path.  Properly deals with
71364d85d0d827489c514f6aec075482563c80cda73Joe Onorato## base paths ending in /.
71464d85d0d827489c514f6aec075482563c80cda73Joe Onorato##
71564d85d0d827489c514f6aec075482563c80cda73Joe Onorato## $(1): base path
71664d85d0d827489c514f6aec075482563c80cda73Joe Onorato## $(2): leaf path
71764d85d0d827489c514f6aec075482563c80cda73Joe Onorato###########################################################
71864d85d0d827489c514f6aec075482563c80cda73Joe Onorato
71964d85d0d827489c514f6aec075482563c80cda73Joe Onoratodefine append-path
72064d85d0d827489c514f6aec075482563c80cda73Joe Onorato$(subst //,/,$(1)/$(2))
72164d85d0d827489c514f6aec075482563c80cda73Joe Onoratoendef
72264d85d0d827489c514f6aec075482563c80cda73Joe Onorato
72388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
72488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
72588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## Package filtering
72688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
72788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
72888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# Given a list of installed modules (short or long names)
72988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# return a list of the packages (yes, .apk packages, not
73088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# modules in general) that are overridden by this list and,
73188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# therefore, should not be installed.
73288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# $(1): mixed list of installed modules
73388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# TODO: This is fragile; find a reliable way to get this information.
73488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine _get-package-overrides
73588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project $(eval ### Discard any words containing slashes, unless they end in .apk, \
73688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project        ### in which case trim off the directory component and the suffix. \
73788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project        ### If there are no slashes, keep the entire word.)
73888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project $(eval _gpo_names := $(subst /,@@@ @@@,$(1)))
73988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project $(eval _gpo_names := \
74088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project     $(filter %.apk,$(_gpo_names)) \
74188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project     $(filter-out %@@@ @@@%,$(_gpo_names)))
74288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project $(eval _gpo_names := $(patsubst %.apk,%,$(_gpo_names)))
74388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project $(eval _gpo_names := $(patsubst @@@%,%,$(_gpo_names)))
74488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
74588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project $(eval ### Remove any remaining words that contain dots.)
74688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project $(eval _gpo_names := $(subst .,@@@ @@@,$(_gpo_names)))
74788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project $(eval _gpo_names := $(filter-out %@@@ @@@%,$(_gpo_names)))
74888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
74988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project $(eval ### Now we have a list of any words that could possibly refer to \
75088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project        ### packages, although there may be words that do not.  Only \
75188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project        ### real packages will be present under PACKAGES.*, though.)
75288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project $(foreach _gpo_name,$(_gpo_names),$(PACKAGES.$(_gpo_name).OVERRIDES))
75388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
75488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
75588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine get-package-overrides
756d7a1a9b49b9d6e8331bcc5b2ece84903a94553deConley Owens$(sort $(strip $(call _get-package-overrides,$(1))))
75788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
75888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
75988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
76088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## Output the command lines, or not
76188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
76288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
76388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectifeq ($(strip $(SHOW_COMMANDS)),)
76488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine pretty
76588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project@echo $1
76688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
76788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projecthide := @
76888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectelse
76988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine pretty
77088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
77188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projecthide :=
77288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendif
77388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
77488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
77588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## Dump the variables that are associated with targets
77688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
77788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
77888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine dump-module-variables
77988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project@echo all_dependencies=$^
78088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project@echo PRIVATE_YACCFLAGS=$(PRIVATE_YACCFLAGS);
78188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project@echo PRIVATE_CFLAGS=$(PRIVATE_CFLAGS);
78288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project@echo PRIVATE_CPPFLAGS=$(PRIVATE_CPPFLAGS);
78388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project@echo PRIVATE_DEBUG_CFLAGS=$(PRIVATE_DEBUG_CFLAGS);
78488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project@echo PRIVATE_C_INCLUDES=$(PRIVATE_C_INCLUDES);
78588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project@echo PRIVATE_LDFLAGS=$(PRIVATE_LDFLAGS);
78688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project@echo PRIVATE_LDLIBS=$(PRIVATE_LDLIBS);
78788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project@echo PRIVATE_ARFLAGS=$(PRIVATE_ARFLAGS);
78888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project@echo PRIVATE_AAPT_FLAGS=$(PRIVATE_AAPT_FLAGS);
78988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project@echo PRIVATE_DX_FLAGS=$(PRIVATE_DX_FLAGS);
790f184a0f26db350693902ab623c414974978f4ac4Brian Carlstrom@echo PRIVATE_JAVACFLAGS=$(PRIVATE_JAVACFLAGS);
79188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project@echo PRIVATE_JAVA_LIBRARIES=$(PRIVATE_JAVA_LIBRARIES);
79288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project@echo PRIVATE_ALL_SHARED_LIBRARIES=$(PRIVATE_ALL_SHARED_LIBRARIES);
79388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project@echo PRIVATE_ALL_STATIC_LIBRARIES=$(PRIVATE_ALL_STATIC_LIBRARIES);
79488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project@echo PRIVATE_ALL_WHOLE_STATIC_LIBRARIES=$(PRIVATE_ALL_WHOLE_STATIC_LIBRARIES);
79588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project@echo PRIVATE_ALL_OBJECTS=$(PRIVATE_ALL_OBJECTS);
796703e7c6d50a5bddf0fb057a1a26618e2f7138c31Jeff Brown@echo PRIVATE_NO_CRT=$(PRIVATE_NO_CRT);
79788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
79888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
79988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
80088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## Commands for using sed to replace given variable values
80188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
80288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
80388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine transform-variables
80488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project@mkdir -p $(dir $@)
80588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project@echo "Sed: $(if $(PRIVATE_MODULE),$(PRIVATE_MODULE),$@) <= $<"
80688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project$(hide) sed $(foreach var,$(REPLACE_VARS),-e "s/{{$(var)}}/$(subst /,\/,$(PWD)/$($(var)))/g") $< >$@
80788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project$(hide) if [ "$(suffix $@)" = ".sh" ]; then chmod a+rx $@; fi
80888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
80988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
81088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
81188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
81288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## Commands for munging the dependency files GCC generates
81388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
814c23f4efdbbb8ce76fd5027ef4e2b6ee316ffeb2bYing Wang# $(1): the input .d file
815c23f4efdbbb8ce76fd5027ef4e2b6ee316ffeb2bYing Wang# $(2): the output .P file
816c23f4efdbbb8ce76fd5027ef4e2b6ee316ffeb2bYing Wangdefine transform-d-to-p-args
817c23f4efdbbb8ce76fd5027ef4e2b6ee316ffeb2bYing Wang$(hide) cp $(1) $(2); \
818c23f4efdbbb8ce76fd5027ef4e2b6ee316ffeb2bYing Wang	sed -e 's/#.*//' -e 's/^[^:]*: *//' -e 's/ *\\$$//' \
819c23f4efdbbb8ce76fd5027ef4e2b6ee316ffeb2bYing Wang		-e '/^$$/ d' -e 's/$$/ :/' < $(1) >> $(2); \
820c23f4efdbbb8ce76fd5027ef4e2b6ee316ffeb2bYing Wang	rm -f $(1)
821c23f4efdbbb8ce76fd5027ef4e2b6ee316ffeb2bYing Wangendef
82288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
82388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine transform-d-to-p
824c23f4efdbbb8ce76fd5027ef4e2b6ee316ffeb2bYing Wang$(call transform-d-to-p-args,$(@:%.o=%.d),$(@:%.o=%.P))
82588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
82688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
82788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
82888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## Commands for running lex
82988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
83088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
83188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine transform-l-to-cpp
83288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project@mkdir -p $(dir $@)
83388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project@echo "Lex: $(PRIVATE_MODULE) <= $<"
83488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project$(hide) $(LEX) -o$@ $<
83588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
83688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
83788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
83888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## Commands for running yacc
83988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project##
84088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## Because the extension of c++ files can change, the
84188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## extension must be specified in $1.
84288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## E.g, "$(call transform-y-to-cpp,.cpp)"
84388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
84488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
84588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine transform-y-to-cpp
84688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project@mkdir -p $(dir $@)
84788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project@echo "Yacc: $(PRIVATE_MODULE) <= $<"
84888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project$(YACC) $(PRIVATE_YACCFLAGS) -o $@ $<
84988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projecttouch $(@:$1=$(YACC_HEADER_SUFFIX))
85088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectecho '#ifndef '$(@F:$1=_h) > $(@:$1=.h)
85188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectecho '#define '$(@F:$1=_h) >> $(@:$1=.h)
85288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectcat $(@:$1=$(YACC_HEADER_SUFFIX)) >> $(@:$1=.h)
85388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectecho '#endif' >> $(@:$1=.h)
85488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
85588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
8560bd59a0a58f9891926ff6faf74a78307230d705bYing Wang###########################################################
857a7aa8005d28e3e7e5a6a4f7b9ad2c94097436d6aTim Murray## Commands to compile RenderScript to Java
8580bd59a0a58f9891926ff6faf74a78307230d705bYing Wang###########################################################
8590bd59a0a58f9891926ff6faf74a78307230d705bYing Wang
8600bd59a0a58f9891926ff6faf74a78307230d705bYing Wangdefine transform-renderscripts-to-java-and-bc
8610bd59a0a58f9891926ff6faf74a78307230d705bYing Wang@echo "RenderScript: $(PRIVATE_MODULE) <= $(PRIVATE_RS_SOURCE_FILES)"
8620bd59a0a58f9891926ff6faf74a78307230d705bYing Wang$(hide) rm -rf $(PRIVATE_RS_OUTPUT_DIR)
8630bd59a0a58f9891926ff6faf74a78307230d705bYing Wang$(hide) mkdir -p $(PRIVATE_RS_OUTPUT_DIR)/res/raw
8640bd59a0a58f9891926ff6faf74a78307230d705bYing Wang$(hide) mkdir -p $(PRIVATE_RS_OUTPUT_DIR)/src
8657d83ef8ff7679239063bb8484f0c1fdcf31abf8bYing Wang$(hide) $(PRIVATE_RS_CC) \
866ebfddaa55bfcc981c767ea9e3ddbf2f30b6046d1Ying Wang  -o $(PRIVATE_RS_OUTPUT_DIR)/res/raw \
867ebfddaa55bfcc981c767ea9e3ddbf2f30b6046d1Ying Wang  -p $(PRIVATE_RS_OUTPUT_DIR)/src \
86824e1c018ba83ce6465aa9faf0347071f271d2425Ying Wang  -d $(PRIVATE_RS_OUTPUT_DIR) \
86924e1c018ba83ce6465aa9faf0347071f271d2425Ying Wang  -a $@ -MD \
870c963eae72ca502ac847fa03e87644c660b868295Stephen Hines  $(addprefix -target-api , $(PRIVATE_RS_TARGET_API)) \
871914f7a2990ef0e02d4632dd77076c6c7bb11e6ddStephen Hines  $(PRIVATE_RS_FLAGS) \
872512802772a2516b817ab463659b62c2e6fa7442cYing Wang  $(foreach inc,$(PRIVATE_RS_INCLUDES),$(addprefix -I , $(inc))) \
873ebfddaa55bfcc981c767ea9e3ddbf2f30b6046d1Ying Wang  $(PRIVATE_RS_SOURCE_FILES)
8740bd59a0a58f9891926ff6faf74a78307230d705bYing Wang$(hide) mkdir -p $(dir $@)
8750bd59a0a58f9891926ff6faf74a78307230d705bYing Wang$(hide) touch $@
8760bd59a0a58f9891926ff6faf74a78307230d705bYing Wangendef
8770bd59a0a58f9891926ff6faf74a78307230d705bYing Wang
878e719f28d938d3290ac591769a15b0b5e9e64fabbStephen Hinesdefine transform-bc-to-so
8799ac9b53dc6ef05797619fb1ae65613e929914959Stephen Hines@echo "Renderscript compatibility: $(notdir $@) <= $(notdir $<)"
880e719f28d938d3290ac591769a15b0b5e9e64fabbStephen Hines$(hide) mkdir -p $(dir $@)
881f692513071705e6ea28b3edd47898e12fa67a6ffStephen Hines$(hide) $(BCC_COMPAT) -O3 -o $(dir $@)/$(notdir $(<:.bc=.o)) -fPIC -shared \
88252626d2a7b4767905e8a369ddc8316c1290ad156Stephen Hines	-rt-path $(RS_PREBUILT_CLCORE) -mtriple $(RS_COMPAT_TRIPLE) $<
8837d6ec719653d2e26e2845944f6a46fd950c1ddf9Stephen Hines$(hide) $(PRIVATE_CXX) -shared -Wl,-soname,$(notdir $@) -nostdlib \
884f692513071705e6ea28b3edd47898e12fa67a6ffStephen Hines	-Wl,-rpath,\$$ORIGIN/../lib \
8859541f5864d2f9c11fe3e06fcee8e1ca2bdd2082fStephen Hines	$(dir $@)/$(notdir $(<:.bc=.o)) \
8861a6f09a48c2047a6611b3f01088530b2ec895f7bTim Murray	$(RS_PREBUILT_COMPILER_RT) \
887903e2dd014bd479816e5b11fe5f985068549edc9Ying Wang	-o $@ $(TARGET_GLOBAL_LDFLAGS) -L prebuilts/gcc/ \
8881a6f09a48c2047a6611b3f01088530b2ec895f7bTim Murray	-L $(TARGET_OUT_INTERMEDIATE_LIBRARIES) $(RS_PREBUILT_LIBPATH) \
8898db4ccea4aa95d80c7c16b9f49d96d07a63c3945Stephen Hines	-lRSSupport -lm -lc
890e719f28d938d3290ac591769a15b0b5e9e64fabbStephen Hinesendef
891e719f28d938d3290ac591769a15b0b5e9e64fabbStephen Hines
892a7aa8005d28e3e7e5a6a4f7b9ad2c94097436d6aTim Murray###########################################################
893a7aa8005d28e3e7e5a6a4f7b9ad2c94097436d6aTim Murray## Commands to compile RenderScript to C++
894a7aa8005d28e3e7e5a6a4f7b9ad2c94097436d6aTim Murray###########################################################
895a7aa8005d28e3e7e5a6a4f7b9ad2c94097436d6aTim Murray
896a7aa8005d28e3e7e5a6a4f7b9ad2c94097436d6aTim Murraydefine transform-renderscripts-to-cpp-and-bc
897a7aa8005d28e3e7e5a6a4f7b9ad2c94097436d6aTim Murray@echo "RenderScript: $(PRIVATE_MODULE) <= $(PRIVATE_RS_SOURCE_FILES)"
898a7aa8005d28e3e7e5a6a4f7b9ad2c94097436d6aTim Murray$(hide) rm -rf $(PRIVATE_RS_OUTPUT_DIR)
899a7aa8005d28e3e7e5a6a4f7b9ad2c94097436d6aTim Murray$(hide) mkdir -p $(PRIVATE_RS_OUTPUT_DIR)/
900a7aa8005d28e3e7e5a6a4f7b9ad2c94097436d6aTim Murray$(hide) $(PRIVATE_RS_CC) \
901a7aa8005d28e3e7e5a6a4f7b9ad2c94097436d6aTim Murray  -o $(PRIVATE_RS_OUTPUT_DIR)/ \
902a7aa8005d28e3e7e5a6a4f7b9ad2c94097436d6aTim Murray  -d $(PRIVATE_RS_OUTPUT_DIR) \
903a7aa8005d28e3e7e5a6a4f7b9ad2c94097436d6aTim Murray  -a $@ -MD \
904a7aa8005d28e3e7e5a6a4f7b9ad2c94097436d6aTim Murray  -reflect-c++ \
905a7aa8005d28e3e7e5a6a4f7b9ad2c94097436d6aTim Murray  $(PRIVATE_RS_FLAGS) \
90681ab8339feea95db1caaaa57cc8b3bfa0852dc26Ying Wang  $(addprefix -I , $(PRIVATE_RS_INCLUDES)) \
907a7aa8005d28e3e7e5a6a4f7b9ad2c94097436d6aTim Murray  $(PRIVATE_RS_SOURCE_FILES)
908a7aa8005d28e3e7e5a6a4f7b9ad2c94097436d6aTim Murray$(hide) mkdir -p $(dir $@)
909a7aa8005d28e3e7e5a6a4f7b9ad2c94097436d6aTim Murray$(hide) touch $@
910a7aa8005d28e3e7e5a6a4f7b9ad2c94097436d6aTim Murrayendef
911a7aa8005d28e3e7e5a6a4f7b9ad2c94097436d6aTim Murray
91288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
91388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
91488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## Commands for running aidl
91588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
91688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
91788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine transform-aidl-to-java
91888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project@mkdir -p $(dir $@)
91988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project@echo "Aidl: $(PRIVATE_MODULE) <= $<"
92088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project$(hide) $(AIDL) -d$(patsubst %.java,%.P,$@) $(PRIVATE_AIDL_FLAGS) $< $@
92188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
92288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#$(AIDL) $(PRIVATE_AIDL_FLAGS) $< - | indent -nut -br -npcs -l1000 > $@
92388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
92488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
9259bd4962af87257c6a97e9026af7e4764394412c2Doug Zongker###########################################################
9269bd4962af87257c6a97e9026af7e4764394412c2Doug Zongker## Commands for running java-event-log-tags.py
9279bd4962af87257c6a97e9026af7e4764394412c2Doug Zongker###########################################################
9289bd4962af87257c6a97e9026af7e4764394412c2Doug Zongker
9299bd4962af87257c6a97e9026af7e4764394412c2Doug Zongkerdefine transform-logtags-to-java
9309bd4962af87257c6a97e9026af7e4764394412c2Doug Zongker@mkdir -p $(dir $@)
9319bd4962af87257c6a97e9026af7e4764394412c2Doug Zongker@echo "logtags: $@ <= $<"
932abfbbe2e1dc0d8dc01b87492427c670dab70f81fDoug Zongker$(hide) $(JAVATAGS) -o $@ $^
9339bd4962af87257c6a97e9026af7e4764394412c2Doug Zongkerendef
9349bd4962af87257c6a97e9026af7e4764394412c2Doug Zongker
93588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
93688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
937a5fc87a93713b1976c5bfdd602d1c6bd285e7533Ying Wang## Commands for running protoc to compile .proto into .java
938a5fc87a93713b1976c5bfdd602d1c6bd285e7533Ying Wang###########################################################
939a5fc87a93713b1976c5bfdd602d1c6bd285e7533Ying Wang
940a5fc87a93713b1976c5bfdd602d1c6bd285e7533Ying Wangdefine transform-proto-to-java
941a5fc87a93713b1976c5bfdd602d1c6bd285e7533Ying Wang@mkdir -p $(dir $@)
942a5fc87a93713b1976c5bfdd602d1c6bd285e7533Ying Wang@echo "Protoc: $@ <= $(PRIVATE_PROTO_SRC_FILES)"
943a5fc87a93713b1976c5bfdd602d1c6bd285e7533Ying Wang@rm -rf $(PRIVATE_PROTO_JAVA_OUTPUT_DIR)
944a5fc87a93713b1976c5bfdd602d1c6bd285e7533Ying Wang@mkdir -p $(PRIVATE_PROTO_JAVA_OUTPUT_DIR)
945fc2bad5c36c72f8c2f0bfb869e642b85ccd1b2a1Ben Murdoch$(hide) for f in $(PRIVATE_PROTO_SRC_FILES); do \
946fc2bad5c36c72f8c2f0bfb869e642b85ccd1b2a1Ben Murdoch        $(PROTOC) \
94728b46fc16c026365378909f1cc88fad0d3b2395cUlas Kirazci        $(addprefix --proto_path=, $(PRIVATE_PROTO_INCLUDES)) \
9486e485b545adc2476fed23eedaec8f121fad191b2Ulas Kirazci        $(PRIVATE_PROTO_JAVA_OUTPUT_OPTION)="$(PRIVATE_PROTO_JAVA_OUTPUT_PARAMS):$(PRIVATE_PROTO_JAVA_OUTPUT_DIR)" \
949fc2bad5c36c72f8c2f0bfb869e642b85ccd1b2a1Ben Murdoch        $(PRIVATE_PROTOC_FLAGS) \
950fc2bad5c36c72f8c2f0bfb869e642b85ccd1b2a1Ben Murdoch        $$f || exit 33; \
951fc2bad5c36c72f8c2f0bfb869e642b85ccd1b2a1Ben Murdoch        done
952a5fc87a93713b1976c5bfdd602d1c6bd285e7533Ying Wang$(hide) touch $@
953a5fc87a93713b1976c5bfdd602d1c6bd285e7533Ying Wangendef
954a5fc87a93713b1976c5bfdd602d1c6bd285e7533Ying Wang
955a5fc87a93713b1976c5bfdd602d1c6bd285e7533Ying Wang######################################################################
956a5fc87a93713b1976c5bfdd602d1c6bd285e7533Ying Wang## Commands for running protoc to compile .proto into .pb.cc and .pb.h
957a5fc87a93713b1976c5bfdd602d1c6bd285e7533Ying Wang######################################################################
958a5fc87a93713b1976c5bfdd602d1c6bd285e7533Ying Wangdefine transform-proto-to-cc
959a5fc87a93713b1976c5bfdd602d1c6bd285e7533Ying Wang@mkdir -p $(dir $@)
960a5fc87a93713b1976c5bfdd602d1c6bd285e7533Ying Wang@echo "Protoc: $@ <= $<"
961a5fc87a93713b1976c5bfdd602d1c6bd285e7533Ying Wang$(hide) $(PROTOC) \
962a5fc87a93713b1976c5bfdd602d1c6bd285e7533Ying Wang	$(addprefix --proto_path=, $(PRIVATE_PROTO_INCLUDES)) \
96333c0d952fcba713f00c1cafc8213274e642aee4cYing Wang	$(PRIVATE_PROTOC_FLAGS) \
964a5fc87a93713b1976c5bfdd602d1c6bd285e7533Ying Wang	--cpp_out=$(PRIVATE_PROTO_CC_OUTPUT_DIR) $<
965a5fc87a93713b1976c5bfdd602d1c6bd285e7533Ying Wangendef
966a5fc87a93713b1976c5bfdd602d1c6bd285e7533Ying Wang
967a5fc87a93713b1976c5bfdd602d1c6bd285e7533Ying Wang
968a5fc87a93713b1976c5bfdd602d1c6bd285e7533Ying Wang###########################################################
96988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## Commands for running gcc to compile a C++ file
97088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
97188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
97288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine transform-cpp-to-o
97388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project@mkdir -p $(dir $@)
97488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project@echo "target $(PRIVATE_ARM_MODE) C++: $(PRIVATE_MODULE) <= $<"
97588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project$(hide) $(PRIVATE_CXX) \
976ddbcad8c852980aabd2c7b02b909726d5c697182Ying Wang	$(addprefix -I , $(PRIVATE_C_INCLUDES)) \
97785f3b219719657150c5bb63663983ea5a18be662Andrew Boie	$(shell cat $(PRIVATE_IMPORT_INCLUDES)) \
9784761e56a7175db89b98b6ac07a978f54dcc78213Ying Wang	$(addprefix -isystem ,\
9794761e56a7175db89b98b6ac07a978f54dcc78213Ying Wang	    $(if $(PRIVATE_NO_DEFAULT_COMPILER_FLAGS),, \
9804761e56a7175db89b98b6ac07a978f54dcc78213Ying Wang	        $(filter-out $(PRIVATE_C_INCLUDES), \
981ddbcad8c852980aabd2c7b02b909726d5c697182Ying Wang	            $(PRIVATE_TARGET_PROJECT_INCLUDES) \
9824761e56a7175db89b98b6ac07a978f54dcc78213Ying Wang	            $(PRIVATE_TARGET_C_INCLUDES)))) \
98388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project	-c \
98488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project	$(if $(PRIVATE_NO_DEFAULT_COMPILER_FLAGS),, \
9851a08100fa9d92c25de32ba4d13fd3958bbcab894Ying Wang	    $(PRIVATE_TARGET_GLOBAL_CFLAGS) \
9861a08100fa9d92c25de32ba4d13fd3958bbcab894Ying Wang	    $(PRIVATE_TARGET_GLOBAL_CPPFLAGS) \
98788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project	    $(PRIVATE_ARM_CFLAGS) \
98888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project	 ) \
9899a8ecf970bf53f7f43a8722212ff4b217a6bb403Doug Kwan	$(PRIVATE_RTTI_FLAG) \
99088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project	$(PRIVATE_CFLAGS) \
99188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project	$(PRIVATE_CPPFLAGS) \
99288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project	$(PRIVATE_DEBUG_CFLAGS) \
99360fe963c63c1b98255ad1cf40573b81b5d90d9c3Atte Peltomaki	-MD -MF $(patsubst %.o,%.d,$@) -o $@ $<
9943a7e4ccad9c910ac798a8c324f7718d137bd7692Ying Wang$(transform-d-to-p)
99588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
99688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
99788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
99888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
99988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## Commands for running gcc to compile a C file
100088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
100188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
100288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# $(1): extra flags
100388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine transform-c-or-s-to-o-no-deps
100488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project@mkdir -p $(dir $@)
100588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project$(hide) $(PRIVATE_CC) \
1006ddbcad8c852980aabd2c7b02b909726d5c697182Ying Wang	$(addprefix -I , $(PRIVATE_C_INCLUDES)) \
100785f3b219719657150c5bb63663983ea5a18be662Andrew Boie	$(shell cat $(PRIVATE_IMPORT_INCLUDES)) \
10084761e56a7175db89b98b6ac07a978f54dcc78213Ying Wang	$(addprefix -isystem ,\
10094761e56a7175db89b98b6ac07a978f54dcc78213Ying Wang	    $(if $(PRIVATE_NO_DEFAULT_COMPILER_FLAGS),, \
10104761e56a7175db89b98b6ac07a978f54dcc78213Ying Wang	        $(filter-out $(PRIVATE_C_INCLUDES), \
1011ddbcad8c852980aabd2c7b02b909726d5c697182Ying Wang	            $(PRIVATE_TARGET_PROJECT_INCLUDES) \
10124761e56a7175db89b98b6ac07a978f54dcc78213Ying Wang	            $(PRIVATE_TARGET_C_INCLUDES)))) \
101388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project	-c \
101488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project	$(if $(PRIVATE_NO_DEFAULT_COMPILER_FLAGS),, \
10151a08100fa9d92c25de32ba4d13fd3958bbcab894Ying Wang	    $(PRIVATE_TARGET_GLOBAL_CFLAGS) \
101688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project	    $(PRIVATE_ARM_CFLAGS) \
101788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project	 ) \
101865d785274e7898d2dc89e7fffb26715f081ff284Ying Wang	 $(1) \
101960fe963c63c1b98255ad1cf40573b81b5d90d9c3Atte Peltomaki	-MD -MF $(patsubst %.o,%.d,$@) -o $@ $<
102088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
102188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
102288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine transform-c-to-o-no-deps
102388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project@echo "target $(PRIVATE_ARM_MODE) C: $(PRIVATE_MODULE) <= $<"
10247429e21c2e64c1b27787e3768c30207532b56296Ying Wang$(call transform-c-or-s-to-o-no-deps, $(PRIVATE_CFLAGS) $(PRIVATE_CONLYFLAGS) $(PRIVATE_DEBUG_CFLAGS))
102588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
102688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
102788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine transform-s-to-o-no-deps
102888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project@echo "target asm: $(PRIVATE_MODULE) <= $<"
102988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project$(call transform-c-or-s-to-o-no-deps, $(PRIVATE_ASFLAGS))
103088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
103188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
103288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine transform-c-to-o
103388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project$(transform-c-to-o-no-deps)
10343a7e4ccad9c910ac798a8c324f7718d137bd7692Ying Wang$(transform-d-to-p)
103588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
103688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
103788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine transform-s-to-o
103888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project$(transform-s-to-o-no-deps)
10393a7e4ccad9c910ac798a8c324f7718d137bd7692Ying Wang$(transform-d-to-p)
104088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
104188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
10427b913ce6fa5030519121757bf5b258efba51cc06Ying Wang# YASM compilation
10437b913ce6fa5030519121757bf5b258efba51cc06Ying Wangdefine transform-asm-to-o
10447b913ce6fa5030519121757bf5b258efba51cc06Ying Wang@mkdir -p $(dir $@)
10457b913ce6fa5030519121757bf5b258efba51cc06Ying Wang$(hide) $(YASM) \
10467b913ce6fa5030519121757bf5b258efba51cc06Ying Wang    $(addprefix -I , $(PRIVATE_C_INCLUDES)) \
10477b913ce6fa5030519121757bf5b258efba51cc06Ying Wang    -f elf32 -m x86 \
10487b913ce6fa5030519121757bf5b258efba51cc06Ying Wang    $(PRIVATE_ASFLAGS) \
10497b913ce6fa5030519121757bf5b258efba51cc06Ying Wang    -o $@ $<
10507b913ce6fa5030519121757bf5b258efba51cc06Ying Wangendef
10517b913ce6fa5030519121757bf5b258efba51cc06Ying Wang
105288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
10535dbb529de9f84e731e26b83525f3f599f1914acaDavid 'Digit' Turner## Commands for running gcc to compile an Objective-C file
10545dbb529de9f84e731e26b83525f3f599f1914acaDavid 'Digit' Turner## This should never happen for target builds but this
10555dbb529de9f84e731e26b83525f3f599f1914acaDavid 'Digit' Turner## will error at build time.
10565dbb529de9f84e731e26b83525f3f599f1914acaDavid 'Digit' Turner###########################################################
10575dbb529de9f84e731e26b83525f3f599f1914acaDavid 'Digit' Turner
10585dbb529de9f84e731e26b83525f3f599f1914acaDavid 'Digit' Turnerdefine transform-m-to-o-no-deps
10595dbb529de9f84e731e26b83525f3f599f1914acaDavid 'Digit' Turner@echo "target ObjC: $(PRIVATE_MODULE) <= $<"
106065d785274e7898d2dc89e7fffb26715f081ff284Ying Wang$(call transform-c-or-s-to-o-no-deps, $(PRIVATE_CFLAGS) $(PRIVATE_DEBUG_CFLAGS))
10615dbb529de9f84e731e26b83525f3f599f1914acaDavid 'Digit' Turnerendef
10625dbb529de9f84e731e26b83525f3f599f1914acaDavid 'Digit' Turner
10635dbb529de9f84e731e26b83525f3f599f1914acaDavid 'Digit' Turnerdefine transform-m-to-o
10645dbb529de9f84e731e26b83525f3f599f1914acaDavid 'Digit' Turner$(transform-m-to-o-no-deps)
10653a7e4ccad9c910ac798a8c324f7718d137bd7692Ying Wang$(transform-d-to-p)
10665dbb529de9f84e731e26b83525f3f599f1914acaDavid 'Digit' Turnerendef
10675dbb529de9f84e731e26b83525f3f599f1914acaDavid 'Digit' Turner
10685dbb529de9f84e731e26b83525f3f599f1914acaDavid 'Digit' Turner###########################################################
106988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## Commands for running gcc to compile a host C++ file
107088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
107188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
107288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine transform-host-cpp-to-o
107388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project@mkdir -p $(dir $@)
107488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project@echo "host C++: $(PRIVATE_MODULE) <= $<"
107588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project$(hide) $(PRIVATE_CXX) \
1076ddbcad8c852980aabd2c7b02b909726d5c697182Ying Wang	$(addprefix -I , $(PRIVATE_C_INCLUDES)) \
107785f3b219719657150c5bb63663983ea5a18be662Andrew Boie	$(shell cat $(PRIVATE_IMPORT_INCLUDES)) \
1078ddbcad8c852980aabd2c7b02b909726d5c697182Ying Wang	$(addprefix -isystem ,\
107988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project	    $(if $(PRIVATE_NO_DEFAULT_COMPILER_FLAGS),, \
1080ddbcad8c852980aabd2c7b02b909726d5c697182Ying Wang	        $(filter-out $(PRIVATE_C_INCLUDES), \
1081ddbcad8c852980aabd2c7b02b909726d5c697182Ying Wang	            $(HOST_PROJECT_INCLUDES) \
1082e6f65438a45f0e1b519fb3cd2799f44ca87911a7Logan Chien	            $(PRIVATE_HOST_C_INCLUDES)))) \
108388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project	-c \
108488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project	$(if $(PRIVATE_NO_DEFAULT_COMPILER_FLAGS),, \
1085e6f65438a45f0e1b519fb3cd2799f44ca87911a7Logan Chien	    $(PRIVATE_HOST_GLOBAL_CFLAGS) \
1086e6f65438a45f0e1b519fb3cd2799f44ca87911a7Logan Chien	    $(PRIVATE_HOST_GLOBAL_CPPFLAGS) \
108788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project	 ) \
108888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project	$(PRIVATE_CFLAGS) \
108988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project	$(PRIVATE_CPPFLAGS) \
109088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project	$(PRIVATE_DEBUG_CFLAGS) \
109160fe963c63c1b98255ad1cf40573b81b5d90d9c3Atte Peltomaki	-MD -MF $(patsubst %.o,%.d,$@) -o $@ $<
109288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project$(transform-d-to-p)
109388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
109488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
109588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
109688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
109788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## Commands for running gcc to compile a host C file
109888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
109988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
110088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# $(1): extra flags
110188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine transform-host-c-or-s-to-o-no-deps
110288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project@mkdir -p $(dir $@)
110388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project$(hide) $(PRIVATE_CC) \
1104ddbcad8c852980aabd2c7b02b909726d5c697182Ying Wang	$(addprefix -I , $(PRIVATE_C_INCLUDES)) \
110585f3b219719657150c5bb63663983ea5a18be662Andrew Boie	$(shell cat $(PRIVATE_IMPORT_INCLUDES)) \
1106ddbcad8c852980aabd2c7b02b909726d5c697182Ying Wang	$(addprefix -isystem ,\
110788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project	    $(if $(PRIVATE_NO_DEFAULT_COMPILER_FLAGS),, \
1108ddbcad8c852980aabd2c7b02b909726d5c697182Ying Wang	        $(filter-out $(PRIVATE_C_INCLUDES), \
1109ddbcad8c852980aabd2c7b02b909726d5c697182Ying Wang	            $(HOST_PROJECT_INCLUDES) \
1110e6f65438a45f0e1b519fb3cd2799f44ca87911a7Logan Chien	            $(PRIVATE_HOST_C_INCLUDES)))) \
111188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project	-c \
111288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project	$(if $(PRIVATE_NO_DEFAULT_COMPILER_FLAGS),, \
1113e6f65438a45f0e1b519fb3cd2799f44ca87911a7Logan Chien	    $(PRIVATE_HOST_GLOBAL_CFLAGS) \
111488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project	 ) \
111588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project	$(1) \
111660fe963c63c1b98255ad1cf40573b81b5d90d9c3Atte Peltomaki	-MD -MF $(patsubst %.o,%.d,$@) -o $@ $<
111788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
111888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
111988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine transform-host-c-to-o-no-deps
112088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project@echo "host C: $(PRIVATE_MODULE) <= $<"
11217429e21c2e64c1b27787e3768c30207532b56296Ying Wang$(call transform-host-c-or-s-to-o-no-deps, $(PRIVATE_CFLAGS) $(PRIVATE_CONLYFLAGS) $(PRIVATE_DEBUG_CFLAGS))
112288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
112388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
112488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine transform-host-s-to-o-no-deps
112588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project@echo "host asm: $(PRIVATE_MODULE) <= $<"
112688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project$(call transform-host-c-or-s-to-o-no-deps, $(PRIVATE_ASFLAGS))
112788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
112888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
112988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine transform-host-c-to-o
113088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project$(transform-host-c-to-o-no-deps)
113188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project$(transform-d-to-p)
113288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
113388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
113488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine transform-host-s-to-o
113588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project$(transform-host-s-to-o-no-deps)
113688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project$(transform-d-to-p)
11375dbb529de9f84e731e26b83525f3f599f1914acaDavid 'Digit' Turnerendef
11385dbb529de9f84e731e26b83525f3f599f1914acaDavid 'Digit' Turner
11395dbb529de9f84e731e26b83525f3f599f1914acaDavid 'Digit' Turner###########################################################
11405dbb529de9f84e731e26b83525f3f599f1914acaDavid 'Digit' Turner## Commands for running gcc to compile a host Objective-C file
11415dbb529de9f84e731e26b83525f3f599f1914acaDavid 'Digit' Turner###########################################################
11425dbb529de9f84e731e26b83525f3f599f1914acaDavid 'Digit' Turner
11435dbb529de9f84e731e26b83525f3f599f1914acaDavid 'Digit' Turnerdefine transform-host-m-to-o-no-deps
11445dbb529de9f84e731e26b83525f3f599f1914acaDavid 'Digit' Turner@echo "host ObjC: $(PRIVATE_MODULE) <= $<"
114565d785274e7898d2dc89e7fffb26715f081ff284Ying Wang$(call transform-host-c-or-s-to-o-no-deps, $(PRIVATE_CFLAGS) $(PRIVATE_DEBUG_CFLAGS))
11465dbb529de9f84e731e26b83525f3f599f1914acaDavid 'Digit' Turnerendef
11475dbb529de9f84e731e26b83525f3f599f1914acaDavid 'Digit' Turner
11485ca286d58bc2f8e2445ae77d7ca8b4046a016988David 'Digit' Turnerdefine transform-host-m-to-o
11495dbb529de9f84e731e26b83525f3f599f1914acaDavid 'Digit' Turner$(transform-host-m-to-o-no-deps)
11505dbb529de9f84e731e26b83525f3f599f1914acaDavid 'Digit' Turner$(transform-d-to-p)
115188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
115288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
115388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
115488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## Commands for running ar
115588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
115688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
1157e4b24ebab8757ce52a1bd3b3b9986e4d253f0166Ying Wangdefine _concat-if-arg2-not-empty
1158e4b24ebab8757ce52a1bd3b3b9986e4d253f0166Ying Wang$(if $(2),$(hide) $(1) $(2))
1159e4b24ebab8757ce52a1bd3b3b9986e4d253f0166Ying Wangendef
1160e4b24ebab8757ce52a1bd3b3b9986e4d253f0166Ying Wang
1161e4b24ebab8757ce52a1bd3b3b9986e4d253f0166Ying Wang# Split long argument list into smaller groups and call the command repeatedly
1162bffaef246a5b838eb40a642463b1186935424faeTorne (Richard Coles)# Call the command at least once even if there are no arguments, as otherwise
1163bffaef246a5b838eb40a642463b1186935424faeTorne (Richard Coles)# the output file won't be created.
1164e4b24ebab8757ce52a1bd3b3b9986e4d253f0166Ying Wang#
1165e4b24ebab8757ce52a1bd3b3b9986e4d253f0166Ying Wang# $(1): the command without arguments
1166e4b24ebab8757ce52a1bd3b3b9986e4d253f0166Ying Wang# $(2): the arguments
1167e4b24ebab8757ce52a1bd3b3b9986e4d253f0166Ying Wangdefine split-long-arguments
1168bffaef246a5b838eb40a642463b1186935424faeTorne (Richard Coles)$(hide) $(1) $(wordlist 1,500,$(2))
1169e4b24ebab8757ce52a1bd3b3b9986e4d253f0166Ying Wang$(call _concat-if-arg2-not-empty,$(1),$(wordlist 501,1000,$(2)))
1170e4b24ebab8757ce52a1bd3b3b9986e4d253f0166Ying Wang$(call _concat-if-arg2-not-empty,$(1),$(wordlist 1001,1500,$(2)))
1171e4b24ebab8757ce52a1bd3b3b9986e4d253f0166Ying Wang$(call _concat-if-arg2-not-empty,$(1),$(wordlist 1501,2000,$(2)))
1172e4b24ebab8757ce52a1bd3b3b9986e4d253f0166Ying Wang$(call _concat-if-arg2-not-empty,$(1),$(wordlist 2001,2500,$(2)))
1173e4b24ebab8757ce52a1bd3b3b9986e4d253f0166Ying Wang$(call _concat-if-arg2-not-empty,$(1),$(wordlist 2501,3000,$(2)))
1174e4b24ebab8757ce52a1bd3b3b9986e4d253f0166Ying Wang$(call _concat-if-arg2-not-empty,$(1),$(wordlist 3001,99999,$(2)))
1175e4b24ebab8757ce52a1bd3b3b9986e4d253f0166Ying Wangendef
1176e4b24ebab8757ce52a1bd3b3b9986e4d253f0166Ying Wang
1177a02d3d9f746a0cd267bd793fca256f355111484bYing Wang# $(1): the full path of the source static library.
1178a02d3d9f746a0cd267bd793fca256f355111484bYing Wangdefine _extract-and-include-single-target-whole-static-lib
1179a02d3d9f746a0cd267bd793fca256f355111484bYing Wang@echo "preparing StaticLib: $(PRIVATE_MODULE) [including $(1)]"
1180a02d3d9f746a0cd267bd793fca256f355111484bYing Wang$(hide) ldir=$(PRIVATE_INTERMEDIATES_DIR)/WHOLE/$(basename $(notdir $(1)))_objs;\
1181a02d3d9f746a0cd267bd793fca256f355111484bYing Wang    rm -rf $$ldir; \
1182a02d3d9f746a0cd267bd793fca256f355111484bYing Wang    mkdir -p $$ldir; \
1183a02d3d9f746a0cd267bd793fca256f355111484bYing Wang    filelist=; \
11846feb6d5607ce86a446645564212043964628f540Ying Wang    for f in `$($(PRIVATE_2ND_ARCH_VAR_PREFIX)TARGET_AR) t $(1)`; do \
118561d499b965e3314308b9510f6b6d4c8919bb0b3aYing Wang        $($(PRIVATE_2ND_ARCH_VAR_PREFIX)TARGET_AR) p $(1) $$f > $$ldir/$$f; \
1186a02d3d9f746a0cd267bd793fca256f355111484bYing Wang        filelist="$$filelist $$ldir/$$f"; \
1187a02d3d9f746a0cd267bd793fca256f355111484bYing Wang    done ; \
118861d499b965e3314308b9510f6b6d4c8919bb0b3aYing Wang    $($(PRIVATE_2ND_ARCH_VAR_PREFIX)TARGET_AR) $($(PRIVATE_2ND_ARCH_VAR_PREFIX)TARGET_GLOBAL_ARFLAGS) \
118961d499b965e3314308b9510f6b6d4c8919bb0b3aYing Wang        $(PRIVATE_ARFLAGS) $@ $$filelist
1190a02d3d9f746a0cd267bd793fca256f355111484bYing Wang
1191a02d3d9f746a0cd267bd793fca256f355111484bYing Wangendef
1192a02d3d9f746a0cd267bd793fca256f355111484bYing Wang
11933d02eacbdef0c1a0c0725d10628bec13f4139be9Dan Bornsteindefine extract-and-include-target-whole-static-libs
119446e9beca50057bd4ff375b35fd5958c05ce5bcb7Dima Zavin$(foreach lib,$(PRIVATE_ALL_WHOLE_STATIC_LIBRARIES), \
1195a02d3d9f746a0cd267bd793fca256f355111484bYing Wang    $(call _extract-and-include-single-target-whole-static-lib, $(lib)))
119646e9beca50057bd4ff375b35fd5958c05ce5bcb7Dima Zavinendef
119746e9beca50057bd4ff375b35fd5958c05ce5bcb7Dima Zavin
119888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# Explicitly delete the archive first so that ar doesn't
119988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# try to add to an existing archive.
120088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine transform-o-to-static-lib
120188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project@mkdir -p $(dir $@)
120288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project@rm -f $@
12033d02eacbdef0c1a0c0725d10628bec13f4139be9Dan Bornstein$(extract-and-include-target-whole-static-libs)
120446e9beca50057bd4ff375b35fd5958c05ce5bcb7Dima Zavin@echo "target StaticLib: $(PRIVATE_MODULE) ($@)"
12056feb6d5607ce86a446645564212043964628f540Ying Wang$(call split-long-arguments,$($(PRIVATE_2ND_ARCH_VAR_PREFIX)TARGET_AR) \
12066feb6d5607ce86a446645564212043964628f540Ying Wang    $($(PRIVATE_2ND_ARCH_VAR_PREFIX)TARGET_GLOBAL_ARFLAGS) \
120761d499b965e3314308b9510f6b6d4c8919bb0b3aYing Wang    $(PRIVATE_ARFLAGS) $@,$(filter %.o, $^))
120888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
120988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
121088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
121188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## Commands for running host ar
121288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
121388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
1214a02d3d9f746a0cd267bd793fca256f355111484bYing Wang# $(1): the full path of the source static library.
1215a02d3d9f746a0cd267bd793fca256f355111484bYing Wangdefine _extract-and-include-single-host-whole-static-lib
1216a02d3d9f746a0cd267bd793fca256f355111484bYing Wang@echo "preparing StaticLib: $(PRIVATE_MODULE) [including $(1)]"
1217a02d3d9f746a0cd267bd793fca256f355111484bYing Wang$(hide) ldir=$(PRIVATE_INTERMEDIATES_DIR)/WHOLE/$(basename $(notdir $(1)))_objs;\
1218a02d3d9f746a0cd267bd793fca256f355111484bYing Wang    rm -rf $$ldir; \
1219a02d3d9f746a0cd267bd793fca256f355111484bYing Wang    mkdir -p $$ldir; \
1220a02d3d9f746a0cd267bd793fca256f355111484bYing Wang    filelist=; \
12216feb6d5607ce86a446645564212043964628f540Ying Wang    for f in `$($(PRIVATE_2ND_ARCH_VAR_PREFIX)HOST_AR) t $(1) | \grep '\.o$$'`; do \
12226feb6d5607ce86a446645564212043964628f540Ying Wang        $($(PRIVATE_2ND_ARCH_VAR_PREFIX)HOST_AR) p $(1) $$f > $$ldir/$$f; \
1223a02d3d9f746a0cd267bd793fca256f355111484bYing Wang        filelist="$$filelist $$ldir/$$f"; \
1224a02d3d9f746a0cd267bd793fca256f355111484bYing Wang    done ; \
12256feb6d5607ce86a446645564212043964628f540Ying Wang    $($(PRIVATE_2ND_ARCH_VAR_PREFIX)HOST_AR) $($(PRIVATE_2ND_ARCH_VAR_PREFIX)HOST_GLOBAL_ARFLAGS) \
12266feb6d5607ce86a446645564212043964628f540Ying Wang        $(PRIVATE_ARFLAGS) $@ $$filelist
1227a02d3d9f746a0cd267bd793fca256f355111484bYing Wang
1228a02d3d9f746a0cd267bd793fca256f355111484bYing Wangendef
1229a02d3d9f746a0cd267bd793fca256f355111484bYing Wang
12303d02eacbdef0c1a0c0725d10628bec13f4139be9Dan Bornsteindefine extract-and-include-host-whole-static-libs
12313d02eacbdef0c1a0c0725d10628bec13f4139be9Dan Bornstein$(foreach lib,$(PRIVATE_ALL_WHOLE_STATIC_LIBRARIES), \
1232a02d3d9f746a0cd267bd793fca256f355111484bYing Wang    $(call _extract-and-include-single-host-whole-static-lib, $(lib)))
12333d02eacbdef0c1a0c0725d10628bec13f4139be9Dan Bornsteinendef
12343d02eacbdef0c1a0c0725d10628bec13f4139be9Dan Bornstein
123588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# Explicitly delete the archive first so that ar doesn't
123688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# try to add to an existing archive.
123788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine transform-host-o-to-static-lib
123888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project@mkdir -p $(dir $@)
123988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project@rm -f $@
12403d02eacbdef0c1a0c0725d10628bec13f4139be9Dan Bornstein$(extract-and-include-host-whole-static-libs)
12416bffc91c5d85ee828b37fa56efb7d87a76214747Dan Bornstein@echo "host StaticLib: $(PRIVATE_MODULE) ($@)"
12426feb6d5607ce86a446645564212043964628f540Ying Wang$(call split-long-arguments,$($(PRIVATE_2ND_ARCH_VAR_PREFIX)HOST_AR) \
12436feb6d5607ce86a446645564212043964628f540Ying Wang    $($(PRIVATE_2ND_ARCH_VAR_PREFIX)HOST_GLOBAL_ARFLAGS) \
12446feb6d5607ce86a446645564212043964628f540Ying Wang    $(PRIVATE_ARFLAGS) $@,$(filter %.o, $^))
124588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
124688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
124788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
124888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
124988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## Commands for running gcc to link a shared library or package
125088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
125188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
125288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# ld just seems to be so finicky with command order that we allow
125388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# it to be overriden en-masse see combo/linux-arm.make for an example.
125488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectifneq ($(HOST_CUSTOM_LD_COMMAND),true)
125588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine transform-host-o-to-shared-lib-inner
12563a7e4ccad9c910ac798a8c324f7718d137bd7692Ying Wang$(hide) $(PRIVATE_CXX) \
12576feb6d5607ce86a446645564212043964628f540Ying Wang	-Wl,-rpath-link=$($(PRIVATE_2ND_ARCH_VAR_PREFIX)HOST_OUT_INTERMEDIATE_LIBRARIES) \
12586feb6d5607ce86a446645564212043964628f540Ying Wang	-Wl,-rpath,\$$ORIGIN/../$(notdir $($(PRIVATE_2ND_ARCH_VAR_PREFIX)HOST_OUT_SHARED_LIBRARIES)) \
125988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project	-shared -Wl,-soname,$(notdir $@) \
12606feb6d5607ce86a446645564212043964628f540Ying Wang	$($(PRIVATE_2ND_ARCH_VAR_PREFIX)HOST_GLOBAL_LD_DIRS) \
126188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project	$(if $(PRIVATE_NO_DEFAULT_COMPILER_FLAGS),, \
1262e6f65438a45f0e1b519fb3cd2799f44ca87911a7Logan Chien	   $(PRIVATE_HOST_GLOBAL_LDFLAGS) \
126388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project	) \
1264a424bf781c1abd946acbc46aeb31bc1b1ef3e62eTorne (Richard Coles)	$(PRIVATE_LDFLAGS) \
126588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project	$(PRIVATE_ALL_OBJECTS) \
126688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project	-Wl,--whole-archive \
126788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project	$(call normalize-host-libraries,$(PRIVATE_ALL_WHOLE_STATIC_LIBRARIES)) \
126888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project	-Wl,--no-whole-archive \
1269fcdabd4bdbb347399e77d2fd4b1aefd6281d75f8Ying Wang	$(if $(PRIVATE_GROUP_STATIC_LIBRARIES),-Wl$(comma)--start-group) \
127088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project	$(call normalize-host-libraries,$(PRIVATE_ALL_STATIC_LIBRARIES)) \
1271fcdabd4bdbb347399e77d2fd4b1aefd6281d75f8Ying Wang	$(if $(PRIVATE_GROUP_STATIC_LIBRARIES),-Wl$(comma)--end-group) \
127288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project	$(call normalize-host-libraries,$(PRIVATE_ALL_SHARED_LIBRARIES)) \
127388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project	-o $@ \
127488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project	$(PRIVATE_LDLIBS)
127588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
127688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendif
127788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
127888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine transform-host-o-to-shared-lib
127988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project@mkdir -p $(dir $@)
128088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project@echo "host SharedLib: $(PRIVATE_MODULE) ($@)"
12813a7e4ccad9c910ac798a8c324f7718d137bd7692Ying Wang$(transform-host-o-to-shared-lib-inner)
128288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
128388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
128488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine transform-host-o-to-package
128588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project@mkdir -p $(dir $@)
128688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project@echo "host Package: $(PRIVATE_MODULE) ($@)"
12873a7e4ccad9c910ac798a8c324f7718d137bd7692Ying Wang$(transform-host-o-to-shared-lib-inner)
128888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
128988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
129088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
129188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
129288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## Commands for running gcc to link a shared library or package
129388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
129488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
129588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#echo >$@.vers "{"; \
129688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#echo >>$@.vers " global:"; \
129788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#$(BUILD_SYSTEM)/filter_symbols.sh $(TARGET_NM) "  " ";" $(filter %.o,$^) | sort -u >>$@.vers; \
129888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#echo >>$@.vers " local:"; \
129988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#echo >>$@.vers "  *;"; \
130088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#echo >>$@.vers "};"; \
130188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
130288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#	-Wl,--version-script=$@.vers \
130388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
130488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# ld just seems to be so finicky with command order that we allow
130588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# it to be overriden en-masse see combo/linux-arm.make for an example.
130688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectifneq ($(TARGET_CUSTOM_LD_COMMAND),true)
130788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine transform-o-to-shared-lib-inner
13083a7e4ccad9c910ac798a8c324f7718d137bd7692Ying Wang$(hide) $(PRIVATE_CXX) \
13091a08100fa9d92c25de32ba4d13fd3958bbcab894Ying Wang	$(PRIVATE_TARGET_GLOBAL_LDFLAGS) \
13109fb3526648a08d8d8c1e6325aeb3c6500bcd44c2Ying Wang	-Wl,-rpath-link=$(PRIVATE_TARGET_OUT_INTERMEDIATE_LIBRARIES) \
131188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project	-Wl,-rpath,\$$ORIGIN/../lib \
131204cf31597021af3cd045dd9c50d94a87d0394023Dan Albert	-Wl,-shared -Wl,-soname,$(notdir $@) \
131388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project	$(PRIVATE_LDFLAGS) \
13141a08100fa9d92c25de32ba4d13fd3958bbcab894Ying Wang	$(PRIVATE_TARGET_GLOBAL_LD_DIRS) \
131588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project	$(PRIVATE_ALL_OBJECTS) \
131688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project	-Wl,--whole-archive \
131780e6cce93e36787be9123f9b5dc91da1a0d2f472Ying Wang	$(call normalize-target-libraries,$(PRIVATE_ALL_WHOLE_STATIC_LIBRARIES)) \
131888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project	-Wl,--no-whole-archive \
1319fcdabd4bdbb347399e77d2fd4b1aefd6281d75f8Ying Wang	$(if $(PRIVATE_GROUP_STATIC_LIBRARIES),-Wl$(comma)--start-group) \
132088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project	$(call normalize-target-libraries,$(PRIVATE_ALL_STATIC_LIBRARIES)) \
1321fcdabd4bdbb347399e77d2fd4b1aefd6281d75f8Ying Wang	$(if $(PRIVATE_GROUP_STATIC_LIBRARIES),-Wl$(comma)--end-group) \
132288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project	$(call normalize-target-libraries,$(PRIVATE_ALL_SHARED_LIBRARIES)) \
132388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project	-o $@ \
132488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project	$(PRIVATE_LDLIBS)
132588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
132688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendif
132788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
132888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine transform-o-to-shared-lib
132988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project@mkdir -p $(dir $@)
133088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project@echo "target SharedLib: $(PRIVATE_MODULE) ($@)"
1331791fa6a9094dced42b4b292c163708838a8d059eYing Wang$($(PRIVATE_2ND_ARCH_VAR_PREFIX)transform-o-to-shared-lib-inner)
133288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
133388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
133488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
133588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
133688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## Commands for filtering a target executable or library
133788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
133888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
1339ce1c596e1507295f3037e9fa7bf163fb2ab95a11Ying Wangifneq ($(TARGET_BUILD_VARIANT),user)
1340ce1c596e1507295f3037e9fa7bf163fb2ab95a11Ying Wang  TARGET_STRIP_EXTRA = && $(PRIVATE_OBJCOPY) --add-gnu-debuglink=$< $@
1341ce1c596e1507295f3037e9fa7bf163fb2ab95a11Ying Wang  TARGET_STRIP_KEEP_SYMBOLS_EXTRA = --add-gnu-debuglink=$<
1342ce1c596e1507295f3037e9fa7bf163fb2ab95a11Ying Wangendif
1343ce1c596e1507295f3037e9fa7bf163fb2ab95a11Ying Wang
134488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine transform-to-stripped
134588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project@mkdir -p $(dir $@)
134688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project@echo "target Strip: $(PRIVATE_MODULE) ($@)"
1347ce1c596e1507295f3037e9fa7bf163fb2ab95a11Ying Wang$(hide) $(PRIVATE_STRIP) --strip-all $< -o $@ $(TARGET_STRIP_EXTRA)
134888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
134988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
1350a6e2f9322c47ac02546aa436341fa42afd0000c5Christopher Ferrisdefine transform-to-stripped-keep-symbols
1351a6e2f9322c47ac02546aa436341fa42afd0000c5Christopher Ferris@mkdir -p $(dir $@)
1352a6e2f9322c47ac02546aa436341fa42afd0000c5Christopher Ferris@echo "target Strip (keep symbols): $(PRIVATE_MODULE) ($@)"
1353ce1c596e1507295f3037e9fa7bf163fb2ab95a11Ying Wang$(hide) $(PRIVATE_OBJCOPY) \
1354ce1c596e1507295f3037e9fa7bf163fb2ab95a11Ying Wang    `$(PRIVATE_READELF) -S $< | awk '/.debug_/ {print "-R " $$2}' | xargs` \
1355ce1c596e1507295f3037e9fa7bf163fb2ab95a11Ying Wang    $(TARGET_STRIP_KEEP_SYMBOLS_EXTRA) $< $@
1356a6e2f9322c47ac02546aa436341fa42afd0000c5Christopher Ferrisendef
1357a6e2f9322c47ac02546aa436341fa42afd0000c5Christopher Ferris
135888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
135988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
136088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## Commands for running gcc to link an executable
136188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
136288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
136388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectifneq ($(TARGET_CUSTOM_LD_COMMAND),true)
136488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine transform-o-to-executable-inner
13653a7e4ccad9c910ac798a8c324f7718d137bd7692Ying Wang$(hide) $(PRIVATE_CXX) \
1366c6ffc00b9fa7898564139558a025d865bac37a38Ying Wang	$(PRIVATE_TARGET_GLOBAL_LDFLAGS) \
1367c6ffc00b9fa7898564139558a025d865bac37a38Ying Wang	$(PRIVATE_TARGET_GLOBAL_LD_DIRS) \
13689fb3526648a08d8d8c1e6325aeb3c6500bcd44c2Ying Wang	-Wl,-rpath-link=$(PRIVATE_TARGET_OUT_INTERMEDIATE_LIBRARIES) \
136988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project	-Wl,-rpath,\$$ORIGIN/../lib \
137088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project	$(PRIVATE_LDFLAGS) \
137188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project	$(PRIVATE_ALL_OBJECTS) \
137288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project	-Wl,--whole-archive \
137388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project	$(call normalize-target-libraries,$(PRIVATE_ALL_WHOLE_STATIC_LIBRARIES)) \
137488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project	-Wl,--no-whole-archive \
1375fcdabd4bdbb347399e77d2fd4b1aefd6281d75f8Ying Wang	$(if $(PRIVATE_GROUP_STATIC_LIBRARIES),-Wl$(comma)--start-group) \
137688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project	$(call normalize-target-libraries,$(PRIVATE_ALL_STATIC_LIBRARIES)) \
1377fcdabd4bdbb347399e77d2fd4b1aefd6281d75f8Ying Wang	$(if $(PRIVATE_GROUP_STATIC_LIBRARIES),-Wl$(comma)--end-group) \
137888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project	$(call normalize-target-libraries,$(PRIVATE_ALL_SHARED_LIBRARIES)) \
137988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project	-o $@ \
138088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project	$(PRIVATE_LDLIBS)
138188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
138288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendif
138388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
138488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine transform-o-to-executable
138588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project@mkdir -p $(dir $@)
138688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project@echo "target Executable: $(PRIVATE_MODULE) ($@)"
138772b01d6121d7a80315df996690d4efde5219b899Ying Wang$($(PRIVATE_2ND_ARCH_VAR_PREFIX)transform-o-to-executable-inner)
138888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
138988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
139088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
139188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
139288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## Commands for running gcc to link a statically linked
139388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## executable.  In practice, we only use this on arm, so
139488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## the other platforms don't have the
139588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## transform-o-to-static-executable defined
139688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
139788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
139888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectifneq ($(TARGET_CUSTOM_LD_COMMAND),true)
139988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine transform-o-to-static-executable-inner
140088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
140188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendif
140288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
140388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine transform-o-to-static-executable
140488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project@mkdir -p $(dir $@)
140588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project@echo "target StaticExecutable: $(PRIVATE_MODULE) ($@)"
140672b01d6121d7a80315df996690d4efde5219b899Ying Wang$($(PRIVATE_2ND_ARCH_VAR_PREFIX)transform-o-to-static-executable-inner)
140788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
140888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
140988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
141088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
141188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## Commands for running gcc to link a host executable
141288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
1413faf3d5ed0fe24acef0b14a1297d78058bcedb016Ying Wangifdef BUILD_HOST_static
1414faf3d5ed0fe24acef0b14a1297d78058bcedb016Ying WangHOST_FPIE_FLAGS :=
1415faf3d5ed0fe24acef0b14a1297d78058bcedb016Ying Wangelse
1416908ab54fda172baa9a646259fafd8af35290f0a6Dan AlbertHOST_FPIE_FLAGS := -pie
1417a503fb362918363b28637b487eba83e9ad647cebStephen Hines# Force the correct entry point to workaround a bug in binutils that manifests with -pie
1418a503fb362918363b28637b487eba83e9ad647cebStephen Hinesifeq ($(HOST_OS),windows)
1419a503fb362918363b28637b487eba83e9ad647cebStephen HinesHOST_FPIE_FLAGS += -Wl,-e_mainCRTStartup
1420a503fb362918363b28637b487eba83e9ad647cebStephen Hinesendif
1421faf3d5ed0fe24acef0b14a1297d78058bcedb016Ying Wangendif
142288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
142388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectifneq ($(HOST_CUSTOM_LD_COMMAND),true)
142488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine transform-host-o-to-executable-inner
14253a7e4ccad9c910ac798a8c324f7718d137bd7692Ying Wang$(hide) $(PRIVATE_CXX) \
142688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project	$(PRIVATE_ALL_OBJECTS) \
142788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project	-Wl,--whole-archive \
142888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project	$(call normalize-host-libraries,$(PRIVATE_ALL_WHOLE_STATIC_LIBRARIES)) \
142988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project	-Wl,--no-whole-archive \
1430fcdabd4bdbb347399e77d2fd4b1aefd6281d75f8Ying Wang	$(if $(PRIVATE_GROUP_STATIC_LIBRARIES),-Wl$(comma)--start-group) \
143188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project	$(call normalize-host-libraries,$(PRIVATE_ALL_STATIC_LIBRARIES)) \
1432fcdabd4bdbb347399e77d2fd4b1aefd6281d75f8Ying Wang	$(if $(PRIVATE_GROUP_STATIC_LIBRARIES),-Wl$(comma)--end-group) \
143388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project	$(call normalize-host-libraries,$(PRIVATE_ALL_SHARED_LIBRARIES)) \
14346feb6d5607ce86a446645564212043964628f540Ying Wang	-Wl,-rpath-link=$($(PRIVATE_2ND_ARCH_VAR_PREFIX)HOST_OUT_INTERMEDIATE_LIBRARIES) \
14356feb6d5607ce86a446645564212043964628f540Ying Wang	-Wl,-rpath,\$$ORIGIN/../$(notdir $($(PRIVATE_2ND_ARCH_VAR_PREFIX)HOST_OUT_SHARED_LIBRARIES)) \
14366feb6d5607ce86a446645564212043964628f540Ying Wang	$($(PRIVATE_2ND_ARCH_VAR_PREFIX)HOST_GLOBAL_LD_DIRS) \
1437d9e7d257416a4c85f575161c10c589b3656db3e9Conley Owens	$(if $(PRIVATE_NO_DEFAULT_COMPILER_FLAGS),, \
1438e6f65438a45f0e1b519fb3cd2799f44ca87911a7Logan Chien		$(PRIVATE_HOST_GLOBAL_LDFLAGS) \
1439faf3d5ed0fe24acef0b14a1297d78058bcedb016Ying Wang		$(HOST_FPIE_FLAGS) \
1440d9e7d257416a4c85f575161c10c589b3656db3e9Conley Owens	) \
1441a424bf781c1abd946acbc46aeb31bc1b1ef3e62eTorne (Richard Coles)	$(PRIVATE_LDFLAGS) \
144288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project	-o $@ \
144388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project	$(PRIVATE_LDLIBS)
144488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
144588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendif
144688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
144788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine transform-host-o-to-executable
144888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project@mkdir -p $(dir $@)
144988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project@echo "host Executable: $(PRIVATE_MODULE) ($@)"
14503a7e4ccad9c910ac798a8c324f7718d137bd7692Ying Wang$(transform-host-o-to-executable-inner)
145188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
145288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
145388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
145488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
145588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## Commands for running javac to make .class files
145688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
145788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
145888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#@echo "Source intermediates dir: $(PRIVATE_SOURCE_INTERMEDIATES_DIR)"
145988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#@echo "Source intermediates: $$(find $(PRIVATE_SOURCE_INTERMEDIATES_DIR) -name '*.java')"
146088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
146188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# TODO: Right now we generate the asset resources twice, first as part
146288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# of generating the Java classes, then at the end when packaging the final
146388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# assets.  This should be changed to do one of two things: (1) Don't generate
146488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# any resource files the first time, only create classes during that stage;
146588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# or (2) Don't use the -c flag with the second stage, instead taking the
146688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# resource files from the first stage as additional input.  My original intent
146788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# was to use approach (2), but this requires a little more work in the tool.
146888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# Maybe we should just use approach (1).
146988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
147088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# This rule creates the R.java and Manifest.java files, both of which
14714f1ab92aac00a73276793ed25af669d112618a32Ying Wang# are PRODUCT-neutral.  Don't pass PRIVATE_PRODUCT_AAPT_CONFIG to this invocation.
147288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine create-resource-java-files
147388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project@mkdir -p $(PRIVATE_SOURCE_INTERMEDIATES_DIR)
147488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project@mkdir -p $(dir $(PRIVATE_RESOURCE_PUBLICS_OUTPUT))
1475c61d5932d3b1014352dd5cbcb2684a95b3e172a3Ying Wang$(hide) $(AAPT) package $(PRIVATE_AAPT_FLAGS) -m \
14764f1ab92aac00a73276793ed25af669d112618a32Ying Wang    $(eval # PRIVATE_PRODUCT_AAPT_CONFIG is intentionally missing-- see comment.) \
147788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project    $(addprefix -J , $(PRIVATE_SOURCE_INTERMEDIATES_DIR)) \
147888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project    $(addprefix -M , $(PRIVATE_ANDROID_MANIFEST)) \
147988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project    $(addprefix -P , $(PRIVATE_RESOURCE_PUBLICS_OUTPUT)) \
148088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project    $(addprefix -S , $(PRIVATE_RESOURCE_DIR)) \
148188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project    $(addprefix -A , $(PRIVATE_ASSET_DIR)) \
14829bd5404a9d30b82ba3d2750c0cb8cae88b33f82dDianne Hackborn    $(addprefix -I , $(PRIVATE_AAPT_INCLUDES)) \
14832daa2b3b059ac755e8280741b23d65360ae233bcJoe Onorato    $(addprefix -G , $(PRIVATE_PROGUARD_OPTIONS_FILE)) \
1484bb9c230b68e9b57fe60f050e231f8437324f107aYing Wang    $(addprefix --min-sdk-version , $(PRIVATE_DEFAULT_APP_TARGET_SDK)) \
1485bb9c230b68e9b57fe60f050e231f8437324f107aYing Wang    $(addprefix --target-sdk-version , $(PRIVATE_DEFAULT_APP_TARGET_SDK)) \
14861ae607add31de4708e732c7139e68d425b920595Ying Wang    $(if $(filter --version-code,$(PRIVATE_AAPT_FLAGS)),,$(addprefix --version-code , $(PLATFORM_SDK_VERSION))) \
14878f5069b1be9af316c948e9cd7bae2abdc33da5bcYing Wang    $(if $(filter --version-name,$(PRIVATE_AAPT_FLAGS)),,$(addprefix --version-name , $(PLATFORM_VERSION)-$(BUILD_NUMBER))) \
14888c254825a062fd240566404d9d6ecc7cc56b30baYing Wang    $(addprefix --rename-manifest-package , $(PRIVATE_MANIFEST_PACKAGE_NAME)) \
14893dae0ee46cf5fcde6eb424f9ab0c69f2d901a671Ying Wang    $(addprefix --rename-instrumentation-target-package , $(PRIVATE_MANIFEST_INSTRUMENTATION_FOR))
149088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
149188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
149288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectifeq ($(HOST_OS),windows)
149388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectxlint_unchecked :=
149488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectelse
14957adbf97d110ebe137579e1078e3846aa4f3c6c2cJeffrey Chyanxlint_unchecked := -Xlint:unchecked
149688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendif
149788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
1498bb7c6d88c6dd5ee48e8b8ec85ee04c0aa7bc5979Brian Carlstromifeq (true, $(ENABLE_INCREMENTALJAVAC))
1499bb7c6d88c6dd5ee48e8b8ec85ee04c0aa7bc5979Brian Carlstromincremental_dex := --incremental
1500bb7c6d88c6dd5ee48e8b8ec85ee04c0aa7bc5979Brian Carlstromelse
1501bb7c6d88c6dd5ee48e8b8ec85ee04c0aa7bc5979Brian Carlstromincremental_dex :=
1502bb7c6d88c6dd5ee48e8b8ec85ee04c0aa7bc5979Brian Carlstromendif
1503bb7c6d88c6dd5ee48e8b8ec85ee04c0aa7bc5979Brian Carlstrom
150488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# emit-line, <word list>, <output file>
150588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine emit-line
150688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project   $(if $(1),echo -n '$(strip $(1)) ' >> $(2))
150788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
150888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
150988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# dump-words-to-file, <word list>, <output file>
151088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine dump-words-to-file
151188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project        @rm -f $(2)
151288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project        @$(call emit-line,$(wordlist 1,200,$(1)),$(2))
151388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project        @$(call emit-line,$(wordlist 201,400,$(1)),$(2))
151488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project        @$(call emit-line,$(wordlist 401,600,$(1)),$(2))
151588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project        @$(call emit-line,$(wordlist 601,800,$(1)),$(2))
151688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project        @$(call emit-line,$(wordlist 801,1000,$(1)),$(2))
151788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project        @$(call emit-line,$(wordlist 1001,1200,$(1)),$(2))
151888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project        @$(call emit-line,$(wordlist 1201,1400,$(1)),$(2))
151988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project        @$(call emit-line,$(wordlist 1401,1600,$(1)),$(2))
152088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project        @$(call emit-line,$(wordlist 1601,1800,$(1)),$(2))
152188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project        @$(call emit-line,$(wordlist 1801,2000,$(1)),$(2))
152288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project        @$(call emit-line,$(wordlist 2001,2200,$(1)),$(2))
152388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project        @$(call emit-line,$(wordlist 2201,2400,$(1)),$(2))
152488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project        @$(call emit-line,$(wordlist 2401,2600,$(1)),$(2))
152588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project        @$(call emit-line,$(wordlist 2601,2800,$(1)),$(2))
152688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project        @$(call emit-line,$(wordlist 2801,3000,$(1)),$(2))
152788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project        @$(call emit-line,$(wordlist 3001,3200,$(1)),$(2))
152888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project        @$(call emit-line,$(wordlist 3201,3400,$(1)),$(2))
152988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project        @$(call emit-line,$(wordlist 3401,3600,$(1)),$(2))
153088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project        @$(call emit-line,$(wordlist 3601,3800,$(1)),$(2))
153188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project        @$(call emit-line,$(wordlist 3801,4000,$(1)),$(2))
153272c941a14757255a73f0bf31d689cc2b99fff6cfJesse Wilson        @$(call emit-line,$(wordlist 4001,4200,$(1)),$(2))
153372c941a14757255a73f0bf31d689cc2b99fff6cfJesse Wilson        @$(call emit-line,$(wordlist 4201,4400,$(1)),$(2))
153472c941a14757255a73f0bf31d689cc2b99fff6cfJesse Wilson        @$(call emit-line,$(wordlist 4401,4600,$(1)),$(2))
153572c941a14757255a73f0bf31d689cc2b99fff6cfJesse Wilson        @$(call emit-line,$(wordlist 4601,4800,$(1)),$(2))
153672c941a14757255a73f0bf31d689cc2b99fff6cfJesse Wilson        @$(call emit-line,$(wordlist 4801,5000,$(1)),$(2))
153772c941a14757255a73f0bf31d689cc2b99fff6cfJesse Wilson        @$(if $(wordlist 5001,5002,$(1)),$(error Too many words ($(words $(1)))))
153888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
153988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
154088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# For a list of jar files, unzip them to a specified directory,
154188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# but make sure that no META-INF files come along for the ride.
154288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#
154388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# $(1): files to unzip
154488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# $(2): destination directory
154588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine unzip-jar-files
154688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project  $(hide) for f in $(1); \
154788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project  do \
154888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project    if [ ! -f $$f ]; then \
154988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project      echo Missing file $$f; \
155088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project      exit 1; \
155188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project    fi; \
1552f1a55f8bfbaa1a68d96e229b4e73c9e9209d82cfSriram Raman    unzip -qo $$f -d $(2); \
15533a6f7589e8fcc691ec768b1fdcbf0364ff4596f2Ying Wang  done \
15543a6f7589e8fcc691ec768b1fdcbf0364ff4596f2Ying Wang  $(if $(PRIVATE_DONT_DELETE_JAR_META_INF),,;rm -rf $(2)/META-INF)
155588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
155688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
1557782695112d42ea3b9992e7c5f10a76f1854343d4Brian Carlstrom# Common definition to invoke javac on the host and target.
1558782695112d42ea3b9992e7c5f10a76f1854343d4Brian Carlstrom#
1559782695112d42ea3b9992e7c5f10a76f1854343d4Brian Carlstrom# Some historical notes:
1560782695112d42ea3b9992e7c5f10a76f1854343d4Brian Carlstrom# - below we write the list of java files to java-source-list to avoid argument
1561782695112d42ea3b9992e7c5f10a76f1854343d4Brian Carlstrom#   list length problems with Cygwin
1562782695112d42ea3b9992e7c5f10a76f1854343d4Brian Carlstrom# - we filter out duplicate java file names because eclipse's compiler
1563782695112d42ea3b9992e7c5f10a76f1854343d4Brian Carlstrom#   doesn't like them.
1564782695112d42ea3b9992e7c5f10a76f1854343d4Brian Carlstrom#
1565782695112d42ea3b9992e7c5f10a76f1854343d4Brian Carlstrom# $(1): javac
1566782695112d42ea3b9992e7c5f10a76f1854343d4Brian Carlstrom# $(2): bootclasspath
1567782695112d42ea3b9992e7c5f10a76f1854343d4Brian Carlstromdefine compile-java
156864d85d0d827489c514f6aec075482563c80cda73Joe Onorato$(hide) rm -f $@
156964d85d0d827489c514f6aec075482563c80cda73Joe Onorato$(hide) rm -rf $(PRIVATE_CLASS_INTERMEDIATES_DIR)
1570782695112d42ea3b9992e7c5f10a76f1854343d4Brian Carlstrom$(hide) mkdir -p $(dir $@)
157164d85d0d827489c514f6aec075482563c80cda73Joe Onorato$(hide) mkdir -p $(PRIVATE_CLASS_INTERMEDIATES_DIR)
1572782695112d42ea3b9992e7c5f10a76f1854343d4Brian Carlstrom$(call unzip-jar-files,$(PRIVATE_STATIC_JAVA_LIBRARIES),$(PRIVATE_CLASS_INTERMEDIATES_DIR))
1573015edd2c1b4a4300ccccee4036ec2ca7e9ad798aYing Wang$(call dump-words-to-file,$(PRIVATE_JAVA_SOURCES),$(PRIVATE_CLASS_INTERMEDIATES_DIR)/java-source-list)
157464d85d0d827489c514f6aec075482563c80cda73Joe Onorato$(hide) if [ -d "$(PRIVATE_SOURCE_INTERMEDIATES_DIR)" ]; then \
1575a3b759354612424e07e957716de2845396c0d80aYing Wang          find $(PRIVATE_SOURCE_INTERMEDIATES_DIR) -name '*.java' >> $(PRIVATE_CLASS_INTERMEDIATES_DIR)/java-source-list; \
157688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectfi
1577015edd2c1b4a4300ccccee4036ec2ca7e9ad798aYing Wang$(hide) tr ' ' '\n' < $(PRIVATE_CLASS_INTERMEDIATES_DIR)/java-source-list \
1578015edd2c1b4a4300ccccee4036ec2ca7e9ad798aYing Wang    | sort -u > $(PRIVATE_CLASS_INTERMEDIATES_DIR)/java-source-list-uniq
1579e109a1d08d27ad18cc6ac70d9742de636ccae67eYing Wang$(hide) if [ -s $(PRIVATE_CLASS_INTERMEDIATES_DIR)/java-source-list-uniq ] ; then \
1580e109a1d08d27ad18cc6ac70d9742de636ccae67eYing Wang    $(1) -encoding UTF-8 \
1581782695112d42ea3b9992e7c5f10a76f1854343d4Brian Carlstrom    $(strip $(PRIVATE_JAVAC_DEBUG_FLAGS)) \
1582057eba07b8fdb30f27c9dd1889a74a053bc6ea1bYing Wang    $(if $(findstring true,$(PRIVATE_WARNINGS_ENABLE)),$(xlint_unchecked),) \
1583782695112d42ea3b9992e7c5f10a76f1854343d4Brian Carlstrom    $(2) \
158488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project    $(addprefix -classpath ,$(strip \
158588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project        $(call normalize-path-list,$(PRIVATE_ALL_JAVA_LIBRARIES)))) \
1586057eba07b8fdb30f27c9dd1889a74a053bc6ea1bYing Wang    $(if $(findstring true,$(PRIVATE_WARNINGS_ENABLE)),$(xlint_unchecked),) \
158788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project    -extdirs "" -d $(PRIVATE_CLASS_INTERMEDIATES_DIR) \
1588782695112d42ea3b9992e7c5f10a76f1854343d4Brian Carlstrom    $(PRIVATE_JAVACFLAGS) \
1589015edd2c1b4a4300ccccee4036ec2ca7e9ad798aYing Wang    \@$(PRIVATE_CLASS_INTERMEDIATES_DIR)/java-source-list-uniq \
1590e109a1d08d27ad18cc6ac70d9742de636ccae67eYing Wang    || ( rm -rf $(PRIVATE_CLASS_INTERMEDIATES_DIR) ; exit 41 ) \
1591e109a1d08d27ad18cc6ac70d9742de636ccae67eYing Wangfi
15920eccce99d7c23b403c6047738d88c616213ad7d7Joe Onorato$(if $(PRIVATE_JAVA_LAYERS_FILE), $(hide) build/tools/java-layers.py \
15930eccce99d7c23b403c6047738d88c616213ad7d7Joe Onorato    $(PRIVATE_JAVA_LAYERS_FILE) \@$(PRIVATE_CLASS_INTERMEDIATES_DIR)/java-source-list-uniq,)
1594015edd2c1b4a4300ccccee4036ec2ca7e9ad798aYing Wang$(hide) rm -f $(PRIVATE_CLASS_INTERMEDIATES_DIR)/java-source-list
1595015edd2c1b4a4300ccccee4036ec2ca7e9ad798aYing Wang$(hide) rm -f $(PRIVATE_CLASS_INTERMEDIATES_DIR)/java-source-list-uniq
15965758b8ed96783861c72b94a822c0ed581f414388Ying Wang$(if $(PRIVATE_JAR_EXCLUDE_FILES), $(hide) find $(PRIVATE_CLASS_INTERMEDIATES_DIR) \
15975758b8ed96783861c72b94a822c0ed581f414388Ying Wang    -name $(word 1, $(PRIVATE_JAR_EXCLUDE_FILES)) \
15985758b8ed96783861c72b94a822c0ed581f414388Ying Wang    $(addprefix -o -name , $(wordlist 2, 999, $(PRIVATE_JAR_EXCLUDE_FILES))) \
15995758b8ed96783861c72b94a822c0ed581f414388Ying Wang    | xargs rm -rf)
16004c4aa99ced05fcf3d965660160ab8bda9db0405cJeff Brown$(if $(PRIVATE_JAR_PACKAGES), \
16014c4aa99ced05fcf3d965660160ab8bda9db0405cJeff Brown    $(hide) find $(PRIVATE_CLASS_INTERMEDIATES_DIR) -mindepth 1 -type f \
16024c4aa99ced05fcf3d965660160ab8bda9db0405cJeff Brown        $(foreach pkg, $(PRIVATE_JAR_PACKAGES), \
16034c4aa99ced05fcf3d965660160ab8bda9db0405cJeff Brown            -not -path $(PRIVATE_CLASS_INTERMEDIATES_DIR)/$(subst .,/,$(pkg))/\*) -delete ; \
16044c4aa99ced05fcf3d965660160ab8bda9db0405cJeff Brown        find $(PRIVATE_CLASS_INTERMEDIATES_DIR) -empty -delete)
16054c4aa99ced05fcf3d965660160ab8bda9db0405cJeff Brown$(if $(PRIVATE_JAR_EXCLUDE_PACKAGES), $(hide) rm -rf \
16064c4aa99ced05fcf3d965660160ab8bda9db0405cJeff Brown    $(foreach pkg, $(PRIVATE_JAR_EXCLUDE_PACKAGES), \
16074c4aa99ced05fcf3d965660160ab8bda9db0405cJeff Brown        $(PRIVATE_CLASS_INTERMEDIATES_DIR)/$(subst .,/,$(pkg))))
1608a3b759354612424e07e957716de2845396c0d80aYing Wang$(if $(PRIVATE_RMTYPEDEFS), $(hide) $(RMTYPEDEFS) -v $(PRIVATE_CLASS_INTERMEDIATES_DIR))
16095c9a1a40642cb5954f60865661d3b78904f7354aGuang Zhu$(if $(PRIVATE_JAR_MANIFEST), \
16105c9a1a40642cb5954f60865661d3b78904f7354aGuang Zhu    $(hide) sed -e 's/%BUILD_NUMBER%/$(BUILD_NUMBER)/' \
16115c9a1a40642cb5954f60865661d3b78904f7354aGuang Zhu            $(PRIVATE_JAR_MANIFEST) > $(dir $@)/manifest.mf && \
16125c9a1a40642cb5954f60865661d3b78904f7354aGuang Zhu        jar -cfm $@ $(dir $@)/manifest.mf \
16135c9a1a40642cb5954f60865661d3b78904f7354aGuang Zhu            -C $(PRIVATE_CLASS_INTERMEDIATES_DIR) ., \
16145c9a1a40642cb5954f60865661d3b78904f7354aGuang Zhu    $(hide) jar -cf $@ -C $(PRIVATE_CLASS_INTERMEDIATES_DIR) .)
1615782695112d42ea3b9992e7c5f10a76f1854343d4Brian Carlstromendef
1616782695112d42ea3b9992e7c5f10a76f1854343d4Brian Carlstrom
1617782695112d42ea3b9992e7c5f10a76f1854343d4Brian Carlstromdefine transform-java-to-classes.jar
1618782695112d42ea3b9992e7c5f10a76f1854343d4Brian Carlstrom@echo "target Java: $(PRIVATE_MODULE) ($(PRIVATE_CLASS_INTERMEDIATES_DIR))"
1619782695112d42ea3b9992e7c5f10a76f1854343d4Brian Carlstrom$(call compile-java,$(TARGET_JAVAC),$(PRIVATE_BOOTCLASSPATH))
162088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
162188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
1622015edd2c1b4a4300ccccee4036ec2ca7e9ad798aYing Wang# Override the above definitions if we want to do incremetal javac
1623015edd2c1b4a4300ccccee4036ec2ca7e9ad798aYing Wangifeq (true, $(ENABLE_INCREMENTALJAVAC))
1624015edd2c1b4a4300ccccee4036ec2ca7e9ad798aYing Wangdefine compile-java
1625015edd2c1b4a4300ccccee4036ec2ca7e9ad798aYing Wang$(hide) mkdir -p $(dir $@)
1626015edd2c1b4a4300ccccee4036ec2ca7e9ad798aYing Wang$(hide) mkdir -p $(PRIVATE_CLASS_INTERMEDIATES_DIR)
1627015edd2c1b4a4300ccccee4036ec2ca7e9ad798aYing Wang$(hide) touch $(PRIVATE_CLASS_INTERMEDIATES_DIR)/newstamp
1628015edd2c1b4a4300ccccee4036ec2ca7e9ad798aYing Wang$(call unzip-jar-files,$(PRIVATE_STATIC_JAVA_LIBRARIES),$(PRIVATE_CLASS_INTERMEDIATES_DIR))
1629015edd2c1b4a4300ccccee4036ec2ca7e9ad798aYing Wang$(hide) if [ -e $(PRIVATE_CLASS_INTERMEDIATES_DIR)/stamp ] ; then \
1630015edd2c1b4a4300ccccee4036ec2ca7e9ad798aYing Wang        newerFlag=$$(echo -n "-newer $(PRIVATE_CLASS_INTERMEDIATES_DIR)/stamp") ; \
1631015edd2c1b4a4300ccccee4036ec2ca7e9ad798aYing Wang    fi ; \
1632015edd2c1b4a4300ccccee4036ec2ca7e9ad798aYing Wang    find $(PRIVATE_JAVA_SOURCES) $$newerFlag > $(PRIVATE_CLASS_INTERMEDIATES_DIR)/java-source-list ; \
1633015edd2c1b4a4300ccccee4036ec2ca7e9ad798aYing Wang    if [ -d "$(PRIVATE_SOURCE_INTERMEDIATES_DIR)" ]; then \
1634015edd2c1b4a4300ccccee4036ec2ca7e9ad798aYing Wang        find $(PRIVATE_SOURCE_INTERMEDIATES_DIR) -name '*.java' $$newerFlag >> $(PRIVATE_CLASS_INTERMEDIATES_DIR)/java-source-list; \
1635015edd2c1b4a4300ccccee4036ec2ca7e9ad798aYing Wang    fi
1636015edd2c1b4a4300ccccee4036ec2ca7e9ad798aYing Wang$(hide) tr ' ' '\n' < $(PRIVATE_CLASS_INTERMEDIATES_DIR)/java-source-list \
1637015edd2c1b4a4300ccccee4036ec2ca7e9ad798aYing Wang    | sort -u > $(PRIVATE_CLASS_INTERMEDIATES_DIR)/java-source-list-uniq
1638015edd2c1b4a4300ccccee4036ec2ca7e9ad798aYing Wang@echo "(Incremental) build source files:"
1639015edd2c1b4a4300ccccee4036ec2ca7e9ad798aYing Wang@cat $(PRIVATE_CLASS_INTERMEDIATES_DIR)/java-source-list-uniq
1640015edd2c1b4a4300ccccee4036ec2ca7e9ad798aYing Wang$(hide) if [ -s $(PRIVATE_CLASS_INTERMEDIATES_DIR)/java-source-list-uniq ] ; then \
1641149dd914b8799d67b8c4a6fb502b44058a3e14b8Joe Onorato    $(1) -encoding UTF-8 \
1642015edd2c1b4a4300ccccee4036ec2ca7e9ad798aYing Wang    $(strip $(PRIVATE_JAVAC_DEBUG_FLAGS)) \
1643057eba07b8fdb30f27c9dd1889a74a053bc6ea1bYing Wang    $(if $(findstring true,$(PRIVATE_WARNINGS_ENABLE)),$(xlint_unchecked),) \
1644015edd2c1b4a4300ccccee4036ec2ca7e9ad798aYing Wang    $(2) \
1645015edd2c1b4a4300ccccee4036ec2ca7e9ad798aYing Wang    $(addprefix -classpath ,$(strip \
1646015edd2c1b4a4300ccccee4036ec2ca7e9ad798aYing Wang        $(call normalize-path-list,$(PRIVATE_ALL_JAVA_LIBRARIES) $(PRIVATE_CLASS_INTERMEDIATES_DIR)))) \
1647057eba07b8fdb30f27c9dd1889a74a053bc6ea1bYing Wang    $(if $(findstring true,$(PRIVATE_WARNINGS_ENABLE)),$(xlint_unchecked),) \
1648015edd2c1b4a4300ccccee4036ec2ca7e9ad798aYing Wang    -extdirs "" -d $(PRIVATE_CLASS_INTERMEDIATES_DIR) \
1649015edd2c1b4a4300ccccee4036ec2ca7e9ad798aYing Wang    $(PRIVATE_JAVACFLAGS) \
1650015edd2c1b4a4300ccccee4036ec2ca7e9ad798aYing Wang    \@$(PRIVATE_CLASS_INTERMEDIATES_DIR)/java-source-list-uniq \
1651015edd2c1b4a4300ccccee4036ec2ca7e9ad798aYing Wang    || ( exit 41 ) \
1652015edd2c1b4a4300ccccee4036ec2ca7e9ad798aYing Wangfi
1653015edd2c1b4a4300ccccee4036ec2ca7e9ad798aYing Wang$(hide) rm -f $(PRIVATE_CLASS_INTERMEDIATES_DIR)/java-source-list
1654015edd2c1b4a4300ccccee4036ec2ca7e9ad798aYing Wang$(hide) rm -f $(PRIVATE_CLASS_INTERMEDIATES_DIR)/java-source-list-uniq
1655015edd2c1b4a4300ccccee4036ec2ca7e9ad798aYing Wang$(hide) rm -f $@
1656ae25ec1bcdeb028a2db3103abdf1f22768928f0aYing Wang$(if $(PRIVATE_JAR_EXCLUDE_FILES), $(hide) find $(PRIVATE_CLASS_INTERMEDIATES_DIR) \
1657ae25ec1bcdeb028a2db3103abdf1f22768928f0aYing Wang    -name $(word 1, $(PRIVATE_JAR_EXCLUDE_FILES)) \
1658ae25ec1bcdeb028a2db3103abdf1f22768928f0aYing Wang    $(addprefix -o -name , $(wordlist 2, 999, $(PRIVATE_JAR_EXCLUDE_FILES))) \
1659ae25ec1bcdeb028a2db3103abdf1f22768928f0aYing Wang    | xargs rm -rf)
16604c4aa99ced05fcf3d965660160ab8bda9db0405cJeff Brown$(if $(PRIVATE_JAR_PACKAGES), \
16614c4aa99ced05fcf3d965660160ab8bda9db0405cJeff Brown    $(hide) find $(PRIVATE_CLASS_INTERMEDIATES_DIR) -mindepth 1 -type f \
16624c4aa99ced05fcf3d965660160ab8bda9db0405cJeff Brown        $(foreach pkg, $(PRIVATE_JAR_PACKAGES), \
16634c4aa99ced05fcf3d965660160ab8bda9db0405cJeff Brown            -not -path $(PRIVATE_CLASS_INTERMEDIATES_DIR)/$(subst .,/,$(pkg))/\*) -delete ; \
16644c4aa99ced05fcf3d965660160ab8bda9db0405cJeff Brown        find $(PRIVATE_CLASS_INTERMEDIATES_DIR) -empty -delete)
16654c4aa99ced05fcf3d965660160ab8bda9db0405cJeff Brown$(if $(PRIVATE_JAR_EXCLUDE_PACKAGES), $(hide) rm -rf \
16664c4aa99ced05fcf3d965660160ab8bda9db0405cJeff Brown    $(foreach pkg, $(PRIVATE_JAR_EXCLUDE_PACKAGES), \
16674c4aa99ced05fcf3d965660160ab8bda9db0405cJeff Brown        $(PRIVATE_CLASS_INTERMEDIATES_DIR)/$(subst .,/,$(pkg))))
1668a3b759354612424e07e957716de2845396c0d80aYing Wang$(if $(PRIVATE_RMTYPEDEFS), $(hide) $(RMTYPEDEFS) -v $(PRIVATE_CLASS_INTERMEDIATES_DIR))
166965ca9e6f02652cb80f050dd03984ab9631683756Guang Zhu$(if $(PRIVATE_JAR_MANIFEST), \
167065ca9e6f02652cb80f050dd03984ab9631683756Guang Zhu    $(hide) sed -e 's/%BUILD_NUMBER%/$(BUILD_NUMBER)/' \
167165ca9e6f02652cb80f050dd03984ab9631683756Guang Zhu            $(PRIVATE_JAR_MANIFEST) > $(dir $@)/manifest.mf && \
167265ca9e6f02652cb80f050dd03984ab9631683756Guang Zhu        jar -cfm $@ $(dir $@)/manifest.mf \
167365ca9e6f02652cb80f050dd03984ab9631683756Guang Zhu            -C $(PRIVATE_CLASS_INTERMEDIATES_DIR) ., \
167465ca9e6f02652cb80f050dd03984ab9631683756Guang Zhu    $(hide) jar -cf $@ -C $(PRIVATE_CLASS_INTERMEDIATES_DIR) .)
1675015edd2c1b4a4300ccccee4036ec2ca7e9ad798aYing Wang$(hide) mv $(PRIVATE_CLASS_INTERMEDIATES_DIR)/newstamp $(PRIVATE_CLASS_INTERMEDIATES_DIR)/stamp
1676015edd2c1b4a4300ccccee4036ec2ca7e9ad798aYing Wangendef
1677015edd2c1b4a4300ccccee4036ec2ca7e9ad798aYing Wang
1678015edd2c1b4a4300ccccee4036ec2ca7e9ad798aYing Wangdefine transform-java-to-classes.jar
1679015edd2c1b4a4300ccccee4036ec2ca7e9ad798aYing Wang@echo "target Java: $(PRIVATE_MODULE) ($(PRIVATE_CLASS_INTERMEDIATES_DIR))"
1680015edd2c1b4a4300ccccee4036ec2ca7e9ad798aYing Wang$(call compile-java,$(TARGET_JAVAC),$(PRIVATE_BOOTCLASSPATH))
1681015edd2c1b4a4300ccccee4036ec2ca7e9ad798aYing Wangendef
1682015edd2c1b4a4300ccccee4036ec2ca7e9ad798aYing Wangendif # ENABLE_INCREMENTALJAVAC
1683015edd2c1b4a4300ccccee4036ec2ca7e9ad798aYing Wang
168488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine transform-classes.jar-to-emma
168588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project$(hide) java -classpath $(EMMA_JAR) emma instr -outmode fullcopy -outfile \
1686155afe393faa0aae47d517fa687a7e4ab3cae91bGuang Zhu    $(PRIVATE_EMMA_COVERAGE_FILE) -ip $< -d $(PRIVATE_EMMA_INTERMEDIATES_DIR) \
16879cd3d8c6543ffb2eef7935d8f832f99675dc630eGuang Zhu    $(addprefix -ix , $(PRIVATE_EMMA_COVERAGE_FILTER))
168888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
168988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
169088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#TODO: use a smaller -Xmx value for most libraries;
169188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#      only core.jar and framework.jar need a heap this big.
1692f6ff4c5acf428d4b0cba828b836f1e11fa1442b4Raphael# Avoid the memory arguments on Windows, dx fails to load for some reason with them.
169388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine transform-classes.jar-to-dex
169488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project@echo "target Dex: $(PRIVATE_MODULE)"
169588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project@mkdir -p $(dir $@)
1696af9757e84940a3d3f4a4b88d2f1ed259d4f43c02Ying Wang$(hide) rm -f $(dir $@)classes*.dex
1697f6ff4c5acf428d4b0cba828b836f1e11fa1442b4Raphael$(hide) $(DX) \
169829b3afaf79e89e5707c6a28e7ed55d3c04810352Wink Saville    $(if $(findstring windows,$(HOST_OS)),,-JXms16M -JXmx2048M) \
16998ffe9c3e7967ec9c6c6e9a03095454dc1b073c3bYohann Roussel    --dex --output=$(dir $@) \
1700bb7c6d88c6dd5ee48e8b8ec85ee04c0aa7bc5979Brian Carlstrom    $(incremental_dex) \
170188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project    $(if $(NO_OPTIMIZE_DX), \
170288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project        --no-optimize) \
170388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project    $(if $(GENERATE_DEX_DEBUG), \
170488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project	    --debug --verbose \
170588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project	    --dump-to=$(@:.dex=.lst) \
170688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project	    --dump-width=1000) \
170788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project    $(PRIVATE_DX_FLAGS) \
170888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project    $<
170988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
171088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
171188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# Create a mostly-empty .jar file that we'll add to later.
171288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# The MacOS jar tool doesn't like creating empty jar files,
171388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# so we need to give it something.
171488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine create-empty-package
171588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project@mkdir -p $(dir $@)
171636142f64aef3da56a6e70589dad634b5babc0c31Ying Wang$(hide) touch $(dir $@)dummy
171788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project$(hide) (cd $(dir $@) && jar cf $(notdir $@) dummy)
171888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project$(hide) zip -qd $@ dummy
171936142f64aef3da56a6e70589dad634b5babc0c31Ying Wang$(hide) rm $(dir $@)dummy
172088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
172188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
172288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#TODO: we kinda want to build different asset packages for
172388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#      different configurations, then combine them later (or something).
172488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#      Per-locale, etc.
172588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#      A list of dynamic and static parameters;  build layers for
172688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#      dynamic params that lay over the static ones.
172788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#TODO: update the manifest to point to the package file
17289bd5404a9d30b82ba3d2750c0cb8cae88b33f82dDianne Hackborn#Note that the version numbers are given to aapt as simple default
17299bd5404a9d30b82ba3d2750c0cb8cae88b33f82dDianne Hackborn#values; applications can override these by explicitly stating
17309bd5404a9d30b82ba3d2750c0cb8cae88b33f82dDianne Hackborn#them in their manifest.
173188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine add-assets-to-package
1732c61d5932d3b1014352dd5cbcb2684a95b3e172a3Ying Wang$(hide) $(AAPT) package -u $(PRIVATE_AAPT_FLAGS) \
17334f1ab92aac00a73276793ed25af669d112618a32Ying Wang    $(addprefix -c , $(PRIVATE_PRODUCT_AAPT_CONFIG)) \
17342d1718aaeac27a6ff4ef5bd992a68574fc55d0c1Adam Lesinski    $(addprefix --preferred-density , $(PRIVATE_PRODUCT_AAPT_PREF_CONFIG)) \
173588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project    $(addprefix -M , $(PRIVATE_ANDROID_MANIFEST)) \
173688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project    $(addprefix -S , $(PRIVATE_RESOURCE_DIR)) \
173788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project    $(addprefix -A , $(PRIVATE_ASSET_DIR)) \
173888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project    $(addprefix -I , $(PRIVATE_AAPT_INCLUDES)) \
1739bb9c230b68e9b57fe60f050e231f8437324f107aYing Wang    $(addprefix --min-sdk-version , $(PRIVATE_DEFAULT_APP_TARGET_SDK)) \
1740bb9c230b68e9b57fe60f050e231f8437324f107aYing Wang    $(addprefix --target-sdk-version , $(PRIVATE_DEFAULT_APP_TARGET_SDK)) \
1741f39752e99b4e5083f1e91c46722f87def8143b49Ying Wang    $(if $(filter --product,$(PRIVATE_AAPT_FLAGS)),,$(addprefix --product , $(TARGET_AAPT_CHARACTERISTICS))) \
17421ae607add31de4708e732c7139e68d425b920595Ying Wang    $(if $(filter --version-code,$(PRIVATE_AAPT_FLAGS)),,$(addprefix --version-code , $(PLATFORM_SDK_VERSION))) \
17438f5069b1be9af316c948e9cd7bae2abdc33da5bcYing Wang    $(if $(filter --version-name,$(PRIVATE_AAPT_FLAGS)),,$(addprefix --version-name , $(PLATFORM_VERSION)-$(BUILD_NUMBER))) \
1744bb67d21337f8d87628fbc09585be6cfe6ab0336cJeff Hamilton    $(addprefix --rename-manifest-package , $(PRIVATE_MANIFEST_PACKAGE_NAME)) \
17453dae0ee46cf5fcde6eb424f9ab0c69f2d901a671Ying Wang    $(addprefix --rename-instrumentation-target-package , $(PRIVATE_MANIFEST_INSTRUMENTATION_FOR)) \
174688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project    -F $@
174788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
174888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
17498e20ef6205b3c96135b1c1e4484d523dbecb1b98Ying Wang# We need the extra blank line, so that the command will be on a separate line.
17508e20ef6205b3c96135b1c1e4484d523dbecb1b98Ying Wang# $(1): the ABI name
17518e20ef6205b3c96135b1c1e4484d523dbecb1b98Ying Wang# $(2): the list of shared libraies
17528e20ef6205b3c96135b1c1e4484d523dbecb1b98Ying Wangdefine _add-jni-shared-libs-to-package-per-abi
17538e20ef6205b3c96135b1c1e4484d523dbecb1b98Ying Wang$(hide) cp $(2) $(dir $@)lib/$(1)
17548e20ef6205b3c96135b1c1e4484d523dbecb1b98Ying Wang
17558e20ef6205b3c96135b1c1e4484d523dbecb1b98Ying Wangendef
17568e20ef6205b3c96135b1c1e4484d523dbecb1b98Ying Wang
175788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine add-jni-shared-libs-to-package
175888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project$(hide) rm -rf $(dir $@)lib
17598e20ef6205b3c96135b1c1e4484d523dbecb1b98Ying Wang$(hide) mkdir -p $(addprefix $(dir $@)lib/,$(PRIVATE_JNI_SHARED_LIBRARIES_ABI))
17608e20ef6205b3c96135b1c1e4484d523dbecb1b98Ying Wang$(foreach abi,$(PRIVATE_JNI_SHARED_LIBRARIES_ABI),\
17618e20ef6205b3c96135b1c1e4484d523dbecb1b98Ying Wang  $(call _add-jni-shared-libs-to-package-per-abi,$(abi),\
17628e20ef6205b3c96135b1c1e4484d523dbecb1b98Ying Wang    $(patsubst $(abi):%,%,$(filter $(abi):%,$(PRIVATE_JNI_SHARED_LIBRARIES)))))
176388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project$(hide) (cd $(dir $@) && zip -r $(notdir $@) lib)
176488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project$(hide) rm -rf $(dir $@)lib
176588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
176688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
176788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#TODO: update the manifest to point to the dex file
176888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine add-dex-to-package
1769af9757e84940a3d3f4a4b88d2f1ed259d4f43c02Ying Wang$(hide) zip -qj $@ $(dir $(PRIVATE_DEX_FILE))classes*.dex
177088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
177188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
177285480629220c9afb0d138ff1ce5ea1ccbe66c7f7Ying Wang# Add java resources added by the current module.
177385480629220c9afb0d138ff1ce5ea1ccbe66c7f7Ying Wang#
177488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine add-java-resources-to-package
1775194a8ec8aee8511d90354c4b97fecfd0df52c837Ying Wang$(call dump-words-to-file, $(PRIVATE_EXTRA_JAR_ARGS), $(dir $@)jar-arg-list)
1776194a8ec8aee8511d90354c4b97fecfd0df52c837Ying Wang$(hide) jar uf $@ @$(dir $@)jar-arg-list
1777194a8ec8aee8511d90354c4b97fecfd0df52c837Ying Wang@rm -f $(dir $@)jar-arg-list
177888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
177988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
178085480629220c9afb0d138ff1ce5ea1ccbe66c7f7Ying Wang# Add java resources carried by static Java libraries.
178185480629220c9afb0d138ff1ce5ea1ccbe66c7f7Ying Wang#
178285480629220c9afb0d138ff1ce5ea1ccbe66c7f7Ying Wangdefine add-carried-java-resources
178385480629220c9afb0d138ff1ce5ea1ccbe66c7f7Ying Wang$(hide) if [ -d $(PRIVATE_CLASS_INTERMEDIATES_DIR) ] ; then \
178485480629220c9afb0d138ff1ce5ea1ccbe66c7f7Ying Wang    java_res_jar_flags=$$(find $(PRIVATE_CLASS_INTERMEDIATES_DIR) -type f -a -not -name "*.class" \
178585480629220c9afb0d138ff1ce5ea1ccbe66c7f7Ying Wang        | sed -e "s?^$(PRIVATE_CLASS_INTERMEDIATES_DIR)/? -C $(PRIVATE_CLASS_INTERMEDIATES_DIR) ?"); \
178685480629220c9afb0d138ff1ce5ea1ccbe66c7f7Ying Wang    if [ -n "$$java_res_jar_flags" ] ; then \
178785480629220c9afb0d138ff1ce5ea1ccbe66c7f7Ying Wang        echo $$java_res_jar_flags >$(dir $@)java_res_jar_flags; \
178885480629220c9afb0d138ff1ce5ea1ccbe66c7f7Ying Wang        jar uf $@ $$java_res_jar_flags; \
178985480629220c9afb0d138ff1ce5ea1ccbe66c7f7Ying Wang    fi; \
179085480629220c9afb0d138ff1ce5ea1ccbe66c7f7Ying Wangfi
179185480629220c9afb0d138ff1ce5ea1ccbe66c7f7Ying Wangendef
179285480629220c9afb0d138ff1ce5ea1ccbe66c7f7Ying Wang
179388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# Sign a package using the specified key/cert.
179488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#
179588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine sign-package
179688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project$(hide) mv $@ $@.unsigned
179788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project$(hide) java -jar $(SIGNAPK_JAR) \
179831df068b38729c5bc04a859b9216f539bc22c29eYing Wang    $(PRIVATE_CERTIFICATE) $(PRIVATE_PRIVATE_KEY) \
179931df068b38729c5bc04a859b9216f539bc22c29eYing Wang    $(PRIVATE_ADDITIONAL_CERTIFICATES) $@.unsigned $@.signed
180088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project$(hide) mv $@.signed $@
180188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
180288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
180388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# Align STORED entries of a package on 4-byte boundaries
180488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# to make them easier to mmap.
180588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#
180688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine align-package
180788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project$(hide) mv $@ $@.unaligned
180888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project$(hide) $(ZIPALIGN) -f 4 $@.unaligned $@.aligned
180988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project$(hide) mv $@.aligned $@
181088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
181188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
181288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine install-dex-debug
181388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project$(hide) if [ -f "$(PRIVATE_INTERMEDIATES_DIR)/classes.dex" ]; then \
181488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project	    mkdir -p $(TOP)/dalvik/DEBUG-FILES; \
181588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project	    $(ACP) $(PRIVATE_INTERMEDIATES_DIR)/classes.dex \
181688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project		$(TOP)/dalvik/DEBUG-FILES/$(PRIVATE_MODULE).dex; \
181788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project	fi
181888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project$(hide) if [ -f "$(PRIVATE_INTERMEDIATES_DIR)/classes.lst" ]; then \
181988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project	    mkdir -p $(TOP)/dalvik/DEBUG-FILES; \
182088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project	    $(ACP) $(PRIVATE_INTERMEDIATES_DIR)/classes.lst \
182188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project		$(TOP)/dalvik/DEBUG-FILES/$(PRIVATE_MODULE).lst; \
182288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project	fi
182388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
182488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
182588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# TODO(joeo): If we can ever upgrade to post 3.81 make and get the
182688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# new prebuilt rules to work, we should change this to copy the
182788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# resources to the out directory and then copy the resources.
182888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
1829782695112d42ea3b9992e7c5f10a76f1854343d4Brian Carlstrom# Note: we intentionally don't clean PRIVATE_CLASS_INTERMEDIATES_DIR
1830782695112d42ea3b9992e7c5f10a76f1854343d4Brian Carlstrom# in transform-java-to-classes for the sake of vm-tests.
183188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine transform-host-java-to-package
183288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project@echo "host Java: $(PRIVATE_MODULE) ($(PRIVATE_CLASS_INTERMEDIATES_DIR))"
1833015edd2c1b4a4300ccccee4036ec2ca7e9ad798aYing Wang$(call compile-java,$(HOST_JAVAC),$(PRIVATE_BOOTCLASSPATH))
1834194a8ec8aee8511d90354c4b97fecfd0df52c837Ying Wang$(if $(PRIVATE_EXTRA_JAR_ARGS), $(call add-java-resources-to-package))
183588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
183688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
183788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
183888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## Commands for copying files
183988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
184088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
184188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# Define a rule to copy a header.  Used via $(eval) by copy_headers.make.
184288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# $(1): source header
184388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# $(2): destination header
184488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine copy-one-header
184588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project$(2): $(1)
184688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project	@echo "Header: $$@"
184788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project	$$(copy-file-to-new-target-with-cp)
184888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
184988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
185088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# Define a rule to copy a file.  For use via $(eval).
185188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# $(1): source file
185288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# $(2): destination file
185388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine copy-one-file
185488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project$(2): $(1) | $(ACP)
185588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project	@echo "Copy: $$@"
185688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project	$$(copy-file-to-target)
185788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
185888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
1859e44705a86f80fe356ba83b3030864f5fcff3d394Joe Onorato# Copies many files.
1860e44705a86f80fe356ba83b3030864f5fcff3d394Joe Onorato# $(1): The files to copy.  Each entry is a ':' separated src:dst pair
1861e44705a86f80fe356ba83b3030864f5fcff3d394Joe Onorato# Evaluates to the list of the dst files (ie suitable for a dependency list)
1862e44705a86f80fe356ba83b3030864f5fcff3d394Joe Onoratodefine copy-many-files
1863e44705a86f80fe356ba83b3030864f5fcff3d394Joe Onorato$(foreach f, $(1), $(strip \
1864e44705a86f80fe356ba83b3030864f5fcff3d394Joe Onorato    $(eval _cmf_tuple := $(subst :, ,$(f))) \
1865e44705a86f80fe356ba83b3030864f5fcff3d394Joe Onorato    $(eval _cmf_src := $(word 1,$(_cmf_tuple))) \
1866e44705a86f80fe356ba83b3030864f5fcff3d394Joe Onorato    $(eval _cmf_dest := $(word 2,$(_cmf_tuple))) \
1867e44705a86f80fe356ba83b3030864f5fcff3d394Joe Onorato    $(eval $(call copy-one-file,$(_cmf_src),$(_cmf_dest))) \
1868e44705a86f80fe356ba83b3030864f5fcff3d394Joe Onorato    $(_cmf_dest)))
1869e44705a86f80fe356ba83b3030864f5fcff3d394Joe Onoratoendef
1870e44705a86f80fe356ba83b3030864f5fcff3d394Joe Onorato
18713ceecfa3daeb187c0631a84e6ee6b4dd89f111f8Ying Wang# Copy the file only if it's a well-formed xml file. For use via $(eval).
18723ceecfa3daeb187c0631a84e6ee6b4dd89f111f8Ying Wang# $(1): source file
18733ceecfa3daeb187c0631a84e6ee6b4dd89f111f8Ying Wang# $(2): destination file, must end with .xml.
18743ceecfa3daeb187c0631a84e6ee6b4dd89f111f8Ying Wangdefine copy-xml-file-checked
18753ceecfa3daeb187c0631a84e6ee6b4dd89f111f8Ying Wang$(2): $(1) | $(ACP)
18763ceecfa3daeb187c0631a84e6ee6b4dd89f111f8Ying Wang	@echo "Copy xml: $$@"
18773ceecfa3daeb187c0631a84e6ee6b4dd89f111f8Ying Wang	$(hide) xmllint $$< >/dev/null  # Don't print the xml file to stdout.
18783ceecfa3daeb187c0631a84e6ee6b4dd89f111f8Ying Wang	$$(copy-file-to-target)
18793ceecfa3daeb187c0631a84e6ee6b4dd89f111f8Ying Wangendef
18803ceecfa3daeb187c0631a84e6ee6b4dd89f111f8Ying Wang
188188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# The -t option to acp and the -p option to cp is
188288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# required for OSX.  OSX has a ridiculous restriction
188388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# where it's an error for a .a file's modification time
188488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# to disagree with an internal timestamp, and this
188588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# macro is used to install .a files (among other things).
188688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
188788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# Copy a single file from one place to another,
188888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# preserving permissions and overwriting any existing
188988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# file.
189076a6dc3a191e8800211eb49398d37deae731094eIan Rogers# We disable the "-t" option for acp cannot handle
189184ed6fa27b883de8ba7b41ddecaa2179e7f4b321Ying Wang# high resolution timestamp correctly on file systems like ext4.
189284ed6fa27b883de8ba7b41ddecaa2179e7f4b321Ying Wang# Therefore copy-file-to-target is the same as copy-file-to-new-target.
189388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine copy-file-to-target
189488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project@mkdir -p $(dir $@)
189584ed6fa27b883de8ba7b41ddecaa2179e7f4b321Ying Wang$(hide) $(ACP) -fp $< $@
189688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
189788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
189888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# The same as copy-file-to-target, but use the local
189988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# cp command instead of acp.
190088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine copy-file-to-target-with-cp
190188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project@mkdir -p $(dir $@)
190288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project$(hide) cp -fp $< $@
190388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
190488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
19059c0c4b7a588b3afe80dc16c133921fee991f53d3Dianne Hackborn# The same as copy-file-to-target, but use the zipalign tool to do so.
19069c0c4b7a588b3afe80dc16c133921fee991f53d3Dianne Hackborndefine copy-file-to-target-with-zipalign
19079c0c4b7a588b3afe80dc16c133921fee991f53d3Dianne Hackborn@mkdir -p $(dir $@)
19089c0c4b7a588b3afe80dc16c133921fee991f53d3Dianne Hackborn$(hide) $(ZIPALIGN) -f 4 $< $@
19099c0c4b7a588b3afe80dc16c133921fee991f53d3Dianne Hackbornendef
19109c0c4b7a588b3afe80dc16c133921fee991f53d3Dianne Hackborn
19111046d20624318563aba92cfdd7eb7d39ecc44703Doug Zongker# The same as copy-file-to-target, but strip out "# comment"-style
19121046d20624318563aba92cfdd7eb7d39ecc44703Doug Zongker# comments (for config files and such).
19131046d20624318563aba92cfdd7eb7d39ecc44703Doug Zongkerdefine copy-file-to-target-strip-comments
19141046d20624318563aba92cfdd7eb7d39ecc44703Doug Zongker@mkdir -p $(dir $@)
19151046d20624318563aba92cfdd7eb7d39ecc44703Doug Zongker$(hide) sed -e 's/#.*$$//' -e 's/[ \t]*$$//' -e '/^$$/d' < $< > $@
19161046d20624318563aba92cfdd7eb7d39ecc44703Doug Zongkerendef
19171046d20624318563aba92cfdd7eb7d39ecc44703Doug Zongker
191888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# The same as copy-file-to-target, but don't preserve
191988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# the old modification time.
192088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine copy-file-to-new-target
192188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project@mkdir -p $(dir $@)
192288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project$(hide) $(ACP) -fp $< $@
192388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
192488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
192588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# The same as copy-file-to-new-target, but use the local
192688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# cp command instead of acp.
192788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine copy-file-to-new-target-with-cp
192888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project@mkdir -p $(dir $@)
192988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project$(hide) cp -f $< $@
193088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
193188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
193288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# Copy a prebuilt file to a target location.
193388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine transform-prebuilt-to-target
193488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project@echo "$(if $(PRIVATE_IS_HOST_MODULE),host,target) Prebuilt: $(PRIVATE_MODULE) ($@)"
193588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project$(copy-file-to-target)
193688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
193788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
19389c0c4b7a588b3afe80dc16c133921fee991f53d3Dianne Hackborn# Copy a prebuilt file to a target location, using zipalign on it.
19399c0c4b7a588b3afe80dc16c133921fee991f53d3Dianne Hackborndefine transform-prebuilt-to-target-with-zipalign
19409c0c4b7a588b3afe80dc16c133921fee991f53d3Dianne Hackborn@echo "$(if $(PRIVATE_IS_HOST_MODULE),host,target) Prebuilt APK: $(PRIVATE_MODULE) ($@)"
19419c0c4b7a588b3afe80dc16c133921fee991f53d3Dianne Hackborn$(copy-file-to-target-with-zipalign)
19429c0c4b7a588b3afe80dc16c133921fee991f53d3Dianne Hackbornendef
19439c0c4b7a588b3afe80dc16c133921fee991f53d3Dianne Hackborn
19441046d20624318563aba92cfdd7eb7d39ecc44703Doug Zongker# Copy a prebuilt file to a target location, stripping "# comment" comments.
19451046d20624318563aba92cfdd7eb7d39ecc44703Doug Zongkerdefine transform-prebuilt-to-target-strip-comments
19461046d20624318563aba92cfdd7eb7d39ecc44703Doug Zongker@echo "$(if $(PRIVATE_IS_HOST_MODULE),host,target) Prebuilt: $(PRIVATE_MODULE) ($@)"
19471046d20624318563aba92cfdd7eb7d39ecc44703Doug Zongker$(copy-file-to-target-strip-comments)
19481046d20624318563aba92cfdd7eb7d39ecc44703Doug Zongkerendef
19491046d20624318563aba92cfdd7eb7d39ecc44703Doug Zongker
195088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
195188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## On some platforms (MacOS), after copying a static
195288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## library, ranlib must be run to update an internal
195388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## timestamp!?!?!
195488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
195588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
195688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectifeq ($(HOST_RUN_RANLIB_AFTER_COPYING),true)
195788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine transform-host-ranlib-copy-hack
195888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project    $(hide) ranlib $@ || true
195988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
196088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectelse
196188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine transform-host-ranlib-copy-hack
19620e27dff167faede2d13dae5d488866bce85c28bcPatrick Scott@true
196388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
196488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendif
196588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
196688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectifeq ($(TARGET_RUN_RANLIB_AFTER_COPYING),true)
196788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine transform-ranlib-copy-hack
196888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project    $(hide) ranlib $@
196988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
197088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectelse
197188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine transform-ranlib-copy-hack
19720e27dff167faede2d13dae5d488866bce85c28bcPatrick Scott@true
197388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
197488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendif
197588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
197688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
197788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
19783b2bdf10338fb048fc749ce9f65a77f917f7d304Ying Wang## Commands to call Proguard
19793b2bdf10338fb048fc749ce9f65a77f917f7d304Ying Wang###########################################################
19803b2bdf10338fb048fc749ce9f65a77f917f7d304Ying Wangdefine transform-jar-to-proguard
19817311a344bed507062e781ba70331d85652c217d8Ying Wang@echo Proguard: $@
19824df82b3e30794a3652a5dda773a74f486fec3325Mihail Dumitrescu$(hide) $(PROGUARD) -injars $< -outjars $@ $(PRIVATE_PROGUARD_FLAGS) \
19834df82b3e30794a3652a5dda773a74f486fec3325Mihail Dumitrescu    $(addprefix -injars , $(PRIVATE_EXTRA_INPUT_JAR))
19843b2bdf10338fb048fc749ce9f65a77f917f7d304Ying Wangendef
19853b2bdf10338fb048fc749ce9f65a77f917f7d304Ying Wang
19863b2bdf10338fb048fc749ce9f65a77f917f7d304Ying Wang###########################################################
198788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## Stuff source generated from one-off tools
198888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
198988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
199088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine transform-generated-source
199188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project@echo "target Generated: $(PRIVATE_MODULE) <= $<"
199288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project@mkdir -p $(dir $@)
199388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project$(hide) $(PRIVATE_CUSTOM_TOOL)
199488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
199588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
199688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
199788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
199888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## Assertions about attributes of the target
199988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
200088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
200188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# $(1): The file to check
200288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectifndef get-file-size
200388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project$(error HOST_OS must define get-file-size)
200488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendif
200588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
20064647f12a4ff9dc54247184f17ff3de1cc423f213Doug Zongker# Convert a partition data size (eg, as reported in /proc/mtd) to the
20074647f12a4ff9dc54247184f17ff3de1cc423f213Doug Zongker# size of the image used to flash that partition (which includes a
20089cb8c2835232c8dc99cecca85a7e99bdee7109a9Lars Svensson# spare area for each page).
20094647f12a4ff9dc54247184f17ff3de1cc423f213Doug Zongker# $(1): the partition data size
20104647f12a4ff9dc54247184f17ff3de1cc423f213Doug Zongkerdefine image-size-from-data-size
20114a2ecaf5dc7434dd06a1fbcf14c56e6a7c7b383bYing Wang$(strip $(eval _isfds_value := $$(shell echo $$$$(($(1) / $(BOARD_NAND_PAGE_SIZE) * \
20124a2ecaf5dc7434dd06a1fbcf14c56e6a7c7b383bYing Wang  ($(BOARD_NAND_PAGE_SIZE)+$(BOARD_NAND_SPARE_SIZE))))))\
20134a2ecaf5dc7434dd06a1fbcf14c56e6a7c7b383bYing Wang$(if $(filter 0, $(_isfds_value)),$(shell echo $$(($(BOARD_NAND_PAGE_SIZE)+$(BOARD_NAND_SPARE_SIZE)))),$(_isfds_value))\
20144a2ecaf5dc7434dd06a1fbcf14c56e6a7c7b383bYing Wang$(eval _isfds_value :=))
20154647f12a4ff9dc54247184f17ff3de1cc423f213Doug Zongkerendef
20164647f12a4ff9dc54247184f17ff3de1cc423f213Doug Zongker
20174647f12a4ff9dc54247184f17ff3de1cc423f213Doug Zongker# $(1): The file(s) to check (often $@)
20180ed7cec97a894ae8daf9586f2bac6e09826a6c2aJP Abgrall# $(2): The maximum total image size, in decimal bytes.
20190ed7cec97a894ae8daf9586f2bac6e09826a6c2aJP Abgrall#    Make sure to take into account any reserved space needed for the FS.
202088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#
202188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# If $(2) is empty, evaluates to "true"
202288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#
202388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# Reserve bad blocks.  Make sure that MAX(1% of partition size, 2 blocks)
202488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# is left over after the image has been flashed.  Round the 1% up to the
202588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# next whole flash block size.
202688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine assert-max-file-size
202788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project$(if $(2), \
2028742fa575d09272f1e06616fc208a1e08830c8f82Doug Zongker  size=$$(for i in $(1); do $(call get-file-size,$$i); echo +; done; echo 0); \
2029742fa575d09272f1e06616fc208a1e08830c8f82Doug Zongker  total=$$(( $$( echo "$$size" ) )); \
20304647f12a4ff9dc54247184f17ff3de1cc423f213Doug Zongker  printname=$$(echo -n "$(1)" | tr " " +); \
20314647f12a4ff9dc54247184f17ff3de1cc423f213Doug Zongker  img_blocksize=$(call image-size-from-data-size,$(BOARD_FLASH_BLOCK_SIZE)); \
20324647f12a4ff9dc54247184f17ff3de1cc423f213Doug Zongker  twoblocks=$$((img_blocksize * 2)); \
20334647f12a4ff9dc54247184f17ff3de1cc423f213Doug Zongker  onepct=$$((((($(2) / 100) - 1) / img_blocksize + 1) * img_blocksize)); \
20340ed7cec97a894ae8daf9586f2bac6e09826a6c2aJP Abgrall  reserve=$$((twoblocks > onepct ? twoblocks : onepct)); \
20354647f12a4ff9dc54247184f17ff3de1cc423f213Doug Zongker  maxsize=$$(($(2) - reserve)); \
203699bcbeb355959d073e24dc5da9f858ee24cf7baaYing Wang  echo "$$printname maxsize=$$maxsize blocksize=$$img_blocksize total=$$total reserve=$$reserve"; \
20374647f12a4ff9dc54247184f17ff3de1cc423f213Doug Zongker  if [ "$$total" -gt "$$maxsize" ]; then \
20384647f12a4ff9dc54247184f17ff3de1cc423f213Doug Zongker    echo "error: $$printname too large ($$total > [$(2) - $$reserve])"; \
20394647f12a4ff9dc54247184f17ff3de1cc423f213Doug Zongker    false; \
2040742fa575d09272f1e06616fc208a1e08830c8f82Doug Zongker  elif [ "$$total" -gt $$((maxsize - 32768)) ]; then \
20414647f12a4ff9dc54247184f17ff3de1cc423f213Doug Zongker    echo "WARNING: $$printname approaching size limit ($$total now; limit $$maxsize)"; \
204288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project  fi \
204388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project , \
204488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project  true \
204588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project )
204688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef
204788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
20488510a1e0d7d45179e5fa19bebf26d022ec4c4e91Doug Zongker# Like assert-max-file-size, but the second argument is a partition
20498510a1e0d7d45179e5fa19bebf26d022ec4c4e91Doug Zongker# size, which we'll convert to a max image size before checking it
20508510a1e0d7d45179e5fa19bebf26d022ec4c4e91Doug Zongker# against the files.
20518510a1e0d7d45179e5fa19bebf26d022ec4c4e91Doug Zongker#
20528510a1e0d7d45179e5fa19bebf26d022ec4c4e91Doug Zongker# $(1): The file(s) to check (often $@)
20538510a1e0d7d45179e5fa19bebf26d022ec4c4e91Doug Zongker# $(2): The partition size.
20548510a1e0d7d45179e5fa19bebf26d022ec4c4e91Doug Zongkerdefine assert-max-image-size
20558510a1e0d7d45179e5fa19bebf26d022ec4c4e91Doug Zongker$(if $(2), \
20560ed7cec97a894ae8daf9586f2bac6e09826a6c2aJP Abgrall  $(call assert-max-file-size,$(1),$(call image-size-from-data-size,$(2))))
20578510a1e0d7d45179e5fa19bebf26d022ec4c4e91Doug Zongkerendef
20588510a1e0d7d45179e5fa19bebf26d022ec4c4e91Doug Zongker
2059e01100c7ac15bd884ca02c64f42b908b93e37c26Doug Zongker
2060e01100c7ac15bd884ca02c64f42b908b93e37c26Doug Zongker###########################################################
2061e01100c7ac15bd884ca02c64f42b908b93e37c26Doug Zongker## Define device-specific radio files
2062e01100c7ac15bd884ca02c64f42b908b93e37c26Doug Zongker###########################################################
206394de1eba0e87297421789b339c5f26bf3e48eeb1Ying WangINSTALLED_RADIOIMAGE_TARGET :=
2064e01100c7ac15bd884ca02c64f42b908b93e37c26Doug Zongker
2065e01100c7ac15bd884ca02c64f42b908b93e37c26Doug Zongker# Copy a radio image file to the output location, and add it to
2066e01100c7ac15bd884ca02c64f42b908b93e37c26Doug Zongker# INSTALLED_RADIOIMAGE_TARGET.
2067e01100c7ac15bd884ca02c64f42b908b93e37c26Doug Zongker# $(1): filename
2068e01100c7ac15bd884ca02c64f42b908b93e37c26Doug Zongkerdefine add-radio-file
206914833605d26bf970cd5335c02af4354b68d93348Doug Zongker  $(eval $(call add-radio-file-internal,$(1),$(notdir $(1))))
2070e01100c7ac15bd884ca02c64f42b908b93e37c26Doug Zongkerendef
2071e01100c7ac15bd884ca02c64f42b908b93e37c26Doug Zongkerdefine add-radio-file-internal
207214833605d26bf970cd5335c02af4354b68d93348Doug ZongkerINSTALLED_RADIOIMAGE_TARGET += $$(PRODUCT_OUT)/$(2)
207314833605d26bf970cd5335c02af4354b68d93348Doug Zongker$$(PRODUCT_OUT)/$(2) : $$(LOCAL_PATH)/$(1) | $$(ACP)
2074e01100c7ac15bd884ca02c64f42b908b93e37c26Doug Zongker	$$(transform-prebuilt-to-target)
2075e01100c7ac15bd884ca02c64f42b908b93e37c26Doug Zongkerendef
2076e01100c7ac15bd884ca02c64f42b908b93e37c26Doug Zongker
20779296f092771a0261404f51bcbc1b62ba20654947Doug Zongker# Version of add-radio-file that also arranges for the version of the
20789296f092771a0261404f51bcbc1b62ba20654947Doug Zongker# file to be checked against the contents of
20799296f092771a0261404f51bcbc1b62ba20654947Doug Zongker# $(TARGET_BOARD_INFO_FILE).
20809296f092771a0261404f51bcbc1b62ba20654947Doug Zongker# $(1): filename
20819296f092771a0261404f51bcbc1b62ba20654947Doug Zongker# $(2): name of version variable in board-info (eg, "version-baseband")
20829296f092771a0261404f51bcbc1b62ba20654947Doug Zongkerdefine add-radio-file-checked
20839296f092771a0261404f51bcbc1b62ba20654947Doug Zongker  $(eval $(call add-radio-file-checked-internal,$(1),$(notdir $(1)),$(2)))
20849296f092771a0261404f51bcbc1b62ba20654947Doug Zongkerendef
20859296f092771a0261404f51bcbc1b62ba20654947Doug Zongkerdefine add-radio-file-checked-internal
20869296f092771a0261404f51bcbc1b62ba20654947Doug ZongkerINSTALLED_RADIOIMAGE_TARGET += $$(PRODUCT_OUT)/$(2)
20879296f092771a0261404f51bcbc1b62ba20654947Doug ZongkerBOARD_INFO_CHECK += $(3):$(LOCAL_PATH)/$(1)
20889296f092771a0261404f51bcbc1b62ba20654947Doug Zongker$$(PRODUCT_OUT)/$(2) : $$(LOCAL_PATH)/$(1) | $$(ACP)
20899296f092771a0261404f51bcbc1b62ba20654947Doug Zongker	$$(transform-prebuilt-to-target)
20909296f092771a0261404f51bcbc1b62ba20654947Doug Zongkerendef
20919296f092771a0261404f51bcbc1b62ba20654947Doug Zongker
2092e01100c7ac15bd884ca02c64f42b908b93e37c26Doug Zongker
209388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
2094899e62a841bebefe6d9ab37ddc682e72fcb0f92bJoe Onorato# Override the package defined in $(1), setting the
2095899e62a841bebefe6d9ab37ddc682e72fcb0f92bJoe Onorato# variables listed below differently.
2096899e62a841bebefe6d9ab37ddc682e72fcb0f92bJoe Onorato#
2097899e62a841bebefe6d9ab37ddc682e72fcb0f92bJoe Onorato#  $(1): The makefile to override (relative to the source
2098899e62a841bebefe6d9ab37ddc682e72fcb0f92bJoe Onorato#        tree root)
2099899e62a841bebefe6d9ab37ddc682e72fcb0f92bJoe Onorato#  $(2): Old LOCAL_PACKAGE_NAME value.
2100899e62a841bebefe6d9ab37ddc682e72fcb0f92bJoe Onorato#  $(3): New LOCAL_PACKAGE_NAME value.
21013dae0ee46cf5fcde6eb424f9ab0c69f2d901a671Ying Wang#  $(4): New LOCAL_MANIFEST_PACKAGE_NAME value.
21023dae0ee46cf5fcde6eb424f9ab0c69f2d901a671Ying Wang#  $(5): New LOCAL_CERTIFICATE value.
21033dae0ee46cf5fcde6eb424f9ab0c69f2d901a671Ying Wang#  $(6): New LOCAL_INSTRUMENTATION_FOR value.
21043dae0ee46cf5fcde6eb424f9ab0c69f2d901a671Ying Wang#  $(7): New LOCAL_MANIFEST_INSTRUMENTATION_FOR value.
2105899e62a841bebefe6d9ab37ddc682e72fcb0f92bJoe Onorato#
2106899e62a841bebefe6d9ab37ddc682e72fcb0f92bJoe Onorato# Note that LOCAL_PACKAGE_OVERRIDES is NOT cleared in
2107899e62a841bebefe6d9ab37ddc682e72fcb0f92bJoe Onorato# clear_vars.mk.
2108899e62a841bebefe6d9ab37ddc682e72fcb0f92bJoe Onorato###########################################################
2109899e62a841bebefe6d9ab37ddc682e72fcb0f92bJoe Onoratodefine inherit-package
21103dae0ee46cf5fcde6eb424f9ab0c69f2d901a671Ying Wang  $(eval $(call inherit-package-internal,$(1),$(2),$(3),$(4),$(5),$(6),$(7)))
2111899e62a841bebefe6d9ab37ddc682e72fcb0f92bJoe Onoratoendef
2112899e62a841bebefe6d9ab37ddc682e72fcb0f92bJoe Onorato
2113899e62a841bebefe6d9ab37ddc682e72fcb0f92bJoe Onoratodefine inherit-package-internal
2114899e62a841bebefe6d9ab37ddc682e72fcb0f92bJoe Onorato  LOCAL_PACKAGE_OVERRIDES \
21153dae0ee46cf5fcde6eb424f9ab0c69f2d901a671Ying Wang      := $(strip $(1))||$(strip $(2))||$(strip $(3))||$(strip $(4))||&&$(strip $(5))||&&$(strip $(6))||&&$(strip $(7)) $(LOCAL_PACKAGE_OVERRIDES)
2116899e62a841bebefe6d9ab37ddc682e72fcb0f92bJoe Onorato  include $(1)
2117899e62a841bebefe6d9ab37ddc682e72fcb0f92bJoe Onorato  LOCAL_PACKAGE_OVERRIDES \
2118899e62a841bebefe6d9ab37ddc682e72fcb0f92bJoe Onorato      := $(wordlist 1,$(words $(LOCAL_PACKAGE_OVERRIDES)), $(LOCAL_PACKAGE_OVERRIDES))
2119899e62a841bebefe6d9ab37ddc682e72fcb0f92bJoe Onoratoendef
2120899e62a841bebefe6d9ab37ddc682e72fcb0f92bJoe Onorato
2121899e62a841bebefe6d9ab37ddc682e72fcb0f92bJoe Onorato# To be used with inherit-package above
2122899e62a841bebefe6d9ab37ddc682e72fcb0f92bJoe Onorato# Evalutes to true if the package was overridden
2123899e62a841bebefe6d9ab37ddc682e72fcb0f92bJoe Onoratodefine set-inherited-package-variables
2124899e62a841bebefe6d9ab37ddc682e72fcb0f92bJoe Onorato$(strip $(call set-inherited-package-variables-internal))
2125899e62a841bebefe6d9ab37ddc682e72fcb0f92bJoe Onoratoendef
2126899e62a841bebefe6d9ab37ddc682e72fcb0f92bJoe Onorato
2127899e62a841bebefe6d9ab37ddc682e72fcb0f92bJoe Onoratodefine keep-or-override
2128899e62a841bebefe6d9ab37ddc682e72fcb0f92bJoe Onorato$(eval $(1) := $(if $(2),$(2),$($(1))))
2129899e62a841bebefe6d9ab37ddc682e72fcb0f92bJoe Onoratoendef
2130899e62a841bebefe6d9ab37ddc682e72fcb0f92bJoe Onorato
2131899e62a841bebefe6d9ab37ddc682e72fcb0f92bJoe Onoratodefine set-inherited-package-variables-internal
2132899e62a841bebefe6d9ab37ddc682e72fcb0f92bJoe Onorato  $(eval _o := $(subst ||, ,$(lastword $(LOCAL_PACKAGE_OVERRIDES))))
2133899e62a841bebefe6d9ab37ddc682e72fcb0f92bJoe Onorato  $(eval _n := $(subst ||, ,$(firstword $(LOCAL_PACKAGE_OVERRIDES))))
2134899e62a841bebefe6d9ab37ddc682e72fcb0f92bJoe Onorato  $(if $(filter $(word 2,$(_n)),$(LOCAL_PACKAGE_NAME)), \
2135899e62a841bebefe6d9ab37ddc682e72fcb0f92bJoe Onorato    $(eval LOCAL_PACKAGE_NAME := $(word 3,$(_o))) \
2136899e62a841bebefe6d9ab37ddc682e72fcb0f92bJoe Onorato    $(eval LOCAL_MANIFEST_PACKAGE_NAME := $(word 4,$(_o))) \
21373dae0ee46cf5fcde6eb424f9ab0c69f2d901a671Ying Wang    $(call keep-or-override,LOCAL_CERTIFICATE,$(patsubst &&%,%,$(word 5,$(_o)))) \
21383dae0ee46cf5fcde6eb424f9ab0c69f2d901a671Ying Wang    $(call keep-or-override,LOCAL_INSTRUMENTATION_FOR,$(patsubst &&%,%,$(word 6,$(_o)))) \
21393dae0ee46cf5fcde6eb424f9ab0c69f2d901a671Ying Wang    $(call keep-or-override,LOCAL_MANIFEST_INSTRUMENTATION_FOR,$(patsubst &&%,%,$(word 7,$(_o)))) \
2140899e62a841bebefe6d9ab37ddc682e72fcb0f92bJoe Onorato    $(eval LOCAL_OVERRIDES_PACKAGES := $(sort $(LOCAL_OVERRIDES_PACKAGES) $(word 2,$(_o)))) \
2141899e62a841bebefe6d9ab37ddc682e72fcb0f92bJoe Onorato    true \
2142899e62a841bebefe6d9ab37ddc682e72fcb0f92bJoe Onorato  ,)
2143899e62a841bebefe6d9ab37ddc682e72fcb0f92bJoe Onoratoendef
2144899e62a841bebefe6d9ab37ddc682e72fcb0f92bJoe Onorato
2145000e89a5b95a1d3071277ff279263204f49cbd78Ying Wang###########################################################
2146c065da230762acd1cba7714827c2d588ab32a7fbYing Wang## API Check
2147c065da230762acd1cba7714827c2d588ab32a7fbYing Wang###########################################################
2148c065da230762acd1cba7714827c2d588ab32a7fbYing Wang
2149c065da230762acd1cba7714827c2d588ab32a7fbYing Wang# eval this to define a rule that runs apicheck.
2150c065da230762acd1cba7714827c2d588ab32a7fbYing Wang#
2151c065da230762acd1cba7714827c2d588ab32a7fbYing Wang# Args:
2152c065da230762acd1cba7714827c2d588ab32a7fbYing Wang#    $(1)  target
2153c065da230762acd1cba7714827c2d588ab32a7fbYing Wang#    $(2)  stable api file
2154c065da230762acd1cba7714827c2d588ab32a7fbYing Wang#    $(3)  api file to be tested
2155ec21c58574798d05693d053deb17778cf23d0050Hui Shu#    $(4)  stable removed api file
2156e8af17eb27ff85963788ac1e2237026d68b6f955Hui Shu#    $(5)  removed api file to be tested
2157e8af17eb27ff85963788ac1e2237026d68b6f955Hui Shu#    $(6)  arguments for apicheck
2158e8af17eb27ff85963788ac1e2237026d68b6f955Hui Shu#    $(7)  command to run if apicheck failed
2159e8af17eb27ff85963788ac1e2237026d68b6f955Hui Shu#    $(8)  target dependent on this api check
2160e8af17eb27ff85963788ac1e2237026d68b6f955Hui Shu#    $(9)  additional dependencies
2161c065da230762acd1cba7714827c2d588ab32a7fbYing Wangdefine check-api
2162ec21c58574798d05693d053deb17778cf23d0050Hui Shu$(TARGET_OUT_COMMON_INTERMEDIATES)/PACKAGING/$(strip $(1))-timestamp: $(2) $(3) $(4) $(APICHECK) $(9)
2163c065da230762acd1cba7714827c2d588ab32a7fbYing Wang	@echo "Checking API:" $(1)
2164e8af17eb27ff85963788ac1e2237026d68b6f955Hui Shu	$(hide) ( $(APICHECK_COMMAND) $(6) $(2) $(3) $(4) $(5) || ( $(7) ; exit 38 ) )
2165c065da230762acd1cba7714827c2d588ab32a7fbYing Wang	$(hide) mkdir -p $$(dir $$@)
2166c065da230762acd1cba7714827c2d588ab32a7fbYing Wang	$(hide) touch $$@
2167e8af17eb27ff85963788ac1e2237026d68b6f955Hui Shu$(8): $(TARGET_OUT_COMMON_INTERMEDIATES)/PACKAGING/$(strip $(1))-timestamp
2168c065da230762acd1cba7714827c2d588ab32a7fbYing Wangendef
2169c065da230762acd1cba7714827c2d588ab32a7fbYing Wang
217063d94fa3056066ba7be6754356975af6a1c82981Ying Wang## Whether to build from source if prebuilt alternative exists
217163d94fa3056066ba7be6754356975af6a1c82981Ying Wang###########################################################
217263d94fa3056066ba7be6754356975af6a1c82981Ying Wang# $(1): module name
217363d94fa3056066ba7be6754356975af6a1c82981Ying Wang# $(2): LOCAL_PATH
217463d94fa3056066ba7be6754356975af6a1c82981Ying Wang# Expands to empty string if not from source.
217563d94fa3056066ba7be6754356975af6a1c82981Ying Wangifeq (true,$(ANDROID_BUILD_FROM_SOURCE))
217663d94fa3056066ba7be6754356975af6a1c82981Ying Wangdefine if-build-from-source
217763d94fa3056066ba7be6754356975af6a1c82981Ying Wangtrue
217863d94fa3056066ba7be6754356975af6a1c82981Ying Wangendef
217963d94fa3056066ba7be6754356975af6a1c82981Ying Wangelse
218063d94fa3056066ba7be6754356975af6a1c82981Ying Wangdefine if-build-from-source
218163d94fa3056066ba7be6754356975af6a1c82981Ying Wang$(if $(filter $(ANDROID_NO_PREBUILT_MODULES),$(1))$(filter \
218263d94fa3056066ba7be6754356975af6a1c82981Ying Wang    $(addsuffix %,$(ANDROID_NO_PREBUILT_PATHS)),$(2)),true)
218363d94fa3056066ba7be6754356975af6a1c82981Ying Wangendef
218463d94fa3056066ba7be6754356975af6a1c82981Ying Wangendif
218563d94fa3056066ba7be6754356975af6a1c82981Ying Wang
218663d94fa3056066ba7be6754356975af6a1c82981Ying Wang# Include makefile $(1) if build from source for module $(2)
218763d94fa3056066ba7be6754356975af6a1c82981Ying Wang# $(1): the makefile to include
218863d94fa3056066ba7be6754356975af6a1c82981Ying Wang# $(2): module name
218963d94fa3056066ba7be6754356975af6a1c82981Ying Wang# $(3): LOCAL_PATH
219063d94fa3056066ba7be6754356975af6a1c82981Ying Wangdefine include-if-build-from-source
219163d94fa3056066ba7be6754356975af6a1c82981Ying Wang$(if $(call if-build-from-source,$(2),$(3)),$(eval include $(1)))
219263d94fa3056066ba7be6754356975af6a1c82981Ying Wangendef
219363d94fa3056066ba7be6754356975af6a1c82981Ying Wang
2194a6a6c35c3afdf9c4bcd05ea5e4c40983e7e49246Ying Wang# Return the arch for the source file of a prebuilt
2195a6a6c35c3afdf9c4bcd05ea5e4c40983e7e49246Ying Wang# Return "none" if no matching arch found, so the result can be passed to
2196a6a6c35c3afdf9c4bcd05ea5e4c40983e7e49246Ying Wang# LOCAL_MODULE_TARGET_ARCH.
2197c0adfb76cdae425b4c03d85de184364edc33338fYing Wang# $(1) the list of archs supported by the prebuilt
2198c0adfb76cdae425b4c03d85de184364edc33338fYing Wangdefine get-prebuilt-src-arch
2199c0adfb76cdae425b4c03d85de184364edc33338fYing Wang$(strip $(if $(filter $(TARGET_ARCH),$(1)),$(TARGET_ARCH),\
2200a6a6c35c3afdf9c4bcd05ea5e4c40983e7e49246Ying Wang  $(if $(filter $(TARGET_2ND_ARCH),$(1)),$(TARGET_2ND_ARCH),none)))
2201c0adfb76cdae425b4c03d85de184364edc33338fYing Wangendef
2202c0adfb76cdae425b4c03d85de184364edc33338fYing Wang
2203c065da230762acd1cba7714827c2d588ab32a7fbYing Wang###########################################################
220488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## Other includes
220588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
220688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
220788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# -----------------------------------------------------------------
220888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# Rules and functions to help copy important files to DIST_DIR
220988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# when requested.
221088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectinclude $(BUILD_SYSTEM)/distdir.mk
221188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
22129e5efceff9d759827c90007e011caa83ec5d622aMarie Lennerhagen# Include any vendor specific definitions.mk file
22139e5efceff9d759827c90007e011caa83ec5d622aMarie Lennerhagen-include $(TOPDIR)vendor/*/build/core/definitions.mk
22149e5efceff9d759827c90007e011caa83ec5d622aMarie Lennerhagen
221588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# broken:
221688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#	$(foreach file,$^,$(if $(findstring,.a,$(suffix $file)),-l$(file),$(file)))
221788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
221888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
221988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project## Misc notes
222088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project###########################################################
222188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
222288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#DEPDIR = .deps
222388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#df = $(DEPDIR)/$(*F)
222488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
222588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#SRCS = foo.c bar.c ...
222688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
222788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#%.o : %.c
222888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#	@$(MAKEDEPEND); \
222988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#	  cp $(df).d $(df).P; \
223088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#	  sed -e 's/#.*//' -e 's/^[^:]*: *//' -e 's/ *\\$$//' \
223188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#	      -e '/^$$/ d' -e 's/$$/ :/' < $(df).d >> $(df).P; \
223288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#	  rm -f $(df).d
223388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#	$(COMPILE.c) -o $@ $<
223488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
223588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#-include $(SRCS:%.c=$(DEPDIR)/%.P)
223688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
223788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
223888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#%.o : %.c
223988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#	$(COMPILE.c) -MD -o $@ $<
224088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#	@cp $*.d $*.P; \
224188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#	  sed -e 's/#.*//' -e 's/^[^:]*: *//' -e 's/ *\\$$//' \
224288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#	      -e '/^$$/ d' -e 's/$$/ :/' < $*.d >> $*.P; \
224388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#	  rm -f $*.d
2244