1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
|
#
# $Id: Makefile,v 1.30 1999/04/22 19:35:16 obrien Exp $
#
#
# This could probably be merged with ../cc_int/Makefile, but bsd.lib.mk
# is such a !@#!*#% nightmare because of how it reprograms the dependencies,
# suffix rules, SRCS, etc. It's easiest to cheat by using bsd.prog.mk and
# SRCS to get dependencies.
#
# ../Makefile.inc will put an absolute path to our objdir in CFLAGS.
# Prevent mkdep from using it, so that we don't have to give rules for
# aliases of generated headers.
#
CFLAGS+= -I.
.include "../Makefile.inc"
.PATH: ${GCCDIR} ${GCCDIR}/cp
CFLAGS+= -I${GCCDIR}/objc
#-----------------------------------------------------------------------
# insn-* gunk
.for i in attr codes config flags
insn-$i.h: gen$i ${MD_FILE}
./gen$i ${MD_FILE} > insn-$i.h
GENSRCS+= insn-$i.h
.endfor
.for i in attrtab emit extract opinit output peep recog
insn-$i.c: gen$i ${MD_FILE}
./gen$i ${MD_FILE} > insn-$i.c
GENSRCS+= insn-$i.c
.endfor
.for i in attr codes config emit extract flags opinit output peep recog
build-tools: gen$i
gen$i: gen$i.o rtl.o obstack.o bitmap.o
${CC} -static ${CFLAGS} ${LDFLAGS} -o ${.TARGET} ${.ALLSRC}
GENSRCS+= gen$i.c
CLEANFILES+= gen$i
.endfor
.for i in attrtab
build-tools: gen$i
gen$i: gen$i.o rtl.o rtlanal.o print-rtl.o obstack.o bitmap.o
${CC} -static ${CFLAGS} ${LDFLAGS} -o ${.TARGET} ${.ALLSRC}
GENSRCS+= gen$i.c
CLEANFILES+= gen$i
.endfor
SRCS+= bitmap.c obstack.c print-rtl.c rtl.c rtlanal.c
.for i in check genrtl
build-tools: gen$i
gen$i: gen$i.o
${CC} -static ${CFLAGS} ${LDFLAGS} -o ${.TARGET} ${.ALLSRC}
GENSRCS+= gen$i.c
CLEANFILES+= gen$i
.endfor
.ORDER: genrtl.c genrtl.h
genrtl.c genrtl.h: gengenrtl
./gengenrtl genrtl.h genrtl.c
GENSRCS+= genrtl.c genrtl.h
#-----------------------------------------------------------------------
# C hash codes
c-gperf.h: c-parse.gperf
gperf -p -j1 -i 1 -g -o -t -G -N is_reserved_word -k1,3,$$ \
${GCCDIR}/c-parse.gperf > ${.TARGET}
GENSRCS+= c-gperf.h
#-----------------------------------------------------------------------
# C++ hash codes
hash.h: gxx.gperf
gperf -p -j1 -g -o -t -N is_reserved_word '-k1,4,7,$$' \
${GCCDIR}/cp/gxx.gperf >hash.h
GENSRCS+= hash.h
#-----------------------------------------------------------------------
# Common parser stuff.
tree-check.h: gencheck
./gencheck > ${.TARGET}
GENSRCS+= tree-check.h
#-----------------------------------------------------------------------
# C parser
.ORDER: c-parse.c c-parse.h
c-parse.c c-parse.h: c-parse.in
sed -e "/^ifobjc$$/,/^end ifobjc$$/d" \
-e "/^ifc$$/d" -e "/^end ifc$$/d" \
${GCCDIR}/c-parse.in > c-parse.y
${BISON} -d c-parse.y -o c-parse.c
rm -f c-parse.y
GENSRCS+= c-parse.c c-parse.h
CLEANFILES+= c-parse.y # insurance
#-----------------------------------------------------------------------
# objc parser
.ORDER: objc-parse.c objc-parse.h
objc-parse.c objc-parse.h: c-parse.in
sed -e "/^ifc$$/,/^end ifc$$/d" \
-e "/^ifobjc$$/d" -e "/^end ifobjc$$/d" \
${GCCDIR}/c-parse.in > objc-parse.y
${BISON} -d objc-parse.y -o objc-parse.c
rm -f objc-parse.y
GENSRCS+= objc-parse.c objc-parse.h
CLEANFILES+= objc-parse.y # insurance
#-----------------------------------------------------------------------
# C++ parser done in its own makefile
#-----------------------------------------------------------------------
# CPP parser done in its own makefile
#-----------------------------------------------------------------------
# the host/target compiler config.
COMMONHDRS= config.h hconfig.h multilib.h options.h specs.h tconfig.h tm.h
GENSRCS+= ${COMMONHDRS}
config.h hconfig.h:
echo '#include "auto-host.h"' > ${.TARGET}
echo '#include "${GCC_ARCH}/xm-${GCC_ARCH}.h"' >> ${.TARGET}
multilib.h:
echo 'static char *multilib_raw[] = { \
"aout maout;", "elf !maout;", NULL };' > ${.TARGET}
echo 'static char *multilib_matches_raw[] = { \
"maout maout;", "melf melf;", NULL };' >> ${.TARGET}
echo 'static char *multilib_extra = "";' >> ${.TARGET}
options.h:
echo '#include "cp/lang-options.h"' > ${.TARGET}
echo '#include "f/lang-options.h"' >> ${.TARGET}
specs.h:
echo '#include "cp/lang-specs.h"' > ${.TARGET}
echo '#include "f/lang-specs.h"' >> ${.TARGET}
tconfig.h:
echo '#include "${GCC_ARCH}/xm-${GCC_ARCH}.h"' > ${.TARGET}
tm.h:
echo '#include "${GCC_ARCH}/${GCC_ARCH}.h"' > ${.TARGET}
echo '#include "${GCC_ARCH}/freebsd.h"' >> ${.TARGET}
.if ${GCC_ARCH} == "i386"
echo '#include "${GCC_ARCH}/perform.h"' >> ${.TARGET}
.endif
#-----------------------------------------------------------------------
# General things.
SRCS+= ${GENSRCS}
CLEANFILES+= ${GENSRCS}
all: ${SRCS}
.include <bsd.prog.mk>
#-----------------------------------------------------------------------
# Fixups.
# Set OBJS the same as bsd.prog.mk would do if we defined PROG. We can't
# define PROG because we have multiple programs.
#
OBJS+= ${SRCS:N*.h:R:S/$/.o/g}
.if !exists(${DEPENDFILE})
# Fudge pre-dependfile dependencies of objects in much the same way as
# bsd.prog.mk would do if we defined PROG. There are complications to
# avoid circular dependencies. First, only make most objects depend on
# all headers. Filter out the objects that would cause problems (i.e.,
# objects that will be used to create programs that will generate headers).
#
${OBJS:Nbitmap.o:Ngenattr.o:Ngencheck.o:Ngencodes.o:Ngenconfig.o:Ngenflags.o:Ngengenrtl.o:Nobstack.o:Nrtl.o}: ${SRCS:M*.h}
# Next, make each of the problematic objects depend on only most headers.
# Filter out the headers that would cause problems (and a few more when it
# is inconvenient to filter precisely).
#
bitmap.o genattr.o gencodes.o genconfig.o genflags.o obstack.o rtl.o: \
${SRCS:M*.h:Ninsn-*.h}
gencheck.o: ${SRCS:M*.h:Ngenrtl.h:Ntree-check.h:Ninsn-*.h}
gengenrtl.o: ${SRCS:M*.h:Ngenrtl.h:Ninsn-*.h}
.endif
|