1#
2# Copyright (C) 2017 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#
16
17# Include all languages
18$(call inherit-product, $(SRC_TARGET_DIR)/product/languages_full.mk)
19
20# Enable updating of APEXes
21$(call inherit-product, $(SRC_TARGET_DIR)/product/updatable_apex.mk)
22
23# Enable userspace reboot
24$(call inherit-product, $(SRC_TARGET_DIR)/product/userspace_reboot.mk)
25
26# Enforce generic ramdisk allow list
27$(call inherit-product, $(SRC_TARGET_DIR)/product/generic_ramdisk.mk)
28
29# Set Vendor SPL to match platform
30VENDOR_SECURITY_PATCH = $(PLATFORM_SECURITY_PATCH)
31
32# Set boot SPL
33BOOT_SECURITY_PATCH = $(PLATFORM_SECURITY_PATCH)
34
35PRODUCT_VENDOR_PROPERTIES += \
36    ro.vendor.boot_security_patch=$(BOOT_SECURITY_PATCH)
37
38PRODUCT_SOONG_NAMESPACES += device/generic/goldfish # for audio, wifi and sensors
39
40PRODUCT_USE_DYNAMIC_PARTITIONS := true
41DISABLE_RILD_OEM_HOOK := true
42# For customize cflags for libril share library building by soong.
43$(call soong_config_set,ril,disable_rild_oem_hook,true)
44
45# TODO(b/294888357) Remove this condition when OpenWRT is supported for RISC-V.
46ifndef PRODUCT_ENFORCE_MAC80211_HWSIM
47PRODUCT_ENFORCE_MAC80211_HWSIM := true
48endif
49
50PRODUCT_SET_DEBUGFS_RESTRICTIONS := true
51
52PRODUCT_FS_COMPRESSION := 1
53TARGET_RO_FILE_SYSTEM_TYPE ?= erofs
54BOARD_EROFS_COMPRESS_HINTS := device/google/cuttlefish/shared/erofs_compress_hints.txt
55TARGET_USERDATAIMAGE_FILE_SYSTEM_TYPE ?= f2fs
56TARGET_USERDATAIMAGE_PARTITION_SIZE ?= 8589934592
57
58TARGET_VULKAN_SUPPORT ?= true
59
60# Enable Virtual A/B
61$(call inherit-product, $(SRC_TARGET_DIR)/product/virtual_ab_ota/vabc_features.mk)
62PRODUCT_VIRTUAL_AB_COMPRESSION_METHOD := lz4
63PRODUCT_VIRTUAL_AB_COW_VERSION := 3
64PRODUCT_VIRTUAL_AB_COMPRESSION_FACTOR := 65536
65
66PRODUCT_VENDOR_PROPERTIES += ro.virtual_ab.compression.threads=true
67PRODUCT_VENDOR_PROPERTIES += ro.virtual_ab.batch_writes=true
68
69# Enable Scoped Storage related
70$(call inherit-product, $(SRC_TARGET_DIR)/product/emulated_storage.mk)
71
72# Properties that are not vendor-specific. These will go in the product
73# partition, instead of the vendor partition, and do not need vendor
74# sepolicy
75PRODUCT_PRODUCT_PROPERTIES += \
76    remote_provisioning.hostname=staging-remoteprovisioning.sandbox.googleapis.com \
77    persist.adb.tcp.port=5555 \
78    ro.com.google.locationfeatures=1 \
79    persist.sys.fuse.passthrough.enable=true \
80    remote_provisioning.tee.rkp_only=1
81
82# Until we support adb keys on user builds, and fix logcat over serial,
83# spawn adbd by default without authorization for "adb logcat"
84ifeq ($(TARGET_BUILD_VARIANT),user)
85PRODUCT_PRODUCT_PROPERTIES += \
86    ro.adb.secure=0 \
87    ro.debuggable=1
88
89PRODUCT_PACKAGES += \
90    logpersist.start
91
92PRODUCT_ARTIFACT_PATH_REQUIREMENT_ALLOWED_LIST += \
93    $(TARGET_COPY_OUT_SYSTEM)/bin/logcatd \
94    $(TARGET_COPY_OUT_SYSTEM)/bin/logpersist.cat \
95    $(TARGET_COPY_OUT_SYSTEM)/bin/logpersist.start \
96    $(TARGET_COPY_OUT_SYSTEM)/bin/logpersist.stop \
97    $(TARGET_COPY_OUT_SYSTEM)/etc/init/logcatd.rc
98endif
99
100# Use AIDL for media.c2 HAL
101PRODUCT_VENDOR_PROPERTIES += media.c2.hal.selection=aidl
102
103# Explanation of specific properties:
104#   ro.hardware.keystore_desede=true needed for CtsKeystoreTestCases
105PRODUCT_VENDOR_PROPERTIES += \
106    tombstoned.max_tombstone_count=100 \
107    ro.carrier=unknown \
108    ro.com.android.dataroaming?=false \
109    ro.hardware.virtual_device=1 \
110    ro.logd.size=1M \
111    wifi.interface=wlan0 \
112    wifi.direct.interface=p2p-dev-wlan0 \
113    persist.sys.zram_enabled=1 \
114    ro.hardware.keystore_desede=true \
115    ro.incremental.enable=1 \
116    debug.c2.use_dmabufheaps=1
117
118# Below is a list of properties we probably should get rid of.
119PRODUCT_VENDOR_PROPERTIES += \
120    wlan.driver.status=ok
121
122PRODUCT_VENDOR_PROPERTIES += \
123    debug.stagefright.c2inputsurface=-1
124
125# Enforce privapp permissions control.
126PRODUCT_VENDOR_PROPERTIES += ro.control_privapp_permissions?=enforce
127
128# Copy preopted files from system_b on first boot
129PRODUCT_VENDOR_PROPERTIES += ro.cp_system_other_odex=1
130
131AB_OTA_POSTINSTALL_CONFIG += \
132    RUN_POSTINSTALL_system=true \
133    POSTINSTALL_PATH_system=system/bin/otapreopt_script \
134    FILESYSTEM_TYPE_system=erofs \
135    POSTINSTALL_OPTIONAL_system=true
136
137AB_OTA_POSTINSTALL_CONFIG += \
138    RUN_POSTINSTALL_vendor=true \
139    POSTINSTALL_PATH_vendor=bin/checkpoint_gc \
140    FILESYSTEM_TYPE_vendor=erofs \
141    POSTINSTALL_OPTIONAL_vendor=true
142
143# Userdata Checkpointing OTA GC
144PRODUCT_PACKAGES += \
145    checkpoint_gc
146
147# DRM service opt-in
148PRODUCT_VENDOR_PROPERTIES += drm.service.enabled=true
149
150# Call deleteAllKeys if vold detects a factory reset
151PRODUCT_VENDOR_PROPERTIES += ro.crypto.metadata_init_delete_all_keys.enabled=true
152
153#
154# Packages for various GCE-specific utilities
155#
156PRODUCT_PACKAGES += \
157    CuttlefishService \
158    socket_vsock_proxy \
159    tombstone_transmit \
160    tombstone_producer \
161    suspend_blocker \
162    metrics_helper \
163    snapshot_hook_post_resume \
164    snapshot_hook_pre_suspend
165
166$(call soong_config_append,cvd,launch_configs,cvd_config_auto.json cvd_config_auto_portrait.json cvd_config_auto_md.json cvd_config_foldable.json cvd_config_go.json cvd_config_phone.json cvd_config_slim.json cvd_config_tablet.json cvd_config_tv.json cvd_config_wear.json)
167$(call soong_config_append,cvd,grub_config,grub.cfg)
168
169#
170# Packages for AOSP-available stuff we use from the framework
171#
172PRODUCT_PACKAGES += \
173    e2fsck \
174    ip \
175    sleep \
176    tcpdump \
177    wificond \
178
179#
180# Package for AOSP QNS
181#
182PRODUCT_PACKAGES += \
183    QualifiedNetworksService
184
185#
186# Package for AOSP GBA
187#
188PRODUCT_PACKAGES += \
189    GbaService
190
191#
192# Packages for testing
193#
194PRODUCT_PACKAGES += \
195    aidl_lazy_test_server \
196    aidl_lazy_cb_test_server \
197
198# Runtime Resource Overlays
199PRODUCT_PACKAGES += \
200    cuttlefish_overlay_connectivity \
201    cuttlefish_overlay_frameworks_base_core \
202    cuttlefish_overlay_nfc \
203    cuttlefish_overlay_settings_provider \
204    cuttlefish_overlay_uwb \
205
206#
207# Satellite vendor service for CF
208#
209PRODUCT_PACKAGES += CFSatelliteService
210
211# PRODUCT_AAPT_CONFIG and PRODUCT_AAPT_PREF_CONFIG are intentionally not set to
212# pick up every density resources.
213
214#
215# Common manifest for all targets
216#
217
218ifeq ($(RELEASE_AIDL_USE_UNFROZEN),true)
219PRODUCT_SHIPPING_API_LEVEL := 36
220LOCAL_DEVICE_FCM_MANIFEST_FILE ?= device/google/cuttlefish/shared/config/manifest.xml
221else
222PRODUCT_SHIPPING_API_LEVEL := 35
223LOCAL_DEVICE_FCM_MANIFEST_FILE ?= device/google/cuttlefish/shared/config/previous_manifest.xml
224endif
225DEVICE_MANIFEST_FILE += $(LOCAL_DEVICE_FCM_MANIFEST_FILE)
226
227PRODUCT_CHECK_PREBUILT_MAX_PAGE_SIZE := true
228
229#
230# General files
231#
232
233PRODUCT_COPY_FILES += \
234    device/google/cuttlefish/shared/config/init.product.rc:$(TARGET_COPY_OUT_PRODUCT)/etc/init/init.rc \
235    device/google/cuttlefish/shared/config/init.vendor.rc:$(TARGET_COPY_OUT_VENDOR)/etc/init/init.cutf_cvm.rc \
236    device/google/cuttlefish/shared/config/media_codecs_google_video.xml:$(TARGET_COPY_OUT_VENDOR)/etc/media_codecs_google_video.xml \
237    device/google/cuttlefish/shared/config/media_codecs_performance.xml:$(TARGET_COPY_OUT_VENDOR)/etc/media_codecs_performance.xml \
238    device/google/cuttlefish/shared/config/media_codecs.xml:$(TARGET_COPY_OUT_VENDOR)/etc/media_codecs.xml \
239    device/google/cuttlefish/shared/config/media_profiles.xml:$(TARGET_COPY_OUT_VENDOR)/etc/media_profiles_V1_0.xml \
240    device/google/cuttlefish/shared/config/media_profiles.xml:$(TARGET_COPY_OUT_VENDOR)/etc/media_profiles_vendor.xml \
241    device/google/cuttlefish/shared/config/seriallogging.rc:$(TARGET_COPY_OUT_VENDOR)/etc/init/seriallogging.rc \
242    device/google/cuttlefish/shared/config/ueventd.rc:$(TARGET_COPY_OUT_VENDOR)/etc/ueventd.rc \
243    device/google/cuttlefish/shared/permissions/privapp-permissions-cuttlefish.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/privapp-permissions-cuttlefish.xml \
244    frameworks/av/media/libeffects/data/audio_effects.xml:$(TARGET_COPY_OUT_VENDOR)/etc/audio_effects.xml \
245    frameworks/av/media/libstagefright/data/media_codecs_google_audio.xml:$(TARGET_COPY_OUT_VENDOR)/etc/media_codecs_google_audio.xml \
246    frameworks/av/media/libstagefright/data/media_codecs_google_telephony.xml:$(TARGET_COPY_OUT_VENDOR)/etc/media_codecs_google_telephony.xml \
247    frameworks/av/services/audiopolicy/config/audio_policy_volumes.xml:$(TARGET_COPY_OUT_VENDOR)/etc/audio_policy_volumes.xml \
248    frameworks/av/services/audiopolicy/config/default_volume_tables.xml:$(TARGET_COPY_OUT_VENDOR)/etc/default_volume_tables.xml \
249    frameworks/av/services/audiopolicy/config/r_submix_audio_policy_configuration.xml:$(TARGET_COPY_OUT_VENDOR)/etc/r_submix_audio_policy_configuration.xml \
250    frameworks/av/services/audiopolicy/config/surround_sound_configuration_5_0.xml:$(TARGET_COPY_OUT_VENDOR)/etc/surround_sound_configuration_5_0.xml \
251    frameworks/av/services/audiopolicy/config/usb_audio_policy_configuration.xml:$(TARGET_COPY_OUT_VENDOR)/etc/usb_audio_policy_configuration.xml \
252    frameworks/native/data/etc/android.hardware.ethernet.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.ethernet.xml \
253    frameworks/native/data/etc/android.hardware.usb.accessory.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.usb.accessory.xml \
254    frameworks/native/data/etc/android.hardware.usb.host.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.usb.host.xml \
255    frameworks/native/data/etc/android.hardware.uwb.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.uwb.xml \
256    frameworks/native/data/etc/android.hardware.wifi.direct.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.wifi.direct.xml \
257    frameworks/native/data/etc/android.hardware.wifi.passpoint.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.wifi.passpoint.xml \
258    frameworks/native/data/etc/android.hardware.wifi.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.wifi.xml \
259    frameworks/native/data/etc/android.software.credentials.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.software.credentials.xml \
260    frameworks/native/data/etc/android.software.ipsec_tunnels.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.software.ipsec_tunnels.xml \
261    frameworks/native/data/etc/android.software.verified_boot.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.software.verified_boot.xml \
262
263#
264# Device input config
265# Install .kcm/.kl/.idc files via input.config apex
266#
267PRODUCT_PACKAGES += com.google.cf.input.config
268
269PRODUCT_PACKAGES += \
270    fstab.cf.f2fs.hctr2 \
271    fstab.cf.f2fs.hctr2.vendor_ramdisk \
272    fstab.cf.f2fs.cts \
273    fstab.cf.f2fs.cts.vendor_ramdisk \
274    fstab.cf.ext4.hctr2 \
275    fstab.cf.ext4.hctr2.vendor_ramdisk \
276    fstab.cf.ext4.cts \
277    fstab.cf.ext4.cts.vendor_ramdisk \
278
279# Packages for HAL implementations
280
281# TODO(b/218588089) remove this once cuttlefish can drop HIDL.
282# This adds hwservicemanager and the allocator service to the device.
283PRODUCT_PACKAGES += \
284    hwservicemanager \
285    android.hidl.allocator@1.0-service
286
287#
288# Weaver aidl HAL
289#
290# TODO(b/262418065) Add a real weaver implementation
291
292
293#
294# Authsecret AIDL HAL
295#
296PRODUCT_PACKAGES += \
297    com.android.hardware.authsecret
298
299ifndef LOCAL_AUDIO_PRODUCT_PACKAGE
300#
301# Still use HIDL Audio HAL on 'next'
302#
303LOCAL_AUDIO_PRODUCT_PACKAGE += \
304    android.hardware.audio.parameter_parser.example_service \
305    com.android.hardware.audio
306PRODUCT_SYSTEM_EXT_PROPERTIES += \
307    ro.audio.ihaladaptervendorextension_enabled=true
308endif
309
310ifndef LOCAL_AUDIO_PRODUCT_COPY_FILES
311LOCAL_AUDIO_PRODUCT_COPY_FILES := \
312    device/google/cuttlefish/shared/config/audio/policy/audio_policy_configuration.xml:$(TARGET_COPY_OUT_VENDOR)/etc/audio_policy_configuration.xml \
313    device/google/cuttlefish/shared/config/audio/policy/primary_audio_policy_configuration.xml:$(TARGET_COPY_OUT_VENDOR)/etc/primary_audio_policy_configuration.xml \
314    frameworks/av/services/audiopolicy/config/r_submix_audio_policy_configuration.xml:$(TARGET_COPY_OUT_VENDOR)/etc/r_submix_audio_policy_configuration.xml \
315    frameworks/av/services/audiopolicy/config/audio_policy_volumes.xml:$(TARGET_COPY_OUT_VENDOR)/etc/audio_policy_volumes.xml \
316    frameworks/av/services/audiopolicy/config/default_volume_tables.xml:$(TARGET_COPY_OUT_VENDOR)/etc/default_volume_tables.xml
317LOCAL_AUDIO_PRODUCT_COPY_FILES += \
318    hardware/interfaces/audio/aidl/default/audio_effects_config.xml:$(TARGET_COPY_OUT_VENDOR)/etc/audio_effects_config.xml
319endif
320
321PRODUCT_PACKAGES += $(LOCAL_AUDIO_PRODUCT_PACKAGE)
322PRODUCT_COPY_FILES += $(LOCAL_AUDIO_PRODUCT_COPY_FILES)
323DEVICE_PACKAGE_OVERLAYS += $(LOCAL_AUDIO_DEVICE_PACKAGE_OVERLAYS)
324
325#
326# Contexthub HAL
327#
328LOCAL_CONTEXTHUB_PRODUCT_PACKAGE ?= \
329    com.android.hardware.contexthub
330PRODUCT_PACKAGES += $(LOCAL_CONTEXTHUB_PRODUCT_PACKAGE)
331
332#
333# Drm HAL
334#
335ifeq ($(TARGET_USE_LAZY_CLEARKEY),true)
336PRODUCT_PACKAGES += \
337    com.android.hardware.drm.clearkey.lazy
338else
339PRODUCT_PACKAGES += \
340    android.hardware.drm@latest-service.clearkey
341endif
342
343LOCAL_ENABLE_WIDEVINE ?= true
344ifeq ($(LOCAL_ENABLE_WIDEVINE),true)
345-include vendor/widevine/libwvdrmengine/apex/device/device.mk
346endif
347
348#
349# Confirmation UI HAL
350#
351ifeq ($(LOCAL_CONFIRMATIONUI_PRODUCT_PACKAGE),)
352    LOCAL_CONFIRMATIONUI_PRODUCT_PACKAGE := com.google.cf.confirmationui
353endif
354PRODUCT_PACKAGES += $(LOCAL_CONFIRMATIONUI_PRODUCT_PACKAGE)
355
356#
357# Dumpstate HAL
358#
359ifeq ($(LOCAL_DUMPSTATE_PRODUCT_PACKAGE),)
360    LOCAL_DUMPSTATE_PRODUCT_PACKAGE += com.android.hardware.dumpstate
361endif
362PRODUCT_PACKAGES += $(LOCAL_DUMPSTATE_PRODUCT_PACKAGE)
363
364#
365# Gatekeeper
366#
367PRODUCT_PACKAGES += \
368  com.android.hardware.gatekeeper.cf_remote \
369  com.android.hardware.gatekeeper.nonsecure \
370
371#
372# Oemlock
373#
374LOCAL_ENABLE_OEMLOCK ?= true
375ifeq ($(LOCAL_ENABLE_OEMLOCK),true)
376ifeq ($(LOCAL_OEMLOCK_PRODUCT_PACKAGE),)
377    LOCAL_OEMLOCK_PRODUCT_PACKAGE := com.google.cf.oemlock
378endif
379PRODUCT_PACKAGES += \
380    $(LOCAL_OEMLOCK_PRODUCT_PACKAGE)
381
382PRODUCT_VENDOR_PROPERTIES += ro.oem_unlock_supported=1
383endif
384
385# Health
386ifeq ($(LOCAL_HEALTH_PRODUCT_PACKAGE),)
387    LOCAL_HEALTH_PRODUCT_PACKAGE := \
388    com.google.cf.health \
389    android.hardware.health-service.cuttlefish_recovery \
390
391endif
392PRODUCT_PACKAGES += $(LOCAL_HEALTH_PRODUCT_PACKAGE)
393
394# Health Storage
395PRODUCT_PACKAGES += \
396    com.google.cf.health.storage
397
398PRODUCT_PACKAGES += \
399    com.android.hardware.input.processor
400
401# Netlink Interceptor HAL
402PRODUCT_PACKAGES += \
403    com.android.hardware.net.nlinterceptor
404
405#
406# Lights
407#
408LOCAL_ENABLE_LIGHT ?= true
409ifeq ($(LOCAL_ENABLE_LIGHT),true)
410PRODUCT_PACKAGES += \
411    com.google.cf.light \
412
413endif
414
415#
416# Trusty VM for Keymint and Gatekeeper HAL
417#
418ifeq ($(RELEASE_AVF_ENABLE_EARLY_VM),true)
419  TRUSTY_KEYMINT_IMPL ?= rust
420  TRUSTY_SYSTEM_VM ?= nonsecure
421endif
422ifeq ($(TRUSTY_SYSTEM_VM),nonsecure)
423    $(call inherit-product, system/core/trusty/keymint/trusty-keymint.mk)
424    $(call inherit-product, system/core/trusty/trusty-storage-cf.mk)
425    PRODUCT_PACKAGES += \
426        lk_trusty.elf \
427        trusty_security_vm_launcher \
428        early_vms.xml \
429        cf-trusty_security_vm_launcher.rc \
430        lk_trusty.elf \
431        trusty-ut-ctrl.system \
432
433endif
434
435#
436# KeyMint HAL
437#
438PRODUCT_PACKAGES += \
439	com.android.hardware.keymint.rust_cf_remote \
440	com.android.hardware.keymint.rust_nonsecure \
441	com.android.hardware.keymint.rust_cf_guest_trusty_nonsecure \
442
443# Indicate that KeyMint includes support for the ATTEST_KEY key purpose.
444PRODUCT_COPY_FILES += \
445    frameworks/native/data/etc/android.hardware.keystore.app_attest_key.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.keystore.app_attest_key.xml
446# Indicate that KeyMint includes (emulated) support for device ID attestation.
447PRODUCT_COPY_FILES += \
448    frameworks/native/data/etc/android.software.device_id_attestation.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.software.device_id_attestation.xml
449
450#
451# Non-secure implementation of AuthGraph HAL for compliance.
452#
453PRODUCT_PACKAGES += \
454    com.android.hardware.security.authgraph
455
456#
457# Non-secure implementation of Secretkeeper HAL for compliance.
458#
459PRODUCT_PACKAGES += \
460    com.android.hardware.security.secretkeeper
461
462#
463# Power and PowerStats HALs
464#
465PRODUCT_PACKAGES += com.android.hardware.power
466
467#
468# Tetheroffload HAL
469#
470PRODUCT_PACKAGES += \
471    com.android.hardware.tetheroffload
472
473#
474# Thermal HAL
475#
476LOCAL_THERMAL_HAL_PRODUCT_PACKAGE ?= com.android.hardware.thermal
477PRODUCT_PACKAGES += $(LOCAL_THERMAL_HAL_PRODUCT_PACKAGE)
478
479#
480# NeuralNetworks HAL
481#
482PRODUCT_PACKAGES += \
483    com.android.hardware.neuralnetworks
484
485# USB
486PRODUCT_PACKAGES += \
487    com.android.hardware.usb
488
489# BootControl HAL
490PRODUCT_PACKAGES += \
491    com.android.hardware.boot \
492    android.hardware.boot-service.default_recovery
493
494
495# Memtrack HAL
496PRODUCT_PACKAGES += \
497    com.android.hardware.memtrack
498
499# Fastboot HAL & fastbootd
500PRODUCT_PACKAGES += \
501    android.hardware.fastboot@1.1-impl-mock \
502    fastbootd
503
504# Recovery mode
505ifneq ($(TARGET_NO_RECOVERY),true)
506
507PRODUCT_COPY_FILES += \
508    device/google/cuttlefish/shared/config/init.recovery.rc:$(TARGET_COPY_OUT_RECOVERY)/root/init.recovery.cutf_cvm.rc \
509    device/google/cuttlefish/shared/config/cgroups.json:$(TARGET_COPY_OUT_RECOVERY)/root/vendor/etc/cgroups.json \
510    device/google/cuttlefish/shared/config/ueventd.rc:$(TARGET_COPY_OUT_RECOVERY)/root/ueventd.cutf_cvm.rc \
511
512PRODUCT_PACKAGES += \
513    update_engine_sideload
514
515endif
516
517ifdef TARGET_DEDICATED_RECOVERY
518PRODUCT_BUILD_RECOVERY_IMAGE := true
519PRODUCT_PACKAGES += linker.vendor_ramdisk shell_and_utilities_vendor_ramdisk
520else
521PRODUCT_PACKAGES += linker.recovery shell_and_utilities_recovery
522endif
523
524# wifi
525# Add com.android.hardware.wifi for android.hardware.wifi-service
526PRODUCT_PACKAGES += com.android.hardware.wifi
527# Add com.google.cf.wifi and com.google.cf.wpa_supplicant for hostapd and wpa_supplicant
528PRODUCT_PACKAGES += com.google.cf.wifi
529PRODUCT_PACKAGES += com.google.cf.wpa_supplicant
530$(call add_soong_config_namespace, wpa_supplicant)
531$(call add_soong_config_var_value, wpa_supplicant, platform_version, $(PLATFORM_VERSION))
532$(call add_soong_config_var_value, wpa_supplicant, nl80211_driver, CONFIG_DRIVER_NL80211_QCA)
533
534# VirtWifi interface configuration
535ifeq ($(DEVICE_VIRTWIFI_PORT),)
536    DEVICE_VIRTWIFI_PORT := eth2
537endif
538PRODUCT_VENDOR_PROPERTIES += ro.vendor.virtwifi.port=${DEVICE_VIRTWIFI_PORT}
539
540# Wifi Runtime Resource Overlay
541PRODUCT_PACKAGES += \
542    CuttlefishTetheringOverlay \
543    CuttlefishWifiOverlay
544
545ifeq ($(PRODUCT_ENFORCE_MAC80211_HWSIM),true)
546PRODUCT_VENDOR_PROPERTIES += ro.vendor.wifi_impl=mac80211_hwsim_virtio
547$(call soong_config_append,cvdhost,enforce_mac80211_hwsim,true)
548else
549PRODUCT_VENDOR_PROPERTIES += ro.vendor.wifi_impl=virt_wifi
550endif
551
552# UWB HAL
553PRODUCT_PACKAGES += com.android.hardware.uwb
554PRODUCT_VENDOR_PROPERTIES += ro.vendor.uwb.dev=/dev/hvc9
555
556# Host packages to install
557PRODUCT_HOST_PACKAGES += socket_vsock_proxy
558
559#for Confirmation UI
560PRODUCT_SOONG_NAMESPACES += vendor/google_devices/common/proprietary/confirmatioui_hal
561
562# Need this so that the application's loop on reading input can be synchronized
563# with HW VSYNC
564PRODUCT_VENDOR_PROPERTIES += \
565    ro.surface_flinger.running_without_sync_framework=true
566
567# Enable GPU-intensive background blur support on Cuttlefish when requested by apps
568PRODUCT_VENDOR_PROPERTIES += \
569    ro.surface_flinger.supports_background_blur=1
570
571# Set Game Default Frame Rate
572# See b/286084594
573PRODUCT_DEFAULT_PROPERTY_OVERRIDES += \
574    ro.surface_flinger.game_default_frame_rate_override=60
575
576# Disable GPU-intensive background blur for widget picker
577PRODUCT_SYSTEM_PROPERTIES += \
578    ro.launcher.depth.widget=0
579
580# Start fingerprint virtual HAL process
581PRODUCT_VENDOR_PROPERTIES += ro.vendor.fingerprint_virtual_hal_start=true
582
583# Vendor Dlkm Locader
584PRODUCT_PACKAGES += \
585   dlkm_loader
586
587# CAS AIDL HAL
588PRODUCT_PACKAGES += \
589    com.android.hardware.cas
590
591PRODUCT_COPY_FILES += \
592    device/google/cuttlefish/shared/config/pci.ids:$(TARGET_COPY_OUT_VENDOR)/pci.ids
593
594# Thread Network AIDL HAL and Demo App
595PRODUCT_PACKAGES += \
596    com.android.hardware.threadnetwork \
597    ThreadNetworkDemoApp
598
599PRODUCT_CHECK_VENDOR_SEAPP_VIOLATIONS := true
600
601PRODUCT_CHECK_DEV_TYPE_VIOLATIONS := true
602
603TARGET_BOARD_FASTBOOT_INFO_FILE = device/google/cuttlefish/shared/fastboot-info.txt
604