--- /dev/null
+#
+# Copyright (C) 2020 The LineageOS Project
+#
+# 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.
+#
+
+LOCAL_PATH := device/motorola/exynos9610-common
+
+ifneq ($(filter kane troika, $(TARGET_DEVICE)),)
+
+include $(call all-makefiles-under,$(LOCAL_PATH))
+
+endif
\ No newline at end of file
--- /dev/null
+#
+# Copyright (C) 2020 The LineageOS Project
+#
+# 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.
+#
+
+COMMON_PATH := device/motorola/exynos9610-common
+
+# Include path
+TARGET_SPECIFIC_HEADER_PATH := $(COMMON_PATH)/include
+
+# Platform
+TARGET_BOARD_PLATFORM := exynos5
+TARGET_SOC := exynos9610
+TARGET_BOOTLOADER_BOARD_NAME := exynos9610
+
+# Architecture
+TARGET_ARCH := arm64
+TARGET_ARCH_VARIANT := armv8-a
+TARGET_CPU_ABI := arm64-v8a
+TARGET_CPU_ABI2 :=
+TARGET_CPU_VARIANT := generic
+TARGET_CPU_VARIANT_RUNTIME := cortex-a73
+
+# Secondary Architecture
+TARGET_2ND_ARCH := arm
+TARGET_2ND_ARCH_VARIANT := armv8-a
+TARGET_2ND_CPU_ABI := armeabi-v7a
+TARGET_2ND_CPU_ABI2 := armeabi
+TARGET_2ND_CPU_VARIANT := generic
+TARGET_2ND_CPU_VARIANT_RUNTIME := cortex-a53
+
+# Binder
+TARGET_USES_64_BIT_BINDER := true
+
+# Extracted with libbootimg
+BOARD_KERNEL_CMDLINE := loop.max_part=7
+BOARD_KERNEL_BASE := 0x10000000
+BOARD_KERNEL_OFFSET := 0x00008000
+BOARD_RAMDISK_OFFSET := 0x00000000
+BOARD_TAGS_OFFSET := 0x00000000
+BOARD_SECOND_OFFSET := 0x00000000
+BOARD_KERNEL_PAGESIZE := 2048
+BOARD_BOOTIMG_HEADER_VERSION := 1
+
+BOARD_MKBOOTIMG_ARGS := --base $(BOARD_KERNEL_BASE) --pagesize $(BOARD_KERNEL_PAGESIZE) --kernel_offset $(BOARD_KERNEL_OFFSET) --second_offset $(BOARD_SECOND_OFFSET) --ramdisk_offset $(BOARD_RAMDISK_OFFSET) --tags_offset $(BOARD_TAGS_OFFSET) --header_version $(BOARD_BOOTIMG_HEADER_VERSION)
+
+# Kernel
+TARGET_KERNEL_ARCH := arm64
+TARGET_KERNEL_HEADER_ARCH := arm64
+TARGET_KERNEL_CLANG_COMPILE := true
+TARGET_KERNEL_SOURCE := kernel/motorola/exynos9610
+BOARD_KERNEL_IMAGE_NAME := Image
+
+# partitions
+BOARD_BOOTIMAGE_PARTITION_SIZE := 67108864
+BOARD_SYSTEMIMAGE_PARTITION_SIZE := 3221225472
+BOARD_USERDATAIMAGE_PARTITION_SIZE := 118974455808
+BOARD_DTBOIMG_PARTITION_SIZE := 1048576
+BOARD_BUILD_SYSTEM_ROOT_IMAGE := true
+BOARD_FLASH_BLOCK_SIZE := 131072 # (BOARD_KERNEL_PAGESIZE * 64)
+TARGET_USES_MKE2FS := true
+BOARD_USES_METADATA_PARTITION := true
+
+# Recovery
+BOARD_USES_RECOVERY_AS_BOOT := true
+TARGET_NO_RECOVERY := true
+TARGET_RECOVERY_FSTAB := $(COMMON_PATH)/recovery.fstab
+TARGET_RECOVERY_PIXEL_FORMAT := "BGRA_8888"
+TARGET_USERIMAGES_USE_EXT4 := true
+TARGET_USERIMAGES_USE_F2FS := true
+TARGET_USES_MKE2FS := true
+
+# Verified Boot
+BOARD_AVB_ENABLE := true
+BOARD_AVB_MAKE_VBMETA_IMAGE_ARGS += --set_hashtree_disabled_flag
+BOARD_AVB_MAKE_VBMETA_IMAGE_ARGS += --flags 2
+
+# Properties
+BOARD_PROPERTY_OVERRIDES_SPLIT_ENABLED := true
+
+# Treble
+BOARD_VNDK_VERSION := current
+
+# Audio
+USE_XML_AUDIO_POLICY_CONF := 1
+
+# Inherit from the proprietary version
+-include vendor/motorola/exynos9610-common/BoardConfigVendor.mk
--- /dev/null
+#
+# Copyright (C) 2020 The LineageOS Project
+#
+# 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.
+#
+
+COMMON_PATH := device/motorola/exynos9610-common
+
+# Get non-open-source specific aspects
+$(call inherit-product-if-exists, vendor/motorola/exynos9610-common/exynos9610-common-vendor.mk)
+
+DEVICE_PACKAGE_OVERLAYS += $(COMMON_PATH)/overlay
+
+# A/B
+AB_OTA_UPDATER := true
+
+AB_OTA_PARTITIONS += \
+ boot \
+ dtbo \
+ system \
+ vbmeta
+
+AB_OTA_POSTINSTALL_CONFIG += \
+ RUN_POSTINSTALL_system=true \
+ POSTINSTALL_PATH_system=system/bin/otapreopt_script \
+ FILESYSTEM_TYPE_system=ext4 \
+ POSTINSTALL_OPTIONAL_system=true
+
+# Update engine
+PRODUCT_PACKAGES += \
+ update_engine \
+ update_engine_sideload \
+ update_verifier
+
+PRODUCT_PACKAGES += \
+ otapreopt_script
+
+# Boot animation
+TARGET_BOOTANIMATION_PRELOAD := true
+TARGET_BOOTANIMATION_TEXTURE_CACHE := true
+TARGET_SCREEN_HEIGHT := 2520
+TARGET_SCREEN_WIDTH := 1080
+
+# Graphics
+# Device uses high-density artwork where available
+PRODUCT_AAPT_CONFIG := xlarge
+PRODUCT_AAPT_PREF_CONFIG := xxxhdpi
+# A list of dpis to select prebuilt apk, in precedence order.
+PRODUCT_AAPT_PREBUILT_DPI := xxxhdpi xxhdpi xhdpi hdpi
--- /dev/null
+#!/bin/bash
+#
+# Copyright (C) 2017-2020 The LineageOS Project
+#
+# 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.
+#
+
+set -e
+
+VENDOR=motorola
+DEVICE_COMMON=exynos9610-common
+
+# Load extract_utils and do some sanity checks
+MY_DIR="${BASH_SOURCE%/*}"
+if [[ ! -d "${MY_DIR}" ]]; then MY_DIR="${PWD}"; fi
+
+LINEAGE_ROOT="${MY_DIR}"/../../..
+
+HELPER="${LINEAGE_ROOT}/vendor/lineage/build/tools/extract_utils.sh"
+if [ ! -f "${HELPER}" ]; then
+ echo "Unable to find helper script at ${HELPER}"
+ exit 1
+fi
+source "${HELPER}"
+
+SECTION=
+KANG=
+
+while [ "${#}" -gt 0 ]; do
+ case "${1}" in
+ -n | --no-cleanup )
+ CLEAN_VENDOR=false
+ ;;
+ -k | --kang )
+ KANG="--kang"
+ ;;
+ -s | --section )
+ SECTION="${2}"; shift
+ CLEAN_VENDOR=false
+ ;;
+ * )
+ SRC="${1}"
+ ;;
+ esac
+ shift
+done
+
+if [ -z "${SRC}" ]; then
+ SRC="adb"
+fi
+
+# Initialize the helper
+setup_vendor "${DEVICE_COMMON}" "${VENDOR}" "${LINEAGE_ROOT}" true "${CLEAN_VENDOR}"
+
+extract "${MY_DIR}/proprietary-files.txt" "${SRC}" \
+ "${KANG}" --section "${SECTION}"
+
+"${MY_DIR}/setup-makefiles.sh"
--- /dev/null
+[
+ {
+ "repository": "android_kernel_motorola_exynos9610",
+ "target_path": "kernel/motorola/exynos9610-common"
+ }
+]
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<device name="Android">
+ <item name="ambient.on">0.1</item>
+ <item name="screen.on">0.1</item>
+ <item name="screen.full">0.1</item>
+ <item name="bluetooth.active">0.1</item>
+ <item name="bluetooth.on">0.1</item>
+ <item name="wifi.on">0.1</item>
+ <item name="wifi.active">0.1</item>
+ <item name="wifi.scan">0.1</item>
+ <item name="audio">0.1</item>
+ <item name="video">0.1</item>
+ <item name="camera.flashlight">0.1</item>
+ <item name="camera.avg">0.1</item>
+ <item name="gps.on">0.1</item>
+ <item name="radio.active">0.1</item>
+ <item name="radio.scanning">0.1</item>
+ <array name="radio.on">
+ <value>0.2</value>
+ <value>0.1</value>
+ </array>
+ <array name="cpu.clusters.cores">
+ <value>1</value>
+ </array>
+ <array name="cpu.speeds.cluster0">
+ <value>400000</value>
+ </array>
+ <array name="cpu.active.cluster0">
+ <value>0.1</value>
+ </array>
+ <item name="cpu.idle">0.1</item>
+ <array name="memory.bandwidths">
+ <value>22.7</value>
+ </array>
+ <item name="battery.capacity">1000</item>
+ <item name="wifi.controller.idle">0</item>
+ <item name="wifi.controller.rx">0</item>
+ <item name="wifi.controller.tx">0</item>
+ <array name="wifi.controller.tx_levels" />
+ <item name="wifi.controller.voltage">0</item>
+ <array name="wifi.batchedscan">
+ <value>.0002</value>
+ <value>.002</value>
+ <value>.02</value>
+ <value>.2</value>
+ <value>2</value>
+ </array>
+ <item name="modem.controller.sleep">0</item>
+ <item name="modem.controller.idle">0</item>
+ <item name="modem.controller.rx">0</item>
+ <array name="modem.controller.tx">
+ <value>0</value>
+ <value>0</value>
+ <value>0</value>
+ <value>0</value>
+ <value>0</value>
+ </array>
+ <item name="modem.controller.voltage">0</item>
+ <array name="gps.signalqualitybased">
+ <value>0</value>
+ <value>0</value>
+ </array>
+ <item name="gps.voltage">0</item>
+</device>
\ No newline at end of file
--- /dev/null
+# Android fstab file.
+#<src> <mnt_point> <type> <mnt_flags and options> <fs_mgr_flags>
+# The filesystem that contains the filesystem checker binary (typically /system) cannot
+# specify MF_CHECK, and must come before any filesystems that do specify MF_CHECK
+
+
+/dev/block/bootdevice/by-name/system / ext4 ro wait,slotselect
+/dev/block/bootdevice/by-name/userdata /data f2fs rw,discard,nosuid,nodev,noatime,nodiratime,nobarrier,inline_xattr,inline_data,reserve_root=32768,resgid=1065 wait,check,formattable,fileencryption=aes-256-xts,quota,reservedsize=128M
+/dev/block/bootdevice/by-name/efs /mnt/vendor/efs ext4 noatime,nosuid,nodev,barrier=1,rw wait
+/dev/block/bootdevice/by-name/persist /mnt/vendor/persist ext4 noatime,nosuid,nodev,barrier=1,data=ordered,nodelalloc,nomblk_io_submit,errors=panic wait,notrim
+/dev/block/bootdevice/by-name/misc /misc emmc defaults defaults
+/dev/block/bootdevice/by-name/slotinfo /slotinfo emmc defaults defaults
+/dev/block/bootdevice/by-name/persist2 /mnt/product/persist ext4 noatime,nosuid,nodev,barrier=1 wait,formattable,nofail
+/dev/block/zram0 none swap defaults zramsize=2147483648,max_comp_streams=8,zram_loopback_path=/data/unencrypted/zram_swap,zram_loopback_size=512M
+
+# VOLD
+/devices/platform/13550000.dwmmc2/mmc_host* auto auto default voldmanaged=sdcard1:auto,encryptable=userdata
+/devices/platform/13200000.usb* auto vfat default voldmanaged=usb1:auto
+/devices/platform/13200000.usb/13200000.dwc3* auto vfat default voldmanaged=usb2:auto
--- /dev/null
+#!/bin/bash
+#
+# Copyright (C) 2017-2020 The LineageOS Project
+#
+# 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.
+#
+
+set -e
+
+VENDOR=motorola
+DEVICE_COMMON=exynos9610-common
+
+export INITIAL_COPYRIGHT_YEAR=2020
+
+# Load extract_utils and do some sanity checks
+MY_DIR="${BASH_SOURCE%/*}"
+if [[ ! -d "${MY_DIR}" ]]; then MY_DIR="${PWD}"; fi
+
+LINEAGE_ROOT="${MY_DIR}/../../.."
+
+HELPER="${LINEAGE_ROOT}/vendor/lineage/build/tools/extract_utils.sh"
+if [ ! -f "${HELPER}" ]; then
+ echo "Unable to find helper script at ${HELPER}"
+ exit 1
+fi
+source "${HELPER}"
+
+# Initialize the helper
+setup_vendor "${DEVICE_COMMON}" "${VENDOR}" "${LINEAGE_ROOT}" true
+
+# Copyright headers and guards
+write_headers "kane troika"
+
+# The standard blobs
+write_makefiles "${MY_DIR}/proprietary-files.txt" true
+
+# Finish
+write_footers