####################################################################
#
#                                 Vitor Santos, 20 Aug 1997
#
###################################################################

ASDP_DIR=/usr/local/ASDP

ASDP_INC      =$(ASDP_DIR)/include
ASDP_INC_EXTRA=$(ASDP_DIR)/include/oasys
ASDP_BIN      =$(ASDP_DIR)/bin
ASDP_LIB      =$(ASDP_DIR)/lib

TEST_HOME     = ./

SERIAL_PORT_TO_DOWNLOAD = /dev/ttya 


#---------------------------------------------

SRCS = kernel.c emerg.c serial.c us.c executor.c generic.c deadreck.c ptu.c mission.c parser.c motion.c cros.c laser.c
EXECUTABLE = robot

#---------------------------------------------

OBJS = $(SRCS:%.c=./%.$(OBJEXT))

#---------------------------------------------

S_ADDRESS=0x40000

MAKE    = make $(MFLAGS)
RM      = /bin/rm -f
RANLIB  = ranlib68
#This is for sformat
SFORMAT = $(ASDP_BIN)/sformat

#This is for objcopy
#SRECORD = objcopy68 -O srec
#SRECORD = m68k-coff-objcopy -O srec --adjust-section-vma=S_TEXT=$(S_ADDRESS) # this has to be done at linking level

SRECORD = m68k-coff-objcopy -O srec 
SREC_FILTER = dos2unix
SLOAD   = $(ASDP_BIN)/sload384

DISASSEMBLE=m68k-coff-objdump -d
DISASSEMBLE=m68k-coff-objdump -D


DEFINE = -D__IeeeFloat

###

OBJEXT = o
LIBEXT  = olb    #library extension suffix
AR      = lib68
RANLIB = touch  # Empty RANLIB macro for oasys (since ranlib is not needed!)
ARFLAGS = -cvry
 
##### and makedepend flags
DEPENDFLAGS = -o.${OBJEXT}
 
#CC  = gcc68
CC  = m68k-coff-gcc
#AS  = as68
AS  = mk8k-coff-as
#LD  = ${CC}
#LD  = ld68
LD  = m68k-coff-ld
 
# Compiler flags.
CFLAGS = -c -m68040 -ansi
CFLAGS = -c -m68040 -ansi -Wall
 
# Linker flags
#LFLAGS = -coff -m68040 -map  -nolibraries
#LFLAGS = -Ttext $(S_ADDRESS) -Map $(EXECUTABLE).map -nostdlib
LFLAGS = -e start -Ttext $(S_ADDRESS) -Map $(EXECUTABLE).map -nostdlib

#------------------------------------------------

#Now follows the LINK file, that is usable by oasys compiler only
#Should be set empty for other compilers...

#LNKFILE   = $(TEST_HOME)/$(EXECUTABLE).lnk  

#------------------------------------------------

INCLUDE = -I$(TEST_HOME)\
          -I$(ASDP_INC)\
		  -I$(ASDP_INC_EXTRA)

#--------------------------

# System libraries (albatros and robuter libs) 
ROBOTLIBS=\
\
$(ASDP_LIB)/libcrobu40.olb\
$(ASDP_LIB)/libncom40.olb\
$(ASDP_LIB)/libio40.olb\
$(ASDP_LIB)/libcpro40.olb\
$(ASDP_LIB)/libcalbh40.olb\
$(ASDP_LIB)/libcalbl40.olb\
$(ASDP_LIB)/libcstd40.olb\
\
$(ASDP_LIB)/libm40.olb \
$(ASDP_LIB)/libc40.olb\
$(ASDP_LIB)/libport840.olb

STARTOBJ = $(ASDP_LIB)/start40.obj 

#--------------------------

# now follow the several libraries in modules to be linked ....

LIBS      = $(ROBOTLIBS)

#-----------------------------------------------

.SUFFIXES: .c .$(OBJEXT) .$(LIBEXT) 

#implicit rule for the c sources
.c.$(OBJEXT):
	$(CC) $(CFLAGS) $(DEFINE) $(INCLUDE) $< 

#This must be the first real target if it is to be considered the default!

default: srecords  

compile: $(OBJS)

asm:
	$(CC) -S $(CFLAGS) $(DEFINE) $(INCLUDE) $(SRCS)

disasm: $(EXECUTABLE)
	$(DISASSEMBLE) $(EXECUTABLE) > tmp.s
	vi tmp.s

$(EXECUTABLE) link: $(OBJS) 
	@echo '~~~~~~~~~~~~~~~~~~~~~~ NOW LINKING ~~~~~~~~~~~~~~~~~~~~~~~'
	$(LD) $(LFLAGS) -o $(TEST_HOME)/$(EXECUTABLE) $(LNKFILE) $(STARTOBJ) $(OBJS) $(LIBS)
	@#$(LD) $(LFLAGS) -o $(TEST_HOME)/$(EXECUTABLE) $(LNKFILE) $(OBJS) $(STARTOBJ) $(LIBS)
	@echo '~~~~~~~~~~~~~~~~~~~ LINKING FINISHED ~~~~~~~~~~~~~~~~~~~~~~'

depend:
	makedepend -w120 $(DEPENDFLAGS) $(INCLUDE) $(DEFINE) $(SRCS)

load: $(EXECUTABLE).mx 
	$(SLOAD) -d $(SERIAL_PORT_TO_DOWNLOAD) -c "lo -e;" $(TEST_HOME)/$(EXECUTABLE).mx 
	@ echo "Start at "
	@ grep main $(EXECUTABLE).map

srecords $(EXECUTABLE).mx: $(EXECUTABLE)
	@ $(RM) tmp.mx
	$(SRECORD) $(TEST_HOME)/$(EXECUTABLE) tmp.mx
	$(SREC_FILTER) tmp.mx > $(EXECUTABLE).mx
	@ $(RM) tmp.mx
	@ echo "Start at "
	@ grep main $(EXECUTABLE).map
	@#$(SFORMAT) -o $(EXECUTABLE).mx $(TEST_HOME)/$(EXECUTABLE)
	putr


#----- housekeeping targets ----------------------

clean:
	$(RM) $(OBJS) $(EXECUTABLE) *.bak *.map *.cfr *.cfe *.run *.mx *.sym *.sr

erasebin: clean
	$(RM) $(EXECUTABLE)

# DO NOT DELETE THIS LINE -- make depend depends on it.

kernel.o: /usr/local/ASDP/include/libcstd.h /usr/local/ASDP/include/math.h /usr/local/ASDP/include/libcalbl.h
kernel.o: /usr/local/ASDP/include/libcpro.h headers.h common.h modules.h generic.h
emerg.o: common.h modules.h /usr/local/ASDP/include/libcrobu.h /usr/local/ASDP/include/libcalbl.h
emerg.o: /usr/local/ASDP/include/libcstd.h /usr/local/ASDP/include/math.h emerg.h generic.h executor.h serial.h us.h
emerg.o: headers.h deadreck.h proc.h
serial.o: common.h modules.h /usr/local/ASDP/include/libcstd.h /usr/local/ASDP/include/math.h
serial.o: /usr/local/ASDP/include/libport.h /usr/local/ASDP/include/libport2.h /usr/local/ASDP/include/libcalbl.h
serial.o: /usr/local/ASDP/include/libcpro.h generic.h us.h executor.h serial.h emerg.h headers.h deadreck.h parser.h
serial.o: mission.h motion.h ptu.h proc.h
us.o: common.h modules.h /usr/local/ASDP/include/libcrobu.h /usr/local/ASDP/include/libcalbl.h
us.o: /usr/local/ASDP/include/libcstd.h /usr/local/ASDP/include/math.h us.h generic.h headers.h ptu.h proc.h
executor.o: common.h modules.h /usr/local/ASDP/include/libcrobu.h /usr/local/ASDP/include/libcalbl.h
executor.o: /usr/local/ASDP/include/libcstd.h /usr/local/ASDP/include/math.h emerg.h executor.h generic.h headers.h
executor.o: deadreck.h proc.h
generic.o: /usr/local/ASDP/include/libcalbl.h /usr/local/ASDP/include/libcstd.h /usr/local/ASDP/include/math.h
generic.o: generic.h headers.h
deadreck.o: common.h modules.h /usr/local/ASDP/include/libcalbl.h /usr/local/ASDP/include/libcstd.h
deadreck.o: /usr/local/ASDP/include/math.h /usr/local/ASDP/include/libport.h /usr/local/ASDP/include/libport2.h
deadreck.o: generic.h executor.h headers.h deadreck.h serial.h proc.h
ptu.o: common.h modules.h
mission.o: common.h modules.h /usr/local/ASDP/include/libcstd.h /usr/local/ASDP/include/math.h
mission.o: /usr/local/ASDP/include/libcalbl.h headers.h generic.h mission.h serial.h executor.h emerg.h motion.h
mission.o: deadreck.h proc.h parser.h cros.h
parser.o: common.h modules.h /usr/local/ASDP/include/libcstd.h /usr/local/ASDP/include/math.h headers.h parser.h
parser.o: generic.h mission.h motion.h
motion.o: common.h modules.h /usr/local/ASDP/include/libcstd.h /usr/local/ASDP/include/math.h headers.h mission.h
motion.o: motion.h generic.h executor.h emerg.h us.h deadreck.h cros.h parser.h
cros.o: common.h modules.h /usr/local/ASDP/include/libcstd.h /usr/local/ASDP/include/math.h
cros.o: /usr/local/ASDP/include/libcalbl.h /usr/local/ASDP/include/libcpro.h /usr/local/ASDP/include/libport.h
cros.o: /usr/local/ASDP/include/libport2.h proc.h cros.h headers.h generic.h mission.h serial.h emerg.h executor.h
cros.o: laser.h
laser.o: common.h modules.h /usr/local/ASDP/include/libcalbl.h /usr/local/ASDP/include/libcstd.h
laser.o: /usr/local/ASDP/include/math.h /usr/local/ASDP/include/libport.h /usr/local/ASDP/include/libport2.h headers.h
laser.o: generic.h laser.h serial.h proc.h
