]>
Commit | Line | Data |
---|---|---|
b4c522fa | 1 | # Make-lang.in -- Top level -*- makefile -*- fragment for the D frontend. |
99dee823 | 2 | # Copyright (C) 2006-2021 Free Software Foundation, Inc. |
b4c522fa IB |
3 | |
4 | # GCC is free software; you can redistribute it and/or modify | |
5 | # it under the terms of the GNU General Public License as published by | |
6 | # the Free Software Foundation; either version 3, or (at your option) | |
7 | # any later version. | |
8 | ||
9 | # GCC is distributed in the hope that it will be useful, | |
10 | # but WITHOUT ANY WARRANTY; without even the implied warranty of | |
11 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
12 | # GNU General Public License for more details. | |
13 | ||
14 | # You should have received a copy of the GNU General Public License | |
15 | # along with GCC; see the file COPYING3. If not see | |
16 | # <http://www.gnu.org/licenses/>. | |
17 | ||
18 | # This file provides the language dependent support in the main Makefile. | |
19 | ||
20 | # Installation name. | |
21 | ||
22 | D_INSTALL_NAME = $(shell echo gdc|sed '$(program_transform_name)') | |
23 | D_TARGET_INSTALL_NAME = $(target_noncanonical)-$(shell echo gdc|sed '$(program_transform_name)') | |
24 | ||
25 | # Name of phobos library | |
26 | D_LIBPHOBOS = -DLIBPHOBOS=\"gphobos\" | |
27 | ||
28 | # The name for selecting d in LANGUAGES. | |
29 | d: d21$(exeext) | |
a774a6a2 | 30 | d.serial = d21$(exeext) |
b4c522fa IB |
31 | |
32 | # Tell GNU make to ignore these if they exist. | |
a774a6a2 | 33 | .PHONY: d |
b4c522fa IB |
34 | |
35 | # Create the compiler driver for D. | |
36 | CFLAGS-d/d-spec.o += $(DRIVER_DEFINES) $(D_LIBPHOBOS) | |
37 | ||
38 | GDC_OBJS = $(GCC_OBJS) d/d-spec.o | |
39 | gdc$(exeext): $(GDC_OBJS) $(EXTRA_GCC_OBJS) libcommon-target.a $(LIBDEPS) | |
40 | +$(LINKER) $(ALL_LINKERFLAGS) $(LDFLAGS) -o $@ \ | |
41 | $(GDC_OBJS) $(EXTRA_GCC_OBJS) libcommon-target.a \ | |
42 | $(EXTRA_GCC_LIBS) $(LIBS) | |
43 | ||
44 | # Create a version of the gdc driver which calls the cross-compiler. | |
45 | gdc-cross$(exeext): gdc$(exeext) | |
46 | -rm -f gdc-cross$(exeext) | |
47 | cp gdc$(exeext) gdc-cross$(exeext) | |
48 | ||
49 | # Filter out pedantic and virtual overload warnings. | |
50 | d-warn = $(filter-out -pedantic -Woverloaded-virtual, $(STRICT_WARN)) | |
51 | ||
52 | # Also filter out warnings for missing format attributes in the D Frontend. | |
53 | DMD_WARN_CXXFLAGS = $(filter-out -Wmissing-format-attribute, $(WARN_CXXFLAGS)) | |
54 | DMD_COMPILE = $(subst $(WARN_CXXFLAGS), $(DMD_WARN_CXXFLAGS), $(COMPILE)) | |
55 | DMDGEN_COMPILE = $(subst $(COMPILER), $(COMPILER_FOR_BUILD), $(DMD_COMPILE)) | |
56 | ||
57 | # D Frontend object files. | |
58 | D_FRONTEND_OBJS = \ | |
59 | d/aav.o \ | |
60 | d/access.o \ | |
61 | d/aliasthis.o \ | |
62 | d/apply.o \ | |
b4c522fa IB |
63 | d/arrayop.o \ |
64 | d/attrib.o \ | |
65 | d/blockexit.o \ | |
66 | d/canthrow.o \ | |
67 | d/checkedint.o \ | |
68 | d/clone.o \ | |
69 | d/cond.o \ | |
70 | d/constfold.o \ | |
71 | d/cppmangle.o \ | |
72 | d/ctfeexpr.o \ | |
73 | d/dcast.o \ | |
74 | d/dclass.o \ | |
75 | d/declaration.o \ | |
76 | d/delegatize.o \ | |
77 | d/denum.o \ | |
78 | d/dimport.o \ | |
79 | d/dinterpret.o \ | |
80 | d/dmacro.o \ | |
81 | d/dmangle.o \ | |
82 | d/dmodule.o \ | |
83 | d/doc.o \ | |
84 | d/dscope.o \ | |
85 | d/dstruct.o \ | |
86 | d/dsymbol.o \ | |
87 | d/dtemplate.o \ | |
88 | d/dversion.o \ | |
89 | d/entity.o \ | |
90 | d/escape.o \ | |
91 | d/expression.o \ | |
92 | d/expressionsem.o \ | |
93 | d/file.o \ | |
94 | d/filename.o \ | |
95 | d/func.o \ | |
96 | d/hdrgen.o \ | |
97 | d/iasm.o \ | |
98 | d/iasmgcc.o \ | |
99 | d/identifier.o \ | |
100 | d/imphint.o \ | |
101 | d/init.o \ | |
102 | d/initsem.o \ | |
103 | d/intrange.o \ | |
104 | d/json.o \ | |
105 | d/lexer.o \ | |
106 | d/mtype.o \ | |
107 | d/nogc.o \ | |
108 | d/nspace.o \ | |
109 | d/objc.o \ | |
110 | d/opover.o \ | |
111 | d/optimize.o \ | |
112 | d/outbuffer.o \ | |
113 | d/parse.o \ | |
114 | d/rmem.o \ | |
115 | d/rootobject.o \ | |
116 | d/safe.o \ | |
117 | d/sapply.o \ | |
118 | d/sideeffect.o \ | |
119 | d/speller.o \ | |
120 | d/statement.o \ | |
121 | d/statementsem.o \ | |
122 | d/staticassert.o \ | |
123 | d/staticcond.o \ | |
124 | d/stringtable.o \ | |
125 | d/tokens.o \ | |
126 | d/traits.o \ | |
127 | d/typesem.o \ | |
128 | d/utf.o \ | |
129 | d/utils.o | |
130 | ||
131 | # D Frontend generated files. | |
132 | D_GENERATED_SRCS = d/id.c d/id.h d/impcnvtab.c | |
133 | D_GENERATED_OBJS = d/id.o d/impcnvtab.o | |
134 | ||
135 | # Language-specific object files for D. | |
136 | D_OBJS = \ | |
2803d2f2 IB |
137 | d/d-attribs.o \ |
138 | d/d-builtins.o \ | |
139 | d/d-codegen.o \ | |
140 | d/d-compiler.o \ | |
141 | d/d-convert.o \ | |
142 | d/d-ctfloat.o \ | |
143 | d/d-diagnostic.o \ | |
144 | d/d-frontend.o \ | |
e966361c | 145 | d/d-gimplify.o \ |
2803d2f2 IB |
146 | d/d-incpath.o \ |
147 | d/d-lang.o \ | |
148 | d/d-longdouble.o \ | |
149 | d/d-port.o \ | |
150 | d/d-target.o \ | |
151 | d/decl.o \ | |
152 | d/expr.o \ | |
153 | d/imports.o \ | |
154 | d/intrinsics.o \ | |
155 | d/modules.o \ | |
156 | d/runtime.o \ | |
157 | d/toir.o \ | |
158 | d/typeinfo.o \ | |
159 | d/types.o | |
b4c522fa IB |
160 | |
161 | # All language-specific object files for D. | |
162 | D_ALL_OBJS = $(D_FRONTEND_OBJS) $(D_GENERATED_OBJS) $(D_OBJS) $(D_TARGET_OBJS) | |
163 | ||
164 | d_OBJS = $(D_ALL_OBJS) d/d-spec.o | |
165 | ||
a774a6a2 | 166 | d21$(exeext): $(D_ALL_OBJS) attribs.o $(BACKEND) $(LIBDEPS) $(d.prev) |
d326ebc9 | 167 | @$(call LINK_PROGRESS,$(INDEX.d),start) |
b4c522fa IB |
168 | +$(LLINKER) $(ALL_LINKERFLAGS) $(LDFLAGS) -o $@ \ |
169 | $(D_ALL_OBJS) attribs.o $(BACKEND) $(LIBS) $(BACKENDLIBS) | |
d326ebc9 | 170 | @$(call LINK_PROGRESS,$(INDEX.d),end) |
b4c522fa IB |
171 | |
172 | # Documentation. | |
173 | ||
174 | D_TEXI_FILES = \ | |
175 | d/gdc.texi \ | |
176 | $(gcc_docdir)/include/fdl.texi \ | |
177 | $(gcc_docdir)/include/gpl_v3.texi \ | |
178 | $(gcc_docdir)/include/gcc-common.texi \ | |
179 | gcc-vers.texi | |
180 | ||
181 | doc/gdc.info: $(D_TEXI_FILES) | |
182 | if test "x$(BUILD_INFO)" = xinfo; then \ | |
183 | rm -f doc/gdc.info*; \ | |
184 | $(MAKEINFO) $(MAKEINFOFLAGS) -I $(gcc_docdir) \ | |
185 | -I $(gcc_docdir)/include -o $@ $<; \ | |
186 | else true; fi | |
187 | ||
188 | doc/gdc.dvi: $(D_TEXI_FILES) | |
189 | $(TEXI2DVI) -I $(abs_docdir) -I $(abs_docdir)/include -o $@ $< | |
190 | ||
191 | doc/gdc.pdf: $(D_TEXI_FILES) | |
192 | $(TEXI2PDF) -I $(abs_docdir) -I $(abs_docdir)/include -o $@ $< | |
193 | ||
194 | $(build_htmldir)/d/index.html: $(D_TEXI_FILES) | |
195 | $(mkinstalldirs) $(@D) | |
196 | rm -f $(@D)/* | |
197 | $(TEXI2HTML) -I $(gcc_docdir) -I $(gcc_docdir)/include \ | |
198 | -I $(srcdir)/d -o $(@D) $< | |
199 | ||
200 | .INTERMEDIATE: gdc.pod | |
201 | ||
202 | gdc.pod: d/gdc.texi | |
203 | -$(TEXI2POD) -D gdc < $< > $@ | |
204 | ||
205 | # Build hooks. | |
206 | ||
207 | d.all.cross: gdc-cross$(exeext) | |
208 | d.start.encap: gdc$(exeext) | |
209 | d.rest.encap: | |
210 | d.info: doc/gdc.info | |
211 | d.dvi: doc/gdc.dvi | |
212 | d.pdf: doc/gdc.pdf | |
213 | d.html: $(build_htmldir)/d/index.html | |
214 | d.srcinfo: doc/gdc.info | |
215 | -cp -p $^ $(srcdir)/doc | |
216 | d.srcextra: | |
217 | ||
218 | d.tags: force | |
219 | cd $(srcdir)/d; \ | |
220 | etags -o TAGS.sub *.c *.cc *.h dmd/*.c dmd/*.h dmd/root/*.h dmd/root/*.c; \ | |
221 | etags --include TAGS.sub --include ../TAGS.sub | |
222 | ||
223 | d.man: doc/gdc.1 | |
224 | d.srcman: doc/gdc.1 | |
225 | -cp -p $^ $(srcdir)/doc | |
226 | ||
227 | # 'make check' in gcc/ looks for check-d, as do all toplevel D-related | |
228 | # check targets. However, our DejaGNU framework requires 'check-gdc' as its | |
229 | # entry point. We feed the former to the latter here. | |
230 | check-d: check-gdc | |
231 | lang_checks += check-gdc | |
232 | lang_checks_parallelized += check-gdc | |
233 | check_gdc_parallelize = 10 | |
234 | ||
235 | # No D-specific selftests. | |
236 | selftest-d: | |
237 | ||
238 | # Install hooks. | |
239 | ||
240 | d.install-common: installdirs | |
241 | -rm -f $(DESTDIR)$(bindir)/$(D_INSTALL_NAME)$(exeext) | |
242 | $(INSTALL_PROGRAM) gdc$(exeext) $(DESTDIR)$(bindir)/$(D_INSTALL_NAME)$(exeext) | |
243 | -if test -f d21$(exeext); then \ | |
244 | if test -f gdc-cross$(exeext); then \ | |
245 | :; \ | |
246 | else \ | |
247 | rm -f $(DESTDIR)$(bindir)/$(D_TARGET_INSTALL_NAME)$(exeext); \ | |
248 | ( cd $(DESTDIR)$(bindir) && \ | |
249 | $(LN) $(D_INSTALL_NAME)$(exeext) $(D_TARGET_INSTALL_NAME)$(exeext) ); \ | |
250 | fi; \ | |
251 | fi | |
252 | ||
253 | d.install-plugin: | |
254 | ||
255 | d.install-info: $(DESTDIR)$(infodir)/gdc.info | |
256 | ||
257 | d.install-pdf: doc/gdc.pdf | |
258 | @$(NORMAL_INSTALL) | |
259 | test -z "$(pdfdir)" || $(mkinstalldirs) "$(DESTDIR)$(pdfdir)/gcc" | |
260 | @for p in doc/gdc.pdf; do \ | |
261 | if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ | |
262 | f=$(pdf__strip_dir) \ | |
263 | echo " $(INSTALL_DATA) '$$d$$p' '$(DESTDIR)$(pdfdir)/gcc/$$f'"; \ | |
264 | $(INSTALL_DATA) "$$d$$p" "$(DESTDIR)$(pdfdir)/gcc/$$f"; \ | |
265 | done | |
266 | ||
267 | d.install-html: $(build_htmldir)/d | |
268 | @$(NORMAL_INSTALL) | |
269 | test -z "$(htmldir)" || $(mkinstalldirs) "$(DESTDIR)$(htmldir)" | |
270 | @for p in $(build_htmldir)/d; do \ | |
271 | if test -f "$$p" || test -d "$$p"; then d=""; else d="$(srcdir)/"; fi; \ | |
272 | f=$(html__strip_dir) \ | |
273 | if test -d "$$d$$p"; then \ | |
274 | echo " $(mkinstalldirs) '$(DESTDIR)$(htmldir)/$$f'"; \ | |
275 | $(mkinstalldirs) "$(DESTDIR)$(htmldir)/$$f" || exit 1; \ | |
276 | echo " $(INSTALL_DATA) '$$d$$p'/* '$(DESTDIR)$(htmldir)/$$f'"; \ | |
277 | $(INSTALL_DATA) "$$d$$p"/* "$(DESTDIR)$(htmldir)/$$f"; \ | |
278 | else \ | |
279 | echo " $(INSTALL_DATA) '$$d$$p' '$(DESTDIR)$(htmldir)/$$f'"; \ | |
280 | $(INSTALL_DATA) "$$d$$p" "$(DESTDIR)$(htmldir)/$$f"; \ | |
281 | fi; \ | |
282 | done | |
283 | ||
284 | d.install-man: $(DESTDIR)$(man1dir)/$(D_INSTALL_NAME)$(man1ext) | |
285 | ||
286 | $(DESTDIR)$(man1dir)/$(D_INSTALL_NAME)$(man1ext): doc/gdc.1 installdirs | |
287 | -rm -f $@ | |
288 | -$(INSTALL_DATA) $< $@ | |
289 | -chmod a-x $@ | |
290 | ||
291 | d.uninstall: | |
292 | -rm -rf $(DESTDIR)$(bindir)/$(D_INSTALL_NAME)$(exeext) | |
293 | -rm -rf $(DESTDIR)$(man1dir)/$(D_INSTALL_NAME)$(man1ext) | |
294 | -rm -rf $(DESTDIR)$(bindir)/$(D_TARGET_INSTALL_NAME)$(exeext) | |
295 | -rm -rf $(DESTDIR)$(infodir)/gdc.info* | |
296 | ||
297 | # Clean hooks. | |
298 | ||
299 | d.mostlyclean: | |
300 | -rm -f d/*$(objext) | |
301 | -rm -f d/*$(coverageexts) | |
302 | -rm -f $(D_GENERATED_SRCS) | |
460ad044 IB |
303 | -rm -f d/idgen$(build_exeext) d/impcnvgen$(build_exeext) |
304 | -rm -f gdc$(exeext) gdc-cross$(exeext) d21$(exeext) | |
b4c522fa IB |
305 | d.clean: |
306 | d.distclean: | |
307 | d.maintainer-clean: | |
308 | -rm -f $(docobjdir)/gdc.1 | |
309 | ||
310 | # Stage hooks. | |
311 | ||
312 | d.stage1: stage1-start | |
313 | -mv d/*$(objext) stage1/d | |
314 | d.stage2: stage2-start | |
315 | -mv d/*$(objext) stage2/d | |
316 | d.stage3: stage3-start | |
317 | -mv d/*$(objext) stage3/d | |
318 | d.stage4: stage4-start | |
319 | -mv d/*$(objext) stage4/d | |
320 | d.stageprofile: stageprofile-start | |
321 | -mv d/*$(objext) stageprofile/d | |
322 | d.stagefeedback: stagefeedback-start | |
323 | -mv d/*$(objext) stagefeedback/d | |
324 | ||
325 | # Include the dfrontend and build directories for headers. | |
326 | D_INCLUDES = -I$(srcdir)/d -I$(srcdir)/d/dmd -Id | |
327 | ||
328 | CFLAGS-d/id.o += $(D_INCLUDES) | |
329 | CFLAGS-d/impcnvtab.o += $(D_INCLUDES) | |
330 | ||
331 | # Override build rules for D frontend. | |
332 | d/%.o: d/dmd/%.c $(D_GENERATED_SRCS) | |
333 | $(DMD_COMPILE) $(D_INCLUDES) $< | |
334 | $(POSTCOMPILE) | |
335 | ||
336 | d/%.o: d/dmd/root/%.c $(D_GENERATED_SRCS) | |
337 | $(DMD_COMPILE) $(D_INCLUDES) $< | |
338 | $(POSTCOMPILE) | |
339 | ||
340 | # Generated programs. | |
460ad044 IB |
341 | d/idgen$(build_exeext): d/idgen.dmdgen.o $(BUILD_LIBDEPS) |
342 | +$(LINKER_FOR_BUILD) $(BUILD_LINKERFLAGS) $(BUILD_LDFLAGS) -o $@ \ | |
343 | $(filter-out $(BUILD_LIBDEPS), $^) $(BUILD_LIBS) | |
b4c522fa | 344 | |
460ad044 IB |
345 | d/impcnvgen$(build_exeext): d/impcnvgen.dmdgen.o $(BUILD_LIBDEPS) |
346 | +$(LINKER_FOR_BUILD) $(BUILD_LINKERFLAGS) $(BUILD_LDFLAGS) -o $@ \ | |
347 | $(filter-out $(BUILD_LIBDEPS), $^) $(BUILD_LIBS) | |
b4c522fa IB |
348 | |
349 | # Generated sources. | |
460ad044 IB |
350 | d/id.c: d/idgen$(build_exeext) |
351 | cd d && ./idgen$(build_exeext) | |
b4c522fa IB |
352 | |
353 | # idgen also generates id.h; just verify it exists. | |
354 | d/id.h: d/id.c | |
355 | ||
460ad044 IB |
356 | d/impcnvtab.c: d/impcnvgen$(build_exeext) |
357 | cd d && ./impcnvgen$(build_exeext) | |
b4c522fa IB |
358 | |
359 | d/%.dmdgen.o: $(srcdir)/d/dmd/%.c | |
360 | $(DMDGEN_COMPILE) $(D_INCLUDES) $< | |
361 | $(POSTCOMPILE) |