1//
2// Copyright (C) 2020 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
16package {
17    default_applicable_licenses: ["Android-Apache-2.0"],
18}
19
20bootstrap_go_package {
21    name: "cuttlefish-soong-rules",
22    pkgPath: "android/soong/cuttlefish",
23    deps: [
24        "blueprint",
25        "soong",
26        "soong-android",
27    ],
28    srcs: [
29        "cvd-host-package.go",
30    ],
31    pluginFor: ["soong_build"],
32}
33
34// Allow cvd-host-package.go to read custom action config variables
35// from ctx.Config().VendorConfig("cvd")
36soong_config_module_type {
37    name: "cvd_host_package_customization",
38    module_type: "cvd_host_package",
39    config_namespace: "cvd",
40    value_variables: [
41        "custom_action_config",
42        "custom_action_servers",
43        "grub_config",
44        "launch_configs",
45    ],
46}
47
48// Start of generated qemu_aarch64_linux_gnu_binary
49// Generated by gen_android_bp.py
50qemu_aarch64_linux_gnu_binary = [
51    "aarch64_linux_gnu_libc++.so.1_binary_for_qemu",
52    "aarch64_linux_gnu_libc++abi.so.1_binary_for_qemu",
53    "aarch64_linux_gnu_libepoxy.so.0_binary_for_qemu",
54    "aarch64_linux_gnu_libgbm.so.1_binary_for_qemu",
55    "aarch64_linux_gnu_libgfxstream_backend.so.0_binary_for_qemu",
56    "aarch64_linux_gnu_librutabaga_gfx_ffi.so.0_binary_for_qemu",
57    "aarch64_linux_gnu_libunwind.so.1_binary_for_qemu",
58    "aarch64_linux_gnu_libvirglrenderer.so.1_binary_for_qemu",
59    "aarch64_linux_gnu_libz.so.1_binary_for_qemu",
60    "aarch64_linux_gnu_qemu-system-aarch64_binary_for_qemu",
61    "aarch64_linux_gnu_qemu-system-riscv64_binary_for_qemu",
62    "aarch64_linux_gnu_qemu-system-x86_64_binary_for_qemu",
63]
64// End of generated qemu_aarch64_linux_gnu_binary
65
66// Start of generated qemu_aarch64_linux_gnu_resource
67// Generated by gen_android_bp.py
68qemu_aarch64_linux_gnu_resource = [
69    "aarch64_efi-virtio.rom_resource_for_qemu",
70    "aarch64_en-us_resource_for_qemu",
71    "aarch64_opensbi-riscv64-generic-fw_dynamic.bin_resource_for_qemu",
72]
73// End of generated qemu_aarch64_linux_gnu_resource
74
75// Start of generated qemu_x86_64_linux_gnu_binary
76// Generated by gen_android_bp.py
77qemu_x86_64_linux_gnu_binary = [
78    "x86_64_linux_gnu_libc++.so.1_binary_for_qemu",
79    "x86_64_linux_gnu_libepoxy.so.0_binary_for_qemu",
80    "x86_64_linux_gnu_libgbm.so.1_binary_for_qemu",
81    "x86_64_linux_gnu_libgfxstream_backend.so.0_binary_for_qemu",
82    "x86_64_linux_gnu_librutabaga_gfx_ffi.so.0_binary_for_qemu",
83    "x86_64_linux_gnu_libvirglrenderer.so.1_binary_for_qemu",
84    "x86_64_linux_gnu_libz.so.1_binary_for_qemu",
85    "x86_64_linux_gnu_qemu-system-aarch64_binary_for_qemu",
86    "x86_64_linux_gnu_qemu-system-riscv64_binary_for_qemu",
87    "x86_64_linux_gnu_qemu-system-x86_64_binary_for_qemu",
88]
89// End of generated qemu_x86_64_linux_gnu_binary
90
91// Start of generated qemu_x86_64_linux_gnu_resource
92// Generated by gen_android_bp.py
93qemu_x86_64_linux_gnu_resource = [
94    "x86_64_efi-virtio.rom_resource_for_qemu",
95    "x86_64_en-us_resource_for_qemu",
96    "x86_64_opensbi-riscv64-generic-fw_dynamic.bin_resource_for_qemu",
97]
98// End of generated qemu_x86_64_linux_gnu_resource
99
100cvd_host_tools = [
101    "acloud_translator",
102    "adb",
103    "adb_connector",
104    "allocd_client",
105    "assemble_cvd",
106    "automotive_vsock_proxy",
107    "avbtool",
108    "build_super_image",
109    "casimir",
110    "casimir_control_server",
111    "common_crosvm",
112    "config_server",
113    "console_forwarder",
114    "control_env_proxy_server",
115    "crosvm",
116    "cvd_host_bugreport",
117    "cvd_import_locations",
118    "cvd_internal_display",
119    "cvd_internal_env",
120    "cvd_internal_host_bugreport",
121    "cvd_internal_start",
122    "cvd_internal_status",
123    "cvd_internal_stop",
124    "cvd_send_id_disclosure",
125    "cvd_send_sms",
126    "cvd_status",
127    "cvd_update_location",
128    "cvd_update_security_algorithm",
129    "cvdremote",
130    "e2fsdroid",
131    "echo_server",
132    "extract-ikconfig",
133    "extract-vmlinux",
134    "fastboot",
135    "fec",
136    "fsck.f2fs",
137    "gnss_grpc_proxy",
138    "health",
139    "kernel_log_monitor",
140    "launch_cvd",
141    "libgrpc++",
142    "libgrpc++_unsecure",
143    "log_tee",
144    "logcat_receiver",
145    "lpadd",
146    "lpmake",
147    "lpunpack",
148    "lz4",
149    "make_f2fs",
150    "mcopy",
151    "metrics",
152    "metrics_launcher",
153    "mkbootfs",
154    "mkbootimg",
155    "mke2fs",
156    "mkenvimage_slim",
157    "mkuserimg_mke2fs",
158    "mmd",
159    "modem_simulator",
160    "ms-tpm-20-ref",
161    "mtools",
162    "netsim",
163    "netsimd",
164    "newfs_msdos",
165    "openwrt_control_server",
166    "operator_proxy",
167    "pica",
168    "powerbtn_cvd",
169    "powerwash_cvd",
170    "process_restarter",
171    "process_sandboxer",
172    "record_cvd",
173    "restart_cvd",
174    "root-canal",
175    "run_cvd",
176    "sandboxer_proxy",
177    "screen_recording_server",
178    "secure_env",
179    "sefcontext_compile",
180    "simg2img",
181    "snapshot_util_cvd",
182    "socket_vsock_proxy",
183    "stop_cvd",
184    "tcp_connector",
185    "test_cvd_load_parser",
186    "tombstone_receiver",
187    "toybox",
188    "unpack_bootimg",
189    "vhal_proxy_server",
190    "vhost_device_vsock",
191    "vulkan.pastel",
192    "webRTC",
193    "webrtc_operator",
194    "wmediumd",
195    "wmediumd_gen_config",
196]
197
198cvd_openwrt_images = [
199    "openwrt_kernel_aarch64",
200    "openwrt_kernel_x86_64",
201    "openwrt_rootfs_aarch64",
202    "openwrt_rootfs_x86_64",
203]
204
205cvd_host_tests = [
206    "cuttlefish_net_tests",
207    "modem_simulator_test",
208]
209
210cvd_host_webrtc_assets = [
211    "webrtc_adb.js",
212    "webrtc_app.js",
213    "webrtc_cf.js",
214    "webrtc_client.html",
215    "webrtc_controls.css",
216    "webrtc_controls.js",
217    "webrtc_index.css",
218    "webrtc_index.html",
219    "webrtc_index.js",
220    "webrtc_location.js",
221    "webrtc_mouse.js",
222    "webrtc_rootcanal.js",
223    "webrtc_server.crt",
224    "webrtc_server.key",
225    "webrtc_server.p12",
226    "webrtc_server_connector.js",
227    "webrtc_style.css",
228    "webrtc_touch.js",
229    "webrtc_trusted.pem",
230]
231
232cvd_host_model_simulator_files = [
233    "iccprofile_for_sim0.xml_host",
234    "iccprofile_for_sim0_for_CtsCarrierApiTestCases.xml_host",
235    "numeric_operator.xml_host",
236]
237
238cvd_host_acloud_data = [
239    "default.config_host",
240]
241
242cvd_host_x86_64_crosvm = [
243    // Note: These should be uncommented out when backporting to older branches
244    // which only use the prebuilt and which do not build crosvm from source.
245    //"x86_64_linux_gnu_crosvm",
246    //"x86_64_linux_gnu_libdrm.so.2_for_crosvm",
247    //"x86_64_linux_gnu_libepoxy.so.0_for_crosvm",
248    //"x86_64_linux_gnu_libffi.so.7_for_crosvm",
249    //"x86_64_linux_gnu_libgbm.so.1_for_crosvm",
250    //"x86_64_linux_gnu_libgfxstream_backend.so_for_crosvm",
251    //"x86_64_linux_gnu_libminijail.so_for_crosvm",
252    //"x86_64_linux_gnu_libvirglrenderer.so.1_for_crosvm",
253    //"x86_64_linux_gnu_libwayland_client.so.0_for_crosvm",
254]
255
256// Note: these are prebuilts due to potential incompatibilities between Android
257// built host binaries and native host GPU libraries drivers.
258cvd_host_x86_64_graphics_detector = [
259    "x86_64_linux_gnu_gfxstream_graphics_detector_for_crosvm",
260]
261
262cvd_host_aarch64_graphics_detector = [
263    "aarch64_linux_gnu_gfxstream_graphics_detector_for_crosvm",
264]
265
266cvd_host_aarch64_swiftshader = [
267    "aarch64_linux_gnu_libvk_swiftshader.so",
268    "aarch64_linux_gnu_vk_swiftshader_icd.json",
269]
270
271cvd_host_x86_64 = cvd_host_x86_64_graphics_detector + cvd_host_x86_64_crosvm + qemu_x86_64_linux_gnu_binary
272
273cvd_host_aarch64_crosvm = [
274    "aarch64_linux_gnu_crosvm",
275    "aarch64_linux_gnu_libdrm.so.2_for_crosvm",
276    "aarch64_linux_gnu_libepoxy.so.0_for_crosvm",
277    "aarch64_linux_gnu_libffi.so.7_for_crosvm",
278    "aarch64_linux_gnu_libgbm.so.1_for_crosvm",
279    "aarch64_linux_gnu_libgfxstream_backend.so_for_crosvm",
280    "aarch64_linux_gnu_libminijail.so_for_crosvm",
281    "aarch64_linux_gnu_libvirglrenderer.so.1_for_crosvm",
282    "aarch64_linux_gnu_libwayland_client.so.0_for_crosvm",
283]
284
285cvd_host_aarch64 = cvd_host_aarch64_crosvm + cvd_host_aarch64_graphics_detector + qemu_aarch64_linux_gnu_binary + cvd_host_aarch64_swiftshader
286
287cvd_host_seccomp_policy_x86_64 = [
288    "9p_device.policy_x86_64",
289    "balloon_device.policy_x86_64",
290    "battery.policy_x86_64",
291    "block_device.policy_x86_64",
292    "block_device_vhost_user.policy_x86_64",
293    "coiommu_device.policy_x86_64",
294    "cras_audio_device.policy_x86_64",
295    "fs_device.policy_x86_64",
296    "fw_cfg_device.policy_x86_64",
297    "gpu_device.policy_x86_64",
298    "gpu_render_server.policy_x86_64",
299    "input_device.policy_x86_64",
300    "iommu_device.policy_x86_64",
301    "jail_warden.policy_x86_64",
302    "net_device.policy_x86_64",
303    "null_audio_device.policy_x86_64",
304    "pmem_device.policy_x86_64",
305    "rng_device.policy_x86_64",
306    "serial_device.policy_x86_64",
307    "serial_device_vhost_user.policy_x86_64",
308    "snd_cras_device.policy_x86_64",
309    "snd_null_device.policy_x86_64",
310    "vfio_device.policy_x86_64",
311    "vhost_net_device.policy_x86_64",
312    "vhost_vsock_device.policy_x86_64",
313    "video_device.policy_x86_64",
314    "vios_audio_device.policy_x86_64",
315    "vtpm_proxy_device.policy_x86_64",
316    "wl_device.policy_x86_64",
317    "xhci_device.policy_x86_64",
318]
319
320cvd_host_seccomp_policy_aarch64 = [
321    "9p_device.policy_aarch64",
322    "balloon_device.policy_aarch64",
323    "battery.policy_aarch64",
324    "block_device.policy_aarch64",
325    "coiommu_device.policy_aarch64",
326    "cras_audio_device.policy_aarch64",
327    "fs_device.policy_aarch64",
328    "gpu_device.policy_aarch64",
329    "gpu_render_server.policy_aarch64",
330    "input_device.policy_aarch64",
331    "net_device.policy_aarch64",
332    "null_audio_device.policy_aarch64",
333    "pmem_device.policy_aarch64",
334    "rng_device.policy_aarch64",
335    "serial_device.policy_aarch64",
336    "snd_cras_device.policy_aarch64",
337    "snd_null_device.policy_aarch64",
338    "vhost_net_device.policy_aarch64",
339    "vhost_scmi_device.policy_aarch64",
340    "vhost_vsock_device.policy_aarch64",
341    "video_device.policy_aarch64",
342    "vios_audio_device.policy_aarch64",
343    "wl_device.policy_aarch64",
344    "xhci_device.policy_aarch64",
345]
346
347cvd_host_bootloader = [
348    "bootloader_crosvm_aarch64",
349    "bootloader_crosvm_x86_64",
350    "bootloader_qemu_aarch64",
351    "bootloader_qemu_arm",
352    "bootloader_qemu_riscv64",
353    "bootloader_qemu_x86_64",
354]
355
356prebuilt_etc_host {
357    name: "cvd_avb_testkey_rsa2048",
358    filename: "cvd_avb_testkey_rsa2048.pem",
359    src: ":avb_testkey_rsa2048",
360}
361
362prebuilt_etc_host {
363    name: "cvd_avb_testkey_rsa4096",
364    filename: "cvd_avb_testkey_rsa4096.pem",
365    src: ":avb_testkey_rsa4096",
366}
367
368automotive_proxy_config = [
369    "automotive_proxy_config",
370]
371
372automotive_vhal_prop_configs = [
373    "Host_Prebuilt_VehicleHalDefaultProperties_JSON",
374    "Host_Prebuilt_VehicleHalTestProperties_JSON",
375    "Host_Prebuilt_VehicleHalVendorClusterTestProperties_JSON",
376]
377
378cvd_host_avb_testkey = [
379    "cvd_avb_pubkey_rsa2048",
380    "cvd_avb_pubkey_rsa4096",
381    "cvd_avb_testkey_rsa2048",
382    "cvd_avb_testkey_rsa4096",
383]
384
385cvd_host_netsim_gui_assets = [
386    "netsim_ui_assets_grid-background.svg",
387    "netsim_ui_assets_hexagonal-background.png",
388    "netsim_ui_assets_netsim-logo-b.svg",
389    "netsim_ui_assets_netsim-logo.svg",
390    "netsim_ui_assets_polar-background.svg",
391    "netsim_ui_index.html",
392    "netsim_ui_js_cube-sprite.js",
393    "netsim_ui_js_customize-map-button.js",
394    "netsim_ui_js_device-dragzone.js",
395    "netsim_ui_js_device-dropzone.js",
396    "netsim_ui_js_device-info.js",
397    "netsim_ui_js_device-list.js",
398    "netsim_ui_js_device-map.js",
399    "netsim_ui_js_device-observer.js",
400    "netsim_ui_js_license-info.js",
401    "netsim_ui_js_navigation-bar.js",
402    "netsim_ui_js_netsim-app.js",
403    "netsim_ui_js_packet-info.js",
404    "netsim_ui_js_pyramid-sprite.js",
405    "netsim_ui_tslib",
406]
407
408genrule {
409    name: "vk_swiftshader_icd.json",
410    srcs: [
411        "//external/swiftshader:swiftshader_icd_json_template",
412    ],
413    out: [
414        "vk_swiftshader_icd.json",
415    ],
416    // From Vulkan Loader documentation:
417    //
418    //   If "library_path" specifies a relative pathname, it is relative
419    //   to the path of the JSON manifest file.
420    //
421    // Our host package looks like:
422    //
423    //   <host package>/lib64/vulkan.pastel
424    //   <host package>/usr/share/vulkan/icd.d/vk_swiftshader_icd.json
425    //
426    // so need "../../../../lib64/vulkan.pastel".
427    cmd: "sed -e 's|$${ICD_LIBRARY_PATH}|../../../../lib64/vulkan.pastel.so|g' $(in) > $(out)",
428}
429
430prebuilt_usr_share_host {
431    name: "vk_swiftshader_icd_json_prebuilt",
432    filename: "vk_swiftshader_icd.json",
433    relative_install_path: "vulkan/icd.d",
434    src: ":vk_swiftshader_icd.json",
435}
436
437cvd_host_swiftshader_files = [
438    "vk_swiftshader_icd_json_prebuilt",
439]
440
441cvd_host_package_customization {
442    name: "cvd-host_package",
443    deps: cvd_host_tools +
444        cvd_host_tests,
445    multilib: {
446        common: {
447            deps: cvd_host_webrtc_assets +
448                cvd_host_avb_testkey +
449                cvd_host_model_simulator_files +
450                cvd_host_acloud_data +
451                cvd_host_bootloader +
452                cvd_host_swiftshader_files +
453                cvd_openwrt_images +
454                cvd_host_netsim_gui_assets +
455                automotive_proxy_config +
456                automotive_vhal_prop_configs,
457        },
458    },
459
460    arch: {
461        x86_64: {
462            deps: cvd_host_x86_64,
463            multilib: {
464                common: {
465                    deps: cvd_host_seccomp_policy_x86_64 + qemu_x86_64_linux_gnu_resource,
466                },
467            },
468        },
469        arm64: {
470            deps: cvd_host_aarch64,
471            multilib: {
472                common: {
473                    deps: cvd_host_seccomp_policy_aarch64 + qemu_aarch64_linux_gnu_resource,
474                },
475            },
476        },
477    },
478    target: {
479        linux_musl: {
480            multilib: {
481                common: {
482                    deps: ["tzdata_host"],
483                },
484            },
485        },
486        linux_bionic_x86_64: {
487            enabled: false,
488        },
489        darwin: {
490            enabled: false,
491        },
492    },
493}
494