Merge branch 'gingerbread' into gingerbread-release
diff --git a/core/binary.mk b/core/binary.mk
index d5528b1..da9eca1 100644
--- a/core/binary.mk
+++ b/core/binary.mk
@@ -5,6 +5,31 @@
## The list of object files is exported in $(all_objects).
###########################################################
+######################################
+## Sanity check for LOCAL_NDK_VERSION
+######################################
+my_ndk_version_root :=
+ifdef LOCAL_NDK_VERSION
+ ifdef LOCAL_IS_HOST_MODULE
+ $(error $(LOCAL_PATH): LOCAL_NDK_VERSION can not be used in host module)
+ endif
+ ifneq ($(filter-out SHARED_LIBRARIES STATIC_LIBRARIES,$(LOCAL_MODULE_CLASS)),)
+ $(error $(LOCAL_PATH): LOCAL_NDK_VERSION can only be used to build target shared/static libraries, \
+ while your module is of class $(LOCAL_MODULE_CLASS))
+ endif
+ ifeq ($(filter $(LOCAL_NDK_VERSION),$(TARGET_AVAILABLE_NDK_VERSIONS)),)
+ $(error $(LOCAL_PATH): Invalid LOCAL_NDK_VERSION '$(LOCAL_NDK_VERSION)' \
+ Choices are $(TARGET_AVAILABLE_NDK_VERSIONS))
+ endif
+ ifndef LOCAL_SDK_VERSION
+ $(error $(LOCAL_PATH): LOCAL_NDK_VERSION must be defined with LOCAL_SDK_VERSION)
+ endif
+ my_ndk_version_root := $(HISTORICAL_NDK_VERSIONS_ROOT)/android-ndk-r$(LOCAL_NDK_VERSION)/$(BUILD_OS)/platforms/android-$(LOCAL_SDK_VERSION)/arch-$(TARGET_ARCH)
+ ifeq ($(wildcard $(my_ndk_version_root)),)
+ $(error $(LOCAL_PATH): ndk version root does not exist: $(my_ndk_version_root))
+ endif
+endif
+
#######################################
include $(BUILD_SYSTEM)/base_rules.mk
#######################################
@@ -19,6 +44,26 @@
endif
###########################################################
+## Define PRIVATE_ variables from global vars
+###########################################################
+ifdef LOCAL_NDK_VERSION
+my_target_project_includes :=
+my_target_c_inclues := $(my_ndk_version_root)/usr/include
+# TODO: more reliable way to remove platform stuff.
+my_target_global_cflags := $(filter-out -include -I system/%, $(TARGET_GLOBAL_CFLAGS))
+my_target_global_cppflags := $(filter-out -include -I system/%, $(TARGET_GLOBAL_CPPFLAGS))
+else
+my_target_project_includes := $(TARGET_PROJECT_INCLUDES)
+my_target_c_inclues := $(TARGET_C_INCLUDES)
+my_target_global_cflags := $(TARGET_GLOBAL_CFLAGS)
+my_target_global_cppflags := $(TARGET_GLOBAL_CPPFLAGS)
+endif
+$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_TARGET_PROJECT_INCLUDES := $(my_target_project_includes)
+$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_TARGET_C_INCLUDES := $(my_target_c_inclues)
+$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_TARGET_GLOBAL_CFLAGS := $(my_target_global_cflags)
+$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_TARGET_GLOBAL_CPPFLAGS := $(my_target_global_cppflags)
+
+###########################################################
## Define PRIVATE_ variables used by multiple module types
###########################################################
$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_NO_DEFAULT_COMPILER_FLAGS := \
@@ -310,11 +355,13 @@
# to by supplying a LOCAL_SYSTEM_SHARED_LIBRARIES value. One would
# supply that, for example, when building libc itself.
###########################################################
-ifndef LOCAL_IS_HOST_MODULE
+ifdef LOCAL_IS_HOST_MODULE
ifeq ($(LOCAL_SYSTEM_SHARED_LIBRARIES),none)
- LOCAL_SHARED_LIBRARIES += $($(my_prefix)DEFAULT_SYSTEM_SHARED_LIBRARIES)
- else
- LOCAL_SHARED_LIBRARIES += $(LOCAL_SYSTEM_SHARED_LIBRARIES)
+ LOCAL_SYSTEM_SHARED_LIBRARIES :=
+ endif
+else
+ ifeq ($(LOCAL_SYSTEM_SHARED_LIBRARIES),none)
+ LOCAL_SYSTEM_SHARED_LIBRARIES := $($(my_prefix)DEFAULT_SYSTEM_SHARED_LIBRARIES)
endif
endif
@@ -373,11 +420,35 @@
so_suffix := $($(my_prefix)SHLIB_SUFFIX)
a_suffix := $($(my_prefix)STATIC_LIB_SUFFIX)
+ifdef LOCAL_NDK_VERSION
built_shared_libraries := \
$(addprefix $($(my_prefix)OUT_INTERMEDIATE_LIBRARIES)/, \
$(addsuffix $(so_suffix), \
$(LOCAL_SHARED_LIBRARIES)))
+# Get the list of INSTALLED libraries. Strip off the various
+# intermediates directories and point to the common lib dirs.
+installed_shared_libraries := \
+ $(addprefix $($(my_prefix)OUT_SHARED_LIBRARIES)/, \
+ $(notdir $(built_shared_libraries)))
+
+my_system_shared_libraries_fullpath := $(addprefix $(my_ndk_version_root)/usr/lib/, \
+ $(addsuffix $(so_suffix), $(LOCAL_SYSTEM_SHARED_LIBRARIES)))
+
+built_shared_libraries += $(my_system_shared_libraries_fullpath)
+LOCAL_SHARED_LIBRARIES += $(LOCAL_SYSTEM_SHARED_LIBRARIES)
+else
+LOCAL_SHARED_LIBRARIES += $(LOCAL_SYSTEM_SHARED_LIBRARIES)
+built_shared_libraries := \
+ $(addprefix $($(my_prefix)OUT_INTERMEDIATE_LIBRARIES)/, \
+ $(addsuffix $(so_suffix), \
+ $(LOCAL_SHARED_LIBRARIES)))
+
+installed_shared_libraries := \
+ $(addprefix $($(my_prefix)OUT_SHARED_LIBRARIES)/, \
+ $(notdir $(built_shared_libraries)))
+endif
+
built_static_libraries := \
$(foreach lib,$(LOCAL_STATIC_LIBRARIES), \
$(call intermediates-dir-for, \
@@ -388,12 +459,6 @@
$(call intermediates-dir-for, \
STATIC_LIBRARIES,$(lib),$(LOCAL_IS_HOST_MODULE))/$(lib)$(a_suffix))
-# Get the list of INSTALLED libraries. Strip off the various
-# intermediates directories and point to the common lib dirs.
-installed_shared_libraries := \
- $(addprefix $($(my_prefix)OUT_SHARED_LIBRARIES)/, \
- $(notdir $(built_shared_libraries)))
-
# We don't care about installed static libraries, since the
# libraries have already been linked into the module at that point.
# We do, however, care about the NOTICE files for any static
diff --git a/core/clear_vars.mk b/core/clear_vars.mk
index c37b43e..f311a70 100644
--- a/core/clear_vars.mk
+++ b/core/clear_vars.mk
@@ -89,6 +89,7 @@
LOCAL_DX_FLAGS:=
LOCAL_CERTIFICATE:=
LOCAL_SDK_VERSION:=
+LOCAL_NDK_VERSION:=
LOCAL_NO_EMMA_INSTRUMENT:=
LOCAL_NO_EMMA_COMPILE:=
LOCAL_PROGUARD_ENABLED:= # '',optonly,full,custom
diff --git a/core/combo/TARGET_linux-arm.mk b/core/combo/TARGET_linux-arm.mk
index aa53767..ae1997c 100644
--- a/core/combo/TARGET_linux-arm.mk
+++ b/core/combo/TARGET_linux-arm.mk
@@ -230,20 +230,20 @@
-nostdlib -Wl,-soname,$(notdir $@) -Wl,-T,$(BUILD_SYSTEM)/armelf.xsc \
-Wl,--gc-sections \
-Wl,-shared,-Bsymbolic \
- $(TARGET_GLOBAL_LD_DIRS) \
+ $(PRIVATE_TARGET_GLOBAL_LD_DIRS) \
$(PRIVATE_ALL_OBJECTS) \
- $(TARGET_CRTBEGIN_SO_O) \
+ $(PRIVATE_TARGET_CRTBEGIN_SO_O) \
-Wl,--whole-archive \
$(call normalize-host-libraries,$(PRIVATE_ALL_WHOLE_STATIC_LIBRARIES)) \
-Wl,--no-whole-archive \
$(call normalize-target-libraries,$(PRIVATE_ALL_STATIC_LIBRARIES)) \
$(call normalize-target-libraries,$(PRIVATE_ALL_SHARED_LIBRARIES)) \
-o $@ \
- $(TARGET_GLOBAL_LDFLAGS) \
+ $(PRIVATE_TARGET_GLOBAL_LDFLAGS) \
$(PRIVATE_LDFLAGS) \
- $(TARGET_FDO_LIB) \
- $(TARGET_LIBGCC) \
- $(TARGET_CRTEND_SO_O)
+ $(PRIVATE_TARGET_FDO_LIB) \
+ $(PRIVATE_TARGET_LIBGCC) \
+ $(PRIVATE_TARGET_CRTEND_SO_O)
endef
define transform-o-to-executable-inner
diff --git a/core/combo/TARGET_linux-sh.mk b/core/combo/TARGET_linux-sh.mk
index 361fe2e..f373d21d 100644
--- a/core/combo/TARGET_linux-sh.mk
+++ b/core/combo/TARGET_linux-sh.mk
@@ -103,8 +103,8 @@
TARGET_CRTBEGIN_STATIC_O := $(TARGET_OUT_STATIC_LIBRARIES)/crtbegin_static.o
TARGET_CRTBEGIN_DYNAMIC_O := $(TARGET_OUT_STATIC_LIBRARIES)/crtbegin_dynamic.o
TARGET_CRTEND_O := $(TARGET_OUT_STATIC_LIBRARIES)/crtend_android.o
-TARGET_SOBEGIN := $(TARGET_OUT_STATIC_LIBRARIES)/sobegin.o
-TARGET_SOEND := $(TARGET_OUT_STATIC_LIBRARIES)/soend.o
+TARGET_CRTBEGIN_SO_O := $(TARGET_OUT_STATIC_LIBRARIES)/sobegin.o
+TARGET_CRTEND_SO_O := $(TARGET_OUT_STATIC_LIBRARIES)/soend.o
TARGET_STRIP_MODULE:=false
@@ -116,8 +116,8 @@
-nostdlib -Wl,-soname,$(notdir $@) -Wl,-T,$(BUILD_SYSTEM)/shlelf.xsc \
-Wl,--gc-sections -Wl,-z,norelro \
-Wl,-shared,-Bsymbolic \
- $(TARGET_GLOBAL_LD_DIRS) \
- $(TARGET_SOBEGIN) \
+ $(PRIVATE_TARGET_GLOBAL_LD_DIRS) \
+ $(PRIVATE_TARGET_CRTBEGIN_SO_O) \
$(PRIVATE_ALL_OBJECTS) \
-Wl,--whole-archive \
$(call normalize-host-libraries,$(PRIVATE_ALL_WHOLE_STATIC_LIBRARIES)) \
@@ -127,8 +127,8 @@
-o $@ \
$(PRIVATE_LDFLAGS) \
$(subst -lrt,, $(subst -lpthread,,$(PRIVATE_LDLIBS))) \
- $(TARGET_LIBGCC) \
- $(TARGET_SOEND)
+ $(PRIVATE_TARGET_LIBGCC) \
+ $(PRIVATE_TARGET_CRTEND_SO_O)
endef
define transform-o-to-executable-inner
diff --git a/core/combo/TARGET_linux-x86.mk b/core/combo/TARGET_linux-x86.mk
index cd7d4b3..6629cbd 100644
--- a/core/combo/TARGET_linux-x86.mk
+++ b/core/combo/TARGET_linux-x86.mk
@@ -104,12 +104,12 @@
TARGET_CUSTOM_LD_COMMAND := true
define transform-o-to-shared-lib-inner
$(TARGET_CXX) \
- $(TARGET_GLOBAL_LDFLAGS) \
+ $(PRIVATE_TARGET_GLOBAL_LDFLAGS) \
-nostdlib -Wl,-soname,$(notdir $@) \
-shared -Bsymbolic \
-fPIC -march=i686 \
- $(TARGET_GLOBAL_LD_DIRS) \
- $(TARGET_CRTBEGIN_SO_O) \
+ $(PRIVATE_TARGET_GLOBAL_LD_DIRS) \
+ $(PRIVATE_TARGET_CRTBEGIN_SO_O) \
$(PRIVATE_ALL_OBJECTS) \
-Wl,--whole-archive \
$(call normalize-host-libraries,$(PRIVATE_ALL_WHOLE_STATIC_LIBRARIES)) \
@@ -118,8 +118,8 @@
$(call normalize-target-libraries,$(PRIVATE_ALL_SHARED_LIBRARIES)) \
-o $@ \
$(PRIVATE_LDFLAGS) \
- $(TARGET_LIBGCC) \
- $(TARGET_CRTEND_SO_O)
+ $(PRIVATE_TARGET_LIBGCC) \
+ $(PRIVATE_TARGET_CRTEND_SO_O)
endef
diff --git a/core/config.mk b/core/config.mk
index 8d2f96c..81842be 100644
--- a/core/config.mk
+++ b/core/config.mk
@@ -316,6 +316,7 @@
# ###############################################################
HISTORICAL_SDK_VERSIONS_ROOT := $(TOPDIR)prebuilt/sdk
+HISTORICAL_NDK_VERSIONS_ROOT := $(TOPDIR)prebuilt/ndk
# Historical SDK version N is stored in $(HISTORICAL_SDK_VERSIONS_ROOT)/N.
# The 'current' version is whatever this source tree is.
@@ -337,4 +338,8 @@
$(patsubst $(HISTORICAL_SDK_VERSIONS_ROOT)/%/android.jar,%, \
$(wildcard $(HISTORICAL_SDK_VERSIONS_ROOT)/*/android.jar)))
+TARGET_AVAILABLE_NDK_VERSIONS := $(call numerically_sort,\
+ $(patsubst $(HISTORICAL_NDK_VERSIONS_ROOT)/android-ndk-r%,%, \
+ $(wildcard $(HISTORICAL_NDK_VERSIONS_ROOT)/android-ndk-r*)))
+
INTERNAL_PLATFORM_API_FILE := $(TARGET_OUT_COMMON_INTERMEDIATES)/PACKAGING/public_api.xml
diff --git a/core/definitions.mk b/core/definitions.mk
index c8ee0ae..ae0d9f3 100644
--- a/core/definitions.mk
+++ b/core/definitions.mk
@@ -767,16 +767,16 @@
$(foreach incdir, \
$(PRIVATE_C_INCLUDES) \
$(if $(PRIVATE_NO_DEFAULT_COMPILER_FLAGS),, \
- $(TARGET_PROJECT_INCLUDES) \
- $(TARGET_C_INCLUDES) \
+ $(PRIVATE_TARGET_PROJECT_INCLUDES) \
+ $(PRIVATE_TARGET_C_INCLUDES) \
) \
, \
-I $(incdir) \
) \
-c \
$(if $(PRIVATE_NO_DEFAULT_COMPILER_FLAGS),, \
- $(TARGET_GLOBAL_CFLAGS) \
- $(TARGET_GLOBAL_CPPFLAGS) \
+ $(PRIVATE_TARGET_GLOBAL_CFLAGS) \
+ $(PRIVATE_TARGET_GLOBAL_CPPFLAGS) \
$(PRIVATE_ARM_CFLAGS) \
) \
-fno-rtti \
@@ -799,15 +799,15 @@
$(foreach incdir, \
$(PRIVATE_C_INCLUDES) \
$(if $(PRIVATE_NO_DEFAULT_COMPILER_FLAGS),, \
- $(TARGET_PROJECT_INCLUDES) \
- $(TARGET_C_INCLUDES) \
+ $(PRIVATE_TARGET_PROJECT_INCLUDES) \
+ $(PRIVATE_TARGET_C_INCLUDES) \
) \
, \
-I $(incdir) \
) \
-c \
$(if $(PRIVATE_NO_DEFAULT_COMPILER_FLAGS),, \
- $(TARGET_GLOBAL_CFLAGS) \
+ $(PRIVATE_TARGET_GLOBAL_CFLAGS) \
$(PRIVATE_ARM_CFLAGS) \
) \
$(PRIVATE_CFLAGS) \
@@ -1063,12 +1063,12 @@
ifneq ($(TARGET_CUSTOM_LD_COMMAND),true)
define transform-o-to-shared-lib-inner
$(TARGET_CXX) \
- $(TARGET_GLOBAL_LDFLAGS) \
+ $(PRIVATE_TARGET_GLOBAL_LDFLAGS) \
-Wl,-rpath-link=$(TARGET_OUT_INTERMEDIATE_LIBRARIES) \
-Wl,-rpath,\$$ORIGIN/../lib \
-shared -Wl,-soname,$(notdir $@) \
$(PRIVATE_LDFLAGS) \
- $(TARGET_GLOBAL_LD_DIRS) \
+ $(PRIVATE_TARGET_GLOBAL_LD_DIRS) \
$(PRIVATE_ALL_OBJECTS) \
-Wl,--whole-archive \
$(call normalize-host-libraries,$(PRIVATE_ALL_WHOLE_STATIC_LIBRARIES)) \
diff --git a/core/main.mk b/core/main.mk
index 8c9393e..cb3bbd2 100644
--- a/core/main.mk
+++ b/core/main.mk
@@ -696,6 +696,9 @@
$(call dist-for-goals, droid, $(EMMA_META_ZIP))
endif
+# dist_libraries only for putting your library into the dist directory with a full build.
+.PHONY: dist_libraries
+
ifneq ($(TARGET_BUILD_APPS),)
# If this build is just for apps, only build apps and not the full system by default.
@@ -744,7 +747,7 @@
endif
# Building a full system-- the default is to build droidcore
-droid: droidcore
+droid: droidcore dist_libraries
endif
diff --git a/core/raw_executable.mk b/core/raw_executable.mk
index 30e0ade..b64173a 100644
--- a/core/raw_executable.mk
+++ b/core/raw_executable.mk
@@ -7,10 +7,10 @@
$(LOCAL_BUILT_MODULE) : PRIVATE_ELF_FILE := $(intermediates)/$(PRIVATE_MODULE).elf
$(LOCAL_BUILT_MODULE) : PRIVATE_LIBS := `$(TARGET_CC) -mthumb-interwork -print-libgcc-file-name`
-$(all_objects) : TARGET_PROJECT_INCLUDES :=
-$(all_objects) : TARGET_C_INCLUDES :=
-$(all_objects) : TARGET_GLOBAL_CFLAGS :=
-$(all_objects) : TARGET_GLOBAL_CPPFLAGS :=
+$(all_objects) : PRIVATE_TARGET_PROJECT_INCLUDES :=
+$(all_objects) : PRIVATE_TARGET_C_INCLUDES :=
+$(all_objects) : PRIVATE_TARGET_GLOBAL_CFLAGS :=
+$(all_objects) : PRIVATE_TARGET_GLOBAL_CPPFLAGS :=
$(LOCAL_BUILT_MODULE): $(all_objects) $(all_libraries)
@$(mkdir -p $(dir $@)
@@ -23,4 +23,3 @@
--start-group $(PRIVATE_ALL_STATIC_LIBRARIES) --end-group \
$(PRIVATE_LIBS)
$(hide) $(TARGET_OBJCOPY) -O binary $(PRIVATE_ELF_FILE) $@
-
diff --git a/core/shared_library.mk b/core/shared_library.mk
index a30d868..77d253f 100644
--- a/core/shared_library.mk
+++ b/core/shared_library.mk
@@ -26,7 +26,29 @@
include $(BUILD_SYSTEM)/dynamic_binary.mk
+# Define PRIVATE_ variables from global vars
+my_target_global_ld_dirs := $(TARGET_GLOBAL_LD_DIRS)
+my_target_global_ldflags := $(TARGET_GLOBAL_LDFLAGS)
+my_target_fdo_lib := $(TARGET_FDO_LIB)
+my_target_libgcc := $(TARGET_LIBGCC)
+my_target_crtbegin_so_o := $(TARGET_CRTBEGIN_SO_O)
+my_target_crtend_so_o := $(TARGET_CRTEND_SO_O)
+ifdef LOCAL_NDK_VERSION
+my_target_global_ld_dirs += -L$(my_ndk_version_root)/usr/lib
+# The latest ndk does NOT support TARGET_CRTBEGIN_SO_O and TARGET_CRTEND_SO_O yet.
+# my_target_crtbegin_so_o := $(my_ndk_version_root)/usr/lib/crtbegin_so.o
+# my_target_crtend_so_o := $(my_ndk_version_root)/usr/lib/crtend_so.o
+my_target_crtbegin_so_o :=
+my_target_crtend_so_o :=
+endif
+$(linked_module): PRIVATE_TARGET_GLOBAL_LD_DIRS := $(my_target_global_ld_dirs)
+$(linked_module): PRIVATE_TARGET_GLOBAL_LDFLAGS := $(my_target_global_ldflags)
+$(linked_module): PRIVATE_TARGET_FDO_LIB := $(my_target_fdo_lib)
+$(linked_module): PRIVATE_TARGET_LIBGCC := $(my_target_libgcc)
+$(linked_module): PRIVATE_TARGET_CRTBEGIN_SO_O := $(my_target_crtbegin_so_o)
+$(linked_module): PRIVATE_TARGET_CRTEND_SO_O := $(my_target_crtend_so_o)
+
$(linked_module): $(all_objects) $(all_libraries) \
$(LOCAL_ADDITIONAL_DEPENDENCIES) \
- $(TARGET_CRTBEGIN_SO_O) $(TARGET_CRTEND_SO_O)
+ $(my_target_crtbegin_so_o) $(my_target_crtend_so_o)
$(transform-o-to-shared-lib)
diff --git a/core/static_library.mk b/core/static_library.mk
index 2138e46..4ff5a34 100644
--- a/core/static_library.mk
+++ b/core/static_library.mk
@@ -19,10 +19,10 @@
ifeq ($(LOCAL_RAW_STATIC_LIBRARY),true)
LOCAL_RAW_STATIC_LIBRARY:=
-$(all_objects) : TARGET_PROJECT_INCLUDES :=
-$(all_objects) : TARGET_C_INCLUDES :=
-$(all_objects) : TARGET_GLOBAL_CFLAGS :=
-$(all_objects) : TARGET_GLOBAL_CPPFLAGS :=
+$(all_objects) : PRIVATE_TARGET_PROJECT_INCLUDES :=
+$(all_objects) : PRIVATE_TARGET_C_INCLUDES :=
+$(all_objects) : PRIVATE_TARGET_GLOBAL_CFLAGS :=
+$(all_objects) : PRIVATE_TARGET_GLOBAL_CPPFLAGS :=
endif
$(LOCAL_BUILT_MODULE): $(built_whole_libraries)