1# Despite the source files ending in ".c", the c++ compiler needs to build 2# everything. We have to roll our own targets to properly support this. 3 4.include "../Makefile.inc" 5.include "../../Makefile.langs" 6 7NXCXXFLAGS+= -DGENERATOR_FILE -I${.OBJDIR} 8BUILD_LIBS= ../libiberty/libiberty.na 9BUILD_LIBS_genmatch= ../libcpp/libcpp.na 10LEX_HEAD= ../../cc_prep/gengtype-lex.head 11NXLD_genautomata= -lm 12 13MIC= sh ${GCCDIR}/move-if-change 14 15BUILD_RTL= rtl.no \ 16 read-rtl.no \ 17 ggc-none.no \ 18 vec.no \ 19 min-insn-modes.no \ 20 gensupport.no \ 21 print-rtl.no \ 22 hash-table.no 23BUILD_MD= read-md.no 24BUILD_ERRORS= errors.no 25BUILD_GTYPE= gengtype-lex.no \ 26 gengtype-parse.no \ 27 gengtype-state.no \ 28 version.no 29 30genprogrtl= attr attr-common attrtab automata codes conditions config emit \ 31 extract flags opinit output peep preds recog mddump target-def 32genprogmd= $(genprogrtl) mddeps constants enums 33genprogerr= $(genprogmd) genrtl modes gtype hooks cfn-macros match 34genprog= $(genprogerr) check checksum condmd 35 36NO_RTL= ${genprogrtl:S/^/gen/g:S/$/.no/g} 37NO_MD= ${genprogmd:S/^/gen/g:S/$/.no/g} 38NO_PROGERR= ${genprogerr:S/^/gen/g:S/$/.no/g} 39NO_PROG= ${genprog:S/^/gen/g:S/$/.no/g} 40NO_LIST= ${BUILD_RTL} ${BUILD_MD} ${BUILD_ERRORS} \ 41 ${BUILD_GTYPE} ${NO_PROG} 42 43# All these RTL objects needs common headers (tbc) 44${BUILD_RTL}: tm.h insn-modes.h insn-modes-inline.h gtype-desc.h insn-constants.h 45# All these programs use the RTL reader ($(BUILD_RTL)). 46${NO_RTL}: ${BUILD_RTL} 47# All these programs use the MD reader 48${NO_MD}: ${BUILD_MD} 49# All these programs need to report errors. 50${NO_PROGERR}: ${BUILD_ERRORS} 51 52.for f in ${genprogrtl} 53gen${f}.nx: ${BUILD_RTL} 54.endfor 55 56.for f in ${genprogmd} 57gen${f}.nx: ${BUILD_MD} 58.endfor 59 60.for f in ${genprogerr} 61gen${f}.nx: ${BUILD_ERRORS} 62.endfor 63 64.for f in ${genprog} 65GENTOOLS+= gen${f}.nx 66.endfor 67 68# For some reason, gcov-iov is an oddball 69GENTOOLS+= gcov-iov.nx 70NO_LIST+= gcov-iov.no 71 72gengtype.nx: ${BUILD_GTYPE} 73genmatch.nx: hash-table.no vec.no 74gencfn-macros.nx: hash-table.no vec.no ggc-none.no 75 76.for f in ${GENTOOLS} 77$f: ${f:.nx=.no} ${BUILD_LIBS_${f:R}} ${BUILD_LIBS} 78 ${NXCXX} ${NXCXXFLAGS:N-flto} ${NXLDFLAGS} ${.ALLSRC:M*.n[oa]} \ 79 ${NXLD_${f:R}} -o ${.TARGET} 80.endfor 81 82.for nofile in ${NO_LIST} 83${nofile}: ${nofile:.no=.c} 84 ${NXCXX} ${NXCXXFLAGS:N-flto} -c ${.IMPSRC} -o ${.TARGET} 85.endfor 86 87gencheck.no: tm.h insn-constants.h 88gencondmd.no: insn-constants.h 89read-md.no: insn-modes.h insn-modes-inline.h 90gencfn-macros.no: insn-modes.h gtype-desc.h 91 92MD_DEPS= ${GCCDIR}/gcc/common.md ${md_file} 93MD_DEPS_PLUS= ${MD_DEPS} insn-conditions.md 94 95_MIC: .USE 96 ${MIC} ${.TARGET}.tmp ${.TARGET} 97_PL: .USE 98 ${.OBJDIR}/${.ALLSRC:M*.nx} > ${.TARGET}.tmp 99 ${MIC} ${.TARGET}.tmp ${.TARGET} 100_MD: .USE 101 ${.OBJDIR}/${.ALLSRC:M*.nx} ${MD_DEPS} > ${.TARGET}.tmp 102 ${MIC} ${.TARGET}.tmp ${.TARGET} 103 104simple_rtl_generated_h= insn-attr.h insn-attr-common.h insn-codes.h \ 105 insn-config.h insn-flags.h insn-target-def.h 106simple_rtl_generated_c= insn-automata.c insn-emit.c insn-extract.c \ 107 insn-output.c insn-peep.c insn-recog.c 108 109simple_generated_h= $(simple_rtl_generated_h) insn-constants.h 110simple_generated_c= $(simple_rtl_generated_c) insn-enums.c insn-preds.c 111 112.for f in ${simple_rtl_generated_h} ${simple_rtl_generated_c} 113. for generator in gen${f:R:S/^insn-//}.nx 114$f: ${generator} ${MD_DEPS_PLUS} _MIC 115 ${.OBJDIR}/${generator} ${MD_DEPS_PLUS} > ${.TARGET}.tmp 116. endfor 117.endfor 118 119insn-modes.h: genmodes.nx _MIC 120 ${.OBJDIR}/${.ALLSRC:M*.nx} -h > ${.TARGET}.tmp 121insn-modes-inline.h: genmodes.nx _MIC 122 ${.OBJDIR}/${.ALLSRC:M*.nx} -i > ${.TARGET}.tmp 123gtyp-input.list: _MIC 124 rm -f ${.TARGET}.tmp 125 for f in ${GTFILES}; do \ 126 echo "$$f" >> ${.TARGET}.tmp; \ 127 done 128gtype.state: gengtype.nx gtyp-input.list ${GTFILES:N[*]} _MIC 129 ${.OBJDIR}/${.ALLSRC:M*.nx} -S ${GCCDIR}/gcc -I ${.ALLSRC:M*.list} \ 130 -w gtype.state.tmp 131gtype-desc.c gtype-desc.h: gengtype.nx gtype.state 132 ${.OBJDIR}/${.ALLSRC:M*.nx} -r gtype.state 133genrtl.h: gengenrtl.nx _MIC 134 ${.OBJDIR}/${.ALLSRC:M*.nx} > ${.TARGET}.tmp 135min-insn-modes.c: genmodes.nx _MIC 136 ${.OBJDIR}/${.ALLSRC:M*.nx} -m > ${.TARGET}.tmp 137tm-preds.h: genpreds.nx ${MD_DEPS} _MIC 138 ${.OBJDIR}/${.ALLSRC:M*.nx} -h ${MD_DEPS} > ${.TARGET}.tmp 139tm-constrs.h: genpreds.nx ${MD_DEPS} _MIC 140 ${.OBJDIR}/${.ALLSRC:M*.nx} -c ${MD_DEPS} > ${.TARGET}.tmp 141case-cfn-macros.h: gencfn-macros.nx _MIC 142 ${.OBJDIR}/${.ALLSRC:M*.nx} -c > ${.TARGET}.tmp 143cfn-operators.pd: gencfn-macros.nx _MIC 144 ${.OBJDIR}/${.ALLSRC:M*.nx} -o > ${.TARGET}.tmp 145insn-constants.h: genconstants.nx ${MD_DEPS} _MD 146insn-enums.c: genenums.nx ${MD_DEPS} _MD 147insn-preds.c: genpreds.nx ${MD_DEPS} _MD 148gencondmd.c: genconditions.nx ${MD_DEPS} tm-preds.h tm-constrs.h _MD 149insn-conditions.md: gencondmd.nx _PL 150insn-modes.c: genmodes.nx _PL 151tree-check.h: gencheck.nx _PL 152gcov-iov.h: gcov-iov.nx BASE-VER _MIC 153 ${.OBJDIR}/${.ALLSRC:M*.nx} '${GCCCOMPLETEVER}' '' > ${.TARGET}.tmp 154target-hooks-def.h: genhooks.nx _MIC 155 ${.OBJDIR}/${.ALLSRC:M*.nx} "Target Hook" > ${.TARGET}.tmp 156common/common-target-hooks-def.h: genhooks.nx _MIC 157 ${.OBJDIR}/${.ALLSRC:M*.nx} "Common Target Hook" > ${.TARGET}.tmp 158c-family/c-target-hooks-def.h: genhooks.nx _MIC 159 ${.OBJDIR}/${.ALLSRC:M*.nx} "C Target Hook" > ${.TARGET}.tmp 160stamp-opinit: genopinit.nx ${MD_DEPS_PLUS} 161 ${.OBJDIR}/${.ALLSRC:M*.nx} ${.ALLSRC:M*.md} \ 162 -hinsn-opinit.h.tmp -cinsn-opinit.c.tmp 163 ${MIC} insn-opinit.h.tmp insn-opinit.h 164 ${MIC} insn-opinit.c.tmp insn-opinit.c 165 touch stamp-opinit 166stamp-tabs: genattrtab.nx ${MD_DEPS_PLUS} 167 ${.OBJDIR}/${.ALLSRC:M*.nx} ${.ALLSRC:M*.md} \ 168 -Ainsn-attrtab.c.tmp -Dinsn-dfatab.c.tmp \ 169 -Linsn-latencytab.c.tmp 170 ${MIC} insn-attrtab.c.tmp insn-attrtab.c 171 ${MIC} insn-dfatab.c.tmp insn-dfatab.c 172 ${MIC} insn-latencytab.c.tmp insn-latencytab.c 173 touch stamp-tabs 174gimple-match.c: genmatch.nx match.pd cfn-operators.pd gimple-match-head.c _MIC 175 ${.OBJDIR}/${.ALLSRC:M*.nx} --gimple ${GCCDIR}/gcc/match.pd \ 176 > ${.TARGET}.tmp 177generic-match.c: genmatch.nx match.pd cfn-operators.pd generic-match-head.c _MIC 178 ${.OBJDIR}/${.ALLSRC:M*.nx} --generic ${GCCDIR}/gcc/match.pd \ 179 > ${.TARGET}.tmp 180genmatch.c hash-table.c: gtype-desc.h 181 182pass-instances.def: ${GCCDIR}/gcc/passes.def $(PASSES_EXTRA) 183 /usr/bin/awk -f ${GCCDIR}/gcc/gen-pass-instances.awk \ 184 ${.ALLSRC} > ${.TARGET} 185 186# XXX plain cpp(1) safe? also /usr/bin/awk? 187# XXX^2 cpp(1) as clang-cpp in traditional-cpp mode does not expand "FOO (blah)" 188NXCCCPP?= ${NXCC} -E -P 189params.list: ${GCCDIR}/gcc/params-list.h ${GCCDIR}/gcc/params.def 190 ${NXCCCPP} ${GCCDIR}/gcc/params-list.h | sed 's/^#.*//;/^$$/d' \ 191 > tmp-params.list 192 ${MIC} tmp-params.list params.list 193 194params.options: ${GCCDIR}/gcc/params-options.h ${GCCDIR}/gcc/params.def 195 ${NXCCCPP} ${GCCDIR}/gcc/params-options.h | sed 's/^#.*//;/^$$/d' \ 196 > tmp-params.options 197 ${MIC} tmp-params.options params.options 198 199# This is gold, don't ask. 200gengtype-lex.c: gengtype-lex.l ${LEX_HEAD} 201 ${LEX} ${LFLAGS} -o${.TARGET}.tmp ${.IMPSRC} 202 cat ${LEX_HEAD} ${.TARGET}.tmp > ${.TARGET} 203 204GENFILES= ${simple_generated_h} ${simple_generated_c} \ 205 tree-check.h genrtl.h insn-modes.h insn-modes-inline.h \ 206 tm-preds.h tm-constrs.h \ 207 gtype-desc.c gtype-desc.h gcov-iov.h target-hooks-def.h \ 208 common/common-target-hooks-def.h pass-instances.def \ 209 c-family/c-target-hooks-def.h min-insn-modes.c \ 210 insn-modes.c insn-constants.h insn-conditions.md \ 211 gencondmd.c gimple-match.c generic-match.c \ 212 case-cfn-macros.h cfn-operators.pd \ 213 params.list params.options \ 214 stamp-opinit stamp-tabs 215 216CLEANFILES+= ${GENTOOLS} ${NO_LIST} 217CLEANFILES+= gengtype-lex.c gengtype-lex.c.tmp 218CLEANFILES+= ${GENFILES} gtyp-input.list gtype.state 219CLEANFILES+= gt-* gtype-*.h pass-instances.def 220CLEANFILES+= insn-opinit.[ch] insn-*tab.c 221CLEANFILES+= params.list params.options tmp-params.list tmp-params.options 222CLEANDIRS+= common c-family 223 224dossier: 225 mkdir -p common c-family 226 227.if defined(LIBGCC_ONLY) 228GENLIBGCC= ${GENTOOLS:Mgenconstants*} ${GENTOOLS:Mgenmodes*} \ 229 ${GENTOOLS:Mgcov-iov*} \ 230 ${GENFILES:Minsn-constants.h} ${GENFILES:Minsn-modes.h} \ 231 ${GENFILES:Mgcov-iov.h} 232genfiles: dossier ${GENLIBGCC} 233.else 234genfiles: dossier ${GENTOOLS} ${GENFILES} 235.endif 236depend all: genfiles 237 238.include <bsd.obj.mk> 239.include <bsd.dep.mk> 240.include <bsd.sys.mk> 241