aboutsummaryrefslogtreecommitdiffstats
blob: b2c9e9e492ef3c46aeb00199bd197827f0875eea (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
# This file defines the rule to fuse the platform.zip into the current PDK build.
PDK_PLATFORM_JAVA_ZIP_JAVA_TARGET_LIB_DIR :=
PDK_PLATFORM_JAVA_ZIP_JAVA_HOST_LIB_DIR := \
	host/common/obj/JAVA_LIBRARIES/bouncycastle-host_intermediates \
	host/common/obj/JAVA_LIBRARIES/compatibility-host-util_intermediates \
	host/common/obj/JAVA_LIBRARIES/cts-tradefed-harness_intermediates \
	host/common/obj/JAVA_LIBRARIES/hosttestlib_intermediates
PDK_PLATFORM_JAVA_ZIP_CONTENTS :=

ifneq (,$(filter platform-java, $(MAKECMDGOALS))$(PDK_FUSION_PLATFORM_ZIP)$(PDK_FUSION_PLATFORM_DIR))
# additional items to add to platform.zip for platform-java build
# For these dirs, add classes.jar and javalib.jar from the dir to platform.zip
# all paths under out dir
PDK_PLATFORM_JAVA_ZIP_JAVA_TARGET_LIB_DIR += \
  target/common/obj/JAVA_LIBRARIES/android.test.runner_intermediates \
  target/common/obj/JAVA_LIBRARIES/android-common_intermediates \
  target/common/obj/JAVA_LIBRARIES/android-ex-camera2_intermediates \
  target/common/obj/JAVA_LIBRARIES/android_stubs_current_intermediates \
  target/common/obj/JAVA_LIBRARIES/bouncycastle_intermediates \
  target/common/obj/JAVA_LIBRARIES/conscrypt_intermediates \
  target/common/obj/JAVA_LIBRARIES/core-oj_intermediates \
  target/common/obj/JAVA_LIBRARIES/core-libart_intermediates \
  target/common/obj/JAVA_LIBRARIES/core-simple_intermediates \
  target/common/obj/JAVA_LIBRARIES/legacy-test_intermediates \
  target/common/obj/JAVA_LIBRARIES/legacy-android-test_intermediates \
  target/common/obj/JAVA_LIBRARIES/ext_intermediates \
  target/common/obj/JAVA_LIBRARIES/framework_intermediates \
  target/common/obj/JAVA_LIBRARIES/hwbinder_intermediates \
  target/common/obj/JAVA_LIBRARIES/ims-common_intermediates \
  target/common/obj/JAVA_LIBRARIES/okhttp_intermediates \
  target/common/obj/JAVA_LIBRARIES/telephony-common_intermediates \
  target/common/obj/JAVA_LIBRARIES/voip-common_intermediates \

# not java libraries
PDK_PLATFORM_JAVA_ZIP_CONTENTS += \
	target/common/obj/APPS/framework-res_intermediates/package-export.apk \
	target/common/obj/APPS/framework-res_intermediates/src/R.stamp
endif # platform-java or FUSION build

PDK_PLATFORM_JAVA_ZIP_JAVA_LIB_DIR := \
	$(PDK_PLATFORM_JAVA_ZIP_JAVA_TARGET_LIB_DIR) \
	$(PDK_PLATFORM_JAVA_ZIP_JAVA_HOST_LIB_DIR)

PDK_PLATFORM_JAVA_ZIP_CONTENTS += $(foreach lib_dir,$(PDK_PLATFORM_JAVA_ZIP_JAVA_LIB_DIR),\
    $(lib_dir)/classes.jar $(lib_dir)/classes-header.jar \
    $(lib_dir)/javalib.jar  $(lib_dir)/classes*.dex \
    $(lib_dir)/classes.dex.toc )

# check and override java support level
ifneq ($(TARGET_BUILD_PDK)$(PDK_FUSION_PLATFORM_ZIP)$(PDK_FUSION_PLATFORM_DIR),)
  ifneq ($(wildcard external/proguard),)
    TARGET_BUILD_JAVA_SUPPORT_LEVEL := sdk
  else # no proguard
    TARGET_BUILD_JAVA_SUPPORT_LEVEL :=
  endif
  # platform support is set after checking platform.zip
endif # PDK

ifneq (,$(PDK_FUSION_PLATFORM_DIR)$(PDK_FUSION_PLATFORM_ZIP))

_pdk_fusion_intermediates :=
_pdk_fusion_stamp :=
_pdk_fusion_file_list :=
_pdk_fusion_java_file_list :=
PDK_FUSION_SYMLINK_STAMP :=

ifdef PDK_FUSION_PLATFORM_DIR
  _pdk_fusion_intermediates := $(PDK_FUSION_PLATFORM_DIR)
  _pdk_fusion_file_list := $(sort \
    $(shell cd $(PDK_FUSION_PLATFORM_DIR); find * -type f))
  _pdk_fusion_java_file_list := $(filter target/common/%,$(_pdk_fusion_file_list))
  _pdk_fusion_file_list := $(filter-out target/common/%,$(_pdk_fusion_file_list))

  PDK_FUSION_SYMLINK_STAMP := $(call intermediates-dir-for, PACKAGING, pdk_fusion)/pdk_symlinks.stamp

  symlink_list := $(sort \
    $(shell cd $(PDK_FUSION_PLATFORM_DIR); find * -type l))
$(PDK_FUSION_SYMLINK_STAMP): PRIVATE_SYMLINKS := $(foreach s,$(symlink_list),\
    $(s):$(shell readlink $(PDK_FUSION_PLATFORM_DIR)/$(s)))
$(PDK_FUSION_SYMLINK_STAMP):
	$(foreach s,$(PRIVATE_SYMLINKS),\
	  mkdir -p $(PRODUCT_OUT)/$(dir $(call word-colon,1,$(s))) && \
	  ln -sf $(call word-colon,2,$(s)) $(PRODUCT_OUT)/$(call word-colon,1,$(s)) &&) true
	touch $@

  symlink_list :=
endif # PDK_FUSION_PLATFORM_DIR

ifdef PDK_FUSION_PLATFORM_ZIP
  _pdk_fusion_intermediates := $(call intermediates-dir-for, PACKAGING, pdk_fusion)
  _pdk_fusion_stamp := $(_pdk_fusion_intermediates)/pdk_fusion.stamp

  _pdk_fusion_file_list := $(shell unzip -Z -1 $(PDK_FUSION_PLATFORM_ZIP) \
      '*[^/]' -x 'target/common/*' 2>/dev/null)
  _pdk_fusion_java_file_list := \
      $(shell unzip -Z -1 $(PDK_FUSION_PLATFORM_ZIP) 'target/common/*' 2>/dev/null)
  _pdk_fusion_files := $(addprefix $(_pdk_fusion_intermediates)/,\
      $(_pdk_fusion_file_list) $(_pdk_fusion_java_file_list))

$(_pdk_fusion_stamp) : $(PDK_FUSION_PLATFORM_ZIP)
	@echo "Unzip $(dir $@) <- $<"
	$(hide) rm -rf $(dir $@) && mkdir -p $(dir $@)
	$(hide) unzip -qo $< -d $(dir $@)
	$(call split-long-arguments,-touch,$(_pdk_fusion_files))
	$(hide) touch $@

$(_pdk_fusion_files) : $(_pdk_fusion_stamp)
endif # PDK_FUSION_PLATFORM_ZIP

ifneq ($(_pdk_fusion_java_file_list),)
  # This represents whether java build can use platform API or not
  # This should not be used in Android.mk
  TARGET_BUILD_PDK_JAVA_PLATFORM := true
  ifneq ($(TARGET_BUILD_JAVA_SUPPORT_LEVEL),)
    TARGET_BUILD_JAVA_SUPPORT_LEVEL := platform
  endif
endif

# Implicit pattern rules to copy the fusion files to the system image directory.
# Note that if there is already explicit rule in the build system to generate a file,
# the pattern rule will be just ignored by make.
# That's desired by us: we want only absent files from the platform zip package.
# Copy with the last-modified time preserved, never follow symbolic links.
$(PRODUCT_OUT)/% : $(_pdk_fusion_intermediates)/% $(_pdk_fusion_stamp)
	@mkdir -p $(dir $@)
	$(hide) rm -rf $@
	$(hide) cp -fpPR $< $@

# implicit rules for host java files
$(HOST_COMMON_OUT_ROOT)/% : $(_pdk_fusion_intermediates)/host/common/% $(_pdk_fusion_stamp)
	@mkdir -p $(dir $@)
	$(hide) cp -fpPR $< $@

ifeq (true,$(TARGET_BUILD_PDK_JAVA_PLATFORM))
  PDK_FUSION_OUT_DIR := $(OUT_DIR)

  define JAVA_dependency_template
  $(call add-dependency,$(PDK_FUSION_OUT_DIR)/$(strip $(1)),\
    $(foreach d,$(filter $(2),$(_pdk_fusion_java_file_list)),$(PDK_FUSION_OUT_DIR)/$(d)))
  endef

  # needs explicit dependency as package-export.apk is not explicitly pulled
  $(eval $(call JAVA_dependency_template,\
  target/common/obj/APPS/framework-res_intermediates/src/R.stamp,\
  target/common/obj/APPS/framework-res_intermediates/package-export.apk))

  # javalib.jar should pull classes.jar as classes.jar is not explicitly pulled.
  $(foreach lib_dir,$(PDK_PLATFORM_JAVA_ZIP_JAVA_TARGET_LIB_DIR),\
  $(eval $(call JAVA_dependency_template,$(lib_dir)/javalib.jar,\
  $(lib_dir)/classes.jar)))

# implicit rules for all other target files
$(TARGET_COMMON_OUT_ROOT)/% : $(_pdk_fusion_intermediates)/target/common/% $(_pdk_fusion_stamp)
	@mkdir -p $(dir $@)
	$(hide) cp -fpPR $< $@
endif # TARGET_BUILD_PDK_JAVA_PLATFORM

ALL_PDK_FUSION_FILES := $(addprefix $(PRODUCT_OUT)/, $(_pdk_fusion_file_list))

endif # PDK_FUSION_PLATFORM_ZIP || PDK_FUSION_PLATFORM_DIR

ifeq ($(TARGET_BUILD_PDK),true)
  $(info PDK TARGET_BUILD_JAVA_SUPPORT_LEVEL $(TARGET_BUILD_JAVA_SUPPORT_LEVEL))
  ifeq ($(TARGET_BUILD_PDK_JAVA_PLATFORM),)
    # SDK used for Java build under PDK
    PDK_BUILD_SDK_VERSION := $(lastword $(TARGET_AVAILABLE_SDK_VERSIONS))
    $(info PDK Build uses SDK $(PDK_BUILD_SDK_VERSION))
  else # PDK_JAVA
    $(info PDK Build uses the current platform API)
  endif # PDK_JAVA
endif # BUILD_PDK

ifneq (,$(filter platform platform-java, $(MAKECMDGOALS))$(filter true,$(TARGET_BUILD_PDK)))
  # files under $(PRODUCT_OUT)/symbols to help debugging.
  # Source not included to PDK due to dependency issue, so provide symbols instead.

  PDK_SYMBOL_FILES_LIST :=
  ifeq ($(TARGET_IS_64_BIT),true)
    PDK_SYMBOL_FILES_LIST += system/bin/app_process64
    ifdef TARGET_2ND_ARCH
      PDK_SYMBOL_FILES_LIST += system/bin/app_process32
    endif
  else
    PDK_SYMBOL_FILES_LIST += system/bin/app_process32
  endif

  ifneq (,$(PDK_FUSION_PLATFORM_ZIP)$(PDK_FUSION_PLATFORM_DIR))
    # symbols should be explicitly pulled for fusion build
    $(foreach f,$(filter $(PDK_SYMBOL_FILES_LIST), $(_pdk_fusion_file_list)),\
      $(eval $(call add-dependency,$(PRODUCT_OUT)/$(f),$(PRODUCT_OUT)/symbols/$(f))))
  endif # PLATFORM_ZIP || PLATFORM_DIR
endif # platform.zip/dir build or PDK