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 40include $(LOCAL_PATH)/openjdk_java_files.mk 41include $(LOCAL_PATH)/non_openjdk_java_files.mk 42 43define all-test-java-files-under 44$(foreach dir,$(1),$(patsubst ./%,%,$(shell cd $(LOCAL_PATH) && (find $(dir)/src/test/java -name "*.java" 2> /dev/null) | grep -v -f java_tests_blacklist))) 45endef 46 47define all-core-resource-dirs 48$(shell cd $(LOCAL_PATH) && ls -d */src/$(1)/{java,resources} 2> /dev/null) 49endef 50 51# The Java files and their associated resources. 52core_resource_dirs := \ 53 luni/src/main/java \ 54 ojluni/src/main/resources/ 55test_resource_dirs := $(call all-core-resource-dirs,test) 56test_src_files := $(call all-test-java-files-under,dalvik dom harmony-tests json luni xml) 57ojtest_src_files := $(call all-test-java-files-under,ojluni) 58 59ifeq ($(EMMA_INSTRUMENT),true) 60ifneq ($(EMMA_INSTRUMENT_STATIC),true) 61 nojcore_src_files += $(call all-java-files-under, ../external/emma/core ../external/emma/pregenerated) 62 core_resource_dirs += ../external/emma/core/res ../external/emma/pregenerated/res 63endif 64endif 65 66local_javac_flags=-encoding UTF-8 67#local_javac_flags+=-Xlint:all -Xlint:-serial,-deprecation,-unchecked 68local_javac_flags+=-Xmaxwarns 9999999 69 70 71# 72# ICU4J related rules. 73# 74# We compile android_icu4j along with core-libart because we're implementing parts of core-libart 75# in terms of android_icu4j. 76android_icu4j_root := ../external/icu/android_icu4j/ 77android_icu4j_src_files := $(call all-java-files-under,$(android_icu4j_root)/src/main/java) 78android_icu4j_resource_dirs := $(android_icu4j_root)/resources 79 80# 81# Build for the target (device). 82# 83 84include $(CLEAR_VARS) 85LOCAL_SRC_FILES := $(openjdk_java_files) $(non_openjdk_java_files) $(android_icu4j_src_files) $(openjdk_lambda_stub_files) 86LOCAL_JAVA_RESOURCE_DIRS := $(core_resource_dirs) $(android_icu4j_resource_dirs) 87LOCAL_NO_STANDARD_LIBRARIES := true 88LOCAL_JAVACFLAGS := $(local_javac_flags) 89LOCAL_DX_FLAGS := --core-library 90LOCAL_MODULE_TAGS := optional 91LOCAL_JAVA_LANGUAGE_VERSION := 1.8 92LOCAL_MODULE := core-all 93LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/JavaLibrary.mk 94LOCAL_REQUIRED_MODULES := tzdata 95LOCAL_CORE_LIBRARY := true 96LOCAL_UNINSTALLABLE_MODULE := true 97include $(BUILD_JAVA_LIBRARY) 98 99include $(CLEAR_VARS) 100LOCAL_SRC_FILES := $(openjdk_java_files) 101LOCAL_JAVA_RESOURCE_DIRS := $(core_resource_dirs) 102LOCAL_NO_STANDARD_LIBRARIES := true 103LOCAL_JAVACFLAGS := $(local_javac_flags) 104LOCAL_DX_FLAGS := --core-library 105LOCAL_MODULE_TAGS := optional 106LOCAL_JAVA_LANGUAGE_VERSION := 1.8 107LOCAL_MODULE := core-oj 108LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/JavaLibrary.mk 109LOCAL_JAVA_LIBRARIES := core-all 110LOCAL_NOTICE_FILE := $(LOCAL_PATH)/ojluni/NOTICE 111LOCAL_REQUIRED_MODULES := tzdata 112LOCAL_CORE_LIBRARY := true 113include $(BUILD_JAVA_LIBRARY) 114 115# Definitions to make the core library. 116include $(CLEAR_VARS) 117LOCAL_SRC_FILES := $(non_openjdk_java_files) $(android_icu4j_src_files) 118LOCAL_JAVA_RESOURCE_DIRS := $(android_icu4j_resource_dirs) 119LOCAL_NO_STANDARD_LIBRARIES := true 120LOCAL_JAVACFLAGS := $(local_javac_flags) 121LOCAL_DX_FLAGS := --core-library 122LOCAL_MODULE_TAGS := optional 123LOCAL_JAVA_LANGUAGE_VERSION := 1.8 124LOCAL_MODULE := core-libart 125LOCAL_ADDITIONAL_DEPENDENCIES += $(LOCAL_PATH)/JavaLibrary.mk 126LOCAL_JAVA_LIBRARIES := core-all 127ifeq ($(EMMA_INSTRUMENT),true) 128ifneq ($(EMMA_INSTRUMENT_STATIC),true) 129 # For instrumented build, include Jacoco classes into core-libart. 130 LOCAL_STATIC_JAVA_LIBRARIES := jacocoagent 131endif # EMMA_INSTRUMENT_STATIC 132endif # EMMA_INSTRUMENT 133LOCAL_CORE_LIBRARY := true 134LOCAL_REQUIRED_MODULES := tzdata 135include $(BUILD_JAVA_LIBRARY) 136 137# A library that exists to satisfy javac when 138# compiling source code that contains lambdas. 139include $(CLEAR_VARS) 140LOCAL_SRC_FILES := $(openjdk_lambda_stub_files) 141LOCAL_NO_STANDARD_LIBRARIES := true 142LOCAL_JAVACFLAGS := $(local_javac_flags) 143LOCAL_DX_FLAGS := --core-library 144LOCAL_MODULE_TAGS := optional 145LOCAL_JAVA_LANGUAGE_VERSION := 1.8 146LOCAL_MODULE := core-lambda-stubs 147LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/JavaLibrary.mk 148LOCAL_JAVA_LIBRARIES := core-all 149LOCAL_NOTICE_FILE := $(LOCAL_PATH)/ojluni/NOTICE 150LOCAL_CORE_LIBRARY := true 151LOCAL_UNINSTALLABLE_MODULE := true 152include $(BUILD_JAVA_LIBRARY) 153 154ifeq ($(LIBCORE_SKIP_TESTS),) 155# A guaranteed unstripped version of core-oj and core-libart. This is required for ART testing in 156# preopted configurations. See b/24535627. 157include $(CLEAR_VARS) 158LOCAL_SRC_FILES := $(openjdk_java_files) 159LOCAL_JAVA_RESOURCE_DIRS := $(core_resource_dirs) 160LOCAL_NO_STANDARD_LIBRARIES := true 161LOCAL_JAVACFLAGS := $(local_javac_flags) 162LOCAL_DX_FLAGS := --core-library 163LOCAL_MODULE_TAGS := optional 164LOCAL_DEX_PREOPT := false 165LOCAL_JAVA_LANGUAGE_VERSION := 1.8 166LOCAL_MODULE := core-oj-testdex 167LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/JavaLibrary.mk 168LOCAL_JAVA_LIBRARIES := core-all 169LOCAL_NOTICE_FILE := $(LOCAL_PATH)/ojluni/NOTICE 170LOCAL_REQUIRED_MODULES := tzdata 171LOCAL_CORE_LIBRARY := true 172include $(BUILD_JAVA_LIBRARY) 173 174include $(CLEAR_VARS) 175LOCAL_SRC_FILES := $(non_openjdk_java_files) $(android_icu4j_src_files) 176LOCAL_JAVA_RESOURCE_DIRS := $(android_icu4j_resource_dirs) 177LOCAL_NO_STANDARD_LIBRARIES := true 178LOCAL_JAVACFLAGS := $(local_javac_flags) 179LOCAL_DX_FLAGS := --core-library 180LOCAL_MODULE_TAGS := optional 181LOCAL_DEX_PREOPT := false 182LOCAL_JAVA_LANGUAGE_VERSION := 1.8 183LOCAL_MODULE := core-libart-testdex 184LOCAL_ADDITIONAL_DEPENDENCIES += $(LOCAL_PATH)/JavaLibrary.mk 185LOCAL_JAVA_LIBRARIES := core-all 186LOCAL_CORE_LIBRARY := true 187LOCAL_REQUIRED_MODULES := tzdata 188include $(BUILD_JAVA_LIBRARY) 189endif 190 191ifeq ($(LIBCORE_SKIP_TESTS),) 192# Make the core-tests library. 193include $(CLEAR_VARS) 194LOCAL_SRC_FILES := $(test_src_files) 195LOCAL_JAVA_RESOURCE_DIRS := $(test_resource_dirs) 196LOCAL_NO_STANDARD_LIBRARIES := true 197LOCAL_JAVA_LIBRARIES := core-oj core-libart core-lambda-stubs okhttp core-junit bouncycastle mockito-target 198LOCAL_STATIC_JAVA_LIBRARIES := core-tests-support sqlite-jdbc mockwebserver nist-pkix-tests 199LOCAL_JAVACFLAGS := $(local_javac_flags) 200LOCAL_JAVA_LANGUAGE_VERSION := 1.8 201LOCAL_MODULE := core-tests 202LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/JavaLibrary.mk 203include $(BUILD_STATIC_JAVA_LIBRARY) 204endif 205 206ifeq ($(LIBCORE_SKIP_TESTS),) 207# Make the core-tests-support library. 208include $(CLEAR_VARS) 209LOCAL_SRC_FILES := $(call all-test-java-files-under,support) 210LOCAL_JAVA_RESOURCE_DIRS := $(test_resource_dirs) 211LOCAL_NO_STANDARD_LIBRARIES := true 212LOCAL_JAVA_LIBRARIES := core-oj core-libart core-junit bouncycastle 213LOCAL_STATIC_JAVA_LIBRARIES := bouncycastle-bcpkix bouncycastle-ocsp 214LOCAL_JAVACFLAGS := $(local_javac_flags) 215LOCAL_MODULE := core-tests-support 216LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/JavaLibrary.mk 217include $(BUILD_STATIC_JAVA_LIBRARY) 218endif 219 220ifeq ($(LIBCORE_SKIP_TESTS),) 221# Make the jsr166-tests library. 222include $(CLEAR_VARS) 223LOCAL_SRC_FILES := $(call all-test-java-files-under, jsr166-tests) 224LOCAL_JAVA_RESOURCE_DIRS := $(test_resource_dirs) 225LOCAL_NO_STANDARD_LIBRARIES := true 226LOCAL_JAVA_LIBRARIES := core-oj core-libart core-lambda-stubs core-junit 227LOCAL_JAVACFLAGS := $(local_javac_flags) 228LOCAL_MODULE := jsr166-tests 229LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/JavaLibrary.mk 230include $(BUILD_STATIC_JAVA_LIBRARY) 231endif 232 233# Make the core-ojtests library. 234ifeq ($(LIBCORE_SKIP_TESTS),) 235 include $(CLEAR_VARS) 236 LOCAL_NO_STANDARD_LIBRARIES := true 237 LOCAL_JAVA_LIBRARIES := core-oj core-libart core-lambda-stubs okhttp bouncycastle 238 LOCAL_STATIC_JAVA_LIBRARIES := testng 239 LOCAL_JAVACFLAGS := $(local_javac_flags) 240 LOCAL_MODULE_TAGS := optional 241 LOCAL_JAVA_LANGUAGE_VERSION := 1.8 242 LOCAL_MODULE := core-ojtests 243 LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/JavaLibrary.mk 244 # jack bug workaround: int[] java.util.stream.StatefulTestOp.-getjava-util-stream-StreamShapeSwitchesValues() is a private synthetic method in an interface which causes a hard verifier error 245 LOCAL_DEX_PREOPT := false # disable AOT preverification which breaks the build. it will still throw VerifyError at runtime. 246 include $(BUILD_JAVA_LIBRARY) 247endif 248 249# Make the core-ojtests-public library. Excludes any private API tests. 250ifeq ($(LIBCORE_SKIP_TESTS),) 251 include $(CLEAR_VARS) 252 # Filter out SerializedLambdaTest because it depends on stub classes and won't actually run. 253 LOCAL_SRC_FILES := $(filter-out %/DeserializeMethodTest.java %/SerializedLambdaTest.java ojluni/src/test/java/util/stream/boot%,$(ojtest_src_files)) # Do not include anything from the boot* directories. Those directories need a custom bootclasspath to run. 254 # Include source code as part of JAR 255 LOCAL_JAVA_RESOURCE_DIRS := ojluni/src/test/dist 256 LOCAL_NO_STANDARD_LIBRARIES := true 257 LOCAL_JAVA_LIBRARIES := core-oj core-libart core-lambda-stubs okhttp bouncycastle testng 258 LOCAL_JAVACFLAGS := $(local_javac_flags) 259 LOCAL_MODULE_TAGS := optional 260 LOCAL_JAVA_LANGUAGE_VERSION := 1.8 261 LOCAL_MODULE := core-ojtests-public 262 LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/JavaLibrary.mk 263 # jack bug workaround: int[] java.util.stream.StatefulTestOp.-getjava-util-stream-StreamShapeSwitchesValues() is a private synthetic method in an interface which causes a hard verifier error 264 LOCAL_DEX_PREOPT := false # disable AOT preverification which breaks the build. it will still throw VerifyError at runtime. 265 include $(BUILD_JAVA_LIBRARY) 266endif 267 268# 269# Build for the host. 270# 271 272ifeq ($(HOST_OS),linux) 273 274include $(CLEAR_VARS) 275LOCAL_SRC_FILES := $(call all-java-files-under, dex/src/main) 276LOCAL_MODULE_TAGS := optional 277LOCAL_MODULE := dex-host 278include $(BUILD_HOST_JAVA_LIBRARY) 279 280include $(CLEAR_VARS) 281LOCAL_SRC_FILES := $(non_openjdk_java_files) $(openjdk_java_files) $(android_icu4j_src_files) $(openjdk_lambda_stub_files) 282LOCAL_JAVA_RESOURCE_DIRS := $(core_resource_dirs) 283LOCAL_NO_STANDARD_LIBRARIES := true 284LOCAL_JAVACFLAGS := $(local_javac_flags) 285LOCAL_DX_FLAGS := --core-library 286LOCAL_MODULE_TAGS := optional 287LOCAL_JAVA_LANGUAGE_VERSION := 1.8 288LOCAL_MODULE := core-all-hostdex 289LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/JavaLibrary.mk 290LOCAL_REQUIRED_MODULES := tzdata-host 291LOCAL_CORE_LIBRARY := true 292LOCAL_UNINSTALLABLE_MODULE := true 293include $(BUILD_HOST_DALVIK_JAVA_LIBRARY) 294 295include $(CLEAR_VARS) 296LOCAL_SRC_FILES := $(openjdk_java_files) 297LOCAL_JAVA_RESOURCE_DIRS := $(core_resource_dirs) 298LOCAL_NO_STANDARD_LIBRARIES := true 299LOCAL_JAVACFLAGS := $(local_javac_flags) 300LOCAL_DX_FLAGS := --core-library 301LOCAL_MODULE_TAGS := optional 302LOCAL_JAVA_LANGUAGE_VERSION := 1.8 303LOCAL_MODULE := core-oj-hostdex 304LOCAL_NOTICE_FILE := $(LOCAL_PATH)/ojluni/NOTICE 305LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/JavaLibrary.mk 306LOCAL_JAVA_LIBRARIES := core-all-hostdex 307LOCAL_REQUIRED_MODULES := tzdata-host 308LOCAL_CORE_LIBRARY := true 309include $(BUILD_HOST_DALVIK_JAVA_LIBRARY) 310 311# Definitions to make the core library. 312include $(CLEAR_VARS) 313LOCAL_SRC_FILES := $(non_openjdk_java_files) $(android_icu4j_src_files) 314LOCAL_JAVA_RESOURCE_DIRS := $(android_icu4j_resource_dirs) 315LOCAL_NO_STANDARD_LIBRARIES := true 316LOCAL_JAVACFLAGS := $(local_javac_flags) 317LOCAL_DX_FLAGS := --core-library 318LOCAL_MODULE_TAGS := optional 319LOCAL_JAVA_LANGUAGE_VERSION := 1.8 320LOCAL_MODULE := core-libart-hostdex 321LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/JavaLibrary.mk 322LOCAL_JAVA_LIBRARIES := core-oj-hostdex 323LOCAL_REQUIRED_MODULES := tzdata-host 324include $(BUILD_HOST_DALVIK_JAVA_LIBRARY) 325 326# A library that exists to satisfy javac when 327# compiling source code that contains lambdas. 328include $(CLEAR_VARS) 329LOCAL_SRC_FILES := $(openjdk_lambda_stub_files) 330LOCAL_NO_STANDARD_LIBRARIES := true 331LOCAL_JAVACFLAGS := $(local_javac_flags) 332LOCAL_DX_FLAGS := --core-library 333LOCAL_MODULE_TAGS := optional 334LOCAL_JAVA_LANGUAGE_VERSION := 1.8 335LOCAL_MODULE := core-lambda-stubs-hostdex 336LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/JavaLibrary.mk 337LOCAL_JAVA_LIBRARIES := core-all-hostdex 338LOCAL_CORE_LIBRARY := true 339include $(BUILD_HOST_DALVIK_JAVA_LIBRARY) 340 341# Make the core-tests library. 342ifeq ($(LIBCORE_SKIP_TESTS),) 343 include $(CLEAR_VARS) 344 LOCAL_SRC_FILES := $(test_src_files) 345 LOCAL_JAVA_RESOURCE_DIRS := $(test_resource_dirs) 346 LOCAL_NO_STANDARD_LIBRARIES := true 347 LOCAL_JAVA_LIBRARIES := core-oj-hostdex core-libart-hostdex core-lambda-stubs-hostdex okhttp-hostdex bouncycastle-hostdex core-junit-hostdex core-tests-support-hostdex mockito-api-hostdex 348 LOCAL_STATIC_JAVA_LIBRARIES := sqlite-jdbc-host mockwebserver-host nist-pkix-tests-host 349 LOCAL_JAVACFLAGS := $(local_javac_flags) 350 LOCAL_MODULE_TAGS := optional 351 LOCAL_JAVA_LANGUAGE_VERSION := 1.8 352 LOCAL_MODULE := core-tests-hostdex 353 LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/JavaLibrary.mk 354 include $(BUILD_HOST_DALVIK_JAVA_LIBRARY) 355endif 356 357# Make the core-tests-support library. 358ifeq ($(LIBCORE_SKIP_TESTS),) 359 include $(CLEAR_VARS) 360 LOCAL_SRC_FILES := $(call all-test-java-files-under,support) 361 LOCAL_JAVA_RESOURCE_DIRS := $(test_resource_dirs) 362 LOCAL_NO_STANDARD_LIBRARIES := true 363 LOCAL_JAVA_LIBRARIES := core-oj-hostdex core-libart-hostdex core-junit-hostdex bouncycastle-hostdex 364 LOCAL_STATIC_JAVA_LIBRARIES := bouncycastle-bcpkix-hostdex bouncycastle-ocsp-hostdex 365 LOCAL_JAVACFLAGS := $(local_javac_flags) 366 LOCAL_MODULE_TAGS := optional 367 LOCAL_MODULE := core-tests-support-hostdex 368 LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/JavaLibrary.mk 369 include $(BUILD_HOST_DALVIK_JAVA_LIBRARY) 370endif 371 372# Make the core-ojtests-hostdex library. 373ifeq ($(LIBCORE_SKIP_TESTS),) 374 include $(CLEAR_VARS) 375 LOCAL_SRC_FILES := $(ojtest_src_files) 376 LOCAL_NO_STANDARD_LIBRARIES := true 377 LOCAL_JAVA_LIBRARIES := core-oj-hostdex core-libart-hostdex core-lambda-stubs-hostdex okhttp-hostdex bouncycastle-hostdex 378 LOCAL_STATIC_JAVA_LIBRARIES := testng-hostdex 379 LOCAL_JAVACFLAGS := $(local_javac_flags) 380 LOCAL_MODULE_TAGS := optional 381 LOCAL_JAVA_LANGUAGE_VERSION := 1.8 382 LOCAL_MODULE := core-ojtests-hostdex 383 LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/JavaLibrary.mk 384 include $(BUILD_HOST_DALVIK_JAVA_LIBRARY) 385endif 386 387endif # HOST_OS == linux 388 389# 390# Local droiddoc for faster libcore testing 391# 392# 393# Run with: 394# mm -j32 libcore-docs 395# 396# Main output: 397# ../out/target/common/docs/libcore/reference/packages.html 398# 399# All text for proofreading (or running tools over): 400# ../out/target/common/docs/libcore-proofread.txt 401# 402# TODO list of missing javadoc, etc: 403# ../out/target/common/docs/libcore-docs-todo.html 404# 405# Rerun: 406# rm -rf ../out/target/common/docs/libcore-timestamp && mm -j32 libcore-docs 407# 408include $(CLEAR_VARS) 409 410# for shared defintion of libcore_to_document 411include $(LOCAL_PATH)/Docs.mk 412 413# The libcore_to_document paths are relative to $(TOPDIR). We are in libcore so we must prepend 414# ../ to make LOCAL_SRC_FILES relative to $(LOCAL_PATH). 415LOCAL_SRC_FILES := $(addprefix ../, $(libcore_to_document)) 416# rerun doc generation without recompiling the java 417LOCAL_JAVACFLAGS := $(local_javac_flags) 418LOCAL_MODULE_CLASS:=JAVA_LIBRARIES 419 420LOCAL_MODULE := libcore 421LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/JavaLibrary.mk 422 423LOCAL_DROIDDOC_OPTIONS := \ 424 -offlinemode \ 425 -title "libcore" \ 426 -proofread $(OUT_DOCS)/$(LOCAL_MODULE)-proofread.txt \ 427 -todo ../$(LOCAL_MODULE)-docs-todo.html \ 428 -hdf android.whichdoc offline 429 430LOCAL_DROIDDOC_CUSTOM_TEMPLATE_DIR:=build/tools/droiddoc/templates-sdk 431 432include $(BUILD_DROIDDOC) 433 434openjdk_java_files := 435non_openjdk_java_files := 436