# indent -kr -nut -i3
#
# Execute 'make' to create prucode.bin and mfm_emu
# Other options:
# make clean
# make all
# make pru
# make clean
#

PRU = prucode0_reva.bin prucode0_revb.bin prucode0_revc.bin prucode1_reva.bin prucode1_revb.bin prucode1_revc.bin
PROJECT = mfm_emu

OBJDIR=obj
INCDIR=inc

LIBRARIES = pthread prussdrv m rt

SOURCES =  mfm_emu.c ../mfm/pru_setup.c ../mfm/msg.c parse_cmdline.c \
	../mfm/emu_tran_file.c ../mfm/crc_ecc.c ../mfm/board.c
OBJECTS = $(addprefix $(OBJDIR)/, $(subst ../mfm/,,$(subst .c,.o,$(SOURCES))))
INCLUDES = $(addprefix $(INCDIR)/, cmd.h parse_cmdline.h) ../mfm/$(INCDIR)/msg.h \
	../mfm/$(INCDIR)/emu_tran_file.h ../mfm/$(INCDIR)/crc_ecc.h \
	../mfm/$(INCDIR)/pru_setup.h ../mfm/$(INCDIR)/version.h

CC = gcc
SUDO = /usr/bin/sudo
SETCAP = /sbin/setcap

FP_ABI = 
#Rev B angstrom require softfp
ifneq ($(wildcard /usr/lib/arm-angstrom-linux-gnueabi),)
	FP_ABI = -mfloat-abi=softfp 
endif

# If local copy of PRU package exists use it. Currently the
# package isn't provided for Angstrom and doesn't work for Debian
PRU_PACKAGE_PATH = ../am335x_pru_package
PASM = pasm
LIB_PATH =
INCL_PATH = -I $(INCDIR)/  -I ../mfm/$(INCDIR)
ifneq ($(wildcard $(PRU_PACKAGE_PATH)),)
   $(info Using local copy of am335x_pru_package)
   PASM = $(PRU_PACKAGE_PATH)/pru_sw/utils/pasm
   LIB_PATH = $(PRU_PACKAGE_PATH)/pru_sw/app_loader/lib/
   INCL_PATH += -I $(PRU_PACKAGE_PATH)/pru_sw/app_loader/include/
endif

UNAME_S := $(shell uname -m)
EXTRA_DEFINE =
ifeq ($(UNAME_S), armv7l)
        EXTRA_DEFINE = -mcpu=cortex-a8 -mfpu=vfpv3 $(FP_ABI) \
        -ffast-math -Ofast
	   
endif
PASM += -V2

CFLAGS = $(EXTRA_DEFINE) $(INCL_PATH) -O3 -g -Wall -D_FILE_OFFSET_BITS=64

all : $(PRU) $(PROJECT)
pru : $(PRU)

$(PROJECT) : $(OBJECTS)
	$(CC)  $(OBJECTS) -Wl,-rpath=$(LIB_PATH) $(LIB_PATH:%=-L %) $(LIBRARIES:%=-l%) -o $@
	if [ -f $(SETCAP) ]; then $(SUDO) $(SETCAP) 'cap_sys_nice=eip' $(PROJECT); fi

clean :
	echo $(OBJ)
	rm -rf $(OBJDIR)/*.o *.bin $(PROJECT) core *~ prucode*_rev*.txt

distclean : clean
	rm -rf logfile.txt *.dto

%_reva.bin: %.p prucode.hp $(INCDIR)/cmd.h
	$(PASM) -b -L $< $*_reva

%_revb.bin: %.p prucode.hp $(INCDIR)/cmd.h
	$(PASM) -b -L -DREVB $< $*_revb

%_revc.bin: %.p prucode.hp $(INCDIR)/cmd.h
	$(PASM) -b -L -DREVC $< $*_revc

$(OBJDIR)/%.o: %.c $(INCLUDES) | obj
	$(CC) $(CFLAGS) -c -o $@ $<
$(OBJDIR)/%.o: ../mfm/%.c $(INCLUDES) | obj
	$(CC) $(CFLAGS) -c -o $@ $<
obj:
	mkdir $@