# Makefile, (test), ilibc_64.a
# Byron Young, 2002


#DEBUG:=0
DEBUG:=1

# ## test C source files (must end with .c)
SRC_C:=hello.c mod2.c

# ## asm source files (must end with .S)
SRC_S:=

CFLAGS_G:=-static -O0 -Wa,-a -I/home/bky/include
# -L/home/bky/lib -lilibc_64
CFLAGS_D:=-g -DDEBUG=1
CFLAGS_R:=-DDEBUG=0

ifeq ($(DEBUG),0)
CFLAGS:=$(CFLAGS_R)
LIB_TO_USE:=/home/bky/lib/libilibc_64.a
else
CFLAGS:=$(CFLAGS_D)
LIB_TO_USE:=/home/bky/lib/libilibcd64.a
endif

EXE_FILE_NAME:=tst

OBJS:=$(SRC_C:.c=.o) $(SRC_S:.S=.o)
LST_FILES:=$(OBJS:.o=.lst)
MAP_FILE:=$(EXE_FILE_NAME).map
DBG_FILE:=$(EXE_FILE_NAME).dbg

SECONDARY_FILES:= $(SRC_C:.c=.i) $(OBJS:.o=.s) $(LST_FILES) $(MAP_FILE)

MKFILES:=Makefile

PROJECT_FILES_A= $(SRC_C) $(SRC_S) $(SECONDARY_FILES) $(MKFILES) $(DBG_FILE) $(INCLUDE_FILES)
PROJECT_FILES:=$(PROJECT_FILES_A:%=test/%)

.SUFFIXES:
.SUFFIXES:.c .o .s .i .S

all : $(EXE_FILE_NAME)
	@file $(EXE_FILE_NAME)

$(EXE_FILE_NAME) : $(OBJS)
	@echo Linking $^
	@$(CC) $(CFLAGS_G) $(CFLAGS) -Wl,-Map -Wl,$(EXE_FILE_NAME).map $^ $(LIB_TO_USE) -o $(EXE_FILE_NAME)

# cancel implicit rule
%.o : %.c

# cancel implicit rule
%.o : %.S

# do not delete "secondary" files
.SECONDARY:  $(SECONDARY_FILES)

%.i : %.c
	@echo Preprocessing $*.c to $*.i
	@$(CC) $(CFLAGS_G) $(CFLAGS) -E $*.c > $*.i

%.s : %.i
	@echo Translating to assembly $*.i to $*.s
	@$(CC) $(CFLAGS_G) $(CFLAGS) -S $*.i -o $*.s

%.s : %.S
	@echo Preprocessing $*.S to $*.s
	@$(CC) $(CFLAGS_G) $(CFLAGS) -E $*.S > $*.s

%.o : %.s
	@echo Creating object file from $*.s to $*.o
	@$(CC) $(CFLAGS_G) $(CFLAGS) -Wa,-a -c $*.s -o $*.o > $*.lst

clean:
	@echo Cleaning project directory
	@rm -rf *.lst
	@rm -rf *.i
	@rm -rf *~
	@rm -rf *.o
	@rm -rf $(EXE_FILE_NAME)
	@rm -rf $(MAP_FILE)
	@rm -rf *.s
	@rm -f tst.txt

xdbg :
	xski -i $(EXE_FILE_NAME).dbg $(EXE_FILE_NAME)&


run :
	./$(EXE_FILE_NAME)
	@echo Done.

setup:
	@echo PF="\"""$$"PF $(PROJECT_FILES)"\"" >> ../setup.sh







