# Makefile for QDSP6 platform
USE_CRM = 0
USE_SDK = 1
# SDK root
DSP_CRM_ROOT = /local/mnt/workspace/msetia/DSP/CDSP_SDM845
#following path is special for junyuans-linux machine
HEXAGON_SDK_PATH = /local/mnt/workspace/Qualcomm/Hexagon_SDK
#hexagon sdk version
HEXAGON_SDK_VERSION = 3.3.0
HEXAGON_SDK_ROOT = $(HEXAGON_SDK_PATH)/$(HEXAGON_SDK_VERSION)
HEXAGON_TOOLS_PATH = /pkg/qct/software/hexagon/releases/tools
HEXAGON_TOOLS_VERSION = 8.1.02

#hexagon version
HEXAGON_VERSION = -mv65
QURT_VERSION = computev65
HEXAGON_BUILD_FLAVOR = hexagon_ReleaseG_dynamic_toolv81_v65

# Compiler and linker
CC = $(HEXAGON_TOOLS_PATH)/$(HEXAGON_TOOLS_VERSION)/Tools/bin/hexagon-clang
LD = $(HEXAGON_TOOLS_PATH)/$(HEXAGON_TOOLS_VERSION)/Tools/bin/hexagon-clang
CFLAGS   = -fPIC -fomit-frame-pointer -ffast-math -Wall -g -O3 $(HEXAGON_VERSION) -c
CFLAGS  += -D__FILENAME__=\"$(notdir $(<))\"#
ASMFLAGS = $(HEXAGON_VERSION) -c
LDFLAGS  = $(HEXAGON_VERSION) -g -v -nodefaultlibs -nostdlib -shared

# source directory
SRC_DIR    = ./src
ASMSRC_DIR = ./asm_src
OBJ_DIR    = ./build
BIN_DIR    = ./build
CTRL_DIR =./../DSP_streamer_framework #./../../../DSP_streamer/


ifeq ($(USE_CRM), 1)
#remote dependencies
INCLUDES = \
        -I$(DSP_CRM_ROOT)/platform/inc/HAP/ \
        -I$(DSP_CRM_ROOT)/performance/sysmon/inc_global/ \
        -I$(DSP_CRM_ROOT)/platform/inc/stddef \
        -I$(DSP_CRM_ROOT)/core/api/kernel/qurt \
        -I$(DSP_CRM_ROOT)/platform/remote/inc \
        -I$(DSP_CRM_ROOT)/platform/fastrpc_process/inc \
        -I$(DSP_CRM_ROOT)/platform/apps_mem/build/fastrpc_shell_img/qdsp6/845.cdsp.prod \
        -I$(DSP_CRM_ROOT)/platform/rtld/inc/
# local includes
INCLUDES += -I./inc \
            -I$(CTRL_DIR)/API \
            -I$(CTRL_DIR)/inc
endif
ifeq ($(USE_SDK), 1)
#hexagon sdk includes
INCLUDES += -I$(HEXAGON_SDK_ROOT)/incs \
            -I$(HEXAGON_SDK_ROOT)/incs/stddef \
            -I$(HEXAGON_SDK_ROOT)/libs/common/qurt/$(QURT_VERSION)/include/qurt \
            -I$(HEXAGON_SDK_ROOT)/libs/common/remote/ship/$(HEXAGON_BUILD_FLAVOR) \
            -I$(HEXAGON_SDK_ROOT)/libs/common/rtld/ship/$(HEXAGON_BUILD_FLAVOR)
INCLUDES += -I./inc \
            -I$(CTRL_DIR)/API \
            -I$(CTRL_DIR)/inc
endif
# target binary
PROC_BIN = libdsp_streamer_add_constant.so
CTRL_BIN = dsp_streamer_skel

# source files
#C_SOURCES_LIST := $(foreach dir,$(SRC_DIR),$(notdir $(wildcard $(dir)/*.c)))
#ASM_SOURCES_LIST := $(foreach dir,$(ASMSRC_DIR),$(notdir $(wildcard $(dir)/*.S)))
C_SOURCES_LIST := hvx_app_add_constant.c
ASM_SOURCES_LIST := add_constant.S

SRC_C_OBJS = $(C_SOURCES_LIST:%.c=$(OBJ_DIR)/%.o)
SRC_ASM_OBJS = $(ASM_SOURCES_LIST:%.S=$(OBJ_DIR)/%.obj)

VPATH = $(SRC_DIR) $(ASMSRC_DIR)

# make target

$(BIN_DIR)/$(PROC_BIN): $(SRC_C_OBJS) $(SRC_ASM_OBJS)
	$(LD) $(LDFLAGS) -o $@ -L $(CTRL_DIR)/build -l$(CTRL_BIN) -Wl,--start-group $^ -Wl,--end-group

$(OBJ_DIR)/%.obj:%.S $(OBJ_DIR)/exists
	$(CC) $(ASMFLAGS) -c -o $(OBJ_DIR)/$(notdir $@) $<

$(OBJ_DIR)/%.o:%.c $(OBJ_DIR)/exists
	$(CC) $(CFLAGS) $(INCLUDES) -c -o $(OBJ_DIR)/$(notdir $@) $<

# Clean up command
clean:
	rm -rf $(OBJ_DIR)

$(OBJ_DIR)/exists:
	mkdir -p $(OBJ_DIR)
	touch $(OBJ_DIR)/exists
