LOCAL_PATH:=$(shell pwd)
LIB_DIR := $(TARGET_DIR)/usr/lib
AML_MP_ROOT_PATH = $(LOCAL_PATH)
AML_MP_PLAYER_SRC := \
    player/Aml_MP.cpp \
    player/Aml_MP_Player.cpp \
    player/Aml_MP_PlayerImpl.cpp \
    player/AmlPlayerBase.cpp \
    player/AmlTsPlayer.cpp \
    player/AmlDummyTsPlayer.cpp \

AML_MP_CAS_SRC := \
    cas/Aml_MP_CAS.cpp \
    cas/AmlCasBase.cpp \
    cas/AmlDvbCasHal.cpp \
    cas/AmCasLibWrapper.cpp \
    cas/vmx_iptvcas/AmlVMXIptvCas_V2.cpp \
    cas/vmx_webcas/AmlVMXWebCas.cpp \
    cas/wv_iptvcas/AmlWVIptvCas_V2.cpp \

AML_MP_DVR_SRC := \
    dvr/Aml_MP_DVR.cpp \
    dvr/AmlDVRPlayer.cpp \
    dvr/AmlDVRRecorder.cpp

AML_MP_UTILS_SRC := \
    utils/AmlMpAtomizer.cpp \
    utils/AmlMpBitReader.cpp \
    utils/AmlMpBuffer.cpp \
    utils/AmlMpConfig.cpp \
    utils/AmlMpEventHandler.cpp \
    utils/AmlMpEventLooper.cpp \
    utils/AmlMpEventLooperRoster.cpp \
    utils/AmlMpLooper.cpp \
    utils/AmlMpMessage.cpp \
    utils/AmlMpRefBase.cpp \
    utils/AmlMpStrongPointer.cpp \
    utils/AmlMpThread.cpp \
    utils/AmlMpUtils.cpp \
    utils/AmlMpChunkFifo.cpp \
    utils/Amlsysfsutils.cpp \

AML_MP_DEMUX_SRC := \
    demux/AmlDemuxBase.cpp \
    demux/AmlHwDemux.cpp \
    demux/AmlSwDemux.cpp \
    demux/AmlTsParser.cpp \

AML_MP_SRCS := \
    $(AML_MP_PLAYER_SRC) \
    $(AML_MP_DVR_SRC) \
    $(AML_MP_UTILS_SRC) \
    $(AML_MP_DEMUX_SRC) \
    $(AML_MP_CAS_SRC)

AML_MP_TEST_SUPPORTER_SRCS := \
    tests/amlMpTestSupporter/AmlMpTestSupporter.cpp \
    tests/amlMpTestSupporter/ParserReceiver.cpp \
    tests/amlMpTestSupporter/TestModule.cpp \
    tests/amlMpTestSupporter/DVRPlayback.cpp \
    tests/amlMpTestSupporter/DVRRecord.cpp \
    tests/amlMpTestSupporter/Playback.cpp \
    tests/amlMpTestSupporter/TestUtils.cpp \
    tests/amlMpTestSupporter/source/Source.cpp \
    tests/amlMpTestSupporter/source/DvbSource.cpp \
    tests/amlMpTestSupporter/source/UdpSource.cpp \
    tests/amlMpTestSupporter/source/FileSource.cpp \
    #tests/amlMpTestSupporter/demux/AmlDemuxBase.cpp \
    tests/amlMpTestSupporter/demux/AmlSwDemux.cpp \
    tests/amlMpTestSupporter/demux/AmlHwDemux.cpp \

AML_MP_PLAYER_DEMO_SRCS := tests/amlMpPlayerDemo/AmlMpPlayerDemo.cpp

AML_MP_OBJS := $(patsubst %.cpp,%.o,$(AML_MP_SRCS))
AML_MP_TEST_SUPPORTER_OBJS := $(patsubst %.cpp,%.o,$(AML_MP_TEST_SUPPORTER_SRCS))
AML_MP_PLAYER_DEMO_OBJS := $(patsubst %.cpp,%.o,$(AML_MP_PLAYER_DEMO_SRCS))

AML_MP_INC := $(AML_MP_ROOT_PATH)/include \
    $(AML_MP_ROOT_PATH)/ \
    $(AML_MP_ROOT_PATH)/tests/amlMpTestSupporter/ \
    $(AML_MP_ROOT_PATH)/tests/amlMpTestSupporter/demux/ \
    $(STAGING_DIR)/usr/include/libdvr \
    $(AML_MP_ROOT_PATH)/../../vendor/amlogic/aml_commonlib/aml_mp/include/ \
    $(AML_MP_ROOT_PATH)/../../vendor/amlogic/aml_commonlib/liblog/include/ \
    $(AML_MP_ROOT_PATH)/../../vendor/amlogic/aml_commonlib/libbinder/include/ \

CFLAGS += $(patsubst %,-I%,$(AML_MP_INC))
LDFLAGS += -lmediahal_tsplayer -L. -lamdvr -llog -lcutils -lpthread -std=c++17 -D__unused=
MP_LDFLAGS += -laml_mp_sdk -L .
SUPPORT_LDFLAGS += -lamlMpTestSupporter -L.

all: libaml_mp_sdk.so amlMpPlayerDemo

libaml_mp_sdk.so :$(AML_MP_OBJS)
	$(CXX) -o $@ $^  $(LDFLAGS) -shared -fPIC -lm -lz -ldl

libamlMpTestSupporter.a : libaml_mp_sdk.so $(AML_MP_TEST_SUPPORTER_OBJS)
	$(AR) cq $@ $(AML_MP_TEST_SUPPORTER_OBJS)

$(AML_MP_OBJS) : %.o : %.cpp
	$(CXX) -c $< -o $@ $(CFLAGS) $(LDFLAGS) -fPIC

$(AML_MP_TEST_SUPPORTER_OBJS) : %.o : %.cpp
	$(CXX) -c $< -o $@ $(CFLAGS) $(MP_LDFLAGS) $(LDFLAGS) -fPIC

$(AML_MP_PLAYER_DEMO_OBJS) : %.o : %.cpp
	$(CXX) -c $< -o $@ $(CFLAGS) $(SUPPORT_LDFLAGS) $(MP_LDFLAGS) $(LDFLAGS) -fPIC

amlMpPlayerDemo : libaml_mp_sdk.so libamlMpTestSupporter.a $(AML_MP_PLAYER_DEMO_OBJS)
	$(CXX) $(AML_MP_PLAYER_DEMO_OBJS) -o $@ $(CFLAGS) $(SUPPORT_LDFLAGS) $(MP_LDFLAGS) $(LDFLAGS) -lm -lz -g

.PHONY: install
install:
	install -m 755 -D libaml_mp_sdk.so -t $(TARGET_DIR)/usr/lib/

.PHONY: clean
clean:
	rm -rf $(shell find -name "*.o")
	rm -rf $(shell find -name "*.a")
	rm -f libaml_mp_sdk.so
	rm -f amlMpPlayerDemo
#	rm -f $(TARGET_DIR)/usr/lib/libaml_mp_sdk.so

