TESTS = $(ALL)
TARGETS = dist broadcast timer multi-edge edge interrupt repeat reentrant init reset read-write
ALL = $(TARGETS:%=%.le) $(TARGETS:%=%.be)
INCLUDES = opic.h

all: $(ALL)

RUN_FLAGS= \
	-o '/\#address-cells 1' \
	-o '/openprom/options/smp 3' \
	\
        -o '/phb@0x80000000/\#address-cells 3' \
	-o '/phb@0x80000000/\#size-cells 2' \
	-o '/phb@0x80000000/ranges \
		nm0,0,0,80000000 0x80000000 0x10000000 \
		ni0,0,0,0 0xc0000000 0x10000' \
	\
	-o '/phb/opic@0/reg 0 0 nm0,0,0,80f00000 0x40000' \
	-o '/phb/opic/interrupt-ranges 0 0 0 7' \
	-o '/phb/glue@1/reg 1 0 nm0,0,0,80010000 28' \
	-o '/phb/glue@1 > 0 irq0 /phb/opic' \
	-o '/phb/glue@1 > 1 irq1 /phb/opic' \
	-o '/phb/glue@1 > 2 irq2 /phb/opic' \
	-o '/phb/glue@1 > 3 irq3 /phb/opic' \
	-o '/phb/glue@1 > 4 irq4 /phb/opic' \
	-o '/phb/glue@1 > 5 irq5 /phb/opic' \
	-o '/phb/glue@1 > 6 irq6 /phb/opic' \
	-o '/phb/glue@2/reg 2 0 nm0,0,0,80020000 12' \
	-o '/phb/opic > intr0 0 /phb/glue@2' \
	-o '/phb/opic > intr1 1 /phb/glue@2' \
	-o '/phb/opic > intr2 2 /phb/glue@2' \
	-o '/phb/glue@3/reg 3 0 nm0,0,0,80030000 12' \
	-o '/phb/opic > init0 0 /phb/glue@3' \
	-o '/phb/opic > init1 1 /phb/glue@3' \
	-o '/phb/opic > init2 2 /phb/glue@3' \
	-t opic-device -t events

RUN_ARGS=/phb/opic 0x80f00000 0x80010000 7 0x80020000 3 0x80030000 3

LIB = ../lib/libof
LDFLAGS=-Ttext 0x10000
CRT0 = ../lib/of1275_note_real opic
CONFIG_TARGET = powerpc-eabi
AS=$(CONFIG_TARGET)-as
LD=$(CONFIG_TARGET)-ld -g
CC=$(CONFIG_TARGET)-gcc -g
AR=$(CONFIG_TARGET)-ar
#RUN=$(CONFIG_TARGET)-run
RUN=$$HOME/build/psim/build/sim/ppc/run
RANLIB=$(CONFIG_TARGET)-ranlib
CFLAGS= -v

.SUFFIXES: # drop .a
.SUFFIXES: .S .s .c .bo .lo .be .le .ba .la

%.bo: %.s
	$(AS) -mbig -o $@ $<
%.bo: %.S
	$(CC) -mbig -E -I. $< > $@,
	$(AS) -mbig $@, -o $@,,
	rm $@,
	mv $@,, $@
%.bo: %.c $(INCLUDES)
	$(CC) -mbig -c -I. -o $@ $<
%.be: %.bo $(LIB:%=%.ba) $(CRT0:%=%.bo)
	$(LD) $(LDFLAGS) -oformat elf32-powerpc -o $@ $(CRT0:%=%.bo) $< $(LIB:%=%.ba)

%.lo: %.s
	$(AS) -mlittle -o $@ $<
%.lo: %.S
	$(CC) -mlittle -E -I. $< > $@,
	$(AS) -mlittle $@, -o $@,,
	rm $@,
	mv $@,, $@
%.lo: %.c $(INCLUDES)
	$(CC) -mlittle -I. -c -o $@ $<
%.le: %.lo $(LIB:%=%.la) $(CRT0:%=%.lo)
	$(LD) $(LDFLAGS) -oformat elf32-powerpcle -o $@ $(CRT0:%=%.lo) $< $(LIB:%=%.la)

tests test: all
	@dir=`pwd` ; \
	dir=`basename $$dir` ; \
	for t in x $(TESTS) ; \
	do \
	  if [ $$t = x ] ; \
	  then \
	    continue ; \
	  else \
	    echo "****" ; \
	    echo "**** Running $$dir/$$t" ; \
	    echo "****" ; \
	    ( set -xe ; \
	        $(RUN_PREFIX) \
		$(RUN) \
		$(RUN_FLAGS) \
		$$t \
		$(RUN_ARGS) \
	    ) || exit 1 ; \
	  fi \
	done

Makefile: Makefile.in ../Makefile.in
	cat Makefile.in ../Makefile.in > Makefile~
	mv Makefile~ Makefile


clean:
	rm -f $(ALL)
	rm -f *.o *.bo *.lo *.be
	rm -f *.a *.ba *.la *.le
	rm -f *, *~
	rm -f *.core

tidy:
	rm -f *.core
	rm -f *, *~
