# GNU set up
GNU_PATH=/usr/arm-elf/bin
GNU_UTILITY_PATH=/usr/bin
GNU_LIBPATH=/usr/arm-elf/lib

# search path for source header file
INC= -I./../../../../h 


PREFIX=$(GNU_PATH)
CC= $(PREFIX)/gcc
LD= $(PREFIX)/ld
AR= $(PREFIX)/ar
AS= $(PREFIX)/as
NM= $(PREFIX)/nm
RANLIBX= $(PREFIX)/ranlib
STRIP= $(PREFIX)/strip
OBJCOPY= $(GNU_UTILITY_PATH)/arm-elf-objcopy


# base compiler options
#BASECFLAG=-mbig-endian -mcpu=arm7tdmi
#BASECFLAG=-mbig-endian $(CPU_FLAG)
BASECFLAG=$(ENDIAN) $(CPU_FLAG) 

# defines/undefines
ifeq ($(TOOLSET), arm)
DEF= -DDOTNETMF -DNETOS_ARM_TOOLS -DNET_OS -DNET_WORKS
else
DEF= -D__GNU__ -DNETOS_GNU_TOOLS -DNET_OS -DNET_WORKS 
endif

# final C compiler options
CCFLAGS=$(DEBUG_FLAG) $(BASECFLAG) $(DEF) $(INC)

DEPEND=depend.mk
LIBC=../libs/libc.a

ifeq ($(TOOLSET), arm)
OBJECTS=retarget.o
else
OBJECTS=syscalls.o mlock.o sysclose.o sysopen.o syswrite.o sysread.o crt0.o atexit.o exit.o
LIBCOBJECTS=syscalls.o mlock.o sysclose.o sysopen.o syswrite.o sysread.o atexit.o exit.o
CFILES=syscalls.c mlock.c sysclose.c sysopen.c syswrite.c sysread.c atexit.c exit.c
endif

%.o: %.c
	$(CC) -c $(INC) $(CCFLAGS) $< -o $@

ifeq ($(TOOLSET), arm)
# .arm files are preprocessed by the C compilier
$(OBJS)/%.s : %.arm
	$(CC) -c $(INC) $(CCFLAGS) -DASSEMBLY $< -o $(basename $@).s1
	armpre $(basename $@).s1 $@
	cp $@ $(basename $@).cpy

# .S files are preprocessed by the C compilier
$(OBJS)/%.s : %.S
	$(CC) -c $(INC) $(CCFLAGS) -DASSEMBLY $< -o $(basename $@).s1
	armpre $(basename $@).s1 $@
	cp $@ $(basename $@).cpy

%.o: %.s
else
%.o: %.S
endif
	$(CC) -c $(CCFLAGS) $< -o $@

# goal(s)
all: $(LIBC)


$(LIBC): $(OBJECTS)
ifeq ($(TOOLSET), arm)
else
	$(AR) -r $(LIBC) $(LIBCOBJECTS)
endif

# generate dependencies
$(DEPEND): $(CFILES) Makefile
	$(CC) $(INC) $(CCFLAGS) -M $(CFILES) > $(DEPEND)

# clean up
clean:
	rm -f $(OBJECTS) $(DEPEND)

# header dep.
-include $(DEPEND)

