blob: 523d14345cc8e689a1f0c435f3be0f175b64926f [file] [log] [blame]
Brian Carlstrom16192862011-09-12 17:50:06 -07001#
2# Copyright (C) 2011 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
Brian Carlstrom27ec9612011-09-19 20:20:38 -070017########################################################################
Brian Carlstrom7ab763c2013-12-09 00:38:02 -080018# Rules to build a smaller "core" image to support core libraries
19# (that is, non-Android frameworks) testing on the host and target
20#
21# The main rules to build the default "boot" image are in
22# build/core/dex_preopt_libart.mk
Brian Carlstrom16192862011-09-12 17:50:06 -070023
Nicolas Geoffray611e1db2014-10-09 17:34:45 +010024include art/build/Android.common_build.mk
Dave Allison70202782013-10-22 17:52:19 -070025
Ian Rogersd582fa42014-11-05 23:46:43 -080026ifeq ($(DEX2OAT_HOST_INSTRUCTION_SET_FEATURES),)
27 DEX2OAT_HOST_INSTRUCTION_SET_FEATURES := default
28endif
29ifeq ($($(HOST_2ND_ARCH_VAR_PREFIX)DEX2OAT_HOST_INSTRUCTION_SET_FEATURES),)
30 $(HOST_2ND_ARCH_VAR_PREFIX)DEX2OAT_HOST_INSTRUCTION_SET_FEATURES := default
31endif
32
Nicolas Geoffray1db132d2014-03-26 10:56:24 +000033# Use dex2oat debug version for better error reporting
Andreas Gampec23c9c92014-10-28 14:47:25 -070034# $(1): compiler - default, optimizing or interpreter.
35# $(2): pic/no-pic
36# $(3): 2ND_ or undefined, 2ND_ for 32-bit host builds.
Alex Light1ef4ce82014-08-27 11:13:47 -070037# NB depending on HOST_CORE_DEX_LOCATIONS so we are sure to have the dex files in frameworks for
38# run-test --no-image
Ian Rogersafd9acc2014-06-17 08:21:54 -070039define create-core-oat-host-rules
Andreas Gampe63fc30e2014-10-24 21:58:16 -070040 core_compile_options :=
41 core_image_name :=
42 core_oat_name :=
43 core_infix :=
Andreas Gampec23c9c92014-10-28 14:47:25 -070044 core_pic_infix :=
Nicolas Geoffraya136ab52014-10-31 10:48:25 +000045 core_dex2oat_dependency := $(DEX2OAT_DEPENDENCY)
Andreas Gampe63fc30e2014-10-24 21:58:16 -070046
Nicolas Geoffrayc9338b92014-12-03 13:36:10 +000047 ifeq ($(1),default)
48 core_compile_options += --compiler-backend=Quick
49 endif
Andreas Gampe63fc30e2014-10-24 21:58:16 -070050 ifeq ($(1),optimizing)
Nicolas Geoffraya136ab52014-10-31 10:48:25 +000051 core_compile_options += --compiler-backend=Optimizing
52 # With the optimizing compiler, we want to rerun dex2oat whenever there is
53 # a dex2oat change to catch regressions early.
54 core_dex2oat_dependency := $(DEX2OAT)
Andreas Gampe63fc30e2014-10-24 21:58:16 -070055 core_infix := -optimizing
56 endif
57 ifeq ($(1),interpreter)
58 core_compile_options += --compiler-filter=interpret-only
59 core_infix := -interpreter
60 endif
61 ifeq ($(1),default)
62 # Default has no infix, no compile options.
63 endif
64 ifneq ($(filter-out default interpreter optimizing,$(1)),)
65 #Technically this test is not precise, but hopefully good enough.
66 $$(error found $(1) expected default, interpreter or optimizing)
67 endif
Andreas Gampec23c9c92014-10-28 14:47:25 -070068
69 ifeq ($(2),pic)
70 core_compile_options += --compile-pic
71 core_pic_infix := -pic
72 endif
73 ifeq ($(2),no-pic)
74 # No change for non-pic
75 endif
76 ifneq ($(filter-out pic no-pic,$(2)),)
77 # Technically this test is not precise, but hopefully good enough.
78 $$(error found $(2) expected pic or no-pic)
79 endif
80
81 core_image_name := $($(3)HOST_CORE_IMG_OUT_BASE)$$(core_infix)$$(core_pic_infix)$(CORE_IMG_SUFFIX)
82 core_oat_name := $($(3)HOST_CORE_OAT_OUT_BASE)$$(core_infix)$$(core_pic_infix)$(CORE_OAT_SUFFIX)
Andreas Gampe63fc30e2014-10-24 21:58:16 -070083
84 # Using the bitness suffix makes it easier to add as a dependency for the run-test mk.
Andreas Gampec23c9c92014-10-28 14:47:25 -070085 ifeq ($(3),)
86 HOST_CORE_IMAGE_$(1)_$(2)_64 := $$(core_image_name)
Andreas Gampe63fc30e2014-10-24 21:58:16 -070087 else
Andreas Gampec23c9c92014-10-28 14:47:25 -070088 HOST_CORE_IMAGE_$(1)_$(2)_32 := $$(core_image_name)
Andreas Gampe63fc30e2014-10-24 21:58:16 -070089 endif
90 HOST_CORE_IMG_OUTS += $$(core_image_name)
91 HOST_CORE_OAT_OUTS += $$(core_oat_name)
92
93$$(core_image_name): PRIVATE_CORE_COMPILE_OPTIONS := $$(core_compile_options)
94$$(core_image_name): PRIVATE_CORE_IMG_NAME := $$(core_image_name)
95$$(core_image_name): PRIVATE_CORE_OAT_NAME := $$(core_oat_name)
Nicolas Geoffraya136ab52014-10-31 10:48:25 +000096$$(core_image_name): $$(HOST_CORE_DEX_LOCATIONS) $$(core_dex2oat_dependency)
Ian Rogersafd9acc2014-06-17 08:21:54 -070097 @echo "host dex2oat: $$@ ($$?)"
98 @mkdir -p $$(dir $$@)
Andreas Gampe63fc30e2014-10-24 21:58:16 -070099 $$(hide) $$(DEX2OAT) --runtime-arg -Xms$(DEX2OAT_IMAGE_XMS) --runtime-arg -Xmx$(DEX2OAT_IMAGE_XMX) \
Ian Rogersafd9acc2014-06-17 08:21:54 -0700100 --image-classes=$$(PRELOADED_CLASSES) $$(addprefix --dex-file=,$$(HOST_CORE_DEX_FILES)) \
Andreas Gampe63fc30e2014-10-24 21:58:16 -0700101 $$(addprefix --dex-location=,$$(HOST_CORE_DEX_LOCATIONS)) --oat-file=$$(PRIVATE_CORE_OAT_NAME) \
102 --oat-location=$$(PRIVATE_CORE_OAT_NAME) --image=$$(PRIVATE_CORE_IMG_NAME) \
Andreas Gampec23c9c92014-10-28 14:47:25 -0700103 --base=$$(LIBART_IMG_HOST_BASE_ADDRESS) --instruction-set=$$($(3)ART_HOST_ARCH) \
Ian Rogersd582fa42014-11-05 23:46:43 -0800104 --instruction-set-features=$$($(3)DEX2OAT_HOST_INSTRUCTION_SET_FEATURES) \
Andreas Gampe63fc30e2014-10-24 21:58:16 -0700105 --host --android-root=$$(HOST_OUT) --include-patch-information \
106 $$(PRIVATE_CORE_COMPILE_OPTIONS)
Brian Carlstrom27ec9612011-09-19 20:20:38 -0700107
Andreas Gampe63fc30e2014-10-24 21:58:16 -0700108$$(core_oat_name): $$(core_image_name)
Ian Rogersafd9acc2014-06-17 08:21:54 -0700109
Andreas Gampe63fc30e2014-10-24 21:58:16 -0700110 # Clean up locally used variables.
Nicolas Geoffraya136ab52014-10-31 10:48:25 +0000111 core_dex2oat_dependency :=
Andreas Gampe63fc30e2014-10-24 21:58:16 -0700112 core_compile_options :=
113 core_image_name :=
114 core_oat_name :=
115 core_infix :=
Andreas Gampec23c9c92014-10-28 14:47:25 -0700116 core_pic_infix :=
Ian Rogersafd9acc2014-06-17 08:21:54 -0700117endef # create-core-oat-host-rules
118
Andreas Gampec23c9c92014-10-28 14:47:25 -0700119# $(1): compiler - default, optimizing or interpreter.
120define create-core-oat-host-rule-combination
121 $(call create-core-oat-host-rules,$(1),no-pic,)
122 $(call create-core-oat-host-rules,$(1),pic,)
123
124 ifneq ($(HOST_PREFER_32_BIT),true)
125 $(call create-core-oat-host-rules,$(1),no-pic,2ND_)
126 $(call create-core-oat-host-rules,$(1),pic,2ND_)
127 endif
128endef
129
130$(eval $(call create-core-oat-host-rule-combination,default))
131$(eval $(call create-core-oat-host-rule-combination,optimizing))
132$(eval $(call create-core-oat-host-rule-combination,interpreter))
133
Brian Carlstrom2b7cdf42011-10-13 11:18:28 -0700134
Ian Rogersafd9acc2014-06-17 08:21:54 -0700135define create-core-oat-target-rules
Andreas Gampe63fc30e2014-10-24 21:58:16 -0700136 core_compile_options :=
137 core_image_name :=
138 core_oat_name :=
139 core_infix :=
Andreas Gampec23c9c92014-10-28 14:47:25 -0700140 core_pic_infix :=
Nicolas Geoffraya136ab52014-10-31 10:48:25 +0000141 core_dex2oat_dependency := $(DEX2OAT_DEPENDENCY)
Andreas Gampe63fc30e2014-10-24 21:58:16 -0700142
Nicolas Geoffrayc9338b92014-12-03 13:36:10 +0000143 ifeq ($(1),default)
144 core_compile_options += --compiler-backend=Quick
145 endif
Andreas Gampe63fc30e2014-10-24 21:58:16 -0700146 ifeq ($(1),optimizing)
Nicolas Geoffray08d5e282014-11-03 14:39:21 +0000147 ifeq ($($(3)TARGET_ARCH),arm64)
Nicolas Geoffraya136ab52014-10-31 10:48:25 +0000148 # TODO: Enable image generation on arm64 once the backend
149 # is on par with other architectures.
150 core_compile_options += --compiler-backend=Quick
151 else
152 core_compile_options += --compiler-backend=Optimizing
153 # With the optimizing compiler, we want to rerun dex2oat whenever there is
154 # a dex2oat change to catch regressions early.
155 core_dex2oat_dependency := $(DEX2OAT)
156 endif
Andreas Gampe63fc30e2014-10-24 21:58:16 -0700157 core_infix := -optimizing
158 endif
159 ifeq ($(1),interpreter)
160 core_compile_options += --compiler-filter=interpret-only
161 core_infix := -interpreter
162 endif
163 ifeq ($(1),default)
164 # Default has no infix, no compile options.
165 endif
166 ifneq ($(filter-out default interpreter optimizing,$(1)),)
Andreas Gampec23c9c92014-10-28 14:47:25 -0700167 # Technically this test is not precise, but hopefully good enough.
Andreas Gampe63fc30e2014-10-24 21:58:16 -0700168 $$(error found $(1) expected default, interpreter or optimizing)
169 endif
Andreas Gampec23c9c92014-10-28 14:47:25 -0700170
171 ifeq ($(2),pic)
172 core_compile_options += --compile-pic
173 core_pic_infix := -pic
174 endif
175 ifeq ($(2),no-pic)
176 # No change for non-pic
177 endif
178 ifneq ($(filter-out pic no-pic,$(2)),)
179 #Technically this test is not precise, but hopefully good enough.
180 $$(error found $(2) expected pic or no-pic)
181 endif
182
183 core_image_name := $($(3)TARGET_CORE_IMG_OUT_BASE)$$(core_infix)$$(core_pic_infix)$(CORE_IMG_SUFFIX)
184 core_oat_name := $($(3)TARGET_CORE_OAT_OUT_BASE)$$(core_infix)$$(core_pic_infix)$(CORE_OAT_SUFFIX)
Andreas Gampe63fc30e2014-10-24 21:58:16 -0700185
186 # Using the bitness suffix makes it easier to add as a dependency for the run-test mk.
Andreas Gampec23c9c92014-10-28 14:47:25 -0700187 ifeq ($(3),)
188 ifdef TARGET_2ND_ARCH
189 TARGET_CORE_IMAGE_$(1)_$(2)_64 := $$(core_image_name)
190 else
191 TARGET_CORE_IMAGE_$(1)_$(2)_32 := $$(core_image_name)
192 endif
Andreas Gampe63fc30e2014-10-24 21:58:16 -0700193 else
Andreas Gampec23c9c92014-10-28 14:47:25 -0700194 TARGET_CORE_IMAGE_$(1)_$(2)_32 := $$(core_image_name)
Andreas Gampe63fc30e2014-10-24 21:58:16 -0700195 endif
196 TARGET_CORE_IMG_OUTS += $$(core_image_name)
197 TARGET_CORE_OAT_OUTS += $$(core_oat_name)
198
199$$(core_image_name): PRIVATE_CORE_COMPILE_OPTIONS := $$(core_compile_options)
200$$(core_image_name): PRIVATE_CORE_IMG_NAME := $$(core_image_name)
201$$(core_image_name): PRIVATE_CORE_OAT_NAME := $$(core_oat_name)
Nicolas Geoffraya136ab52014-10-31 10:48:25 +0000202$$(core_image_name): $$(TARGET_CORE_DEX_FILES) $$(core_dex2oat_dependency)
Andreas Gampeafbaa1a2014-03-25 18:09:32 -0700203 @echo "target dex2oat: $$@ ($$?)"
204 @mkdir -p $$(dir $$@)
Andreas Gampe63fc30e2014-10-24 21:58:16 -0700205 $$(hide) $$(DEX2OAT) --runtime-arg -Xms$(DEX2OAT_XMS) --runtime-arg -Xmx$(DEX2OAT_XMX) \
Ian Rogersafd9acc2014-06-17 08:21:54 -0700206 --image-classes=$$(PRELOADED_CLASSES) $$(addprefix --dex-file=,$$(TARGET_CORE_DEX_FILES)) \
Andreas Gampe63fc30e2014-10-24 21:58:16 -0700207 $$(addprefix --dex-location=,$$(TARGET_CORE_DEX_LOCATIONS)) --oat-file=$$(PRIVATE_CORE_OAT_NAME) \
208 --oat-location=$$(PRIVATE_CORE_OAT_NAME) --image=$$(PRIVATE_CORE_IMG_NAME) \
Andreas Gampec23c9c92014-10-28 14:47:25 -0700209 --base=$$(LIBART_IMG_TARGET_BASE_ADDRESS) --instruction-set=$$($(3)TARGET_ARCH) \
Ian Rogersd582fa42014-11-05 23:46:43 -0800210 --instruction-set-features=$$($(3)DEX2OAT_TARGET_INSTRUCTION_SET_FEATURES) \
Andreas Gampe63fc30e2014-10-24 21:58:16 -0700211 --android-root=$$(PRODUCT_OUT)/system --include-patch-information \
Nicolas Geoffray130bd1b2014-11-03 16:23:48 +0000212 $$(PRIVATE_CORE_COMPILE_OPTIONS) || (rm $$(PRIVATE_CORE_OAT_NAME); exit 1)
Andreas Gampeafbaa1a2014-03-25 18:09:32 -0700213
Andreas Gampe63fc30e2014-10-24 21:58:16 -0700214$$(core_oat_name): $$(core_image_name)
Andreas Gampe2fe07922014-04-21 07:50:39 -0700215
Andreas Gampe63fc30e2014-10-24 21:58:16 -0700216 # Clean up locally used variables.
Nicolas Geoffraya136ab52014-10-31 10:48:25 +0000217 core_dex2oat_dependency :=
Andreas Gampe63fc30e2014-10-24 21:58:16 -0700218 core_compile_options :=
219 core_image_name :=
220 core_oat_name :=
221 core_infix :=
Andreas Gampec23c9c92014-10-28 14:47:25 -0700222 core_pic_infix :=
Ian Rogersafd9acc2014-06-17 08:21:54 -0700223endef # create-core-oat-target-rules
Andreas Gampeafbaa1a2014-03-25 18:09:32 -0700224
Andreas Gampec23c9c92014-10-28 14:47:25 -0700225# $(1): compiler - default, optimizing or interpreter.
226define create-core-oat-target-rule-combination
227 $(call create-core-oat-target-rules,$(1),no-pic,)
228 $(call create-core-oat-target-rules,$(1),pic,)
229
230 ifdef TARGET_2ND_ARCH
231 $(call create-core-oat-target-rules,$(1),no-pic,2ND_)
232 $(call create-core-oat-target-rules,$(1),pic,2ND_)
233 endif
234endef
235
236$(eval $(call create-core-oat-target-rule-combination,default))
237$(eval $(call create-core-oat-target-rule-combination,optimizing))
238$(eval $(call create-core-oat-target-rule-combination,interpreter))