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