12233c95bSzrj# Despite the source files ending in ".c", the c++ compiler needs to build
22233c95bSzrj# everything.  We have to roll our own targets to properly support this.
32233c95bSzrj
42233c95bSzrj.include "../Makefile.inc"
52233c95bSzrj.include "../../Makefile.langs"
62233c95bSzrj
72233c95bSzrjNXCXXFLAGS+=		-DGENERATOR_FILE -I${.OBJDIR}
82233c95bSzrjBUILD_LIBS=		../libiberty/libiberty.na
92233c95bSzrjBUILD_LIBS_genmatch=	../libcpp/libcpp.na
102233c95bSzrjLEX_HEAD=		../../cc_prep/gengtype-lex.head
112233c95bSzrjNXLD_genautomata=	-lm
122233c95bSzrj
132233c95bSzrjMIC=		sh ${GCCDIR}/move-if-change
142233c95bSzrj
152233c95bSzrjBUILD_RTL=	rtl.no \
162233c95bSzrj		read-rtl.no \
172233c95bSzrj		ggc-none.no \
182233c95bSzrj		vec.no \
192233c95bSzrj		min-insn-modes.no \
202233c95bSzrj		gensupport.no \
212233c95bSzrj		print-rtl.no \
222233c95bSzrj		hash-table.no
232233c95bSzrjBUILD_MD=	read-md.no
242233c95bSzrjBUILD_ERRORS=	errors.no
252233c95bSzrjBUILD_GTYPE=	gengtype-lex.no \
262233c95bSzrj		gengtype-parse.no \
272233c95bSzrj		gengtype-state.no \
282233c95bSzrj		version.no
292233c95bSzrj
302233c95bSzrjgenprogrtl=	attr attr-common attrtab automata codes conditions config emit \
312233c95bSzrj		extract flags opinit output peep preds recog mddump target-def
322233c95bSzrjgenprogmd=	$(genprogrtl) mddeps constants enums
332233c95bSzrjgenprogerr=	$(genprogmd) genrtl modes gtype hooks cfn-macros match
342233c95bSzrjgenprog=	$(genprogerr) check checksum condmd
352233c95bSzrj
362233c95bSzrjNO_RTL=		${genprogrtl:S/^/gen/g:S/$/.no/g}
372233c95bSzrjNO_MD=		${genprogmd:S/^/gen/g:S/$/.no/g}
382233c95bSzrjNO_PROGERR=	${genprogerr:S/^/gen/g:S/$/.no/g}
392233c95bSzrjNO_PROG=	${genprog:S/^/gen/g:S/$/.no/g}
402233c95bSzrjNO_LIST=	${BUILD_RTL} ${BUILD_MD} ${BUILD_ERRORS} \
412233c95bSzrj		${BUILD_GTYPE} ${NO_PROG}
422233c95bSzrj
432233c95bSzrj# All these RTL objects needs common headers (tbc)
442233c95bSzrj${BUILD_RTL}: tm.h insn-modes.h insn-modes-inline.h gtype-desc.h insn-constants.h
452233c95bSzrj# All these programs use the RTL reader ($(BUILD_RTL)).
462233c95bSzrj${NO_RTL}: ${BUILD_RTL}
472233c95bSzrj# All these programs use the MD reader
482233c95bSzrj${NO_MD}: ${BUILD_MD}
492233c95bSzrj# All these programs need to report errors.
502233c95bSzrj${NO_PROGERR}: ${BUILD_ERRORS}
512233c95bSzrj
522233c95bSzrj.for f in ${genprogrtl}
532233c95bSzrjgen${f}.nx: ${BUILD_RTL}
542233c95bSzrj.endfor
552233c95bSzrj
562233c95bSzrj.for f in ${genprogmd}
572233c95bSzrjgen${f}.nx: ${BUILD_MD}
582233c95bSzrj.endfor
592233c95bSzrj
602233c95bSzrj.for f in ${genprogerr}
612233c95bSzrjgen${f}.nx: ${BUILD_ERRORS}
622233c95bSzrj.endfor
632233c95bSzrj
642233c95bSzrj.for f in ${genprog}
652233c95bSzrjGENTOOLS+= gen${f}.nx
662233c95bSzrj.endfor
672233c95bSzrj
682233c95bSzrj# For some reason, gcov-iov is an oddball
692233c95bSzrjGENTOOLS+=	gcov-iov.nx
702233c95bSzrjNO_LIST+=	gcov-iov.no
712233c95bSzrj
722233c95bSzrjgengtype.nx: ${BUILD_GTYPE}
732233c95bSzrjgenmatch.nx: hash-table.no vec.no
742233c95bSzrjgencfn-macros.nx: hash-table.no vec.no ggc-none.no
752233c95bSzrj
762233c95bSzrj.for f in ${GENTOOLS}
772233c95bSzrj$f: ${f:.nx=.no} ${BUILD_LIBS_${f:R}} ${BUILD_LIBS}
782233c95bSzrj	${NXCXX} ${NXCXXFLAGS:N-flto} ${NXLDFLAGS} ${.ALLSRC:M*.n[oa]} \
792233c95bSzrj		${NXLD_${f:R}} -o ${.TARGET}
802233c95bSzrj.endfor
812233c95bSzrj
822233c95bSzrj.for nofile in ${NO_LIST}
832233c95bSzrj${nofile}: ${nofile:.no=.c}
842233c95bSzrj	${NXCXX} ${NXCXXFLAGS:N-flto} -c ${.IMPSRC} -o ${.TARGET}
852233c95bSzrj.endfor
862233c95bSzrj
872233c95bSzrjgencheck.no: tm.h insn-constants.h
882233c95bSzrjgencondmd.no: insn-constants.h
892233c95bSzrjread-md.no: insn-modes.h insn-modes-inline.h
902233c95bSzrjgencfn-macros.no: insn-modes.h gtype-desc.h
912233c95bSzrj
922233c95bSzrjMD_DEPS=	${GCCDIR}/gcc/common.md ${md_file}
932233c95bSzrjMD_DEPS_PLUS=	${MD_DEPS} insn-conditions.md
942233c95bSzrj
952233c95bSzrj_MIC: .USE
962233c95bSzrj	${MIC} ${.TARGET}.tmp ${.TARGET}
972233c95bSzrj_PL: .USE
982233c95bSzrj	${.OBJDIR}/${.ALLSRC:M*.nx} > ${.TARGET}.tmp
992233c95bSzrj	${MIC} ${.TARGET}.tmp ${.TARGET}
1002233c95bSzrj_MD: .USE
1012233c95bSzrj	${.OBJDIR}/${.ALLSRC:M*.nx} ${MD_DEPS} > ${.TARGET}.tmp
1022233c95bSzrj	${MIC} ${.TARGET}.tmp ${.TARGET}
1032233c95bSzrj
1042233c95bSzrjsimple_rtl_generated_h=	insn-attr.h insn-attr-common.h insn-codes.h \
1052233c95bSzrj			insn-config.h insn-flags.h insn-target-def.h
1062233c95bSzrjsimple_rtl_generated_c=	insn-automata.c insn-emit.c insn-extract.c \
1072233c95bSzrj			insn-output.c insn-peep.c insn-recog.c
1082233c95bSzrj
1092233c95bSzrjsimple_generated_h=	$(simple_rtl_generated_h) insn-constants.h
1102233c95bSzrjsimple_generated_c=	$(simple_rtl_generated_c) insn-enums.c insn-preds.c
1112233c95bSzrj
1122233c95bSzrj.for f in ${simple_rtl_generated_h} ${simple_rtl_generated_c}
1132233c95bSzrj. for generator in gen${f:R:S/^insn-//}.nx
1142233c95bSzrj$f: ${generator} ${MD_DEPS_PLUS} _MIC
1152233c95bSzrj	${.OBJDIR}/${generator} ${MD_DEPS_PLUS} > ${.TARGET}.tmp
1162233c95bSzrj. endfor
1172233c95bSzrj.endfor
1182233c95bSzrj
1192233c95bSzrjinsn-modes.h: genmodes.nx _MIC
1202233c95bSzrj	${.OBJDIR}/${.ALLSRC:M*.nx} -h > ${.TARGET}.tmp
1212233c95bSzrjinsn-modes-inline.h: genmodes.nx _MIC
1222233c95bSzrj	${.OBJDIR}/${.ALLSRC:M*.nx} -i > ${.TARGET}.tmp
1232233c95bSzrjgtyp-input.list: _MIC
1242233c95bSzrj	rm -f ${.TARGET}.tmp
1252233c95bSzrj	for f in ${GTFILES}; do \
1262233c95bSzrj		echo "$$f" >> ${.TARGET}.tmp; \
1272233c95bSzrj	done
1282233c95bSzrjgtype.state: gengtype.nx gtyp-input.list ${GTFILES:N[*]} _MIC
1292233c95bSzrj	${.OBJDIR}/${.ALLSRC:M*.nx} -S ${GCCDIR}/gcc -I ${.ALLSRC:M*.list} \
1302233c95bSzrj	  -w gtype.state.tmp
1312233c95bSzrjgtype-desc.c gtype-desc.h: gengtype.nx gtype.state
1322233c95bSzrj	${.OBJDIR}/${.ALLSRC:M*.nx} -r gtype.state
1332233c95bSzrjgenrtl.h: gengenrtl.nx _MIC
1342233c95bSzrj	${.OBJDIR}/${.ALLSRC:M*.nx} > ${.TARGET}.tmp
1352233c95bSzrjmin-insn-modes.c: genmodes.nx _MIC
1362233c95bSzrj	${.OBJDIR}/${.ALLSRC:M*.nx} -m > ${.TARGET}.tmp
1372233c95bSzrjtm-preds.h: genpreds.nx ${MD_DEPS} _MIC
1382233c95bSzrj	${.OBJDIR}/${.ALLSRC:M*.nx} -h ${MD_DEPS} > ${.TARGET}.tmp
1392233c95bSzrjtm-constrs.h: genpreds.nx ${MD_DEPS} _MIC
1402233c95bSzrj	${.OBJDIR}/${.ALLSRC:M*.nx} -c ${MD_DEPS} > ${.TARGET}.tmp
1412233c95bSzrjcase-cfn-macros.h: gencfn-macros.nx _MIC
1422233c95bSzrj	${.OBJDIR}/${.ALLSRC:M*.nx} -c > ${.TARGET}.tmp
1432233c95bSzrjcfn-operators.pd: gencfn-macros.nx _MIC
1442233c95bSzrj	${.OBJDIR}/${.ALLSRC:M*.nx} -o > ${.TARGET}.tmp
1452233c95bSzrjinsn-constants.h:   genconstants.nx ${MD_DEPS} _MD
1462233c95bSzrjinsn-enums.c:       genenums.nx ${MD_DEPS} _MD
1472233c95bSzrjinsn-preds.c:       genpreds.nx ${MD_DEPS} _MD
1482233c95bSzrjgencondmd.c:        genconditions.nx ${MD_DEPS} tm-preds.h tm-constrs.h _MD
1492233c95bSzrjinsn-conditions.md: gencondmd.nx _PL
1502233c95bSzrjinsn-modes.c:       genmodes.nx _PL
1512233c95bSzrjtree-check.h:       gencheck.nx _PL
1522233c95bSzrjgcov-iov.h: gcov-iov.nx BASE-VER _MIC
1532233c95bSzrj	${.OBJDIR}/${.ALLSRC:M*.nx} '${GCCCOMPLETEVER}' '' > ${.TARGET}.tmp
1542233c95bSzrjtarget-hooks-def.h: genhooks.nx _MIC
1552233c95bSzrj	${.OBJDIR}/${.ALLSRC:M*.nx} "Target Hook" > ${.TARGET}.tmp
1562233c95bSzrjcommon/common-target-hooks-def.h: genhooks.nx _MIC
1572233c95bSzrj	${.OBJDIR}/${.ALLSRC:M*.nx} "Common Target Hook" > ${.TARGET}.tmp
1582233c95bSzrjc-family/c-target-hooks-def.h: genhooks.nx _MIC
1592233c95bSzrj	${.OBJDIR}/${.ALLSRC:M*.nx} "C Target Hook" > ${.TARGET}.tmp
1602233c95bSzrjstamp-opinit: genopinit.nx ${MD_DEPS_PLUS}
1612233c95bSzrj	${.OBJDIR}/${.ALLSRC:M*.nx} ${.ALLSRC:M*.md} \
1622233c95bSzrj		-hinsn-opinit.h.tmp -cinsn-opinit.c.tmp
1632233c95bSzrj	${MIC} insn-opinit.h.tmp insn-opinit.h
1642233c95bSzrj	${MIC} insn-opinit.c.tmp insn-opinit.c
1652233c95bSzrj	touch stamp-opinit
1662233c95bSzrjstamp-tabs: genattrtab.nx ${MD_DEPS_PLUS}
1672233c95bSzrj	${.OBJDIR}/${.ALLSRC:M*.nx} ${.ALLSRC:M*.md} \
1682233c95bSzrj		-Ainsn-attrtab.c.tmp -Dinsn-dfatab.c.tmp \
1692233c95bSzrj		-Linsn-latencytab.c.tmp
1702233c95bSzrj	${MIC} insn-attrtab.c.tmp insn-attrtab.c
1712233c95bSzrj	${MIC} insn-dfatab.c.tmp insn-dfatab.c
1722233c95bSzrj	${MIC} insn-latencytab.c.tmp insn-latencytab.c
1732233c95bSzrj	touch stamp-tabs
1742233c95bSzrjgimple-match.c: genmatch.nx match.pd cfn-operators.pd gimple-match-head.c _MIC
1752233c95bSzrj	${.OBJDIR}/${.ALLSRC:M*.nx} --gimple ${GCCDIR}/gcc/match.pd \
1762233c95bSzrj	> ${.TARGET}.tmp
1772233c95bSzrjgeneric-match.c: genmatch.nx match.pd cfn-operators.pd generic-match-head.c _MIC
1782233c95bSzrj	${.OBJDIR}/${.ALLSRC:M*.nx} --generic ${GCCDIR}/gcc/match.pd \
1792233c95bSzrj	> ${.TARGET}.tmp
1802233c95bSzrjgenmatch.c hash-table.c: gtype-desc.h
1812233c95bSzrj
1822233c95bSzrjpass-instances.def: ${GCCDIR}/gcc/passes.def $(PASSES_EXTRA)
1832233c95bSzrj	/usr/bin/awk -f ${GCCDIR}/gcc/gen-pass-instances.awk \
1842233c95bSzrj		${.ALLSRC} > ${.TARGET}
1852233c95bSzrj
1862233c95bSzrj# XXX plain cpp(1) safe? also /usr/bin/awk?
187*b1eee65cSzrj# XXX^2 cpp(1) as clang-cpp in traditional-cpp mode does not expand "FOO (blah)"
188*b1eee65cSzrjNXCCCPP?=	${NXCC} -E -P
1892233c95bSzrjparams.list: ${GCCDIR}/gcc/params-list.h ${GCCDIR}/gcc/params.def
190*b1eee65cSzrj	${NXCCCPP} ${GCCDIR}/gcc/params-list.h | sed 's/^#.*//;/^$$/d' \
1912233c95bSzrj	> tmp-params.list
1922233c95bSzrj	${MIC} tmp-params.list params.list
1932233c95bSzrj
1942233c95bSzrjparams.options: ${GCCDIR}/gcc/params-options.h ${GCCDIR}/gcc/params.def
195*b1eee65cSzrj	${NXCCCPP} ${GCCDIR}/gcc/params-options.h | sed 's/^#.*//;/^$$/d' \
1962233c95bSzrj	> tmp-params.options
1972233c95bSzrj	${MIC} tmp-params.options params.options
1982233c95bSzrj
1992233c95bSzrj# This is gold, don't ask.
2002233c95bSzrjgengtype-lex.c: gengtype-lex.l ${LEX_HEAD}
2012233c95bSzrj	${LEX} ${LFLAGS} -o${.TARGET}.tmp ${.IMPSRC}
2022233c95bSzrj	cat ${LEX_HEAD} ${.TARGET}.tmp > ${.TARGET}
2032233c95bSzrj
2042233c95bSzrjGENFILES=	${simple_generated_h} ${simple_generated_c} \
2052233c95bSzrj		tree-check.h genrtl.h insn-modes.h insn-modes-inline.h \
2062233c95bSzrj		tm-preds.h tm-constrs.h \
2072233c95bSzrj		gtype-desc.c gtype-desc.h gcov-iov.h target-hooks-def.h \
2082233c95bSzrj		common/common-target-hooks-def.h pass-instances.def \
2092233c95bSzrj		c-family/c-target-hooks-def.h min-insn-modes.c \
2102233c95bSzrj		insn-modes.c insn-constants.h insn-conditions.md \
2112233c95bSzrj		gencondmd.c gimple-match.c generic-match.c \
2122233c95bSzrj		case-cfn-macros.h cfn-operators.pd \
2132233c95bSzrj		params.list params.options \
2142233c95bSzrj		stamp-opinit stamp-tabs
2152233c95bSzrj
2162233c95bSzrjCLEANFILES+=	${GENTOOLS} ${NO_LIST}
2172233c95bSzrjCLEANFILES+=	gengtype-lex.c gengtype-lex.c.tmp
2182233c95bSzrjCLEANFILES+=	${GENFILES} gtyp-input.list gtype.state
2192233c95bSzrjCLEANFILES+=	gt-* gtype-*.h pass-instances.def
2202233c95bSzrjCLEANFILES+=	insn-opinit.[ch] insn-*tab.c
2212233c95bSzrjCLEANFILES+=	params.list params.options tmp-params.list tmp-params.options
2222233c95bSzrjCLEANDIRS+=	common c-family
2232233c95bSzrj
2242233c95bSzrjdossier:
2252233c95bSzrj	mkdir -p common c-family
2262233c95bSzrj
22711900578Szrj.if defined(LIBGCC_ONLY)
22811900578SzrjGENLIBGCC=	${GENTOOLS:Mgenconstants*} ${GENTOOLS:Mgenmodes*} \
22911900578Szrj		${GENTOOLS:Mgcov-iov*} \
23011900578Szrj		${GENFILES:Minsn-constants.h} ${GENFILES:Minsn-modes.h} \
23111900578Szrj		${GENFILES:Mgcov-iov.h}
23211900578Szrjgenfiles: dossier ${GENLIBGCC}
23311900578Szrj.else
2342233c95bSzrjgenfiles: dossier ${GENTOOLS} ${GENFILES}
23511900578Szrj.endif
2362233c95bSzrjdepend all: genfiles
2372233c95bSzrj
2382233c95bSzrj.include <bsd.obj.mk>
2392233c95bSzrj.include <bsd.dep.mk>
2404d637376Szrj.include <bsd.sys.mk>
241