]> git.ipfire.org Git - thirdparty/gcc.git/blame - gcc/jit/Make-lang.in
Update copyright years.
[thirdparty/gcc.git] / gcc / jit / Make-lang.in
CommitLineData
35485da9 1# Top level -*- makefile -*- fragment for libgccjit.so.
83ffe9cd 2# Copyright (C) 2013-2023 Free Software Foundation, Inc.
35485da9
DM
3
4#This file is part of GCC.
5
6#GCC is free software; you can redistribute it and/or modify
7#it under the terms of the GNU General Public License as published by
8#the Free Software Foundation; either version 3, or (at your option)
9#any later version.
10
11#GCC is distributed in the hope that it will be useful,
12#but WITHOUT ANY WARRANTY; without even the implied warranty of
13#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14#GNU General Public License for more details.
15
16# You should have received a copy of the GNU General Public License
17# along with GCC; see the file COPYING3. If not see
18# <http://www.gnu.org/licenses/>.
19
20# This file provides the language dependent support in the main Makefile.
21# Each language makefile fragment must provide the following targets:
22#
23# foo.all.cross, foo.start.encap, foo.rest.encap,
24# foo.install-common, foo.install-man, foo.install-info, foo.install-pdf,
25# foo.install-html, foo.info, foo.dvi, foo.pdf, foo.html, foo.uninstall,
26# foo.mostlyclean, foo.clean, foo.distclean,
27# foo.maintainer-clean, foo.stage1, foo.stage2, foo.stage3, foo.stage4
28#
29# where `foo' is the name of the language.
30#
31# It should also provide rules for:
32#
33# - making any compiler driver (eg: g++)
34# - the compiler proper (eg: cc1plus)
35# - define the names for selecting the language in LANGUAGES.
36
37#\f
38# Define the names for selecting jit in LANGUAGES.
39# Note that it would be nice to move the dependency on g++
40# into the jit rule, but that needs a little bit of work
41# to do the right thing within all.cross.
42
f8d6596c
NB
43LIBGCCJIT_VERSION_NUM = 0
44LIBGCCJIT_MINOR_NUM = 0
45LIBGCCJIT_RELEASE_NUM = 1
46
c83027f3 47ifneq (,$(findstring mingw,$(target)))
f8d6596c
NB
48LIBGCCJIT_FILENAME = libgccjit-$(LIBGCCJIT_VERSION_NUM).dll
49LIBGCCJIT_IMPORT_LIB = libgccjit.dll.a
c83027f3
NB
50
51jit: $(LIBGCCJIT_FILENAME) \
52 $(FULL_DRIVER_NAME)
53
54else
55
08defd9c
IS
56ifneq (,$(findstring darwin,$(host)))
57
58LIBGCCJIT_AGE = 1
59LIBGCCJIT_BASENAME = libgccjit
60
61LIBGCCJIT_SONAME = \
62 ${libdir}/$(LIBGCCJIT_BASENAME).$(LIBGCCJIT_VERSION_NUM).dylib
63LIBGCCJIT_FILENAME = $(LIBGCCJIT_BASENAME).$(LIBGCCJIT_VERSION_NUM).dylib
64LIBGCCJIT_LINKER_NAME = $(LIBGCCJIT_BASENAME).dylib
65
66# Conditionalize the use of the LD_VERSION_SCRIPT_OPTION and
67# LD_SONAME_OPTION depending if configure found them, using $(if)
68# We have to define a COMMA here, otherwise the commas in the "true"
69# result are treated as separators by the $(if).
70COMMA := ,
71LIBGCCJIT_VERSION_SCRIPT_OPTION = \
72 $(if $(LD_VERSION_SCRIPT_OPTION),\
73 -Wl$(COMMA)$(LD_VERSION_SCRIPT_OPTION)$(COMMA)$(srcdir)/jit/libgccjit.map)
74
75LIBGCCJIT_SONAME_OPTION = \
76 $(if $(LD_SONAME_OPTION), \
77 -Wl$(COMMA)$(LD_SONAME_OPTION)$(COMMA)$(LIBGCCJIT_SONAME))
78
79LIBGCCJIT_SONAME_SYMLINK = $(LIBGCCJIT_FILENAME)
80LIBGCCJIT_LINKER_NAME_SYMLINK = $(LIBGCCJIT_LINKER_NAME)
81
82jit: $(LIBGCCJIT_FILENAME) \
83 $(LIBGCCJIT_SYMLINK) \
84 $(LIBGCCJIT_LINKER_NAME_SYMLINK) \
85 $(FULL_DRIVER_NAME)
c83027f3 86
08defd9c
IS
87else
88
89LIBGCCJIT_LINKER_NAME = libgccjit.so
35485da9
DM
90LIBGCCJIT_SONAME = $(LIBGCCJIT_LINKER_NAME).$(LIBGCCJIT_VERSION_NUM)
91LIBGCCJIT_FILENAME = \
92 $(LIBGCCJIT_SONAME).$(LIBGCCJIT_MINOR_NUM).$(LIBGCCJIT_RELEASE_NUM)
93
94LIBGCCJIT_LINKER_NAME_SYMLINK = $(LIBGCCJIT_LINKER_NAME)
95LIBGCCJIT_SONAME_SYMLINK = $(LIBGCCJIT_SONAME)
96
deb3da39
DM
97# Conditionalize the use of the LD_VERSION_SCRIPT_OPTION and
98# LD_SONAME_OPTION depending if configure found them, using $(if)
99# We have to define a COMMA here, otherwise the commas in the "true"
100# result are treated as separators by the $(if).
101COMMA := ,
102LIBGCCJIT_VERSION_SCRIPT_OPTION = \
103 $(if $(LD_VERSION_SCRIPT_OPTION),\
104 -Wl$(COMMA)$(LD_VERSION_SCRIPT_OPTION)$(COMMA)$(srcdir)/jit/libgccjit.map)
105
106LIBGCCJIT_SONAME_OPTION = \
107 $(if $(LD_SONAME_OPTION), \
108 -Wl$(COMMA)$(LD_SONAME_OPTION)$(COMMA)$(LIBGCCJIT_SONAME))
109
35485da9
DM
110jit: $(LIBGCCJIT_FILENAME) \
111 $(LIBGCCJIT_SYMLINK) \
112 $(LIBGCCJIT_LINKER_NAME_SYMLINK) \
113 $(FULL_DRIVER_NAME)
08defd9c
IS
114
115endif
c83027f3 116endif
35485da9 117
a774a6a2 118jit.serial = $(LIBGCCJIT_FILENAME)
d326ebc9 119
35485da9 120# Tell GNU make to ignore these if they exist.
a774a6a2 121.PHONY: jit
35485da9
DM
122
123jit_OBJS = attribs.o \
124 jit/dummy-frontend.o \
125 jit/libgccjit.o \
eb4c16eb 126 jit/jit-logging.o \
35485da9
DM
127 jit/jit-recording.o \
128 jit/jit-playback.o \
56dea35f 129 jit/jit-result.o \
d1e5f2c7 130 jit/jit-tempdir.o \
2cb844ce
DM
131 jit/jit-builtins.o \
132 jit/jit-spec.o \
133 gcc.o
35485da9 134
c83027f3
NB
135ifneq (,$(findstring mingw,$(target)))
136jit_OBJS += jit/jit-w32.o
137endif
138
35485da9
DM
139# Use strict warnings for this front end.
140jit-warn = $(STRICT_WARN)
141
c83027f3 142ifneq (,$(findstring mingw,$(target)))
f8d6596c
NB
143# Create import library
144LIBGCCJIT_EXTRA_OPTS = -Wl,--out-implib,$(LIBGCCJIT_IMPORT_LIB)
c83027f3 145else
08defd9c
IS
146
147ifneq (,$(findstring darwin,$(host)))
148# TODO : Construct a Darwin-style symbol export file.
149LIBGCCJIT_EXTRA_OPTS = -Wl,-compatibility_version,$(LIBGCCJIT_VERSION_NUM) \
150 -Wl,-current_version,$(LIBGCCJIT_VERSION_NUM).$(LIBGCCJIT_MINOR_NUM).$(LIBGCCJIT_AGE) \
151 $(LIBGCCJIT_VERSION_SCRIPT_OPTION) \
152 $(LIBGCCJIT_SONAME_OPTION)
153else
154
c83027f3
NB
155LIBGCCJIT_EXTRA_OPTS = $(LIBGCCJIT_VERSION_SCRIPT_OPTION) \
156 $(LIBGCCJIT_SONAME_OPTION)
157endif
08defd9c 158endif
c83027f3 159
75df1594
YY
160# Only link objects from $(EXTRA_GCC_OBJS) that's not already
161# included in libbackend.a ($(EXTRA_OBJS)).
162EXTRA_GCC_OBJS_EXCLUSIVE = $(foreach _obj1, $(EXTRA_GCC_OBJS), \
163 $(if $(filter $(_obj1), $(EXTRA_OBJS)),, $(_obj1)))
164
35485da9
DM
165# We avoid using $(BACKEND) from Makefile.in in order to avoid pulling
166# in main.o
167$(LIBGCCJIT_FILENAME): $(jit_OBJS) \
168 libbackend.a libcommon-target.a libcommon.a \
169 $(CPPLIB) $(LIBDECNUMBER) \
2cb844ce 170 $(LIBDEPS) $(srcdir)/jit/libgccjit.map \
75df1594 171 $(EXTRA_GCC_OBJS_EXCLUSIVE) $(jit.prev)
d326ebc9 172 @$(call LINK_PROGRESS,$(INDEX.jit),start)
35485da9
DM
173 +$(LLINKER) $(ALL_LINKERFLAGS) $(LDFLAGS) -o $@ -shared \
174 $(jit_OBJS) libbackend.a libcommon-target.a libcommon.a \
ea143da7 175 $(CPPLIB) $(LIBDECNUMBER) $(EXTRA_GCC_LIBS) $(LIBS) $(BACKENDLIBS) \
75df1594 176 $(EXTRA_GCC_OBJS_EXCLUSIVE) \
c83027f3 177 $(LIBGCCJIT_EXTRA_OPTS)
d326ebc9 178 @$(call LINK_PROGRESS,$(INDEX.jit),end)
35485da9 179
c83027f3
NB
180# Create symlinks when not building for Windows
181ifeq (,$(findstring mingw,$(target)))
08defd9c
IS
182
183ifeq (,$(findstring darwin,$(host)))
184# but only one level for Darwin, version info is embedded.
35485da9
DM
185$(LIBGCCJIT_SONAME_SYMLINK): $(LIBGCCJIT_FILENAME)
186 ln -sf $(LIBGCCJIT_FILENAME) $(LIBGCCJIT_SONAME_SYMLINK)
08defd9c 187endif
35485da9
DM
188
189$(LIBGCCJIT_LINKER_NAME_SYMLINK): $(LIBGCCJIT_SONAME_SYMLINK)
190 ln -sf $(LIBGCCJIT_SONAME_SYMLINK) $(LIBGCCJIT_LINKER_NAME_SYMLINK)
c83027f3 191endif
35485da9
DM
192
193#\f
194# Build hooks:
195
196jit.all.cross:
197jit.start.encap:
198jit.rest.encap:
199
200# Documentation build hooks.
201#
202# The documentation can be built using the texinfo toolchain, or
203# the sphinx toolchain
204#
205# The jit documentation is authored using Sphinx, which has numerous
206# advantages over Texinfo, including:
207#
208# * much faster
209#
210# * use of CSS and JS to provide less of a 1990s feel in the generated
211# HTML.
212#
213# * sane, stable HTML page and anchor names
214#
215# * sane HTML navigation: ability to move forward and back in the HTML
216# at every node to read the HTML like a book
217#
218# * syntax-coloring of examples
219#
220# * the ability to "include" fragments of code inline. This is used
221# heavily by the jit docs, so that the example code is shared by both
222# the test suite and the documentation to ensure that the examples
223# appearing in the docs actually compile and work
224#
225# Sphinx is not a "blessed" dependency, and so a prebuilt libgccjit.texinfo
226# file built by Sphinx is checked into the source tree to avoid requiring
227# everyone to have Sphinx installed.
228#
229# This prebuilt libgccjit.texinfo has the "include" fragments "baked in",
230# and so contains the content from the sphinx toolchain, but lacks the
231# syntax-coloring, and the generated HTML is (IMHO) greatly inferior to
232# that generated by Sphinx.
233
234# These targets redirect HTML creation and installation to either
235# jit.sphinx.(install-)html or jit.texinfo.(install-)html.
40a39381 236jit.html: jit.$(doc_build_sys).html
35485da9
DM
237jit.install-html: jit.$(doc_build_sys).install-html
238
239# For now, use texinfo for pdf, since the sphinx latex toolchain currently
240# fails for me deep inside pdflatex (see notes below)
40a39381 241jit.pdf: jit.texinfo.pdf
35485da9
DM
242jit.install-pdf: jit.texinfo.install-pdf
243
40a39381
ML
244# Hooks for building docs using texinfo
245JIT_TEXI_FILES = $(srcdir)/jit/docs/_build/texinfo/libgccjit.texi
35485da9 246
40a39381
ML
247jit.info: doc/libgccjit.info
248doc/libgccjit.info: $(JIT_TEXI_FILES)
249 if test "x$(BUILD_INFO)" = xinfo; then \
250 rm -f doc/libgccjit.info*; \
251 $(MAKEINFO) $(MAKEINFOFLAGS) -I $(gcc_docdir) \
252 -I $(gcc_docdir)/include -o $@ $<; \
35485da9
DM
253 else true; fi
254
255jit.install-info: $(DESTDIR)$(infodir)/libgccjit.info
256
40a39381
ML
257jit.dvi: doc/libgccjit.dvi
258doc/libgccjit.dvi: $(JIT_TEXI_FILES)
259 $(TEXI2DVI) -I $(abs_docdir) -I $(abs_docdir)/include -o $@ $<
35485da9 260
40a39381 261jit.texinfo.html: $(build_htmldir)/jit/index.html
35485da9 262
40a39381
ML
263$(build_htmldir)/jit/index.html: $(srcdir)/jit/docs/_build/texinfo/libgccjit.texi
264 $(mkinstalldirs) $(@D)
265 rm -f $(@D)/*
266 $(TEXI2HTML) -I $(gcc_docdir)/include -I $(srcdir)/jit -o $(@D) $<
267
268jit.texinfo.install-html: jit.texinfo.html
35485da9
DM
269 @$(NORMAL_INSTALL)
270 test -z "$(htmldir)" || $(mkinstalldirs) "$(DESTDIR)$(htmldir)"
271 @for p in $(build_htmldir)/jit; do \
272 if test -f "$$p" || test -d "$$p"; then d=""; else d="$(srcdir)/"; fi; \
273 f=$(html__strip_dir) \
274 if test -d "$$d$$p"; then \
275 echo " $(mkinstalldirs) '$(DESTDIR)$(htmldir)/$$f'"; \
276 $(mkinstalldirs) "$(DESTDIR)$(htmldir)/$$f" || exit 1; \
277 echo " $(INSTALL_DATA) '$$d$$p'/* '$(DESTDIR)$(htmldir)/$$f'"; \
278 $(INSTALL_DATA) "$$d$$p"/* "$(DESTDIR)$(htmldir)/$$f"; \
279 else \
280 echo " $(INSTALL_DATA) '$$d$$p' '$(DESTDIR)$(htmldir)/$$f'"; \
281 $(INSTALL_DATA) "$$d$$p" "$(DESTDIR)$(htmldir)/$$f"; \
282 fi; \
283 done
284
40a39381 285jit.texinfo.pdf: doc/libgccjit.pdf
35485da9 286
40a39381
ML
287doc/libgccjit.pdf: $(JIT_TEXI_FILES)
288 $(TEXI2PDF) -I $(abs_docdir) -I $(abs_docdir)/include -o $@ $<
35485da9
DM
289
290jit.texinfo.install-pdf: doc/libgccjit.pdf
291 @$(NORMAL_INSTALL)
292 test -z "$(pdfdir)" || $(mkinstalldirs) "$(DESTDIR)$(pdfdir)/gcc"
293 @for p in doc/libgccjit.pdf; do \
294 if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
295 f=$(pdf__strip_dir) \
296 echo " $(INSTALL_DATA) '$$d$$p' '$(DESTDIR)$(pdfdir)/gcc/$$f'"; \
297 $(INSTALL_DATA) "$$d$$p" "$(DESTDIR)$(pdfdir)/gcc/$$f"; \
298 done
299
300# Hooks for building docs using the Sphinx toolchain:
301
302SPHINX_BUILD_DIR=jit/sphinx-build
303
304jit.sphinx.html:
70b738f9 305 $(mkinstalldirs) $(SPHINX_BUILD_DIR)
35485da9 306 (cd $(srcdir)/jit/docs && \
b779e6bf 307 make html BUILDDIR=$(PWD)/$(SPHINX_BUILD_DIR) )
35485da9
DM
308
309jit_htmldir=$(htmldir)/jit
310
311jit.sphinx.install-html: jit.sphinx.html
312 @$(NORMAL_INSTALL)
313 test -z "$(jit_htmldir)" || $(mkinstalldirs) "$(DESTDIR)$(jit_htmldir)"
314 @for f in $(shell cd $(SPHINX_BUILD_DIR)/html && find) ; do \
315 if test -f $(SPHINX_BUILD_DIR)/html/"$$f"; then \
316 $(INSTALL_DATA) $(SPHINX_BUILD_DIR)/html/"$$f" $(DESTDIR)$(jit_htmldir)/"$$f"; \
317 else \
318 mkdir $(DESTDIR)$(jit_htmldir)/"$$f"; \
319 fi; \
320 done
321
322# (This one is currently failing deep inside pdflatex for me;
323# see https://bugzilla.redhat.com/show_bug.cgi?id=1148845 )
324jit.sphinx.pdf: $(SPHINX_BUILD_DIR)/latex/libgccjit.pdf
325$(SPHINX_BUILD_DIR)/latex/libgccjit.pdf:
70b738f9 326 $(mkinstalldirs) $(SPHINX_BUILD_DIR)
35485da9 327 (cd $(srcdir)/jit/docs && \
b779e6bf 328 make latexpdf BUILDDIR=$(PWD)/$(SPHINX_BUILD_DIR) )
35485da9
DM
329
330jit.sphinx.install-pdf: $(SPHINX_BUILD_DIR)/latex/libgccjit.pdf
331 @$(NORMAL_INSTALL)
332 test -z "$(pdfdir)" || $(mkinstalldirs) "$(DESTDIR)$(pdfdir)/gcc"
333 @for p in $(SPHINX_BUILD_DIR)/latex/libgccjit.pdf; do \
334 if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
335 f=$(pdf__strip_dir) \
336 echo " $(INSTALL_DATA) '$$d$$p' '$(DESTDIR)$(pdfdir)/gcc/$$f'"; \
337 $(INSTALL_DATA) "$$d$$p" "$(DESTDIR)$(pdfdir)/gcc/$$f"; \
338 done
339
340jit.srcinfo:
341jit.srcextra:
342
343jit.tags:
344
40a39381 345jit.man:
35485da9
DM
346
347jit.srcman:
348
349lang_checks += check-jit
499de348
DM
350lang_checks_parallelized += check-jit
351# This number is somewhat arbitrary. Two tests are much slower
352# than all the others (test-combination.c and test-threads.c) so
353# we want them to be placed in different "buckets".
354check_jit_parallelize = 10
35485da9 355
033eb567
DM
356# No jit-specific selftests
357selftest-jit:
358
35485da9
DM
359#\f
360# Install hooks:
70b738f9 361jit.install-headers: installdirs
c83027f3
NB
362 $(INSTALL_DATA) $(srcdir)/jit/libgccjit.h \
363 $(DESTDIR)$(includedir)/libgccjit.h
364 $(INSTALL_DATA) $(srcdir)/jit/libgccjit++.h \
365 $(DESTDIR)$(includedir)/libgccjit++.h
366
367ifneq (,$(findstring mingw,$(target)))
368jit.install-common: installdirs jit.install-headers
369# Install import library
f8d6596c
NB
370 $(INSTALL_PROGRAM) $(LIBGCCJIT_IMPORT_LIB) \
371 $(DESTDIR)$(libdir)/$(LIBGCCJIT_IMPORT_LIB)
c83027f3 372# Install DLL file
35485da9 373 $(INSTALL_PROGRAM) $(LIBGCCJIT_FILENAME) \
c83027f3 374 $(DESTDIR)$(bindir)/$(LIBGCCJIT_FILENAME)
08defd9c
IS
375
376else
377ifneq (,$(findstring darwin,$(host)))
378# but only one level for Darwin
379
380jit.install-common: installdirs jit.install-headers
381 $(INSTALL_PROGRAM) $(LIBGCCJIT_FILENAME) \
382 $(DESTDIR)$(libdir)/$(LIBGCCJIT_FILENAME)
383 ln -sf \
384 $(LIBGCCJIT_SONAME_SYMLINK)\
385 $(DESTDIR)$(libdir)/$(LIBGCCJIT_LINKER_NAME_SYMLINK)
386
c83027f3
NB
387else
388jit.install-common: installdirs jit.install-headers
389 $(INSTALL_PROGRAM) $(LIBGCCJIT_FILENAME) \
390 $(DESTDIR)$(libdir)/$(LIBGCCJIT_FILENAME)
35485da9
DM
391 ln -sf \
392 $(LIBGCCJIT_FILENAME) \
c83027f3 393 $(DESTDIR)$(libdir)/$(LIBGCCJIT_SONAME_SYMLINK)
35485da9
DM
394 ln -sf \
395 $(LIBGCCJIT_SONAME_SYMLINK)\
c83027f3
NB
396 $(DESTDIR)$(libdir)/$(LIBGCCJIT_LINKER_NAME_SYMLINK)
397endif
08defd9c 398endif
35485da9 399
40a39381 400jit.install-man:
35485da9
DM
401
402jit.install-plugin:
403
404jit.uninstall:
405
406#\f
407# Clean hooks:
408# A lot of the ancillary files are deleted by the main makefile.
409# We just have to delete files specific to us.
410
411jit.mostlyclean:
46bf0b0a
JW
412 -rm -f $(LIBGCCJIT_FILENAME) $(LIBGCCJIT_SYMLINK)
413 -rm -f $(LIBGCCJIT_LINKER_NAME_SYMLINK) $(FULL_DRIVER_NAME)
414 -rm -f $(LIBGCCJIT_SONAME)
415 -rm -f $(jit_OBJS)
35485da9
DM
416
417jit.clean:
418
419jit.distclean:
420
421jit.maintainer-clean:
422
423#\f
424# Stage hooks:
425# The main makefile has already created stage?/jit.
426
427jit.stage1: stage1-start
428 -mv jit/*$(objext) stage1/jit
429jit.stage2: stage2-start
430 -mv jit/*$(objext) stage2/jit
431jit.stage3: stage3-start
432 -mv jit/*$(objext) stage3/jit
433jit.stage4: stage4-start
434 -mv jit/*$(objext) stage4/jit
435jit.stageprofile: stageprofile-start
436 -mv jit/*$(objext) stageprofile/jit
437jit.stagefeedback: stagefeedback-start
438 -mv jit/*$(objext) stagefeedback/jit