################################################################################
#
# aml_pqserver
#
################################################################################
OUT_DIR ?= .
LOCAL_PATH = $(shell pwd)
LDFLAGS += -Wl,--no-as-needed -lstdc++ -lpthread -lz -ldl -lrt -L$(STAGING_DIR)/usr/lib
CFLAGS += -Wall -Werror -Wno-unknown-pragmas -Wno-format -Wno-format-security -Wno-error=unused-result \
          -O3 -fexceptions -fnon-call-exceptions -D_GNU_SOURCE -I$(STAGING_DIR)/usr/include

MIN_GCC_VERSION = "10"
GCC_VERSION := "`$(CC) -dumpversion | cut -f1 -d'.'`"
IS_GCC_ABOVE_MIN_VERSION := $(shell expr "$(GCC_VERSION)" ">=" "$(MIN_GCC_VERSION)")
ifeq "$(IS_GCC_ABOVE_MIN_VERSION)" "1"
CFLAGS += -std=gnu++20
endif

LIBBINDER_LDFLAGS = -lbinder -llog

LDFLAGS += $(LIBBINDER_LDFLAGS)
LDFLAGS += -L $(OUT_DIR)/

################################################################################
# libpq.so - src files
################################################################################

pq_SRCS = \
	$(LOCAL_PATH)/libpq/CPQdb.cpp \
	$(LOCAL_PATH)/libpq/COverScandb.cpp \
	$(LOCAL_PATH)/libpq/CPQControl.cpp  \
	$(LOCAL_PATH)/libpq/CSqlite.cpp  \
	$(LOCAL_PATH)/libpq/SSMAction.cpp  \
	$(LOCAL_PATH)/libpq/SSMHandler.cpp  \
	$(LOCAL_PATH)/libpq/SSMHeader.cpp  \
	$(LOCAL_PATH)/libpq/CDevicePollCheckThread.cpp  \
	$(LOCAL_PATH)/libpq/CPQFile.cpp  \
	$(LOCAL_PATH)/libpq/CEpoll.cpp \
	$(LOCAL_PATH)/libpq/CDynamicBackLight.cpp \
	$(LOCAL_PATH)/libpq/CConfigFile.cpp \
	$(LOCAL_PATH)/libpq/UEventObserver.cpp \
	$(LOCAL_PATH)/libpq/CVdin.cpp \
	$(LOCAL_PATH)/libpq/CAmdolbyVision.cpp \
	$(LOCAL_PATH)/libpq/GammaOperation.cpp \
	$(LOCAL_PATH)/libpq/CPQDataBase/CPQDataBase.cpp \
	$(LOCAL_PATH)/libpq/CPQDataBase/WhitebalanceDataBase.cpp \
	$(LOCAL_PATH)/libpq/CPQDataBase/LibTableOSD/PQTableOSD.cpp \
	$(LOCAL_PATH)/libpq/CPQDataBase/LibTableOSD/PQTableLoaderOSD.cpp \
	$(LOCAL_PATH)/libpq/CPQDataBase/LibTableOSD/AML_PQ_OSD_Table_Public.cpp \
	$(LOCAL_PATH)/libpq/CPQDataBase/SyncDataBase.cpp \
	$(LOCAL_PATH)/libpq/CHlgToneMapping.cpp \
	$(LOCAL_PATH)/common/CPQLog.cpp \
	$(NULL)

pq_HEADERS = \
	-I$(LOCAL_PATH)/libpq/include \
	-I$(LOCAL_PATH)/libpq/CPQDataBase \
	-I$(LOCAL_PATH)/libpq/CPQDataBase/LibTableOSD \
	-I$(LOCAL_PATH)/halpq/hal_inc \
	$(NULL)
################################################################################
# libpqclient.so - src files
################################################################################
pqclient_SRCS  = \
	$(LOCAL_PATH)/client/PqClient.cpp \
	$(LOCAL_PATH)/common/CPQLog.cpp \
	$(NULL)

pqcommon_HEADERS = \
	-I$(LOCAL_PATH)/include \
	-I$(LOCAL_PATH)/common \
	$(NULL)
################################################################################
# pqservice - src files
################################################################################
pqservice_SRCS  = \
	$(LOCAL_PATH)/service/main_pqservice.cpp \
	$(LOCAL_PATH)/service/PqService.cpp \
	$(NULL)

################################################################################
# pqtest - src files
################################################################################
pqtest_SRCS  = \
	$(LOCAL_PATH)/test/main_pqtest.cpp \
	$(NULL)

################################################################################
# pqcbtest - src files
################################################################################
pqcbtest_SRCS  = \
	$(LOCAL_PATH)/test/main_callback_test.cpp \
	$(NULL)

# ---------------------------------------------------------------------
#  Build rules
BUILD_TARGETS = libpqclient.so libpq.so pqservice pqtest pqcbtest
BUILD_TARGETS_FULLPATH := $(patsubst %, $(OUT_DIR)/%, $(BUILD_TARGETS))

.PHONY: build_halpq all install uninstall clean

build_halpq:
	@echo "Building HAL libraries..."
	$(MAKE) -C $(LOCAL_PATH)/halpq/hal_src/adaptor/src
	$(MAKE) -C $(LOCAL_PATH)/halpq/hal_src/libs
	$(MAKE) -C $(LOCAL_PATH)/halpq/hal_src/libs/vpq
	$(MAKE) -C $(LOCAL_PATH)/halpq/hal_src

HAL_LIB_PATH = -L$(OUT_DIR)
HAL_LIBS = -l_hal_ld -l_hal_lcd -l_hal_amdv -l_hal_vdin -l_hal_pq -l_hal_display

libpqclient.so: $(pqclient_SRCS)
	$(CC) $(CFLAGS) $(LDFLAGS) -shared -fPIC $(pqcommon_HEADERS) \
	-o $(OUT_DIR)/$@ $^ $(LDLIBS)

libpq.so: $(pq_SRCS) | build_halpq
	$(CC) $(CFLAGS) $(LDFLAGS) -shared -fPIC -lsqlite3 -lubootenv $(pq_HEADERS) $(pqcommon_HEADERS) \
	-Wl,-rpath-link,$(OUT_DIR) \
	-o $(OUT_DIR)/$@ $^ \
	$(HAL_LIB_PATH) $(HAL_LIBS) \
	$(LDLIBS)

pqservice: $(pqservice_SRCS) libpq.so
	$(CC) $(CFLAGS) $(LDFLAGS) $(pq_HEADERS) $(pqcommon_HEADERS) \
	-Wl,-rpath-link,$(OUT_DIR) \
	-L$(LOCAL_PATH) -lpq -o $(OUT_DIR)/$@ $(filter-out %.so,$^) $(LDLIBS)

pqtest: $(pqtest_SRCS) libpqclient.so
	$(CC) $(CFLAGS) $(pqcommon_HEADERS) -L$(LOCAL_PATH) \
	-lpqclient $(LDFLAGS) -o $(OUT_DIR)/$@ $(filter-out %.so,$^) $(LDLIBS)

pqcbtest: $(pqcbtest_SRCS) libpqclient.so
	$(CC) $(CFLAGS) $(pqcommon_HEADERS) -L$(LOCAL_PATH) \
	-lpqclient $(LDFLAGS) -o $(OUT_DIR)/$@ $(filter-out %.so,$^) $(LDLIBS)

all: $(BUILD_TARGETS)

clean:
	rm -f $(OUT_DIR)/*.o $(BUILD_TARGETS_FULLPATH)

install:
	install -m 0644 $(OUT_DIR)/libpqclient.so $(TARGET_DIR)/usr/lib
	install -m 0644 $(OUT_DIR)/libpq.so $(TARGET_DIR)/usr/lib/
	install -m 755 $(OUT_DIR)/pqservice $(TARGET_DIR)/usr/bin/
	install -m 755 $(OUT_DIR)/pqtest $(TARGET_DIR)/usr/bin/
	install -m 755 $(OUT_DIR)/pqcbtest $(TARGET_DIR)/usr/bin/

uninstall:
	rm -f $(TARGET_DIR)/usr/lib/libpqclient.so
	rm -f $(TARGET_DIR)/usr/lib/libpq.so
	rm -f $(TARGET_DIR)/usr/bin/pqtest
	rm -f $(TARGET_DIR)/usr/bin/pqcbtest
	rm -f $(TARGET_DIR)/usr/bin/pqservice
