##
## Trivial Linux Loader for SPARC
##
##

CC=gcc 
LD=ld
RM=/bin/rm -f
ELFTOAOUT=elftoaout
GZIP=gzip

CFLAGS = -O2

# Relocate to 3.75MB
# Hopefully, 4MB are guaranteed to be mapped.
LDFLAGS=-N -Ttext 0x3c0000
# This is even more, but will be used only for extra large images.
LDFLAGS2=-N -Ttext 0x4c0000

.c.o:
	$(CC) $(CFLAGS) -c $*.c

.S.o:
	$(CC) $(CFLAGS) -c $*.S

OBJS = crt0.o tilo.o printf.o jmp.o prom.o console.o malloc.o memops.o urem.o tree.o udiv.o
OBJS2 = crt0l.o tilol.o printf.o jmp.o prom.o console.o mallocl.o memops.o urem.o tree.o udiv.o

../maketilo: maketilo.c b.h b2.h
	$(CC) maketilo.c -o ../maketilo

b.h : b.out bin2h
	./bin2h b.out >b.h

b2.h : b2.out bin2h
	./bin2h b2.out | sed 's/boot_loader/large_boot_loader/;s/BOOT_LEN/LARGE_BOOT_LEN/' >b2.h

b.out: $(OBJS)
	$(LD) $(LDFLAGS) -Bstatic -o boot $(OBJS)
	$(ELFTOAOUT) boot -o b.out

b2.out: $(OBJS2)
	$(LD) $(LDFLAGS2) -Bstatic -o boot2 $(OBJS2)
	$(ELFTOAOUT) boot2 -o b2.out

bin2h : bin2h.c
	$(CC) bin2h.c -o bin2h

malloc.o:      malloc.c tilo.h
printf.o:      printf.c tilo.h
console.o:     console.c tilo.h
tree.o:	       tree.c tilo.h
tilo.o:	       tilo.c inflate.c tilo.h
memops.o:      memops.c
udiv.o:        udiv.S
urem.o:        urem.S
jmp.o:	       jmp.S
prom.o:	       prom.c promlib.h

mallocl.o: malloc.c tilo.h
	$(CC) $(CFLAGS) -DLARGETILO -c -o mallocl.o malloc.c

tilol.o: tilo.c inflate.c tilo.h
	$(CC) $(CFLAGS) -DLARGETILO -c -o tilol.o tilo.c

crt0.o:	crt0.S
	$(CC) $(CFLAGS) -E -o crt0.s crt0.S
	$(AS) -Av9 -o crt0.o crt0.s
	$(RM) crt0.s

crt0l.o: crt0.S
	$(CC) $(CFLAGS) -DLARGETILO -E -o crt0l.s crt0.S
	$(AS) -Av9 -o crt0l.o crt0l.s
	$(RM) crt0l.s

prom.o: prom.c
	$(CC) $(CFLAGS) -S -o prom.s prom.c
	$(AS) -Av9 -o prom.o prom.s
	$(RM) prom.s

clean:
	$(RM) $(OBJS) $(OBJS2) core *~ boot b.out boot2 b2.out bin2h b.h b2.h
