summaryrefslogtreecommitdiffstats
path: root/JavaLibrary.mk
diff options
context:
space:
mode:
authorNarayan Kamath <narayan@google.com>2015-03-30 17:10:31 +0100
committerNarayan Kamath <narayan@google.com>2015-03-30 19:03:29 +0100
commitde7c1fb9684c2558743e88fbf74a61f5ed6b47b5 (patch)
treed00708b171a494ddb7d16974fa7fbd8a5be4940f /JavaLibrary.mk
parentfc62e635ef4dcdeda9f144c90dd77568be0176fc (diff)
downloadlibcore-de7c1fb9684c2558743e88fbf74a61f5ed6b47b5.zip
libcore-de7c1fb9684c2558743e88fbf74a61f5ed6b47b5.tar.gz
libcore-de7c1fb9684c2558743e88fbf74a61f5ed6b47b5.tar.bz2
Add icu4j to core-libart.jar.
The first approach of building icu4j against the SDK and adding that to the boot classpath won't work out too well. Besides being a bit of a hack, there's no way to express that relationship for hostdex builds. We now compile icu4j sources along with core-libart. This is the most direct way of expressing this relationship and allows us to include exactly what we need. Note that we exclude the locale SPIs, transliterators and charset code by default. Change-Id: Idd305e77480bc681ed5b47e740dfec20d3bc7b26
Diffstat (limited to 'JavaLibrary.mk')
-rw-r--r--JavaLibrary.mk46
1 files changed, 42 insertions, 4 deletions
diff --git a/JavaLibrary.mk b/JavaLibrary.mk
index 99b4232..553cbbb 100644
--- a/JavaLibrary.mk
+++ b/JavaLibrary.mk
@@ -69,14 +69,40 @@ local_javac_flags=-encoding UTF-8
local_javac_flags+=-Xmaxwarns 9999999
#
+# ICU4J related rules.
+#
+# We compile icu4j along with core-libart because we're implementing parts of core-libart
+# in terms of icu4j.
+icu4j_root := ../external/icu/icu4j/
+icu4j_src_files := $(call all-java-files-under,$(icu4j_root)/main/classes))
+
+# Filter out bits of ICU4J we don't use yet : the SPIs (which we have limited support for),
+# the charset encoders and the translitertors.
+icu4j_src_files := $(filter-out $(icu4j_root)/main/classes/localespi/%, $(icu4j_src_files))
+icu4j_src_files := $(filter-out $(icu4j_root)/main/classes/charset/%, $(icu4j_src_files))
+icu4j_src_files := $(filter-out $(icu4j_root)/main/classes/translit/%, $(icu4j_src_files))
+
+# Not all src dirs contain resources, some instead contain other random files
+# that should not be included as resources. The ones that should be included
+# can be identifed by the fact that they contain particular subdir trees.
+#
+define all-icu-subdir-with-subdir
+$(patsubst $(LOCAL_PATH)/%/$(2),%,$(wildcard $(LOCAL_PATH)/$(1)/$(2)))
+endef
+
+icu4j_resource_dirs := \
+ $(filter-out $(icu4j_root)/main/classes/localespi/%, \
+ $(call all-icu-subdir-with-subdir,$(icu4j_root)/main/classes/*/src,com/ibm/icu))
+
+#
# Build for the target (device).
#
# Definitions to make the core library.
include $(CLEAR_VARS)
-LOCAL_SRC_FILES := $(libart_core_src_files)
-LOCAL_JAVA_RESOURCE_DIRS := $(core_resource_dirs)
+LOCAL_SRC_FILES := $(libart_core_src_files) $(icu4j_src_files)
+LOCAL_JAVA_RESOURCE_DIRS := $(core_resource_dirs) $(icu4j_resource_dirs)
LOCAL_NO_STANDARD_LIBRARIES := true
LOCAL_JAVACFLAGS := $(local_javac_flags)
LOCAL_DX_FLAGS := --core-library
@@ -84,8 +110,19 @@ LOCAL_MODULE_TAGS := optional
LOCAL_MODULE := core-libart
LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/JavaLibrary.mk
LOCAL_REQUIRED_MODULES := tzdata
+LOCAL_JARJAR_RULES := $(LOCAL_PATH)/jarjar-rules.txt
include $(BUILD_JAVA_LIBRARY)
+# Path to the ICU4C data files in the Android device file system:
+icu4c_data := /system/usr/icu
+# TODO: It's quite hideous that this double-slash between icu4j and main is required.
+# It's because we provide a variable substition of the make-rule generated jar command
+# to substitute a processed ICUProperties.config file in place of the original.
+#
+# We can avoid this by filtering out ICUConfig.properties from our list of resources.
+icu4j_config_root := $(LOCAL_PATH)/../external/icu/icu4j//main/classes/core/src
+include external/icu/icu4j/adjust_icudt_path.mk
+
ifeq ($(LIBCORE_SKIP_TESTS),)
# Make the core-tests library.
include $(CLEAR_VARS)
@@ -140,8 +177,8 @@ include $(BUILD_HOST_JAVA_LIBRARY)
# Definitions to make the core library.
include $(CLEAR_VARS)
-LOCAL_SRC_FILES := $(libart_core_src_files)
-LOCAL_JAVA_RESOURCE_DIRS := $(core_resource_dirs)
+LOCAL_SRC_FILES := $(libart_core_src_files) $(icu4j_src_files)
+LOCAL_JAVA_RESOURCE_DIRS := $(core_resource_dirs) $(icu4j_resource_dirs)
LOCAL_NO_STANDARD_LIBRARIES := true
LOCAL_JAVACFLAGS := $(local_javac_flags)
LOCAL_DX_FLAGS := --core-library
@@ -149,6 +186,7 @@ LOCAL_MODULE_TAGS := optional
LOCAL_MODULE := core-libart-hostdex
LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/JavaLibrary.mk
LOCAL_REQUIRED_MODULES := tzdata-host
+LOCAL_JARJAR_RULES := $(LOCAL_PATH)/jarjar-rules.txt
include $(BUILD_HOST_DALVIK_JAVA_LIBRARY)
# Make the core-tests library.