1#
2# Copyright (C) 2015 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
17LOCAL_PATH := $(call my-dir)
18
19include art/build/Android.common_path.mk
20
21# --- ahat.jar ----------------
22include $(CLEAR_VARS)
23LOCAL_SRC_FILES := $(call all-java-files-under, src/main)
24LOCAL_JAR_MANIFEST := etc/ahat.mf
25LOCAL_JAVA_RESOURCE_FILES := $(LOCAL_PATH)/etc/style.css
26LOCAL_JAVACFLAGS := -Xdoclint:all/protected
27LOCAL_IS_HOST_MODULE := true
28LOCAL_MODULE_TAGS := optional
29LOCAL_MODULE := ahat
30
31# Let users with Java 7 run ahat (b/28303627)
32LOCAL_JAVA_LANGUAGE_VERSION := 1.7
33
34# Make this available on the classpath of the general-tests tradefed suite.
35# It is used by libcore tests that run there.
36LOCAL_COMPATIBILITY_SUITE := general-tests
37
38include $(BUILD_HOST_JAVA_LIBRARY)
39AHAT_JAR := $(LOCAL_BUILT_MODULE)
40AHAT_API := $(intermediates.COMMON)/ahat_api.txt
41AHAT_REMOVED_API := $(intermediates.COMMON)/ahat_removed_api.txt
42
43# --- api check for ahat.jar ----------
44include $(CLEAR_VARS)
45LOCAL_SRC_FILES := $(call all-java-files-under, src/main)
46LOCAL_IS_HOST_MODULE := true
47LOCAL_MODULE_TAGS := optional
48LOCAL_MODULE_CLASS := JAVA_LIBRARIES
49LOCAL_MODULE := ahat
50LOCAL_DROIDDOC_OPTIONS := \
51  -stubpackages com.android.ahat:com.android.ahat.* \
52  -api $(AHAT_API) \
53  -removedApi $(AHAT_REMOVED_API)
54LOCAL_DROIDDOC_CUSTOM_TEMPLATE_DIR := external/doclava/res/assets/templates-sdk
55include $(BUILD_DROIDDOC)
56$(AHAT_API): $(full_target)
57
58$(eval $(call check-api, \
59  ahat-check-api, \
60  $(LOCAL_PATH)/etc/ahat_api.txt, \
61  $(AHAT_API), \
62  $(LOCAL_PATH)/etc/ahat_removed_api.txt, \
63  $(AHAT_REMOVED_API), \
64  -error 2 -error 3 -error 4 -error 5 -error 6 -error 7 -error 8 -error 9 -error 10 -error 11 \
65    -error 12 -error 13 -error 14 -error 15 -error 16 -error 17 -error 18 -error 19 -error 20 \
66    -error 21 -error 23 -error 24 -error 25 -error 26 -error 27, \
67  cat $(LOCAL_PATH)/etc/ahat_api_msg.txt, \
68  $(AHAT_JAR),))
69
70.PHONY: ahat-update-api
71ahat-update-api: PRIVATE_AHAT_API := $(AHAT_API)
72ahat-update-api: PRIVATE_AHAT_REMOVED_API := $(AHAT_REMOVED_API)
73ahat-update-api: PRIVATE_AHAT_ETC_API := $(LOCAL_PATH)/etc/ahat_api.txt
74ahat-update-api: PRIVATE_AHAT_ETC_REMOVED_API := $(LOCAL_PATH)/etc/ahat_removed_api.txt
75ahat-update-api: ahat-docs
76	@echo Copying ahat_api.txt
77	cp $(PRIVATE_AHAT_API) $(PRIVATE_AHAT_ETC_API)
78	@echo Copying ahat_removed_api.txt
79	cp $(PRIVATE_AHAT_REMOVED_API) $(PRIVATE_AHAT_ETC_REMOVED_API)
80
81# --- ahat script ----------------
82include $(CLEAR_VARS)
83LOCAL_IS_HOST_MODULE := true
84LOCAL_MODULE_CLASS := EXECUTABLES
85LOCAL_MODULE := ahat
86LOCAL_SRC_FILES := ahat
87include $(BUILD_PREBUILT)
88
89# The ahat tests rely on running ART to generate a heap dump for test, but ART
90# doesn't run on darwin. Only build and run the tests for linux.
91# There are also issues with running under instrumentation.
92ifeq ($(HOST_OS),linux)
93ifneq ($(EMMA_INSTRUMENT),true)
94# --- ahat-test-dump.jar --------------
95include $(CLEAR_VARS)
96LOCAL_MODULE := ahat-test-dump
97LOCAL_MODULE_TAGS := tests
98LOCAL_SRC_FILES := $(call all-java-files-under, src/test-dump)
99LOCAL_PROGUARD_ENABLED := obfuscation
100LOCAL_PROGUARD_FLAG_FILES := etc/test-dump.pro
101include $(BUILD_JAVA_LIBRARY)
102
103# Determine the location of the test-dump.jar, test-dump.hprof, and proguard
104# map files. These use variables set implicitly by the include of
105# BUILD_JAVA_LIBRARY above.
106AHAT_TEST_DUMP_JAR := $(LOCAL_BUILT_MODULE)
107AHAT_TEST_DUMP_HPROF := $(intermediates.COMMON)/test-dump.hprof
108AHAT_TEST_DUMP_BASE_HPROF := $(intermediates.COMMON)/test-dump-base.hprof
109AHAT_TEST_DUMP_PROGUARD_MAP := $(intermediates.COMMON)/test-dump.map
110
111# Directories to use for ANDROID_DATA when generating the test dumps to
112# ensure we don't pollute the source tree with any artifacts from running
113# dalvikvm.
114AHAT_TEST_DUMP_ANDROID_DATA := $(intermediates.COMMON)/test-dump-android_data
115AHAT_TEST_DUMP_BASE_ANDROID_DATA := $(intermediates.COMMON)/test-dump-base-android_data
116
117# Generate the proguard map in the desired location by copying it from
118# wherever the build system generates it by default.
119$(AHAT_TEST_DUMP_PROGUARD_MAP): PRIVATE_AHAT_SOURCE_PROGUARD_MAP := $(proguard_dictionary)
120$(AHAT_TEST_DUMP_PROGUARD_MAP): $(proguard_dictionary)
121	cp $(PRIVATE_AHAT_SOURCE_PROGUARD_MAP) $@
122
123# Run ahat-test-dump.jar to generate test-dump.hprof and test-dump-base.hprof
124AHAT_TEST_DUMP_DEPENDENCIES := \
125  $(HOST_OUT_EXECUTABLES)/dalvikvm64 \
126  $(ART_HOST_SHARED_LIBRARY_DEBUG_DEPENDENCIES) \
127  $(HOST_OUT_EXECUTABLES)/art \
128  $(HOST_CORE_IMG_OUT_BASE)$(CORE_IMG_SUFFIX)
129
130$(AHAT_TEST_DUMP_HPROF): PRIVATE_AHAT_TEST_ART := $(HOST_OUT_EXECUTABLES)/art
131$(AHAT_TEST_DUMP_HPROF): PRIVATE_AHAT_TEST_DUMP_JAR := $(AHAT_TEST_DUMP_JAR)
132$(AHAT_TEST_DUMP_HPROF): PRIVATE_AHAT_TEST_ANDROID_DATA := $(AHAT_TEST_DUMP_ANDROID_DATA)
133$(AHAT_TEST_DUMP_HPROF): $(AHAT_TEST_DUMP_JAR) $(AHAT_TEST_DUMP_DEPENDENCIES)
134	rm -rf $(PRIVATE_AHAT_TEST_ANDROID_DATA)
135	mkdir -p $(PRIVATE_AHAT_TEST_ANDROID_DATA)
136	ANDROID_DATA=$(PRIVATE_AHAT_TEST_ANDROID_DATA) \
137	  $(PRIVATE_AHAT_TEST_ART) -d --64 -cp $(PRIVATE_AHAT_TEST_DUMP_JAR) Main $@
138
139$(AHAT_TEST_DUMP_BASE_HPROF): PRIVATE_AHAT_TEST_ART := $(HOST_OUT_EXECUTABLES)/art
140$(AHAT_TEST_DUMP_BASE_HPROF): PRIVATE_AHAT_TEST_DUMP_JAR := $(AHAT_TEST_DUMP_JAR)
141$(AHAT_TEST_DUMP_BASE_HPROF): PRIVATE_AHAT_TEST_ANDROID_DATA := $(AHAT_TEST_DUMP_BASE_ANDROID_DATA)
142$(AHAT_TEST_DUMP_BASE_HPROF): $(AHAT_TEST_DUMP_JAR) $(AHAT_TEST_DUMP_DEPENDENCIES)
143	rm -rf $(PRIVATE_AHAT_TEST_ANDROID_DATA)
144	mkdir -p $(PRIVATE_AHAT_TEST_ANDROID_DATA)
145	ANDROID_DATA=$(PRIVATE_AHAT_TEST_ANDROID_DATA) \
146	  $(PRIVATE_AHAT_TEST_ART) -d --64 -cp $(PRIVATE_AHAT_TEST_DUMP_JAR) Main $@ --base
147
148# --- ahat-tests.jar --------------
149include $(CLEAR_VARS)
150LOCAL_SRC_FILES := $(call all-java-files-under, src/test)
151LOCAL_JAR_MANIFEST := etc/ahat-tests.mf
152LOCAL_JAVA_RESOURCE_FILES := \
153  $(AHAT_TEST_DUMP_HPROF) \
154  $(AHAT_TEST_DUMP_BASE_HPROF) \
155  $(AHAT_TEST_DUMP_PROGUARD_MAP) \
156  $(LOCAL_PATH)/etc/L.hprof \
157  $(LOCAL_PATH)/etc/O.hprof \
158  $(LOCAL_PATH)/etc/RI.hprof
159LOCAL_STATIC_JAVA_LIBRARIES := ahat junit-host
160LOCAL_IS_HOST_MODULE := true
161LOCAL_MODULE_TAGS := tests
162LOCAL_MODULE := ahat-tests
163include $(BUILD_HOST_JAVA_LIBRARY)
164AHAT_TEST_JAR := $(LOCAL_BUILT_MODULE)
165
166.PHONY: ahat-test
167ahat-test: PRIVATE_AHAT_TEST_JAR := $(AHAT_TEST_JAR)
168ahat-test: $(AHAT_TEST_JAR)
169	java -enableassertions -jar $(PRIVATE_AHAT_TEST_JAR)
170endif # EMMA_INSTRUMENT
171endif # linux
172
173# Clean up local variables.
174AHAT_JAR :=
175AHAT_API :=
176AHAT_REMOVED_API :=
177AHAT_TEST_JAR :=
178AHAT_TEST_DUMP_JAR :=
179AHAT_TEST_DUMP_HPROF :=
180AHAT_TEST_DUMP_BASE_HPROF :=
181AHAT_TEST_DUMP_PROGUARD_MAP :=
182AHAT_TEST_DUMP_DEPENDENCIES :=
183AHAT_TEST_DUMP_ANDROID_DATA :=
184AHAT_TEST_DUMP_BASE_ANDROID_DATA :=
185
186