#
#  @(#) $Id: Makefile,v 1.1 2000/11/14 16:28:41 honda Exp $
# 

#
#  å̾
#
CPU = sh3
SYS = dvesh7700

#
#  Cygwinǥѥ뤹뤫ɤ
#
#CYGWIN = true

#
#  CץץåΥޥ̾
#
CPP = cpp

#
#  åȰ¸
#
include ../config/$(CPU)/Makefile.config
include ../config/$(CPU)/$(SYS)/Makefile.config

#
#  ̥ѥ륪ץ
#
INCLUDES = -I. -I../include -I../config/$(CPU) -I../config/$(CPU)/$(SYS)
CFLAGS := $(CFLAGS) $(INCLUDES) -g -Wall -DWITH_STUB
LDFLAGS := -nostdlib $(LDFLAGS)
LIBS = -lgcc

#
#  ץꥱץ˴ؤ
#
UTASK = sample1
UTASK_CFG = $(UTASK).cfg

UTASK_DIR = ../libjsp
UTASK_ASMOBJS =
UTASK_COBJS = $(UTASK).o
UTASK_CFLAGS =
UTASK_LIBS =

#
#  ƥॵӥ˴ؤ
#
STASK_DIR = ../systask:../libjsp
STASK_ASMOBJS =
STASK_COBJS = syslog.o timer.o  \
	      jsp_perror.o strerror.o
STASK_CFLAGS = -I../systask
STASK_LIBS =

#
#  ͥ˴ؤ
#
KERNEL = ../kernel
KERNEL_DIR = ../config/$(CPU):../config/$(CPU)/$(SYS):$(KERNEL)
KERNEL_ASMOBJS = cpu_support.o sys_support.o
KERNEL_COBJS = startup.o banner.o cpu_config.o sys_config.o \
	       task.o wait.o time_event.o kernel_cfg.o \
	       task_manage.o task_sync.o task_except.o \
	       semaphore.o eventflag.o dataqueue.o mailbox.o mempfix.o \
	       time_manage.o cyclic.o sys_manage.o interrupt.o exception.o
KERNEL_AUX_COBJS = makeoffset.o
KERNEL_CFLAGS = -I$(KERNEL)

#
#  ȥåץ⥸塼˴ؤ
#
ifndef START_OBJS
    START_OBJS = start.o
endif

#
#  åȥե
#
all: jsp.bin

##### ʲԽʤ #####

#
#  ͥΥե졼ե
#
kernel_cfg.c: $(UTASK_CFG)
	$(CPP) $(INCLUDES) $(UTASK_CFG) | ../cfg/cfg

#
#  offset.h §
#
offset.h: makeoffset.s ../utils/genoffset
	../utils/genoffset makeoffset.s > offset.h

#
#  ֥ȥե̾Cygwin Ǥ .exe դ
#
ifneq ($(CYGWIN),true)
    JSPOBJ = jsp
else
    JSPOBJ = jsp.exe
endif

#
#  եΤǥ쥯ȥ˴ؤ
#
SRCDIR = $(KERNEL_DIR):$(STASK_DIR):$(UTASK_DIR)

vpath %.c $(SRCDIR)
vpath %.S $(SRCDIR)

#
#  ѥΤѿ
#
KERNEL_ALL_COBJS = $(KERNEL_COBJS) $(KERNEL_AUX_COBJS)
KERNEL_OBJS = $(KERNEL_ASMOBJS) $(KERNEL_COBJS)
STASK_OBJS = $(STASK_ASMOBJS) $(STASK_COBJS)
UTASK_OBJS = $(UTASK_ASMOBJS) $(UTASK_COBJS)
OBJS = $(START_OBJS) $(KERNEL_OBJS) $(STASK_OBJS) $(UTASK_OBJS)

ifdef TEXT_START_ADDRESS
    LDFLAGS := $(LDFLAGS) -Wl,-Ttext,$(TEXT_START_ADDRESS)
endif
ifdef DATA_START_ADDRESS
    LDFLAGS := $(LDFLAGS) -Wl,-Tdata,$(DATA_START_ADDRESS)
endif
ifdef LDSCRIPT
    LDFLAGS := $(LDFLAGS) -T ../config/$(LDSCRIPT)
endif
LIBS := $(STASK_LIBS) $(UTASK_LIBS) $(LIBS)

#
#  ̤ʰ¸ط
#
banner.o: Makefile $(filter-out banner.o,$(OBJS))

#
#  ΤΥ
#
$(JSPOBJ): Makefile Makefile.depend kernel_cfg.c offset.h $(OBJS)
	$(CC) $(CFLAGS) $(LDFLAGS) -o jsp $(OBJS) $(LIBS)

#
#  Хʥե
#
jsp.bin: $(JSPOBJ)
	$(OBJCOPY) -O binary -S $(JSPOBJ) jsp.bin

#
#  S쥳ɥե
#
jsp.S: $(JSPOBJ)
	$(OBJCOPY) -O srec -S $(JSPOBJ) jsp.S

#
#  ѥ̤ξõ
#
clean:
	rm -f \#* *~ *.o
	rm -f jsp jsp.exe jsp.bin jsp.S
	rm -f kernel_cfg.c kernel_id.h
	rm -f makeoffset.s offset.h

cleandep:
	rm -f Makefile.depend

realclean: cleandep clean

#
#  ¸طե
#
depend: kernel_cfg.c offset.h
	rm -f Makefile.depend
	../utils/makedep -P cpp -T kernel_cfg.c \
		-O "$(INCLUDES)" $(UTASK_CFG) \
		>> Makefile.depend
	../utils/makedep -C $(CC) -S $(KERNEL_DIR) \
		-O "$(CFLAGS) $(KERNEL_CFLAGS)" \
		$(KERNEL_ASMOBJS:.o=.S) $(KERNEL_COBJS:.o=.c) \
		>> Makefile.depend
	../utils/makedep -C $(CC) -S $(KERNEL_DIR) \
		-O "$(CFLAGS) $(KERNEL_CFLAGS)" \
		-s makeoffset.c >> Makefile.depend
	../utils/makedep -C $(CC) -S $(STASK_DIR) \
		-O "$(CFLAGS) $(STASK_CFLAGS)" \
		$(STASK_ASMOBJS:.o=.S) $(STASK_COBJS:.o=.c) \
		>> Makefile.depend
	../utils/makedep -C $(CC) -S $(UTASK_DIR) \
		-O "$(CFLAGS) $(UTASK_CFLAGS)" \
		$(UTASK_ASMOBJS:.o=.S) $(UTASK_COBJS:.o=.c) \
		>> Makefile.depend

#
#  ¸طե򥤥󥯥롼
#
-include Makefile.depend

#
#  ѥ롼
#
$(START_OBJS): %.o: %.S
	$(CC) -c $(CFLAGS) $(KERNEL_CFLAGS) $<

$(KERNEL_ALL_COBJS): %.o: %.c
	$(CC) -c $(CFLAGS) $(KERNEL_CFLAGS) $<

$(KERNEL_ALL_COBJS:.o=.s): %.s: %.c
	$(CC) -S $(CFLAGS) $(KERNEL_CFLAGS) $<

$(KERNEL_ASMOBJS): %.o: %.S
	$(CC) -c $(CFLAGS) $(KERNEL_CFLAGS) $<

$(STASK_COBJS): %.o: %.c
	$(CC) -c $(CFLAGS) $(STASK_CFLAGS) $<

$(STASK_COBJS:.o=.s): %.s: %.c
	$(CC) -S $(CFLAGS) $(STASK_CFLAGS) $<

ifdef $(STASK_ASMOBJS)
$(STASK_ASMOBJS): %.o: %.S
	$(CC) -c $(CFLAGS) $(STASK_CFLAGS) $<
endif

$(UTASK_COBJS): %.o: %.c
	$(CC) -c $(CFLAGS) $(UTASK_CFLAGS) $<

$(UTASK_COBJS:.o=.s): %.s: %.c
	$(CC) -S $(CFLAGS) $(UTASK_CFLAGS) $<

ifdef $(UTASK_ASMOBJS)
$(UTASK_ASMOBJS): %.o: %.S
	$(CC) -c $(CFLAGS) $(UTASK_CFLAGS) $<
endif

#
#  ǥեȥѥ롼
#
%.o: %.c
	@echo "*** Default compile rules should not be used."
	$(CC) -c $(CFLAGS) $<

%.s: %.c
	@echo "*** Default compile rules should not be used."
	$(CC) -S $(CFLAGS) $<

%.o: %.S
	@echo "*** Default compile rules should not be used."
	$(CC) -c $(CFLAGS) $<
