summaryrefslogtreecommitdiffstats
path: root/gnu/usr.bin/cc/cc_tools/Makefile
blob: 72e563c16d80cae679c65d40f87f8216a374ebf6 (plain)
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
#
# $Id: Makefile,v 1.13 1998/08/20 21:45:46 jb 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"

#-----------------------------------------------------------------------
# Bytecode components

.for i in arity opcode opname
build-tools: bi-$i

bc-$i.h: bi-$i bytecode.def
	./bi-$i < ${GCCDIR}/bytecode.def > bc-$i.h

bi-$i: bi-$i.o bi-parser.o bi-lexer.o bi-reverse.o
	${CC} -static ${CFLAGS} ${LDFLAGS} -o ${.TARGET} ${.ALLSRC}

GENSRCS+=	bc-$i.h bi-$i.c
CLEANFILES+=	bi-$i
.endfor

.ORDER: bi-parser.c bi-parser.h
bi-parser.c bi-parser.h: bi-parser.y
	${BISON} ${BISONFLAGS} -d ${.ALLSRC} -o bi-parser.c

SRCS+=		bi-lexer.c bi-reverse.c
GENSRCS+=	bi-parser.c bi-parser.h

#-----------------------------------------------------------------------
# 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
	${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
	${CC} -static ${CFLAGS} ${LDFLAGS} -o ${.TARGET} ${.ALLSRC}

GENSRCS+=	gen$i.c
CLEANFILES+=	gen$i
.endfor

SRCS+=		print-rtl.c rtl.c rtlanal.c obstack.c

#-----------------------------------------------------------------------
# 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

#-----------------------------------------------------------------------
# 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 options.h specs.h tconfig.h tm.h
GENSRCS+=	${COMMONHDRS}

config.h hconfig.h tconfig.h:
	echo '#include "${MACHINE_ARCH}/xm-freebsd.h"' > ${.TARGET}
options.h:
	echo '#include "cp/lang-options.h"' > ${.TARGET}
specs.h:
	echo '#include "cp/lang-specs.h"'> ${.TARGET}
	echo '#include "f2c-specs.h"'    >> ${.TARGET}
tm.h:
	echo '#include "${MACHINE_ARCH}/freebsd.h"' > ${.TARGET}

#-----------------------------------------------------------------------
# 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 the same as bsd.prog.mk
# would do if we defined PROG, except for leaving out dependencies on
# bc-*.h and insn-*.h because these dependencies would be circular.
#
${OBJS}: ${SRCS:M*.h:Nbc-*.h:Ninsn-*.h}

# Give all dependencies on bc-*.h and insn-*.h explicitly (none here for
# bc-*.h).  This suffices for `make -j<any> depend', and after that all
# the dependencies will be in .depend since all .c source files are in
# SRCS.
#
genattrtab.o genextract.o: insn-config.h
insn-attrtab.o: insn-attr.h insn-config.h
insn-emit.o: insn-codes.h insn-config.h insn-flags.h
insn-opinit.o: insn-codes.h insn-config.h insn-flags.h
insn-output.o: insn-attr.h insn-codes.h insn-config.h insn-flags.h
insn-recog.o: insn-config.h
.endif
OpenPOWER on IntegriCloud