1# -*- mode: makefile -*- 2# Copyright (C) 2007 The Android Open Source Project 3# 4# Licensed under the Apache License, Version 2.0 (the "License"); 5# you may not use this file except in compliance with the License. 6# You may obtain a copy of the License at 7# 8# http://www.apache.org/licenses/LICENSE-2.0 9# 10# Unless required by applicable law or agreed to in writing, software 11# distributed under the License is distributed on an "AS IS" BASIS, 12# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13# See the License for the specific language governing permissions and 14# limitations under the License. 15 16# 17# Definitions for building the Java library and associated tests. 18# 19 20# 21# Common definitions for host and target. 22# 23 24# libcore is divided into modules. 25# 26# The structure of each module is: 27# 28# src/ 29# main/ # To be shipped on every device. 30# java/ # Java source for library code. 31# native/ # C++ source for library code. 32# resources/ # Support files. 33# test/ # Built only on demand, for testing. 34# java/ # Java source for tests. 35# native/ # C++ source for tests (rare). 36# resources/ # Support files. 37# 38# All subdirectories are optional (hence the "2> /dev/null"s below). 39 40define all-main-java-files-under 41$(foreach dir,$(1),$(patsubst ./%,%,$(shell cd $(LOCAL_PATH) && find $(dir)/src/main/java -name "*.java" 2> /dev/null))) 42endef 43 44define all-test-java-files-under 45$(patsubst ./%,%,$(shell cd $(LOCAL_PATH) && find $(1)/src/test/java -name "*.java" 2> /dev/null)) 46endef 47 48define all-core-resource-dirs 49$(shell cd $(LOCAL_PATH) && ls -d */src/$(1)/{java,resources} 2> /dev/null) 50endef 51 52# The Java files and their associated resources. 53core_src_files := $(call all-main-java-files-under,dalvik dom json luni support xml) 54core_resource_dirs := $(call all-core-resource-dirs,main) 55test_resource_dirs := $(call all-core-resource-dirs,test) 56 57ifeq ($(EMMA_INSTRUMENT),true) 58 core_src_files += $(call all-java-files-under, ../external/emma/core ../external/emma/pregenerated) 59 core_resource_dirs += ../external/emma/core/res ../external/emma/pregenerated/res 60endif 61 62 63# 64# Build for the target (device). 65# 66 67# Definitions to make the core library. 68 69include $(CLEAR_VARS) 70 71LOCAL_SRC_FILES := $(core_src_files) 72LOCAL_JAVA_RESOURCE_DIRS := $(core_resource_dirs) 73 74LOCAL_NO_STANDARD_LIBRARIES := true 75LOCAL_JAVACFLAGS := -encoding UTF-8 76LOCAL_DX_FLAGS := --core-library 77 78LOCAL_NO_EMMA_INSTRUMENT := true 79LOCAL_NO_EMMA_COMPILE := true 80LOCAL_MODULE_TAGS := optional 81LOCAL_MODULE := core 82 83include $(BUILD_JAVA_LIBRARY) 84 85core-intermediates := ${intermediates} 86 87 88# Make core-junit 89include $(CLEAR_VARS) 90LOCAL_SRC_FILES := $(call all-main-java-files-under,junit) 91LOCAL_NO_STANDARD_LIBRARIES := true 92LOCAL_JAVA_LIBRARIES := core 93LOCAL_MODULE_TAGS := optional 94LOCAL_MODULE := core-junit 95include $(BUILD_JAVA_LIBRARY) 96 97# Make core-junitrunner 98include $(CLEAR_VARS) 99LOCAL_SRC_FILES := $(call all-test-java-files-under,junit) 100LOCAL_JAVA_RESOURCE_DIRS := $(test_resource_dirs) 101LOCAL_NO_STANDARD_LIBRARIES := true 102LOCAL_JAVA_LIBRARIES := core core-junit 103LOCAL_DX_FLAGS := --core-library 104LOCAL_MODULE_TAGS := tests 105LOCAL_MODULE := core-junitrunner 106include $(BUILD_JAVA_LIBRARY) 107 108# Definitions to make the sqlite JDBC driver. 109 110include $(CLEAR_VARS) 111LOCAL_SRC_FILES := $(call all-main-java-files-under,sqlite-jdbc) 112LOCAL_NO_STANDARD_LIBRARIES := true 113LOCAL_JAVA_LIBRARIES := core 114LOCAL_MODULE_TAGS := optional 115LOCAL_MODULE := sqlite-jdbc 116include $(BUILD_JAVA_LIBRARY) 117 118 119# Definitions to make the core-tests libraries. 120# 121# We make a library per module, because otherwise the .jar files get too 122# large, to the point that dx(1) can't cope (and the build is 123# ridiculously slow). 124# 125# TODO: vogar will make this nonsense obsolete. 126 127include $(CLEAR_VARS) 128LOCAL_SRC_FILES := $(call all-test-java-files-under,dalvik) 129LOCAL_JAVA_RESOURCE_DIRS := $(test_resource_dirs) 130LOCAL_NO_STANDARD_LIBRARIES := true 131LOCAL_JAVA_LIBRARIES := core core-junit core-junitrunner core-tests-support 132LOCAL_DX_FLAGS := --core-library 133LOCAL_MODULE_TAGS := tests 134LOCAL_MODULE := core-tests-dalvik 135include $(BUILD_JAVA_LIBRARY) 136 137include $(CLEAR_VARS) 138LOCAL_SRC_FILES := $(call all-test-java-files-under,dom) 139LOCAL_JAVA_RESOURCE_DIRS := $(test_resource_dirs) 140LOCAL_NO_STANDARD_LIBRARIES := true 141LOCAL_JAVA_LIBRARIES := core core-junit core-junitrunner core-tests-support 142LOCAL_DX_FLAGS := --core-library 143LOCAL_MODULE_TAGS := tests 144LOCAL_MODULE := core-tests-dom 145include $(BUILD_JAVA_LIBRARY) 146 147include $(CLEAR_VARS) 148LOCAL_SRC_FILES := $(call all-test-java-files-under,json) 149LOCAL_JAVA_RESOURCE_DIRS := $(test_resource_dirs) 150LOCAL_NO_STANDARD_LIBRARIES := true 151LOCAL_JAVA_LIBRARIES := core core-junit core-junitrunner core-tests-support 152LOCAL_DX_FLAGS := --core-library 153LOCAL_MODULE_TAGS := tests 154LOCAL_MODULE := core-tests-json 155include $(BUILD_JAVA_LIBRARY) 156 157include $(CLEAR_VARS) 158LOCAL_SRC_FILES := $(call all-test-java-files-under,luni) 159LOCAL_JAVA_RESOURCE_DIRS := $(test_resource_dirs) 160LOCAL_NO_STANDARD_LIBRARIES := true 161# This module contains the top-level "tests.AllTests" that ties everything 162# together, so it has compile-time dependencies on all the other test 163# libraries. 164# TODO: we should have a bogus module that just contains tests.AllTests for speed. 165LOCAL_JAVA_LIBRARIES := \ 166 bouncycastle \ 167 core \ 168 core-junit \ 169 core-junitrunner \ 170 core-tests-support \ 171 core-tests-dalvik \ 172 core-tests-dom \ 173 core-tests-json \ 174 core-tests-xml \ 175 sqlite-jdbc 176LOCAL_DX_FLAGS := --core-library 177LOCAL_MODULE_TAGS := tests 178LOCAL_MODULE := core-tests 179 180LOCAL_NO_EMMA_INSTRUMENT := true 181LOCAL_NO_EMMA_COMPILE := true 182 183include $(BUILD_JAVA_LIBRARY) 184 185include $(CLEAR_VARS) 186LOCAL_SRC_FILES := $(call all-test-java-files-under,support) 187LOCAL_JAVA_RESOURCE_DIRS := $(test_resource_dirs) 188LOCAL_NO_STANDARD_LIBRARIES := true 189LOCAL_JAVA_LIBRARIES := bouncycastle core core-junit core-junitrunner 190LOCAL_DX_FLAGS := --core-library 191LOCAL_MODULE_TAGS := tests 192LOCAL_MODULE := core-tests-support 193include $(BUILD_JAVA_LIBRARY) 194 195include $(CLEAR_VARS) 196LOCAL_SRC_FILES := $(call all-test-java-files-under,xml) 197LOCAL_JAVA_RESOURCE_DIRS := $(test_resource_dirs) 198LOCAL_NO_STANDARD_LIBRARIES := true 199LOCAL_JAVA_LIBRARIES := core core-junit core-junitrunner core-tests-support 200LOCAL_DX_FLAGS := --core-library 201LOCAL_MODULE_TAGS := tests 202LOCAL_MODULE := core-tests-xml 203include $(BUILD_JAVA_LIBRARY) 204 205# also build support as a static library for use by frameworks/base HTTPS tests 206include $(CLEAR_VARS) 207LOCAL_SRC_FILES := $(call all-test-java-files-under,support) 208LOCAL_JAVA_RESOURCE_DIRS := $(test_resource_dirs) 209LOCAL_NO_STANDARD_LIBRARIES := true 210LOCAL_JAVA_LIBRARIES := bouncycastle core core-junit core-junitrunner 211LOCAL_DX_FLAGS := --core-library 212LOCAL_MODULE_TAGS := tests 213LOCAL_MODULE := core-tests-supportlib 214include $(BUILD_STATIC_JAVA_LIBRARY) 215 216# This one's tricky. One of our tests needs to have a 217# resource with a "#" in its name, but Perforce doesn't 218# allow us to submit such a file. So we create it here 219# on-the-fly. 220TMP_RESOURCE_DIR := $(OUT_DIR)/tmp/ 221TMP_RESOURCE_FILE := org/apache/harmony/luni/tests/java/lang/test\#.properties 222 223$(TMP_RESOURCE_DIR)$(TMP_RESOURCE_FILE): 224 @mkdir -p $(dir $@) 225 @echo "Hello, world!" > $@ 226 227$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_EXTRA_JAR_ARGS := $(extra_jar_args) -C $(TMP_RESOURCE_DIR) $(TMP_RESOURCE_FILE) 228$(LOCAL_INTERMEDIATE_TARGETS): $(TMP_RESOURCE_DIR)$(TMP_RESOURCE_FILE) 229 230# Definitions for building a version of the core-tests.jar 231# that is suitable for execution on the RI. This JAR would 232# be better located in $HOST_OUT_JAVA_LIBRARIES, but it is 233# not possible to refer to that from a shell script (the 234# variable is not exported from envsetup.sh). There is also 235# some trickery involved: we need to include some classes 236# that reside in core.jar, but since we cannot incldue the 237# whole core.jar in the RI classpath, we copy those classses 238# over to our new file. 239HOST_CORE_JAR := $(HOST_COMMON_OUT_ROOT)/core-tests.jar 240 241$(HOST_CORE_JAR): PRIVATE_LOCAL_BUILT_MODULE := $(LOCAL_BUILT_MODULE) 242$(HOST_CORE_JAR): PRIVATE_CORE_INTERMEDIATES := $(core-intermediates) 243$(HOST_CORE_JAR): $(LOCAL_BUILT_MODULE) 244 @rm -rf $(dir $<)/hostctsclasses 245 $(call unzip-jar-files,$(dir $<)classes.jar,$(dir $<)hostctsclasses) 246 @unzip -qx -o $(PRIVATE_CORE_INTERMEDIATES)/classes.jar dalvik/annotation/* -d $(dir $<)hostctsclasses 247 @cp $< $@ 248 @jar uf $@ -C $(dir $<)hostctsclasses . 249 250$(LOCAL_INSTALLED_MODULE): $(HOST_CORE_JAR) 251 252$(LOCAL_INSTALLED_MODULE): run-core-tests 253 254# Definitions to copy the core-tests runner script. 255 256include $(CLEAR_VARS) 257LOCAL_SRC_FILES := run-core-tests 258LOCAL_MODULE_CLASS := EXECUTABLES 259LOCAL_MODULE_TAGS := tests 260LOCAL_MODULE := run-core-tests 261include $(BUILD_PREBUILT) 262 263include $(CLEAR_VARS) 264LOCAL_SRC_FILES := run-core-tests-on-ri 265LOCAL_IS_HOST_MODULE := true 266LOCAL_MODULE_CLASS := EXECUTABLES 267LOCAL_MODULE_TAGS := tests 268LOCAL_MODULE := run-core-tests-on-ri 269include $(BUILD_PREBUILT) 270 271 272# 273# Build for the host. 274# 275 276ifeq ($(WITH_HOST_DALVIK),true) 277 278 # Definitions to make the core library. 279 280 include $(CLEAR_VARS) 281 282 LOCAL_SRC_FILES := $(core_src_files) 283 LOCAL_JAVA_RESOURCE_DIRS := $(core_resource_dirs) 284 285 LOCAL_NO_STANDARD_LIBRARIES := true 286 LOCAL_JAVACFLAGS := -encoding UTF-8 287 LOCAL_DX_FLAGS := --core-library 288 289 LOCAL_NO_EMMA_INSTRUMENT := true 290 LOCAL_NO_EMMA_COMPILE := true 291 LOCAL_BUILD_HOST_DEX := true 292 293 LOCAL_MODULE_TAGS := optional 294 LOCAL_MODULE := core-hostdex 295 296 include $(BUILD_HOST_JAVA_LIBRARY) 297 298endif 299