blob: 99b7d0f6ab0cac8e4acab83613e666e58d9fa9cc [file] [log] [blame]
Jaewoong Jungf22997e2019-03-20 10:35:43 -07001#
2# Copyright (C) 2019 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############################################################
18# Internal build rules for native prebuilt modules
19############################################################
20
Jooyung Han36c1f672019-05-28 17:17:47 +090021prebuilt_module_classes := STATIC_LIBRARIES SHARED_LIBRARIES EXECUTABLES NATIVE_TESTS
22ifeq ($(filter $(prebuilt_module_classes),$(LOCAL_MODULE_CLASS)),)
23$(call pretty-error,cc_prebuilt_internal.mk is for $(prebuilt_module_classes) modules only)
24endif
25
Jaewoong Jungf22997e2019-03-20 10:35:43 -070026my_strip_module := $(firstword \
27 $(LOCAL_STRIP_MODULE_$($(my_prefix)$(LOCAL_2ND_ARCH_VAR_PREFIX)ARCH)) \
28 $(LOCAL_STRIP_MODULE))
29
30ifeq (SHARED_LIBRARIES,$(LOCAL_MODULE_CLASS))
31 ifeq ($(LOCAL_IS_HOST_MODULE)$(my_strip_module),)
32 # Strip but not try to add debuglink
33 my_strip_module := no_debuglink
34 endif
35endif
36
37ifneq ($(filter STATIC_LIBRARIES SHARED_LIBRARIES,$(LOCAL_MODULE_CLASS)),)
38 prebuilt_module_is_a_library := true
39else
40 prebuilt_module_is_a_library :=
41endif
42
43# Don't install static libraries by default.
44ifndef LOCAL_UNINSTALLABLE_MODULE
45ifeq (STATIC_LIBRARIES,$(LOCAL_MODULE_CLASS))
46 LOCAL_UNINSTALLABLE_MODULE := true
47endif
48endif
49
50my_check_elf_file_shared_lib_files :=
51
52ifneq ($(filter true keep_symbols no_debuglink mini-debug-info,$(my_strip_module)),)
53 ifdef LOCAL_IS_HOST_MODULE
54 $(call pretty-error,Cannot strip/pack host module)
55 endif
56 ifeq ($(filter SHARED_LIBRARIES EXECUTABLES NATIVE_TESTS,$(LOCAL_MODULE_CLASS)),)
57 $(call pretty-error,Can strip/pack only shared libraries or executables)
58 endif
59 ifneq ($(LOCAL_PREBUILT_STRIP_COMMENTS),)
60 $(call pretty-error,Cannot strip/pack scripts)
61 endif
62 # Set the arch-specific variables to set up the strip rules
63 LOCAL_STRIP_MODULE_$($(my_prefix)$(LOCAL_2ND_ARCH_VAR_PREFIX)ARCH) := $(my_strip_module)
64 include $(BUILD_SYSTEM)/dynamic_binary.mk
65 built_module := $(linked_module)
66
67 ifneq ($(LOCAL_SDK_VERSION),)
68 # binary.mk filters out NDK_MIGRATED_LIBS from my_shared_libs, thus those NDK libs are not added
69 # to DEPENDENCIES_ON_SHARED_LIBRARIES. Assign $(my_ndk_shared_libraries_fullpath) to
70 # my_check_elf_file_shared_lib_files so that check_elf_file.py can see those NDK stub libs.
71 my_check_elf_file_shared_lib_files := $(my_ndk_shared_libraries_fullpath)
72 endif
73else # my_strip_module not true
74 include $(BUILD_SYSTEM)/base_rules.mk
75 built_module := $(LOCAL_BUILT_MODULE)
76
77ifdef prebuilt_module_is_a_library
Dan Willemsenfd1e67b2020-06-08 18:50:14 -070078EXPORTS_LIST += $(intermediates)
Dan Willemsen18ffd582019-07-31 10:31:20 -070079EXPORTS.$(intermediates).FLAGS := $(foreach d,$(LOCAL_EXPORT_C_INCLUDE_DIRS),-I $(d))
80EXPORTS.$(intermediates).DEPS := $(LOCAL_EXPORT_C_INCLUDE_DEPS)
Jaewoong Jungf22997e2019-03-20 10:35:43 -070081
82include $(BUILD_SYSTEM)/allowed_ndk_types.mk
83
84ifdef LOCAL_SDK_VERSION
85my_link_type := native:ndk:$(my_ndk_stl_family):$(my_ndk_stl_link_type)
86else ifdef LOCAL_USE_VNDK
87 _name := $(patsubst %.vendor,%,$(LOCAL_MODULE))
Justin Yun2bfe0a12020-01-20 18:57:01 +090088 _name := $(patsubst %.product,%,$(LOCAL_MODULE))
Jaewoong Jungf22997e2019-03-20 10:35:43 -070089 ifneq ($(filter $(_name),$(VNDK_CORE_LIBRARIES) $(VNDK_SAMEPROCESS_LIBRARIES) $(LLNDK_LIBRARIES)),)
90 ifeq ($(filter $(_name),$(VNDK_PRIVATE_LIBRARIES)),)
91 my_link_type := native:vndk
92 else
93 my_link_type := native:vndk_private
94 endif
95 else
Justin Yun2bfe0a12020-01-20 18:57:01 +090096 ifeq ($(LOCAL_USE_VNDK_PRODUCT),true)
97 my_link_type := native:product
98 else
99 my_link_type := native:vendor
100 endif
Jaewoong Jungf22997e2019-03-20 10:35:43 -0700101 endif
102else ifneq ($(filter $(TARGET_RECOVERY_OUT)/%,$(LOCAL_MODULE_PATH)),)
103my_link_type := native:recovery
104else
105my_link_type := native:platform
106endif
107
108# TODO: check dependencies of prebuilt files
109my_link_deps :=
110
111my_2nd_arch_prefix := $(LOCAL_2ND_ARCH_VAR_PREFIX)
112my_common :=
113include $(BUILD_SYSTEM)/link_type.mk
114endif # prebuilt_module_is_a_library
115
116# The real dependency will be added after all Android.mks are loaded and the install paths
117# of the shared libraries are determined.
118ifdef LOCAL_INSTALLED_MODULE
119ifdef LOCAL_IS_HOST_MODULE
120 ifeq ($(LOCAL_SYSTEM_SHARED_LIBRARIES),none)
121 my_system_shared_libraries :=
122 else
123 my_system_shared_libraries := $(LOCAL_SYSTEM_SHARED_LIBRARIES)
124 endif
125else
126 ifeq ($(LOCAL_SYSTEM_SHARED_LIBRARIES),none)
127 my_system_shared_libraries := libc libm libdl
128 else
129 my_system_shared_libraries := $(LOCAL_SYSTEM_SHARED_LIBRARIES)
130 my_system_shared_libraries := $(patsubst libc,libc libdl,$(my_system_shared_libraries))
131 endif
132endif
133
Logan Chiene984ebb2019-07-11 14:00:04 -0700134my_shared_libraries := $(strip \
Jaewoong Jungf22997e2019-03-20 10:35:43 -0700135 $(filter-out $(my_system_shared_libraries),$(LOCAL_SHARED_LIBRARIES)) \
Logan Chiene984ebb2019-07-11 14:00:04 -0700136 $(my_system_shared_libraries))
Jaewoong Jungf22997e2019-03-20 10:35:43 -0700137
Logan Chiena45d6f52019-07-11 15:11:04 -0700138# Extra shared libraries introduced by LOCAL_CXX_STL (may append some libraries to
139# my_shared_libraries).
Jaewoong Jungf22997e2019-03-20 10:35:43 -0700140include $(BUILD_SYSTEM)/cxx_stl_setup.mk
Logan Chiena45d6f52019-07-11 15:11:04 -0700141
142ifdef my_shared_libraries
Jaewoong Jungf22997e2019-03-20 10:35:43 -0700143ifdef LOCAL_USE_VNDK
Justin Yun2bfe0a12020-01-20 18:57:01 +0900144 ifeq ($(LOCAL_USE_VNDK_PRODUCT),true)
145 my_shared_libraries := $(foreach l,$(my_shared_libraries),\
146 $(if $(SPLIT_PRODUCT.SHARED_LIBRARIES.$(l)),$(l).product,$(l)))
147 else
148 my_shared_libraries := $(foreach l,$(my_shared_libraries),\
149 $(if $(SPLIT_VENDOR.SHARED_LIBRARIES.$(l)),$(l).vendor,$(l)))
150 endif
Jaewoong Jungf22997e2019-03-20 10:35:43 -0700151endif
152$(LOCAL_2ND_ARCH_VAR_PREFIX)$(my_prefix)DEPENDENCIES_ON_SHARED_LIBRARIES += \
153 $(my_register_name):$(LOCAL_INSTALLED_MODULE):$(subst $(space),$(comma),$(my_shared_libraries))
Jaewoong Jungf22997e2019-03-20 10:35:43 -0700154endif # my_shared_libraries
Logan Chiena45d6f52019-07-11 15:11:04 -0700155endif # LOCAL_INSTALLED_MODULE
Jaewoong Jungf22997e2019-03-20 10:35:43 -0700156
157# We need to enclose the above export_includes and my_built_shared_libraries in
158# "my_strip_module not true" because otherwise the rules are defined in dynamic_binary.mk.
159endif # my_strip_module not true
160
161
162# Check prebuilt ELF binaries.
163include $(BUILD_SYSTEM)/check_elf_file.mk
164
165ifeq ($(NATIVE_COVERAGE),true)
166ifneq (,$(strip $(LOCAL_PREBUILT_COVERAGE_ARCHIVE)))
167 $(eval $(call copy-one-file,$(LOCAL_PREBUILT_COVERAGE_ARCHIVE),$(intermediates)/$(LOCAL_MODULE).gcnodir))
168 ifneq ($(LOCAL_UNINSTALLABLE_MODULE),true)
169 ifdef LOCAL_IS_HOST_MODULE
170 my_coverage_path := $($(my_prefix)OUT_COVERAGE)/$(patsubst $($(my_prefix)OUT)/%,%,$(my_module_path))
171 else
172 my_coverage_path := $(TARGET_OUT_COVERAGE)/$(patsubst $(PRODUCT_OUT)/%,%,$(my_module_path))
173 endif
174 my_coverage_path := $(my_coverage_path)/$(patsubst %.so,%,$(my_installed_module_stem)).gcnodir
175 $(eval $(call copy-one-file,$(LOCAL_PREBUILT_COVERAGE_ARCHIVE),$(my_coverage_path)))
176 $(LOCAL_BUILT_MODULE): $(my_coverage_path)
177 endif
178else
179# Coverage information is needed when static lib is a dependency of another
180# coverage-enabled module.
181ifeq (STATIC_LIBRARIES, $(LOCAL_MODULE_CLASS))
182GCNO_ARCHIVE := $(LOCAL_MODULE).gcnodir
183$(intermediates)/$(GCNO_ARCHIVE) : PRIVATE_ALL_OBJECTS :=
184$(intermediates)/$(GCNO_ARCHIVE) : PRIVATE_ALL_WHOLE_STATIC_LIBRARIES :=
185$(intermediates)/$(GCNO_ARCHIVE) : PRIVATE_PREFIX := $(my_prefix)
186$(intermediates)/$(GCNO_ARCHIVE) : PRIVATE_2ND_ARCH_VAR_PREFIX := $(LOCAL_2ND_ARCH_VAR_PREFIX)
187$(intermediates)/$(GCNO_ARCHIVE) :
188 $(transform-o-to-static-lib)
189endif
190endif
191endif
192
Jaewoong Jungf22997e2019-03-20 10:35:43 -0700193$(built_module) : $(my_prebuilt_src_file)
194 $(transform-prebuilt-to-target)
Jaewoong Jungf22997e2019-03-20 10:35:43 -0700195ifneq ($(filter EXECUTABLES NATIVE_TESTS,$(LOCAL_MODULE_CLASS)),)
196 $(hide) chmod +x $@
197endif
198