xref: /aosp_15_r20/art/libnativeloader/Android.bp (revision 795d594fd825385562da6b089ea9b2033f3abf5a)
1// Shared library for target
2// ========================================================
3package {
4    // See: http://go/android-license-faq
5    // A large-scale-change added 'default_applicable_licenses' to import
6    // all of the 'license_kinds' from "art_license"
7    // to get the below license kinds:
8    //   SPDX-license-identifier-Apache-2.0
9    default_applicable_licenses: ["art_license"],
10    default_team: "trendy_team_art_mainline",
11}
12
13cc_library_headers {
14    name: "libnativeloader-headers",
15    defaults: ["art_defaults"],
16    apex_available: [
17        "//apex_available:platform",
18        "com.android.art",
19        "com.android.art.debug",
20        "com.android.media",
21    ],
22    visibility: [
23        "//art:__subpackages__",
24        // TODO(b/133140750): Clean this up.
25        "//frameworks/av/media/libstagefright",
26        "//frameworks/native/libs/graphicsenv",
27        "//frameworks/native/vulkan/libvulkan",
28    ],
29    host_supported: true,
30    export_include_dirs: ["include"],
31    header_libs: ["jni_headers"],
32    export_header_lib_headers: ["jni_headers"],
33}
34
35cc_defaults {
36    name: "libnativeloader-defaults",
37    defaults: ["art_defaults"],
38    host_supported: true,
39    srcs: [
40        "native_loader.cpp",
41    ],
42    header_libs: [
43        "art_libartbase_headers",
44        "libnativehelper_header_only",
45        "libnativeloader-headers",
46    ],
47    export_header_lib_headers: ["libnativeloader-headers"],
48    shared_libs: [
49        "libnativebridge#impl",
50    ],
51    target: {
52        android: {
53            srcs: [
54                "library_namespaces.cpp",
55                "native_loader_namespace.cpp",
56                "public_libraries.cpp",
57            ],
58            shared_libs: [
59                "libdl_android",
60            ],
61            static_libs: [
62                "libPlatformProperties",
63                "libmodules-utils-build",
64            ],
65        },
66    },
67}
68
69art_cc_library {
70    name: "libnativeloader",
71    defaults: ["libnativeloader-defaults"],
72    shared_libs: [
73        "libbase",
74        "liblog",
75    ],
76    visibility: [
77        "//frameworks/base/cmds/app_process",
78        // TODO(b/133140750): Clean this up.
79        "//frameworks/base/native/webview/loader",
80    ],
81    apex_available: [
82        "com.android.art",
83        "com.android.art.debug",
84        "test_broken_com.android.art",
85    ],
86    stubs: {
87        symbol_file: "libnativeloader.map.txt",
88        versions: ["1"],
89    },
90}
91
92// Wrapper that loads nativeloader.so lazily, to be used to deal with layer
93// inversion in places like in early boot where libnativeloader and/or
94// libnativebridge aren't available.
95// TODO(b/124250621) eliminate the need for this library
96cc_library_shared {
97    name: "libnativeloader_lazy",
98    defaults: ["art_defaults"],
99    visibility: [
100        "//frameworks/base/core/jni",
101        "//frameworks/native/opengl/libs",
102        "//frameworks/native/vulkan/libvulkan",
103    ],
104    apex_available: [
105        "//apex_available:platform",
106        "com.android.media",
107        "com.android.media.swcodec",
108    ],
109    host_supported: false,
110    srcs: ["native_loader_lazy.cpp"],
111    runtime_libs: ["libnativeloader"],
112    shared_libs: ["liblog"],
113    header_libs: ["libnativeloader-headers"],
114    export_header_lib_headers: ["libnativeloader-headers"],
115
116    // Apply the libnativeloader stub symbol file to the exported symbols from
117    // this shim library, to ensure that any symbols exposed here are also
118    // available as an exported API.
119    version_script: "libnativeloader.map.txt",
120}
121
122// native_loader_test.cpp mocks functions from libdl_android and
123// libnativebridge, so those have to be linked dynamically and this test binary
124// needs to export symbols to override them.
125art_cc_test {
126    name: "libnativeloader_test",
127    defaults: [
128        // Cannot use art_standalone_gtest_defaults because it makes us link
129        // libnativebridge statically through libart-gtest.
130        "art_standalone_test_defaults",
131        "libnativeloader-defaults",
132    ],
133    host_supported: false,
134
135    // Ordinarily, symbols are only exported if they are referenced by some
136    // shared object dependency. Instead, export everything using
137    // --export-dynamic, then restrict the visibility using the version script.
138    ldflags: ["-Wl,--export-dynamic"],
139    version_script: "libnativeloader_test.map",
140
141    header_libs: [
142        "libnativebridge-headers",
143        "libnativehelper_header_only",
144    ],
145    shared_libs: [
146        "liblog", // libbase dependency
147    ],
148    static_libs: [
149        "libbase",
150        "libgmock",
151    ],
152
153    tidy_timeout_srcs: [
154        "native_loader_test.cpp",
155    ],
156    srcs: [
157        "library_namespaces_test.cpp",
158        "native_loader_api_test.c",
159        "native_loader_test.cpp",
160    ],
161
162    test_suites: [
163        "general-tests",
164        "mts-art",
165    ],
166}
167
168cc_defaults {
169    name: "libnativeloader_api_test_defaults",
170    defaults: ["art_standalone_test_defaults"],
171
172    srcs: ["native_loader_api_test.cpp"],
173    header_libs: [
174        "libnativebridge-headers",
175        "libnativehelper_header_only",
176    ],
177    static_libs: [
178        "libbase",
179        "libgmock",
180    ],
181}
182
183art_cc_test {
184    name: "art_libnativeloader_cts_test",
185    defaults: ["libnativeloader_api_test_defaults"],
186    shared_libs: [
187        "libnativeloader",
188    ],
189    test_config_template: ":art-gtests-target-standalone-cts-template",
190    test_suites: [
191        "cts",
192        "mcts-art",
193    ],
194}
195
196art_cc_test {
197    name: "libnativeloader_lazy_test",
198    defaults: ["libnativeloader_api_test_defaults"],
199    shared_libs: ["libnativeloader_lazy"],
200    data_libs: ["libnativeloader_lazy"],
201    test_suites: [
202        "general-tests",
203        "mts-art",
204    ],
205}
206