2009-03-04 11:28:42 +08:00
|
|
|
#
|
|
|
|
# Copyright (C) 2008 The Android Open Source Project
|
|
|
|
#
|
|
|
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
|
|
# you may not use this file except in compliance with the License.
|
|
|
|
# You may obtain a copy of the License at
|
|
|
|
#
|
|
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
#
|
|
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
|
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
|
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
|
|
# See the License for the specific language governing permissions and
|
|
|
|
# limitations under the License.
|
|
|
|
#
|
|
|
|
|
|
|
|
##
|
|
|
|
## Common build system definitions. Mostly standard
|
|
|
|
## commands for building various types of targets, which
|
|
|
|
## are used by others to construct the final targets.
|
|
|
|
##
|
|
|
|
|
|
|
|
# These are variables we use to collect overall lists
|
|
|
|
# of things being processed.
|
|
|
|
|
|
|
|
# Full paths to all of the documentation
|
|
|
|
ALL_DOCS:=
|
|
|
|
|
|
|
|
# The short names of all of the targets in the system.
|
|
|
|
# For each element of ALL_MODULES, two other variables
|
|
|
|
# are defined:
|
|
|
|
# $(ALL_MODULES.$(target)).BUILT
|
|
|
|
# $(ALL_MODULES.$(target)).INSTALLED
|
|
|
|
# The BUILT variable contains LOCAL_BUILT_MODULE for that
|
|
|
|
# target, and the INSTALLED variable contains the LOCAL_INSTALLED_MODULE.
|
|
|
|
# Some targets may have multiple files listed in the BUILT and INSTALLED
|
|
|
|
# sub-variables.
|
|
|
|
ALL_MODULES:=
|
|
|
|
|
|
|
|
# Full paths to targets that should be added to the "make droid"
|
|
|
|
# set of installed targets.
|
|
|
|
ALL_DEFAULT_INSTALLED_MODULES:=
|
|
|
|
|
|
|
|
# The list of tags that have been defined by
|
|
|
|
# LOCAL_MODULE_TAGS. Each word in this variable maps
|
|
|
|
# to a corresponding ALL_MODULE_TAGS.<tagname> variable
|
|
|
|
# that contains all of the INSTALLED_MODULEs with that tag.
|
|
|
|
ALL_MODULE_TAGS:=
|
|
|
|
|
|
|
|
# Similar to ALL_MODULE_TAGS, but contains the short names
|
|
|
|
# of all targets for a particular tag. The top-level variable
|
|
|
|
# won't have the list of tags; ust ALL_MODULE_TAGS to get
|
|
|
|
# the list of all known tags. (This means that this variable
|
|
|
|
# will always be empty; it's just here as a placeholder for
|
|
|
|
# its sub-variables.)
|
|
|
|
ALL_MODULE_NAME_TAGS:=
|
|
|
|
|
|
|
|
# Full paths to all prebuilt files that will be copied
|
|
|
|
# (used to make the dependency on acp)
|
|
|
|
ALL_PREBUILT:=
|
|
|
|
|
|
|
|
# Full path to all files that are made by some tool
|
|
|
|
ALL_GENERATED_SOURCES:=
|
|
|
|
|
|
|
|
# Full path to all asm, C, C++, lex and yacc generated C files.
|
|
|
|
# These all have an order-only dependency on the copied headers
|
|
|
|
ALL_C_CPP_ETC_OBJECTS:=
|
|
|
|
|
build: remove prelinker build build system
This patch removes support for prelinking from the build system. By now, the
prelinker has outlived its usefulness for several reasons. Firstly, the
speedup that it afforded in the early days of Android is now nullified by the
speed of hardware, as well as by the presence of Zygote. Secondly, the space
savings that come with prelinking (measued at 17MB on a recent honeycomb
stingray build) are no longer important either. Thirdly, prelinking reduces
the effectiveness of Address-Space-Layout Randomization. Finally, since it is
not part of the gcc suite, the prelinker needs to be maintained separately.
The patch deletes apriori, soslim, lsd, isprelinked, and iself from the source
tree. It also removes the prelink map.
LOCAL_PRELINK_MODULE becomes a no-op. Individual Android.mk will get cleaned
separately. Support for prelinking will have to be removed from the recovery
code and from the dynamic loader as well.
Change-Id: I5839c9c25f7772d5183eedfe20ab924f2a7cd411
2011-03-09 08:19:48 +08:00
|
|
|
# The list of dynamic binaries that haven't been stripped/compressed/etc.
|
2009-03-04 11:28:42 +08:00
|
|
|
ALL_ORIGINAL_DYNAMIC_BINARIES:=
|
|
|
|
|
|
|
|
# These files go into the SDK
|
|
|
|
ALL_SDK_FILES:=
|
|
|
|
|
|
|
|
# Files for dalvik. This is often build without building the rest of the OS.
|
|
|
|
INTERNAL_DALVIK_MODULES:=
|
|
|
|
|
|
|
|
# All findbugs xml files
|
|
|
|
ALL_FINDBUGS_FILES:=
|
|
|
|
|
2011-12-13 04:57:38 +08:00
|
|
|
# GPL module license files
|
|
|
|
ALL_GPL_MODULE_LICENSE_FILES:=
|
|
|
|
|
2013-02-23 06:32:30 +08:00
|
|
|
# Target and host installed module's dependencies on shared libraries.
|
2013-04-16 08:32:21 +08:00
|
|
|
# They are list of "<module_name>:<installed_file>:lib1,lib2...".
|
2013-02-23 06:32:30 +08:00
|
|
|
TARGET_DEPENDENCIES_ON_SHARED_LIBRARIES :=
|
2014-05-21 05:43:51 +08:00
|
|
|
$(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_DEPENDENCIES_ON_SHARED_LIBRARIES :=
|
2013-02-23 06:32:30 +08:00
|
|
|
HOST_DEPENDENCIES_ON_SHARED_LIBRARIES :=
|
2014-05-21 05:43:51 +08:00
|
|
|
$(HOST_2ND_ARCH_VAR_PREFIX)HOST_DEPENDENCIES_ON_SHARED_LIBRARIES :=
|
2013-02-23 06:32:30 +08:00
|
|
|
|
2012-06-20 01:40:37 +08:00
|
|
|
# Generated class file names for Android resource.
|
|
|
|
# They are escaped and quoted so can be passed safely to a bash command.
|
|
|
|
ANDROID_RESOURCE_GENERATED_CLASSES := 'R.class' 'R$$*.class' 'Manifest.class' 'Manifest$$*.class'
|
|
|
|
|
2009-03-04 11:28:42 +08:00
|
|
|
###########################################################
|
|
|
|
## Debugging; prints a variable list to stdout
|
|
|
|
###########################################################
|
|
|
|
|
|
|
|
# $(1): variable name list, not variable values
|
|
|
|
define print-vars
|
|
|
|
$(foreach var,$(1), \
|
|
|
|
$(info $(var):) \
|
|
|
|
$(foreach word,$($(var)), \
|
|
|
|
$(info $(space)$(space)$(word)) \
|
|
|
|
) \
|
|
|
|
)
|
|
|
|
endef
|
|
|
|
|
2009-04-10 10:31:12 +08:00
|
|
|
###########################################################
|
|
|
|
## Evaluates to true if the string contains the word true,
|
|
|
|
## and empty otherwise
|
|
|
|
## $(1): a var to test
|
|
|
|
###########################################################
|
|
|
|
|
|
|
|
define true-or-empty
|
|
|
|
$(filter true, $(1))
|
|
|
|
endef
|
|
|
|
|
|
|
|
|
2009-03-04 11:28:42 +08:00
|
|
|
###########################################################
|
|
|
|
## Retrieve the directory of the current makefile
|
2014-03-02 07:32:04 +08:00
|
|
|
## Must be called before including any other makefile!!
|
2009-03-04 11:28:42 +08:00
|
|
|
###########################################################
|
|
|
|
|
|
|
|
# Figure out where we are.
|
|
|
|
define my-dir
|
2009-05-20 07:12:22 +08:00
|
|
|
$(strip \
|
2012-04-24 12:29:18 +08:00
|
|
|
$(eval LOCAL_MODULE_MAKEFILE := $$(lastword $$(MAKEFILE_LIST))) \
|
2014-03-02 07:32:04 +08:00
|
|
|
$(if $(filter $(BUILD_SYSTEM)/% $(OUT_DIR)/%,$(LOCAL_MODULE_MAKEFILE)), \
|
|
|
|
$(error my-dir must be called before including any other makefile.) \
|
2009-05-20 07:12:22 +08:00
|
|
|
, \
|
2012-04-24 12:29:18 +08:00
|
|
|
$(patsubst %/,%,$(dir $(LOCAL_MODULE_MAKEFILE))) \
|
2009-05-20 07:12:22 +08:00
|
|
|
) \
|
|
|
|
)
|
2009-03-04 11:28:42 +08:00
|
|
|
endef
|
|
|
|
|
|
|
|
###########################################################
|
|
|
|
## Retrieve a list of all makefiles immediately below some directory
|
|
|
|
###########################################################
|
|
|
|
|
|
|
|
define all-makefiles-under
|
|
|
|
$(wildcard $(1)/*/Android.mk)
|
|
|
|
endef
|
|
|
|
|
|
|
|
###########################################################
|
|
|
|
## Look under a directory for makefiles that don't have parent
|
|
|
|
## makefiles.
|
|
|
|
###########################################################
|
|
|
|
|
|
|
|
# $(1): directory to search under
|
|
|
|
# Ignores $(1)/Android.mk
|
|
|
|
define first-makefiles-under
|
2013-07-12 10:08:06 +08:00
|
|
|
$(shell build/tools/findleaves.py --prune=$(OUT_DIR) --prune=.repo --prune=.git \
|
2009-08-05 03:58:26 +08:00
|
|
|
--mindepth=2 $(1) Android.mk)
|
2009-03-04 11:28:42 +08:00
|
|
|
endef
|
|
|
|
|
|
|
|
###########################################################
|
|
|
|
## Retrieve a list of all makefiles immediately below your directory
|
2014-03-02 07:32:04 +08:00
|
|
|
## Must be called before including any other makefile!!
|
2009-03-04 11:28:42 +08:00
|
|
|
###########################################################
|
|
|
|
|
|
|
|
define all-subdir-makefiles
|
|
|
|
$(call all-makefiles-under,$(call my-dir))
|
|
|
|
endef
|
|
|
|
|
|
|
|
###########################################################
|
|
|
|
## Look in the named list of directories for makefiles,
|
|
|
|
## relative to the current directory.
|
2014-03-02 07:32:04 +08:00
|
|
|
## Must be called before including any other makefile!!
|
2009-03-04 11:28:42 +08:00
|
|
|
###########################################################
|
|
|
|
|
|
|
|
# $(1): List of directories to look for under this directory
|
|
|
|
define all-named-subdir-makefiles
|
2011-01-16 18:31:29 +08:00
|
|
|
$(wildcard $(addsuffix /Android.mk, $(addprefix $(call my-dir)/,$(1))))
|
2009-03-04 11:28:42 +08:00
|
|
|
endef
|
|
|
|
|
|
|
|
###########################################################
|
|
|
|
## Find all of the java files under the named directories.
|
|
|
|
## Meant to be used like:
|
|
|
|
## SRC_FILES := $(call all-java-files-under,src tests)
|
|
|
|
###########################################################
|
|
|
|
|
|
|
|
define all-java-files-under
|
|
|
|
$(patsubst ./%,%, \
|
|
|
|
$(shell cd $(LOCAL_PATH) ; \
|
2012-10-03 01:32:00 +08:00
|
|
|
find -L $(1) -name "*.java" -and -not -name ".*") \
|
2009-03-04 11:28:42 +08:00
|
|
|
)
|
|
|
|
endef
|
|
|
|
|
|
|
|
###########################################################
|
|
|
|
## Find all of the java files from here. Meant to be used like:
|
|
|
|
## SRC_FILES := $(call all-subdir-java-files)
|
|
|
|
###########################################################
|
|
|
|
|
|
|
|
define all-subdir-java-files
|
|
|
|
$(call all-java-files-under,.)
|
|
|
|
endef
|
|
|
|
|
|
|
|
###########################################################
|
|
|
|
## Find all of the c files under the named directories.
|
|
|
|
## Meant to be used like:
|
|
|
|
## SRC_FILES := $(call all-c-files-under,src tests)
|
|
|
|
###########################################################
|
|
|
|
|
|
|
|
define all-c-files-under
|
|
|
|
$(patsubst ./%,%, \
|
|
|
|
$(shell cd $(LOCAL_PATH) ; \
|
2012-10-03 01:32:00 +08:00
|
|
|
find -L $(1) -name "*.c" -and -not -name ".*") \
|
2009-03-04 11:28:42 +08:00
|
|
|
)
|
|
|
|
endef
|
|
|
|
|
|
|
|
###########################################################
|
|
|
|
## Find all of the c files from here. Meant to be used like:
|
|
|
|
## SRC_FILES := $(call all-subdir-c-files)
|
|
|
|
###########################################################
|
|
|
|
|
|
|
|
define all-subdir-c-files
|
|
|
|
$(call all-c-files-under,.)
|
|
|
|
endef
|
|
|
|
|
|
|
|
###########################################################
|
|
|
|
## Find all files named "I*.aidl" under the named directories,
|
|
|
|
## which must be relative to $(LOCAL_PATH). The returned list
|
|
|
|
## is relative to $(LOCAL_PATH).
|
|
|
|
###########################################################
|
|
|
|
|
|
|
|
define all-Iaidl-files-under
|
|
|
|
$(patsubst ./%,%, \
|
|
|
|
$(shell cd $(LOCAL_PATH) ; \
|
2012-10-03 01:32:00 +08:00
|
|
|
find -L $(1) -name "I*.aidl" -and -not -name ".*") \
|
2009-03-04 11:28:42 +08:00
|
|
|
)
|
|
|
|
endef
|
|
|
|
|
|
|
|
###########################################################
|
|
|
|
## Find all of the "I*.aidl" files under $(LOCAL_PATH).
|
|
|
|
###########################################################
|
|
|
|
|
|
|
|
define all-subdir-Iaidl-files
|
|
|
|
$(call all-Iaidl-files-under,.)
|
|
|
|
endef
|
|
|
|
|
2010-02-03 01:36:20 +08:00
|
|
|
###########################################################
|
|
|
|
## Find all of the logtags files under the named directories.
|
|
|
|
## Meant to be used like:
|
|
|
|
## SRC_FILES := $(call all-logtags-files-under,src)
|
|
|
|
###########################################################
|
|
|
|
|
|
|
|
define all-logtags-files-under
|
|
|
|
$(patsubst ./%,%, \
|
|
|
|
$(shell cd $(LOCAL_PATH) ; \
|
2012-10-03 01:32:00 +08:00
|
|
|
find -L $(1) -name "*.logtags" -and -not -name ".*") \
|
2010-02-03 01:36:20 +08:00
|
|
|
)
|
|
|
|
endef
|
|
|
|
|
2010-11-03 09:43:16 +08:00
|
|
|
###########################################################
|
|
|
|
## Find all of the .proto files under the named directories.
|
|
|
|
## Meant to be used like:
|
|
|
|
## SRC_FILES := $(call all-proto-files-under,src)
|
|
|
|
###########################################################
|
|
|
|
|
|
|
|
define all-proto-files-under
|
|
|
|
$(patsubst ./%,%, \
|
|
|
|
$(shell cd $(LOCAL_PATH) ; \
|
2012-10-03 01:32:00 +08:00
|
|
|
find -L $(1) -name "*.proto" -and -not -name ".*") \
|
2010-11-03 09:43:16 +08:00
|
|
|
)
|
|
|
|
endef
|
|
|
|
|
2010-07-16 08:17:52 +08:00
|
|
|
###########################################################
|
|
|
|
## Find all of the RenderScript files under the named directories.
|
|
|
|
## Meant to be used like:
|
|
|
|
## SRC_FILES := $(call all-renderscript-files-under,src)
|
|
|
|
###########################################################
|
|
|
|
|
|
|
|
define all-renderscript-files-under
|
|
|
|
$(patsubst ./%,%, \
|
|
|
|
$(shell cd $(LOCAL_PATH) ; \
|
2012-10-12 13:08:57 +08:00
|
|
|
find -L $(1) \( -name "*.rs" -or -name "*.fs" \) -and -not -name ".*") \
|
2010-07-16 08:17:52 +08:00
|
|
|
)
|
|
|
|
endef
|
|
|
|
|
2009-12-18 09:47:28 +08:00
|
|
|
###########################################################
|
2014-02-12 05:48:35 +08:00
|
|
|
## Find all of the S files under the named directories.
|
|
|
|
## Meant to be used like:
|
|
|
|
## SRC_FILES := $(call all-c-files-under,src tests)
|
|
|
|
###########################################################
|
|
|
|
|
|
|
|
define all-S-files-under
|
|
|
|
$(patsubst ./%,%, \
|
|
|
|
$(shell cd $(LOCAL_PATH) ; \
|
|
|
|
find -L $(1) -name "*.S" -and -not -name ".*") \
|
|
|
|
)
|
|
|
|
endef
|
|
|
|
|
2009-12-18 09:47:28 +08:00
|
|
|
###########################################################
|
|
|
|
## Find all of the html files under the named directories.
|
|
|
|
## Meant to be used like:
|
|
|
|
## SRC_FILES := $(call all-html-files-under,src tests)
|
|
|
|
###########################################################
|
|
|
|
|
|
|
|
define all-html-files-under
|
|
|
|
$(patsubst ./%,%, \
|
|
|
|
$(shell cd $(LOCAL_PATH) ; \
|
2012-10-03 01:32:00 +08:00
|
|
|
find -L $(1) -name "*.html" -and -not -name ".*") \
|
2009-12-18 09:47:28 +08:00
|
|
|
)
|
|
|
|
endef
|
|
|
|
|
2009-03-04 11:28:42 +08:00
|
|
|
###########################################################
|
|
|
|
## Find all of the html files from here. Meant to be used like:
|
|
|
|
## SRC_FILES := $(call all-subdir-html-files)
|
|
|
|
###########################################################
|
|
|
|
|
|
|
|
define all-subdir-html-files
|
2009-12-18 09:47:28 +08:00
|
|
|
$(call all-html-files-under,.)
|
2009-03-04 11:28:42 +08:00
|
|
|
endef
|
|
|
|
|
|
|
|
###########################################################
|
|
|
|
## Find all of the files matching pattern
|
|
|
|
## SRC_FILES := $(call find-subdir-files, <pattern>)
|
|
|
|
###########################################################
|
|
|
|
|
|
|
|
define find-subdir-files
|
2012-10-03 01:32:00 +08:00
|
|
|
$(patsubst ./%,%,$(shell cd $(LOCAL_PATH) ; find -L $(1)))
|
2009-03-04 11:28:42 +08:00
|
|
|
endef
|
|
|
|
|
|
|
|
###########################################################
|
|
|
|
# find the files in the subdirectory $1 of LOCAL_DIR
|
|
|
|
# matching pattern $2, filtering out files $3
|
|
|
|
# e.g.
|
|
|
|
# SRC_FILES += $(call find-subdir-subdir-files, \
|
|
|
|
# css, *.cpp, DontWantThis.cpp)
|
|
|
|
###########################################################
|
|
|
|
|
|
|
|
define find-subdir-subdir-files
|
|
|
|
$(filter-out $(patsubst %,$(1)/%,$(3)),$(patsubst ./%,%,$(shell cd \
|
2012-10-03 01:32:00 +08:00
|
|
|
$(LOCAL_PATH) ; find -L $(1) -maxdepth 1 -name $(2))))
|
2009-03-04 11:28:42 +08:00
|
|
|
endef
|
|
|
|
|
|
|
|
###########################################################
|
|
|
|
## Find all of the files matching pattern
|
|
|
|
## SRC_FILES := $(call all-subdir-java-files)
|
|
|
|
###########################################################
|
|
|
|
|
|
|
|
define find-subdir-assets
|
|
|
|
$(if $(1),$(patsubst ./%,%, \
|
2011-08-11 07:05:51 +08:00
|
|
|
$(shell if [ -d $(1) ] ; then cd $(1) ; find ./ -not -name '.*' -and -type f -and -not -type l ; fi)), \
|
2009-03-04 11:28:42 +08:00
|
|
|
$(warning Empty argument supplied to find-subdir-assets) \
|
|
|
|
)
|
|
|
|
endef
|
|
|
|
|
|
|
|
###########################################################
|
|
|
|
## Find various file types in a list of directories relative to $(LOCAL_PATH)
|
|
|
|
###########################################################
|
|
|
|
|
|
|
|
define find-other-java-files
|
|
|
|
$(call find-subdir-files,$(1) -name "*.java" -and -not -name ".*")
|
|
|
|
endef
|
|
|
|
|
|
|
|
define find-other-html-files
|
|
|
|
$(call find-subdir-files,$(1) -name "*.html" -and -not -name ".*")
|
|
|
|
endef
|
|
|
|
|
2013-12-05 08:04:49 +08:00
|
|
|
###########################################################
|
|
|
|
# Use utility find to find given files in the given subdirs.
|
|
|
|
# This function uses $(1), instead of LOCAL_PATH as the base.
|
|
|
|
# $(1): the base dir, relative to the root of the source tree.
|
|
|
|
# $(2): the file name pattern to be passed to find as "-name".
|
|
|
|
# $(3): a list of subdirs of the base dir.
|
|
|
|
# Returns: a list of paths relative to the base dir.
|
|
|
|
###########################################################
|
|
|
|
|
|
|
|
define find-files-in-subdirs
|
|
|
|
$(patsubst ./%,%, \
|
|
|
|
$(shell cd $(1) ; \
|
|
|
|
find -L $(3) -name $(2) -and -not -name ".*") \
|
|
|
|
)
|
|
|
|
endef
|
|
|
|
|
2009-03-04 11:28:42 +08:00
|
|
|
###########################################################
|
|
|
|
## Scan through each directory of $(1) looking for files
|
|
|
|
## that match $(2) using $(wildcard). Useful for seeing if
|
|
|
|
## a given directory or one of its parents contains
|
|
|
|
## a particular file. Returns the first match found,
|
|
|
|
## starting furthest from the root.
|
|
|
|
###########################################################
|
|
|
|
|
|
|
|
define find-parent-file
|
|
|
|
$(strip \
|
2011-03-04 05:29:38 +08:00
|
|
|
$(eval _fpf := $(wildcard $(foreach f, $(2), $(strip $(1))/$(f)))) \
|
2009-03-04 11:28:42 +08:00
|
|
|
$(if $(_fpf),$(_fpf), \
|
|
|
|
$(if $(filter-out ./ .,$(1)), \
|
|
|
|
$(call find-parent-file,$(patsubst %/,%,$(dir $(1))),$(2)) \
|
|
|
|
) \
|
|
|
|
) \
|
|
|
|
)
|
|
|
|
endef
|
|
|
|
|
|
|
|
###########################################################
|
|
|
|
## Function we can evaluate to introduce a dynamic dependency
|
|
|
|
###########################################################
|
|
|
|
|
|
|
|
define add-dependency
|
|
|
|
$(1): $(2)
|
|
|
|
endef
|
|
|
|
|
|
|
|
###########################################################
|
|
|
|
## The intermediates directory. Where object files go for
|
|
|
|
## a given target. We could technically get away without
|
|
|
|
## the "_intermediates" suffix on the directory, but it's
|
|
|
|
## nice to be able to grep for that string to find out if
|
|
|
|
## anyone's abusing the system.
|
|
|
|
###########################################################
|
|
|
|
|
|
|
|
# $(1): target class, like "APPS"
|
|
|
|
# $(2): target name, like "NotePad"
|
|
|
|
# $(3): if non-empty, this is a HOST target.
|
|
|
|
# $(4): if non-empty, force the intermediates to be COMMON
|
2014-01-16 08:02:16 +08:00
|
|
|
# $(5): if non-empty, force the intermedistes to be for the 2nd arch
|
2009-03-04 11:28:42 +08:00
|
|
|
define intermediates-dir-for
|
|
|
|
$(strip \
|
|
|
|
$(eval _idfClass := $(strip $(1))) \
|
|
|
|
$(if $(_idfClass),, \
|
|
|
|
$(error $(LOCAL_PATH): Class not defined in call to intermediates-dir-for)) \
|
|
|
|
$(eval _idfName := $(strip $(2))) \
|
|
|
|
$(if $(_idfName),, \
|
|
|
|
$(error $(LOCAL_PATH): Name not defined in call to intermediates-dir-for)) \
|
|
|
|
$(eval _idfPrefix := $(if $(strip $(3)),HOST,TARGET)) \
|
2014-06-18 12:35:44 +08:00
|
|
|
$(eval _idf2ndArchPrefix := $(if $(strip $(5)),$(TARGET_2ND_ARCH_VAR_PREFIX))) \
|
2010-09-25 09:09:04 +08:00
|
|
|
$(if $(filter $(_idfPrefix)-$(_idfClass),$(COMMON_MODULE_CLASSES))$(4), \
|
2009-03-04 11:28:42 +08:00
|
|
|
$(eval _idfIntBase := $($(_idfPrefix)_OUT_COMMON_INTERMEDIATES)) \
|
2014-04-18 01:03:35 +08:00
|
|
|
,$(if $(filter $(_idfClass),SHARED_LIBRARIES STATIC_LIBRARIES EXECUTABLES GYP),\
|
2014-01-25 05:38:08 +08:00
|
|
|
$(eval _idfIntBase := $($(_idf2ndArchPrefix)$(_idfPrefix)_OUT_INTERMEDIATES)) \
|
|
|
|
,$(eval _idfIntBase := $($(_idfPrefix)_OUT_INTERMEDIATES)) \
|
|
|
|
) \
|
2009-03-04 11:28:42 +08:00
|
|
|
) \
|
|
|
|
$(_idfIntBase)/$(_idfClass)/$(_idfName)_intermediates \
|
|
|
|
)
|
|
|
|
endef
|
|
|
|
|
|
|
|
# Uses LOCAL_MODULE_CLASS, LOCAL_MODULE, and LOCAL_IS_HOST_MODULE
|
|
|
|
# to determine the intermediates directory.
|
|
|
|
#
|
|
|
|
# $(1): if non-empty, force the intermediates to be COMMON
|
2014-01-16 08:02:16 +08:00
|
|
|
# $(2): if non-empty, force the intermediates to be for the 2nd arch
|
2009-03-04 11:28:42 +08:00
|
|
|
define local-intermediates-dir
|
|
|
|
$(strip \
|
|
|
|
$(if $(strip $(LOCAL_MODULE_CLASS)),, \
|
|
|
|
$(error $(LOCAL_PATH): LOCAL_MODULE_CLASS not defined before call to local-intermediates-dir)) \
|
|
|
|
$(if $(strip $(LOCAL_MODULE)),, \
|
|
|
|
$(error $(LOCAL_PATH): LOCAL_MODULE not defined before call to local-intermediates-dir)) \
|
2014-01-16 08:02:16 +08:00
|
|
|
$(call intermediates-dir-for,$(LOCAL_MODULE_CLASS),$(LOCAL_MODULE),$(LOCAL_IS_HOST_MODULE),$(1),$(2)) \
|
2009-03-04 11:28:42 +08:00
|
|
|
)
|
|
|
|
endef
|
|
|
|
|
|
|
|
###########################################################
|
2014-01-25 15:17:21 +08:00
|
|
|
## The generated sources directory. Placing generated
|
|
|
|
## source files directly in the intermediates directory
|
|
|
|
## causes problems for multiarch builds, where there are
|
|
|
|
## two intermediates directories for a single target. Put
|
|
|
|
## them in a separate directory, and they will be copied to
|
|
|
|
## each intermediates directory automatically.
|
|
|
|
###########################################################
|
|
|
|
|
|
|
|
# $(1): target class, like "APPS"
|
|
|
|
# $(2): target name, like "NotePad"
|
|
|
|
# $(3): if non-empty, this is a HOST target.
|
|
|
|
# $(4): if non-empty, force the generated sources to be COMMON
|
|
|
|
define generated-sources-dir-for
|
|
|
|
$(strip \
|
|
|
|
$(eval _idfClass := $(strip $(1))) \
|
|
|
|
$(if $(_idfClass),, \
|
|
|
|
$(error $(LOCAL_PATH): Class not defined in call to generated-sources-dir-for)) \
|
|
|
|
$(eval _idfName := $(strip $(2))) \
|
|
|
|
$(if $(_idfName),, \
|
|
|
|
$(error $(LOCAL_PATH): Name not defined in call to generated-sources-dir-for)) \
|
|
|
|
$(eval _idfPrefix := $(if $(strip $(3)),HOST,TARGET)) \
|
|
|
|
$(if $(filter $(_idfPrefix)-$(_idfClass),$(COMMON_MODULE_CLASSES))$(4), \
|
|
|
|
$(eval _idfIntBase := $($(_idfPrefix)_OUT_GEN_COMMON)) \
|
|
|
|
, \
|
|
|
|
$(eval _idfIntBase := $($(_idfPrefix)_OUT_GEN)) \
|
|
|
|
) \
|
|
|
|
$(_idfIntBase)/$(_idfClass)/$(_idfName)_intermediates \
|
|
|
|
)
|
|
|
|
endef
|
|
|
|
|
|
|
|
# Uses LOCAL_MODULE_CLASS, LOCAL_MODULE, and LOCAL_IS_HOST_MODULE
|
|
|
|
# to determine the generated sources directory.
|
|
|
|
#
|
|
|
|
# $(1): if non-empty, force the intermediates to be COMMON
|
|
|
|
define local-generated-sources-dir
|
|
|
|
$(strip \
|
|
|
|
$(if $(strip $(LOCAL_MODULE_CLASS)),, \
|
|
|
|
$(error $(LOCAL_PATH): LOCAL_MODULE_CLASS not defined before call to local-generated-sources-dir)) \
|
|
|
|
$(if $(strip $(LOCAL_MODULE)),, \
|
|
|
|
$(error $(LOCAL_PATH): LOCAL_MODULE not defined before call to local-generated-sources-dir)) \
|
|
|
|
$(call generated-sources-dir-for,$(LOCAL_MODULE_CLASS),$(LOCAL_MODULE),$(LOCAL_IS_HOST_MODULE),$(1)) \
|
|
|
|
)
|
|
|
|
endef
|
|
|
|
|
2009-03-04 11:28:42 +08:00
|
|
|
###########################################################
|
|
|
|
## Convert "path/to/libXXX.so" to "-lXXX".
|
|
|
|
## Any "path/to/libXXX.a" elements pass through unchanged.
|
|
|
|
###########################################################
|
|
|
|
|
|
|
|
define normalize-libraries
|
|
|
|
$(foreach so,$(filter %.so,$(1)),-l$(patsubst lib%.so,%,$(notdir $(so))))\
|
|
|
|
$(filter-out %.so,$(1))
|
|
|
|
endef
|
|
|
|
|
|
|
|
# TODO: change users to call the common version.
|
|
|
|
define normalize-host-libraries
|
|
|
|
$(call normalize-libraries,$(1))
|
|
|
|
endef
|
|
|
|
|
|
|
|
define normalize-target-libraries
|
|
|
|
$(call normalize-libraries,$(1))
|
|
|
|
endef
|
|
|
|
|
|
|
|
###########################################################
|
|
|
|
## Convert a list of short module names (e.g., "framework", "Browser")
|
|
|
|
## into the list of files that are built for those modules.
|
|
|
|
## NOTE: this won't return reliable results until after all
|
|
|
|
## sub-makefiles have been included.
|
|
|
|
## $(1): target list
|
|
|
|
###########################################################
|
|
|
|
|
|
|
|
define module-built-files
|
|
|
|
$(foreach module,$(1),$(ALL_MODULES.$(module).BUILT))
|
|
|
|
endef
|
|
|
|
|
|
|
|
###########################################################
|
|
|
|
## Convert a list of short modules names (e.g., "framework", "Browser")
|
|
|
|
## into the list of files that are installed for those modules.
|
|
|
|
## NOTE: this won't return reliable results until after all
|
|
|
|
## sub-makefiles have been included.
|
|
|
|
## $(1): target list
|
|
|
|
###########################################################
|
|
|
|
|
|
|
|
define module-installed-files
|
|
|
|
$(foreach module,$(1),$(ALL_MODULES.$(module).INSTALLED))
|
|
|
|
endef
|
|
|
|
|
2009-04-10 10:31:12 +08:00
|
|
|
###########################################################
|
|
|
|
## Convert a list of short modules names (e.g., "framework", "Browser")
|
|
|
|
## into the list of files that should be used when linking
|
|
|
|
## against that module as a public API.
|
|
|
|
## TODO: Allow this for more than JAVA_LIBRARIES modules
|
|
|
|
## NOTE: this won't return reliable results until after all
|
|
|
|
## sub-makefiles have been included.
|
|
|
|
## $(1): target list
|
|
|
|
###########################################################
|
|
|
|
|
|
|
|
define module-stubs-files
|
|
|
|
$(foreach module,$(1),$(ALL_MODULES.$(module).STUBS))
|
|
|
|
endef
|
|
|
|
|
|
|
|
###########################################################
|
|
|
|
## Evaluates to the timestamp file for a doc module, which
|
|
|
|
## is the dependency that should be used.
|
|
|
|
## $(1): doc module
|
|
|
|
###########################################################
|
|
|
|
|
|
|
|
define doc-timestamp-for
|
|
|
|
$(OUT_DOCS)/$(strip $(1))-timestamp
|
|
|
|
endef
|
|
|
|
|
|
|
|
|
2009-03-04 11:28:42 +08:00
|
|
|
###########################################################
|
2010-09-29 08:27:56 +08:00
|
|
|
## Convert "core ext framework" to "out/.../javalib.jar ..."
|
2009-03-04 11:28:42 +08:00
|
|
|
## $(1): library list
|
|
|
|
## $(2): Non-empty if IS_HOST_MODULE
|
|
|
|
###########################################################
|
|
|
|
|
|
|
|
# $(1): library name
|
|
|
|
# $(2): Non-empty if IS_HOST_MODULE
|
|
|
|
define _java-lib-dir
|
|
|
|
$(call intermediates-dir-for, \
|
2010-09-29 08:27:56 +08:00
|
|
|
JAVA_LIBRARIES,$(1),$(2),COMMON)
|
2009-03-04 11:28:42 +08:00
|
|
|
endef
|
|
|
|
|
|
|
|
# $(1): library name
|
|
|
|
# $(2): Non-empty if IS_HOST_MODULE
|
|
|
|
define _java-lib-full-classes.jar
|
2010-09-29 08:27:56 +08:00
|
|
|
$(call _java-lib-dir,$(1),$(2))/classes$(COMMON_JAVA_PACKAGE_SUFFIX)
|
2009-03-04 11:28:42 +08:00
|
|
|
endef
|
|
|
|
|
|
|
|
# $(1): library name list
|
|
|
|
# $(2): Non-empty if IS_HOST_MODULE
|
|
|
|
define java-lib-files
|
|
|
|
$(foreach lib,$(1),$(call _java-lib-full-classes.jar,$(lib),$(2)))
|
|
|
|
endef
|
|
|
|
|
|
|
|
# $(1): library name
|
|
|
|
# $(2): Non-empty if IS_HOST_MODULE
|
|
|
|
define _java-lib-full-dep
|
2013-02-28 07:23:42 +08:00
|
|
|
$(call _java-lib-dir,$(1),$(2))/$(if $(2),javalib,classes)$(COMMON_JAVA_PACKAGE_SUFFIX)
|
2009-03-04 11:28:42 +08:00
|
|
|
endef
|
|
|
|
|
|
|
|
# $(1): library name list
|
|
|
|
# $(2): Non-empty if IS_HOST_MODULE
|
|
|
|
define java-lib-deps
|
|
|
|
$(foreach lib,$(1),$(call _java-lib-full-dep,$(lib),$(2)))
|
|
|
|
endef
|
|
|
|
|
2010-09-15 01:09:48 +08:00
|
|
|
###########################################################
|
|
|
|
## Run rot13 on a string
|
|
|
|
## $(1): the string. Must be one line.
|
|
|
|
###########################################################
|
|
|
|
define rot13
|
|
|
|
$(shell echo $(1) | tr 'a-zA-Z' 'n-za-mN-ZA-M')
|
|
|
|
endef
|
|
|
|
|
|
|
|
|
|
|
|
###########################################################
|
|
|
|
## Returns true if $(1) and $(2) are equal. Returns
|
|
|
|
## the empty string if they are not equal.
|
|
|
|
###########################################################
|
|
|
|
define streq
|
|
|
|
$(strip $(if $(strip $(1)),\
|
|
|
|
$(if $(strip $(2)),\
|
|
|
|
$(if $(filter-out __,_$(subst $(strip $(1)),,$(strip $(2)))$(subst $(strip $(2)),,$(strip $(1)))_),,true), \
|
|
|
|
),\
|
|
|
|
$(if $(strip $(2)),\
|
|
|
|
,\
|
|
|
|
true)\
|
|
|
|
))
|
|
|
|
endef
|
|
|
|
|
2009-03-04 11:28:42 +08:00
|
|
|
###########################################################
|
|
|
|
## Convert "a b c" into "a:b:c"
|
|
|
|
###########################################################
|
|
|
|
define normalize-path-list
|
|
|
|
$(subst $(space),:,$(strip $(1)))
|
|
|
|
endef
|
|
|
|
|
2009-04-10 10:31:12 +08:00
|
|
|
###########################################################
|
|
|
|
## Read the word out of a colon-separated list of words.
|
|
|
|
## This has the same behavior as the built-in function
|
|
|
|
## $(word n,str).
|
|
|
|
##
|
|
|
|
## The individual words may not contain spaces.
|
|
|
|
##
|
|
|
|
## $(1): 1 based index
|
|
|
|
## $(2): value of the form a:b:c...
|
|
|
|
###########################################################
|
|
|
|
|
|
|
|
define word-colon
|
|
|
|
$(word $(1),$(subst :,$(space),$(2)))
|
|
|
|
endef
|
|
|
|
|
2009-03-04 11:28:42 +08:00
|
|
|
###########################################################
|
|
|
|
## Convert "a=b c= d e = f" into "a=b c=d e=f"
|
|
|
|
##
|
|
|
|
## $(1): list to collapse
|
|
|
|
## $(2): if set, separator word; usually "=", ":", or ":="
|
|
|
|
## Defaults to "=" if not set.
|
|
|
|
###########################################################
|
|
|
|
|
|
|
|
define collapse-pairs
|
|
|
|
$(eval _cpSEP := $(strip $(if $(2),$(2),=)))\
|
|
|
|
$(subst $(space)$(_cpSEP)$(space),$(_cpSEP),$(strip \
|
|
|
|
$(subst $(_cpSEP), $(_cpSEP) ,$(1))))
|
|
|
|
endef
|
|
|
|
|
2011-06-18 08:05:35 +08:00
|
|
|
###########################################################
|
|
|
|
## Given a list of pairs, if multiple pairs have the same
|
|
|
|
## first components, keep only the first pair.
|
|
|
|
##
|
|
|
|
## $(1): list of pairs
|
|
|
|
## $(2): the separator word, such as ":", "=", etc.
|
|
|
|
define uniq-pairs-by-first-component
|
|
|
|
$(eval _upbfc_fc_set :=)\
|
|
|
|
$(strip $(foreach w,$(1), $(eval _first := $(word 1,$(subst $(2),$(space),$(w))))\
|
|
|
|
$(if $(filter $(_upbfc_fc_set),$(_first)),,$(w)\
|
|
|
|
$(eval _upbfc_fc_set += $(_first)))))\
|
|
|
|
$(eval _upbfc_fc_set :=)\
|
|
|
|
$(eval _first:=)
|
|
|
|
endef
|
|
|
|
|
2009-03-04 11:28:42 +08:00
|
|
|
###########################################################
|
|
|
|
## MODULE_TAG set operations
|
|
|
|
###########################################################
|
|
|
|
|
|
|
|
# Given a list of tags, return the targets that specify
|
|
|
|
# any of those tags.
|
|
|
|
# $(1): tag list
|
|
|
|
define modules-for-tag-list
|
2014-11-19 04:41:53 +08:00
|
|
|
$(sort $(foreach tag,$(1),$(foreach m,$(ALL_MODULE_NAME_TAGS.$(tag)),$(ALL_MODULES.$(m).INSTALLED))))
|
2009-03-04 11:28:42 +08:00
|
|
|
endef
|
|
|
|
|
|
|
|
# Same as modules-for-tag-list, but operates on
|
|
|
|
# ALL_MODULE_NAME_TAGS.
|
|
|
|
# $(1): tag list
|
|
|
|
define module-names-for-tag-list
|
|
|
|
$(sort $(foreach tag,$(1),$(ALL_MODULE_NAME_TAGS.$(tag))))
|
|
|
|
endef
|
|
|
|
|
|
|
|
# Given an accept and reject list, find the matching
|
|
|
|
# set of targets. If a target has multiple tags and
|
|
|
|
# any of them are rejected, the target is rejected.
|
|
|
|
# Reject overrides accept.
|
|
|
|
# $(1): list of tags to accept
|
|
|
|
# $(2): list of tags to reject
|
|
|
|
#TODO(dbort): do $(if $(strip $(1)),$(1),$(ALL_MODULE_TAGS))
|
2010-01-08 03:44:22 +08:00
|
|
|
#TODO(jbq): as of 20100106 nobody uses the second parameter
|
2009-03-04 11:28:42 +08:00
|
|
|
define get-tagged-modules
|
|
|
|
$(filter-out \
|
|
|
|
$(call modules-for-tag-list,$(2)), \
|
|
|
|
$(call modules-for-tag-list,$(1)))
|
|
|
|
endef
|
|
|
|
|
2009-04-10 10:31:12 +08:00
|
|
|
###########################################################
|
|
|
|
## Append a leaf to a base path. Properly deals with
|
|
|
|
## base paths ending in /.
|
|
|
|
##
|
|
|
|
## $(1): base path
|
|
|
|
## $(2): leaf path
|
|
|
|
###########################################################
|
|
|
|
|
|
|
|
define append-path
|
|
|
|
$(subst //,/,$(1)/$(2))
|
|
|
|
endef
|
|
|
|
|
2009-03-04 11:28:42 +08:00
|
|
|
|
|
|
|
###########################################################
|
|
|
|
## Package filtering
|
|
|
|
###########################################################
|
|
|
|
|
|
|
|
# Given a list of installed modules (short or long names)
|
|
|
|
# return a list of the packages (yes, .apk packages, not
|
|
|
|
# modules in general) that are overridden by this list and,
|
|
|
|
# therefore, should not be installed.
|
|
|
|
# $(1): mixed list of installed modules
|
|
|
|
# TODO: This is fragile; find a reliable way to get this information.
|
|
|
|
define _get-package-overrides
|
|
|
|
$(eval ### Discard any words containing slashes, unless they end in .apk, \
|
|
|
|
### in which case trim off the directory component and the suffix. \
|
|
|
|
### If there are no slashes, keep the entire word.)
|
|
|
|
$(eval _gpo_names := $(subst /,@@@ @@@,$(1)))
|
|
|
|
$(eval _gpo_names := \
|
|
|
|
$(filter %.apk,$(_gpo_names)) \
|
|
|
|
$(filter-out %@@@ @@@%,$(_gpo_names)))
|
|
|
|
$(eval _gpo_names := $(patsubst %.apk,%,$(_gpo_names)))
|
|
|
|
$(eval _gpo_names := $(patsubst @@@%,%,$(_gpo_names)))
|
|
|
|
|
|
|
|
$(eval ### Remove any remaining words that contain dots.)
|
|
|
|
$(eval _gpo_names := $(subst .,@@@ @@@,$(_gpo_names)))
|
|
|
|
$(eval _gpo_names := $(filter-out %@@@ @@@%,$(_gpo_names)))
|
|
|
|
|
|
|
|
$(eval ### Now we have a list of any words that could possibly refer to \
|
|
|
|
### packages, although there may be words that do not. Only \
|
|
|
|
### real packages will be present under PACKAGES.*, though.)
|
|
|
|
$(foreach _gpo_name,$(_gpo_names),$(PACKAGES.$(_gpo_name).OVERRIDES))
|
|
|
|
endef
|
|
|
|
|
|
|
|
define get-package-overrides
|
2011-12-23 01:46:19 +08:00
|
|
|
$(sort $(strip $(call _get-package-overrides,$(1))))
|
2009-03-04 11:28:42 +08:00
|
|
|
endef
|
|
|
|
|
|
|
|
###########################################################
|
|
|
|
## Output the command lines, or not
|
|
|
|
###########################################################
|
|
|
|
|
|
|
|
ifeq ($(strip $(SHOW_COMMANDS)),)
|
|
|
|
define pretty
|
|
|
|
@echo $1
|
|
|
|
endef
|
|
|
|
hide := @
|
|
|
|
else
|
|
|
|
define pretty
|
|
|
|
endef
|
|
|
|
hide :=
|
|
|
|
endif
|
|
|
|
|
|
|
|
###########################################################
|
|
|
|
## Dump the variables that are associated with targets
|
|
|
|
###########################################################
|
|
|
|
|
|
|
|
define dump-module-variables
|
|
|
|
@echo all_dependencies=$^
|
|
|
|
@echo PRIVATE_YACCFLAGS=$(PRIVATE_YACCFLAGS);
|
|
|
|
@echo PRIVATE_CFLAGS=$(PRIVATE_CFLAGS);
|
|
|
|
@echo PRIVATE_CPPFLAGS=$(PRIVATE_CPPFLAGS);
|
|
|
|
@echo PRIVATE_DEBUG_CFLAGS=$(PRIVATE_DEBUG_CFLAGS);
|
|
|
|
@echo PRIVATE_C_INCLUDES=$(PRIVATE_C_INCLUDES);
|
|
|
|
@echo PRIVATE_LDFLAGS=$(PRIVATE_LDFLAGS);
|
|
|
|
@echo PRIVATE_LDLIBS=$(PRIVATE_LDLIBS);
|
|
|
|
@echo PRIVATE_ARFLAGS=$(PRIVATE_ARFLAGS);
|
|
|
|
@echo PRIVATE_AAPT_FLAGS=$(PRIVATE_AAPT_FLAGS);
|
|
|
|
@echo PRIVATE_DX_FLAGS=$(PRIVATE_DX_FLAGS);
|
2010-02-02 03:13:32 +08:00
|
|
|
@echo PRIVATE_JAVACFLAGS=$(PRIVATE_JAVACFLAGS);
|
2009-03-04 11:28:42 +08:00
|
|
|
@echo PRIVATE_JAVA_LIBRARIES=$(PRIVATE_JAVA_LIBRARIES);
|
|
|
|
@echo PRIVATE_ALL_SHARED_LIBRARIES=$(PRIVATE_ALL_SHARED_LIBRARIES);
|
|
|
|
@echo PRIVATE_ALL_STATIC_LIBRARIES=$(PRIVATE_ALL_STATIC_LIBRARIES);
|
|
|
|
@echo PRIVATE_ALL_WHOLE_STATIC_LIBRARIES=$(PRIVATE_ALL_WHOLE_STATIC_LIBRARIES);
|
|
|
|
@echo PRIVATE_ALL_OBJECTS=$(PRIVATE_ALL_OBJECTS);
|
2011-02-05 12:15:00 +08:00
|
|
|
@echo PRIVATE_NO_CRT=$(PRIVATE_NO_CRT);
|
2009-03-04 11:28:42 +08:00
|
|
|
endef
|
|
|
|
|
|
|
|
###########################################################
|
|
|
|
## Commands for using sed to replace given variable values
|
|
|
|
###########################################################
|
|
|
|
|
|
|
|
define transform-variables
|
|
|
|
@mkdir -p $(dir $@)
|
|
|
|
@echo "Sed: $(if $(PRIVATE_MODULE),$(PRIVATE_MODULE),$@) <= $<"
|
|
|
|
$(hide) sed $(foreach var,$(REPLACE_VARS),-e "s/{{$(var)}}/$(subst /,\/,$(PWD)/$($(var)))/g") $< >$@
|
|
|
|
$(hide) if [ "$(suffix $@)" = ".sh" ]; then chmod a+rx $@; fi
|
|
|
|
endef
|
|
|
|
|
|
|
|
|
|
|
|
###########################################################
|
|
|
|
## Commands for munging the dependency files GCC generates
|
|
|
|
###########################################################
|
2012-09-08 08:04:06 +08:00
|
|
|
# $(1): the input .d file
|
|
|
|
# $(2): the output .P file
|
|
|
|
define transform-d-to-p-args
|
|
|
|
$(hide) cp $(1) $(2); \
|
|
|
|
sed -e 's/#.*//' -e 's/^[^:]*: *//' -e 's/ *\\$$//' \
|
|
|
|
-e '/^$$/ d' -e 's/$$/ :/' < $(1) >> $(2); \
|
|
|
|
rm -f $(1)
|
|
|
|
endef
|
2009-03-04 11:28:42 +08:00
|
|
|
|
|
|
|
define transform-d-to-p
|
2012-09-08 08:04:06 +08:00
|
|
|
$(call transform-d-to-p-args,$(@:%.o=%.d),$(@:%.o=%.P))
|
2009-03-04 11:28:42 +08:00
|
|
|
endef
|
|
|
|
|
|
|
|
###########################################################
|
|
|
|
## Commands for running lex
|
|
|
|
###########################################################
|
|
|
|
|
|
|
|
define transform-l-to-cpp
|
|
|
|
@mkdir -p $(dir $@)
|
|
|
|
@echo "Lex: $(PRIVATE_MODULE) <= $<"
|
|
|
|
$(hide) $(LEX) -o$@ $<
|
|
|
|
endef
|
|
|
|
|
|
|
|
###########################################################
|
|
|
|
## Commands for running yacc
|
|
|
|
##
|
|
|
|
## Because the extension of c++ files can change, the
|
|
|
|
## extension must be specified in $1.
|
|
|
|
## E.g, "$(call transform-y-to-cpp,.cpp)"
|
|
|
|
###########################################################
|
|
|
|
|
|
|
|
define transform-y-to-cpp
|
|
|
|
@mkdir -p $(dir $@)
|
|
|
|
@echo "Yacc: $(PRIVATE_MODULE) <= $<"
|
|
|
|
$(YACC) $(PRIVATE_YACCFLAGS) -o $@ $<
|
|
|
|
touch $(@:$1=$(YACC_HEADER_SUFFIX))
|
|
|
|
echo '#ifndef '$(@F:$1=_h) > $(@:$1=.h)
|
|
|
|
echo '#define '$(@F:$1=_h) >> $(@:$1=.h)
|
|
|
|
cat $(@:$1=$(YACC_HEADER_SUFFIX)) >> $(@:$1=.h)
|
|
|
|
echo '#endif' >> $(@:$1=.h)
|
|
|
|
endef
|
|
|
|
|
2010-07-16 08:17:52 +08:00
|
|
|
###########################################################
|
2012-10-30 07:06:00 +08:00
|
|
|
## Commands to compile RenderScript to Java
|
2010-07-16 08:17:52 +08:00
|
|
|
###########################################################
|
|
|
|
|
|
|
|
define transform-renderscripts-to-java-and-bc
|
|
|
|
@echo "RenderScript: $(PRIVATE_MODULE) <= $(PRIVATE_RS_SOURCE_FILES)"
|
|
|
|
$(hide) rm -rf $(PRIVATE_RS_OUTPUT_DIR)
|
|
|
|
$(hide) mkdir -p $(PRIVATE_RS_OUTPUT_DIR)/res/raw
|
|
|
|
$(hide) mkdir -p $(PRIVATE_RS_OUTPUT_DIR)/src
|
2011-05-26 08:16:22 +08:00
|
|
|
$(hide) $(PRIVATE_RS_CC) \
|
2010-07-31 09:37:29 +08:00
|
|
|
-o $(PRIVATE_RS_OUTPUT_DIR)/res/raw \
|
|
|
|
-p $(PRIVATE_RS_OUTPUT_DIR)/src \
|
2010-10-08 09:57:57 +08:00
|
|
|
-d $(PRIVATE_RS_OUTPUT_DIR) \
|
|
|
|
-a $@ -MD \
|
2011-08-11 04:53:05 +08:00
|
|
|
$(addprefix -target-api , $(PRIVATE_RS_TARGET_API)) \
|
2011-12-07 10:43:24 +08:00
|
|
|
$(PRIVATE_RS_FLAGS) \
|
2010-09-02 04:28:52 +08:00
|
|
|
$(foreach inc,$(PRIVATE_RS_INCLUDES),$(addprefix -I , $(inc))) \
|
2010-07-31 09:37:29 +08:00
|
|
|
$(PRIVATE_RS_SOURCE_FILES)
|
2010-07-16 08:17:52 +08:00
|
|
|
$(hide) mkdir -p $(dir $@)
|
|
|
|
$(hide) touch $@
|
|
|
|
endef
|
|
|
|
|
2012-11-29 08:52:41 +08:00
|
|
|
define transform-bc-to-so
|
2013-02-27 16:51:08 +08:00
|
|
|
@echo "Renderscript compatibility: $(notdir $@) <= $(notdir $<)"
|
2012-11-29 08:52:41 +08:00
|
|
|
$(hide) mkdir -p $(dir $@)
|
2012-12-18 06:23:14 +08:00
|
|
|
$(hide) $(BCC_COMPAT) -O3 -o $(dir $@)/$(notdir $(<:.bc=.o)) -fPIC -shared \
|
2014-09-03 10:09:35 +08:00
|
|
|
-rt-path $(RS_PREBUILT_CLCORE) -mtriple $(RS_COMPAT_TRIPLE) $<
|
2012-12-14 11:24:50 +08:00
|
|
|
$(hide) $(PRIVATE_CXX) -shared -Wl,-soname,$(notdir $@) -nostdlib \
|
2012-12-18 06:23:14 +08:00
|
|
|
-Wl,-rpath,\$$ORIGIN/../lib \
|
2013-01-19 08:27:23 +08:00
|
|
|
$(dir $@)/$(notdir $(<:.bc=.o)) \
|
2013-03-06 03:07:15 +08:00
|
|
|
$(RS_PREBUILT_COMPILER_RT) \
|
2014-11-16 06:25:33 +08:00
|
|
|
-o $@ $(TARGET_GLOBAL_LDFLAGS) -Wl,--hash-style=sysv -L prebuilts/gcc/ \
|
2015-03-06 03:29:30 +08:00
|
|
|
$(RS_PREBUILT_LIBPATH) -L $(TARGET_OUT_INTERMEDIATE_LIBRARIES) \
|
2013-03-28 07:51:38 +08:00
|
|
|
-lRSSupport -lm -lc
|
2012-11-29 08:52:41 +08:00
|
|
|
endef
|
|
|
|
|
2012-10-30 07:06:00 +08:00
|
|
|
###########################################################
|
|
|
|
## Commands to compile RenderScript to C++
|
|
|
|
###########################################################
|
|
|
|
|
|
|
|
define transform-renderscripts-to-cpp-and-bc
|
|
|
|
@echo "RenderScript: $(PRIVATE_MODULE) <= $(PRIVATE_RS_SOURCE_FILES)"
|
|
|
|
$(hide) rm -rf $(PRIVATE_RS_OUTPUT_DIR)
|
|
|
|
$(hide) mkdir -p $(PRIVATE_RS_OUTPUT_DIR)/
|
|
|
|
$(hide) $(PRIVATE_RS_CC) \
|
|
|
|
-o $(PRIVATE_RS_OUTPUT_DIR)/ \
|
|
|
|
-d $(PRIVATE_RS_OUTPUT_DIR) \
|
|
|
|
-a $@ -MD \
|
|
|
|
-reflect-c++ \
|
|
|
|
$(PRIVATE_RS_FLAGS) \
|
2014-05-29 07:17:09 +08:00
|
|
|
$(addprefix -I , $(PRIVATE_RS_INCLUDES)) \
|
2012-10-30 07:06:00 +08:00
|
|
|
$(PRIVATE_RS_SOURCE_FILES)
|
|
|
|
$(hide) mkdir -p $(dir $@)
|
|
|
|
$(hide) touch $@
|
|
|
|
endef
|
|
|
|
|
2009-03-04 11:28:42 +08:00
|
|
|
|
|
|
|
###########################################################
|
|
|
|
## Commands for running aidl
|
|
|
|
###########################################################
|
|
|
|
|
|
|
|
define transform-aidl-to-java
|
|
|
|
@mkdir -p $(dir $@)
|
|
|
|
@echo "Aidl: $(PRIVATE_MODULE) <= $<"
|
|
|
|
$(hide) $(AIDL) -d$(patsubst %.java,%.P,$@) $(PRIVATE_AIDL_FLAGS) $< $@
|
|
|
|
endef
|
|
|
|
#$(AIDL) $(PRIVATE_AIDL_FLAGS) $< - | indent -nut -br -npcs -l1000 > $@
|
|
|
|
|
|
|
|
|
2009-12-01 06:28:59 +08:00
|
|
|
###########################################################
|
|
|
|
## Commands for running java-event-log-tags.py
|
|
|
|
###########################################################
|
|
|
|
|
|
|
|
define transform-logtags-to-java
|
|
|
|
@mkdir -p $(dir $@)
|
|
|
|
@echo "logtags: $@ <= $<"
|
2010-02-17 06:32:08 +08:00
|
|
|
$(hide) $(JAVATAGS) -o $@ $^
|
2009-12-01 06:28:59 +08:00
|
|
|
endef
|
|
|
|
|
2009-03-04 11:28:42 +08:00
|
|
|
|
2010-11-03 09:43:16 +08:00
|
|
|
###########################################################
|
|
|
|
## Commands for running protoc to compile .proto into .java
|
|
|
|
###########################################################
|
|
|
|
|
|
|
|
define transform-proto-to-java
|
|
|
|
@mkdir -p $(dir $@)
|
|
|
|
@echo "Protoc: $@ <= $(PRIVATE_PROTO_SRC_FILES)"
|
|
|
|
@rm -rf $(PRIVATE_PROTO_JAVA_OUTPUT_DIR)
|
|
|
|
@mkdir -p $(PRIVATE_PROTO_JAVA_OUTPUT_DIR)
|
2013-07-25 18:44:53 +08:00
|
|
|
$(hide) for f in $(PRIVATE_PROTO_SRC_FILES); do \
|
|
|
|
$(PROTOC) \
|
2013-07-25 05:32:14 +08:00
|
|
|
$(addprefix --proto_path=, $(PRIVATE_PROTO_INCLUDES)) \
|
2013-07-26 03:28:19 +08:00
|
|
|
$(PRIVATE_PROTO_JAVA_OUTPUT_OPTION)="$(PRIVATE_PROTO_JAVA_OUTPUT_PARAMS):$(PRIVATE_PROTO_JAVA_OUTPUT_DIR)" \
|
2013-07-25 18:44:53 +08:00
|
|
|
$(PRIVATE_PROTOC_FLAGS) \
|
|
|
|
$$f || exit 33; \
|
|
|
|
done
|
2010-11-03 09:43:16 +08:00
|
|
|
$(hide) touch $@
|
|
|
|
endef
|
|
|
|
|
|
|
|
######################################################################
|
|
|
|
## Commands for running protoc to compile .proto into .pb.cc and .pb.h
|
|
|
|
######################################################################
|
|
|
|
define transform-proto-to-cc
|
|
|
|
@mkdir -p $(dir $@)
|
|
|
|
@echo "Protoc: $@ <= $<"
|
|
|
|
$(hide) $(PROTOC) \
|
|
|
|
$(addprefix --proto_path=, $(PRIVATE_PROTO_INCLUDES)) \
|
2010-11-06 02:30:58 +08:00
|
|
|
$(PRIVATE_PROTOC_FLAGS) \
|
2010-11-03 09:43:16 +08:00
|
|
|
--cpp_out=$(PRIVATE_PROTO_CC_OUTPUT_DIR) $<
|
|
|
|
endef
|
|
|
|
|
|
|
|
|
2009-03-04 11:28:42 +08:00
|
|
|
###########################################################
|
|
|
|
## Commands for running gcc to compile a C++ file
|
|
|
|
###########################################################
|
|
|
|
|
|
|
|
define transform-cpp-to-o
|
|
|
|
@mkdir -p $(dir $@)
|
|
|
|
@echo "target $(PRIVATE_ARM_MODE) C++: $(PRIVATE_MODULE) <= $<"
|
|
|
|
$(hide) $(PRIVATE_CXX) \
|
2011-04-19 02:45:44 +08:00
|
|
|
$(addprefix -I , $(PRIVATE_C_INCLUDES)) \
|
2012-07-12 03:14:56 +08:00
|
|
|
$(shell cat $(PRIVATE_IMPORT_INCLUDES)) \
|
2011-04-13 02:06:35 +08:00
|
|
|
$(addprefix -isystem ,\
|
|
|
|
$(if $(PRIVATE_NO_DEFAULT_COMPILER_FLAGS),, \
|
|
|
|
$(filter-out $(PRIVATE_C_INCLUDES), \
|
2011-04-19 02:45:44 +08:00
|
|
|
$(PRIVATE_TARGET_PROJECT_INCLUDES) \
|
2011-04-13 02:06:35 +08:00
|
|
|
$(PRIVATE_TARGET_C_INCLUDES)))) \
|
2009-03-04 11:28:42 +08:00
|
|
|
-c \
|
|
|
|
$(if $(PRIVATE_NO_DEFAULT_COMPILER_FLAGS),, \
|
2010-07-14 05:55:47 +08:00
|
|
|
$(PRIVATE_TARGET_GLOBAL_CFLAGS) \
|
|
|
|
$(PRIVATE_TARGET_GLOBAL_CPPFLAGS) \
|
2009-03-04 11:28:42 +08:00
|
|
|
$(PRIVATE_ARM_CFLAGS) \
|
|
|
|
) \
|
2011-05-11 12:50:58 +08:00
|
|
|
$(PRIVATE_RTTI_FLAG) \
|
2009-03-04 11:28:42 +08:00
|
|
|
$(PRIVATE_CFLAGS) \
|
|
|
|
$(PRIVATE_CPPFLAGS) \
|
|
|
|
$(PRIVATE_DEBUG_CFLAGS) \
|
2015-02-22 04:45:26 +08:00
|
|
|
$(GLOBAL_CFLAGS_NO_OVERRIDE) \
|
|
|
|
$(GLOBAL_CPPFLAGS_NO_OVERRIDE) \
|
2011-12-22 01:24:09 +08:00
|
|
|
-MD -MF $(patsubst %.o,%.d,$@) -o $@ $<
|
2011-01-29 06:14:47 +08:00
|
|
|
$(transform-d-to-p)
|
2009-03-04 11:28:42 +08:00
|
|
|
endef
|
|
|
|
|
|
|
|
|
|
|
|
###########################################################
|
|
|
|
## Commands for running gcc to compile a C file
|
|
|
|
###########################################################
|
|
|
|
|
|
|
|
# $(1): extra flags
|
|
|
|
define transform-c-or-s-to-o-no-deps
|
|
|
|
@mkdir -p $(dir $@)
|
|
|
|
$(hide) $(PRIVATE_CC) \
|
2011-04-19 02:45:44 +08:00
|
|
|
$(addprefix -I , $(PRIVATE_C_INCLUDES)) \
|
2012-07-12 03:14:56 +08:00
|
|
|
$(shell cat $(PRIVATE_IMPORT_INCLUDES)) \
|
2011-04-13 02:06:35 +08:00
|
|
|
$(addprefix -isystem ,\
|
|
|
|
$(if $(PRIVATE_NO_DEFAULT_COMPILER_FLAGS),, \
|
|
|
|
$(filter-out $(PRIVATE_C_INCLUDES), \
|
2011-04-19 02:45:44 +08:00
|
|
|
$(PRIVATE_TARGET_PROJECT_INCLUDES) \
|
2011-04-13 02:06:35 +08:00
|
|
|
$(PRIVATE_TARGET_C_INCLUDES)))) \
|
2009-03-04 11:28:42 +08:00
|
|
|
-c \
|
|
|
|
$(if $(PRIVATE_NO_DEFAULT_COMPILER_FLAGS),, \
|
2010-07-14 05:55:47 +08:00
|
|
|
$(PRIVATE_TARGET_GLOBAL_CFLAGS) \
|
2014-11-26 16:53:46 +08:00
|
|
|
$(PRIVATE_TARGET_GLOBAL_CONLYFLAGS) \
|
2009-03-04 11:28:42 +08:00
|
|
|
$(PRIVATE_ARM_CFLAGS) \
|
|
|
|
) \
|
2012-08-11 07:30:42 +08:00
|
|
|
$(1) \
|
2011-12-22 01:24:09 +08:00
|
|
|
-MD -MF $(patsubst %.o,%.d,$@) -o $@ $<
|
2009-03-04 11:28:42 +08:00
|
|
|
endef
|
|
|
|
|
|
|
|
define transform-c-to-o-no-deps
|
|
|
|
@echo "target $(PRIVATE_ARM_MODE) C: $(PRIVATE_MODULE) <= $<"
|
2015-02-22 04:45:26 +08:00
|
|
|
$(call transform-c-or-s-to-o-no-deps, \
|
|
|
|
$(PRIVATE_CFLAGS) \
|
|
|
|
$(PRIVATE_CONLYFLAGS) \
|
|
|
|
$(PRIVATE_DEBUG_CFLAGS) \
|
|
|
|
$(GLOBAL_CFLAGS_NO_OVERRIDE))
|
2009-03-04 11:28:42 +08:00
|
|
|
endef
|
|
|
|
|
|
|
|
define transform-s-to-o-no-deps
|
|
|
|
@echo "target asm: $(PRIVATE_MODULE) <= $<"
|
|
|
|
$(call transform-c-or-s-to-o-no-deps, $(PRIVATE_ASFLAGS))
|
|
|
|
endef
|
|
|
|
|
|
|
|
define transform-c-to-o
|
|
|
|
$(transform-c-to-o-no-deps)
|
2011-01-29 06:14:47 +08:00
|
|
|
$(transform-d-to-p)
|
2009-03-04 11:28:42 +08:00
|
|
|
endef
|
|
|
|
|
|
|
|
define transform-s-to-o
|
|
|
|
$(transform-s-to-o-no-deps)
|
2011-01-29 06:14:47 +08:00
|
|
|
$(transform-d-to-p)
|
2009-03-04 11:28:42 +08:00
|
|
|
endef
|
|
|
|
|
2014-06-06 10:05:47 +08:00
|
|
|
# YASM compilation
|
|
|
|
define transform-asm-to-o
|
|
|
|
@mkdir -p $(dir $@)
|
|
|
|
$(hide) $(YASM) \
|
|
|
|
$(addprefix -I , $(PRIVATE_C_INCLUDES)) \
|
2015-03-10 09:57:40 +08:00
|
|
|
$($(PRIVATE_2ND_ARCH_VAR_PREFIX)TARGET_GLOBAL_YASM_FLAGS) \
|
2014-06-06 10:05:47 +08:00
|
|
|
$(PRIVATE_ASFLAGS) \
|
|
|
|
-o $@ $<
|
|
|
|
endef
|
|
|
|
|
2009-05-14 22:00:09 +08:00
|
|
|
###########################################################
|
|
|
|
## Commands for running gcc to compile an Objective-C file
|
|
|
|
## This should never happen for target builds but this
|
|
|
|
## will error at build time.
|
|
|
|
###########################################################
|
|
|
|
|
|
|
|
define transform-m-to-o-no-deps
|
|
|
|
@echo "target ObjC: $(PRIVATE_MODULE) <= $<"
|
2012-08-11 07:30:42 +08:00
|
|
|
$(call transform-c-or-s-to-o-no-deps, $(PRIVATE_CFLAGS) $(PRIVATE_DEBUG_CFLAGS))
|
2009-05-14 22:00:09 +08:00
|
|
|
endef
|
|
|
|
|
|
|
|
define transform-m-to-o
|
|
|
|
$(transform-m-to-o-no-deps)
|
2011-01-29 06:14:47 +08:00
|
|
|
$(transform-d-to-p)
|
2009-05-14 22:00:09 +08:00
|
|
|
endef
|
|
|
|
|
2009-03-04 11:28:42 +08:00
|
|
|
###########################################################
|
|
|
|
## Commands for running gcc to compile a host C++ file
|
|
|
|
###########################################################
|
|
|
|
|
|
|
|
define transform-host-cpp-to-o
|
|
|
|
@mkdir -p $(dir $@)
|
|
|
|
@echo "host C++: $(PRIVATE_MODULE) <= $<"
|
|
|
|
$(hide) $(PRIVATE_CXX) \
|
2011-04-19 02:45:44 +08:00
|
|
|
$(addprefix -I , $(PRIVATE_C_INCLUDES)) \
|
2012-07-12 03:14:56 +08:00
|
|
|
$(shell cat $(PRIVATE_IMPORT_INCLUDES)) \
|
2011-04-19 02:45:44 +08:00
|
|
|
$(addprefix -isystem ,\
|
2009-03-04 11:28:42 +08:00
|
|
|
$(if $(PRIVATE_NO_DEFAULT_COMPILER_FLAGS),, \
|
2011-04-19 02:45:44 +08:00
|
|
|
$(filter-out $(PRIVATE_C_INCLUDES), \
|
|
|
|
$(HOST_PROJECT_INCLUDES) \
|
2013-12-10 19:07:41 +08:00
|
|
|
$(PRIVATE_HOST_C_INCLUDES)))) \
|
2009-03-04 11:28:42 +08:00
|
|
|
-c \
|
|
|
|
$(if $(PRIVATE_NO_DEFAULT_COMPILER_FLAGS),, \
|
2013-12-10 19:07:41 +08:00
|
|
|
$(PRIVATE_HOST_GLOBAL_CFLAGS) \
|
|
|
|
$(PRIVATE_HOST_GLOBAL_CPPFLAGS) \
|
2009-03-04 11:28:42 +08:00
|
|
|
) \
|
|
|
|
$(PRIVATE_CFLAGS) \
|
|
|
|
$(PRIVATE_CPPFLAGS) \
|
|
|
|
$(PRIVATE_DEBUG_CFLAGS) \
|
2011-12-22 01:24:09 +08:00
|
|
|
-MD -MF $(patsubst %.o,%.d,$@) -o $@ $<
|
2009-03-04 11:28:42 +08:00
|
|
|
$(transform-d-to-p)
|
|
|
|
endef
|
|
|
|
|
|
|
|
|
|
|
|
###########################################################
|
|
|
|
## Commands for running gcc to compile a host C file
|
|
|
|
###########################################################
|
|
|
|
|
|
|
|
# $(1): extra flags
|
|
|
|
define transform-host-c-or-s-to-o-no-deps
|
|
|
|
@mkdir -p $(dir $@)
|
|
|
|
$(hide) $(PRIVATE_CC) \
|
2011-04-19 02:45:44 +08:00
|
|
|
$(addprefix -I , $(PRIVATE_C_INCLUDES)) \
|
2012-07-12 03:14:56 +08:00
|
|
|
$(shell cat $(PRIVATE_IMPORT_INCLUDES)) \
|
2011-04-19 02:45:44 +08:00
|
|
|
$(addprefix -isystem ,\
|
2009-03-04 11:28:42 +08:00
|
|
|
$(if $(PRIVATE_NO_DEFAULT_COMPILER_FLAGS),, \
|
2011-04-19 02:45:44 +08:00
|
|
|
$(filter-out $(PRIVATE_C_INCLUDES), \
|
|
|
|
$(HOST_PROJECT_INCLUDES) \
|
2013-12-10 19:07:41 +08:00
|
|
|
$(PRIVATE_HOST_C_INCLUDES)))) \
|
2009-03-04 11:28:42 +08:00
|
|
|
-c \
|
|
|
|
$(if $(PRIVATE_NO_DEFAULT_COMPILER_FLAGS),, \
|
2013-12-10 19:07:41 +08:00
|
|
|
$(PRIVATE_HOST_GLOBAL_CFLAGS) \
|
2014-11-26 16:53:46 +08:00
|
|
|
$(PRIVATE_HOST_GLOBAL_CONLYFLAGS) \
|
2009-03-04 11:28:42 +08:00
|
|
|
) \
|
|
|
|
$(1) \
|
2011-12-22 01:24:09 +08:00
|
|
|
-MD -MF $(patsubst %.o,%.d,$@) -o $@ $<
|
2009-03-04 11:28:42 +08:00
|
|
|
endef
|
|
|
|
|
|
|
|
define transform-host-c-to-o-no-deps
|
|
|
|
@echo "host C: $(PRIVATE_MODULE) <= $<"
|
2012-08-16 01:59:10 +08:00
|
|
|
$(call transform-host-c-or-s-to-o-no-deps, $(PRIVATE_CFLAGS) $(PRIVATE_CONLYFLAGS) $(PRIVATE_DEBUG_CFLAGS))
|
2009-03-04 11:28:42 +08:00
|
|
|
endef
|
|
|
|
|
|
|
|
define transform-host-s-to-o-no-deps
|
|
|
|
@echo "host asm: $(PRIVATE_MODULE) <= $<"
|
|
|
|
$(call transform-host-c-or-s-to-o-no-deps, $(PRIVATE_ASFLAGS))
|
|
|
|
endef
|
|
|
|
|
|
|
|
define transform-host-c-to-o
|
|
|
|
$(transform-host-c-to-o-no-deps)
|
|
|
|
$(transform-d-to-p)
|
|
|
|
endef
|
|
|
|
|
|
|
|
define transform-host-s-to-o
|
|
|
|
$(transform-host-s-to-o-no-deps)
|
|
|
|
$(transform-d-to-p)
|
2009-05-14 22:00:09 +08:00
|
|
|
endef
|
|
|
|
|
|
|
|
###########################################################
|
|
|
|
## Commands for running gcc to compile a host Objective-C file
|
|
|
|
###########################################################
|
|
|
|
|
|
|
|
define transform-host-m-to-o-no-deps
|
|
|
|
@echo "host ObjC: $(PRIVATE_MODULE) <= $<"
|
2012-08-11 07:30:42 +08:00
|
|
|
$(call transform-host-c-or-s-to-o-no-deps, $(PRIVATE_CFLAGS) $(PRIVATE_DEBUG_CFLAGS))
|
2009-05-14 22:00:09 +08:00
|
|
|
endef
|
|
|
|
|
2011-02-11 23:19:31 +08:00
|
|
|
define transform-host-m-to-o
|
2009-05-14 22:00:09 +08:00
|
|
|
$(transform-host-m-to-o-no-deps)
|
|
|
|
$(transform-d-to-p)
|
2009-03-04 11:28:42 +08:00
|
|
|
endef
|
|
|
|
|
2015-03-11 09:03:11 +08:00
|
|
|
|
|
|
|
###########################################################
|
|
|
|
## Rules to compile a single C/C++ source with ../ in the path
|
|
|
|
###########################################################
|
|
|
|
# Replace "../" in object paths with $(DOTDOT_REPLACEMENT).
|
|
|
|
DOTDOT_REPLACEMENT := dotdot/
|
|
|
|
|
|
|
|
## Rule to compile a C++ source file with ../ in the path.
|
|
|
|
## Must be called with $(eval).
|
|
|
|
# $(1): the C++ source file in LOCAL_SRC_FILES.
|
|
|
|
# $(2): the additional dependencies.
|
|
|
|
# $(3): the variable name to collect the output object file.
|
|
|
|
define compile-dotdot-cpp-file
|
|
|
|
o := $(intermediates)/$(patsubst %$(LOCAL_CPP_EXTENSION),%.o,$(subst ../,$(DOTDOT_REPLACEMENT),$(1)))
|
|
|
|
$$(o) : $(TOPDIR)$(LOCAL_PATH)/$(1) $(2)
|
|
|
|
$$(transform-$$(PRIVATE_HOST)cpp-to-o)
|
|
|
|
-include $$(o:%.o=%.P)
|
|
|
|
$(3) += $$(o)
|
|
|
|
endef
|
|
|
|
|
|
|
|
## Rule to compile a C source file with ../ in the path.
|
|
|
|
## Must be called with $(eval).
|
|
|
|
# $(1): the C source file in LOCAL_SRC_FILES.
|
|
|
|
# $(2): the additional dependencies.
|
|
|
|
# $(3): the variable name to collect the output object file.
|
|
|
|
define compile-dotdot-c-file
|
|
|
|
o := $(intermediates)/$(patsubst %.c,%.o,$(subst ../,$(DOTDOT_REPLACEMENT),$(1)))
|
|
|
|
$$(o) : $(TOPDIR)$(LOCAL_PATH)/$(1) $(2)
|
|
|
|
$$(transform-$$(PRIVATE_HOST)c-to-o)
|
|
|
|
-include $$(o:%.o=%.P)
|
|
|
|
$(3) += $$(o)
|
|
|
|
endef
|
|
|
|
|
|
|
|
## Rule to compile a .S source file with ../ in the path.
|
|
|
|
## Must be called with $(eval).
|
|
|
|
# $(1): the .S source file in LOCAL_SRC_FILES.
|
|
|
|
# $(2): the additional dependencies.
|
|
|
|
# $(3): the variable name to collect the output object file.
|
|
|
|
define compile-dotdot-s-file
|
|
|
|
o := $(intermediates)/$(patsubst %.S,%.o,$(subst ../,$(DOTDOT_REPLACEMENT),$(1)))
|
|
|
|
$$(o) : $(TOPDIR)$(LOCAL_PATH)/$(1) $(2)
|
|
|
|
$$(transform-$$(PRIVATE_HOST)s-to-o)
|
|
|
|
-include $$(o:%.o=%.P)
|
|
|
|
$(3) += $$(o)
|
|
|
|
endef
|
|
|
|
|
|
|
|
## Rule to compile a .s source file with ../ in the path.
|
|
|
|
## Must be called with $(eval).
|
|
|
|
# $(1): the .s source file in LOCAL_SRC_FILES.
|
|
|
|
# $(2): the additional dependencies.
|
|
|
|
# $(3): the variable name to collect the output object file.
|
|
|
|
define compile-dotdot-s-file-no-deps
|
|
|
|
o := $(intermediates)/$(patsubst %.s,%.o,$(subst ../,$(DOTDOT_REPLACEMENT),$(1)))
|
|
|
|
$$(o) : $(TOPDIR)$(LOCAL_PATH)/$(1) $(2)
|
|
|
|
$$(transform-$$(PRIVATE_HOST)s-to-o-no-deps)
|
|
|
|
$(3) += $$(o)
|
|
|
|
endef
|
|
|
|
|
2009-03-04 11:28:42 +08:00
|
|
|
###########################################################
|
|
|
|
## Commands for running ar
|
|
|
|
###########################################################
|
|
|
|
|
2010-05-28 02:55:39 +08:00
|
|
|
define _concat-if-arg2-not-empty
|
|
|
|
$(if $(2),$(hide) $(1) $(2))
|
|
|
|
endef
|
|
|
|
|
|
|
|
# Split long argument list into smaller groups and call the command repeatedly
|
2012-06-15 23:03:52 +08:00
|
|
|
# Call the command at least once even if there are no arguments, as otherwise
|
|
|
|
# the output file won't be created.
|
2010-05-28 02:55:39 +08:00
|
|
|
#
|
|
|
|
# $(1): the command without arguments
|
|
|
|
# $(2): the arguments
|
|
|
|
define split-long-arguments
|
2012-06-15 23:03:52 +08:00
|
|
|
$(hide) $(1) $(wordlist 1,500,$(2))
|
2010-05-28 02:55:39 +08:00
|
|
|
$(call _concat-if-arg2-not-empty,$(1),$(wordlist 501,1000,$(2)))
|
|
|
|
$(call _concat-if-arg2-not-empty,$(1),$(wordlist 1001,1500,$(2)))
|
|
|
|
$(call _concat-if-arg2-not-empty,$(1),$(wordlist 1501,2000,$(2)))
|
|
|
|
$(call _concat-if-arg2-not-empty,$(1),$(wordlist 2001,2500,$(2)))
|
|
|
|
$(call _concat-if-arg2-not-empty,$(1),$(wordlist 2501,3000,$(2)))
|
|
|
|
$(call _concat-if-arg2-not-empty,$(1),$(wordlist 3001,99999,$(2)))
|
|
|
|
endef
|
|
|
|
|
2011-01-28 10:48:00 +08:00
|
|
|
# $(1): the full path of the source static library.
|
|
|
|
define _extract-and-include-single-target-whole-static-lib
|
2014-05-24 03:26:51 +08:00
|
|
|
@echo "preparing StaticLib: $(PRIVATE_MODULE) [including $(strip $(1))]"
|
2011-01-28 10:48:00 +08:00
|
|
|
$(hide) ldir=$(PRIVATE_INTERMEDIATES_DIR)/WHOLE/$(basename $(notdir $(1)))_objs;\
|
|
|
|
rm -rf $$ldir; \
|
|
|
|
mkdir -p $$ldir; \
|
2015-01-08 09:14:03 +08:00
|
|
|
cp $(1) $$ldir; \
|
|
|
|
lib_to_include=$$ldir/$(notdir $(1)); \
|
2011-01-28 10:48:00 +08:00
|
|
|
filelist=; \
|
2015-01-08 09:14:03 +08:00
|
|
|
subdir=0; \
|
2014-04-18 01:03:35 +08:00
|
|
|
for f in `$($(PRIVATE_2ND_ARCH_VAR_PREFIX)TARGET_AR) t $(1)`; do \
|
2015-01-08 09:14:03 +08:00
|
|
|
if [ -e $$ldir/$$f ]; then \
|
|
|
|
mkdir $$ldir/$$subdir; \
|
|
|
|
ext=$$subdir/; \
|
|
|
|
subdir=$$((subdir+1)); \
|
|
|
|
$($(PRIVATE_2ND_ARCH_VAR_PREFIX)TARGET_AR) m $$lib_to_include $$f; \
|
|
|
|
else \
|
|
|
|
ext=; \
|
|
|
|
fi; \
|
|
|
|
$($(PRIVATE_2ND_ARCH_VAR_PREFIX)TARGET_AR) p $$lib_to_include $$f > $$ldir/$$ext$$f; \
|
|
|
|
filelist="$$filelist $$ldir/$$ext$$f"; \
|
2011-01-28 10:48:00 +08:00
|
|
|
done ; \
|
2014-01-16 08:02:16 +08:00
|
|
|
$($(PRIVATE_2ND_ARCH_VAR_PREFIX)TARGET_AR) $($(PRIVATE_2ND_ARCH_VAR_PREFIX)TARGET_GLOBAL_ARFLAGS) \
|
|
|
|
$(PRIVATE_ARFLAGS) $@ $$filelist
|
2011-01-28 10:48:00 +08:00
|
|
|
|
|
|
|
endef
|
|
|
|
|
2014-05-24 03:26:51 +08:00
|
|
|
# $(1): the full path of the source static library.
|
|
|
|
define extract-and-include-whole-static-libs-first
|
|
|
|
$(if $(strip $(1)),
|
|
|
|
@echo "preparing StaticLib: $(PRIVATE_MODULE) [including $(strip $(1))]"
|
|
|
|
$(hide) cp $(1) $@)
|
|
|
|
endef
|
|
|
|
|
2009-10-22 02:12:56 +08:00
|
|
|
define extract-and-include-target-whole-static-libs
|
2014-05-24 03:26:51 +08:00
|
|
|
$(call extract-and-include-whole-static-libs-first, $(firstword $(PRIVATE_ALL_WHOLE_STATIC_LIBRARIES)))
|
|
|
|
$(foreach lib,$(wordlist 2,999,$(PRIVATE_ALL_WHOLE_STATIC_LIBRARIES)), \
|
2011-01-28 10:48:00 +08:00
|
|
|
$(call _extract-and-include-single-target-whole-static-lib, $(lib)))
|
2009-05-28 10:41:07 +08:00
|
|
|
endef
|
|
|
|
|
2009-03-04 11:28:42 +08:00
|
|
|
# Explicitly delete the archive first so that ar doesn't
|
|
|
|
# try to add to an existing archive.
|
|
|
|
define transform-o-to-static-lib
|
|
|
|
@mkdir -p $(dir $@)
|
|
|
|
@rm -f $@
|
2009-10-22 02:12:56 +08:00
|
|
|
$(extract-and-include-target-whole-static-libs)
|
2009-05-28 10:41:07 +08:00
|
|
|
@echo "target StaticLib: $(PRIVATE_MODULE) ($@)"
|
2014-04-18 01:03:35 +08:00
|
|
|
$(call split-long-arguments,$($(PRIVATE_2ND_ARCH_VAR_PREFIX)TARGET_AR) \
|
|
|
|
$($(PRIVATE_2ND_ARCH_VAR_PREFIX)TARGET_GLOBAL_ARFLAGS) \
|
2014-01-16 08:02:16 +08:00
|
|
|
$(PRIVATE_ARFLAGS) $@,$(filter %.o, $^))
|
2009-03-04 11:28:42 +08:00
|
|
|
endef
|
|
|
|
|
|
|
|
###########################################################
|
|
|
|
## Commands for running host ar
|
|
|
|
###########################################################
|
|
|
|
|
2011-01-28 10:48:00 +08:00
|
|
|
# $(1): the full path of the source static library.
|
|
|
|
define _extract-and-include-single-host-whole-static-lib
|
2014-05-24 03:26:51 +08:00
|
|
|
@echo "preparing StaticLib: $(PRIVATE_MODULE) [including $(strip $(1))]"
|
2011-01-28 10:48:00 +08:00
|
|
|
$(hide) ldir=$(PRIVATE_INTERMEDIATES_DIR)/WHOLE/$(basename $(notdir $(1)))_objs;\
|
|
|
|
rm -rf $$ldir; \
|
|
|
|
mkdir -p $$ldir; \
|
2015-01-08 09:14:03 +08:00
|
|
|
cp $(1) $$ldir; \
|
|
|
|
lib_to_include=$$ldir/$(notdir $(1)); \
|
2011-01-28 10:48:00 +08:00
|
|
|
filelist=; \
|
2015-01-08 09:14:03 +08:00
|
|
|
subdir=0; \
|
2014-04-18 01:03:35 +08:00
|
|
|
for f in `$($(PRIVATE_2ND_ARCH_VAR_PREFIX)HOST_AR) t $(1) | \grep '\.o$$'`; do \
|
2015-01-08 09:14:03 +08:00
|
|
|
if [ -e $$ldir/$$f ]; then \
|
|
|
|
mkdir $$ldir/$$subdir; \
|
|
|
|
ext=$$subdir/; \
|
|
|
|
subdir=$$((subdir+1)); \
|
|
|
|
$($(PRIVATE_2ND_ARCH_VAR_PREFIX)HOST_AR) m $$lib_to_include $$f; \
|
|
|
|
else \
|
|
|
|
ext=; \
|
|
|
|
fi; \
|
|
|
|
$($(PRIVATE_2ND_ARCH_VAR_PREFIX)HOST_AR) p $$lib_to_include $$f > $$ldir/$$ext$$f; \
|
|
|
|
filelist="$$filelist $$ldir/$$ext$$f"; \
|
2011-01-28 10:48:00 +08:00
|
|
|
done ; \
|
2014-04-18 01:03:35 +08:00
|
|
|
$($(PRIVATE_2ND_ARCH_VAR_PREFIX)HOST_AR) $($(PRIVATE_2ND_ARCH_VAR_PREFIX)HOST_GLOBAL_ARFLAGS) \
|
|
|
|
$(PRIVATE_ARFLAGS) $@ $$filelist
|
2011-01-28 10:48:00 +08:00
|
|
|
|
|
|
|
endef
|
|
|
|
|
2009-10-22 02:12:56 +08:00
|
|
|
define extract-and-include-host-whole-static-libs
|
2014-05-24 03:26:51 +08:00
|
|
|
$(call extract-and-include-whole-static-libs-first, $(firstword $(PRIVATE_ALL_WHOLE_STATIC_LIBRARIES)))
|
|
|
|
$(foreach lib,$(wordlist 2,999,$(PRIVATE_ALL_WHOLE_STATIC_LIBRARIES)), \
|
2011-01-28 10:48:00 +08:00
|
|
|
$(call _extract-and-include-single-host-whole-static-lib, $(lib)))
|
2009-10-22 02:12:56 +08:00
|
|
|
endef
|
|
|
|
|
2009-03-04 11:28:42 +08:00
|
|
|
# Explicitly delete the archive first so that ar doesn't
|
|
|
|
# try to add to an existing archive.
|
|
|
|
define transform-host-o-to-static-lib
|
|
|
|
@mkdir -p $(dir $@)
|
|
|
|
@rm -f $@
|
2009-10-22 02:12:56 +08:00
|
|
|
$(extract-and-include-host-whole-static-libs)
|
2009-10-16 04:01:36 +08:00
|
|
|
@echo "host StaticLib: $(PRIVATE_MODULE) ($@)"
|
2014-04-18 01:03:35 +08:00
|
|
|
$(call split-long-arguments,$($(PRIVATE_2ND_ARCH_VAR_PREFIX)HOST_AR) \
|
|
|
|
$($(PRIVATE_2ND_ARCH_VAR_PREFIX)HOST_GLOBAL_ARFLAGS) \
|
|
|
|
$(PRIVATE_ARFLAGS) $@,$(filter %.o, $^))
|
2009-03-04 11:28:42 +08:00
|
|
|
endef
|
|
|
|
|
|
|
|
|
|
|
|
###########################################################
|
|
|
|
## Commands for running gcc to link a shared library or package
|
|
|
|
###########################################################
|
|
|
|
|
|
|
|
# ld just seems to be so finicky with command order that we allow
|
|
|
|
# it to be overriden en-masse see combo/linux-arm.make for an example.
|
|
|
|
ifneq ($(HOST_CUSTOM_LD_COMMAND),true)
|
|
|
|
define transform-host-o-to-shared-lib-inner
|
2011-01-29 06:14:47 +08:00
|
|
|
$(hide) $(PRIVATE_CXX) \
|
2014-04-18 01:03:35 +08:00
|
|
|
-Wl,-rpath-link=$($(PRIVATE_2ND_ARCH_VAR_PREFIX)HOST_OUT_INTERMEDIATE_LIBRARIES) \
|
|
|
|
-Wl,-rpath,\$$ORIGIN/../$(notdir $($(PRIVATE_2ND_ARCH_VAR_PREFIX)HOST_OUT_SHARED_LIBRARIES)) \
|
2009-03-04 11:28:42 +08:00
|
|
|
-shared -Wl,-soname,$(notdir $@) \
|
2014-04-18 01:03:35 +08:00
|
|
|
$($(PRIVATE_2ND_ARCH_VAR_PREFIX)HOST_GLOBAL_LD_DIRS) \
|
2009-03-04 11:28:42 +08:00
|
|
|
$(if $(PRIVATE_NO_DEFAULT_COMPILER_FLAGS),, \
|
2013-12-10 19:07:41 +08:00
|
|
|
$(PRIVATE_HOST_GLOBAL_LDFLAGS) \
|
2009-03-04 11:28:42 +08:00
|
|
|
) \
|
2014-02-12 22:24:41 +08:00
|
|
|
$(PRIVATE_LDFLAGS) \
|
2009-03-04 11:28:42 +08:00
|
|
|
$(PRIVATE_ALL_OBJECTS) \
|
|
|
|
-Wl,--whole-archive \
|
|
|
|
$(call normalize-host-libraries,$(PRIVATE_ALL_WHOLE_STATIC_LIBRARIES)) \
|
|
|
|
-Wl,--no-whole-archive \
|
2011-04-26 05:22:41 +08:00
|
|
|
$(if $(PRIVATE_GROUP_STATIC_LIBRARIES),-Wl$(comma)--start-group) \
|
2009-03-04 11:28:42 +08:00
|
|
|
$(call normalize-host-libraries,$(PRIVATE_ALL_STATIC_LIBRARIES)) \
|
2011-04-26 05:22:41 +08:00
|
|
|
$(if $(PRIVATE_GROUP_STATIC_LIBRARIES),-Wl$(comma)--end-group) \
|
2015-01-24 08:12:57 +08:00
|
|
|
$(if $(filter true,$(NATIVE_COVERAGE)),-lgcov) \
|
2015-01-26 08:20:57 +08:00
|
|
|
$(if $(filter true,$(NATIVE_COVERAGE)),$(PRIVATE_HOST_LIBPROFILE_RT)) \
|
2009-03-04 11:28:42 +08:00
|
|
|
$(call normalize-host-libraries,$(PRIVATE_ALL_SHARED_LIBRARIES)) \
|
|
|
|
-o $@ \
|
|
|
|
$(PRIVATE_LDLIBS)
|
|
|
|
endef
|
|
|
|
endif
|
|
|
|
|
|
|
|
define transform-host-o-to-shared-lib
|
|
|
|
@mkdir -p $(dir $@)
|
|
|
|
@echo "host SharedLib: $(PRIVATE_MODULE) ($@)"
|
2011-01-29 06:14:47 +08:00
|
|
|
$(transform-host-o-to-shared-lib-inner)
|
2009-03-04 11:28:42 +08:00
|
|
|
endef
|
|
|
|
|
|
|
|
define transform-host-o-to-package
|
|
|
|
@mkdir -p $(dir $@)
|
|
|
|
@echo "host Package: $(PRIVATE_MODULE) ($@)"
|
2011-01-29 06:14:47 +08:00
|
|
|
$(transform-host-o-to-shared-lib-inner)
|
2009-03-04 11:28:42 +08:00
|
|
|
endef
|
|
|
|
|
|
|
|
|
|
|
|
###########################################################
|
|
|
|
## Commands for running gcc to link a shared library or package
|
|
|
|
###########################################################
|
|
|
|
|
|
|
|
define transform-o-to-shared-lib-inner
|
2011-01-29 06:14:47 +08:00
|
|
|
$(hide) $(PRIVATE_CXX) \
|
2014-11-14 02:15:46 +08:00
|
|
|
-nostdlib -Wl,-soname,$(notdir $@) \
|
|
|
|
-Wl,--gc-sections \
|
2015-01-25 21:15:12 +08:00
|
|
|
$(if $(filter true,$(PRIVATE_CLANG)),-shared,-Wl$(comma)-shared) \
|
2010-07-14 05:55:47 +08:00
|
|
|
$(PRIVATE_TARGET_GLOBAL_LD_DIRS) \
|
2014-11-14 02:15:46 +08:00
|
|
|
$(if $(filter true,$(PRIVATE_NO_CRT)),,$(PRIVATE_TARGET_CRTBEGIN_SO_O)) \
|
2009-03-04 11:28:42 +08:00
|
|
|
$(PRIVATE_ALL_OBJECTS) \
|
|
|
|
-Wl,--whole-archive \
|
2011-01-25 15:25:36 +08:00
|
|
|
$(call normalize-target-libraries,$(PRIVATE_ALL_WHOLE_STATIC_LIBRARIES)) \
|
2009-03-04 11:28:42 +08:00
|
|
|
-Wl,--no-whole-archive \
|
2011-04-26 05:22:41 +08:00
|
|
|
$(if $(PRIVATE_GROUP_STATIC_LIBRARIES),-Wl$(comma)--start-group) \
|
2009-03-04 11:28:42 +08:00
|
|
|
$(call normalize-target-libraries,$(PRIVATE_ALL_STATIC_LIBRARIES)) \
|
2011-04-26 05:22:41 +08:00
|
|
|
$(if $(PRIVATE_GROUP_STATIC_LIBRARIES),-Wl$(comma)--end-group) \
|
2015-04-01 06:21:30 +08:00
|
|
|
$(if $(filter true,$(NATIVE_COVERAGE)),$(PRIVATE_TARGET_LIBGCOV)) \
|
2015-01-26 08:20:57 +08:00
|
|
|
$(if $(filter true,$(NATIVE_COVERAGE)),$(PRIVATE_TARGET_LIBPROFILE_RT)) \
|
2015-04-01 06:21:30 +08:00
|
|
|
$(PRIVATE_TARGET_LIBATOMIC) \
|
|
|
|
$(PRIVATE_TARGET_LIBGCC) \
|
2009-03-04 11:28:42 +08:00
|
|
|
$(call normalize-target-libraries,$(PRIVATE_ALL_SHARED_LIBRARIES)) \
|
|
|
|
-o $@ \
|
2014-11-14 02:15:46 +08:00
|
|
|
$(PRIVATE_TARGET_GLOBAL_LDFLAGS) \
|
|
|
|
$(PRIVATE_LDFLAGS) \
|
|
|
|
$(if $(filter true,$(PRIVATE_NO_CRT)),,$(PRIVATE_TARGET_CRTEND_SO_O)) \
|
2009-03-04 11:28:42 +08:00
|
|
|
$(PRIVATE_LDLIBS)
|
|
|
|
endef
|
|
|
|
|
|
|
|
define transform-o-to-shared-lib
|
|
|
|
@mkdir -p $(dir $@)
|
|
|
|
@echo "target SharedLib: $(PRIVATE_MODULE) ($@)"
|
2014-11-14 02:15:46 +08:00
|
|
|
$(transform-o-to-shared-lib-inner)
|
2009-03-04 11:28:42 +08:00
|
|
|
endef
|
|
|
|
|
|
|
|
|
|
|
|
###########################################################
|
|
|
|
## Commands for filtering a target executable or library
|
|
|
|
###########################################################
|
|
|
|
|
2014-03-29 08:24:39 +08:00
|
|
|
ifneq ($(TARGET_BUILD_VARIANT),user)
|
|
|
|
TARGET_STRIP_EXTRA = && $(PRIVATE_OBJCOPY) --add-gnu-debuglink=$< $@
|
|
|
|
TARGET_STRIP_KEEP_SYMBOLS_EXTRA = --add-gnu-debuglink=$<
|
|
|
|
endif
|
|
|
|
|
2009-03-04 11:28:42 +08:00
|
|
|
define transform-to-stripped
|
|
|
|
@mkdir -p $(dir $@)
|
|
|
|
@echo "target Strip: $(PRIVATE_MODULE) ($@)"
|
2014-08-21 08:12:32 +08:00
|
|
|
$(hide) $(PRIVATE_STRIP) --strip-all $< -o $@ \
|
|
|
|
$(if $(PRIVATE_NO_DEBUGLINK),,$(TARGET_STRIP_EXTRA))
|
2009-03-04 11:28:42 +08:00
|
|
|
endef
|
|
|
|
|
2014-03-19 05:50:09 +08:00
|
|
|
define transform-to-stripped-keep-symbols
|
|
|
|
@mkdir -p $(dir $@)
|
|
|
|
@echo "target Strip (keep symbols): $(PRIVATE_MODULE) ($@)"
|
2014-03-29 08:24:39 +08:00
|
|
|
$(hide) $(PRIVATE_OBJCOPY) \
|
|
|
|
`$(PRIVATE_READELF) -S $< | awk '/.debug_/ {print "-R " $$2}' | xargs` \
|
|
|
|
$(TARGET_STRIP_KEEP_SYMBOLS_EXTRA) $< $@
|
2014-03-19 05:50:09 +08:00
|
|
|
endef
|
|
|
|
|
2009-03-04 11:28:42 +08:00
|
|
|
|
|
|
|
###########################################################
|
|
|
|
## Commands for running gcc to link an executable
|
|
|
|
###########################################################
|
|
|
|
|
|
|
|
define transform-o-to-executable-inner
|
2014-11-14 02:15:46 +08:00
|
|
|
$(hide) $(PRIVATE_CXX) -pie \
|
|
|
|
-nostdlib -Bdynamic \
|
|
|
|
-Wl,-dynamic-linker,$($(PRIVATE_2ND_ARCH_VAR_PREFIX)TARGET_LINKER) \
|
|
|
|
-Wl,--gc-sections \
|
|
|
|
-Wl,-z,nocopyreloc \
|
2012-09-26 08:52:10 +08:00
|
|
|
$(PRIVATE_TARGET_GLOBAL_LD_DIRS) \
|
2014-02-22 08:17:05 +08:00
|
|
|
-Wl,-rpath-link=$(PRIVATE_TARGET_OUT_INTERMEDIATE_LIBRARIES) \
|
2014-11-14 02:15:46 +08:00
|
|
|
$(if $(filter true,$(PRIVATE_NO_CRT)),,$(PRIVATE_TARGET_CRTBEGIN_DYNAMIC_O)) \
|
2009-03-04 11:28:42 +08:00
|
|
|
$(PRIVATE_ALL_OBJECTS) \
|
|
|
|
-Wl,--whole-archive \
|
|
|
|
$(call normalize-target-libraries,$(PRIVATE_ALL_WHOLE_STATIC_LIBRARIES)) \
|
|
|
|
-Wl,--no-whole-archive \
|
2011-04-26 05:22:41 +08:00
|
|
|
$(if $(PRIVATE_GROUP_STATIC_LIBRARIES),-Wl$(comma)--start-group) \
|
2009-03-04 11:28:42 +08:00
|
|
|
$(call normalize-target-libraries,$(PRIVATE_ALL_STATIC_LIBRARIES)) \
|
2011-04-26 05:22:41 +08:00
|
|
|
$(if $(PRIVATE_GROUP_STATIC_LIBRARIES),-Wl$(comma)--end-group) \
|
2015-04-01 06:21:30 +08:00
|
|
|
$(if $(filter true,$(NATIVE_COVERAGE)),$(PRIVATE_TARGET_LIBGCOV)) \
|
2015-01-26 08:20:57 +08:00
|
|
|
$(if $(filter true,$(NATIVE_COVERAGE)),$(PRIVATE_TARGET_LIBPROFILE_RT)) \
|
2015-04-01 06:21:30 +08:00
|
|
|
$(PRIVATE_TARGET_LIBATOMIC) \
|
|
|
|
$(PRIVATE_TARGET_LIBGCC) \
|
2009-03-04 11:28:42 +08:00
|
|
|
$(call normalize-target-libraries,$(PRIVATE_ALL_SHARED_LIBRARIES)) \
|
|
|
|
-o $@ \
|
2014-11-14 02:15:46 +08:00
|
|
|
$(PRIVATE_TARGET_GLOBAL_LDFLAGS) \
|
|
|
|
$(PRIVATE_LDFLAGS) \
|
|
|
|
$(if $(filter true,$(PRIVATE_NO_CRT)),,$(PRIVATE_TARGET_CRTEND_O)) \
|
2009-03-04 11:28:42 +08:00
|
|
|
$(PRIVATE_LDLIBS)
|
|
|
|
endef
|
|
|
|
|
|
|
|
define transform-o-to-executable
|
|
|
|
@mkdir -p $(dir $@)
|
|
|
|
@echo "target Executable: $(PRIVATE_MODULE) ($@)"
|
2014-11-14 02:15:46 +08:00
|
|
|
$(transform-o-to-executable-inner)
|
2009-03-04 11:28:42 +08:00
|
|
|
endef
|
|
|
|
|
|
|
|
|
|
|
|
###########################################################
|
2014-11-14 02:15:46 +08:00
|
|
|
## Commands for linking a static executable. In practice,
|
|
|
|
## we only use this on arm, so the other platforms don't
|
|
|
|
## have transform-o-to-static-executable defined.
|
2015-01-21 03:00:20 +08:00
|
|
|
## Clang driver needs -static to create static executable.
|
|
|
|
## However, bionic/linker uses -shared to overwrite.
|
|
|
|
## Linker for x86 targets does not allow coexistance of -static and -shared,
|
|
|
|
## so we add -static only if -shared is not used.
|
2009-03-04 11:28:42 +08:00
|
|
|
###########################################################
|
|
|
|
|
|
|
|
define transform-o-to-static-executable-inner
|
2014-11-14 02:15:46 +08:00
|
|
|
$(hide) $(PRIVATE_CXX) \
|
|
|
|
-nostdlib -Bstatic \
|
2015-01-21 03:00:20 +08:00
|
|
|
$(if $(filter $(PRIVATE_LDFLAGS),-shared),,-static) \
|
2014-11-14 02:15:46 +08:00
|
|
|
-Wl,--gc-sections \
|
|
|
|
-o $@ \
|
|
|
|
$(PRIVATE_TARGET_GLOBAL_LD_DIRS) \
|
|
|
|
$(if $(filter true,$(PRIVATE_NO_CRT)),,$(PRIVATE_TARGET_CRTBEGIN_STATIC_O)) \
|
|
|
|
$(PRIVATE_TARGET_GLOBAL_LDFLAGS) \
|
|
|
|
$(PRIVATE_LDFLAGS) \
|
|
|
|
$(PRIVATE_ALL_OBJECTS) \
|
|
|
|
-Wl,--whole-archive \
|
|
|
|
$(call normalize-target-libraries,$(PRIVATE_ALL_WHOLE_STATIC_LIBRARIES)) \
|
|
|
|
-Wl,--no-whole-archive \
|
|
|
|
$(call normalize-target-libraries,$(filter-out %libcompiler_rt.a,$(filter-out %libc_nomalloc.a,$(filter-out %libc.a,$(PRIVATE_ALL_STATIC_LIBRARIES))))) \
|
|
|
|
-Wl,--start-group \
|
|
|
|
$(call normalize-target-libraries,$(filter %libc.a,$(PRIVATE_ALL_STATIC_LIBRARIES))) \
|
|
|
|
$(call normalize-target-libraries,$(filter %libc_nomalloc.a,$(PRIVATE_ALL_STATIC_LIBRARIES))) \
|
|
|
|
$(if $(filter true,$(NATIVE_COVERAGE)),$(PRIVATE_TARGET_LIBGCOV)) \
|
2015-01-26 08:20:57 +08:00
|
|
|
$(if $(filter true,$(NATIVE_COVERAGE)),$(PRIVATE_TARGET_LIBPROFILE_RT)) \
|
|
|
|
$(PRIVATE_TARGET_LIBATOMIC) \
|
2014-11-14 02:15:46 +08:00
|
|
|
$(call normalize-target-libraries,$(filter %libcompiler_rt.a,$(PRIVATE_ALL_STATIC_LIBRARIES))) \
|
2014-11-14 13:24:04 +08:00
|
|
|
$(PRIVATE_TARGET_LIBGCC) \
|
2014-11-14 02:15:46 +08:00
|
|
|
-Wl,--end-group \
|
|
|
|
$(if $(filter true,$(PRIVATE_NO_CRT)),,$(PRIVATE_TARGET_CRTEND_O))
|
2009-03-04 11:28:42 +08:00
|
|
|
endef
|
|
|
|
|
|
|
|
define transform-o-to-static-executable
|
|
|
|
@mkdir -p $(dir $@)
|
|
|
|
@echo "target StaticExecutable: $(PRIVATE_MODULE) ($@)"
|
2014-11-14 02:15:46 +08:00
|
|
|
$(transform-o-to-static-executable-inner)
|
2009-03-04 11:28:42 +08:00
|
|
|
endef
|
|
|
|
|
|
|
|
|
|
|
|
###########################################################
|
|
|
|
## Commands for running gcc to link a host executable
|
|
|
|
###########################################################
|
2014-04-05 05:37:33 +08:00
|
|
|
ifdef BUILD_HOST_static
|
|
|
|
HOST_FPIE_FLAGS :=
|
|
|
|
else
|
2014-08-07 03:36:46 +08:00
|
|
|
HOST_FPIE_FLAGS := -pie
|
2014-10-02 15:51:11 +08:00
|
|
|
# Force the correct entry point to workaround a bug in binutils that manifests with -pie
|
|
|
|
ifeq ($(HOST_OS),windows)
|
|
|
|
HOST_FPIE_FLAGS += -Wl,-e_mainCRTStartup
|
|
|
|
endif
|
2014-04-05 05:37:33 +08:00
|
|
|
endif
|
2009-03-04 11:28:42 +08:00
|
|
|
|
|
|
|
ifneq ($(HOST_CUSTOM_LD_COMMAND),true)
|
|
|
|
define transform-host-o-to-executable-inner
|
2011-01-29 06:14:47 +08:00
|
|
|
$(hide) $(PRIVATE_CXX) \
|
2009-03-04 11:28:42 +08:00
|
|
|
$(PRIVATE_ALL_OBJECTS) \
|
|
|
|
-Wl,--whole-archive \
|
|
|
|
$(call normalize-host-libraries,$(PRIVATE_ALL_WHOLE_STATIC_LIBRARIES)) \
|
|
|
|
-Wl,--no-whole-archive \
|
2011-04-26 05:22:41 +08:00
|
|
|
$(if $(PRIVATE_GROUP_STATIC_LIBRARIES),-Wl$(comma)--start-group) \
|
2009-03-04 11:28:42 +08:00
|
|
|
$(call normalize-host-libraries,$(PRIVATE_ALL_STATIC_LIBRARIES)) \
|
2011-04-26 05:22:41 +08:00
|
|
|
$(if $(PRIVATE_GROUP_STATIC_LIBRARIES),-Wl$(comma)--end-group) \
|
2015-01-24 08:12:57 +08:00
|
|
|
$(if $(filter true,$(NATIVE_COVERAGE)),-lgcov) \
|
2015-01-26 08:20:57 +08:00
|
|
|
$(if $(filter true,$(NATIVE_COVERAGE)),$(PRIVATE_HOST_LIBPROFILE_RT)) \
|
2009-03-04 11:28:42 +08:00
|
|
|
$(call normalize-host-libraries,$(PRIVATE_ALL_SHARED_LIBRARIES)) \
|
2014-04-18 01:03:35 +08:00
|
|
|
-Wl,-rpath-link=$($(PRIVATE_2ND_ARCH_VAR_PREFIX)HOST_OUT_INTERMEDIATE_LIBRARIES) \
|
|
|
|
-Wl,-rpath,\$$ORIGIN/../$(notdir $($(PRIVATE_2ND_ARCH_VAR_PREFIX)HOST_OUT_SHARED_LIBRARIES)) \
|
|
|
|
$($(PRIVATE_2ND_ARCH_VAR_PREFIX)HOST_GLOBAL_LD_DIRS) \
|
2011-11-11 01:57:40 +08:00
|
|
|
$(if $(PRIVATE_NO_DEFAULT_COMPILER_FLAGS),, \
|
2013-12-10 19:07:41 +08:00
|
|
|
$(PRIVATE_HOST_GLOBAL_LDFLAGS) \
|
2011-11-11 01:57:40 +08:00
|
|
|
) \
|
2014-02-12 22:24:41 +08:00
|
|
|
$(PRIVATE_LDFLAGS) \
|
2009-03-04 11:28:42 +08:00
|
|
|
-o $@ \
|
|
|
|
$(PRIVATE_LDLIBS)
|
|
|
|
endef
|
|
|
|
endif
|
|
|
|
|
|
|
|
define transform-host-o-to-executable
|
|
|
|
@mkdir -p $(dir $@)
|
|
|
|
@echo "host Executable: $(PRIVATE_MODULE) ($@)"
|
2011-01-29 06:14:47 +08:00
|
|
|
$(transform-host-o-to-executable-inner)
|
2009-03-04 11:28:42 +08:00
|
|
|
endef
|
|
|
|
|
|
|
|
|
|
|
|
###########################################################
|
|
|
|
## Commands for running javac to make .class files
|
|
|
|
###########################################################
|
|
|
|
|
|
|
|
#@echo "Source intermediates dir: $(PRIVATE_SOURCE_INTERMEDIATES_DIR)"
|
|
|
|
#@echo "Source intermediates: $$(find $(PRIVATE_SOURCE_INTERMEDIATES_DIR) -name '*.java')"
|
|
|
|
|
|
|
|
# TODO: Right now we generate the asset resources twice, first as part
|
|
|
|
# of generating the Java classes, then at the end when packaging the final
|
|
|
|
# assets. This should be changed to do one of two things: (1) Don't generate
|
|
|
|
# any resource files the first time, only create classes during that stage;
|
|
|
|
# or (2) Don't use the -c flag with the second stage, instead taking the
|
|
|
|
# resource files from the first stage as additional input. My original intent
|
|
|
|
# was to use approach (2), but this requires a little more work in the tool.
|
|
|
|
# Maybe we should just use approach (1).
|
|
|
|
|
|
|
|
# This rule creates the R.java and Manifest.java files, both of which
|
2011-03-16 04:19:30 +08:00
|
|
|
# are PRODUCT-neutral. Don't pass PRIVATE_PRODUCT_AAPT_CONFIG to this invocation.
|
2009-03-04 11:28:42 +08:00
|
|
|
define create-resource-java-files
|
|
|
|
@mkdir -p $(PRIVATE_SOURCE_INTERMEDIATES_DIR)
|
|
|
|
@mkdir -p $(dir $(PRIVATE_RESOURCE_PUBLICS_OUTPUT))
|
2010-03-11 08:02:42 +08:00
|
|
|
$(hide) $(AAPT) package $(PRIVATE_AAPT_FLAGS) -m \
|
2011-03-16 04:19:30 +08:00
|
|
|
$(eval # PRIVATE_PRODUCT_AAPT_CONFIG is intentionally missing-- see comment.) \
|
2009-03-04 11:28:42 +08:00
|
|
|
$(addprefix -J , $(PRIVATE_SOURCE_INTERMEDIATES_DIR)) \
|
|
|
|
$(addprefix -M , $(PRIVATE_ANDROID_MANIFEST)) \
|
|
|
|
$(addprefix -P , $(PRIVATE_RESOURCE_PUBLICS_OUTPUT)) \
|
|
|
|
$(addprefix -S , $(PRIVATE_RESOURCE_DIR)) \
|
|
|
|
$(addprefix -A , $(PRIVATE_ASSET_DIR)) \
|
2009-05-16 09:01:20 +08:00
|
|
|
$(addprefix -I , $(PRIVATE_AAPT_INCLUDES)) \
|
2009-08-31 04:39:24 +08:00
|
|
|
$(addprefix -G , $(PRIVATE_PROGUARD_OPTIONS_FILE)) \
|
2011-04-09 08:27:35 +08:00
|
|
|
$(addprefix --min-sdk-version , $(PRIVATE_DEFAULT_APP_TARGET_SDK)) \
|
|
|
|
$(addprefix --target-sdk-version , $(PRIVATE_DEFAULT_APP_TARGET_SDK)) \
|
2010-06-24 04:34:22 +08:00
|
|
|
$(if $(filter --version-code,$(PRIVATE_AAPT_FLAGS)),,$(addprefix --version-code , $(PLATFORM_SDK_VERSION))) \
|
2010-06-30 02:08:13 +08:00
|
|
|
$(if $(filter --version-name,$(PRIVATE_AAPT_FLAGS)),,$(addprefix --version-name , $(PLATFORM_VERSION)-$(BUILD_NUMBER))) \
|
2010-03-17 07:13:56 +08:00
|
|
|
$(addprefix --rename-manifest-package , $(PRIVATE_MANIFEST_PACKAGE_NAME)) \
|
2010-09-03 06:41:01 +08:00
|
|
|
$(addprefix --rename-instrumentation-target-package , $(PRIVATE_MANIFEST_INSTRUMENTATION_FOR))
|
2009-03-04 11:28:42 +08:00
|
|
|
endef
|
|
|
|
|
|
|
|
ifeq ($(HOST_OS),windows)
|
|
|
|
xlint_unchecked :=
|
|
|
|
else
|
2010-07-08 02:42:19 +08:00
|
|
|
xlint_unchecked := -Xlint:unchecked
|
2009-03-04 11:28:42 +08:00
|
|
|
endif
|
|
|
|
|
2011-04-02 06:45:58 +08:00
|
|
|
ifeq (true, $(ENABLE_INCREMENTALJAVAC))
|
|
|
|
incremental_dex := --incremental
|
|
|
|
else
|
|
|
|
incremental_dex :=
|
|
|
|
endif
|
|
|
|
|
2009-03-04 11:28:42 +08:00
|
|
|
# emit-line, <word list>, <output file>
|
|
|
|
define emit-line
|
|
|
|
$(if $(1),echo -n '$(strip $(1)) ' >> $(2))
|
|
|
|
endef
|
|
|
|
|
|
|
|
# dump-words-to-file, <word list>, <output file>
|
|
|
|
define dump-words-to-file
|
|
|
|
@rm -f $(2)
|
|
|
|
@$(call emit-line,$(wordlist 1,200,$(1)),$(2))
|
|
|
|
@$(call emit-line,$(wordlist 201,400,$(1)),$(2))
|
|
|
|
@$(call emit-line,$(wordlist 401,600,$(1)),$(2))
|
|
|
|
@$(call emit-line,$(wordlist 601,800,$(1)),$(2))
|
|
|
|
@$(call emit-line,$(wordlist 801,1000,$(1)),$(2))
|
|
|
|
@$(call emit-line,$(wordlist 1001,1200,$(1)),$(2))
|
|
|
|
@$(call emit-line,$(wordlist 1201,1400,$(1)),$(2))
|
|
|
|
@$(call emit-line,$(wordlist 1401,1600,$(1)),$(2))
|
|
|
|
@$(call emit-line,$(wordlist 1601,1800,$(1)),$(2))
|
|
|
|
@$(call emit-line,$(wordlist 1801,2000,$(1)),$(2))
|
|
|
|
@$(call emit-line,$(wordlist 2001,2200,$(1)),$(2))
|
|
|
|
@$(call emit-line,$(wordlist 2201,2400,$(1)),$(2))
|
|
|
|
@$(call emit-line,$(wordlist 2401,2600,$(1)),$(2))
|
|
|
|
@$(call emit-line,$(wordlist 2601,2800,$(1)),$(2))
|
|
|
|
@$(call emit-line,$(wordlist 2801,3000,$(1)),$(2))
|
|
|
|
@$(call emit-line,$(wordlist 3001,3200,$(1)),$(2))
|
|
|
|
@$(call emit-line,$(wordlist 3201,3400,$(1)),$(2))
|
|
|
|
@$(call emit-line,$(wordlist 3401,3600,$(1)),$(2))
|
|
|
|
@$(call emit-line,$(wordlist 3601,3800,$(1)),$(2))
|
|
|
|
@$(call emit-line,$(wordlist 3801,4000,$(1)),$(2))
|
2010-05-05 07:33:49 +08:00
|
|
|
@$(call emit-line,$(wordlist 4001,4200,$(1)),$(2))
|
|
|
|
@$(call emit-line,$(wordlist 4201,4400,$(1)),$(2))
|
|
|
|
@$(call emit-line,$(wordlist 4401,4600,$(1)),$(2))
|
|
|
|
@$(call emit-line,$(wordlist 4601,4800,$(1)),$(2))
|
|
|
|
@$(call emit-line,$(wordlist 4801,5000,$(1)),$(2))
|
|
|
|
@$(if $(wordlist 5001,5002,$(1)),$(error Too many words ($(words $(1)))))
|
2009-03-04 11:28:42 +08:00
|
|
|
endef
|
|
|
|
|
|
|
|
# For a list of jar files, unzip them to a specified directory,
|
|
|
|
# but make sure that no META-INF files come along for the ride.
|
|
|
|
#
|
|
|
|
# $(1): files to unzip
|
|
|
|
# $(2): destination directory
|
|
|
|
define unzip-jar-files
|
|
|
|
$(hide) for f in $(1); \
|
|
|
|
do \
|
|
|
|
if [ ! -f $$f ]; then \
|
|
|
|
echo Missing file $$f; \
|
|
|
|
exit 1; \
|
|
|
|
fi; \
|
2009-06-10 06:08:29 +08:00
|
|
|
unzip -qo $$f -d $(2); \
|
2012-08-31 03:59:42 +08:00
|
|
|
done \
|
|
|
|
$(if $(PRIVATE_DONT_DELETE_JAR_META_INF),,;rm -rf $(2)/META-INF)
|
2009-03-04 11:28:42 +08:00
|
|
|
endef
|
|
|
|
|
2010-12-11 04:10:24 +08:00
|
|
|
# Common definition to invoke javac on the host and target.
|
|
|
|
#
|
|
|
|
# Some historical notes:
|
|
|
|
# - below we write the list of java files to java-source-list to avoid argument
|
|
|
|
# list length problems with Cygwin
|
|
|
|
# - we filter out duplicate java file names because eclipse's compiler
|
|
|
|
# doesn't like them.
|
|
|
|
#
|
|
|
|
# $(1): javac
|
|
|
|
# $(2): bootclasspath
|
|
|
|
define compile-java
|
2009-04-10 10:31:12 +08:00
|
|
|
$(hide) rm -f $@
|
|
|
|
$(hide) rm -rf $(PRIVATE_CLASS_INTERMEDIATES_DIR)
|
2010-12-11 04:10:24 +08:00
|
|
|
$(hide) mkdir -p $(dir $@)
|
2009-04-10 10:31:12 +08:00
|
|
|
$(hide) mkdir -p $(PRIVATE_CLASS_INTERMEDIATES_DIR)
|
2010-12-11 04:10:24 +08:00
|
|
|
$(call unzip-jar-files,$(PRIVATE_STATIC_JAVA_LIBRARIES),$(PRIVATE_CLASS_INTERMEDIATES_DIR))
|
2011-01-21 07:01:56 +08:00
|
|
|
$(call dump-words-to-file,$(PRIVATE_JAVA_SOURCES),$(PRIVATE_CLASS_INTERMEDIATES_DIR)/java-source-list)
|
2009-04-10 10:31:12 +08:00
|
|
|
$(hide) if [ -d "$(PRIVATE_SOURCE_INTERMEDIATES_DIR)" ]; then \
|
2013-08-15 07:59:00 +08:00
|
|
|
find $(PRIVATE_SOURCE_INTERMEDIATES_DIR) -name '*.java' >> $(PRIVATE_CLASS_INTERMEDIATES_DIR)/java-source-list; \
|
2009-03-04 11:28:42 +08:00
|
|
|
fi
|
2011-01-21 07:01:56 +08:00
|
|
|
$(hide) tr ' ' '\n' < $(PRIVATE_CLASS_INTERMEDIATES_DIR)/java-source-list \
|
|
|
|
| sort -u > $(PRIVATE_CLASS_INTERMEDIATES_DIR)/java-source-list-uniq
|
2011-12-13 09:52:03 +08:00
|
|
|
$(hide) if [ -s $(PRIVATE_CLASS_INTERMEDIATES_DIR)/java-source-list-uniq ] ; then \
|
|
|
|
$(1) -encoding UTF-8 \
|
2010-12-11 04:10:24 +08:00
|
|
|
$(strip $(PRIVATE_JAVAC_DEBUG_FLAGS)) \
|
2012-10-19 01:54:49 +08:00
|
|
|
$(if $(findstring true,$(PRIVATE_WARNINGS_ENABLE)),$(xlint_unchecked),) \
|
2010-12-11 04:10:24 +08:00
|
|
|
$(2) \
|
2009-03-04 11:28:42 +08:00
|
|
|
$(addprefix -classpath ,$(strip \
|
|
|
|
$(call normalize-path-list,$(PRIVATE_ALL_JAVA_LIBRARIES)))) \
|
2012-10-19 01:54:49 +08:00
|
|
|
$(if $(findstring true,$(PRIVATE_WARNINGS_ENABLE)),$(xlint_unchecked),) \
|
2009-03-04 11:28:42 +08:00
|
|
|
-extdirs "" -d $(PRIVATE_CLASS_INTERMEDIATES_DIR) \
|
2010-12-11 04:10:24 +08:00
|
|
|
$(PRIVATE_JAVACFLAGS) \
|
2011-01-21 07:01:56 +08:00
|
|
|
\@$(PRIVATE_CLASS_INTERMEDIATES_DIR)/java-source-list-uniq \
|
2011-12-13 09:52:03 +08:00
|
|
|
|| ( rm -rf $(PRIVATE_CLASS_INTERMEDIATES_DIR) ; exit 41 ) \
|
|
|
|
fi
|
2011-10-31 12:37:35 +08:00
|
|
|
$(if $(PRIVATE_JAVA_LAYERS_FILE), $(hide) build/tools/java-layers.py \
|
|
|
|
$(PRIVATE_JAVA_LAYERS_FILE) \@$(PRIVATE_CLASS_INTERMEDIATES_DIR)/java-source-list-uniq,)
|
2011-01-21 07:01:56 +08:00
|
|
|
$(hide) rm -f $(PRIVATE_CLASS_INTERMEDIATES_DIR)/java-source-list
|
|
|
|
$(hide) rm -f $(PRIVATE_CLASS_INTERMEDIATES_DIR)/java-source-list-uniq
|
2011-12-16 08:36:55 +08:00
|
|
|
$(if $(PRIVATE_JAR_EXCLUDE_FILES), $(hide) find $(PRIVATE_CLASS_INTERMEDIATES_DIR) \
|
|
|
|
-name $(word 1, $(PRIVATE_JAR_EXCLUDE_FILES)) \
|
|
|
|
$(addprefix -o -name , $(wordlist 2, 999, $(PRIVATE_JAR_EXCLUDE_FILES))) \
|
|
|
|
| xargs rm -rf)
|
2014-05-24 09:41:19 +08:00
|
|
|
$(if $(PRIVATE_JAR_PACKAGES), \
|
|
|
|
$(hide) find $(PRIVATE_CLASS_INTERMEDIATES_DIR) -mindepth 1 -type f \
|
|
|
|
$(foreach pkg, $(PRIVATE_JAR_PACKAGES), \
|
|
|
|
-not -path $(PRIVATE_CLASS_INTERMEDIATES_DIR)/$(subst .,/,$(pkg))/\*) -delete ; \
|
|
|
|
find $(PRIVATE_CLASS_INTERMEDIATES_DIR) -empty -delete)
|
|
|
|
$(if $(PRIVATE_JAR_EXCLUDE_PACKAGES), $(hide) rm -rf \
|
|
|
|
$(foreach pkg, $(PRIVATE_JAR_EXCLUDE_PACKAGES), \
|
|
|
|
$(PRIVATE_CLASS_INTERMEDIATES_DIR)/$(subst .,/,$(pkg))))
|
2013-08-15 07:59:00 +08:00
|
|
|
$(if $(PRIVATE_RMTYPEDEFS), $(hide) $(RMTYPEDEFS) -v $(PRIVATE_CLASS_INTERMEDIATES_DIR))
|
2013-09-25 10:05:52 +08:00
|
|
|
$(if $(PRIVATE_JAR_MANIFEST), \
|
|
|
|
$(hide) sed -e 's/%BUILD_NUMBER%/$(BUILD_NUMBER)/' \
|
|
|
|
$(PRIVATE_JAR_MANIFEST) > $(dir $@)/manifest.mf && \
|
|
|
|
jar -cfm $@ $(dir $@)/manifest.mf \
|
|
|
|
-C $(PRIVATE_CLASS_INTERMEDIATES_DIR) ., \
|
|
|
|
$(hide) jar -cf $@ -C $(PRIVATE_CLASS_INTERMEDIATES_DIR) .)
|
2015-01-15 06:23:56 +08:00
|
|
|
$(if $(PRIVATE_EXTRA_JAR_ARGS),$(call add-java-resources-to,$@))
|
2010-12-11 04:10:24 +08:00
|
|
|
endef
|
|
|
|
|
|
|
|
define transform-java-to-classes.jar
|
|
|
|
@echo "target Java: $(PRIVATE_MODULE) ($(PRIVATE_CLASS_INTERMEDIATES_DIR))"
|
|
|
|
$(call compile-java,$(TARGET_JAVAC),$(PRIVATE_BOOTCLASSPATH))
|
2009-03-04 11:28:42 +08:00
|
|
|
endef
|
|
|
|
|
2011-01-21 07:01:56 +08:00
|
|
|
# Override the above definitions if we want to do incremetal javac
|
|
|
|
ifeq (true, $(ENABLE_INCREMENTALJAVAC))
|
|
|
|
define compile-java
|
|
|
|
$(hide) mkdir -p $(dir $@)
|
|
|
|
$(hide) mkdir -p $(PRIVATE_CLASS_INTERMEDIATES_DIR)
|
|
|
|
$(hide) touch $(PRIVATE_CLASS_INTERMEDIATES_DIR)/newstamp
|
|
|
|
$(call unzip-jar-files,$(PRIVATE_STATIC_JAVA_LIBRARIES),$(PRIVATE_CLASS_INTERMEDIATES_DIR))
|
|
|
|
$(hide) if [ -e $(PRIVATE_CLASS_INTERMEDIATES_DIR)/stamp ] ; then \
|
|
|
|
newerFlag=$$(echo -n "-newer $(PRIVATE_CLASS_INTERMEDIATES_DIR)/stamp") ; \
|
|
|
|
fi ; \
|
|
|
|
find $(PRIVATE_JAVA_SOURCES) $$newerFlag > $(PRIVATE_CLASS_INTERMEDIATES_DIR)/java-source-list ; \
|
|
|
|
if [ -d "$(PRIVATE_SOURCE_INTERMEDIATES_DIR)" ]; then \
|
|
|
|
find $(PRIVATE_SOURCE_INTERMEDIATES_DIR) -name '*.java' $$newerFlag >> $(PRIVATE_CLASS_INTERMEDIATES_DIR)/java-source-list; \
|
|
|
|
fi
|
|
|
|
$(hide) tr ' ' '\n' < $(PRIVATE_CLASS_INTERMEDIATES_DIR)/java-source-list \
|
|
|
|
| sort -u > $(PRIVATE_CLASS_INTERMEDIATES_DIR)/java-source-list-uniq
|
|
|
|
@echo "(Incremental) build source files:"
|
|
|
|
@cat $(PRIVATE_CLASS_INTERMEDIATES_DIR)/java-source-list-uniq
|
|
|
|
$(hide) if [ -s $(PRIVATE_CLASS_INTERMEDIATES_DIR)/java-source-list-uniq ] ; then \
|
2011-06-01 09:21:07 +08:00
|
|
|
$(1) -encoding UTF-8 \
|
2011-01-21 07:01:56 +08:00
|
|
|
$(strip $(PRIVATE_JAVAC_DEBUG_FLAGS)) \
|
2012-10-19 01:54:49 +08:00
|
|
|
$(if $(findstring true,$(PRIVATE_WARNINGS_ENABLE)),$(xlint_unchecked),) \
|
2011-01-21 07:01:56 +08:00
|
|
|
$(2) \
|
|
|
|
$(addprefix -classpath ,$(strip \
|
|
|
|
$(call normalize-path-list,$(PRIVATE_ALL_JAVA_LIBRARIES) $(PRIVATE_CLASS_INTERMEDIATES_DIR)))) \
|
2012-10-19 01:54:49 +08:00
|
|
|
$(if $(findstring true,$(PRIVATE_WARNINGS_ENABLE)),$(xlint_unchecked),) \
|
2011-01-21 07:01:56 +08:00
|
|
|
-extdirs "" -d $(PRIVATE_CLASS_INTERMEDIATES_DIR) \
|
|
|
|
$(PRIVATE_JAVACFLAGS) \
|
|
|
|
\@$(PRIVATE_CLASS_INTERMEDIATES_DIR)/java-source-list-uniq \
|
|
|
|
|| ( exit 41 ) \
|
|
|
|
fi
|
|
|
|
$(hide) rm -f $(PRIVATE_CLASS_INTERMEDIATES_DIR)/java-source-list
|
|
|
|
$(hide) rm -f $(PRIVATE_CLASS_INTERMEDIATES_DIR)/java-source-list-uniq
|
|
|
|
$(hide) rm -f $@
|
2012-06-20 01:40:37 +08:00
|
|
|
$(if $(PRIVATE_JAR_EXCLUDE_FILES), $(hide) find $(PRIVATE_CLASS_INTERMEDIATES_DIR) \
|
|
|
|
-name $(word 1, $(PRIVATE_JAR_EXCLUDE_FILES)) \
|
|
|
|
$(addprefix -o -name , $(wordlist 2, 999, $(PRIVATE_JAR_EXCLUDE_FILES))) \
|
|
|
|
| xargs rm -rf)
|
2014-05-24 09:41:19 +08:00
|
|
|
$(if $(PRIVATE_JAR_PACKAGES), \
|
|
|
|
$(hide) find $(PRIVATE_CLASS_INTERMEDIATES_DIR) -mindepth 1 -type f \
|
|
|
|
$(foreach pkg, $(PRIVATE_JAR_PACKAGES), \
|
|
|
|
-not -path $(PRIVATE_CLASS_INTERMEDIATES_DIR)/$(subst .,/,$(pkg))/\*) -delete ; \
|
|
|
|
find $(PRIVATE_CLASS_INTERMEDIATES_DIR) -empty -delete)
|
|
|
|
$(if $(PRIVATE_JAR_EXCLUDE_PACKAGES), $(hide) rm -rf \
|
|
|
|
$(foreach pkg, $(PRIVATE_JAR_EXCLUDE_PACKAGES), \
|
|
|
|
$(PRIVATE_CLASS_INTERMEDIATES_DIR)/$(subst .,/,$(pkg))))
|
2013-08-15 07:59:00 +08:00
|
|
|
$(if $(PRIVATE_RMTYPEDEFS), $(hide) $(RMTYPEDEFS) -v $(PRIVATE_CLASS_INTERMEDIATES_DIR))
|
2013-09-26 06:27:20 +08:00
|
|
|
$(if $(PRIVATE_JAR_MANIFEST), \
|
|
|
|
$(hide) sed -e 's/%BUILD_NUMBER%/$(BUILD_NUMBER)/' \
|
|
|
|
$(PRIVATE_JAR_MANIFEST) > $(dir $@)/manifest.mf && \
|
|
|
|
jar -cfm $@ $(dir $@)/manifest.mf \
|
|
|
|
-C $(PRIVATE_CLASS_INTERMEDIATES_DIR) ., \
|
|
|
|
$(hide) jar -cf $@ -C $(PRIVATE_CLASS_INTERMEDIATES_DIR) .)
|
2015-01-15 06:23:56 +08:00
|
|
|
$(if $(PRIVATE_EXTRA_JAR_ARGS),$(call add-java-resources-to,$@))
|
2011-01-21 07:01:56 +08:00
|
|
|
$(hide) mv $(PRIVATE_CLASS_INTERMEDIATES_DIR)/newstamp $(PRIVATE_CLASS_INTERMEDIATES_DIR)/stamp
|
|
|
|
endef
|
|
|
|
|
|
|
|
define transform-java-to-classes.jar
|
|
|
|
@echo "target Java: $(PRIVATE_MODULE) ($(PRIVATE_CLASS_INTERMEDIATES_DIR))"
|
|
|
|
$(call compile-java,$(TARGET_JAVAC),$(PRIVATE_BOOTCLASSPATH))
|
|
|
|
endef
|
|
|
|
endif # ENABLE_INCREMENTALJAVAC
|
|
|
|
|
2009-03-04 11:28:42 +08:00
|
|
|
define transform-classes.jar-to-emma
|
|
|
|
$(hide) java -classpath $(EMMA_JAR) emma instr -outmode fullcopy -outfile \
|
2010-03-11 07:48:03 +08:00
|
|
|
$(PRIVATE_EMMA_COVERAGE_FILE) -ip $< -d $(PRIVATE_EMMA_INTERMEDIATES_DIR) \
|
2010-06-16 04:31:25 +08:00
|
|
|
$(addprefix -ix , $(PRIVATE_EMMA_COVERAGE_FILTER))
|
2009-03-04 11:28:42 +08:00
|
|
|
endef
|
|
|
|
|
|
|
|
#TODO: use a smaller -Xmx value for most libraries;
|
|
|
|
# only core.jar and framework.jar need a heap this big.
|
2009-08-19 05:43:32 +08:00
|
|
|
# Avoid the memory arguments on Windows, dx fails to load for some reason with them.
|
2009-03-04 11:28:42 +08:00
|
|
|
define transform-classes.jar-to-dex
|
|
|
|
@echo "target Dex: $(PRIVATE_MODULE)"
|
|
|
|
@mkdir -p $(dir $@)
|
2014-07-18 12:24:42 +08:00
|
|
|
$(hide) rm -f $(dir $@)classes*.dex
|
2009-08-19 05:43:32 +08:00
|
|
|
$(hide) $(DX) \
|
2012-01-31 07:30:10 +08:00
|
|
|
$(if $(findstring windows,$(HOST_OS)),,-JXms16M -JXmx2048M) \
|
2013-08-20 23:05:27 +08:00
|
|
|
--dex --output=$(dir $@) \
|
2011-04-02 06:45:58 +08:00
|
|
|
$(incremental_dex) \
|
2009-03-04 11:28:42 +08:00
|
|
|
$(if $(NO_OPTIMIZE_DX), \
|
|
|
|
--no-optimize) \
|
|
|
|
$(if $(GENERATE_DEX_DEBUG), \
|
|
|
|
--debug --verbose \
|
|
|
|
--dump-to=$(@:.dex=.lst) \
|
|
|
|
--dump-width=1000) \
|
|
|
|
$(PRIVATE_DX_FLAGS) \
|
|
|
|
$<
|
|
|
|
endef
|
|
|
|
|
|
|
|
# Create a mostly-empty .jar file that we'll add to later.
|
|
|
|
# The MacOS jar tool doesn't like creating empty jar files,
|
|
|
|
# so we need to give it something.
|
|
|
|
define create-empty-package
|
|
|
|
@mkdir -p $(dir $@)
|
2015-02-27 01:36:27 +08:00
|
|
|
$(hide) touch $(dir $@)zipdummy
|
|
|
|
$(hide) (cd $(dir $@) && jar cf $(notdir $@) zipdummy)
|
|
|
|
$(hide) zip -qd $@ zipdummy
|
|
|
|
$(hide) rm $(dir $@)zipdummy
|
2009-03-04 11:28:42 +08:00
|
|
|
endef
|
|
|
|
|
2015-01-15 06:23:56 +08:00
|
|
|
# Copy an arhchive file and delete any class files and empty folders inside.
|
|
|
|
# $(1): the source archive file.
|
|
|
|
# $(2): the destination archive file.
|
|
|
|
define initialize-package-file
|
|
|
|
@mkdir -p $(dir $(2))
|
|
|
|
$(hide) cp -f $(1) $(2)
|
2015-01-29 04:29:38 +08:00
|
|
|
$(hide) zip -qd $(2) "*.class" \
|
|
|
|
$(if $(strip $(PRIVATE_DONT_DELETE_JAR_DIRS)),,"*/") \
|
|
|
|
|| true # Ignore the error when nothing to delete.
|
2015-01-15 06:23:56 +08:00
|
|
|
endef
|
|
|
|
|
2009-03-04 11:28:42 +08:00
|
|
|
#TODO: we kinda want to build different asset packages for
|
|
|
|
# different configurations, then combine them later (or something).
|
|
|
|
# Per-locale, etc.
|
|
|
|
# A list of dynamic and static parameters; build layers for
|
|
|
|
# dynamic params that lay over the static ones.
|
|
|
|
#TODO: update the manifest to point to the package file
|
2009-05-16 09:01:20 +08:00
|
|
|
#Note that the version numbers are given to aapt as simple default
|
|
|
|
#values; applications can override these by explicitly stating
|
|
|
|
#them in their manifest.
|
2009-03-04 11:28:42 +08:00
|
|
|
define add-assets-to-package
|
2010-03-11 08:02:42 +08:00
|
|
|
$(hide) $(AAPT) package -u $(PRIVATE_AAPT_FLAGS) \
|
2011-03-16 04:19:30 +08:00
|
|
|
$(addprefix -c , $(PRIVATE_PRODUCT_AAPT_CONFIG)) \
|
2014-05-10 01:57:48 +08:00
|
|
|
$(addprefix --preferred-density , $(PRIVATE_PRODUCT_AAPT_PREF_CONFIG)) \
|
2009-03-04 11:28:42 +08:00
|
|
|
$(addprefix -M , $(PRIVATE_ANDROID_MANIFEST)) \
|
|
|
|
$(addprefix -S , $(PRIVATE_RESOURCE_DIR)) \
|
|
|
|
$(addprefix -A , $(PRIVATE_ASSET_DIR)) \
|
|
|
|
$(addprefix -I , $(PRIVATE_AAPT_INCLUDES)) \
|
2011-04-09 08:27:35 +08:00
|
|
|
$(addprefix --min-sdk-version , $(PRIVATE_DEFAULT_APP_TARGET_SDK)) \
|
|
|
|
$(addprefix --target-sdk-version , $(PRIVATE_DEFAULT_APP_TARGET_SDK)) \
|
2014-03-21 08:28:57 +08:00
|
|
|
$(if $(filter --product,$(PRIVATE_AAPT_FLAGS)),,$(addprefix --product , $(TARGET_AAPT_CHARACTERISTICS))) \
|
2010-06-24 04:34:22 +08:00
|
|
|
$(if $(filter --version-code,$(PRIVATE_AAPT_FLAGS)),,$(addprefix --version-code , $(PLATFORM_SDK_VERSION))) \
|
2010-06-30 02:08:13 +08:00
|
|
|
$(if $(filter --version-name,$(PRIVATE_AAPT_FLAGS)),,$(addprefix --version-name , $(PLATFORM_VERSION)-$(BUILD_NUMBER))) \
|
2010-02-06 12:36:42 +08:00
|
|
|
$(addprefix --rename-manifest-package , $(PRIVATE_MANIFEST_PACKAGE_NAME)) \
|
2010-09-03 06:41:01 +08:00
|
|
|
$(addprefix --rename-instrumentation-target-package , $(PRIVATE_MANIFEST_INSTRUMENTATION_FOR)) \
|
2009-03-04 11:28:42 +08:00
|
|
|
-F $@
|
|
|
|
endef
|
|
|
|
|
2014-06-25 11:01:52 +08:00
|
|
|
# We need the extra blank line, so that the command will be on a separate line.
|
|
|
|
# $(1): the ABI name
|
|
|
|
# $(2): the list of shared libraies
|
|
|
|
define _add-jni-shared-libs-to-package-per-abi
|
|
|
|
$(hide) cp $(2) $(dir $@)lib/$(1)
|
|
|
|
|
|
|
|
endef
|
|
|
|
|
2009-03-04 11:28:42 +08:00
|
|
|
define add-jni-shared-libs-to-package
|
|
|
|
$(hide) rm -rf $(dir $@)lib
|
2014-06-25 11:01:52 +08:00
|
|
|
$(hide) mkdir -p $(addprefix $(dir $@)lib/,$(PRIVATE_JNI_SHARED_LIBRARIES_ABI))
|
|
|
|
$(foreach abi,$(PRIVATE_JNI_SHARED_LIBRARIES_ABI),\
|
|
|
|
$(call _add-jni-shared-libs-to-package-per-abi,$(abi),\
|
|
|
|
$(patsubst $(abi):%,%,$(filter $(abi):%,$(PRIVATE_JNI_SHARED_LIBRARIES)))))
|
2014-07-24 06:27:21 +08:00
|
|
|
$(hide) (cd $(dir $@) && zip -r $(PRIVATE_JNI_SHARED_LIBRARIES_ZIP_OPTIONS) $(notdir $@) lib)
|
2009-03-04 11:28:42 +08:00
|
|
|
$(hide) rm -rf $(dir $@)lib
|
|
|
|
endef
|
|
|
|
|
|
|
|
#TODO: update the manifest to point to the dex file
|
|
|
|
define add-dex-to-package
|
2014-07-18 12:24:42 +08:00
|
|
|
$(hide) zip -qj $@ $(dir $(PRIVATE_DEX_FILE))classes*.dex
|
2009-03-04 11:28:42 +08:00
|
|
|
endef
|
|
|
|
|
2012-08-10 06:20:50 +08:00
|
|
|
# Add java resources added by the current module.
|
2015-01-15 06:23:56 +08:00
|
|
|
# $(1) destination package
|
2012-08-10 06:20:50 +08:00
|
|
|
#
|
2015-01-15 06:23:56 +08:00
|
|
|
define add-java-resources-to
|
|
|
|
$(call dump-words-to-file, $(PRIVATE_EXTRA_JAR_ARGS), $(1).jar-arg-list)
|
|
|
|
$(hide) jar uf $(1) @$(1).jar-arg-list
|
|
|
|
@rm -f $(1).jar-arg-list
|
2012-08-10 06:20:50 +08:00
|
|
|
endef
|
|
|
|
|
2009-03-04 11:28:42 +08:00
|
|
|
# Sign a package using the specified key/cert.
|
|
|
|
#
|
|
|
|
define sign-package
|
|
|
|
$(hide) mv $@ $@.unsigned
|
|
|
|
$(hide) java -jar $(SIGNAPK_JAR) \
|
2012-11-14 02:55:28 +08:00
|
|
|
$(PRIVATE_CERTIFICATE) $(PRIVATE_PRIVATE_KEY) \
|
|
|
|
$(PRIVATE_ADDITIONAL_CERTIFICATES) $@.unsigned $@.signed
|
2009-03-04 11:28:42 +08:00
|
|
|
$(hide) mv $@.signed $@
|
|
|
|
endef
|
|
|
|
|
2014-07-24 06:27:21 +08:00
|
|
|
# Align STORED entries of a package on 4-byte boundaries to make them easier to mmap.
|
2009-03-04 11:28:42 +08:00
|
|
|
#
|
|
|
|
define align-package
|
|
|
|
$(hide) mv $@ $@.unaligned
|
2014-07-24 06:27:21 +08:00
|
|
|
$(hide) $(ZIPALIGN) \
|
|
|
|
-f \
|
|
|
|
$(if $(findstring true, $(PRIVATE_PAGE_ALIGN_JNI_SHARED_LIBRARIES)),-p ,) \
|
|
|
|
4 \
|
|
|
|
$@.unaligned $@.aligned
|
2009-03-04 11:28:42 +08:00
|
|
|
$(hide) mv $@.aligned $@
|
|
|
|
endef
|
|
|
|
|
|
|
|
define install-dex-debug
|
|
|
|
$(hide) if [ -f "$(PRIVATE_INTERMEDIATES_DIR)/classes.dex" ]; then \
|
|
|
|
mkdir -p $(TOP)/dalvik/DEBUG-FILES; \
|
|
|
|
$(ACP) $(PRIVATE_INTERMEDIATES_DIR)/classes.dex \
|
|
|
|
$(TOP)/dalvik/DEBUG-FILES/$(PRIVATE_MODULE).dex; \
|
|
|
|
fi
|
|
|
|
$(hide) if [ -f "$(PRIVATE_INTERMEDIATES_DIR)/classes.lst" ]; then \
|
|
|
|
mkdir -p $(TOP)/dalvik/DEBUG-FILES; \
|
|
|
|
$(ACP) $(PRIVATE_INTERMEDIATES_DIR)/classes.lst \
|
|
|
|
$(TOP)/dalvik/DEBUG-FILES/$(PRIVATE_MODULE).lst; \
|
|
|
|
fi
|
|
|
|
endef
|
|
|
|
|
|
|
|
# TODO(joeo): If we can ever upgrade to post 3.81 make and get the
|
|
|
|
# new prebuilt rules to work, we should change this to copy the
|
|
|
|
# resources to the out directory and then copy the resources.
|
|
|
|
|
2010-12-11 04:10:24 +08:00
|
|
|
# Note: we intentionally don't clean PRIVATE_CLASS_INTERMEDIATES_DIR
|
|
|
|
# in transform-java-to-classes for the sake of vm-tests.
|
2009-03-04 11:28:42 +08:00
|
|
|
define transform-host-java-to-package
|
|
|
|
@echo "host Java: $(PRIVATE_MODULE) ($(PRIVATE_CLASS_INTERMEDIATES_DIR))"
|
2011-01-21 07:01:56 +08:00
|
|
|
$(call compile-java,$(HOST_JAVAC),$(PRIVATE_BOOTCLASSPATH))
|
2009-03-04 11:28:42 +08:00
|
|
|
endef
|
|
|
|
|
|
|
|
###########################################################
|
|
|
|
## Commands for copying files
|
|
|
|
###########################################################
|
|
|
|
|
|
|
|
# Define a rule to copy a header. Used via $(eval) by copy_headers.make.
|
|
|
|
# $(1): source header
|
|
|
|
# $(2): destination header
|
|
|
|
define copy-one-header
|
|
|
|
$(2): $(1)
|
|
|
|
@echo "Header: $$@"
|
|
|
|
$$(copy-file-to-new-target-with-cp)
|
|
|
|
endef
|
|
|
|
|
|
|
|
# Define a rule to copy a file. For use via $(eval).
|
|
|
|
# $(1): source file
|
|
|
|
# $(2): destination file
|
|
|
|
define copy-one-file
|
|
|
|
$(2): $(1) | $(ACP)
|
|
|
|
@echo "Copy: $$@"
|
|
|
|
$$(copy-file-to-target)
|
|
|
|
endef
|
|
|
|
|
2012-05-18 08:12:04 +08:00
|
|
|
# Copies many files.
|
|
|
|
# $(1): The files to copy. Each entry is a ':' separated src:dst pair
|
|
|
|
# Evaluates to the list of the dst files (ie suitable for a dependency list)
|
|
|
|
define copy-many-files
|
|
|
|
$(foreach f, $(1), $(strip \
|
|
|
|
$(eval _cmf_tuple := $(subst :, ,$(f))) \
|
|
|
|
$(eval _cmf_src := $(word 1,$(_cmf_tuple))) \
|
|
|
|
$(eval _cmf_dest := $(word 2,$(_cmf_tuple))) \
|
|
|
|
$(eval $(call copy-one-file,$(_cmf_src),$(_cmf_dest))) \
|
|
|
|
$(_cmf_dest)))
|
|
|
|
endef
|
|
|
|
|
2012-05-15 05:39:00 +08:00
|
|
|
# Copy the file only if it's a well-formed xml file. For use via $(eval).
|
|
|
|
# $(1): source file
|
|
|
|
# $(2): destination file, must end with .xml.
|
|
|
|
define copy-xml-file-checked
|
|
|
|
$(2): $(1) | $(ACP)
|
|
|
|
@echo "Copy xml: $$@"
|
|
|
|
$(hide) xmllint $$< >/dev/null # Don't print the xml file to stdout.
|
|
|
|
$$(copy-file-to-target)
|
|
|
|
endef
|
|
|
|
|
2009-03-04 11:28:42 +08:00
|
|
|
# The -t option to acp and the -p option to cp is
|
|
|
|
# required for OSX. OSX has a ridiculous restriction
|
|
|
|
# where it's an error for a .a file's modification time
|
|
|
|
# to disagree with an internal timestamp, and this
|
|
|
|
# macro is used to install .a files (among other things).
|
|
|
|
|
|
|
|
# Copy a single file from one place to another,
|
|
|
|
# preserving permissions and overwriting any existing
|
|
|
|
# file.
|
2012-10-02 07:36:23 +08:00
|
|
|
# We disable the "-t" option for acp cannot handle
|
2011-01-19 09:21:20 +08:00
|
|
|
# high resolution timestamp correctly on file systems like ext4.
|
|
|
|
# Therefore copy-file-to-target is the same as copy-file-to-new-target.
|
2009-03-04 11:28:42 +08:00
|
|
|
define copy-file-to-target
|
|
|
|
@mkdir -p $(dir $@)
|
2011-01-19 09:21:20 +08:00
|
|
|
$(hide) $(ACP) -fp $< $@
|
2009-03-04 11:28:42 +08:00
|
|
|
endef
|
|
|
|
|
|
|
|
# The same as copy-file-to-target, but use the local
|
|
|
|
# cp command instead of acp.
|
|
|
|
define copy-file-to-target-with-cp
|
|
|
|
@mkdir -p $(dir $@)
|
|
|
|
$(hide) cp -fp $< $@
|
|
|
|
endef
|
|
|
|
|
2009-08-12 10:16:46 +08:00
|
|
|
# The same as copy-file-to-target, but use the zipalign tool to do so.
|
|
|
|
define copy-file-to-target-with-zipalign
|
|
|
|
@mkdir -p $(dir $@)
|
|
|
|
$(hide) $(ZIPALIGN) -f 4 $< $@
|
|
|
|
endef
|
|
|
|
|
2009-08-07 04:02:19 +08:00
|
|
|
# The same as copy-file-to-target, but strip out "# comment"-style
|
|
|
|
# comments (for config files and such).
|
|
|
|
define copy-file-to-target-strip-comments
|
|
|
|
@mkdir -p $(dir $@)
|
|
|
|
$(hide) sed -e 's/#.*$$//' -e 's/[ \t]*$$//' -e '/^$$/d' < $< > $@
|
|
|
|
endef
|
|
|
|
|
2009-03-04 11:28:42 +08:00
|
|
|
# The same as copy-file-to-target, but don't preserve
|
|
|
|
# the old modification time.
|
|
|
|
define copy-file-to-new-target
|
|
|
|
@mkdir -p $(dir $@)
|
|
|
|
$(hide) $(ACP) -fp $< $@
|
|
|
|
endef
|
|
|
|
|
|
|
|
# The same as copy-file-to-new-target, but use the local
|
|
|
|
# cp command instead of acp.
|
|
|
|
define copy-file-to-new-target-with-cp
|
|
|
|
@mkdir -p $(dir $@)
|
|
|
|
$(hide) cp -f $< $@
|
|
|
|
endef
|
|
|
|
|
|
|
|
# Copy a prebuilt file to a target location.
|
|
|
|
define transform-prebuilt-to-target
|
|
|
|
@echo "$(if $(PRIVATE_IS_HOST_MODULE),host,target) Prebuilt: $(PRIVATE_MODULE) ($@)"
|
|
|
|
$(copy-file-to-target)
|
|
|
|
endef
|
|
|
|
|
2009-08-12 10:16:46 +08:00
|
|
|
# Copy a prebuilt file to a target location, using zipalign on it.
|
|
|
|
define transform-prebuilt-to-target-with-zipalign
|
|
|
|
@echo "$(if $(PRIVATE_IS_HOST_MODULE),host,target) Prebuilt APK: $(PRIVATE_MODULE) ($@)"
|
|
|
|
$(copy-file-to-target-with-zipalign)
|
|
|
|
endef
|
|
|
|
|
2009-08-07 04:02:19 +08:00
|
|
|
# Copy a prebuilt file to a target location, stripping "# comment" comments.
|
|
|
|
define transform-prebuilt-to-target-strip-comments
|
|
|
|
@echo "$(if $(PRIVATE_IS_HOST_MODULE),host,target) Prebuilt: $(PRIVATE_MODULE) ($@)"
|
|
|
|
$(copy-file-to-target-strip-comments)
|
|
|
|
endef
|
|
|
|
|
2009-03-04 11:28:42 +08:00
|
|
|
###########################################################
|
|
|
|
## On some platforms (MacOS), after copying a static
|
|
|
|
## library, ranlib must be run to update an internal
|
|
|
|
## timestamp!?!?!
|
|
|
|
###########################################################
|
|
|
|
|
|
|
|
ifeq ($(HOST_RUN_RANLIB_AFTER_COPYING),true)
|
|
|
|
define transform-host-ranlib-copy-hack
|
|
|
|
$(hide) ranlib $@ || true
|
|
|
|
endef
|
|
|
|
else
|
|
|
|
define transform-host-ranlib-copy-hack
|
2010-05-07 20:37:11 +08:00
|
|
|
@true
|
2009-03-04 11:28:42 +08:00
|
|
|
endef
|
|
|
|
endif
|
|
|
|
|
|
|
|
ifeq ($(TARGET_RUN_RANLIB_AFTER_COPYING),true)
|
|
|
|
define transform-ranlib-copy-hack
|
|
|
|
$(hide) ranlib $@
|
|
|
|
endef
|
|
|
|
else
|
|
|
|
define transform-ranlib-copy-hack
|
2010-05-07 20:37:11 +08:00
|
|
|
@true
|
2009-03-04 11:28:42 +08:00
|
|
|
endef
|
|
|
|
endif
|
|
|
|
|
|
|
|
|
2010-02-02 01:51:23 +08:00
|
|
|
###########################################################
|
|
|
|
## Commands to call Proguard
|
|
|
|
###########################################################
|
|
|
|
define transform-jar-to-proguard
|
2013-08-22 09:32:49 +08:00
|
|
|
@echo Proguard: $@
|
2014-02-07 23:18:59 +08:00
|
|
|
$(hide) $(PROGUARD) -injars $< -outjars $@ $(PRIVATE_PROGUARD_FLAGS) \
|
|
|
|
$(addprefix -injars , $(PRIVATE_EXTRA_INPUT_JAR))
|
2010-02-02 01:51:23 +08:00
|
|
|
endef
|
|
|
|
|
2009-03-04 11:28:42 +08:00
|
|
|
###########################################################
|
|
|
|
## Stuff source generated from one-off tools
|
|
|
|
###########################################################
|
|
|
|
|
|
|
|
define transform-generated-source
|
|
|
|
@echo "target Generated: $(PRIVATE_MODULE) <= $<"
|
|
|
|
@mkdir -p $(dir $@)
|
|
|
|
$(hide) $(PRIVATE_CUSTOM_TOOL)
|
|
|
|
endef
|
|
|
|
|
|
|
|
|
|
|
|
###########################################################
|
|
|
|
## Assertions about attributes of the target
|
|
|
|
###########################################################
|
|
|
|
|
|
|
|
# $(1): The file to check
|
|
|
|
ifndef get-file-size
|
|
|
|
$(error HOST_OS must define get-file-size)
|
|
|
|
endif
|
|
|
|
|
2009-07-03 00:00:54 +08:00
|
|
|
# Convert a partition data size (eg, as reported in /proc/mtd) to the
|
|
|
|
# size of the image used to flash that partition (which includes a
|
2010-12-06 22:24:58 +08:00
|
|
|
# spare area for each page).
|
2009-07-03 00:00:54 +08:00
|
|
|
# $(1): the partition data size
|
|
|
|
define image-size-from-data-size
|
2011-02-10 09:24:27 +08:00
|
|
|
$(strip $(eval _isfds_value := $$(shell echo $$$$(($(1) / $(BOARD_NAND_PAGE_SIZE) * \
|
|
|
|
($(BOARD_NAND_PAGE_SIZE)+$(BOARD_NAND_SPARE_SIZE))))))\
|
|
|
|
$(if $(filter 0, $(_isfds_value)),$(shell echo $$(($(BOARD_NAND_PAGE_SIZE)+$(BOARD_NAND_SPARE_SIZE)))),$(_isfds_value))\
|
|
|
|
$(eval _isfds_value :=))
|
2009-07-03 00:00:54 +08:00
|
|
|
endef
|
|
|
|
|
|
|
|
# $(1): The file(s) to check (often $@)
|
2014-06-17 05:19:36 +08:00
|
|
|
# $(2): The maximum total image size, in decimal bytes.
|
|
|
|
# Make sure to take into account any reserved space needed for the FS.
|
2009-03-04 11:28:42 +08:00
|
|
|
#
|
|
|
|
# If $(2) is empty, evaluates to "true"
|
|
|
|
#
|
|
|
|
# Reserve bad blocks. Make sure that MAX(1% of partition size, 2 blocks)
|
|
|
|
# is left over after the image has been flashed. Round the 1% up to the
|
|
|
|
# next whole flash block size.
|
|
|
|
define assert-max-file-size
|
|
|
|
$(if $(2), \
|
2009-07-09 03:09:04 +08:00
|
|
|
size=$$(for i in $(1); do $(call get-file-size,$$i); echo +; done; echo 0); \
|
|
|
|
total=$$(( $$( echo "$$size" ) )); \
|
2009-07-03 00:00:54 +08:00
|
|
|
printname=$$(echo -n "$(1)" | tr " " +); \
|
|
|
|
img_blocksize=$(call image-size-from-data-size,$(BOARD_FLASH_BLOCK_SIZE)); \
|
|
|
|
twoblocks=$$((img_blocksize * 2)); \
|
|
|
|
onepct=$$((((($(2) / 100) - 1) / img_blocksize + 1) * img_blocksize)); \
|
2014-06-17 05:19:36 +08:00
|
|
|
reserve=$$((twoblocks > onepct ? twoblocks : onepct)); \
|
2009-07-03 00:00:54 +08:00
|
|
|
maxsize=$$(($(2) - reserve)); \
|
2011-12-03 02:34:45 +08:00
|
|
|
echo "$$printname maxsize=$$maxsize blocksize=$$img_blocksize total=$$total reserve=$$reserve"; \
|
2009-07-03 00:00:54 +08:00
|
|
|
if [ "$$total" -gt "$$maxsize" ]; then \
|
|
|
|
echo "error: $$printname too large ($$total > [$(2) - $$reserve])"; \
|
|
|
|
false; \
|
2009-07-09 03:09:04 +08:00
|
|
|
elif [ "$$total" -gt $$((maxsize - 32768)) ]; then \
|
2009-07-03 00:00:54 +08:00
|
|
|
echo "WARNING: $$printname approaching size limit ($$total now; limit $$maxsize)"; \
|
2009-03-04 11:28:42 +08:00
|
|
|
fi \
|
|
|
|
, \
|
|
|
|
true \
|
|
|
|
)
|
|
|
|
endef
|
|
|
|
|
2009-08-08 07:38:08 +08:00
|
|
|
# Like assert-max-file-size, but the second argument is a partition
|
|
|
|
# size, which we'll convert to a max image size before checking it
|
|
|
|
# against the files.
|
|
|
|
#
|
|
|
|
# $(1): The file(s) to check (often $@)
|
|
|
|
# $(2): The partition size.
|
|
|
|
define assert-max-image-size
|
|
|
|
$(if $(2), \
|
2014-06-17 05:19:36 +08:00
|
|
|
$(call assert-max-file-size,$(1),$(call image-size-from-data-size,$(2))))
|
2009-08-08 07:38:08 +08:00
|
|
|
endef
|
|
|
|
|
2009-06-20 08:12:18 +08:00
|
|
|
|
|
|
|
###########################################################
|
|
|
|
## Define device-specific radio files
|
|
|
|
###########################################################
|
2013-07-27 03:19:20 +08:00
|
|
|
INSTALLED_RADIOIMAGE_TARGET :=
|
2009-06-20 08:12:18 +08:00
|
|
|
|
|
|
|
# Copy a radio image file to the output location, and add it to
|
|
|
|
# INSTALLED_RADIOIMAGE_TARGET.
|
|
|
|
# $(1): filename
|
|
|
|
define add-radio-file
|
2010-02-03 05:12:04 +08:00
|
|
|
$(eval $(call add-radio-file-internal,$(1),$(notdir $(1))))
|
2009-06-20 08:12:18 +08:00
|
|
|
endef
|
|
|
|
define add-radio-file-internal
|
2010-02-03 05:12:04 +08:00
|
|
|
INSTALLED_RADIOIMAGE_TARGET += $$(PRODUCT_OUT)/$(2)
|
|
|
|
$$(PRODUCT_OUT)/$(2) : $$(LOCAL_PATH)/$(1) | $$(ACP)
|
2009-06-20 08:12:18 +08:00
|
|
|
$$(transform-prebuilt-to-target)
|
|
|
|
endef
|
|
|
|
|
2012-03-21 07:42:22 +08:00
|
|
|
# Version of add-radio-file that also arranges for the version of the
|
|
|
|
# file to be checked against the contents of
|
|
|
|
# $(TARGET_BOARD_INFO_FILE).
|
|
|
|
# $(1): filename
|
|
|
|
# $(2): name of version variable in board-info (eg, "version-baseband")
|
|
|
|
define add-radio-file-checked
|
|
|
|
$(eval $(call add-radio-file-checked-internal,$(1),$(notdir $(1)),$(2)))
|
|
|
|
endef
|
|
|
|
define add-radio-file-checked-internal
|
|
|
|
INSTALLED_RADIOIMAGE_TARGET += $$(PRODUCT_OUT)/$(2)
|
|
|
|
BOARD_INFO_CHECK += $(3):$(LOCAL_PATH)/$(1)
|
|
|
|
$$(PRODUCT_OUT)/$(2) : $$(LOCAL_PATH)/$(1) | $$(ACP)
|
|
|
|
$$(transform-prebuilt-to-target)
|
|
|
|
endef
|
|
|
|
|
2009-06-20 08:12:18 +08:00
|
|
|
|
Add an inherit-package macro to the build system.
This lets you use the source code from one apk to build a new one
with a new module name, a new android package name and optionally,
a new certificate.
To use this, in a makefile, add this:
$(call inherit-package, \
packages/apps/Music/Android.mk, \
Music, \
MusicFork, \
my_cert, \
com.example.music)
You don't need the LOCAL_PATH and CLEAR_VARS stuff. It will override
only the packages that are defined in the makefile name you give, but
if other modules of other types are defined, you will get an error
saying that it's defined twice. In that case, you need to move the
duplicate library (for example a .so) out into a different makefile.
A LOCAL_OVERRIDES_PACKAGES entry is automatically created for the
forked app.
2010-02-05 09:37:21 +08:00
|
|
|
###########################################################
|
|
|
|
# Override the package defined in $(1), setting the
|
|
|
|
# variables listed below differently.
|
|
|
|
#
|
|
|
|
# $(1): The makefile to override (relative to the source
|
|
|
|
# tree root)
|
|
|
|
# $(2): Old LOCAL_PACKAGE_NAME value.
|
|
|
|
# $(3): New LOCAL_PACKAGE_NAME value.
|
2010-09-03 06:41:01 +08:00
|
|
|
# $(4): New LOCAL_MANIFEST_PACKAGE_NAME value.
|
|
|
|
# $(5): New LOCAL_CERTIFICATE value.
|
|
|
|
# $(6): New LOCAL_INSTRUMENTATION_FOR value.
|
|
|
|
# $(7): New LOCAL_MANIFEST_INSTRUMENTATION_FOR value.
|
Add an inherit-package macro to the build system.
This lets you use the source code from one apk to build a new one
with a new module name, a new android package name and optionally,
a new certificate.
To use this, in a makefile, add this:
$(call inherit-package, \
packages/apps/Music/Android.mk, \
Music, \
MusicFork, \
my_cert, \
com.example.music)
You don't need the LOCAL_PATH and CLEAR_VARS stuff. It will override
only the packages that are defined in the makefile name you give, but
if other modules of other types are defined, you will get an error
saying that it's defined twice. In that case, you need to move the
duplicate library (for example a .so) out into a different makefile.
A LOCAL_OVERRIDES_PACKAGES entry is automatically created for the
forked app.
2010-02-05 09:37:21 +08:00
|
|
|
#
|
|
|
|
# Note that LOCAL_PACKAGE_OVERRIDES is NOT cleared in
|
|
|
|
# clear_vars.mk.
|
|
|
|
###########################################################
|
|
|
|
define inherit-package
|
2010-09-03 06:41:01 +08:00
|
|
|
$(eval $(call inherit-package-internal,$(1),$(2),$(3),$(4),$(5),$(6),$(7)))
|
Add an inherit-package macro to the build system.
This lets you use the source code from one apk to build a new one
with a new module name, a new android package name and optionally,
a new certificate.
To use this, in a makefile, add this:
$(call inherit-package, \
packages/apps/Music/Android.mk, \
Music, \
MusicFork, \
my_cert, \
com.example.music)
You don't need the LOCAL_PATH and CLEAR_VARS stuff. It will override
only the packages that are defined in the makefile name you give, but
if other modules of other types are defined, you will get an error
saying that it's defined twice. In that case, you need to move the
duplicate library (for example a .so) out into a different makefile.
A LOCAL_OVERRIDES_PACKAGES entry is automatically created for the
forked app.
2010-02-05 09:37:21 +08:00
|
|
|
endef
|
|
|
|
|
|
|
|
define inherit-package-internal
|
|
|
|
LOCAL_PACKAGE_OVERRIDES \
|
2010-09-03 06:41:01 +08:00
|
|
|
:= $(strip $(1))||$(strip $(2))||$(strip $(3))||$(strip $(4))||&&$(strip $(5))||&&$(strip $(6))||&&$(strip $(7)) $(LOCAL_PACKAGE_OVERRIDES)
|
Add an inherit-package macro to the build system.
This lets you use the source code from one apk to build a new one
with a new module name, a new android package name and optionally,
a new certificate.
To use this, in a makefile, add this:
$(call inherit-package, \
packages/apps/Music/Android.mk, \
Music, \
MusicFork, \
my_cert, \
com.example.music)
You don't need the LOCAL_PATH and CLEAR_VARS stuff. It will override
only the packages that are defined in the makefile name you give, but
if other modules of other types are defined, you will get an error
saying that it's defined twice. In that case, you need to move the
duplicate library (for example a .so) out into a different makefile.
A LOCAL_OVERRIDES_PACKAGES entry is automatically created for the
forked app.
2010-02-05 09:37:21 +08:00
|
|
|
include $(1)
|
|
|
|
LOCAL_PACKAGE_OVERRIDES \
|
|
|
|
:= $(wordlist 1,$(words $(LOCAL_PACKAGE_OVERRIDES)), $(LOCAL_PACKAGE_OVERRIDES))
|
|
|
|
endef
|
|
|
|
|
|
|
|
# To be used with inherit-package above
|
|
|
|
# Evalutes to true if the package was overridden
|
|
|
|
define set-inherited-package-variables
|
|
|
|
$(strip $(call set-inherited-package-variables-internal))
|
|
|
|
endef
|
|
|
|
|
|
|
|
define keep-or-override
|
|
|
|
$(eval $(1) := $(if $(2),$(2),$($(1))))
|
|
|
|
endef
|
|
|
|
|
|
|
|
define set-inherited-package-variables-internal
|
|
|
|
$(eval _o := $(subst ||, ,$(lastword $(LOCAL_PACKAGE_OVERRIDES))))
|
|
|
|
$(eval _n := $(subst ||, ,$(firstword $(LOCAL_PACKAGE_OVERRIDES))))
|
|
|
|
$(if $(filter $(word 2,$(_n)),$(LOCAL_PACKAGE_NAME)), \
|
|
|
|
$(eval LOCAL_PACKAGE_NAME := $(word 3,$(_o))) \
|
|
|
|
$(eval LOCAL_MANIFEST_PACKAGE_NAME := $(word 4,$(_o))) \
|
2010-09-03 06:41:01 +08:00
|
|
|
$(call keep-or-override,LOCAL_CERTIFICATE,$(patsubst &&%,%,$(word 5,$(_o)))) \
|
|
|
|
$(call keep-or-override,LOCAL_INSTRUMENTATION_FOR,$(patsubst &&%,%,$(word 6,$(_o)))) \
|
|
|
|
$(call keep-or-override,LOCAL_MANIFEST_INSTRUMENTATION_FOR,$(patsubst &&%,%,$(word 7,$(_o)))) \
|
Add an inherit-package macro to the build system.
This lets you use the source code from one apk to build a new one
with a new module name, a new android package name and optionally,
a new certificate.
To use this, in a makefile, add this:
$(call inherit-package, \
packages/apps/Music/Android.mk, \
Music, \
MusicFork, \
my_cert, \
com.example.music)
You don't need the LOCAL_PATH and CLEAR_VARS stuff. It will override
only the packages that are defined in the makefile name you give, but
if other modules of other types are defined, you will get an error
saying that it's defined twice. In that case, you need to move the
duplicate library (for example a .so) out into a different makefile.
A LOCAL_OVERRIDES_PACKAGES entry is automatically created for the
forked app.
2010-02-05 09:37:21 +08:00
|
|
|
$(eval LOCAL_OVERRIDES_PACKAGES := $(sort $(LOCAL_OVERRIDES_PACKAGES) $(word 2,$(_o)))) \
|
|
|
|
true \
|
|
|
|
,)
|
|
|
|
endef
|
|
|
|
|
2009-03-04 11:28:42 +08:00
|
|
|
###########################################################
|
2012-11-15 07:57:07 +08:00
|
|
|
## API Check
|
|
|
|
###########################################################
|
|
|
|
|
|
|
|
# eval this to define a rule that runs apicheck.
|
|
|
|
#
|
|
|
|
# Args:
|
|
|
|
# $(1) target
|
|
|
|
# $(2) stable api file
|
|
|
|
# $(3) api file to be tested
|
2014-03-14 07:21:08 +08:00
|
|
|
# $(4) stable removed api file
|
2014-02-22 06:18:19 +08:00
|
|
|
# $(5) removed api file to be tested
|
|
|
|
# $(6) arguments for apicheck
|
|
|
|
# $(7) command to run if apicheck failed
|
|
|
|
# $(8) target dependent on this api check
|
|
|
|
# $(9) additional dependencies
|
2012-11-15 07:57:07 +08:00
|
|
|
define check-api
|
2014-03-14 07:21:08 +08:00
|
|
|
$(TARGET_OUT_COMMON_INTERMEDIATES)/PACKAGING/$(strip $(1))-timestamp: $(2) $(3) $(4) $(APICHECK) $(9)
|
2012-11-15 07:57:07 +08:00
|
|
|
@echo "Checking API:" $(1)
|
2014-02-22 06:18:19 +08:00
|
|
|
$(hide) ( $(APICHECK_COMMAND) $(6) $(2) $(3) $(4) $(5) || ( $(7) ; exit 38 ) )
|
2012-11-15 07:57:07 +08:00
|
|
|
$(hide) mkdir -p $$(dir $$@)
|
|
|
|
$(hide) touch $$@
|
2014-02-22 06:18:19 +08:00
|
|
|
$(8): $(TARGET_OUT_COMMON_INTERMEDIATES)/PACKAGING/$(strip $(1))-timestamp
|
2012-11-15 07:57:07 +08:00
|
|
|
endef
|
|
|
|
|
Build from source or prebuilt
With this change, you can easily switch between building from source
code and prebuilt.
Set LOCAL_PREBUILT_MODULE_FILE to the path of the prebuilt file,
relative to the top of the source tree, in the usual module definition.
The prebuilt will be used unless any of the followings satisfied:
1) ANDROID_BUILD_FROM_SOURCE is "true", which disable prebuilt globally;
2) The module name is in ANDROID_NO_PREBUILT_MODULES;
3) The LOCAL_PATH is prefixed by any of ANDROID_NO_PREBUILT_PATHS.
A developer can set ANDROID_NO_PREBUILT_MODULES or
ANDROID_NO_PREBUILT_PATHS to build only his own module(s) from source,
while build other modules from prebuilts.
You can set ANDROID_BUILD_FROM_SOURCE to true to build everything from
source.
Those variables can be set with shell environmental variable or in your
buildspec.mk.
Sometimes module B is able to be built from source only if module A is
also
built from source, for example, if B is the test apk of A.
In that case, you can use the macro include-if-build-from-source to
include B's Android.mk only if A is built from source too, or
if-build-from-source to conditionally include the definition of module
B,
if their module definitions are in the same Android.mk.
Support host-executable-hook and host-shared-library-hook.
Change-Id: Icab7cf028c87eaba0dd7efc2a7749fd6f32b44e4
2012-12-14 10:23:01 +08:00
|
|
|
## Whether to build from source if prebuilt alternative exists
|
|
|
|
###########################################################
|
|
|
|
# $(1): module name
|
|
|
|
# $(2): LOCAL_PATH
|
|
|
|
# Expands to empty string if not from source.
|
|
|
|
ifeq (true,$(ANDROID_BUILD_FROM_SOURCE))
|
|
|
|
define if-build-from-source
|
|
|
|
true
|
|
|
|
endef
|
|
|
|
else
|
|
|
|
define if-build-from-source
|
|
|
|
$(if $(filter $(ANDROID_NO_PREBUILT_MODULES),$(1))$(filter \
|
|
|
|
$(addsuffix %,$(ANDROID_NO_PREBUILT_PATHS)),$(2)),true)
|
|
|
|
endef
|
|
|
|
endif
|
|
|
|
|
|
|
|
# Include makefile $(1) if build from source for module $(2)
|
|
|
|
# $(1): the makefile to include
|
|
|
|
# $(2): module name
|
|
|
|
# $(3): LOCAL_PATH
|
|
|
|
define include-if-build-from-source
|
|
|
|
$(if $(call if-build-from-source,$(2),$(3)),$(eval include $(1)))
|
|
|
|
endef
|
|
|
|
|
2014-09-27 01:41:27 +08:00
|
|
|
# Return the arch for the source file of a prebuilt
|
|
|
|
# Return "none" if no matching arch found, so the result can be passed to
|
|
|
|
# LOCAL_MODULE_TARGET_ARCH.
|
2014-02-28 06:10:53 +08:00
|
|
|
# $(1) the list of archs supported by the prebuilt
|
|
|
|
define get-prebuilt-src-arch
|
|
|
|
$(strip $(if $(filter $(TARGET_ARCH),$(1)),$(TARGET_ARCH),\
|
2014-09-27 01:41:27 +08:00
|
|
|
$(if $(filter $(TARGET_2ND_ARCH),$(1)),$(TARGET_2ND_ARCH),none)))
|
2014-02-28 06:10:53 +08:00
|
|
|
endef
|
|
|
|
|
2012-11-15 07:57:07 +08:00
|
|
|
###########################################################
|
2009-03-04 11:28:42 +08:00
|
|
|
## Other includes
|
|
|
|
###########################################################
|
|
|
|
|
|
|
|
# -----------------------------------------------------------------
|
|
|
|
# Rules and functions to help copy important files to DIST_DIR
|
|
|
|
# when requested.
|
|
|
|
include $(BUILD_SYSTEM)/distdir.mk
|
|
|
|
|
2010-10-20 19:41:59 +08:00
|
|
|
# Include any vendor specific definitions.mk file
|
|
|
|
-include $(TOPDIR)vendor/*/build/core/definitions.mk
|
2014-10-28 23:32:11 +08:00
|
|
|
-include $(TOPDIR)device/*/build/core/definitions.mk
|
2010-10-20 19:41:59 +08:00
|
|
|
|
2009-03-04 11:28:42 +08:00
|
|
|
# broken:
|
|
|
|
# $(foreach file,$^,$(if $(findstring,.a,$(suffix $file)),-l$(file),$(file)))
|
|
|
|
|
|
|
|
###########################################################
|
|
|
|
## Misc notes
|
|
|
|
###########################################################
|
|
|
|
|
|
|
|
#DEPDIR = .deps
|
|
|
|
#df = $(DEPDIR)/$(*F)
|
|
|
|
|
|
|
|
#SRCS = foo.c bar.c ...
|
|
|
|
|
|
|
|
#%.o : %.c
|
|
|
|
# @$(MAKEDEPEND); \
|
|
|
|
# cp $(df).d $(df).P; \
|
|
|
|
# sed -e 's/#.*//' -e 's/^[^:]*: *//' -e 's/ *\\$$//' \
|
|
|
|
# -e '/^$$/ d' -e 's/$$/ :/' < $(df).d >> $(df).P; \
|
|
|
|
# rm -f $(df).d
|
|
|
|
# $(COMPILE.c) -o $@ $<
|
|
|
|
|
|
|
|
#-include $(SRCS:%.c=$(DEPDIR)/%.P)
|
|
|
|
|
|
|
|
|
|
|
|
#%.o : %.c
|
|
|
|
# $(COMPILE.c) -MD -o $@ $<
|
|
|
|
# @cp $*.d $*.P; \
|
|
|
|
# sed -e 's/#.*//' -e 's/^[^:]*: *//' -e 's/ *\\$$//' \
|
|
|
|
# -e '/^$$/ d' -e 's/$$/ :/' < $*.d >> $*.P; \
|
|
|
|
# rm -f $*.d
|