#!/bin/bash declare -A dpi_aapt_map dpi_aapt_map["ldpi"]="120" dpi_aapt_map["140dpi"]="140" dpi_aapt_map["mdpi"]="160" dpi_aapt_map["180dpi"]="180" dpi_aapt_map["200dpi"]="200" dpi_aapt_map["tvdpi"]="213" dpi_aapt_map["220dpi"]="220" dpi_aapt_map["hdpi"]="240" dpi_aapt_map["280dpi"]="280" dpi_aapt_map["xhdpi"]="320" dpi_aapt_map["360dpi"]="360" dpi_aapt_map["400dpi"]="400" dpi_aapt_map["420dpi"]="420" dpi_aapt_map["xxhdpi"]="480" dpi_aapt_map["560dpi"]="560" dpi_aapt_map["xxxhdpi"]="640" #IS_GO_BUILD=`get_build_var BUILD_WITH_GO_OPT` KERNEL_PATH=`get_build_var PRODUCT_KERNEL_PATH` if [[ $KERNEL_PATH =~ "kernel" ]] ; then log "kernel path: $KERNEL_PATH" else KERNEL_PATH=kernel log "kernel path: $KERNEL_PATH" fi # $1 var # $2 value # $3 msg to display # Color: red for failed, green for pass assert_env_value() { RET=`get_build_var $1` if [ $2 = "$RET" ] ; then echo -e "\033[32m [Pass] \033[0m \t\"$1\" Check OK!" else echo -e "\033[31m [Failed] \033[0m \t$1 Check Failed! Expect \"$2\", But was \"$RET\"" echo -e "\033[31m \"$3\" \033[0m" fi } # $1 config to be checked # $2 file to be checked # $3 msg to display assert_config_in_file() { RET=`grep -c "$1" $2` if [ "1" = "$RET" ] ; then echo -e "\033[32m [Pass] \033[0m \t\"$1\" Check OK!" else echo -e "\033[31m [Failed] \033[0m \t\"$1\" Check Failed! Expect \"$1\"" echo -e "\033[31m \"$3\" \033[0m" fi } # $1 value # $2 string assert_value_in_string() { if [[ "$2" =~ "$1" ]] ; then echo -e "\033[32m [Pass] \033[0m \t\"$1\" Check OK!" else echo -e "\033[31m [Failed] \033[0m \t\"$1\" Check Failed! Expect \"$1\" FOUND, But was $2" echo -e "\033[31m \"$3\" \033[0m" fi } # $1 value # $2 string assert_value_not_in_string() { if [[ "$2" =~ "$1" ]] ; then echo -e "\033[31m [Failed] \033[0m \t\"$1\" Check Failed! Expect \"$1\" NOT FOUND, But was FOUND" echo -e "\033[31m \"$3\" \033[0m" else echo -e "\033[32m [Pass] \033[0m \t\"$1\" Check OK!" fi } log() { echo $1 } check_GO_config() { assert_config_in_file "RGA2G" $KERNEL_PATH/drivers/video/rockchip/rga2/Kconfig } check_kernel_config() { assert_config_in_file "clang version" $KERNEL_PATH/.config "Kernel MUST be compiled with clang." assert_config_in_file "CONFIG_ANDROID_BINDERFS=y" $KERNEL_PATH/.config "Did you compile the kernel with android-13.config?" assert_config_in_file "# CONFIG_DEBUG_FS is not set" $KERNEL_PATH/.config "Did you compile the kernel with non_debuggable.config?" } check_widevine() { log "Checking widevine..." assert_env_value BOARD_WIDEVINE_OEMCRYPTO_LEVEL 3 "GMS builds require a widevine level of at least L3." } check_EEA_type() { log "Checking EEA..." assert_env_value BUILD_WITH_EEA "" "If you do not have an EEA license, you should not enable EEA." } check_GMS_BUNDLE() { log "Checking base var..." assert_env_value BUILD_WITH_GOOGLE_MARKET true "Core var should be enabled." assert_env_value BUILD_WITH_GOOGLE_MARKET_ALL false "WIFI-Only device should not enable this Var." assert_env_value BUILD_WITH_GOOGLE_GMS_EXPRESS true "We recommend that you use GMS Express." # Do not need this from now # assert_env_value PRODUCT_HAVE_RKAPPS false "Do not enable this on user build." assert_env_value BUILD_WITH_GOOGLE_FRP true "Frp MUST be enabled." } check_OPTEE() { log "Checking Optee..." assert_env_value PRODUCT_HAVE_OPTEE true "Optee MUST be enabled." } check_AB_AVB() { log "Checking avb..." assert_env_value BOARD_AVB_ENABLE true "AVB MUST be enabled." assert_env_value BOARD_USES_AB_IMAGE true "Android 11+ MUST enable A/B update." assert_env_value BOARD_ROCKCHIP_VIRTUAL_AB_ENABLE true "Android 11+ MUST enable virtual A/B update." } check_Uboot() { assert_config_in_file "CONFIG_ANDROID_AB=y" u-boot/.config "Android 11+ MUST enable A/B update." assert_config_in_file "CONFIG_ANDROID_WRITE_KEYBOX=y" u-boot/.config "Attestation key MUST be enabled." assert_config_in_file "CONFIG_ANDROID_KEYMASTER_CA=y" u-boot/.config "Keymaster in uboot MUST be enabled." assert_config_in_file "CONFIG_OPTEE_CLIENT=y" u-boot/.config "Optee MUST be enabled." assert_config_in_file "CONFIG_OPTEE_ALWAYS_USE_SECURITY_PARTITION=y" u-boot/.config "Security partition MUST be enabled." } check_SELINUX() { log "Checking SELinux..." assert_env_value BOARD_SELINUX_ENFORCING true "SELinux MUST be enabled." TMP_CMDLINE=`get_build_var BOARD_KERNEL_CMDLINE` assert_value_not_in_string "androidboot.selinux=permissive" "$TMP_CMDLINE" "androidboot.selinux=permissive MUST NOT in cmdline, check BOARD_KERNEL_CMDLINE." } check_AAPT_CONFIG() { log "Checking aapt and dpi config..." AAPT_PERF=`get_build_var PRODUCT_AAPT_PREF_CONFIG` RET_AAPT_LIST=`grep -r PRODUCT_AAPT_CONFIG device/rockchip/common/device.mk` assert_value_in_string $AAPT_PERF $RET_AAPT_LIST "$AAPT_PERF not in PRODUCT_AAPT_CONFIG list, please add $AAPT_PERF to list." TMP_DPI="ro.sf.lcd_density=${dpi_aapt_map["$AAPT_PERF"]}" define_api=`grep ro.sf.lcd_density $OUT/vendor/build.prop` assert_value_in_string $TMP_DPI $define_api "ro.sf.lcd_density MUST correspond to PRODUCT_AAPT_PREF_CONFIG, please set property to $TMP_DPI or change PRODUCT_AAPT_PREF_CONFIG" } check_GKI_enabled() { log "Checking GKI enabled or not..." assert_env_value BOARD_BUILD_GKI true "GKI MUST be enabled on kernel 5.10+" assert_env_value BOARD_BOOT_HEADER_VERSION 4 "Boot header MUST be 4 on kernel 5.10+" assert_config_in_file "CONFIG_XBC=y" u-boot/.config "XBC MUST be enabled on GKI." assert_env_value BOARD_ROCKCHIP_VIRTUAL_AB_COMPRESSION true "Virtual A/B compression MUST be enabled on GKI." assert_env_value BOARD_BOOTIMAGE_PARTITION_SIZE 67108864 "Boot partition size MUST be 64M on GKI." } check_gralloc_version() { log "Checking gralloc version..." assert_env_value TARGET_RK_GRALLOC_AIDL true "Gralloc AIDL MUST be enabled on Android 13+" } check_userdata_format() { log "Checking userdata format..." FSTAB_FILE=`get_build_var PRODUCT_FSTAB_TEMPLATE` assert_env_value BOARD_USERDATAIMAGE_FILE_SYSTEM_TYPE f2fs "f2fs MUST be enabled on Android 10+, only f2fs supports Apex updates." } check_Uboot # Should not check this on GKI # check_kernel_config # May use L1 # check_widevine #check_EEA_type check_GMS_BUNDLE check_OPTEE check_AB_AVB check_GKI_enabled check_gralloc_version check_userdata_format check_SELINUX check_AAPT_CONFIG