Makefile revision 45519
118390Speter#
245519Sbde# $Id: Makefile,v 1.24 1999/04/08 23:37:46 obrien Exp $
318390Speter#
418390Speter
518390Speter#
618390Speter# This could probably be merged with ../cc_int/Makefile, but bsd.lib.mk
734112Sbde# is such a !@#!*#% nightmare because of how it reprograms the dependencies,
818390Speter# suffix rules, SRCS, etc.  It's easiest to cheat by using bsd.prog.mk and
918390Speter# SRCS to get dependencies.
1018390Speter#
1118390Speter
1235402Sbde# ../Makefile.inc will put an absolute path to our objdir in CFLAGS.
1335402Sbde# Prevent mkdep from using it, so that we don't have to give rules for
1435402Sbde# aliases of generated headers.
1535402Sbde#
1645299SobrienCFLAGS+=	-I${GCCDIR}/objc
1735402Sbde
1818390Speter.include "../Makefile.inc"
1918390Speter
2045299Sobrien.PATH: ${GCCDIR} ${GCCDIR}/cp
2118390Speter
2218390Speter#-----------------------------------------------------------------------
2318390Speter# insn-* gunk
2418390Speter
2535402Sbde.for i in attr codes config flags
2635402Sbdeinsn-$i.h: gen$i ${MD_FILE}
2718390Speter	./gen$i ${MD_FILE} > insn-$i.h
2835402SbdeGENSRCS+=	insn-$i.h
2918390Speter.endfor
3018390Speter
3135402Sbde.for i in attrtab emit extract opinit output peep recog
3235402Sbdeinsn-$i.c: gen$i ${MD_FILE}
3318390Speter	./gen$i ${MD_FILE} > insn-$i.c
3435402SbdeGENSRCS+=	insn-$i.c
3518390Speter.endfor
3618390Speter
3735402Sbde.for i in attr codes config emit extract flags opinit output peep recog
3837460Sbdebuild-tools: gen$i
3937460Sbde
4045299Sobriengen$i: gen$i.o rtl.o obstack.o bitmap.o
4138462Sjb	${CC} -static ${CFLAGS} ${LDFLAGS} -o ${.TARGET} ${.ALLSRC}
4218390Speter
4335402SbdeGENSRCS+=	gen$i.c
4435402SbdeCLEANFILES+=	gen$i
4518390Speter.endfor
4618390Speter
4745299Sobrien.for i in check genrtl
4845299Sobrienbuild-tools: gen$i
4945299Sobrien
5045299Sobriengen$i: gen$i.o
5145299Sobrien	${CC} -static ${CFLAGS} ${LDFLAGS} -o ${.TARGET} ${.ALLSRC}
5245299Sobrien
5345299SobrienGENSRCS+=	gen$i.c
5445299SobrienCLEANFILES+=	gen$i
5545299Sobrien.endfor
5645299Sobrien
5745519Sbde.ORDER: genrtl.c genrtl.h
5845299Sobriengenrtl.h genrtl.c: gengenrtl
5945299Sobrien	./gengenrtl genrtl.h genrtl.c
6045299Sobrien
6145466SobrienGENSRCS+=	genrtl.c genrtl.h
6245299Sobrien
6318390Speter.for i in attrtab
6437460Sbdebuild-tools: gen$i
6537460Sbde
6645299Sobriengen$i: gen$i.o rtl.o rtlanal.o print-rtl.o obstack.o bitmap.o
6738462Sjb	${CC} -static ${CFLAGS} ${LDFLAGS} -o ${.TARGET} ${.ALLSRC}
6818390Speter
6935402SbdeGENSRCS+=	gen$i.c
7035402SbdeCLEANFILES+=	gen$i
7118390Speter.endfor
7218390Speter
7345299SobrienSRCS+=		bitmap.c print-rtl.c rtl.c rtlanal.c obstack.c
7418390Speter#-----------------------------------------------------------------------
7518390Speter# C hash codes
7618390Speterc-gperf.h: c-parse.gperf
7718390Speter	gperf -p -j1 -i 1 -g -o -t -G -N is_reserved_word -k1,3,$$ \
7818390Speter		${GCCDIR}/c-parse.gperf > ${.TARGET}
7935402SbdeGENSRCS+=	c-gperf.h
8018390Speter
8118390Speter#-----------------------------------------------------------------------
8218390Speter# C++ hash codes
8318390Speterhash.h: gxx.gperf
8418390Speter	gperf -p -j1 -g -o -t -N is_reserved_word '-k1,4,7,$$' \
8518390Speter		${GCCDIR}/cp/gxx.gperf >hash.h
8635402SbdeGENSRCS+=	hash.h
8718390Speter
8818390Speter#-----------------------------------------------------------------------
8945299Sobrien# common parser stuff
9045299Sobrien
9145299Sobrientree-check.h: gencheck
9245299Sobrien	./gencheck > ${.TARGET}
9345519SbdeGENSRCS+=	tree-check.h
9445299Sobrien
9545299Sobrien#-----------------------------------------------------------------------
9618390Speter# C parser
9745519Sbde.ORDER: c-parse.c c-parse.h
9818390Speterc-parse.c c-parse.h: c-parse.in
9918390Speter	sed -e "/^ifobjc$$/,/^end ifobjc$$/d" \
10018390Speter	    -e "/^ifc$$/d" -e "/^end ifc$$/d" \
10118390Speter	    ${GCCDIR}/c-parse.in > c-parse.y
10218390Speter	${BISON} -d c-parse.y -o c-parse.c 
10318390Speter	rm -f c-parse.y
10418390Speter
10535402SbdeGENSRCS+=	c-parse.c c-parse.h
10635402SbdeCLEANFILES+=	c-parse.y		# insurance
10718390Speter
10818390Speter#-----------------------------------------------------------------------
10918390Speter# objc parser
11045519Sbde.ORDER: objc-parse.c objc-parse.h
11118390Speterobjc-parse.c objc-parse.h: c-parse.in
11218390Speter	sed -e "/^ifc$$/,/^end ifc$$/d" \
11318390Speter	    -e "/^ifobjc$$/d" -e "/^end ifobjc$$/d" \
11418390Speter	    ${GCCDIR}/c-parse.in > objc-parse.y
11518390Speter	${BISON} -d objc-parse.y -o objc-parse.c 
11618390Speter	rm -f objc-parse.y
11718390Speter
11835402SbdeGENSRCS+=	objc-parse.c objc-parse.h
11935402SbdeCLEANFILES+=	objc-parse.y		# insurance
12018390Speter
12118390Speter#-----------------------------------------------------------------------
12234112Sbde# C++ parser done in its own makefile
12318390Speter#-----------------------------------------------------------------------
12434112Sbde# CPP parser done in its own makefile
12518390Speter#-----------------------------------------------------------------------
12618390Speter# the host/target compiler config.
12718390Speter
12845299SobrienCOMMONHDRS=	config.h hconfig.h options.h specs.h tconfig.h tm.h multilib.h
12940457SbdeGENSRCS+=	${COMMONHDRS}
13034112Sbde
13145299Sobrienconfig.h hconfig.h:
13245299Sobrien	echo '#include "auto-host.h"' > ${.TARGET}
13345299Sobrien	echo '#include "${MACHINE_ARCH}/xm-${MACHINE_ARCH}.h"' >> ${.TARGET}
13445299Sobrien
13545299Sobrientconfig.h:
13645299Sobrien	echo '#include "${MACHINE_ARCH}/xm-${MACHINE_ARCH}.h"' > ${.TARGET}
13745299Sobrien
13840457Sbdeoptions.h:
13940457Sbde	echo '#include "cp/lang-options.h"' > ${.TARGET}
14045299Sobrien	#echo '#include "f/lang-options.h"' >> ${.TARGET}
14145299Sobrien
14240457Sbdespecs.h:
14345299Sobrien	echo '#include "cp/lang-specs.h"' > ${.TARGET}
14445299Sobrien	#echo '#include "f/lang-specs.h"'    >> ${.TARGET}
14545299Sobrien
14640457Sbdetm.h:
14745299Sobrien	echo '#include "${MACHINE_ARCH}/${MACHINE_ARCH}.h"' > ${.TARGET}
14845307Sobrien.if ${MACHINE_ARCH} == "i386"
14945299Sobrien	echo '#include "${MACHINE_ARCH}/att.h"' >> ${.TARGET}
15045307Sobrien.endif
15145299Sobrien	echo '#include "${MACHINE_ARCH}/freebsd.h"' >> ${.TARGET}
15245305Sobrien.if ${MACHINE_ARCH} == "i386"
15345299Sobrien	echo '#include "${MACHINE_ARCH}/perform.h"' >> ${.TARGET}
15445305Sobrien.endif
15518390Speter
15645299Sobrienmultilib.h: genmultilib
15745480Speter	echo 'static char *multilib_raw[] = {"aout maout;", "elf !maout;", NULL};' > multilib.h
15845480Speter	echo 'static char *multilib_matches_raw[] = {"maout maout;", "melf melf;", NULL};' >> multilib.h
15945340Speter	echo 'static char *multilib_extra = "";' >> multilib.h
16045299Sobrien
16134229Speter#-----------------------------------------------------------------------
16235402Sbde# General things.
16334229Speter
16435402SbdeSRCS+=		${GENSRCS}
16535402SbdeCLEANFILES+=	${GENSRCS}
16634229Speter
16735402Sbdeall: ${SRCS}
16835402Sbde
16935402Sbde.include <bsd.prog.mk>
17035402Sbde
17134229Speter#-----------------------------------------------------------------------
17235402Sbde# Fixups.
17334112Sbde
17435402Sbde# Set OBJS the same as bsd.prog.mk would do if we defined PROG.  We can't
17535402Sbde# define PROG because we have multiple programs.
17635402Sbde#
17735402SbdeOBJS+=		${SRCS:N*.h:R:S/$/.o/g}
17835402Sbde
17935402Sbde.if !exists(${DEPENDFILE})
18045519Sbde# Fudge pre-dependfile dependencies of objects in much the same way as
18145519Sbde# bsd.prog.mk would do if we defined PROG.  There are complications to
18245519Sbde# avoid circular dependencies.  First, only make most objects depend on
18345519Sbde# all headers.  Filter out the objects that would cause problems (i.e.,
18445519Sbde# objects that will be used to create programs that will generate headers).
18535402Sbde#
18645519Sbde${OBJS:Nbitmap.o:Ngenattr.o:Ngencheck.o:Ngencodes.o:Ngenconfig.o:Ngenflags.o:Ngengenrtl.o:Nobstack.o:Nrtl.o}: ${SRCS:M*.h}
18735402Sbde
18845519Sbde# Next, make each of the problematic objects depend on only most headers.
18945519Sbde# Filter out the headers that would cause problems (and a few more when it
19045519Sbde# is inconvenient to filter precisely).
19135402Sbde#
19245519Sbdebitmap.o genattr.o gencodes.o genconfig.o genflags.o obstack.o rtl.o: \
19345519Sbde    ${SRCS:M*.h:Ninsn-*.h}
19445519Sbdegencheck.o: ${SRCS:M*.h:Ngenrtl.h:Ntree-check.h:Ninsn-*.h}
19545519Sbdegengenrtl.o: ${SRCS:M*.h:Ngenrtl.h:Ninsn-*.h}
19635402Sbde.endif
197