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