# Where you want it installed when you do 'make install'
PREFIX=/usr/local
# Where you want the includes to go when you do 'make install'
IPREFIX=/usr/local

# You shouldn't have to touch the rest unless the compile is failing for some reason?
DISTNAME=b0
VERSION=0.0.20
SRC=./src
EXAMPLE_DIR=./examples
B0_SRC=$(SRC)/b0.b0 $(SRC)/b0.h.b0 $(SRC)/core.b0 $(SRC)/b0_libc.b0 $(SRC)/b0_linux.b0 $(SRC)/b0_win64.b0 $(SRC)/b0_freebsd.b0 $(SRC)/b0_stdlib.b0 $(SRC)/b0_variables.b0

# To assist in cross-compiling
CC=gcc
AS=fasm
CFLAGS=-Wall -O2 -mtune=opteron -m64 -I$(SRC)
LDFLAGS=
ASFLAGS=-m512000

#flags for ghostscript and html2ps
GS=gs
GSFLAGS=-sDEVICE=pdfwrite -q -dNOPAUSE -dBATCH
HTML2PS=html2ps

#flags for building the examples
B0_FLAGS=-W
B0_FLAGS_EX=-W -felf

all: b0

#We build the C version by default (since it's the one that works on all *nix platforms)
b0: b0_bootstrap $(B0_SRC)
	mv b0_bootstrap b0
	
b0_bootstrap: $(SRC)/b0.c $(SRC)/b0.h
	$(CC) $(CFLAGS) -s $(LDFLAGS) -o b0_bootstrap $(SRC)/b0.c

b0_ia32: $(SRC)/b0.c $(SRC)/b0.h
	$(CC) -Wall -O2 -I$(SRC) -Di386 -s $(LDFLAGS) -o b0_ia32 $(SRC)/b0.c

b0_libc:  b0_bootstrap $(B0_SRC)
	./b0_bootstrap $(B0_FLAGS) -felfo -i./src:./include $(SRC)/b0.b0
	$(AS) -m512000 $(SRC)/b0.asm ./b0.o
	$(CC) $(CFLAGS) $(LDFLAGS) -s -o b0 b0.o
	rm -f $(SRC)/b0.asm ./b0.o
	
b0_linux:  b0_bootstrap $(B0_SRC)
	./b0_bootstrap $(B0_FLAGS) -felf -i./src:./include $(SRC)/b0.b0
	$(AS) $(ASFLAGS) $(SRC)/b0.asm ./b0
	brandelf -t Linux ./b0

b0_freebsd:  b0_bootstrap $(B0_SRC)
	./b0_bootstrap $(B0_FLAGS) -felfo -i./src:./include $(SRC)/b0.b0
	$(AS) -m512000 $(SRC)/b0.asm ./b0.o
	$(CC) $(CFLAGS) $(LDFLAGS) -s -o b0 b0.o
	rm -f $(SRC)/b0.asm ./b0.o
	
clean: 
	rm -f *.o *.asm *.tmp *~ *.core b0 b0_bootstrap $(DISTNAME)-$(VERSION).tar.bz2 $(DISTNAME)-$(VERSION).tar.gz *.pdf *.ps $(EXAMPLE_DIR)/*.as* $(EXAMPLE_DIR)/*.o $(EXAMPLE_DIR)/*~ $(SRC)/*.as* $(SRC)/*.o $(SRC)/*~ include/*~ doc/*~ doc/css/*~
	
docs: ./doc/b0-man.html
	$(HTML2PS) -o b0.ps ./doc/b0-man.html
	$(GS) $(GSFLAGS) -sOutputFile=b0.pdf b0.ps
	rm -f ./b0.ps

install: b0
	if ( test ! -d $(PREFIX)/bin ) ; then mkdir -p $(PREFIX)/bin ; fi
	if ( test ! -d $(IPREFIX)/include ) ; then mkdir -p $(IPREFIX)/include ; fi
	if ( test ! -d $(IPREFIX)/include/b0 ) ; then mkdir -p $(IPREFIX)/include/b0 ; fi
	cp -f b0 $(PREFIX)/bin/b0
	chmod a+x $(PREFIX)/bin/b0
	cp -f ./include/* \
		$(IPREFIX)/include/b0
	cp -f ./doc/b0.man $(PREFIX)/man/man1/b0.1
	@echo 
	@echo Please set environment variable BO_INCLUDE=$(IPREFIX)/include/b0
	@echo 

uninstall:
	rm -fR $(IPREFIX)/include/b0
	rm -f $(PREFIX)/bin/b0
	rm -f $(PREFIX)/man/man1/b0.1
	
dist:
	rm -f $(DISTNAME)-$(VERSION).tar.bz2
	ln -sf . $(DISTNAME)-$(VERSION)
	tar -cf $(DISTNAME)-$(VERSION).tar \
	   $(DISTNAME)-$(VERSION)/Makefile \
	   $(DISTNAME)-$(VERSION)/README \
	   $(DISTNAME)-$(VERSION)/COPYING \
	   $(DISTNAME)-$(VERSION)/$(SRC)/b0.c \
	   $(DISTNAME)-$(VERSION)/$(SRC)/b0.h \
	   $(DISTNAME)-$(VERSION)/$(SRC)/b0.b0 \
	   $(DISTNAME)-$(VERSION)/$(SRC)/b0.h.b0 \
	   $(DISTNAME)-$(VERSION)/$(SRC)/core.b0 \
	   $(DISTNAME)-$(VERSION)/$(SRC)/b0_libc.b0 \
	   $(DISTNAME)-$(VERSION)/$(SRC)/b0_linux.b0 \
	   $(DISTNAME)-$(VERSION)/$(SRC)/b0_win64.b0 \
	   $(DISTNAME)-$(VERSION)/$(SRC)/b0_stdlib.b0 \
	   $(DISTNAME)-$(VERSION)/$(SRC)/b0_linux.b0 \
	   $(DISTNAME)-$(VERSION)/$(SRC)/b0_variables.b0 \
	   $(DISTNAME)-$(VERSION)/include/std_char.b0 \
	   $(DISTNAME)-$(VERSION)/include/stdlib.b0 \
	   $(DISTNAME)-$(VERSION)/include/stdlib_linux.b0 \
	   $(DISTNAME)-$(VERSION)/include/stdlib_unicode.b0 \
	   $(DISTNAME)-$(VERSION)/doc/b0.man \
	   $(DISTNAME)-$(VERSION)/doc/b0.html \
	   $(DISTNAME)-$(VERSION)/doc/b0-man.html \
	   $(DISTNAME)-$(VERSION)/doc/b0-ver.html \
	   $(DISTNAME)-$(VERSION)/doc/b0-tutorial.html \
	   $(DISTNAME)-$(VERSION)/doc/b0-internals.html \
	   $(DISTNAME)-$(VERSION)/doc/stdlib.html \
	   $(DISTNAME)-$(VERSION)/doc/jedit/b0.xml \
	   $(DISTNAME)-$(VERSION)/doc/gedit/b0.xml \
	   $(DISTNAME)-$(VERSION)/doc/gedit/x-b0.xml \
	   $(DISTNAME)-$(VERSION)/doc/gedit/b0.lang \
	   $(DISTNAME)-$(VERSION)/doc/css/header.css \
	   $(DISTNAME)-$(VERSION)/doc/css/style.css \
	   $(DISTNAME)-$(VERSION)/doc/css/ui.js \
	   $(DISTNAME)-$(VERSION)/doc/css/bkgnd.gif \
	   $(DISTNAME)-$(VERSION)/doc/css/fontseriftoggle.gif \
	   $(DISTNAME)-$(VERSION)/doc/css/fontsizelarger.gif \
	   $(DISTNAME)-$(VERSION)/doc/css/fontsizesmaller.gif \
	   $(DISTNAME)-$(VERSION)/doc/css/reset.gif
	bzip2 -k $(DISTNAME)-$(VERSION).tar
	gzip $(DISTNAME)-$(VERSION).tar
	rm -f $(DISTNAME)-$(VERSION)

test2-libc: b0
	./b0 -felfo -i./src -i./include -v ./src/b0.b0
	$(AS) -m256000 $(SRC)/b0.asm ./b0.o
	$(CC) $(CFLAGS) $(LDFLAGS) -s -o b0_b02 b0.o
	mv ./src/b0.asm ./src/b0.asm_b0
	./b0_b02 -felfo -i./src -i./include -v ./src/b0.b0
	$(AS) -m256000 $(SRC)/b0.asm ./b0.o
	$(CC) $(CFLAGS) $(LDFLAGS) -s -o b0_b03 b0.o
	mv ./src/b0.asm ./src/b0.asm_b02
	./b0_b03 -felfo -i./src -i./include -v ./src/b0.b0
	diff -q -a ./src/b0.asm ./src/b0.asm_b0 
	diff -q -a ./src/b0.asm_b0 ./src/b0.asm_b02 
	rm ./src/b0.asm ./src/b0.asm_b0 ./src/b0.asm_b02 ./b0.o ./b0_b02 ./b0_b03
	
test2-linux: b0
	./b0 -felf -i./src -v ./src/b0.b0
	$(AS) -m256000 $(SRC)/b0.asm ./b0_b02
	brandelf -t Linux ./b0_b02
	mv ./src/b0.asm ./src/b0.asm_b0
	./b0_b02 -felf -i./src -v ./src/b0.b0
	$(AS) -m256000 $(SRC)/b0.asm ./b0_b03
	brandelf -t Linux ./b0_b03
	mv ./src/b0.asm ./src/b0.asm_b02
	./b0_b03 -felf -i./src -v ./src/b0.b0
	diff -q -a ./src/b0.asm ./src/b0.asm_b0 
	diff -q -a ./src/b0.asm_b0 ./src/b0.asm_b02 
	rm ./src/b0.asm ./src/b0.asm_b0 ./src/b0.asm_b02 ./b0_b02 ./b0_b03
	
test2-freebsd: b0
	./b0 -felfo -i./src -i./include -v ./src/b0.b0
	$(AS) -m512000 $(SRC)/b0.asm ./b0.o
	$(CC) $(CFLAGS) $(LDFLAGS) -s -o b0_b02 b0.o
	mv ./src/b0.asm ./src/b0.asm_b0
	./b0_b02 -felfo -i./src  -i./include -v ./src/b0.b0
	$(AS) -m512000 $(SRC)/b0.asm ./b0.o
	$(CC) $(CFLAGS) $(LDFLAGS) -s -o b0_b03 b0.o
	mv ./src/b0.asm ./src/b0.asm_b02
	./b0_b03 -felfo -i./src -i./include -v ./src/b0.b0
	diff -q -a ./src/b0.asm ./src/b0.asm_b0 
	diff -q -a ./src/b0.asm_b0 ./src/b0.asm_b02 
	rm ./src/b0.asm ./src/b0.asm_b0 ./src/b0.asm_b02 ./b0.o ./b0_b02 ./b0_b03

