Makefile revision 45305
164469Sitojun#
264469Sitojun# $Id: Makefile,v 1.15 1999/04/04 16:36:34 obrien Exp $
355163Sshin#
455163Sshin
555163Sshin#
655163Sshin# This could probably be merged with ../cc_int/Makefile, but bsd.lib.mk
755163Sshin# is such a !@#!*#% nightmare because of how it reprograms the dependencies,
855163Sshin# suffix rules, SRCS, etc.  It's easiest to cheat by using bsd.prog.mk and
955163Sshin# SRCS to get dependencies.
1055163Sshin#
1155163Sshin
1255163Sshin# ../Makefile.inc will put an absolute path to our objdir in CFLAGS.
1355163Sshin# Prevent mkdep from using it, so that we don't have to give rules for
1455163Sshin# aliases of generated headers.
1555163Sshin#
1655163SshinCFLAGS+=	-I${GCCDIR}/objc
1755163Sshin
1855163Sshin.include "../Makefile.inc"
1955163Sshin
2055163Sshin.PATH: ${GCCDIR} ${GCCDIR}/cp
2155163Sshin
2255163Sshin#-----------------------------------------------------------------------
2355163Sshin# insn-* gunk
2455163Sshin
2555163Sshin.for i in attr codes config flags
2655163Sshininsn-$i.h: gen$i ${MD_FILE}
2755163Sshin	./gen$i ${MD_FILE} > insn-$i.h
2855163SshinGENSRCS+=	insn-$i.h
2955163Sshin.endfor
3055163Sshin
31108037Sru.for i in attrtab emit extract opinit output peep recog
3255163Sshininsn-$i.c: gen$i ${MD_FILE}
33133218Sroam	./gen$i ${MD_FILE} > insn-$i.c
3455163SshinGENSRCS+=	insn-$i.c
3564469Sitojun.endfor
3655163Sshin
3755163Sshin.for i in attr codes config emit extract flags opinit output peep recog
3855163Sshinbuild-tools: gen$i
3955163Sshin
4055163Sshingen$i: gen$i.o rtl.o obstack.o bitmap.o
4155163Sshin	${CC} -static ${CFLAGS} ${LDFLAGS} -o ${.TARGET} ${.ALLSRC}
4255163Sshin
4359460SphantomGENSRCS+=	gen$i.c
4459460SphantomCLEANFILES+=	gen$i
4555163Sshin.endfor
4684306Sru
4784306Sru.for i in check genrtl
4884306Srubuild-tools: gen$i
4955163Sshin
5055163Sshingen$i: gen$i.o
5155163Sshin	${CC} -static ${CFLAGS} ${LDFLAGS} -o ${.TARGET} ${.ALLSRC}
5255163Sshin
5355163SshinGENSRCS+=	gen$i.c
5455163SshinCLEANFILES+=	gen$i
5555163Sshin.endfor
5655163Sshin
57108037Srugenrtl.h genrtl.c: gengenrtl
5855163Sshin	./gengenrtl genrtl.h genrtl.c
5955163Sshin
6055163Sshin#GENSRCS+=	genrtl.c genrtl.h
6155163SshinCLEANFILES+=	genrtl.c genrtl.h
6255163Sshin
6355163Sshin.for i in attrtab
6455163Sshinbuild-tools: gen$i
6555163Sshin
6655163Sshingen$i: gen$i.o rtl.o rtlanal.o print-rtl.o obstack.o bitmap.o
6755163Sshin	${CC} -static ${CFLAGS} ${LDFLAGS} -o ${.TARGET} ${.ALLSRC}
6855163Sshin
69108040SruGENSRCS+=	gen$i.c
7055163SshinCLEANFILES+=	gen$i
71108040Sru.endfor
7255163Sshin
7355163SshinSRCS+=		bitmap.c print-rtl.c rtl.c rtlanal.c obstack.c
7455163Sshin#-----------------------------------------------------------------------
7581251Sru# C hash codes
7655163Sshinc-gperf.h: c-parse.gperf
7755163Sshin	gperf -p -j1 -i 1 -g -o -t -G -N is_reserved_word -k1,3,$$ \
7881251Sru		${GCCDIR}/c-parse.gperf > ${.TARGET}
7955163SshinGENSRCS+=	c-gperf.h
80108040Sru
8155163Sshin#-----------------------------------------------------------------------
8255163Sshin# C++ hash codes
8355163Sshinhash.h: gxx.gperf
8455163Sshin	gperf -p -j1 -g -o -t -N is_reserved_word '-k1,4,7,$$' \
8555163Sshin		${GCCDIR}/cp/gxx.gperf >hash.h
8655163SshinGENSRCS+=	hash.h
8755163Sshin
8855163Sshin#-----------------------------------------------------------------------
8955163Sshin# common parser stuff
9055163Sshin
9155163Sshin.for i in c objc
92108040Sru$i-parse.c: tree-check.h
9364469Sitojun.endfor
9455163Sshin
9581251Srutree-check.h: gencheck
9655163Sshin	./gencheck > ${.TARGET}
97108040Sru
9855163Sshin##GENSRCS+=	tree-check.h
9955163SshinCLEANFILES+=	tree-check.h
10055163Sshin
10155163Sshin#-----------------------------------------------------------------------
10255163Sshin# C parser
103108040Sru.ORDER: c-parse.c c-parse.h
10455163Sshinc-parse.c c-parse.h: c-parse.in
10555163Sshin	sed -e "/^ifobjc$$/,/^end ifobjc$$/d" \
10655163Sshin	    -e "/^ifc$$/d" -e "/^end ifc$$/d" \
10755163Sshin	    ${GCCDIR}/c-parse.in > c-parse.y
10881251Sru	${BISON} -d c-parse.y -o c-parse.c 
10955163Sshin	rm -f c-parse.y
11055163Sshin
11155163SshinGENSRCS+=	c-parse.c c-parse.h
11255163SshinCLEANFILES+=	c-parse.y		# insurance
11355163Sshin
11455163Sshin#-----------------------------------------------------------------------
11555163Sshin# objc parser
11655163Sshin.ORDER: objc-parse.c objc-parse.h
11755163Sshinobjc-parse.c objc-parse.h: c-parse.in
11855163Sshin	sed -e "/^ifc$$/,/^end ifc$$/d" \
11955163Sshin	    -e "/^ifobjc$$/d" -e "/^end ifobjc$$/d" \
12055163Sshin	    ${GCCDIR}/c-parse.in > objc-parse.y
12155163Sshin	${BISON} -d objc-parse.y -o objc-parse.c 
122108040Sru	rm -f objc-parse.y
12355163Sshin
12455163SshinGENSRCS+=	objc-parse.c objc-parse.h
12555163SshinCLEANFILES+=	objc-parse.y		# insurance
126108040Sru
12755163Sshin#-----------------------------------------------------------------------
12855163Sshin# C++ parser done in its own makefile
12955163Sshin#-----------------------------------------------------------------------
130108040Sru# CPP parser done in its own makefile
13155163Sshin#-----------------------------------------------------------------------
13255163Sshin# the host/target compiler config.
13355163Sshin
13455163SshinCOMMONHDRS=	config.h hconfig.h options.h specs.h tconfig.h tm.h multilib.h
135108040SruGENSRCS+=	${COMMONHDRS}
13655163Sshin
137108040Sruconfig.h hconfig.h:
13855163Sshin	echo '#include "auto-host.h"' > ${.TARGET}
13955163Sshin	echo '#include "${MACHINE_ARCH}/xm-${MACHINE_ARCH}.h"' >> ${.TARGET}
14055163Sshin
14155163Sshintconfig.h:
14255163Sshin	echo '#include "${MACHINE_ARCH}/xm-${MACHINE_ARCH}.h"' > ${.TARGET}
14355163Sshin
14455163Sshinoptions.h:
14555163Sshin	echo '#include "cp/lang-options.h"' > ${.TARGET}
14655163Sshin	#echo '#include "f/lang-options.h"' >> ${.TARGET}
14755163Sshin
14855163Sshinspecs.h:
14955163Sshin	echo '#include "cp/lang-specs.h"' > ${.TARGET}
15055163Sshin	#echo '#include "f/lang-specs.h"'    >> ${.TARGET}
15155163Sshin
15255163Sshintm.h:
153108040Sru	echo '#include "${MACHINE_ARCH}/${MACHINE_ARCH}.h"' > ${.TARGET}
15455163Sshin	echo '#include "${MACHINE_ARCH}/att.h"' >> ${.TARGET}
155108040Sru	echo '#include "${MACHINE_ARCH}/freebsd.h"' >> ${.TARGET}
15655163Sshin.if ${MACHINE_ARCH} == "i386"
15755163Sshin	echo '#include "${MACHINE_ARCH}/perform.h"' >> ${.TARGET}
15855163Sshin.elif ${MACHINE_ARCH} == "alpha"
15955163Sshin	echo '#include "${MACHINE_ARCH}/freebsd-elf.h"' >> ${.TARGET}
16055163Sshin.endif
16155163Sshin
16255163Sshinmultilib.h: genmultilib
16355163Sshin	echo 'static char *multilib_raw[] = {"aout maout;elf !maout;", NULL};' > multilib.h
16455163Sshin	echo 'static char *orig_port_multilib_raw[] = {".;", NULL};' >> multilib.h
16555163Sshin	echo 'static char *multilib_matches_raw[] = {NULL};' >> multilib.h
16655163Sshin	echo 'static char **multilib_extra = "";' >> multilib.h
16755163Sshin
16855163Sshin#-----------------------------------------------------------------------
16955163Sshin# General things.
17055163Sshin
17155163SshinSRCS+=		${GENSRCS}
172108040SruCLEANFILES+=	${GENSRCS}
17355163Sshin
17455163Sshinall: ${SRCS}
17555163Sshin
17655163Sshin.include <bsd.prog.mk>
17755163Sshin
17855163Sshin#-----------------------------------------------------------------------
179108040Sru# Fixups.
18055163Sshin
18155163Sshin# Set OBJS the same as bsd.prog.mk would do if we defined PROG.  We can't
18255163Sshin# define PROG because we have multiple programs.
18355163Sshin#
18455163SshinOBJS+=		${SRCS:N*.h:R:S/$/.o/g}
18555163Sshin
18655163Sshin.if !exists(${DEPENDFILE})
18755163Sshin# Fudge pre-dependfile dependencies of objects the same as bsd.prog.mk
18881251Sru# would do if we defined PROG, except for leaving out dependencies on
18981251Sru# insn-*.h because these dependencies would be circular.
19055163Sshin#
19155163Sshin${OBJS}: ${SRCS:M*.h:Ninsn-*.h}
19255163Sshin
193108040Sru# Give all dependencies on insn-*.h explicitly
19455163Sshin# This suffices for `make -j<any> depend', and after that all
19555163Sshin# the dependencies will be in .depend since all .c source files are in
19655163Sshin# SRCS.
19755163Sshin#
19855163Sshingenattrtab.o genextract.o: insn-config.h
19955163Sshininsn-attrtab.o: insn-attr.h insn-config.h
20055163Sshininsn-emit.o: insn-codes.h insn-config.h insn-flags.h
20155163Sshininsn-opinit.o: insn-codes.h insn-config.h insn-flags.h
20255163Sshininsn-output.o: insn-attr.h insn-codes.h insn-config.h insn-flags.h
20355163Sshininsn-recog.o: insn-config.h
20455163Sshin
20555163Sshingenattr.o gencodes.o genconfig.o genemit.o genextract.o genflags.o genopinit.o genoutput.o genpeep.o genrecog.o: genrtl.h
20655163Sshin.endif
20755163Sshin