# Mestre — Buildroot defconfig for the Xiegu X6200
# Milestone 1: serial console + SSH + Ethernet. No GUI, no audio.
#
# Derived from gdyuldin/AetherX6200Buildroot (GPL-2.0)
# https://github.com/gdyuldin/AetherX6200Buildroot
#
# Build with:
#   ./scripts/build.sh
#
# Subsequent milestones add packages incrementally on top of this base.

# ---------------------------------------------------------------------------
# Architecture: Allwinner R16 (sun8i-a33), Cortex-A7 quad-core
# ---------------------------------------------------------------------------
BR2_arm=y
BR2_cortex_a7=y
BR2_ARM_FPU_NEON_VFPV4=y

# ---------------------------------------------------------------------------
# Toolchain
# ---------------------------------------------------------------------------
BR2_TOOLCHAIN_BUILDROOT_CXX=y
BR2_CCACHE=y
BR2_SSP_REGULAR=y
BR2_RELRO_PARTIAL=y

# ---------------------------------------------------------------------------
# System
# ---------------------------------------------------------------------------
BR2_TARGET_GENERIC_HOSTNAME="mestre"
BR2_TARGET_GENERIC_ISSUE="Mestre — SDR Control Head"
BR2_TARGET_GENERIC_ROOT_PASSWD="mestre"
BR2_SYSTEM_BIN_SH_BASH=y
BR2_SYSTEM_DHCP="eth0"
BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_EUDEV=y
BR2_ROOTFS_OVERLAY="$(BR2_EXTERNAL_MESTRE_PATH)/board/x6200/rootfs-overlay"

# ---------------------------------------------------------------------------
# Post-image: assemble sdcard.img via genimage
# ---------------------------------------------------------------------------
BR2_ROOTFS_POST_IMAGE_SCRIPT="support/scripts/genimage.sh"
BR2_ROOTFS_POST_SCRIPT_ARGS="-c $(BR2_EXTERNAL_MESTRE_PATH)/board/x6200/genimage.cfg"

# ---------------------------------------------------------------------------
# Linux kernel
# ---------------------------------------------------------------------------
# Pinned to 6.6 LTS. The X6200 board support (sun8i-a33/R16) has been
# mainline since 4.x, so this is a stable, well-tested combination.
#
# NOTE: linux.config was derived from Aether's 6.1-era defconfig.
# Run `make linux-olddefconfig` after the first build to migrate any
# renamed or removed symbols for 6.6.
#
# NOTE: The LCD panel patch (patches/0001-drm-panel-jinglitai-jlt4013a.patch)
# targets 6.1-era panel/Kconfig line numbers and may need forward-porting
# for 6.6. Milestone 1 (serial console) does not require the LCD driver.
BR2_LINUX_KERNEL=y
BR2_LINUX_KERNEL_CUSTOM_VERSION=y
BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="6.1.82"
BR2_KERNEL_HEADERS_6_1=y
BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y
BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="$(BR2_EXTERNAL_MESTRE_PATH)/board/x6200/linux/linux.config"
BR2_LINUX_KERNEL_CONFIG_FRAGMENT_FILES="$(BR2_EXTERNAL_MESTRE_PATH)/board/x6200/linux/linux-midi.fragment"
BR2_LINUX_KERNEL_PATCH="$(BR2_EXTERNAL_MESTRE_PATH)/board/x6200/linux/patches/"
BR2_LINUX_KERNEL_DTS_SUPPORT=y
BR2_LINUX_KERNEL_CUSTOM_DTS_PATH="$(BR2_EXTERNAL_MESTRE_PATH)/board/x6200/dts/sun8i-r16-x6200.dts"
BR2_LINUX_KERNEL_INSTALL_TARGET=y

# ---------------------------------------------------------------------------
# U-Boot
# ---------------------------------------------------------------------------
BR2_TARGET_UBOOT=y
BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG=y
BR2_TARGET_UBOOT_CUSTOM_VERSION=y
BR2_TARGET_UBOOT_CUSTOM_VERSION_VALUE="2023.10"
BR2_TARGET_UBOOT_USE_CUSTOM_CONFIG=y
BR2_TARGET_UBOOT_CUSTOM_CONFIG_FILE="$(BR2_EXTERNAL_MESTRE_PATH)/board/x6200/uboot/uboot.config"
BR2_TARGET_UBOOT_NEEDS_DTC=y
BR2_TARGET_UBOOT_NEEDS_PYLIBFDT=y
BR2_TARGET_UBOOT_NEEDS_OPENSSL=y
BR2_TARGET_UBOOT_SPL=y
BR2_TARGET_UBOOT_SPL_NAME="u-boot-sunxi-with-spl.bin"
BR2_TARGET_UBOOT_CUSTOM_DTS_PATH="$(BR2_EXTERNAL_MESTRE_PATH)/board/x6200/dts/sun8i-r16-x6200.dts"

# ---------------------------------------------------------------------------
# Root filesystem
# ---------------------------------------------------------------------------
BR2_TARGET_ROOTFS_EXT2=y
BR2_TARGET_ROOTFS_EXT2_4=y
BR2_TARGET_ROOTFS_EXT2_SIZE="512M"

# ---------------------------------------------------------------------------
# Host tools required for image assembly
# ---------------------------------------------------------------------------
BR2_PACKAGE_HOST_DOSFSTOOLS=y
BR2_PACKAGE_HOST_GENIMAGE=y
BR2_PACKAGE_HOST_MTOOLS=y
BR2_PACKAGE_HOST_UBOOT_TOOLS=y
BR2_PACKAGE_HOST_UBOOT_TOOLS_BOOT_SCRIPT=y
BR2_PACKAGE_HOST_UBOOT_TOOLS_BOOT_SCRIPT_SOURCE="$(BR2_EXTERNAL_MESTRE_PATH)/board/x6200/uboot/boot.cmd"

# ---------------------------------------------------------------------------
# Target packages — minimal: remote access + diagnostics
# ---------------------------------------------------------------------------
BR2_PACKAGE_OPENSSH=y
BR2_PACKAGE_NANO=y
BR2_PACKAGE_LESS=y
BR2_PACKAGE_BASH_COMPLETION=y
BR2_PACKAGE_UTIL_LINUX_BINARIES=y
BR2_PACKAGE_UTIL_LINUX_MOUNT=y
BR2_PACKAGE_UTIL_LINUX_RFKILL=y
BR2_PACKAGE_DOSFSTOOLS=y
BR2_PACKAGE_DOSFSTOOLS_MKFS_FAT=y
BR2_PACKAGE_E2FSPROGS=y
BR2_PACKAGE_I2C_TOOLS=y
BR2_PACKAGE_USBUTILS=y
BR2_PACKAGE_EVTEST=y
BR2_PACKAGE_STRACE=y

# ---------------------------------------------------------------------------
# NOT included here (added in later milestones):
#   - X11 / framebuffer console / touchscreen
#   - ALSA / PulseAudio / audio stack
#   - piHPSDR / WDSP / SoapySDR
#   - mestred (our evdev→MIDI service)
#   - Network Manager (using simple /etc/network/interfaces for now)
# ---------------------------------------------------------------------------

BR2_GLOBAL_PATCH_DIR="../br2_external/board/x6200/patches"

# x6200
BR2_PACKAGE_X6200_CONTROL=y

# MISC
BR2_PACKAGE_PYTHON3=y
BR2_PACKAGE_PYTHON3_CTYPES=y
BR_PACKAGE_JOE=y

# Audio
BR2_PACKAGE_ALSA_UTILS=y
BR2_PACKAGE_ALSA_UTILS_APLAY=y
BR2_PACKAGE_ALSA_UTILS_AMIXER=y
BR2_PACKAGE_ALSA_UTILS_ALSAMIXER=y
BR2_PACKAGE_ALSA_LIB=y
BR2_PACKAGE_ALSA_LIB_MIXER=y
BR2_PACKAGE_ALSA_LIB_PCM=y
BR2_PACKAGE_ALSA_LIB_RAWMIDI=y
BR2_PACKAGE_PULSEAUDIO=y
BR2_PACKAGE_PULSEAUDIO_DAEMON=y
BR2_PACKAGE_PULSEAUDIO_MODULE_ALSA=y
BR2_PACKAGE_PULSEAUDIO=y
BR2_PACKAGE_PULSEAUDIO_DAEMON=y
BR2_PACKAGE_PULSEAUDIO_MODULE_ALSA=y

# X11
BR2_PACKAGE_XORG7=y
BR2_PACKAGE_XSERVER_XORG_SERVER=y
BR2_PACKAGE_XAPP_XINIT=y
BR2_PACKAGE_XDRIVER_XF86_VIDEO_FBDEV=y
BR2_PACKAGE_XDRIVER_XF86_INPUT_LIBINPUT=y
BR2_PACKAGE_XKEYBOARD_CONFIG=y
BR2_PACKAGE_LIBINPUT=y
BR2_PACKAGE_XTERM=y

# GTK3
BR2_PACKAGE_LIBGTK3=y
BR2_PACKAGE_LIBGTK3_X11=y
BR2_PACKAGE_LIBEPOXY=y

# BT TGB MOUSE & WIFI
BR2_PACKAGE_LINUX_FIRMWARE=y
BR2_PACKAGE_LINUX_FIRMWARE_RTL_87XX=y
BR2_PACKAGE_LINUX_FIRMWARE_RTL_87XX_BT=y
BR2_PACKAGE_BLUEZ5_UTILS=y
BR2_PACKAGE_BLUEZ5_UTILS_CLIENT=y
BR2_PACKAGE_BLUEZ5_UTILS_DEPRECATED=y
BR2_PACKAGE_BLUEZ5_UTILS_TOOLS=y
BR2_PACKAGE_BLUEZ5_UTILS_PLUGINS_HID=y
BR2_PACKAGE_BLUEZ5_UTILS_TOOLS_HID2HCI=y
BR2_PACKAGE_EUDEV=y
BR2_PACKAGE_XKEYBOARD_CONFIG=y
BR2_PACKAGE_XINPUT=y
BR2_PACKAGE_XAPP_XRANDR=y
BR2_PACKAGE_LINUX_FIRMWARE_RTL_RTW88=y
BR2_PACKAGE_RTW88=y
BR2_PACKAGE_LINUX_FIRMWARE_REGULATORY=y
BR2_PACKAGE_WPA_SUPPLICANT=y
BR2_PACKAGE_WPA_SUPPLICANT_PASSPHRASE=y
BR2_PACKAGE_WPA_SUPPLICANT_CTRL_IFACE=y
BR2_PACKAGE_DHCP=y
BR2_PACKAGE_DHCP_CLIENT=y
