]>
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 | ||
5fee5ec3 IB |
49 | # Use strict warnings. |
50 | d-warn = $(STRICT_WARN) | |
51 | ||
52 | # D compiler and flags for building the front-end. | |
53 | ifeq ($(TREECHECKING),) | |
54 | CHECKING_DFLAGS = -frelease | |
55 | else | |
56 | CHECKING_DFLAGS = | |
57 | endif | |
58 | WARN_DFLAGS = -Wall -Wdeprecated $(NOCOMMON_FLAG) | |
59 | ||
60 | ALL_DFLAGS = $(DFLAGS-$@) $(GDCFLAGS) -fversion=IN_GCC $(CHECKING_DFLAGS) \ | |
61 | $(PICFLAG) $(ALIASING_FLAGS) $(COVERAGE_FLAGS) $(WARN_DFLAGS) | |
62 | ||
63 | DCOMPILE.base = $(GDC) $(NO_PIE_CFLAGS) -c $(ALL_DFLAGS) -o $@ | |
64 | DCOMPILE = $(DCOMPILE.base) -MT $@ -MMD -MP -MF $(@D)/$(DEPDIR)/$(*F).TPo | |
65 | DPOSTCOMPILE = @mv $(@D)/$(DEPDIR)/$(*F).TPo $(@D)/$(DEPDIR)/$(*F).Po | |
66 | DLINKER = $(GDC) $(NO_PIE_FLAG) -lstdc++ | |
67 | ||
68 | # Like LINKER, but use a mutex for serializing front end links. | |
69 | ifeq (@DO_LINK_MUTEX@,true) | |
70 | DLLINKER = $(SHELL) $(srcdir)/lock-and-run.sh linkfe.lck $(DLINKER) | |
71 | else | |
72 | DLLINKER = $(DLINKER) | |
73 | endif | |
b4c522fa IB |
74 | |
75 | # D Frontend object files. | |
76 | D_FRONTEND_OBJS = \ | |
77 | d/aav.o \ | |
78 | d/access.o \ | |
5fee5ec3 | 79 | d/aggregate.o \ |
b4c522fa IB |
80 | d/aliasthis.o \ |
81 | d/apply.o \ | |
5fee5ec3 | 82 | d/array.o \ |
b4c522fa | 83 | d/arrayop.o \ |
5fee5ec3 | 84 | d/arraytypes.o \ |
b4c522fa | 85 | d/attrib.o \ |
5fee5ec3 IB |
86 | d/ast_node.o \ |
87 | d/astcodegen.o \ | |
88 | d/astenums.o \ | |
89 | d/bitarray.o \ | |
b4c522fa | 90 | d/blockexit.o \ |
5fee5ec3 | 91 | d/builtin.o \ |
b4c522fa | 92 | d/canthrow.o \ |
5a0aa603 | 93 | d/chkformat.o \ |
b4c522fa | 94 | d/clone.o \ |
5fee5ec3 IB |
95 | d/compiler.o \ |
96 | d/complex.o \ | |
b4c522fa IB |
97 | d/cond.o \ |
98 | d/constfold.o \ | |
5fee5ec3 | 99 | d/cparse.o \ |
b4c522fa IB |
100 | d/cppmangle.o \ |
101 | d/ctfeexpr.o \ | |
5fee5ec3 IB |
102 | d/ctfloat.o \ |
103 | d/ctorflow.o \ | |
b4c522fa IB |
104 | d/dcast.o \ |
105 | d/dclass.o \ | |
106 | d/declaration.o \ | |
107 | d/delegatize.o \ | |
108 | d/denum.o \ | |
109 | d/dimport.o \ | |
110 | d/dinterpret.o \ | |
111 | d/dmacro.o \ | |
112 | d/dmangle.o \ | |
113 | d/dmodule.o \ | |
114 | d/doc.o \ | |
115 | d/dscope.o \ | |
116 | d/dstruct.o \ | |
117 | d/dsymbol.o \ | |
a3b38b77 | 118 | d/dsymbolsem.o \ |
b4c522fa | 119 | d/dtemplate.o \ |
5fee5ec3 | 120 | d/dtoh.o \ |
b4c522fa IB |
121 | d/dversion.o \ |
122 | d/entity.o \ | |
5fee5ec3 | 123 | d/errors.o \ |
b4c522fa IB |
124 | d/escape.o \ |
125 | d/expression.o \ | |
126 | d/expressionsem.o \ | |
127 | d/file.o \ | |
128 | d/filename.o \ | |
5fee5ec3 | 129 | d/foreachvar.o \ |
b4c522fa | 130 | d/func.o \ |
5fee5ec3 IB |
131 | d/globals.o \ |
132 | d/gluelayer.o \ | |
133 | d/hash.o \ | |
b4c522fa IB |
134 | d/hdrgen.o \ |
135 | d/iasm.o \ | |
136 | d/iasmgcc.o \ | |
5fee5ec3 | 137 | d/id.o \ |
b4c522fa | 138 | d/identifier.o \ |
5fee5ec3 | 139 | d/impcnvtab.o \ |
b4c522fa IB |
140 | d/imphint.o \ |
141 | d/init.o \ | |
142 | d/initsem.o \ | |
5fee5ec3 | 143 | d/inline.o \ |
b4c522fa IB |
144 | d/intrange.o \ |
145 | d/json.o \ | |
5fee5ec3 | 146 | d/lambdacomp.o \ |
b4c522fa | 147 | d/lexer.o \ |
5fee5ec3 | 148 | d/longdouble.o \ |
b4c522fa IB |
149 | d/mtype.o \ |
150 | d/nogc.o \ | |
151 | d/nspace.o \ | |
5fee5ec3 | 152 | d/ob.o \ |
b4c522fa IB |
153 | d/objc.o \ |
154 | d/opover.o \ | |
155 | d/optimize.o \ | |
156 | d/outbuffer.o \ | |
157 | d/parse.o \ | |
5fee5ec3 IB |
158 | d/parsetimevisitor.o \ |
159 | d/permissivevisitor.o \ | |
160 | d/port.o \ | |
161 | d/printast.o \ | |
162 | d/region.o \ | |
b4c522fa IB |
163 | d/rmem.o \ |
164 | d/rootobject.o \ | |
165 | d/safe.o \ | |
166 | d/sapply.o \ | |
a3b38b77 IB |
167 | d/semantic2.o \ |
168 | d/semantic3.o \ | |
b4c522fa IB |
169 | d/sideeffect.o \ |
170 | d/speller.o \ | |
171 | d/statement.o \ | |
5fee5ec3 | 172 | d/statement_rewrite_walker.o \ |
b4c522fa IB |
173 | d/statementsem.o \ |
174 | d/staticassert.o \ | |
175 | d/staticcond.o \ | |
5fee5ec3 IB |
176 | d/stmtstate.o \ |
177 | d/string.o \ | |
b4c522fa | 178 | d/stringtable.o \ |
5fee5ec3 | 179 | d/target.o \ |
a3b38b77 | 180 | d/templateparamsem.o \ |
b4c522fa IB |
181 | d/tokens.o \ |
182 | d/traits.o \ | |
5fee5ec3 | 183 | d/transitivevisitor.o \ |
b4c522fa | 184 | d/typesem.o \ |
5fee5ec3 | 185 | d/typinf.o \ |
b4c522fa | 186 | d/utf.o \ |
5fee5ec3 IB |
187 | d/utils.o \ |
188 | d/visitor.o | |
b4c522fa IB |
189 | |
190 | # Language-specific object files for D. | |
191 | D_OBJS = \ | |
2803d2f2 IB |
192 | d/d-attribs.o \ |
193 | d/d-builtins.o \ | |
194 | d/d-codegen.o \ | |
195 | d/d-compiler.o \ | |
196 | d/d-convert.o \ | |
197 | d/d-ctfloat.o \ | |
198 | d/d-diagnostic.o \ | |
199 | d/d-frontend.o \ | |
e966361c | 200 | d/d-gimplify.o \ |
2803d2f2 IB |
201 | d/d-incpath.o \ |
202 | d/d-lang.o \ | |
203 | d/d-longdouble.o \ | |
204 | d/d-port.o \ | |
205 | d/d-target.o \ | |
206 | d/decl.o \ | |
207 | d/expr.o \ | |
208 | d/imports.o \ | |
209 | d/intrinsics.o \ | |
210 | d/modules.o \ | |
211 | d/runtime.o \ | |
212 | d/toir.o \ | |
213 | d/typeinfo.o \ | |
214 | d/types.o | |
b4c522fa IB |
215 | |
216 | # All language-specific object files for D. | |
5fee5ec3 | 217 | D_ALL_OBJS = $(D_FRONTEND_OBJS) $(D_OBJS) $(D_TARGET_OBJS) |
b4c522fa IB |
218 | |
219 | d_OBJS = $(D_ALL_OBJS) d/d-spec.o | |
220 | ||
a774a6a2 | 221 | d21$(exeext): $(D_ALL_OBJS) attribs.o $(BACKEND) $(LIBDEPS) $(d.prev) |
d326ebc9 | 222 | @$(call LINK_PROGRESS,$(INDEX.d),start) |
5fee5ec3 | 223 | +$(DLLINKER) $(ALL_LINKERFLAGS) $(LDFLAGS) -static-libphobos -o $@ \ |
b4c522fa | 224 | $(D_ALL_OBJS) attribs.o $(BACKEND) $(LIBS) $(BACKENDLIBS) |
d326ebc9 | 225 | @$(call LINK_PROGRESS,$(INDEX.d),end) |
b4c522fa IB |
226 | |
227 | # Documentation. | |
228 | ||
229 | D_TEXI_FILES = \ | |
230 | d/gdc.texi \ | |
231 | $(gcc_docdir)/include/fdl.texi \ | |
232 | $(gcc_docdir)/include/gpl_v3.texi \ | |
233 | $(gcc_docdir)/include/gcc-common.texi \ | |
234 | gcc-vers.texi | |
235 | ||
236 | doc/gdc.info: $(D_TEXI_FILES) | |
237 | if test "x$(BUILD_INFO)" = xinfo; then \ | |
238 | rm -f doc/gdc.info*; \ | |
239 | $(MAKEINFO) $(MAKEINFOFLAGS) -I $(gcc_docdir) \ | |
240 | -I $(gcc_docdir)/include -o $@ $<; \ | |
241 | else true; fi | |
242 | ||
243 | doc/gdc.dvi: $(D_TEXI_FILES) | |
244 | $(TEXI2DVI) -I $(abs_docdir) -I $(abs_docdir)/include -o $@ $< | |
245 | ||
246 | doc/gdc.pdf: $(D_TEXI_FILES) | |
247 | $(TEXI2PDF) -I $(abs_docdir) -I $(abs_docdir)/include -o $@ $< | |
248 | ||
249 | $(build_htmldir)/d/index.html: $(D_TEXI_FILES) | |
250 | $(mkinstalldirs) $(@D) | |
251 | rm -f $(@D)/* | |
252 | $(TEXI2HTML) -I $(gcc_docdir) -I $(gcc_docdir)/include \ | |
253 | -I $(srcdir)/d -o $(@D) $< | |
254 | ||
255 | .INTERMEDIATE: gdc.pod | |
256 | ||
257 | gdc.pod: d/gdc.texi | |
258 | -$(TEXI2POD) -D gdc < $< > $@ | |
259 | ||
260 | # Build hooks. | |
261 | ||
262 | d.all.cross: gdc-cross$(exeext) | |
263 | d.start.encap: gdc$(exeext) | |
264 | d.rest.encap: | |
265 | d.info: doc/gdc.info | |
266 | d.dvi: doc/gdc.dvi | |
267 | d.pdf: doc/gdc.pdf | |
268 | d.html: $(build_htmldir)/d/index.html | |
269 | d.srcinfo: doc/gdc.info | |
270 | -cp -p $^ $(srcdir)/doc | |
271 | d.srcextra: | |
272 | ||
273 | d.tags: force | |
274 | cd $(srcdir)/d; \ | |
5fee5ec3 | 275 | $(ETAGS) -o TAGS.sub *.c *.cc *.h dmd/*.h dmd/root/*.h; \ |
909b30a1 | 276 | $(ETAGS) --include TAGS.sub --include ../TAGS.sub |
b4c522fa IB |
277 | |
278 | d.man: doc/gdc.1 | |
279 | d.srcman: doc/gdc.1 | |
280 | -cp -p $^ $(srcdir)/doc | |
281 | ||
282 | # 'make check' in gcc/ looks for check-d, as do all toplevel D-related | |
283 | # check targets. However, our DejaGNU framework requires 'check-gdc' as its | |
284 | # entry point. We feed the former to the latter here. | |
285 | check-d: check-gdc | |
286 | lang_checks += check-gdc | |
287 | lang_checks_parallelized += check-gdc | |
288 | check_gdc_parallelize = 10 | |
289 | ||
290 | # No D-specific selftests. | |
291 | selftest-d: | |
292 | ||
293 | # Install hooks. | |
294 | ||
295 | d.install-common: installdirs | |
296 | -rm -f $(DESTDIR)$(bindir)/$(D_INSTALL_NAME)$(exeext) | |
297 | $(INSTALL_PROGRAM) gdc$(exeext) $(DESTDIR)$(bindir)/$(D_INSTALL_NAME)$(exeext) | |
298 | -if test -f d21$(exeext); then \ | |
299 | if test -f gdc-cross$(exeext); then \ | |
300 | :; \ | |
301 | else \ | |
302 | rm -f $(DESTDIR)$(bindir)/$(D_TARGET_INSTALL_NAME)$(exeext); \ | |
303 | ( cd $(DESTDIR)$(bindir) && \ | |
304 | $(LN) $(D_INSTALL_NAME)$(exeext) $(D_TARGET_INSTALL_NAME)$(exeext) ); \ | |
305 | fi; \ | |
306 | fi | |
307 | ||
308 | d.install-plugin: | |
309 | ||
310 | d.install-info: $(DESTDIR)$(infodir)/gdc.info | |
311 | ||
312 | d.install-pdf: doc/gdc.pdf | |
313 | @$(NORMAL_INSTALL) | |
314 | test -z "$(pdfdir)" || $(mkinstalldirs) "$(DESTDIR)$(pdfdir)/gcc" | |
315 | @for p in doc/gdc.pdf; do \ | |
316 | if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ | |
317 | f=$(pdf__strip_dir) \ | |
318 | echo " $(INSTALL_DATA) '$$d$$p' '$(DESTDIR)$(pdfdir)/gcc/$$f'"; \ | |
319 | $(INSTALL_DATA) "$$d$$p" "$(DESTDIR)$(pdfdir)/gcc/$$f"; \ | |
320 | done | |
321 | ||
c3e80a16 EG |
322 | d.install-dvi: doc/gdc.dvi |
323 | @$(NORMAL_INSTALL) | |
324 | test -z "$(dvidir)" || $(mkinstalldirs) "$(DESTDIR)$(dvidir)/gcc" | |
325 | @for p in doc/gdc.dvi; do \ | |
326 | if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ | |
327 | f=$(dvi__strip_dir) \ | |
328 | echo " $(INSTALL_DATA) '$$d$$p' '$(DESTDIR)$(dvidir)/gcc/$$f'"; \ | |
329 | $(INSTALL_DATA) "$$d$$p" "$(DESTDIR)$(dvidir)/gcc/$$f"; \ | |
330 | done | |
331 | ||
b4c522fa IB |
332 | d.install-html: $(build_htmldir)/d |
333 | @$(NORMAL_INSTALL) | |
334 | test -z "$(htmldir)" || $(mkinstalldirs) "$(DESTDIR)$(htmldir)" | |
335 | @for p in $(build_htmldir)/d; do \ | |
336 | if test -f "$$p" || test -d "$$p"; then d=""; else d="$(srcdir)/"; fi; \ | |
337 | f=$(html__strip_dir) \ | |
338 | if test -d "$$d$$p"; then \ | |
339 | echo " $(mkinstalldirs) '$(DESTDIR)$(htmldir)/$$f'"; \ | |
340 | $(mkinstalldirs) "$(DESTDIR)$(htmldir)/$$f" || exit 1; \ | |
341 | echo " $(INSTALL_DATA) '$$d$$p'/* '$(DESTDIR)$(htmldir)/$$f'"; \ | |
342 | $(INSTALL_DATA) "$$d$$p"/* "$(DESTDIR)$(htmldir)/$$f"; \ | |
343 | else \ | |
344 | echo " $(INSTALL_DATA) '$$d$$p' '$(DESTDIR)$(htmldir)/$$f'"; \ | |
345 | $(INSTALL_DATA) "$$d$$p" "$(DESTDIR)$(htmldir)/$$f"; \ | |
346 | fi; \ | |
347 | done | |
348 | ||
349 | d.install-man: $(DESTDIR)$(man1dir)/$(D_INSTALL_NAME)$(man1ext) | |
350 | ||
351 | $(DESTDIR)$(man1dir)/$(D_INSTALL_NAME)$(man1ext): doc/gdc.1 installdirs | |
352 | -rm -f $@ | |
353 | -$(INSTALL_DATA) $< $@ | |
354 | -chmod a-x $@ | |
355 | ||
356 | d.uninstall: | |
357 | -rm -rf $(DESTDIR)$(bindir)/$(D_INSTALL_NAME)$(exeext) | |
358 | -rm -rf $(DESTDIR)$(man1dir)/$(D_INSTALL_NAME)$(man1ext) | |
359 | -rm -rf $(DESTDIR)$(bindir)/$(D_TARGET_INSTALL_NAME)$(exeext) | |
360 | -rm -rf $(DESTDIR)$(infodir)/gdc.info* | |
361 | ||
362 | # Clean hooks. | |
363 | ||
364 | d.mostlyclean: | |
365 | -rm -f d/*$(objext) | |
366 | -rm -f d/*$(coverageexts) | |
460ad044 | 367 | -rm -f gdc$(exeext) gdc-cross$(exeext) d21$(exeext) |
b4c522fa IB |
368 | d.clean: |
369 | d.distclean: | |
370 | d.maintainer-clean: | |
371 | -rm -f $(docobjdir)/gdc.1 | |
372 | ||
373 | # Stage hooks. | |
374 | ||
375 | d.stage1: stage1-start | |
376 | -mv d/*$(objext) stage1/d | |
377 | d.stage2: stage2-start | |
378 | -mv d/*$(objext) stage2/d | |
379 | d.stage3: stage3-start | |
380 | -mv d/*$(objext) stage3/d | |
381 | d.stage4: stage4-start | |
382 | -mv d/*$(objext) stage4/d | |
383 | d.stageprofile: stageprofile-start | |
384 | -mv d/*$(objext) stageprofile/d | |
385 | d.stagefeedback: stagefeedback-start | |
386 | -mv d/*$(objext) stagefeedback/d | |
387 | ||
388 | # Include the dfrontend and build directories for headers. | |
5fee5ec3 | 389 | D_INCLUDES = -I$(srcdir)/d -J$(srcdir)/d/dmd -J$(srcdir)/d/dmd/res |
b4c522fa IB |
390 | |
391 | # Override build rules for D frontend. | |
5fee5ec3 IB |
392 | d/%.o: d/dmd/%.d |
393 | $(DCOMPILE) $(D_INCLUDES) $< | |
394 | $(DPOSTCOMPILE) | |
d3ae0f51 | 395 | |
5fee5ec3 IB |
396 | d/%.o: d/dmd/root/%.d |
397 | $(DCOMPILE) $(D_INCLUDES) $< | |
398 | $(DPOSTCOMPILE) |