1// Copyright (C) 2018 The Android Open Source Project
2//
3// Licensed under the Apache License, Version 2.0 (the "License");
4// you may not use this file except in compliance with the License.
5// You may obtain a copy of the License at
6//
7//     http://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS,
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12// See the License for the specific language governing permissions and
13// limitations under the License.
14
15package {
16    // See: http://go/android-license-faq
17    // A large-scale-change added 'default_applicable_licenses' to import
18    // all of the 'license_kinds' from "system_tools_aidl_license"
19    // to get the below license kinds:
20    //   SPDX-license-identifier-Apache-2.0
21    default_applicable_licenses: ["system_tools_aidl_license"],
22}
23
24bootstrap_go_package {
25    name: "aidl-soong-rules",
26    pkgPath: "android/soong/aidl",
27    deps: [
28        "blueprint",
29        "soong",
30        "soong-android",
31        "soong-aidl-library",
32        "soong-cc",
33        "soong-genrule",
34        "soong-phony",
35        "soong-java",
36        "soong-rust",
37    ],
38    srcs: [
39        "aidl_interface.go",
40        "properties.go",
41        "aidl_api.go",
42        "aidl_gen_rule.go",
43        "aidl_interface_backends.go",
44
45        "aidl_interface_defaults.go",
46        "aidl_interface_metadata_singleton.go",
47        "aidl_rust_source_provider.go",
48        "aidl_utils.go",
49    ],
50    testSrcs: [
51        "aidl_test.go",
52    ],
53    pluginFor: ["soong_build"],
54}
55
56aidl_interfaces_metadata {
57    name: "aidl_metadata_json",
58    visibility: ["//system/tools/aidl:__subpackages__"],
59}
60
61// These configurations are inherited by all aidl-gen modules
62// TODO(b/146436251): default isn't applied because the module is created
63// in PreArchMutators, when import behavior becomes explicit, the logic can
64// be moved back to LoadHook, and then default can be applied as well.
65cc_defaults {
66    name: "aidl-cpp-module-defaults",
67    target: {
68        darwin: {
69            enabled: false,
70        },
71    },
72}
73
74java_defaults {
75    name: "aidl-java-module-defaults",
76}
77
78rust_defaults {
79    name: "aidl-rust-module-defaults",
80}
81
82// Tests
83
84filegroup {
85    name: "aidl-test-filegroup",
86    srcs: [
87        "tests_1/some_package/IFoo.aidl",
88        "tests_1/some_package/Thing.aidl",
89        "tests_1/some_package/sub_package/*.aidl",
90    ],
91}
92
93aidl_interface {
94    name: "test-piece-1",
95    local_include_dir: "tests_1",
96    vendor_available: true,
97    product_available: true,
98    double_loadable: true,
99    host_supported: true,
100    flags: ["-Werror"],
101    srcs: [
102        "tests_1/some_package/IFoo.aidl",
103        "tests_1/some_package/Thing.aidl",
104        "tests_1/some_package/sub_package/*.aidl", // testing glob w/o filegroup
105    ],
106    versions: [
107        "1",
108        "2",
109        "3",
110        "4",
111    ],
112    backend: {
113        rust: {
114            enabled: true,
115        },
116    },
117}
118
119aidl_interface {
120    name: "test-piece-ndk-sdk-29",
121    local_include_dir: "tests_1",
122    flags: ["-Werror"],
123    srcs: [
124        "tests_1/some_package/IFoo.aidl",
125        "tests_1/some_package/Thing.aidl",
126        "tests_1/some_package/sub_package/*.aidl", // testing glob w/o filegroup
127    ],
128    unstable: true,
129    backend: {
130        rust: {
131            enabled: true,
132        },
133        ndk: {
134            sdk_version: "29",
135            cflags: ["-U__ANDROID_UNAVAILABLE_SYMBOLS_ARE_WEAK__"],
136            ldflags: ["-Wl,-z,max-page-size=65536"],
137        },
138    },
139}
140
141aidl_interface {
142    name: "test-piece-ndk-sdk-30",
143    local_include_dir: "tests_1",
144    flags: ["-Werror"],
145    srcs: [
146        "tests_1/some_package/IFoo.aidl",
147        "tests_1/some_package/Thing.aidl",
148        "tests_1/some_package/sub_package/*.aidl", // testing glob w/o filegroup
149    ],
150    unstable: true,
151    backend: {
152        rust: {
153            enabled: true,
154        },
155        ndk: {
156            sdk_version: "30",
157            cflags: ["-U__ANDROID_UNAVAILABLE_SYMBOLS_ARE_WEAK__"],
158        },
159    },
160}
161
162aidl_interface {
163    name: "test-piece-ndk-sdk-31",
164    local_include_dir: "tests_1",
165    flags: ["-Werror"],
166    srcs: [
167        "tests_1/some_package/IFoo.aidl",
168        "tests_1/some_package/Thing.aidl",
169        "tests_1/some_package/sub_package/*.aidl", // testing glob w/o filegroup
170    ],
171    unstable: true,
172    backend: {
173        rust: {
174            enabled: true,
175        },
176        ndk: {
177            sdk_version: "31",
178            cflags: ["-U__ANDROID_UNAVAILABLE_SYMBOLS_ARE_WEAK__"],
179        },
180    },
181}
182
183aidl_interface {
184    name: "test-piece-ndk-sdk-32",
185    local_include_dir: "tests_1",
186    flags: ["-Werror"],
187    srcs: [
188        "tests_1/some_package/IFoo.aidl",
189        "tests_1/some_package/Thing.aidl",
190        "tests_1/some_package/sub_package/*.aidl", // testing glob w/o filegroup
191    ],
192    unstable: true,
193    backend: {
194        rust: {
195            enabled: true,
196        },
197        ndk: {
198            sdk_version: "32",
199            cflags: ["-U__ANDROID_UNAVAILABLE_SYMBOLS_ARE_WEAK__"],
200        },
201    },
202}
203
204aidl_interface {
205    name: "test-piece-ndk-sdk-33",
206    local_include_dir: "tests_1",
207    flags: ["-Werror"],
208    srcs: [
209        "tests_1/some_package/IFoo.aidl",
210        "tests_1/some_package/Thing.aidl",
211        "tests_1/some_package/sub_package/*.aidl", // testing glob w/o filegroup
212    ],
213    unstable: true,
214    backend: {
215        rust: {
216            enabled: true,
217        },
218        ndk: {
219            sdk_version: "33",
220            cflags: ["-U__ANDROID_UNAVAILABLE_SYMBOLS_ARE_WEAK__"],
221        },
222    },
223}
224
225aidl_interface {
226    name: "tests-vintf",
227    local_include_dir: "tests_vintf",
228    srcs: ["tests_vintf/vintf/IFoo.aidl"],
229    stability: "vintf",
230    vendor_available: true,
231    backend: {
232        rust: {
233            enabled: true,
234        },
235        ndk: {
236            sdk_version: "31",
237        },
238        java: {
239            sdk_version: "system_current",
240        },
241    },
242    versions_with_info: [
243        {
244            version: "1",
245            imports: [],
246        },
247    ],
248
249}
250
251aidl_interface {
252    name: "test-piece-2",
253    local_include_dir: "tests_1",
254    flags: ["-Werror"],
255    srcs: [
256        "tests_1/INoPackage.aidl",
257        "tests_1/some_package/IBar.aidl",
258    ],
259    imports: [
260        "test-piece-1-V3",
261    ],
262    backend: {
263        rust: {
264            enabled: true,
265        },
266        java: {
267            platform_apis: true,
268        },
269    },
270    gen_trace: true,
271    versions_with_info: [
272        {
273            version: "1",
274            imports: ["test-piece-1-V3"],
275        },
276    ],
277
278}
279
280aidl_interface {
281    name: "test-piece-3",
282    local_include_dir: "tests_1",
283    flags: ["-Werror"],
284    srcs: [
285        "tests_1/other_package/Enum.aidl",
286        "tests_1/other_package/IBaz.aidl",
287    ],
288    imports: [
289        "test-piece-2-V1",
290    ],
291    backend: {
292        rust: {
293            enabled: true,
294        },
295        java: {
296            platform_apis: true,
297            gen_trace: true,
298        },
299    },
300    gen_trace: true,
301    versions_with_info: [
302        {
303            version: "1",
304            imports: ["test-piece-2-V1"],
305        },
306        {
307            version: "2",
308            imports: ["test-piece-2-V1"],
309        },
310
311    ],
312    frozen: true,
313}
314
315cc_test_library {
316    name: "client-using-test-piece-3",
317    srcs: ["client-using-test-piece-3/client-using-test-piece-3.cpp"],
318    shared_libs: ["test-piece-3-V2-cpp"],
319}
320
321aidl_interface {
322    name: "test-piece-4",
323    local_include_dir: "tests_2",
324    flags: ["-Werror"],
325    srcs: [
326        "tests_2/another_package/IFaz.aidl",
327    ],
328    imports: [
329        "test-piece-1-V3",
330    ],
331    backend: {
332        rust: {
333            enabled: true,
334        },
335        java: {
336            platform_apis: true,
337        },
338    },
339    gen_trace: true,
340    versions: ["1"],
341    dumpapi: {
342        no_license: true,
343    },
344}
345
346aidl_interface {
347    name: "test-root-package",
348    flags: ["-Werror"],
349    srcs: [
350        "test_package/IBaz.aidl",
351    ],
352    imports: [
353        "test-piece-2-V1",
354    ],
355    backend: {
356        rust: {
357            enabled: true,
358        },
359        java: {
360            platform_apis: true,
361        },
362    },
363    gen_trace: true,
364    versions: [
365        "1",
366        "2",
367        "3",
368    ],
369}
370
371aidl_interface {
372    name: "test-piece-5",
373    unstable: true,
374    local_include_dir: "tests_3",
375    flags: ["-Werror"],
376    srcs: [
377        "tests_3/EmptyParcelable.aidl",
378        "tests_3/IEmptyInterface.aidl",
379    ],
380}
381
382aidl_interface {
383    name: "test-piece-6",
384    unstable: true,
385    local_include_dir: "tests_6",
386    flags: ["-Werror"],
387    srcs: [
388        "tests_6/test6/Bar.aidl",
389        "tests_6/test6/Foo.aidl",
390    ],
391}
392
393aidl_interface {
394    name: "tests-unfrozen-vendor",
395    owner: "google",
396    local_include_dir: "tests_unfrozen_vendor",
397    srcs: ["tests_unfrozen_vendor/vendor/IFoo.aidl"],
398    vendor_available: true,
399    backend: {
400        rust: {
401            enabled: true,
402        },
403    },
404    frozen: false,
405    always_use_unfrozen: true,
406    versions_with_info: [
407        {
408            version: "1",
409            imports: [],
410        },
411    ],
412
413}
414
415cc_library {
416    name: "build_test_aidl_always_use_unfrozen",
417    srcs: ["test_unfrozen_iface/test_unfrozen_iface.cpp"],
418    shared_libs: [
419        "tests-unfrozen-vendor-V2-cpp",
420    ],
421}
422
423// These test that a parcel imported from A->B->C will have the required dependencies to link in
424// all backends (C++ backends need to link direclty against the constructor of the parcelable
425// in order to work)
426aidl_interface {
427    name: "tests_transitive_parcel.a",
428    flags: ["-Werror"],
429    srcs: ["tests_transitive_parcel/a/*.aidl"],
430    imports: [
431        "tests_transitive_parcel.b",
432        "tests_transitive_parcel.c",
433    ],
434    unstable: true,
435    backend: {
436        rust: {
437            enabled: true,
438        },
439    },
440}
441
442aidl_interface {
443    name: "tests_transitive_parcel.b",
444    flags: ["-Werror"],
445    srcs: ["tests_transitive_parcel/b/*.aidl"],
446    imports: ["tests_transitive_parcel.c"],
447    unstable: true,
448    backend: {
449        rust: {
450            enabled: true,
451        },
452    },
453}
454
455aidl_interface {
456    name: "tests_transitive_parcel.c",
457    flags: ["-Werror"],
458    srcs: ["tests_transitive_parcel/c/*.aidl"],
459    unstable: true,
460    backend: {
461        rust: {
462            enabled: true,
463        },
464    },
465}
466
467sh_binary {
468    name: "aidl_hash_gen",
469    src: "hash_gen.sh",
470    host_supported: true,
471}
472
473python_binary_host {
474    name: "aidl_rust_glue",
475    srcs: ["aidl_rust_glue.py"],
476    main: "aidl_rust_glue.py",
477}
478