Makefile revision 49810
118390Speter#
249810Sobrien# $Id: Makefile,v 1.34 1999/07/28 07:22:06 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#
1645582SbdeCFLAGS+=	-I.
1735402Sbde
1818390Speter.include "../Makefile.inc"
1918390Speter
2045583Sbde.PATH: ${GCCDIR} ${GCCDIR}/cp
2145583Sbde
2245582SbdeCFLAGS+=	-I${GCCDIR}/objc
2345582Sbde
2418390Speter#-----------------------------------------------------------------------
2518390Speter# insn-* gunk
2618390Speter
2735402Sbde.for i in attr codes config flags
2835402Sbdeinsn-$i.h: gen$i ${MD_FILE}
2918390Speter	./gen$i ${MD_FILE} > insn-$i.h
3035402SbdeGENSRCS+=	insn-$i.h
3118390Speter.endfor
3218390Speter
3335402Sbde.for i in attrtab emit extract opinit output peep recog
3435402Sbdeinsn-$i.c: gen$i ${MD_FILE}
3518390Speter	./gen$i ${MD_FILE} > insn-$i.c
3635402SbdeGENSRCS+=	insn-$i.c
3718390Speter.endfor
3818390Speter
3935402Sbde.for i in attr codes config emit extract flags opinit output peep recog
4037460Sbdebuild-tools: gen$i
4137460Sbde
4245299Sobriengen$i: gen$i.o rtl.o obstack.o bitmap.o
4338462Sjb	${CC} -static ${CFLAGS} ${LDFLAGS} -o ${.TARGET} ${.ALLSRC}
4418390Speter
4535402SbdeGENSRCS+=	gen$i.c
4635402SbdeCLEANFILES+=	gen$i
4718390Speter.endfor
4818390Speter
4945583Sbde.for i in attrtab
5045299Sobrienbuild-tools: gen$i
5145299Sobrien
5245583Sbdegen$i: gen$i.o rtl.o rtlanal.o print-rtl.o obstack.o bitmap.o
5345299Sobrien	${CC} -static ${CFLAGS} ${LDFLAGS} -o ${.TARGET} ${.ALLSRC}
5445299Sobrien
5545299SobrienGENSRCS+=	gen$i.c
5645299SobrienCLEANFILES+=	gen$i
5745299Sobrien.endfor
5845299Sobrien
5945583SbdeSRCS+=		bitmap.c obstack.c print-rtl.c rtl.c rtlanal.c
6045299Sobrien
6145583Sbde.for i in check genrtl
6237460Sbdebuild-tools: gen$i
6337460Sbde
6445583Sbdegen$i: gen$i.o
6538462Sjb	${CC} -static ${CFLAGS} ${LDFLAGS} -o ${.TARGET} ${.ALLSRC}
6618390Speter
6735402SbdeGENSRCS+=	gen$i.c
6835402SbdeCLEANFILES+=	gen$i
6918390Speter.endfor
7018390Speter
7145583Sbde.ORDER: genrtl.c genrtl.h
7245583Sbdegenrtl.c genrtl.h: gengenrtl
7345583Sbde	./gengenrtl genrtl.h genrtl.c
7445583Sbde
7545583SbdeGENSRCS+=	genrtl.c genrtl.h
7645583Sbde
7718390Speter#-----------------------------------------------------------------------
7818390Speter# C hash codes
7918390Speterc-gperf.h: c-parse.gperf
8018390Speter	gperf -p -j1 -i 1 -g -o -t -G -N is_reserved_word -k1,3,$$ \
8118390Speter		${GCCDIR}/c-parse.gperf > ${.TARGET}
8235402SbdeGENSRCS+=	c-gperf.h
8318390Speter
8418390Speter#-----------------------------------------------------------------------
8518390Speter# C++ hash codes
8618390Speterhash.h: gxx.gperf
8718390Speter	gperf -p -j1 -g -o -t -N is_reserved_word '-k1,4,7,$$' \
8818390Speter		${GCCDIR}/cp/gxx.gperf >hash.h
8935402SbdeGENSRCS+=	hash.h
9018390Speter
9118390Speter#-----------------------------------------------------------------------
9245583Sbde# Common parser stuff.
9345299Sobrien
9445299Sobrientree-check.h: gencheck
9545299Sobrien	./gencheck > ${.TARGET}
9645519SbdeGENSRCS+=	tree-check.h
9745299Sobrien
9845299Sobrien#-----------------------------------------------------------------------
9918390Speter# C parser
10045519Sbde.ORDER: c-parse.c c-parse.h
10118390Speterc-parse.c c-parse.h: c-parse.in
10218390Speter	sed -e "/^ifobjc$$/,/^end ifobjc$$/d" \
10318390Speter	    -e "/^ifc$$/d" -e "/^end ifc$$/d" \
10418390Speter	    ${GCCDIR}/c-parse.in > c-parse.y
10549152Sobrien	${YACC} -d -o c-parse.c c-parse.y
10649810Sobrien	mv c-parse.y c-parse.y.out
10718390Speter
10835402SbdeGENSRCS+=	c-parse.c c-parse.h
10949810SobrienCLEANFILES+=	c-parse.y c-parse.y.out		# insurance
11018390Speter
11118390Speter#-----------------------------------------------------------------------
11218390Speter# objc parser
11345519Sbde.ORDER: objc-parse.c objc-parse.h
11418390Speterobjc-parse.c objc-parse.h: c-parse.in
11518390Speter	sed -e "/^ifc$$/,/^end ifc$$/d" \
11618390Speter	    -e "/^ifobjc$$/d" -e "/^end ifobjc$$/d" \
11718390Speter	    ${GCCDIR}/c-parse.in > objc-parse.y
11849152Sobrien	${YACC} -d -o objc-parse.c objc-parse.y
11949810Sobrien	mv objc-parse.y objc-parse.y.out
12018390Speter
12135402SbdeGENSRCS+=	objc-parse.c objc-parse.h
12249810SobrienCLEANFILES+=	objc-parse.y objc-parse.y.out	# insurance
12318390Speter
12418390Speter#-----------------------------------------------------------------------
12534112Sbde# C++ parser done in its own makefile
12618390Speter#-----------------------------------------------------------------------
12734112Sbde# CPP parser done in its own makefile
12818390Speter#-----------------------------------------------------------------------
12918390Speter# the host/target compiler config.
13018390Speter
13145583SbdeCOMMONHDRS=	config.h hconfig.h multilib.h options.h specs.h tconfig.h tm.h
13240457SbdeGENSRCS+=	${COMMONHDRS}
13334112Sbde
13445299Sobrienconfig.h hconfig.h:
13545299Sobrien	echo '#include "auto-host.h"' > ${.TARGET}
13645943Sobrien	echo '#include "${GCC_ARCH}/xm-${GCC_ARCH}.h"' >> ${.TARGET}
13745299Sobrien
13845583Sbdemultilib.h:
13945583Sbde	echo 'static char *multilib_raw[] = { \
14045583Sbde	    "aout maout;", "elf !maout;", NULL };' > ${.TARGET}
14145583Sbde	echo 'static char *multilib_matches_raw[] = { \
14245583Sbde	    "maout maout;", "melf melf;", NULL };' >> ${.TARGET}
14345583Sbde	echo 'static char *multilib_extra = "";' >> ${.TARGET}
14445299Sobrien
14540457Sbdeoptions.h:
14640457Sbde	echo '#include "cp/lang-options.h"' > ${.TARGET}
14745767Sobrien	echo '#include "f/lang-options.h"' >> ${.TARGET}
14845299Sobrien
14940457Sbdespecs.h:
15045299Sobrien	echo '#include "cp/lang-specs.h"' > ${.TARGET}
15145767Sobrien	echo '#include "f/lang-specs.h"'    >> ${.TARGET}
15245299Sobrien
15345583Sbdetconfig.h:
15445943Sobrien	echo '#include "${GCC_ARCH}/xm-${GCC_ARCH}.h"' > ${.TARGET}
15545583Sbde
15640457Sbdetm.h:
15745943Sobrien	echo '#include "${GCC_ARCH}/${GCC_ARCH}.h"' > ${.TARGET}
15845943Sobrien	echo '#include "${GCC_ARCH}/freebsd.h"' >> ${.TARGET}
15945943Sobrien.if ${GCC_ARCH} == "i386"
16045943Sobrien	echo '#include "${GCC_ARCH}/perform.h"' >> ${.TARGET}
16145305Sobrien.endif
16246157Sobrien	echo '#include <freebsd-native.h>' >> ${.TARGET}
16318390Speter
16434229Speter#-----------------------------------------------------------------------
16535402Sbde# General things.
16634229Speter
16735402SbdeSRCS+=		${GENSRCS}
16835402SbdeCLEANFILES+=	${GENSRCS}
16934229Speter
17035402Sbdeall: ${SRCS}
17135402Sbde
17235402Sbde.include <bsd.prog.mk>
17335402Sbde
17434229Speter#-----------------------------------------------------------------------
17535402Sbde# Fixups.
17634112Sbde
17735402Sbde# Set OBJS the same as bsd.prog.mk would do if we defined PROG.  We can't
17835402Sbde# define PROG because we have multiple programs.
17935402Sbde#
18035402SbdeOBJS+=		${SRCS:N*.h:R:S/$/.o/g}
18135402Sbde
18235402Sbde.if !exists(${DEPENDFILE})
18345519Sbde# Fudge pre-dependfile dependencies of objects in much the same way as
18445519Sbde# bsd.prog.mk would do if we defined PROG.  There are complications to
18545519Sbde# avoid circular dependencies.  First, only make most objects depend on
18645519Sbde# all headers.  Filter out the objects that would cause problems (i.e.,
18745519Sbde# objects that will be used to create programs that will generate headers).
18835402Sbde#
18945519Sbde${OBJS:Nbitmap.o:Ngenattr.o:Ngencheck.o:Ngencodes.o:Ngenconfig.o:Ngenflags.o:Ngengenrtl.o:Nobstack.o:Nrtl.o}: ${SRCS:M*.h}
19035402Sbde
19145519Sbde# Next, make each of the problematic objects depend on only most headers.
19245519Sbde# Filter out the headers that would cause problems (and a few more when it
19345519Sbde# is inconvenient to filter precisely).
19435402Sbde#
19545519Sbdebitmap.o genattr.o gencodes.o genconfig.o genflags.o obstack.o rtl.o: \
19645519Sbde    ${SRCS:M*.h:Ninsn-*.h}
19745519Sbdegencheck.o: ${SRCS:M*.h:Ngenrtl.h:Ntree-check.h:Ninsn-*.h}
19845519Sbdegengenrtl.o: ${SRCS:M*.h:Ngenrtl.h:Ninsn-*.h}
19935402Sbde.endif
200