#
# Copyright Altera 2013,2014,2015
# All Rights Reserved.
#
#ALT_DEVICE_FAMILY ?= soc_cv_av
ALT_DEVICE_FAMILY ?= soc_a10
SOCEDS_ROOT ?= $(SOCEDS_DEST_ROOT)
HWLIBS_ROOT = $(SOCEDS_ROOT)/ip/altera/hps/altera_hps/hwlib
MENTOR_ROOT = $(SOCEDS_ROOT)/host_tools/mentor/gnu/arm/baremetal/

C_SRC := hello.c io.c
ASM_SRC := startup.s


MULTILIBFLAGS := -mfloat-abi=softfp -mtune=cortex-a9 -mcpu=cortex-a9 -march=armv7-a
#CFLAGS := $(MULTILIBFLAGS) -g -O0 -Werror -Wall -Wstrict-prototypes
CFLAGS := $(MULTILIBFLAGS) -g -O0 -Werror -Wall -Wstrict-prototypes -I$(HWLIBS_ROOT)/include -I$(HWLIBS_ROOT)/include/$(ALT_DEVICE_FAMILY) -D$(ALT_DEVICE_FAMILY)
#CFLAGS := $(MULTILIBFLAGS) -g -O0 -Werror -Wall -Wstrict-prototypes -I$(MENTOR_ROOT)/arm-altera-eabi/include -I$(MENTOR_ROOT)/lib/gcc/arm-altera-eabi/6.2.0 -I$(HWLIBS_ROOT)/include -I$(HWLIBS_ROOT)/include/$(ALT_DEVICE_FAMILY) -D$(ALT_DEVICE_FAMILY)
ASFLAGS :=  -march=armv7-a -mcpu=cortex-a9


#BOARD := cyclonev
BOARD := arria10
ifeq ($(filter $(BOARD),arriav cyclonev),$(BOARD))
LINKER_SCRIPT := cycloneV-dk-oc-ram-hosted.ld
else
ifeq ($(BOARD),arria10)
#LINKER_SCRIPT := arria10-dk-oc-ram-hosted.ld
LINKER_SCRIPT := arria10-dk-ram-modified.ld
else
$(error ERROR: BOARD setting "$(BOARD)" is not invalid))
endif
endif

CROSS_COMPILE := arm-altera-eabi-
CC := $(CROSS_COMPILE)gcc
AS := $(CROSS_COMPILE)as
LD := $(CROSS_COMPILE)g++
NM := $(CROSS_COMPILE)nm
OD := $(CROSS_COMPILE)objdump
OC := $(CROSS_COMPILE)objcopy

#ifeq ($(or $(COMSPEC),$(ComSpec)),)
RM := rm -rf
#else
#RM := cs-rm -rf
#endif

ELF ?= $(basename $(firstword $(C_SRC))).axf
#OBJ := $(patsubst %.c,%.o,$(C_SRC))
C_OBJ := $(patsubst %.c,%.o,$(C_SRC))
ASM_OBJ := $(patsubst %.s,%.o,$(ASM_SRC))
OBJ := $(C_OBJ) $(ASM_OBJ)
BIN = $(basename $(firstword $(C_SRC))).bin

.PHONY: all
#all: $(ELF)
all: $(ELF) $(BIN)

.PHONY: clean
clean:
#	$(RM) $(ELF) $(OBJ) *.objdump *.map
	$(RM) $(ELF) $(OBJ) *.objdump *.map *.bin

define SET_HWLIBS_DEPENDENCIES
$(1): $(2)
	$(CP) $(2) $(1)
endef

ALL_HWLIBS_SRC = $(wildcard $(HWLIBS_ROOT)/src/hwmgr/*.c) $(wildcard $(HWLIBS_ROOT)/src/hwmgr/$(ALT_DEVICE_FAMILY)/*.c)

$(foreach file,$(ALL_HWLIBS_SRC),$(eval $(call SET_HWLIBS_DEPENDENCIES,$(notdir $(file)),$(file))))

#$(OBJ): %.o: %.c Makefile
$(C_OBJ): %.o: %.c Makefile
	$(CC) $(CFLAGS) -c $< -o $@

$(ASM_OBJ): %.o: %.s Makefile
	$(AS) $(ASFLAGS) -c $< -o $@

$(ELF): $(OBJ)
	$(LD) -T$(LINKER_SCRIPT) $(MULTILIBFLAGS) $(OBJ) -o $@
	$(OD) -d $@ > $@.objdump
	$(NM) $@ > $@.map

$(BIN): $(ELF)
	$(OC) -O binary $(ELF) $(BIN)
