1package {
2    // See: http://go/android-license-faq
3    // A large-scale-change added 'default_applicable_licenses' to import
4    // all of the 'license_kinds' from "frameworks_native_license"
5    // to get the below license kinds:
6    //   SPDX-license-identifier-Apache-2.0
7    default_applicable_licenses: ["frameworks_native_license"],
8}
9
10rust_library {
11    name: "libbinder_rs",
12    crate_name: "binder",
13    srcs: ["src/lib.rs"],
14    shared_libs: [
15        "libutils",
16    ],
17    rustlibs: [
18        "liblibc",
19        "libbinder_ndk_sys",
20    ],
21    host_supported: true,
22    target: {
23        darwin: {
24            enabled: false,
25        }
26    },
27    apex_available: [
28        "//apex_available:platform",
29        "com.android.virt",
30    ],
31}
32
33rust_library {
34    name: "libbinder_ndk_sys",
35    crate_name: "binder_ndk_sys",
36    srcs: [
37        "sys/lib.rs",
38        ":libbinder_ndk_bindgen",
39    ],
40    shared_libs: [
41        "libbinder_ndk",
42    ],
43    host_supported: true,
44    target: {
45        darwin: {
46            enabled: false,
47        }
48    },
49    apex_available: [
50        "//apex_available:platform",
51        "com.android.virt",
52    ],
53    lints: "none",
54    clippy_lints: "none",
55}
56
57rust_bindgen {
58    name: "libbinder_ndk_bindgen",
59    crate_name: "binder_ndk_bindgen",
60    wrapper_src: "sys/BinderBindings.hpp",
61    source_stem: "bindings",
62    bindgen_flags: [
63        // Unfortunately the only way to specify the rust_non_exhaustive enum
64        // style for a type is to make it the default
65        "--default-enum-style", "rust_non_exhaustive",
66        // and then specify constified enums for the enums we don't want
67        // rustified
68        "--constified-enum", "android::c_interface::consts::.*",
69
70        "--allowlist-type", "android::c_interface::.*",
71        "--allowlist-type", "AStatus",
72        "--allowlist-type", "AIBinder_Class",
73        "--allowlist-type", "AIBinder",
74        "--allowlist-type", "AIBinder_Weak",
75        "--allowlist-type", "AIBinder_DeathRecipient",
76        "--allowlist-type", "AParcel",
77        "--allowlist-type", "binder_status_t",
78        "--allowlist-function", ".*",
79    ],
80    shared_libs: [
81        "libbinder_ndk",
82    ],
83    host_supported: true,
84
85    // Currently necessary for host builds
86    // TODO(b/31559095): bionic on host should define this
87    target: {
88        host: {
89            cflags: [
90                "-D__INTRODUCED_IN(n)=",
91                "-D__assert(a,b,c)=",
92                // We want all the APIs to be available on the host.
93                "-D__ANDROID_API__=10000",
94            ],
95        },
96        darwin: {
97            enabled: false,
98        },
99    },
100    apex_available: [
101        "//apex_available:platform",
102        "com.android.virt",
103    ],
104}
105
106rust_test {
107    name: "libbinder_rs-internal_test",
108    crate_name: "binder",
109    srcs: ["src/lib.rs"],
110    test_suites: ["general-tests"],
111    auto_gen_config: true,
112    shared_libs: [
113        "libbinder_ndk",
114    ],
115    rustlibs: [
116        "liblibc",
117        "libbinder_ndk_sys",
118    ],
119}
120