Makefile revision 53173
150472Speter# $FreeBSD: head/gnu/usr.bin/cc/cc_tools/Makefile 53173 1999-11-15 04:16:19Z obrien $
218390Speter
318390Speter#
418390Speter# This could probably be merged with ../cc_int/Makefile, but bsd.lib.mk
534112Sbde# is such a !@#!*#% nightmare because of how it reprograms the dependencies,
618390Speter# suffix rules, SRCS, etc.  It's easiest to cheat by using bsd.prog.mk and
718390Speter# SRCS to get dependencies.
818390Speter#
918390Speter
1035402Sbde# ../Makefile.inc will put an absolute path to our objdir in CFLAGS.
1135402Sbde# Prevent mkdep from using it, so that we don't have to give rules for
1235402Sbde# aliases of generated headers.
1349864Sobrien
1445582SbdeCFLAGS+=	-I.
1535402Sbde
1618390Speter.include "../Makefile.inc"
1718390Speter
1845583Sbde.PATH: ${GCCDIR} ${GCCDIR}/cp
1945583Sbde
2045582SbdeCFLAGS+=	-I${GCCDIR}/objc
2145582Sbde
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
4053173Sobriengen$i: gen$i.o rtl.o obstack.o print-rtl.o bitmap.o
4138462Sjb	${CC} -static ${CFLAGS} ${LDFLAGS} -o ${.TARGET} ${.ALLSRC}
4218390Speter
4335402SbdeGENSRCS+=	gen$i.c
4435402SbdeCLEANFILES+=	gen$i
4518390Speter.endfor
4618390Speter
4745583Sbde.for i in attrtab
4845299Sobrienbuild-tools: gen$i
4945299Sobrien
5045583Sbdegen$i: gen$i.o rtl.o rtlanal.o print-rtl.o obstack.o bitmap.o
5145299Sobrien	${CC} -static ${CFLAGS} ${LDFLAGS} -o ${.TARGET} ${.ALLSRC}
5245299Sobrien
5345299SobrienGENSRCS+=	gen$i.c
5445299SobrienCLEANFILES+=	gen$i
5545299Sobrien.endfor
5645299Sobrien
5745583SbdeSRCS+=		bitmap.c obstack.c print-rtl.c rtl.c rtlanal.c
5845299Sobrien
5945583Sbde.for i in check genrtl
6037460Sbdebuild-tools: gen$i
6137460Sbde
6245583Sbdegen$i: gen$i.o
6338462Sjb	${CC} -static ${CFLAGS} ${LDFLAGS} -o ${.TARGET} ${.ALLSRC}
6418390Speter
6535402SbdeGENSRCS+=	gen$i.c
6635402SbdeCLEANFILES+=	gen$i
6718390Speter.endfor
6818390Speter
6945583Sbde.ORDER: genrtl.c genrtl.h
7045583Sbdegenrtl.c genrtl.h: gengenrtl
7145583Sbde	./gengenrtl genrtl.h genrtl.c
7245583Sbde
7345583SbdeGENSRCS+=	genrtl.c genrtl.h
7445583Sbde
7518390Speter#-----------------------------------------------------------------------
7618390Speter# C hash codes
7718390Speterc-gperf.h: c-parse.gperf
7818390Speter	gperf -p -j1 -i 1 -g -o -t -G -N is_reserved_word -k1,3,$$ \
7949864Sobrien	    ${GCCDIR}/c-parse.gperf > ${.TARGET}
8035402SbdeGENSRCS+=	c-gperf.h
8118390Speter
8218390Speter#-----------------------------------------------------------------------
8318390Speter# C++ hash codes
8452171Sobriengxx-hash.h: gxx.gperf
8518390Speter	gperf -p -j1 -g -o -t -N is_reserved_word '-k1,4,7,$$' \
8652171Sobrien	    ${GCCDIR}/cp/gxx.gperf >gxx-hash.h
8752172SobrienGENSRCS+=	gxx-hash.h
8818390Speter
8952172Sobrien# make a link the the Cygnus used name for now -- hopes are they will change it
9052171Sobrienhash.h: gxx-hash.h
9152648Sobrien	ln -sf ${.ALLSRC} ${.TARGET}
9252172SobrienGENSRCS+=	hash.h
9352171Sobrien
9418390Speter#-----------------------------------------------------------------------
9545583Sbde# Common parser stuff.
9645299Sobrien
9745299Sobrientree-check.h: gencheck
9845299Sobrien	./gencheck > ${.TARGET}
9945519SbdeGENSRCS+=	tree-check.h
10045299Sobrien
10145299Sobrien#-----------------------------------------------------------------------
10218390Speter# C parser
10345519Sbde.ORDER: c-parse.c c-parse.h
10418390Speterc-parse.c c-parse.h: c-parse.in
10518390Speter	sed -e "/^ifobjc$$/,/^end ifobjc$$/d" \
10618390Speter	    -e "/^ifc$$/d" -e "/^end ifc$$/d" \
10718390Speter	    ${GCCDIR}/c-parse.in > c-parse.y
10849152Sobrien	${YACC} -d -o c-parse.c c-parse.y
10949810Sobrien	mv c-parse.y c-parse.y.out
11018390Speter
11135402SbdeGENSRCS+=	c-parse.c c-parse.h
11249810SobrienCLEANFILES+=	c-parse.y c-parse.y.out		# insurance
11318390Speter
11418390Speter#-----------------------------------------------------------------------
11518390Speter# objc parser
11645519Sbde.ORDER: objc-parse.c objc-parse.h
11718390Speterobjc-parse.c objc-parse.h: c-parse.in
11818390Speter	sed -e "/^ifc$$/,/^end ifc$$/d" \
11918390Speter	    -e "/^ifobjc$$/d" -e "/^end ifobjc$$/d" \
12018390Speter	    ${GCCDIR}/c-parse.in > objc-parse.y
12149152Sobrien	${YACC} -d -o objc-parse.c objc-parse.y
12249810Sobrien	mv objc-parse.y objc-parse.y.out
12318390Speter
12435402SbdeGENSRCS+=	objc-parse.c objc-parse.h
12549810SobrienCLEANFILES+=	objc-parse.y objc-parse.y.out	# insurance
12618390Speter
12718390Speter#-----------------------------------------------------------------------
12834112Sbde# C++ parser done in its own makefile
12918390Speter#-----------------------------------------------------------------------
13034112Sbde# CPP parser done in its own makefile
13118390Speter#-----------------------------------------------------------------------
13218390Speter# the host/target compiler config.
13318390Speter
13445583SbdeCOMMONHDRS=	config.h hconfig.h multilib.h options.h specs.h tconfig.h tm.h
13553173SobrienGENSRCS+=	${COMMONHDRS} gencheck.h
13634112Sbde
13745299Sobrienconfig.h hconfig.h:
13853161Sobrien	echo '#include "auto-host.h"'			> ${.TARGET}
13953173Sobrien	echo '#include "gansidecl.h"'			>> ${.TARGET}
14053161Sobrien	echo '#include "${GCC_ARCH}/xm-${GCC_ARCH}.h"'	>> ${.TARGET}
14153173Sobrien	echo '#include "hwint.h"'			>> ${.TARGET}
14245299Sobrien
14353173Sobriengencheck.h:
14453173Sobrien	echo '#include "cp/cp-tree.def"'		> ${.TARGET}
14553173Sobrien	echo '#include "objc/objc-tree.def"'		>> ${.TARGET}
14653173Sobrien
14745583Sbdemultilib.h:
14845583Sbde	echo 'static char *multilib_raw[] = { \
14953161Sobrien	    "aout maout;", "elf !maout;", NULL };'	> ${.TARGET}
15045583Sbde	echo 'static char *multilib_matches_raw[] = { \
15153161Sobrien	    "maout maout;", "melf melf;", NULL };'	>> ${.TARGET}
15253161Sobrien	echo 'static char *multilib_extra = "";'	>> ${.TARGET}
15345299Sobrien
15440457Sbdeoptions.h:
15553161Sobrien	echo '#include "cp/lang-options.h"'		> ${.TARGET}
15653161Sobrien	echo '#include "f/lang-options.h"'		>> ${.TARGET}
15745299Sobrien
15840457Sbdespecs.h:
15953161Sobrien	echo '#include "cp/lang-specs.h"'		> ${.TARGET}
16053161Sobrien	echo '#include "f/lang-specs.h"'		>> ${.TARGET}
16153173Sobrien	echo '#include "objc/lang-specs.h"'		>> ${.TARGET}
16245299Sobrien
16345583Sbdetconfig.h:
16453173Sobrien	echo '#include "gansidecl.h"'			> ${.TARGET}
16553173Sobrien	echo '#include "${GCC_ARCH}/xm-${GCC_ARCH}.h"'	>> ${.TARGET}
16645583Sbde
16753173Sobrien#	KEEP THIS IN SYNC with src/gcc/lib/libgcc/Makefile !!
16840457Sbdetm.h:
16953161Sobrien	echo '#include "${GCC_ARCH}/${GCC_ARCH}.h"'	> ${.TARGET}
17049864Sobrien.if ${GCC_ARCH} == "i386"
17153161Sobrien	echo '#include "${GCC_ARCH}/att.h"'		>> ${.TARGET}
17253161Sobrien	echo '#include "svr4.h"'			>> ${.TARGET}
17349864Sobrien.endif
17453173Sobrien	echo '#include <freebsd.h>'			>> ${.TARGET}
17553161Sobrien	echo '#include "${GCC_ARCH}/freebsd.h"'		>> ${.TARGET}
17645943Sobrien.if ${GCC_ARCH} == "i386"
17753161Sobrien	echo '#include "${GCC_ARCH}/perform.h"'		>> ${.TARGET}
17845305Sobrien.endif
17953161Sobrien	echo '#include <freebsd-native.h>'		>> ${.TARGET}
18018390Speter
18134229Speter#-----------------------------------------------------------------------
18235402Sbde# General things.
18334229Speter
18435402SbdeSRCS+=		${GENSRCS}
18535402SbdeCLEANFILES+=	${GENSRCS}
18634229Speter
18735402Sbdeall: ${SRCS}
18835402Sbde
18935402Sbde.include <bsd.prog.mk>
19035402Sbde
19134229Speter#-----------------------------------------------------------------------
19235402Sbde# Fixups.
19334112Sbde
19435402Sbde# Set OBJS the same as bsd.prog.mk would do if we defined PROG.  We can't
19535402Sbde# define PROG because we have multiple programs.
19635402Sbde#
19735402SbdeOBJS+=		${SRCS:N*.h:R:S/$/.o/g}
19835402Sbde
19935402Sbde.if !exists(${DEPENDFILE})
20045519Sbde# Fudge pre-dependfile dependencies of objects in much the same way as
20145519Sbde# bsd.prog.mk would do if we defined PROG.  There are complications to
20245519Sbde# avoid circular dependencies.  First, only make most objects depend on
20345519Sbde# all headers.  Filter out the objects that would cause problems (i.e.,
20445519Sbde# objects that will be used to create programs that will generate headers).
20535402Sbde#
20653173Sobrien${OBJS:Nbitmap.o:Ngenattr.o:Ngencheck.o:Ngencodes.o:Ngenconfig.o:Ngenflags.o:Ngengenrtl.o:Nobstack.o:Nprint-rtl.o:Nrtl.o}: ${SRCS:M*.h}
20735402Sbde
20845519Sbde# Next, make each of the problematic objects depend on only most headers.
20945519Sbde# Filter out the headers that would cause problems (and a few more when it
21045519Sbde# is inconvenient to filter precisely).
21135402Sbde#
21245519Sbdebitmap.o genattr.o gencodes.o genconfig.o genflags.o obstack.o rtl.o: \
21345519Sbde    ${SRCS:M*.h:Ninsn-*.h}
21453173Sobriengencheck.o: gencheck.h ${SRCS:M*.h:Ngenrtl.h:Ntree-check.h:Ninsn-*.h}
21545519Sbdegengenrtl.o: ${SRCS:M*.h:Ngenrtl.h:Ninsn-*.h}
21635402Sbde.endif
217