2009-03-04 04:28:42 +01:00
|
|
|
###########################################################
|
|
|
|
## Standard rules for building any target-side binaries
|
|
|
|
## with dynamic linkage (dynamic libraries or executables
|
|
|
|
## that link with dynamic libraries)
|
|
|
|
##
|
|
|
|
## Files including this file must define a rule to build
|
|
|
|
## the target $(linked_module).
|
|
|
|
###########################################################
|
|
|
|
|
|
|
|
# This constraint means that we can hard-code any $(TARGET_*) variables.
|
|
|
|
ifdef LOCAL_IS_HOST_MODULE
|
|
|
|
$(error This file should not be used to build host binaries. Included by (or near) $(lastword $(filter-out config/%,$(MAKEFILE_LIST))))
|
|
|
|
endif
|
|
|
|
|
|
|
|
LOCAL_UNSTRIPPED_PATH := $(strip $(LOCAL_UNSTRIPPED_PATH))
|
|
|
|
ifeq ($(LOCAL_UNSTRIPPED_PATH),)
|
2010-09-04 01:22:47 +02:00
|
|
|
ifeq ($(LOCAL_MODULE_PATH),)
|
|
|
|
LOCAL_UNSTRIPPED_PATH := $(TARGET_OUT_$(LOCAL_MODULE_CLASS)_UNSTRIPPED)
|
|
|
|
else
|
|
|
|
# We have to figure out the corresponding unstripped path if LOCAL_MODULE_PATH is customized.
|
|
|
|
LOCAL_UNSTRIPPED_PATH := $(TARGET_OUT_UNSTRIPPED)/$(patsubst $(PRODUCT_OUT)/%,%,$(LOCAL_MODULE_PATH))
|
|
|
|
endif
|
2009-03-04 04:28:42 +01:00
|
|
|
endif
|
|
|
|
|
|
|
|
# The name of the target file, without any path prepended.
|
2009-03-26 00:12:29 +01:00
|
|
|
# TODO: This duplicates logic from base_rules.mk because we need to
|
|
|
|
# know its results before base_rules.mk is included.
|
|
|
|
# Consolidate the duplicates.
|
|
|
|
LOCAL_MODULE_STEM := $(strip $(LOCAL_MODULE_STEM))
|
|
|
|
ifeq ($(LOCAL_MODULE_STEM),)
|
|
|
|
LOCAL_MODULE_STEM := $(LOCAL_MODULE)
|
|
|
|
endif
|
|
|
|
LOCAL_INSTALLED_MODULE_STEM := $(LOCAL_MODULE_STEM)$(LOCAL_MODULE_SUFFIX)
|
|
|
|
LOCAL_BUILT_MODULE_STEM := $(LOCAL_INSTALLED_MODULE_STEM)
|
2009-03-04 04:28:42 +01:00
|
|
|
|
|
|
|
# base_rules.make defines $(intermediates), but we need its value
|
|
|
|
# before we include base_rules. Make a guess, and verify that
|
|
|
|
# it's correct once the real value is defined.
|
|
|
|
guessed_intermediates := $(call local-intermediates-dir)
|
|
|
|
|
|
|
|
# Define the target that is the unmodified output of the linker.
|
|
|
|
# The basename of this target must be the same as the final output
|
|
|
|
# binary name, because it's used to set the "soname" in the binary.
|
|
|
|
# The includer of this file will define a rule to build this target.
|
|
|
|
linked_module := $(guessed_intermediates)/LINKED/$(LOCAL_BUILT_MODULE_STEM)
|
|
|
|
|
|
|
|
ALL_ORIGINAL_DYNAMIC_BINARIES += $(linked_module)
|
|
|
|
|
|
|
|
# Because TARGET_SYMBOL_FILTER_FILE depends on ALL_ORIGINAL_DYNAMIC_BINARIES,
|
|
|
|
# the linked_module rules won't necessarily inherit the PRIVATE_
|
|
|
|
# variables from LOCAL_BUILT_MODULE. This tells binary.make to explicitly
|
|
|
|
# define the PRIVATE_ variables for linked_module as well as for
|
|
|
|
# LOCAL_BUILT_MODULE.
|
|
|
|
LOCAL_INTERMEDIATE_TARGETS := $(linked_module)
|
|
|
|
|
|
|
|
###################################
|
|
|
|
include $(BUILD_SYSTEM)/binary.mk
|
|
|
|
###################################
|
|
|
|
|
|
|
|
# Make sure that our guess at the value of intermediates was correct.
|
|
|
|
ifneq ($(intermediates),$(guessed_intermediates))
|
|
|
|
$(error Internal error: guessed path '$(guessed_intermediates)' doesn't match '$(intermediates))
|
|
|
|
endif
|
|
|
|
|
|
|
|
###########################################################
|
|
|
|
## Compress
|
|
|
|
###########################################################
|
|
|
|
compress_input := $(linked_module)
|
|
|
|
|
|
|
|
ifeq ($(strip $(LOCAL_COMPRESS_MODULE_SYMBOLS)),)
|
|
|
|
LOCAL_COMPRESS_MODULE_SYMBOLS := $(strip $(TARGET_COMPRESS_MODULE_SYMBOLS))
|
|
|
|
endif
|
|
|
|
|
|
|
|
ifeq ($(LOCAL_COMPRESS_MODULE_SYMBOLS),true)
|
|
|
|
$(error Symbol compression not yet supported.)
|
|
|
|
compress_output := $(intermediates)/COMPRESSED-$(LOCAL_BUILT_MODULE_STEM)
|
|
|
|
|
2010-06-24 23:02:00 +02:00
|
|
|
#TODO: write the real $(STRIPPER) rule.
|
2009-03-04 04:28:42 +01:00
|
|
|
#TODO: define a rule to build TARGET_SYMBOL_FILTER_FILE, and
|
|
|
|
# make it depend on ALL_ORIGINAL_DYNAMIC_BINARIES.
|
|
|
|
$(compress_output): $(compress_input) $(TARGET_SYMBOL_FILTER_FILE) | $(ACP)
|
|
|
|
@echo "target Compress Symbols: $(PRIVATE_MODULE) ($@)"
|
|
|
|
$(copy-file-to-target)
|
|
|
|
else
|
|
|
|
# Skip this step.
|
|
|
|
compress_output := $(compress_input)
|
|
|
|
endif
|
|
|
|
|
2011-03-14 19:44:57 +01:00
|
|
|
###########################################################
|
|
|
|
## Store a copy with symbols for symbolic debugging
|
|
|
|
###########################################################
|
|
|
|
symbolic_input := $(compress_output)
|
|
|
|
symbolic_output := $(LOCAL_UNSTRIPPED_PATH)/$(LOCAL_BUILT_MODULE_STEM)
|
|
|
|
$(symbolic_output) : $(symbolic_input) | $(ACP)
|
|
|
|
@echo "target Symbolic: $(PRIVATE_MODULE) ($@)"
|
|
|
|
$(copy-file-to-target)
|
|
|
|
|
2009-03-04 04:28:42 +01:00
|
|
|
|
|
|
|
###########################################################
|
|
|
|
## Strip
|
|
|
|
###########################################################
|
2011-03-14 19:44:57 +01:00
|
|
|
strip_input := $(symbolic_output)
|
2009-03-04 04:28:42 +01:00
|
|
|
strip_output := $(LOCAL_BUILT_MODULE)
|
|
|
|
|
|
|
|
ifeq ($(strip $(LOCAL_STRIP_MODULE)),)
|
|
|
|
LOCAL_STRIP_MODULE := $(strip $(TARGET_STRIP_MODULE))
|
|
|
|
endif
|
|
|
|
|
|
|
|
ifeq ($(LOCAL_STRIP_MODULE),true)
|
|
|
|
# Strip the binary
|
2010-06-24 23:02:00 +02:00
|
|
|
$(strip_output): $(strip_input) | $(TARGET_STRIP)
|
2009-03-04 04:28:42 +01:00
|
|
|
$(transform-to-stripped)
|
|
|
|
else
|
|
|
|
# Don't strip the binary, just copy it. We can't skip this step
|
|
|
|
# because a copy of the binary must appear at LOCAL_BUILT_MODULE.
|
|
|
|
#
|
|
|
|
# If the binary we're copying is acp or a prerequisite,
|
|
|
|
# use cp(1) instead.
|
|
|
|
ifneq ($(LOCAL_ACP_UNAVAILABLE),true)
|
|
|
|
$(strip_output): $(strip_input) | $(ACP)
|
|
|
|
@echo "target Unstripped: $(PRIVATE_MODULE) ($@)"
|
|
|
|
$(copy-file-to-target)
|
|
|
|
else
|
|
|
|
$(strip_output): $(strip_input)
|
|
|
|
@echo "target Unstripped: $(PRIVATE_MODULE) ($@)"
|
|
|
|
$(copy-file-to-target-with-cp)
|
|
|
|
endif
|
|
|
|
endif # LOCAL_STRIP_MODULE
|
|
|
|
|
|
|
|
|
|
|
|
$(cleantarget): PRIVATE_CLEAN_FILES := \
|
|
|
|
$(PRIVATE_CLEAN_FILES) \
|
|
|
|
$(linked_module) \
|
2011-03-14 19:44:57 +01:00
|
|
|
$(symbolic_output) \
|
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 01:19:48 +01:00
|
|
|
$(compress_output)
|