ifeq ($(APP_PARAM), )
    # Makefile.param only sets RK_APP_CROSS when RK_TOOLCHAIN_CROSS is non-empty.
    # If .BoardConfig.mk is missing or does not export the toolchain, you get "-gcc".
    # Defaults match typical Luckfox RV1106 IPC (uClibc hard-float).
    RK_CHIP ?= rv1106
    RK_TOOLCHAIN_CROSS ?= arm-rockchip830-linux-uclibcgnueabihf
    APP_PARAM:=../Makefile.param
    include $(APP_PARAM)
endif

export LC_ALL=C
SHELL:=/bin/bash

CURRENT_DIR := $(shell pwd)
PKG_NAME := desktoplvgl
# All build products stay under this directory (./out/...), not project/app/out.
PKG_BIN ?= out

LVGL_SRC := $(RK_APP_COMPONENT)/lvgl/lvgl
LVGL_BUILD := $(CURRENT_DIR)/$(PKG_BIN)/lvgl_build
LVGL_LIB := $(LVGL_BUILD)/lib/liblvgl.a
LV_CONF_GEN := $(CURRENT_DIR)/$(PKG_BIN)/lv_conf_desktop.h
LV_CONF_PATH := $(abspath $(LV_CONF_GEN))

# App must see the same lv_conf as liblvgl (fonts, color depth, etc.). Passing
# -DLV_CONF_PATH through the shell breaks #include __LV_TO_STR (backslashes in the path).
# Use out/lv_conf.h -> lv_conf_desktop.h and -DLV_CONF_INCLUDE_SIMPLE instead.
ICONS_ABS := $(abspath $(CURRENT_DIR)/icons)

DESKTOPLVGL_CFLAGS := $(RK_APP_OPTS) $(RK_APP_CROSS_CFLAGS) -O2 -Wall -Wextra \
	-I$(CURRENT_DIR) -I$(dir $(LV_CONF_GEN)) -I$(LVGL_SRC) -DLV_CONF_INCLUDE_SIMPLE -DLV_LVGL_H_INCLUDE_SIMPLE \
	-DDESKTOP_ICONS_ROOT=\"$(ICONS_ABS)\"

DESKTOPLVGL_LDFLAGS := $(RK_APP_OPTS) $(RK_APP_CROSS_CFLAGS) -O2 \
	-L$(LVGL_BUILD)/lib -Wl,-rpath-link,$(RK_APP_MEDIA_LIBS_PATH) \
	-llvgl -lm

# vendor env_support/cmake/custom.cmake never adds LV_CONF_PATH to compile defs;
# without this, lv_conf_internal.h falls back to #include "../../lv_conf.h" and fails.
LVGL_CMAKE_CFLAGS := $(RK_APP_CROSS_CFLAGS) -DLV_CONF_PATH=\"$(LV_CONF_PATH)\"

ifeq ($(PKG_BIN),)
$(error ### $(CURRENT_DIR): PKG_BIN is NULL, Please Check !!!)
endif

# First explicit target would otherwise be $(LV_CONF_GEN); then plain `make` stops there.
.DEFAULT_GOAL := all

$(LV_CONF_GEN): $(LVGL_SRC)/rockchip-conf/lv_conf_default.h
	@mkdir -p $(dir $(LV_CONF_GEN))
	sed -e 's/#define LV_COLOR_DEPTH 16/#define LV_COLOR_DEPTH 32/' \
	    -e 's/(48U \* 1024U)/(2048U * 1024U)/' \
	    -e 's/#define LV_FONT_MONTSERRAT_32 0/#define LV_FONT_MONTSERRAT_32 1/' \
	    -e 's/#define LV_USE_FS_STDIO 0/#define LV_USE_FS_STDIO 1/' \
	    -e 's/#define LV_USE_PNG 0/#define LV_USE_PNG 1/' \
	    $< > $@
	perl -pi -e 's/LV_FS_STDIO_LETTER '\''\\0'\''/LV_FS_STDIO_LETTER '\''S'\''/' $(LV_CONF_GEN)
	cd "$(dir $(LV_CONF_GEN))" && rm -f lv_conf.h && ln -sf lv_conf_desktop.h lv_conf.h

$(LVGL_LIB): $(LV_CONF_GEN)
	@rm -rf $(LVGL_BUILD)
	@mkdir -p $(LVGL_BUILD)
	cd $(LVGL_BUILD) && \
		cmake $(LVGL_SRC) \
			-G "Unix Makefiles" \
			-DCMAKE_C_COMPILER="$(RK_APP_CROSS)-gcc" \
			-DCMAKE_CXX_COMPILER="$(RK_APP_CROSS)-g++" \
			-DCMAKE_C_FLAGS="$(LVGL_CMAKE_CFLAGS)" \
			-DCMAKE_BUILD_TYPE=Release \
			-DCMAKE_COLOR_MAKEFILE=OFF \
			-DBUILD_SHARED_LIBS=OFF \
			-DLV_CONF_PATH="$(LV_CONF_PATH)" \
			-DLV_CONF_INCLUDE_SIMPLE=OFF \
			-DLV_LVGL_H_INCLUDE_SIMPLE=ON \
			$(PKG_CONF_OPTS) && \
		$(MAKE) -j$(RK_APP_JOBS)

APP_SRCS := main.c lv_fbdev.c indev_evdev.c remote_desktop.c ui_desktop.c click_sound.c cJSON.c

$(PKG_BIN)/bin/$(PKG_NAME): $(APP_SRCS) $(LVGL_LIB)
	@mkdir -p $(dir $@)
	$(RK_APP_CROSS)-gcc $(APP_SRCS) -o $@ $(DESKTOPLVGL_CFLAGS) $(DESKTOPLVGL_LDFLAGS)

all: $(PKG_BIN)/bin/$(PKG_NAME)
	@echo "build $(PKG_NAME) done -> $(CURRENT_DIR)/$(PKG_BIN)/bin/$(PKG_NAME)"

clean:
	@rm -rf $(PKG_BIN)

distclean: clean

info:
	@echo -e "$(C_YELLOW)desktoplvgl: 4x3 slots + LV_SYMBOL media. Env: FBDEV DESKTOP_HOST DESKTOP_PORT DESKTOP_KEYCLICK (WAV for aplay)$(C_NORMAL)"
