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