diff --git a/init/Android.bp b/init/Android.bp deleted file mode 100644 index 4b95c9b..0000000 --- a/init/Android.bp +++ /dev/null @@ -1,23 +0,0 @@ -// -// Copyright (C) 2023 The LineageOS Project -// -// SPDX-License-Identifier: Apache-2.0 -// - -cc_library_static { - name: "init_stone", - srcs: ["init_stone.cpp"], - recovery_available: true, - whole_static_libs: ["libbase"], - include_dirs: [ - "system/core/init", - "system/libbase/include" - ] -} - -prebuilt_etc { - name: "init.xiaomi.rc", - src: "init.xiaomi.rc", - sub_dir: "init/hw", - vendor: true, -} diff --git a/init/init.xiaomi.rc b/init/init.xiaomi.rc deleted file mode 100644 index 9e38b35..0000000 --- a/init/init.xiaomi.rc +++ /dev/null @@ -1,103 +0,0 @@ -# -# Copyright (C) 2022 The LineageOS Project -# -# SPDX-License-Identifier: Apache-2.0 -# - -on early-boot - # SSR Setup - write /sys/bus/msm_subsys/devices/subsys0/restart_level RELATED - write /sys/bus/msm_subsys/devices/subsys1/restart_level RELATED - write /sys/bus/msm_subsys/devices/subsys2/restart_level RELATED - write /sys/bus/msm_subsys/devices/subsys3/restart_level RELATED - write /sys/bus/msm_subsys/devices/subsys4/restart_level RELATED - write /sys/bus/msm_subsys/devices/subsys5/restart_level RELATED - write /sys/bus/msm_subsys/devices/subsys6/restart_level RELATED - write /sys/bus/msm_subsys/devices/subsys7/restart_level RELATED - -on early-init - exec u:r:vendor_modprobe:s0 -- /vendor/bin/vendor_modprobe.sh - exec u:r:vendor_modprobe:s0 -- /vendor/bin/modprobe -a -d /vendor/lib/modules q6_pdr_dlkm q6_notifier_dlkm snd_event_dlkm apr_dlkm adsp_loader_dlkm q6_dlkm native_dlkm pinctrl_lpi_dlkm swr_dlkm platform_dlkm stub_dlkm wcd_core_dlkm wsa881x_analog_dlkm bolero_cdc_dlkm va_macro_dlkm rx_macro_dlkm tx_macro_dlkm bt_fm_slim wcd938x_dlkm wcd938x_slave_dlkm wcd937x_dlkm wcd937x_slave_dlkm sipa_dlkm machine_dlkm radio-i2c-rtc6226-qca cdsprm - exec u:r:vendor_qti_init_shell:s0 -- /vendor/bin/init.qti.early_init.sh - setprop ro.soc.model ${ro.vendor.qti.soc_model} - wait /sys/devices/soc0/soc_id - -on init - chmod 666 /sys/module/camera/drivers/platform:CAM-FLASH-DRIVER/5c1b000.qcom,cci0:qcom,camera-flash@0/ktd2691_flash - -# Fingerprint -on boot - #goodix fp - chmod 0666 /dev/goodix_fp - chown system system /dev/goodix_fp - mkdir /data/vendor/goodix 0777 system system - mkdir /data/vendor_de/0/goodix 0770 system system - - #fpc fingerprint - chown system system /sys/bus/platform/devices/soc:fpc1020/hw_reset - chown system system /sys/bus/platform/devices/soc:fpc1020/irq - chown system system /sys/bus/platform/devices/soc:fpc1020/wakeup_enable - chown system system /sys/bus/platform/devices/soc:fpc1020/regulator_enable - chown system system /sys/bus/platform/devices/soc:fpc1020/compatible_all - chown system system /sys/bus/platform/devices/soc:fpc1020/fingerdown_wait - - chmod 0644 /sys/bus/platform/devices/soc:fpc1020/hw_reset - chmod 0644 /sys/bus/platform/devices/soc:fpc1020/irq - chmod 0644 /sys/bus/platform/devices/soc:fpc1020/wakeup_enable - chmod 0644 /sys/bus/platform/devices/soc:fpc1020/regulator_enable - chmod 0644 /sys/bus/platform/devices/soc:fpc1020/compatible_all - chmod 0644 /sys/bus/platform/devices/soc:fpc1020/fingerdown_wait - - #for touchscreen - chown system system /sys/bus/i2c/drivers/fts_ts/2-0038/fts_edge_mode - chmod 0666 /sys/bus/i2c/drivers/fts_ts/2-0038/fts_edge_mode - chown system system /sys/bus/i2c/devices/2-0038/fts_charger_mode - chmod 0666 /sys/bus/i2c/devices/2-0038/fts_charger_mode - chown system system /sys/bus/i2c/devices/2-0038/fts_rw_reg - chmod 0666 /sys/bus/i2c/devices/2-0038/fts_rw_reg - - # for thermal - chmod 0777 /sys/class/power_supply/bq25890_charger/constant_charge_current_max - - chmod 0777 /sys/bus/coresight/devices/coresight-tmc-etr/block_size - chmod 0777 /dev/byte-cntr - - # IR - chown system system /dev/lirc0 - chmod 0666 /dev/lirc0 - - # HBM/AOD - chmod 0777 /sys/class/drm/card0-DSI-1/disp_param - chmod 0777 /sys/class/drm/card0-DSI-1/mipi_reg - - # touch - chown system system /sys/class/touch/touch_dev/palm_sensor - chmod 0664 /sys/class/touch/touch_dev/palm_sensor - -on property:sys.tp.grip_enable=0 - write /sys/devices/platform/soc/4c88000.i2c/i2c-2/2-0038/fts_edge_mode 0 - -on property:sys.tp.grip_enable=90 - write /sys/devices/platform/soc/4c88000.i2c/i2c-2/2-0038/fts_edge_mode 1 - -on property:sys.tp.grip_enable=270 - write /sys/devices/platform/soc/4c88000.i2c/i2c-2/2-0038/fts_edge_mode 2 - -# NFC -on post-fs-data - mkdir /data/vendor/nfc 0770 nfc nfc - -service stflashtool /vendor/bin/STFlashTool - class late_start - group nfc - user nfc - oneshot - -on boot - start nfc_hal_service - -on post-fs - start stflashtool - -on property:ro.boot.hwname=* - setprop ro.boot.product.hardware.sku ${ro.boot.hwname} diff --git a/init/init_stone.cpp b/init/init_stone.cpp deleted file mode 100644 index 364a41f..0000000 --- a/init/init_stone.cpp +++ /dev/null @@ -1,136 +0,0 @@ -/* - * Copyright (C) 2023 Paranoid Android - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include -#include - -#include -#include -#include -#define _REALLY_INCLUDE_SYS__SYSTEM_PROPERTIES_H_ -#include - -#include "property_service.h" -#include "vendor_init.h" - -using android::base::GetProperty; - -// list of partitions to override props -std::vector ro_props_default_source_order = { - "", "odm.", "odm_dlkm.", "product.", "system.", "system_ext.", "vendor.", "vendor_dlkm.", -}; - -void property_override(char const prop[], char const value[], bool add = true) { - auto pi = (prop_info *)__system_property_find(prop); - - if (pi != nullptr) { - __system_property_update(pi, value, strlen(value)); - } else if (add) { - __system_property_add(prop, strlen(prop), value, strlen(value)); - } -} - -void set_ro_build_prop(const std::string &source, const std::string &prop, - const std::string &value, bool product = false) { - std::string prop_name; - - if (product) { - prop_name = "ro.product." + source + prop; - } else { - prop_name = "ro." + source + "build." + prop; - } - - property_override(prop_name.c_str(), value.c_str(), true); -} - -void set_device_props(const std::string fingerprint, const std::string description, - const std::string brand, const std::string device, const std::string model, const std::string mod_device) { - for (const auto &source : ro_props_default_source_order) { - set_ro_build_prop(source, "fingerprint", fingerprint); - set_ro_build_prop(source, "brand", brand, true); - set_ro_build_prop(source, "device", device, true); - set_ro_build_prop(source, "model", model, true); - } - - property_override("ro.build.fingerprint", fingerprint.c_str()); - property_override("ro.build.description", description.c_str()); - property_override("ro.product.mod_device", mod_device.c_str()); - property_override("bluetooth.device.default_name", model.c_str()); -} - -void load_device_properties() { - // Detect variant and override properties - std::string hwname = GetProperty("ro.boot.hwname", ""); - std::string hwversion = GetProperty("ro.boot.hwversion", ""); - - if (hwname == "moonstone") { - set_device_props( - "POCO/moonstone_p_global/moonstone:13/TKQ1.221114.001/V14.0.5.0.TMPMIXM:user/release-keys", - "qssi-user 13 TKQ1.221114.001 V14.0.5.0.TMPMIXM release-keys", "moonstone_global", "POCO", "moonstone", - "POCO X5 5G"); - } else if (hwname == "sunstone") { - set_device_props( - "Redmi/sunstone/sunstone:13/TKQ1.221013.002/V14.0.5.0.TMQMIXM:user/release-keys", - "qssi-user 13 TKQ1.221114.001 V14.0.5.0.TMQMIXM release-keys", "sunstone_global", "Redmi", "sunstone", - "Redmi Note 12 5G"); - } - property_override("vendor.boot.hwversion", hwversion.c_str()); - property_override("ro.boot.product.hardware.sku", hwname.c_str()); -} - -void load_dalvik_properties() { - char const *heapstartsize; - char const *heapgrowthlimit; - char const *heapsize; - char const *heapminfree; - char const *heapmaxfree; - char const *heaptargetutilization; - struct sysinfo sys; - - sysinfo(&sys); - - if (sys.totalram >= 5ull * 1024 * 1024 * 1024) { - // from - phone-xhdpi-6144-dalvik-heap.mk - heapstartsize = "16m"; - heapgrowthlimit = "256m"; - heapsize = "512m"; - heaptargetutilization = "0.5"; - heapminfree = "8m"; - heapmaxfree = "32m"; - } else if (sys.totalram >= 3ull * 1024 * 1024 * 1024) { - // from - phone-xhdpi-4096-dalvik-heap.mk - heapstartsize = "8m"; - heapgrowthlimit = "192m"; - heapsize = "512m"; - heaptargetutilization = "0.6"; - heapminfree = "8m"; - heapmaxfree = "16m"; - } else { - return; - } - - property_override("dalvik.vm.heapstartsize", heapstartsize); - property_override("dalvik.vm.heapgrowthlimit", heapgrowthlimit); - property_override("dalvik.vm.heapsize", heapsize); - property_override("dalvik.vm.heaptargetutilization", heaptargetutilization); - property_override("dalvik.vm.heapminfree", heapminfree); - property_override("dalvik.vm.heapmaxfree", heapmaxfree); -} - -void vendor_load_properties() { - load_dalvik_properties(); - load_device_properties(); -} diff --git a/libinit/Android.bp b/libinit/Android.bp new file mode 100644 index 0000000..aca88dd --- /dev/null +++ b/libinit/Android.bp @@ -0,0 +1,25 @@ +// +// Copyright (C) 2021 The LineageOS Project +// +// SPDX-License-Identifier: Apache-2.0 +// + +cc_library_static { + name: "libinit_stone", + srcs: [ + "libinit_dalvik_heap.cpp", + "libinit_variant.cpp", + "libinit_utils.cpp", + ], + whole_static_libs: ["libbase"], + export_include_dirs: ["include"], + recovery_available: true, +} + +cc_library_static { + name: "init_stone", + srcs: ["init_stone.cpp"], + whole_static_libs: ["libinit_stone"], + include_dirs: ["system/core/init"], + recovery_available: true, +} diff --git a/libinit/include/libinit_dalvik_heap.h b/libinit/include/libinit_dalvik_heap.h new file mode 100644 index 0000000..75144b2 --- /dev/null +++ b/libinit/include/libinit_dalvik_heap.h @@ -0,0 +1,23 @@ +/* + * Copyright (C) 2021 The LineageOS Project + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#ifndef LIBINIT_DALVIK_HEAP_H +#define LIBINIT_DALVIK_HEAP_H + +#include + +typedef struct dalvik_heap_info { + std::string heapstartsize; + std::string heapgrowthlimit; + std::string heapsize; + std::string heapminfree; + std::string heapmaxfree; + std::string heaptargetutilization; +} dalvik_heap_info_t; + +void set_dalvik_heap(void); + +#endif // LIBINIT_DALVIK_HEAP_H diff --git a/libinit/include/libinit_utils.h b/libinit/include/libinit_utils.h new file mode 100644 index 0000000..09ec976 --- /dev/null +++ b/libinit/include/libinit_utils.h @@ -0,0 +1,18 @@ +/* + * Copyright (C) 2021 The LineageOS Project + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#ifndef LIBINIT_UTILS_H +#define LIBINIT_UTILS_H + +#include + +void property_override(std::string prop, std::string value, bool add = true); + +void set_ro_build_prop(const std::string &prop, const std::string &value, bool product = false); + +const std::string fingerprint_to_description(const std::string &fingerprint); + +#endif // LIBINIT_UTILS_H diff --git a/libinit/include/libinit_variant.h b/libinit/include/libinit_variant.h new file mode 100644 index 0000000..f95be27 --- /dev/null +++ b/libinit/include/libinit_variant.h @@ -0,0 +1,29 @@ +/* + * Copyright (C) 2021 The LineageOS Project + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#ifndef LIBINIT_VARIANT_H +#define LIBINIT_VARIANT_H + +#include +#include + +typedef struct variant_info { + std::string hwc_value; + std::string sku_value; + + std::string brand; + std::string device; + std::string model; + std::string mod_device; + std::string build_fingerprint; + +} variant_info_t; + +void search_variant(const std::vector variants); + +void set_variant_props(const variant_info_t variant); + +#endif // LIBINIT_VARIANT_H diff --git a/libinit/init_stone.cpp b/libinit/init_stone.cpp new file mode 100644 index 0000000..ca5262f --- /dev/null +++ b/libinit/init_stone.cpp @@ -0,0 +1,102 @@ +/* + * Copyright (C) 2021-2022 The LineageOS Project + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#include +#include +#include + +#include "vendor_init.h" + +#define FINGERPRINT_GL "POCO/moonstone_p_global/moonstone:13/TKQ1.221114.001/V14.0.5.0.TMPMIXM:user/release-keys" +#define FINGERPRINT_CN "Redmi/sunstone/sunstone:13/TKQ1.221013.002/V14.0.5.0.TMQMIXM:user/release-keys" + +static const variant_info_t stone_global_info = { + .hwc_value = "", + .sku_value = "moonstone_p_global", + + .brand = "POCO", + .device = "moonstone", + .model = "POCO X5 5G", + .mod_device = "moonstone_p_global", + .build_fingerprint = FINGERPRINT_GL, +}; + +static const variant_info_t stone_in_info = { + .hwc_value = "", + .sku_value = "moonstone_p_in", + + .brand = "POCO", + .device = "moonstone", + .model = "POCO X5 5G", +// .mod_device = "moonstone_in_global", + .mod_device = "moonstone_p_global", // Fixed miuicamera crash + .build_fingerprint = FINGERPRINT_GL, +}; + +static const variant_info_t sunstone_cn_info = { + .hwc_value = "", + .sku_value = "sunstone_cn", + + .brand = "Redmi", + .device = "sunstone", + .model = "Redmi Note 12 5G", +// .mod_device = "moonstone", + .mod_device = "moonstone_global", // Fixed miuicamera crash + .build_fingerprint = FINGERPRINT_CN, +}; + +static const variant_info_t sunstone_global_info = { + .hwc_value = "", + .sku_value = "sunstone_global", + + .brand = "Redmi", + .device = "sunstone", + .model = "Redmi Note 12 5G", +// .mod_device = "moonstone", + .mod_device = "moonstone_global", // Fixed miuicamera crash + .build_fingerprint = FINGERPRINT_CN, +}; + +static const variant_info_t sunstone_in_info = { + .hwc_value = "", + .sku_value = "sunstone_in", + + .brand = "Redmi", + .device = "sunstone", + .model = "Redmi Note 12 5G", +// .mod_device = "moonstone", + .mod_device = "moonstone_global", // Fixed miuicamera crash + .build_fingerprint = FINGERPRINT_CN, +}; + +static const variant_info_t sunstone_x_info = { + .hwc_value = "", + .sku_value = "sunstone_x", + + .brand = "Redmi", + .device = "sunstone", + .model = "Redmi Note 12R Pro", +// .mod_device = "moonstone", + .mod_device = "moonstone_global", // Fixed miuicamera crash + .build_fingerprint = FINGERPRINT_CN, +}; + +static const std::vector variants = { + stone_global_info, + stone_in_info, + sunstone_global_info, + sunstone_cn_info, + sunstone_in_info, + sunstone_x_info, +}; + +void vendor_load_properties() { + set_dalvik_heap(); + search_variant(variants); + + // SafetyNet workaround + property_override("ro.boot.verifiedbootstate", "green"); +} diff --git a/libinit/libinit_dalvik_heap.cpp b/libinit/libinit_dalvik_heap.cpp new file mode 100644 index 0000000..a999763 --- /dev/null +++ b/libinit/libinit_dalvik_heap.cpp @@ -0,0 +1,67 @@ +/* + * Copyright (C) 2021 The LineageOS Project + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#include +#include + +#include + +#define HEAPSTARTSIZE_PROP "dalvik.vm.heapstartsize" +#define HEAPGROWTHLIMIT_PROP "dalvik.vm.heapgrowthlimit" +#define HEAPSIZE_PROP "dalvik.vm.heapsize" +#define HEAPMINFREE_PROP "dalvik.vm.heapminfree" +#define HEAPMAXFREE_PROP "dalvik.vm.heapmaxfree" +#define HEAPTARGETUTILIZATION_PROP "dalvik.vm.heaptargetutilization" + +#define GB(b) (b * 1024ull * 1024 * 1024) + +static const dalvik_heap_info_t dalvik_heap_info_8192 = { + .heapstartsize = "24m", + .heapgrowthlimit = "256m", + .heapsize = "512m", + .heapminfree = "8m", + .heapmaxfree = "48m", + .heaptargetutilization = "0.46", +}; + +static const dalvik_heap_info_t dalvik_heap_info_6144 = { + .heapstartsize = "16m", + .heapgrowthlimit = "256m", + .heapsize = "512m", + .heapminfree = "8m", + .heapmaxfree = "32m", + .heaptargetutilization = "0.5", +}; + +static const dalvik_heap_info_t dalvik_heap_info_4096 = { + .heapstartsize = "8m", + .heapgrowthlimit = "192m", + .heapsize = "512m", + .heapminfree = "8m", + .heapmaxfree = "16m", + .heaptargetutilization = "0.6", +}; + +void set_dalvik_heap() { + struct sysinfo sys; + const dalvik_heap_info_t *dhi; + + sysinfo(&sys); + + if (sys.totalram > GB(7)) + dhi = &dalvik_heap_info_8192; + else if (sys.totalram > GB(5)) + dhi = &dalvik_heap_info_6144; + else + dhi = &dalvik_heap_info_4096; + + property_override(HEAPSTARTSIZE_PROP, dhi->heapstartsize); + property_override(HEAPGROWTHLIMIT_PROP, dhi->heapgrowthlimit); + property_override(HEAPSIZE_PROP, dhi->heapsize); + property_override(HEAPTARGETUTILIZATION_PROP, dhi->heaptargetutilization); + property_override(HEAPMINFREE_PROP, dhi->heapminfree); + property_override(HEAPMAXFREE_PROP, dhi->heapmaxfree); +} diff --git a/libinit/libinit_utils.cpp b/libinit/libinit_utils.cpp new file mode 100644 index 0000000..a6be4d5 --- /dev/null +++ b/libinit/libinit_utils.cpp @@ -0,0 +1,67 @@ +/* + * Copyright (C) 2021 The LineageOS Project + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#define _REALLY_INCLUDE_SYS__SYSTEM_PROPERTIES_H_ +#include +#include + +#include + +void property_override(std::string prop, std::string value, bool add) { + auto pi = (prop_info *) __system_property_find(prop.c_str()); + if (pi != nullptr) { + __system_property_update(pi, value.c_str(), value.length()); + } else if (add) { + __system_property_add(prop.c_str(), prop.length(), value.c_str(), value.length()); + } +} + +std::vector ro_props_default_source_order = { + "odm.", + "product.", + "system.", + "system_ext.", + "vendor.", + "", +}; + +void set_ro_build_prop(const std::string &prop, const std::string &value, bool product) { + std::string prop_name; + + for (const auto &source : ro_props_default_source_order) { + if (product) + prop_name = "ro.product." + source + prop; + else + prop_name = "ro." + source + "build." + prop; + + property_override(prop_name, value, true); + } +} + +#define FIND_AND_REMOVE(s, delimiter, variable_name) \ + std::string variable_name = s.substr(0, s.find(delimiter)); \ + s.erase(0, s.find(delimiter) + delimiter.length()); + +const std::string fingerprint_to_description(const std::string &fingerprint) { + const std::string delimiter = "/"; + const std::string delimiter2 = ":"; + + std::string build_fingerprint_copy = fingerprint; + + FIND_AND_REMOVE(build_fingerprint_copy, delimiter, brand) + FIND_AND_REMOVE(build_fingerprint_copy, delimiter, product) + FIND_AND_REMOVE(build_fingerprint_copy, delimiter2, device) + FIND_AND_REMOVE(build_fingerprint_copy, delimiter, platform_version) + FIND_AND_REMOVE(build_fingerprint_copy, delimiter, build_id) + FIND_AND_REMOVE(build_fingerprint_copy, delimiter2, build_number) + FIND_AND_REMOVE(build_fingerprint_copy, delimiter, build_variant) + std::string build_version_tags = build_fingerprint_copy; + + const std::string description = product + "-" + build_variant + " " + platform_version + + " " + build_id + " " + build_number + " " + build_version_tags; + + return description; +} diff --git a/libinit/libinit_variant.cpp b/libinit/libinit_variant.cpp new file mode 100644 index 0000000..92295f3 --- /dev/null +++ b/libinit/libinit_variant.cpp @@ -0,0 +1,43 @@ +/* + * Copyright (C) 2021 The LineageOS Project + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#include +#include +#include + +#include + +using android::base::GetProperty; + +#define HWC_PROP "ro.boot.hwc" +#define SKU_PROP "ro.boot.product.hardware.sku" + +void search_variant(const std::vector variants) { + std::string hwc_value = GetProperty(HWC_PROP, ""); + std::string sku_value = GetProperty(SKU_PROP, ""); + + for (const auto& variant : variants) { + if ((variant.hwc_value == "" || variant.hwc_value == hwc_value) && + (variant.sku_value == "" || variant.sku_value == sku_value)) { + set_variant_props(variant); + break; + } + } +} + +void set_variant_props(const variant_info_t variant) { + set_ro_build_prop("brand", variant.brand, true); + set_ro_build_prop("device", variant.device, true); + set_ro_build_prop("model", variant.model, true); + set_ro_build_prop("mod_device", variant.mod_device, true); + property_override("vendor.usb.product_string", variant.model, true); + if (access("/system/bin/recovery", F_OK) != 0) { + set_ro_build_prop("fingerprint", variant.build_fingerprint); + property_override("ro.bootimage.build.fingerprint", variant.build_fingerprint); + property_override("bluetooth.device.default_name", variant.model, true); + property_override("ro.build.description", fingerprint_to_description(variant.build_fingerprint)); + } +} diff --git a/lineage_stone.mk b/lineage_stone.mk index cd559fa..f69dc5f 100644 --- a/lineage_stone.mk +++ b/lineage_stone.mk @@ -18,11 +18,5 @@ PRODUCT_NAME := lineage_stone PRODUCT_DEVICE := stone PRODUCT_MANUFACTURER := Xiaomi PRODUCT_BRAND := Xiaomi -PRODUCT_MODEL := holi PRODUCT_GMS_CLIENTID_BASE := android-xiaomi - -PRODUCT_BUILD_PROP_OVERRIDES += \ - PRIVATE_BUILD_DESC="moonstone-user 13 TKQ1.221114.001 V14.0.5.0.TMPMIXM release-keys" - -BUILD_FINGERPRINT := POCO/moonstone_p_global/moonstone:13/TKQ1.221114.001/V14.0.5.0.TMPMIXM:user/release-keys