##################################################################
# Copyright (c) $Date: 2009/08/04 21:39:57 $ QUALCOMM INCORPORATED.
# All Rights Reserved.
# Modified by QUALCOMM INCORPORATED on $Date: 2009/08/04 21:39:57 $
##################################################################

SHELL = /bin/bash

empty :=

Q6_RTOS_ROOT := /usr2/erich/prjhome/myp4/source/qcom/qct/core/kernel/qurt/main/latest/install

# Make sure Environment variables are set up
ifndef Q6_RTOS_ROOT
$(error Q6_RTOS_ROOT not defined, please set to QURT install directory)
endif

ifndef TARGET
TARGET := MMv4
endif

#Find OS Environment
ifeq (CYGWIN, $(findstring CYGWIN,$(shell uname)))
OSTYPE := cygwin
else
ifeq (Linux, $(findstring Linux,$(shell uname)))
ifeq (x86_64, $(shell arch))
OSTYPE := lnx64
else
$(error Supported OS environments - cygwin, lnx64)
endif
endif
endif

ifeq ($(Q6_TOOLS_ROOT),$(empty))
ifeq (cygwin, $(OSTYPE))
$(error Q6_TOOLS_ROOT not defined)
else
Q6_TOOLS_ROOT := /pkg/qct/software/hexagon/releases/tools/3.0.02
export Q6_TOOLS_ROOT
endif
endif

cur_dir := $(shell echo "$(CURDIR)" | sed 's/^\/cygdrive\/\([a-z]\)\/\(.*\)/\1:\/\2/')

ifndef BUILD_DIR
BUILD_DIR := $(cur_dir)/build
endif

override Q6_RTOS_ROOT := "$(Q6_RTOS_ROOT)/$(TARGET)"

override Q6VERSION := $(shell cat $(Q6_RTOS_ROOT)/scripts/Input/build_params.txt |sed -n 's/Q6VERSION=\(.*\)/\1/p')

#Set up PATH for access DLLs
ifeq (cygwin, $(OSTYPE))
PATH := $(shell cygpath -u "$(Q6_TOOLS_ROOT)/qc/lib/iss/$(Q6VERSION)"):$(PATH)
endif


RTOS_LIBS_ROOT := $(Q6_RTOS_ROOT)/lib

ifeq (v2, $(Q6VERSION))
LIB_DINKUMWARE_ROOT := "$(Q6_TOOLS_ROOT)"/dinkumware/lib/
LIB_DSP_ROOT := "$(Q6_TOOLS_ROOT)"/qc/lib/qdsp6$(Q6VERSION)
else
LIB_DINKUMWARE_ROOT := "$(Q6_TOOLS_ROOT)"/dinkumware/lib/$(Q6VERSION)
LIB_DSP_ROOT := "$(Q6_TOOLS_ROOT)"/qc/lib/$(Q6VERSION)
endif

CC := "$(Q6_TOOLS_ROOT)"/gnu/bin/hexagon-clang
LD := "$(Q6_TOOLS_ROOT)"/gnu/bin/hexagon-ld
SIM := "$(Q6_TOOLS_ROOT)"/qc/bin/hexagon-sim
OBJDUMP := "$(Q6_TOOLS_ROOT)"/gnu/bin/hexagon-objdump

ifeq (cygwin, $(OSTYPE))
QURT_MODEL := $(Q6_RTOS_ROOT)/debugger/cygwin/Qurt_model.dll
else
QURT_MODEL := $(Q6_RTOS_ROOT)/debugger/lnx64/qurt_model.so
endif

CFLAGS := -m${Q6VERSION} -g -O2 

INCLUDES :=-I. -I$(Q6_RTOS_ROOT)/include -I$(Q6_RTOS_ROOT)/include/qube

LDFLAGS_PREFIX := -m$(Q6VERSION) -g \
			-nostdlib --section-start .start=0x1e000000\
			--start-group \
                        $(LIB_DINKUMWARE_ROOT)/init.o \
                        $(RTOS_LIBS_ROOT)/crt0.o \
                        $(LIB_DINKUMWARE_ROOT)/libc.a \
                        $(LIB_DINKUMWARE_ROOT)/libqcc.a \
                        $(RTOS_LIBS_ROOT)/libqurt.a \
                        $(RTOS_LIBS_ROOT)/libqurtkernel.a \
                        $(RTOS_LIBS_ROOT)/libqube_compat.a \
                        $(RTOS_LIBS_ROOT)/libtimer.a \
                        $(RTOS_LIBS_ROOT)/libposix.a \
                        $(LIB_DSP_ROOT)/libqdsp.a \
                        $(BUILD_DIR)/cust_config.o

LDFLAGS := $(LIB_DINKUMWARE_ROOT)/fini.o --end-group

all: build run

build:
	mkdir -p $(BUILD_DIR) 
	python $(Q6_RTOS_ROOT)/scripts/qurt_config.py update -T "$(Q6_TOOLS_ROOT)" -o $(BUILD_DIR)/cust_config.o qdsp6_qurt.xml
	$(CC) -c $(CFLAGS) allmutex.c $(INCLUDES) -o $(BUILD_DIR)/app1.o
	$(LD) $(LDFLAGS_PREFIX) $(BUILD_DIR)/app1.o $(LDFLAGS) -Map $(BUILD_DIR)/bootimg_org.map -o $(BUILD_DIR)/bootimg.pbn
ifndef NO_RELOC
	./hexagon-relocate $(BUILD_DIR)/bootimg.pbn +0x10000000
endif
	$(OBJDUMP) -dClx $(BUILD_DIR)/bootimg.pbn > $(BUILD_DIR)/bootimg.dump

run:
	@echo $(QURT_MODEL) > $(BUILD_DIR)/osam.cfg
	$(SIM) -S $(BUILD_DIR)/stats.txt --simulated_returnval $(BUILD_DIR)/bootimg.pbn --rtos $(BUILD_DIR)/osam.cfg --symfile $(BUILD_DIR)/bootimg.pbn

clean:
	rm -rf build

.PHONY: build
