# 크로스 툴체인 환경을 설정합니다.
CROSS_COMPILER_PREFIX = aarch64-linux-
EXTERNAL_TOOLCHAIN_ROOT = /opt/vtcs_toolchain/leipzig/usr/
EXTERNAL_TOOLCHAIN_PATH = $(EXTERNAL_TOOLCHAIN_ROOT)bin/
SYSROOT = $(EXTERNAL_TOOLCHAIN_ROOT)/aarch64-buildroot-linux-gnu/sysroot

CC = $(EXTERNAL_TOOLCHAIN_PATH)$(CROSS_COMPILER_PREFIX)gcc
CXX = $(EXTERNAL_TOOLCHAIN_PATH)$(CROSS_COMPILER_PREFIX)g++
LD = $(EXTERNAL_TOOLCHAIN_PATH)$(CROSS_COMPILER_PREFIX)ld
AR = $(EXTERNAL_TOOLCHAIN_PATH)$(CROSS_COMPILER_PREFIX)ar

# Oasis SDK 환경을 설정합니다.
OASIS_SDK_ROOT = /opt/oasis/sdk-4.3.29
OASIS_INC_PATH = $(OASIS_SDK_ROOT)/include
OASIS_LIB_PATH = $(OASIS_SDK_ROOT)/lib
OASIS_LIBS = -loasis_codec -loasis_fs -loasis_pipe -loasis_media -loasis_ui -loasis_util -loasis_v4l2 -loasis_certs -loasis_disp -loasis
OASIS_DEFS = -DOASIS_NO_NVWA

SYSTEM_SDK_ROOT = /opt/oasis/system
SYSTEM_INC_PATH = $(SYSTEM_SDK_ROOT)/include
SYSTEM_LIB_PATH = $(SYSTEM_SDK_ROOT)/lib
SYSTEM_LIBS = -lcva -lkcva -lteec -lckteec  -lvmf_nnm -lvmf -lvdec -lutil -liniparser

# 타겟을 설정합니다.
TARGET = hello-lvgl
CXX_SRCS = hello-lvgl.cpp
C_SRCS = lvgl-kl730.c
OBJS = $(CXX_SRCS:.cpp=.o) $(C_SRCS:.c=.o)

CFLAGS += -I$(OASIS_INC_PATH) --sysroot=$(SYSROOT) -I./include -I$(SYSTEM_INC_PATH)  -I$(SYSTEM_INC_PATH)/vmf
LDFLAGS += -s -L$(OASIS_LIB_PATH) $(OASIS_LIBS)

CFLAGS += -O2 -g $(OASIS_DEFS)
CXXFLAGS = -std=c++17 $(CFLAGS)

# 기타 의존적인 라이브러리를 설정합니다.
LIBS = -lexif -lpng16 -ljpeg -lfreetype -lz -ljsoncpp -lrt -lpthread -llvgl -llvgl_thorvg
LDFLAGS += -L$(SYSTEM_LIB_PATH) $(SYSTEM_LIBS) -L./lib $(LIBS)

.PHONY: all clean copy

all: $(TARGET) copy

$(TARGET): $(OBJS)
	$(CXX) $(LDFLAGS) $^ $(LIBS) -o $@

copy:
	cp hello-lvgl /home/cobenhan/mnt/ma-kl730/mnt/flash/leipzig/

%.o: %.cpp
	$(CXX) $(CXXFLAGS) -c $< -o $@

%.o: %.c
	$(CC) $(CFLAGS) -c $< -o $@

clean:
	rm -f $(OBJS) $(TARGET)
