muforth/Makefile.in

# This file is part of muFORTH: http://pages.nimblemachines.com/muforth
#
# Copyright (c) 2002-2008 David Frech. All rights reserved, and all wrongs
# reversed. (See the file COPYRIGHT for details.)

###
### Makefile for muforth, a "micro" Forth
###

# Set by configure
SEDEXT=		%sedext%

CFLAGS=		-O2 -Wall -fomit-frame-pointer
#CFLAGS=	-g -Wall -fomit-frame-pointer -DDEBUG -DBEING_DEFINED
LDFLAGS=

# Core objects
COREOBJS=	kernel.o interpret.o dict.o file.o \
		error.o time.o tty.o select.o engine-itc.o

# If any of these files changes, make a new version.h
VERSOBJS=	${COREOBJS}

ALLOBJS=	${VERSOBJS} muforth.o
DEPFILES=	Makefile muforth.h env.h

.PHONY: all clean httplink diffsed

all : public.h muforth

${ALLOBJS} : ${DEPFILES}

muforth.o : version.h

public.h : ${ALLOBJS:.o=.ph}
	@echo Making ${.TARGET}
	(echo "/* This file is automagically generated. Do not edit! */"; \
	cat ${.ALLSRC}) > ${.TARGET}

forth_chain.h : public.h scripts/gen_dict_chain.sed
	@echo Making ${.TARGET}
	@(echo "/* This file is automagically generated. Do not edit! */"; \
	sed ${SEDEXT} \
		-e '/^void mu_compiler/d' \
		-f scripts/gen_dict_chain.sed public.h \
	) > ${.TARGET}

compiler_chain.h : public.h scripts/gen_dict_chain.sed
	@echo Making ${.TARGET}
	@(echo "/* This file is automagically generated. Do not edit! */"; \
	sed ${SEDEXT} \
		-e '/^void mu_compiler/!d' \
		-e 's/mu_compiler_/mu_/' \
		-f scripts/gen_dict_chain.sed \
		-e 's/mu_/mu_compiler_/' public.h \
	) > ${.TARGET}

dict.o : forth_chain.h compiler_chain.h

.SUFFIXES : .ph

.c.ph : Makefile
	@echo Making ${.TARGET}
	@(echo "/* ${.IMPSRC} */"; \
	sed ${SEDEXT} -n \
		-e '/^#if/,/^#endif/d' \
		-e '/^static /d' \
		-e 's/^([a-z]+ \**[a-z_0-9]+)\((void)?\).*$$/\1(void);/p' \
		-e 's/^(pw [a-z_0-9]+).*;$$/extern \1;/p' \
		${.IMPSRC}; \
	echo) > ${.TARGET}

env.h : envtest
	./envtest > ${.TARGET}

version.h : Makefile ${VERSOBJS:.o=.c}
	@echo Making ${.TARGET}
	@echo "time_t build_time = `date \"+%s\"`;" > version.h

muforth : ${ALLOBJS} ${DEPFILES}
	${CC} ${LDFLAGS} -o $@ ${ALLOBJS} ${LIBS}

.c.asm : Makefile muforth.h
	${CC} ${CFLAGS} -S -o ${.TARGET} -c ${.IMPSRC}

clean :
	rm -f muforth version.h *.o *.asm env.h envtest
	rm -f *.ph public.h forth_chain.h compiler_chain.h

distclean : clean
	rm -f Makefile GNUmakefile *.sed

# program avr via avrdude
avr.img : target/AVR/loader.mu4 target/AVR/bitbang.mu4
	./muforth -v -f target/AVR/loader.mu4 -f target/AVR/bitbang.mu4 bye

avr : avr.img
	avrdude -v -c stk500 -p t45 -P /dev/ttyS0 -U flash:w:${.IMPSRC}:r

# install Vim bits
install-vim :
	tar cf - .vim | (cd ~; tar xf -)

### BSD start ###

#############################################################################
## Targets for packaging things up, esp for people without sed, sh, etc.
#############################################################################

# put or modify links to homepage in source files
SEDFILES=	README Makefile.in muforth.h *.c *.mu4
MU4DIRS=	Test cf games lib target target/common target-arm
httplink :
	for f in ${SEDFILES}; do \
		sed ${SEDEXT} -f scripts/httplink.sed $$f > $$f.sed; done
	for d in ${MU4DIRS}; do \
		for f in $$d/*.mu4; do \
			sed ${SEDEXT} -f scripts/httplink.sed $$f > $$f.sed; done; done

diffsed :
	-(for f in ${SEDFILES}; do diff -u $$f $$f.sed ; done) | less
	-(for d in ${MU4DIRS}; do \
		for f in $$d/*.mu4; do \
			diff -u $$f $$f.sed; done; done) | less

mvsed :
	for f in ${SEDFILES}; do mv -f $$f.sed $$f ; done
	for d in ${MU4DIRS}; do \
		for f in $$d/*.mu4; do \
			mv -f $$f.sed $$f; done; done

GNUmakefile : Makefile.in
	mv Makefile BSDmakefile
	./configure.sh gnu
	mv Makefile GNUmakefile
	mv BSDmakefile Makefile

# make the files that are hard to make, eg , for people on Windows ;-)
HFILES=		version.h public.h forth_chain.h compiler_chain.h
hfiles : ${HFILES}

MUFORTH!=	basename ${.CURDIR}
distmax : distclean GNUmakefile ${HFILES}
	(cd ..; tar cvf - \
		--exclude .svn \
		--exclude "*.tar.gz" \
		--exclude "*~" ${MUFORTH} | \
		gzip -9 > muforth-max.tar.gz)

# same as above, but without the generated .h files
dist : distclean GNUmakefile
	(cd ..; tar cvf - \
		--exclude .svn \
		--exclude "*.tar.gz" \
		--exclude "*~" ${MUFORTH} | \
		gzip -9 > muforth.tar.gz)

dists ! dist distmax

### BSD end ###