#
# :ts=8
#

##############################################################################

.c.o:
	@echo "Compiling $<"
	@sc nover $(CFLAGS) $<

.c.mo:
	@echo "Compiling $<"
	@sc nover $(CFLAGS) objname=$*.mo math=IEEE $<

.asm.o:
	@echo "Assembling $<"
	@asm $(AFLAGS) $<

##############################################################################

# You might want to change this to the directory where your operating system
# header files are stored. On my system, that's "V:include", but you might
# get lucky with "sc:include" instead, which is the default for SAS/C.
#INCLUDE_DIR = V:include
INCLUDE_DIR = sc:include

##############################################################################

# This is where the header files, the startup code and the c.lib files are
# stored; see below how this prefix is used.
LIB = /library

STARTUP = $(LIB)/startup.o
LIBS = $(LIB)/amiga.lib $(LIB)/c.lib $(LIB)/debug.lib
MATH_LIBS = $(LIB)/math.lib $(LIBS)

##############################################################################

 OPTIMIZE	= optimize opttime optschedule optinline 
#DEBUG		= debug=line noopt define=CHECK_FOR_NULL_POINTERS
#DEBUG		= debug=line
 DEBUG		= debug=line define=NDEBUG
#DEBUG		= debug=sf noopt
#DEBUG		= debug=sf noopt define=CHECK_FOR_NULL_POINTERS
#PROFILE	= profile
 DATA		= data=faronly
#CODE		= code=far
 CPU		= cpu=030

##############################################################################

CFLAGS = \
	resopt \
	nover \
	memorysize=huge \
	idlen=64 \
	commentnest \
	nostackcheck \
	stringmerge \
	errorrexx \
	$(PROFILE) $(OPTIMIZE) $(CODE) $(DATA) $(CPU) $(DEBUG) \
	math=ieee \
	define=VERBOSE

AFLAGS = \
	-d -m2

##############################################################################

all: \
	setup \
	test fgets_test iotest sscanf_test printf_test sprintf_test \
	stack_size_test translate_test strtok_test uname simple \
	fstat_stdout_test simple_sprintf date_test factorial \
	execvp_test setlocale rand fstat_test base_dir_nametest \
	malloc-test slab-test \
	cleanup

clean:
	-delete \#?.o \#?.mo \#?.map \
		test fgets_test iotest sscanf_test printf_test sprintf_test \
		stack_size_test translate_test strtok_test uname simple \
		fstat_stdout_test simple_sprintf date_test factorial \
		execvp_test setlocale rand fstat_test base_dir_nametest \
		malloc-test slab-test

##############################################################################

setup:
	@echo "Setting up include: assignment"
	@assign include: $(LIB)/include $(INCLUDE_DIR)

cleanup:
	@echo "Cleaning up include: assignment"
	@assign include: sc:include

##############################################################################

test: test.o
	@echo "Linking $@"
	@slink $(STARTUP) $*.o to $@ lib $(LIBS) addsym \
		map $@.map,fhx fwidth 32 pwidth 32 swidth 32

date_test: date_test.o
	@echo "Linking $@"
	@slink $(STARTUP) $*.o to $@ lib $(LIBS) addsym \
		map $@.map,fhx fwidth 32 pwidth 32 swidth 32

fgets_test: fgets_test.o
	@echo "Linking $@"
	@slink $(STARTUP) $*.o to $@ lib $(LIBS) addsym \
		map $@.map,fhx fwidth 32 pwidth 32 swidth 32

strtok_test: strtok_test.o
	@echo "Linking $@"
	@slink $(STARTUP) $*.o to $@ lib $(LIBS) addsym \
		map $@.map,fhx fwidth 32 pwidth 32 swidth 32

iotest: iotest.o
	@echo "Linking $@"
	@slink $(STARTUP) $*.o to $@ lib $(LIBS) addsym \
		map $@.map,fhx fwidth 32 pwidth 32 swidth 32

sscanf_test: sscanf_test.mo
	@echo "Linking $@"
	@slink $(STARTUP) $*.mo to $@ lib $(MATH_LIBS) addsym \
		map $@.map,fhx fwidth 32 pwidth 32 swidth 32

printf_test: printf_test.mo
	@echo "Linking $@"
	@slink $(STARTUP) $*.mo to $@ lib $(MATH_LIBS) addsym \
		map $@.map,fhx fwidth 32 pwidth 32 swidth 32

sprintf_test: sprintf_test.o
	@echo "Linking $@"
	@slink $(STARTUP) $*.o to $@ lib $(LIBS) addsym \
		map $@.map,fhx fwidth 32 pwidth 32 swidth 32

stack_size_test: stack_size_test.o
	@echo "Linking $@"
	@slink $(STARTUP) $*.o to $@ lib $(LIBS) addsym \
		map $@.map,fhx fwidth 32 pwidth 32 swidth 32

translate_test: translate_test.o
	@echo "Linking $@"
	@slink $(STARTUP) $*.o to $@ lib $(LIB)/unix.lib $(LIBS) addsym \
		map $@.map,fhx fwidth 32 pwidth 32 swidth 32

uname: uname.o
	@echo "Linking $@"
	@slink $(STARTUP) $*.o to $@ lib $(LIBS) addsym \
		map $@.map,fhx fwidth 32 pwidth 32 swidth 32

simple: simple.o
	@echo "Linking $@"
	@slink $(STARTUP) $*.o to $@ lib $(LIBS) addsym \
		map $@.map,fhx fwidth 32 pwidth 32 swidth 32

fstat_stdout_test: fstat_stdout_test.o
	@echo "Linking $@"
	@slink $(STARTUP) $*.o to $@ lib $(LIBS) addsym \
		map $@.map,fhx fwidth 32 pwidth 32 swidth 32

simple_sprintf: simple_sprintf.o
	@echo "Linking $@"
	@slink $*.o to $@ lib $(LIBS) addsym \
		map $@.map,fhx fwidth 32 pwidth 32 swidth 32

factorial: factorial.mo
	@echo "Linking $@"
	@slink $(STARTUP) $*.mo to $@ lib $(MATH_LIBS) addsym \
		map $@.map,fhx fwidth 32 pwidth 32 swidth 32

execvp_test: execvp_test.o
	@echo "Linking $@"
	@slink $(STARTUP) $*.o to $@ lib $(LIB)/unix.lib $(LIBS) addsym \
		map $@.map,fhx fwidth 32 pwidth 32 swidth 32

setlocale: setlocale.o
	@echo "Linking $@"
	@slink $(STARTUP) $*.o to $@ lib $(LIBS) addsym \
		map $@.map,fhx fwidth 32 pwidth 32 swidth 32

rand: rand.o
	@echo "Linking $@"
	@slink $(STARTUP) $*.o to $@ lib $(LIBS) addsym \
		map $@.map,fhx fwidth 32 pwidth 32 swidth 32

fstat_test: fstat_test.o
	@echo "Linking $@"
	@slink $(STARTUP) $*.o to $@ lib $(LIBS) addsym \
		map $@.map,fhx fwidth 32 pwidth 32 swidth 32

base_dir_nametest: base_dir_nametest.o
	@echo "Linking $@"
	@slink $(STARTUP) $*.o to $@ lib $(LIBS) addsym \
		map $@.map,fhx fwidth 32 pwidth 32 swidth 32

malloc-test: malloc-test.mo
	@echo "Linking $@"
	@slink $(STARTUP) $*.mo to $@ lib $(MATH_LIBS) addsym \
		map $@.map,fhx fwidth 32 pwidth 32 swidth 32

slab-test: slab-test.o
	@echo "Linking $@"
	@slink $(STARTUP) $*.o to $@ lib $(LIBS) addsym \
		map $@.map,fhx fwidth 32 pwidth 32 swidth 32

##############################################################################

mkid:
	mkid \#?.(c|h|asm|i) include/\#?.(c|h|asm|i) include/sys/\#?.(c|h|asm|i)

update:
	mkid -v -u
