xref: /openbsd/gnu/usr.bin/cc/cc_tools/Makefile (revision 43d0313f)
1# $FreeBSD: src/gnu/usr.bin/cc/cc_tools/Makefile,v 1.88.8.1 2009/04/15 03:14:26 kensmith Exp $
2# $OpenBSD: Makefile,v 1.19 2024/02/08 20:28:54 miod Exp $
3
4.include <bsd.own.mk>
5
6.include "../Makefile.inc"
7
8CFLAGS+=	-I.
9
10CFLAGS+=	-g
11CFLAGS+=	-DGENERATOR_FILE -DHAVE_CONFIG_H
12
13# Override LIBIBERTY set by Makefile.inc, We use our own for
14# build tools.
15LIBIBERTY=	/usr/lib/libiberty.a
16
17.PATH:	${GCCDIR} ${GCCLIB}/libiberty
18
19#-----------------------------------------------------------------------
20# Determine content of variables used by the target/host config files
21
22#
23# The list of headers to go into tm.h
24#
25
26TARGET_INC+=	options.h
27.if ${TARGET_ARCH} == "amd64"
28TARGET_INC+=	i386/biarch64.h
29.endif
30.if ${TARGET_ARCH} == "hppa64"
31TARGET_INC+=	pa/pa64-start.h
32.endif
33.if ${TARGET_ARCH} == "sh"
34TARGET_INC+=	sh/little.h
35.endif
36.if ${TARGET_ARCH} != "arm" && ${TARGET_ARCH} != "mips64" && \
37    ${TARGET_ARCH} != "mips64el"
38TARGET_INC+=	${GCC_CPU}/${GCC_CPU}.h
39.endif
40.if ${TARGET_ARCH} == "i386" || ${TARGET_ARCH} == "amd64"
41TARGET_INC+=	${GCC_CPU}/unix.h
42TARGET_INC+=	${GCC_CPU}/att.h
43.endif
44TARGET_INC+=	dbxelf.h
45.if ${TARGET_ARCH} == "alpha"
46TARGET_INC+=	alpha/elf.h
47TARGET_INC+=	alpha/openbsd1.h
48.else
49TARGET_INC+=	elfos.h
50.endif
51.if ${TARGET_ARCH} == "arm"
52TARGET_INC+=	arm/elf.h
53TARGET_INC+=	arm/aout.h
54TARGET_INC+=	arm/openbsd1.h
55TARGET_INC+=	arm/arm.h
56.endif
57.if ${TARGET_ARCH} == "sh"
58TARGET_INC+=	sh/elf.h
59.endif
60TARGET_INC+=	openbsd.h
61TARGET_INC+=	openbsd-libpthread.h
62TARGET_INC+=	openbsd-native.h
63.if ${TARGET_ARCH} == "powerpc"
64TARGET_INC+=	rs6000/secureplt.h
65TARGET_INC+=	freebsd-spec.h
66.endif
67.if ${TARGET_ARCH} != "i386" && ${TARGET_ARCH} != "amd64"
68.if exists(${GCCDIR}/config/${GCC_CPU}/sysv4.h)
69TARGET_INC+=	${GCC_CPU}/sysv4.h
70.endif
71.endif
72.if ${TARGET_ARCH} == "mips64" || ${TARGET_ARCH} == "mips64el"
73TARGET_INC+=	${GCC_CPU}/${GCC_CPU}.h
74TM_DEFINES= MIPS_ISA_DEFAULT=3 MIPS_ABI_DEFAULT=ABI_64
75.if ${TARGET_ARCH} == "mips64el"
76TM_DEFINES+= TARGET_ENDIAN_DEFAULT=0
77.endif
78.endif
79.if ${TARGET_ARCH} == "amd64"
80TARGET_INC+=	${GCC_CPU}/x86-64.h
81TARGET_INC+=	${GCC_CPU}/openbsd64.h
82.elif ${TARGET_ARCH} == "hppa64"
83TARGET_INC+=	${GCC_CPU}/openbsd64.h
84.elif ${TARGET_ARCH} == "sparc64"
85TARGET_INC+=	${GCC_CPU}/openbsd64.h
86.elif ${TARGET_ARCH} == "i386"
87TARGET_INC+=	${GCC_CPU}/openbsdelf.h
88.elif ${TARGET_ARCH} == "m88k"
89TARGET_INC+=	${GCC_CPU}/openbsdelf.h
90.else
91TARGET_INC+=	${GCC_CPU}/openbsd.h
92.endif
93TARGET_INC+=	defaults.h
94
95.for H in ${TARGET_INC}
96.for D in ${GCCDIR}/config ${GCCDIR} ${.CURDIR}
97.if exists($D/$H)
98TARGET_INC_FILES+=     $D/$H
99.endif
100.endfor
101.endfor
102
103#
104# gtyp includes.
105#
106srcdir=		${GCCDIR}
107CPPLIB_H=	${GCCLIB}/libcpp/include/line-map.h \
108		${GCCLIB}/libcpp/include/cpplib.h
109SYMTAB_H=	${GCCLIB}/libcpp/include/symtab.h
110CPP_ID_DATA_H=	${CPPLIB_H} ${GCCLIB}/libcpp/include/cpp-id-data.h
111HASHTAB_H=	${GCCLIB}/include/hashtab.h
112SPLAY_TREE_H=	${GCCLIB}/include/splay-tree.h
113out_file=	${srcdir}/config/${GCC_CPU}/${GCC_CPU}.c
114tm_file_list=	${TARGET_INC_FILES}
115host_xm_file_list= ${.CURDIR}/auto-host.h ${GCCLIB}/include/ansidecl.h
116GTFILES_SRCDIR=	${srcdir}
117
118# Copied unchanged from gcc/Makefile.in
119GTFILES = $(srcdir)/input.h $(srcdir)/coretypes.h \
120  $(CPP_ID_DATA_H) $(host_xm_file_list) \
121  $(tm_file_list) $(HASHTAB_H) $(SPLAY_TREE_H) $(srcdir)/bitmap.h \
122  $(srcdir)/coverage.c $(srcdir)/rtl.h \
123  $(srcdir)/optabs.h $(srcdir)/tree.h $(srcdir)/function.h $(srcdir)/libfuncs.h $(SYMTAB_H) \
124  $(srcdir)/real.h $(srcdir)/varray.h $(srcdir)/insn-addr.h $(srcdir)/hwint.h \
125  $(srcdir)/ipa-reference.h $(srcdir)/output.h \
126  $(srcdir)/cselib.h $(srcdir)/basic-block.h  $(srcdir)/cgraph.h \
127  $(srcdir)/c-common.h $(srcdir)/c-tree.h $(srcdir)/reload.h \
128  $(srcdir)/alias.c $(srcdir)/bitmap.c $(srcdir)/cselib.c $(srcdir)/cgraph.c \
129  $(srcdir)/ipa-prop.c $(srcdir)/ipa-cp.c $(srcdir)/ipa-inline.c \
130  $(srcdir)/dbxout.c $(srcdir)/dwarf2out.c $(srcdir)/dwarf2asm.c \
131  $(srcdir)/dojump.c $(srcdir)/tree-profile.c \
132  $(srcdir)/emit-rtl.c $(srcdir)/except.c $(srcdir)/explow.c $(srcdir)/expr.c \
133  $(srcdir)/function.c $(srcdir)/except.h \
134  $(srcdir)/gcse.c $(srcdir)/integrate.c $(srcdir)/lists.c $(srcdir)/optabs.c \
135  $(srcdir)/profile.c $(srcdir)/regclass.c \
136  $(srcdir)/reg-stack.c $(srcdir)/cfglayout.c \
137  $(srcdir)/sdbout.c $(srcdir)/stor-layout.c \
138  $(srcdir)/stringpool.c $(srcdir)/tree.c $(srcdir)/varasm.c \
139  $(srcdir)/tree-mudflap.c $(srcdir)/tree-flow.h \
140  $(srcdir)/c-objc-common.c $(srcdir)/c-common.c $(srcdir)/c-parser.c \
141  $(srcdir)/tree-ssanames.c $(srcdir)/tree-eh.c $(srcdir)/tree-ssa-address.c \
142  $(srcdir)/tree-phinodes.c $(srcdir)/tree-cfg.c \
143  $(srcdir)/tree-dfa.c $(srcdir)/tree-ssa-propagate.c \
144  $(srcdir)/tree-iterator.c $(srcdir)/gimplify.c \
145  $(srcdir)/tree-chrec.h $(srcdir)/tree-vect-generic.c \
146  $(srcdir)/tree-ssa-operands.h $(srcdir)/tree-ssa-operands.c \
147  $(srcdir)/tree-profile.c $(srcdir)/tree-nested.c \
148  $(srcdir)/ipa-reference.c $(srcdir)/tree-ssa-structalias.h \
149  $(srcdir)/tree-ssa-structalias.c \
150  $(srcdir)/c-pragma.h $(srcdir)/omp-low.c \
151  $(srcdir)/targhooks.c $(srcdir)/cgraphunit.c $(out_file) \
152
153# The list of frontend directories to look into
154GTFILES_LANG_DIR_NAMES=		cp objc
155
156# The list of language specific files for gengtype
157.for L in ${GTFILES_LANG_DIR_NAMES} c
158.if exists(${GCCDIR}/$L-config-lang.in)
159# Source the language config file
160L_GTFILES!=	sh -c '. ${GCCDIR}/$L-config-lang.in; echo $$gtfiles'
161.else
162L_GTFILES!=	sh -c '. ${GCCDIR}/$L/config-lang.in; echo $$gtfiles'
163.endif
164.for F in ${L_GTFILES}
165GTFILES_FILES+=	$F
166GTFILES_LANGS+= $L
167.endfor
168.endfor
169GTFILES+=	${GTFILES_FILES}
170
171#
172# Tree definition files.
173#
174TREE_DEF_FILES=		cp/cp-tree.def objc/objc-tree.def
175
176#
177# Option files.
178#
179OPT_FILES=	c.opt common.opt
180
181.if exists(${GCCDIR}/config/${GCC_CPU}/${GCC_CPU}.opt)
182OPT_FILES+=	${GCCDIR}/config/${GCC_CPU}/${GCC_CPU}.opt
183.endif
184
185.if exists(${.CURDIR}/${GCC_CPU}-openbsd.opt)
186OPT_FILES+=	${.CURDIR}/${GCC_CPU}-openbsd.opt
187.endif
188
189.if ${TARGET_ARCH} == "powerpc"
190OPT_FILES+=	${GCCDIR}/config/${GCC_CPU}/sysv4.opt
191.endif
192
193.if ${TARGET_ARCH} == "sparc64"
194OPT_FILES+=	${GCCDIR}/config/${GCC_CPU}/long-double-switch.opt
195.endif
196
197.if exists(${.CURDIR}/openbsd.opt)
198OPT_FILES+=	${.CURDIR}/openbsd.opt
199.endif
200
201#-----------------------------------------------------------------------
202# Build rules for header files and generator tools
203
204# Host config
205config.h:
206	TARGET_CPU_DEFAULT="${TARGET_CPU_DEFAULT}" \
207	HEADERS="auto-host.h ansidecl.h" \
208	DEFINES="" \
209	/bin/sh ${GCCDIR}/mkconfig.sh ${.TARGET}
210
211GENSRCS+=	config.h
212CLEANFILES+=	cs-config.h
213
214# Build config
215bconfig.h:
216	TARGET_CPU_DEFAULT="${TARGET_CPU_DEFAULT}" \
217	HEADERS="auto-host.h ansidecl.h" \
218	DEFINES="" \
219	/bin/sh ${GCCDIR}/mkconfig.sh ${.TARGET}
220.if exists(${GCCDIR}/config/${GCC_CPU}/${GCC_CPU}-modes.def)
221	echo '#define EXTRA_MODES_FILE "${GCC_CPU}/${GCC_CPU}-modes.def"' >> ${.TARGET}
222.endif
223
224GENSRCS+=	bconfig.h
225CLEANFILES+=	cs-bconfig.h
226
227# tconfig.h
228tconfig.h:
229	TARGET_CPU_DEFAULT="${TARGET_CPU_DEFAULT}" \
230	HEADERS="auto-host.h ansidecl.h" \
231	DEFINES="USED_FOR_TARGET" \
232	/bin/sh ${GCCDIR}/mkconfig.sh ${.TARGET}
233
234GENSRCS+=	tconfig.h
235CLEANFILES+=	cs-tconfig.h
236# Options
237optionlist: ${OPT_FILES}
238	awk -f ${GCCDIR}/opt-gather.awk ${.ALLSRC} > ${.TARGET}
239
240options.h:	optionlist
241	awk -f ${GCCDIR}/opt-functions.awk \
242	    -f ${GCCDIR}/opth-gen.awk \
243		< ${.ALLSRC} > ${.TARGET}
244
245options.c:	optionlist
246	awk -f ${GCCDIR}/opt-functions.awk \
247	    -f ${GCCDIR}/optc-gen.awk \
248		-v header_name="config.h system.h coretypes.h tm.h" \
249		< ${.ALLSRC} > ${.TARGET}
250GENONLY+=	optionlist options.h options.c
251
252# Target machine config
253tm.h:
254	TARGET_CPU_DEFAULT="${TARGET_CPU_DEFAULT}" \
255	HEADERS="${TARGET_INC}" \
256	DEFINES="${TM_DEFINES}" \
257	/bin/sh ${GCCDIR}/mkconfig.sh ${.TARGET}
258.if exists(${GCCDIR}/config/${GCC_CPU}/${GCC_CPU}-modes.def)
259	echo '#define EXTRA_MODES_FILE "${GCC_CPU}/${GCC_CPU}-modes.def"' >> ${.TARGET}
260
261# XXX This is an ugly hack to make it search in our old dir too.
262	echo '#define GPLUSPLUS_TOOL_INCLUDE_DIR PREFIX"/include/g++/${GCC_TARGET}"' >> ${.TARGET}
263.endif
264
265GENSRCS+=	tm.h
266CLEANFILES+=	cs-tm.h
267
268# Target machine protos/preds.
269tm_p.h:
270	TARGET_CPU_DEFAULT="${TARGET_CPU_DEFAULT}" \
271	HEADERS="${GCC_CPU}/${GCC_CPU}-protos.h tm-preds.h" \
272	DEFINES="" \
273	/bin/sh ${GCCDIR}/mkconfig.sh tm_p.h
274
275GENSRCS+=	tm_p.h
276CLEANFILES+=	cs-tm_p.h
277
278# gencheck
279gencheck.h: ${TREE_DEF_FILES}
280.for F in ${TREE_DEF_FILES}
281	echo "#include \"$F\""					>> ${.TARGET}
282.endfor
283	touch ${.TARGET}
284
285GENSRCS+=	gencheck.h
286
287
288# Source header for gtyp generator.
289gtyp-gen.h:	${GTFILES}
290	echo "/* This file is machine generated.  Do not edit.  */" > ${.TARGET}
291	echo "static const char * const srcdir = "		>> ${.TARGET}
292	echo "\"$(GTFILES_SRCDIR)\";"				>> ${.TARGET}
293	echo "static const char * const lang_files[] = {"	>> ${.TARGET}
294.for F in ${GTFILES_FILES}
295	echo "\"$F\", "						>> ${.TARGET}
296.endfor
297	echo "NULL};"						>> ${.TARGET}
298	echo "static const char * const langs_for_lang_files[] = {">> ${.TARGET}
299.for F in ${GTFILES_LANGS}
300	echo "\"$F\", "						>> ${.TARGET}
301.endfor
302	echo "NULL};"						>> ${.TARGET}
303	echo "static const char * const all_files[] = {"	>> ${.TARGET}
304.for F in ${GTFILES}
305	echo "\"$F\", "						>> ${.TARGET}
306.endfor
307	echo "NULL};"						>> ${.TARGET}
308	echo "static const char * const lang_dir_names[] = {"	>> ${.TARGET}
309.for F in c ${GTFILES_LANG_DIR_NAMES}
310	echo "\"$F\", "						>> ${.TARGET}
311.endfor
312	echo "NULL};"						>> ${.TARGET}
313
314GENSRCS+=	gtyp-gen.h
315
316# Version header for gcov
317gcov-iov.h:
318	echo "#define GCOV_VERSION ((gcov_unsigned_t)0x34303270)" >> ${.TARGET}
319
320GENSRCS+=	gcov-iov.h
321
322# Multilib config file
323multilib.h:
324	echo 'static const char *const multilib_raw[] = { \
325	    ". ;", NULL };'					> ${.TARGET}
326	echo 'static const char *const multilib_matches_raw[] = { \
327	    NULL };'						>> ${.TARGET}
328	echo 'static const char *multilib_extra = "";'		>> ${.TARGET}
329	echo 'static const char *multilib_options = "";'	>> ${.TARGET}
330	echo 'static const char *const multilib_exclusions_raw[] = { \
331	    NULL };'						>> ${.TARGET}
332
333GENSRCS+=	multilib.h
334
335configargs.h:
336	echo 'static const char configuration_arguments[] ='	> ${.TARGET}
337	echo '	"OpenBSD/${TARGET_ARCH} system compiler";'	>> ${.TARGET}
338	echo 'static const char thread_model[] = "posix";'	>> ${.TARGET}
339	echo 'static const struct {'				>> ${.TARGET}
340	echo '	const char *name, *value;'			>> ${.TARGET}
341	echo '} configure_default_options[] = {'		>> ${.TARGET}
342	echo '	{ "NULL", "NULL" } };'				>> ${.TARGET}
343
344GENSRCS+=	configargs.h
345
346# Language spec files
347specs.h:
348	echo '#include "cp/lang-specs.h"'			> ${.TARGET}
349	echo '#include "objc/lang-specs.h"'			>> ${.TARGET}
350
351GENSRCS+=	specs.h
352
353gstdint.h:
354	echo '#include "sys/types.h"'				> ${.TARGET}
355	echo '#include "sys/stdint.h"'				>> ${.TARGET}
356
357GENSRCS+=	gstdint.h
358
359# Linked headers
360gthr-default.h: ${GCCDIR}/gthr-posix.h
361	ln -sf ${.ALLSRC} ${.TARGET}
362
363GENSRCS+=	gthr-default.h
364
365.if ${TARGET_ARCH} == "arm"
366unwind.h: ${GCCDIR}/config/arm/unwind-arm.h
367	ln -sf ${.ALLSRC} ${.TARGET}
368.else
369unwind.h: ${GCCDIR}/unwind-generic.h
370	ln -sf ${.ALLSRC} ${.TARGET}
371.endif
372
373GENSRCS+=	unwind.h
374
375#
376# gtype gunk
377#
378gengtype-lex.c:	gengtype-lex.l
379	flex -ogengtype-lex.c ${.ALLSRC}
380
381gengtype-yacc.h gengtype-yacc.c: gengtype-yacc.y
382	yacc -d -o gengtype-yacc.c ${.ALLSRC}
383
384gengtype-yacc+%DIKED.c: gengtype-yacc.c
385	cat    ${.ALLSRC} > ${.TARGET}
386	sed -e "s/xmalloc/malloc/g" \
387	    -e "s/xrealloc/realloc/g" \
388	    -e "s/malloc/xmalloc/g" \
389	    -e "s/realloc/xrealloc/g" \
390	    ${.ALLSRC} > ${.TARGET}
391
392GENSRCS+= gengtype-lex.c gengtype-yacc.h gengtype-yacc+%DIKED.c
393CLEANFILES+= gengtype-yacc.c gengtype-lex.d gengtype-yacc+%DIKED.d
394
395gengtype: gengtype.o gengtype-yacc+%DIKED.o gengtype-lex.o errors.o \
396	  ${LIBIBERTY}
397	${CC} ${CFLAGS} ${LDFLAGS} -o ${.TARGET} ${.ALLSRC}
398CLEANFILES+= gengtype.d
399
400gtype-desc.h:	gengtype
401	./gengtype
402	touch ${.TARGET}
403
404gtype-desc.c:	gtype-desc.h
405
406GENONLY+=	gtype-desc.c gtype-desc.h
407CLEANFILES+=	gt-*.h gtype-*.h
408
409#
410# Generator tools.
411#
412.for F in check checksum genrtl modes
413gen$F:	gen$F.o errors.o ${LIBIBERTY}
414	${CC} ${CFLAGS} ${LDFLAGS} -o ${.TARGET} ${.ALLSRC}
415CLEANFILES+=	gen$F.d
416.endfor
417CLEANFILES+=	errors.d
418
419.for F in attr attrtab automata codes conditions config constants emit \
420	extract flags  opinit output peep preds recog
421gen$F:	gen$F.o rtl.o read-rtl.o ggc-none.o vec.o min-insn-modes.o \
422	gensupport.o print-rtl.o errors.o ${LIBIBERTY}
423	${CC} ${CFLAGS} ${LDFLAGS} -o ${.TARGET} ${.ALLSRC} -lm
424CLEANFILES+=	gen$F.d
425.endfor
426CLEANFILES+=	rtl.d read-rtl.d ggc-none.d vec.d min-insn-modes.d \
427	gensupport.d print-rtl.d
428
429gencondmd:	gencondmd.o
430	${CC} ${CFLAGS} ${LDFLAGS} -o ${.TARGET} ${.ALLSRC}
431CLEANFILES+=	gencondmd.d
432
433#
434# Generated .md files.
435#
436insn-conditions.md:	gencondmd
437	./gencondmd > ${.TARGET}
438GENSRCS+=	insn-conditions.md
439
440#
441# Generated header files.
442#
443
444.for F in constants
445insn-$F.h:	gen$F ${MD_FILE}
446	./gen$F ${MD_FILE} > ${.TARGET}
447GENSRCS+=	insn-$F.h
448.endfor
449
450.for F in attr codes config flags
451insn-$F.h:	gen$F ${MD_FILE} insn-conditions.md
452	./gen$F ${MD_FILE} insn-conditions.md > ${.TARGET}
453GENSRCS+=	insn-$F.h
454.endfor
455
456# Header files with irregular names.
457genrtl.h:	gengenrtl
458	./gengenrtl -h > ${.TARGET}
459GENSRCS+=	genrtl.h
460
461tm-preds.h:	genpreds
462	./genpreds -h ${MD_FILE} > ${.TARGET}
463GENSRCS+=	tm-preds.h
464
465tm-constrs.h:	genpreds
466	./genpreds -c ${MD_FILE} > ${.TARGET}
467GENSRCS+=	tm-constrs.h
468
469tree-check.h:	gencheck
470	./gencheck > ${.TARGET}
471GENSRCS+=	tree-check.h
472
473insn-modes.h:	genmodes
474	./genmodes -h > ${.TARGET}
475GENSRCS+=	insn-modes.h
476
477#
478# Generated source files.
479#
480.for F in attrtab automata emit extract opinit output peep preds recog
481insn-$F.c:	gen$F ${MD_FILE} insn-conditions.md
482	./gen$F ${MD_FILE} insn-conditions.md > ${.TARGET}
483GENONLY+=	insn-$F.c
484.endfor
485
486.for F in conditions
487insn-$F.c:	gen$F ${MD_FILE}
488	./gen$F ${MD_FILE} > ${.TARGET}
489GENSRCS+=	insn-$F.c
490.endfor
491
492# Source files with irregular names.
493insn-modes.c:	genmodes
494	./genmodes > ${.TARGET}
495GENONLY+=	insn-modes.c
496
497min-insn-modes.c:	genmodes
498	./genmodes -m > ${.TARGET}
499GENSRCS+=	min-insn-modes.c
500
501genrtl.c:	gengenrtl
502	./gengenrtl > ${.TARGET}
503GENONLY+=	genrtl.c
504
505gencondmd.c:	genconditions ${MD_FILE}
506	./genconditions ${MD_FILE} > ${.TARGET}
507GENSRCS+=	gencondmd.c
508
509#-----------------------------------------------------------------------
510# Build tools.
511
512GNTOOLS+=	genattr genattrtab genautomata gencodes gencheck genchecksum \
513		genconditions gencondmd genconfig genconstants genemit \
514		genextract genflags gengenrtl gengtype genmodes genopinit \
515		genoutput genpeep genpreds genrecog
516
517all: ${GNTOOLS} ${GENSRCS} ${GENONLY}
518
519#-----------------------------------------------------------------------
520# Fixups.
521
522# Set OBJS the same as bsd.prog.mk would do if we defined PROG.  We can't
523# define PROG because we have multiple programs.
524#
525SRCS=		errors.c genattr.c genattrtab.c \
526		genautomata.c gencheck.c genchecksum.c gencodes.c \
527		genconditions.c genconfig.c genconstants.c genemit.c \
528		genextract.c genflags.c gengenrtl.c gengtype.c genmodes.c \
529		genopinit.c genoutput.c genpeep.c genpreds.c genrecog.c \
530		gensupport.c ggc-none.c print-rtl.c read-rtl.c rtl.c \
531		vec.c
532
533SRCS+=		${GENSRCS}
534OBJS+=		${SRCS:N*.h:R:S/$/.o/g}
535GENOBJS+=	${GENSRCS:N*.h:R:S/$/.o/g}
536CLEANFILES+=	${GENSRCS} ${GENONLY} ${GENOBJS} ${GNTOOLS}
537
538#-----------------------------------------------------------------------
539# Manual dependencies.
540.include  "Makefile.dep"
541
542.include <bsd.prog.mk>
543# DO NOT DELETE
544