aix: Fix building fat library for AIX
[official-gcc.git] / gcc / m2 / Make-lang.in
blob0abd8ce14555978edc180505c055f20ce958372c
1 # Top level -*- makefile -*- fragment for GNU M2.
3 # Copyright (C) 2000-2024 Free Software Foundation, Inc.
5 #This file is part of GCC.
7 #GCC is free software; you can redistribute it and/or modify
8 #it under the terms of the GNU General Public License as published by
9 #the Free Software Foundation; either version 3, or (at your option)
10 #any later version.
12 #GCC is distributed in the hope that it will be useful,
13 #but WITHOUT ANY WARRANTY; without even the implied warranty of
14 #MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15 #GNU General Public License for more details.
17 #You should have received a copy of the GNU General Public License
18 #along with GCC; see the file COPYING3.  If not see
19 #<http://www.gnu.org/licenses/>.
21 # Actual names to use when installing a native compiler.
22 GM2_INSTALL_NAME = $(shell echo gm2|sed '$(program_transform_name)')
23 GM2_TARGET_INSTALL_NAME = $(target_noncanonical)-$(shell echo gm2|sed '$(program_transform_name)')
25 # Actual names to use when installing a cross-compiler.
26 GM2_CROSS_NAME = `echo gm2|sed '$(program_transform_cross_name)'`
28 M2_MAINTAINER = no
30 # CM2DEP must match the COMPILE and POSTCOMPILE defines in gcc/Make-lang.in
31 ifeq ($(CXXDEPMODE),depmode=gcc3)
32 CM2DEP=-MT $@ -MMD -MP -MF $(@D)/$(DEPDIR)/$(*F).TPo
33 else
34 CM2DEP=
35 endif
37 GM2_1 = ./gm2 -B./m2/stage1 -g -fm2-g $(CM2DEP)
39 GM2_FOR_TARGET = $(STAGE_CC_WRAPPER) ./gm2 -B./ -B$(build_tooldir)/bin/ -L$(objdir)/../ld $(TFLAGS)
41 # FIXME: Get from gcc-plugin.m4 instead of hardcoding.
42 ifeq (,$(findstring darwin,$(host)))
43   soext=.so
44 else
45   soext=.dylib
46   PLUGINLDFLAGS = -Wl,-undefined,dynamic_lookup
47   PLUGINLDFLAGS += -Wl,-install_name,m2rte$(soext)
48   PLUGINLDFLAGS += -nodefaultlibs
49   PLUGINLDFLAGS += -lc
50 endif
52 TEXISRC = $(srcdir)/doc/gm2.texi \
53           m2/gm2-libs.texi \
54           m2/gm2-ebnf.texi \
55           m2/SYSTEM-pim.texi \
56           m2/SYSTEM-iso.texi \
57           m2/Builtins.texi \
58           m2/gpl_v3_without_node.texi
60 RSTSRC =  $(srcdir)/doc/gm2.texi \
61           m2/gm2-libs.rst \
62           m2/gm2-ebnf.rst \
63           m2/SYSTEM-pim.rst \
64           m2/SYSTEM-iso.rst \
65           m2/Builtins.rst
67 # Define the names for selecting modula-2 in LANGUAGES.
68 m2 modula-2 modula2: gm2$(exeext) xgcc$(exeext) cc1gm2$(exeext) \
69                  $(GCC_PASSES) $(GCC_PARTS)
70 m2.serial = cc1gm2$(exeext)
72 m2.tags: force
73         cd $(srcdir)/m2; $(ETAGS) -o TAGS.sub \
74         *.cc *.h gm2-gcc/*.cc gm2-gcc/*.h \
75         gm2-libs-ch/*.h gm2-libs-ch/*.c gm2-libs-ch/*.cc; \
76         $(ETAGS) --include TAGS.sub --include ../TAGS.sub
78 m2.srcinfo: doc/m2.info
79         -cp -p $^ $(srcdir)/doc
81 ifeq ($(HAVE_PYTHON),yes)
82 m2.srcextra: m2/SYSTEM-pim.texi m2/SYSTEM-iso.texi m2/gm2-libs.texi m2/gm2-ebnf.texi
83         -cp -p m2/SYSTEM-pim.texi $(srcdir)/m2
84         -cp -p m2/SYSTEM-iso.texi $(srcdir)/m2
85         -cp -p m2/gm2-libs.texi $(srcdir)/m2
86         -cp -p m2/gm2-ebnf.texi $(srcdir)/m2
87 else
88 m2.srcextra:
89 endif
91 m2.srcman: doc/gm2.1
92         -cp -p $^ $(srcdir)/doc
94 # Tell GNU make to ignore these if they exist.
95 .PHONY: m2 modula-2 modula2
97 GM2_PROG_DEP=gm2$(exeext) xgcc$(exeext) cc1gm2$(exeext)
99 include m2/config-make
101 LIBSTDCXX=../$(TARGET_SUBDIR)/libstdc++-v3/src/.libs/libstdc++.a
103 PGE=m2/pge$(exeext)
105 SRC_PREFIX=G
107 ifeq ($(enable_plugin),yes)
108 M2RTE_PLUGIN_SO=plugin/m2rte$(soext)
109 endif
111 m2/gm2spec.o: $(srcdir)/m2/gm2spec.cc $(SYSTEM_H) $(GCC_H) $(CONFIG_H) \
112                m2/gm2config.h $(TARGET_H) $(PLUGIN_HEADERS) \
113                $(generated_files) $(C_TREE_H) insn-attr-common.h
114         (SHLIB_LINK='$(SHLIB_LINK)' \
115         SHLIB_MULTILIB='$(SHLIB_MULTILIB)'; \
116         $(COMPILER) $(ALL_COMPILERFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \
117          $(DRIVER_DEFINES) \
118                 -DLIBSUBDIR=\"$(libsubdir)\" \
119                 -DPREFIX=\"$(prefix)\" \
120                 -c $(srcdir)/m2/gm2spec.cc $(OUTPUT_OPTION))
122 # Create the compiler driver for M2.
123 CFLAGS-m2/m2/gm2spec.o += $(DRIVER_DEFINES)
125 GM2_OBJS = $(GCC_OBJS) prefix.o intl.o m2/gm2spec.o
127 # Create the compiler driver for gm2.
128 gm2$(exeext): $(GM2_OBJS) $(EXTRA_GCC_OBJS) libcommon-target.a $(LIBDEPS) \
129     m2/gm2config.h
130         +$(LINKER) $(ALL_LINKERFLAGS) $(LDFLAGS) -o $@ \
131           $(GM2_OBJS) $(EXTRA_GCC_OBJS) libcommon-target.a \
132           $(EXTRA_GCC_LIBS) $(LIBS)
134 # Create a version of the gm2 driver which calls the cross-compiler.
135 gm2-cross$(exeext): gm2$(exeext)
136         -rm -f gm2-cross$(exeext)
137         cp gm2$(exeext) gm2-cross$(exeext)
139 po-generated:
141 # Build hooks:
143 m2.all.cross: gm2-cross$(exeext) $(M2RTE_PLUGIN_SO)
145 m2.start.encap: gm2$(exeext) $(M2RTE_PLUGIN_SO)
146 m2.rest.encap:
149 m2.info: doc/m2.info
151 m2.man: doc/m2.1
153 m2.install-man: $(DESTDIR)$(man1dir)/$(GM2_INSTALL_NAME)$(man1ext)
155 $(DESTDIR)$(man1dir)/$(GM2_INSTALL_NAME)$(man1ext): doc/m2.1 installdirs
156         -rm -f $@
157         -$(INSTALL_DATA) $< $@
158         -chmod a-x $@
160 m2.dvi: doc/m2.dvi
162 doc/m2.dvi: $(TEXISRC) $(objdir)/m2/images/gnu.eps
163         $(TEXI2DVI) -c -I $(objdir)/m2 -I $(srcdir)/doc/include -o $@ $(srcdir)/doc/gm2.texi
165 M2_DVIFILES = doc/m2.dvi
167 m2.install-dvi: $(M2_DVIFILES)
168         @$(NORMAL_INSTALL)
169         test -z "$(dvidir)/gcc" || $(mkinstalldirs) "$(DESTDIR)$(dvidir)/gcc"
170         @list='$(M2_DVIFILES)'; for p in $$list; do \
171           if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
172           f=$(dvi__strip_dir) \
173           echo " $(INSTALL_DATA) '$$d$$p' '$(DESTDIR)$(dvidir)/gcc/$$f'"; \
174           $(INSTALL_DATA) "$$d$$p" "$(DESTDIR)$(dvidir)/gcc/$$f"; \
175         done
177 doc/m2.ps: doc/m2.dvi
178         dvips -o $@ $<
180 m2.pdf: doc/m2.pdf
182 doc/m2.pdf: $(TEXISRC) $(objdir)/m2/images/gnu.eps
183         $(TEXI2PDF) -I $(objdir)/m2 -I $(srcdir)/doc/include \
184           $(srcdir)/doc/gm2.texi -o $@
186 M2_PDFFILES = doc/m2.pdf
188 m2.install-pdf: $(M2_PDFFILES)
189         @$(NORMAL_INSTALL)
190         test -z "$(pdfdir)/gcc" || $(mkinstalldirs) "$(DESTDIR)$(pdfdir)/gcc"
191         @list='$(M2_PDFFILES)'; for p in $$list; do \
192           if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
193           f=$(pdf__strip_dir) \
194           echo " $(INSTALL_DATA) '$$d$$p' '$(DESTDIR)$(pdfdir)/gcc/$$f'"; \
195           $(INSTALL_DATA) "$$d$$p" "$(DESTDIR)$(pdfdir)/gcc/$$f"; \
196         done
198 .INTERMEDIATE: m2.pod
200 m2.pod: $(TEXISRC) $(objdir)/m2/images/gnu.eps
201         -$(TEXI2POD) -I $(objdir)/m2 -D m2 < $< > $@
203 doc/m2.info: $(TEXISRC) $(objdir)/m2/images/gnu.eps
204         if test "x$(BUILD_INFO)" = xinfo; then \
205           rm -f doc/m2.info*; \
206           $(MAKEINFO) -I$(objdir)/m2 -I$(srcdir)/doc/include \
207                       -o $@ $(srcdir)/doc/gm2.texi ; \
208         else true; fi
210 $(objdir)/m2/images/gnu.eps: $(srcdir)/m2/images/gnupng
211         -test -d $(@D) || $(mkinstalldirs) $(@D)
212         cp $(srcdir)/m2/images/gnu.eps $@
214 m2.html: $(build_htmldir)/m2/index.html
216 $(build_htmldir)/m2/index.html: $(TEXISRC) $(objdir)/m2/images/gnu.eps
217         $(mkinstalldirs) $(@D)
218         rm -f $(@D)/*
219         $(TEXI2HTML) -I $(objdir)/m2 -I $(srcdir)/m2 -I $(gcc_docdir)/include -o $(@D) $<
221 M2_HTMLFILES = $(build_htmldir)/m2
223 m2.install-html: $(M2_HTMLFILES)
224         @$(NORMAL_INSTALL)
225         test -z "$(htmldir)" || $(mkinstalldirs) "$(DESTDIR)$(htmldir)"
226         @list='$(M2_HTMLFILES)'; for p in $$list; do \
227           if test -f "$$p" || test -d "$$p"; then d=""; else d="$(srcdir)/"; fi; \
228           f=$(html__strip_dir) \
229           if test -d "$$d$$p"; then \
230             echo " $(mkinstalldirs) '$(DESTDIR)$(htmldir)/$$f'"; \
231             $(mkinstalldirs) "$(DESTDIR)$(htmldir)/$$f" || exit 1; \
232             echo " $(INSTALL_DATA) '$$d$$p'/* '$(DESTDIR)$(htmldir)/$$f'"; \
233             $(INSTALL_DATA) "$$d$$p"/* "$(DESTDIR)$(htmldir)/$$f"; \
234           else \
235             echo " $(INSTALL_DATA) '$$d$$p' '$(DESTDIR)$(htmldir)/$$f'"; \
236             $(INSTALL_DATA) "$$d$$p" "$(DESTDIR)$(htmldir)/$$f"; \
237           fi; \
238         done
240 # gm2-libs.texi
242 m2/gm2-libs.texi: gm2-libs.texi-check; @true
244 ifeq ($(HAVE_PYTHON),yes)
245 gm2-libs.texi-check: m2/SYSTEM-pim.texi m2/SYSTEM-iso.texi m2/Builtins.texi \
246                      $(objdir)/m2/gm2-libs-coroutines/SYSTEM.def
247         -test -d m2/gm2-libs-log || $(mkinstalldirs) m2/gm2-libs-log
248         -test -d m2/gm2-libs-iso || $(mkinstalldirs) m2/gm2-libs-iso
249         -test -d m2/gm2-libs || $(mkinstalldirs) m2/gm2-libs
250         $(PYTHON) $(srcdir)/m2/tools-src/def2doc.py -t -uLibraries -s$(srcdir)/m2 -b$(objdir)/m2 -o $(objdir)/m2/gm2-libs.texi
251 else
252 gm2-libs.texi-check:
253         cp $(srcdir)/m2/target-independent/m2/gm2-libs.texi $(objdir)/m2/gm2-libs.texi
254 endif
255         $(STAMP) gm2-libs.texi-check
257 # gm2-libs.rst
259 m2/gm2-libs.rst: gm2-libs.rst-check; @true
261 ifeq ($(HAVE_PYTHON),yes)
262 gm2-libs.rst-check: m2/SYSTEM-pim.texi m2/SYSTEM-iso.texi m2/Builtins.texi \
263                      $(objdir)/m2/gm2-libs-coroutines/SYSTEM.def
264         $(PYTHON) $(srcdir)/m2/tools-src/def2doc.py -x -uLibraries -s$(srcdir)/m2 -b$(objdir)/m2 -o $(objdir)/m2/gm2-libs.rst
265 else
266 gm2-libs.rst-check:
267         cp $(srcdir)/m2/target-independent/m2/gm2-libs.rst $(objdir)/m2/gm2-libs.rst
268 endif
269         $(STAMP) gm2-libs.rst-check
271 # gm2-ebnf.texi
273 m2/gm2-ebnf.texi: gm2-ebnf.texi-check; @true
275 gm2-ebnf.texi-check: $(PGE) $(srcdir)/m2/gm2-compiler/P0SyntaxCheck.bnf
276         $(PGE) -c -p -t -f $(srcdir)/m2/gm2-compiler/P0SyntaxCheck.bnf -o m2/gm2-ebnf.texi
277         $(STAMP) gm2-ebnf.texi-check
279 # gm2-ebnf.rst
281 m2/gm2-ebnf.rst: gm2-ebnf.rst-check; @true
283 gm2-ebnf.rst-check: $(PGE) $(srcdir)/m2/gm2-compiler/P0SyntaxCheck.bnf
284         $(PGE) -c -p -t -f $(srcdir)/m2/gm2-compiler/P0SyntaxCheck.bnf -o m2/gm2-ebnf.rst
285         $(STAMP) gm2-ebnf.rst-check
287 # SYSTEM-pim.texi
289 m2/SYSTEM-pim.texi: SYSTEM-pim-texi-check; @true
291 ifeq ($(HAVE_PYTHON),yes)
292 SYSTEM-pim-texi-check: $(objdir)/m2/gm2-libs/SYSTEM.def
293         $(PYTHON) $(srcdir)/m2/tools-src/def2doc.py -t -b$(objdir)/m2 -f$(objdir)/m2/gm2-libs/SYSTEM.def -o $(objdir)/m2/SYSTEM-pim.texi
294 else
295 SYSTEM-pim-texi-check: $(objdir)/m2/gm2-libs/SYSTEM.def
296         cp $(srcdir)/m2/target-independent/m2/SYSTEM-pim.texi $(objdir)/m2/SYSTEM-pim.texi
297 endif
298         $(STAMP) SYSTEM-pim-texi-check
300 # SYSTEM-pim.rst
302 m2/SYSTEM-pim.rst: SYSTEM-pim-rst-check; @true
304 ifeq ($(HAVE_PYTHON),yes)
305 SYSTEM-pim-rst-check: $(objdir)/m2/gm2-libs/SYSTEM.def
306         $(PYTHON) $(srcdir)/m2/tools-src/def2doc.py -x -b$(objdir)/m2 -f$(objdir)/m2/gm2-libs/SYSTEM.def -o $(objdir)/m2/SYSTEM-pim.rst
307 else
308 SYSTEM-pim-rst-check: $(objdir)/m2/gm2-libs/SYSTEM.def
309         cp $(srcdir)/m2/target-independent/m2/SYSTEM-pim.rst $(objdir)/m2/SYSTEM-pim.rst
310 endif
311         $(STAMP) SYSTEM-pim-rst-check
313 # SYSTEM-pim.texi
315 m2/SYSTEM-iso.texi:  SYSTEM-iso.texi-check; @true
317 ifeq ($(HAVE_PYTHON),yes)
318 SYSTEM-iso.texi-check:  $(objdir)/m2/gm2-libs-iso/SYSTEM.def
319         $(PYTHON) $(srcdir)/m2/tools-src/def2doc.py -t -b$(objdir)/m2 -f$(objdir)/m2/gm2-libs-iso/SYSTEM.def -o $(objdir)/m2/SYSTEM-iso.texi
320 else
321 SYSTEM-iso.texi-check:  $(objdir)/m2/gm2-libs-iso/SYSTEM.def
322         cp $(srcdir)/m2/target-independent/m2/SYSTEM-iso.texi $(objdir)/m2/SYSTEM-iso.texi
323 endif
324         $(STAMP) SYSTEM-iso.texi-check
326 # SYSTEM-pim.rst
328 m2/SYSTEM-iso.rst:  SYSTEM-iso.rst-check; @true
330 ifeq ($(HAVE_PYTHON),yes)
331 SYSTEM-iso.rst-check:  $(objdir)/m2/gm2-libs-iso/SYSTEM.def
332         $(PYTHON) $(srcdir)/m2/tools-src/def2doc.py -x -b$(objdir)/m2 -f$(objdir)/m2/gm2-libs-iso/SYSTEM.def -o $(objdir)/m2/SYSTEM-iso.rst
333 else
334 SYSTEM-iso.rst-check:  $(objdir)/m2/gm2-libs-iso/SYSTEM.def
335         cp $(srcdir)/m2/target-independent/m2/SYSTEM-iso.rst $(objdir)/m2/SYSTEM-iso.rst
336 endif
337         $(STAMP) SYSTEM-iso.rst-check
340 # m2/Builtins.texi
342 m2/Builtins.texi:  Builtins.texi-check; @true
344 ifeq ($(HAVE_PYTHON),yes)
345 Builtins.texi-check:  m2/gm2-libs/Builtins.def
346         $(PYTHON) $(srcdir)/m2/tools-src/def2doc.py -t -b./ -f$(srcdir)/m2/gm2-libs/Builtins.def -o $(objdir)/m2/Builtins.texi
347 else
348 Builtins.texi-check:  m2/gm2-libs/Builtins.def
349         cp $(srcdir)/m2/target-independent/m2/Builtins.texi $(objdir)/m2/Builtins.texi
350 endif
351         $(STAMP) Builtins.texi-check
353 # m2/Builtins.rst
355 m2/Builtins.rst:  Builtins.rst-check; @true
357 ifeq ($(HAVE_PYTHON),yes)
358 Builtins.rst-check:  m2/gm2-libs/Builtins.def
359         $(PYTHON) $(srcdir)/m2/tools-src/def2doc.py -x -b./ -f$(srcdir)/m2/gm2-libs/Builtins.def -o $(objdir)/m2/Builtins.rst
360 else
361 Builtins.rst-check:  m2/gm2-libs/Builtins.def
362         cp $(srcdir)/m2/target-independent/m2/Builtins.rst $(objdir)/m2/Builtins.rst
363 endif
364         $(STAMP) Builtins.rst-check
366 m2/gpl_v3_without_node.texi: doc/include/gpl_v3.texi
367         grep -v "^@node" $< > $@
369 # Stage hooks:
370 # The toplevel makefile has already created stage?/m2 at this point.
372 m2.stage1: stage1-start
373         -mv m2/*$(objext) stage1/m2
374 m2.stage2: stage2-start
375         -mv m2/*$(objext) stage2/m2
376 m2.stage3: stage3-start
377         -mv m2/*$(objext) stage3/m2
378 m2.stage4: stage4-start
379         -mv m2/*$(objext) stage4/m2
380 m2.stageprofile: stageprofile-start
381         -mv m2/*$(objext) stageprofile/m2
382 m2.stagefeedback: stageprofile-start
383         -mv m2/*$(objext) stagefeedback/m2
385 # No gm2-specific selftests
386 selftest-m2:
388 # Install hooks:
389 # cc1gm2 is installed elsewhere as part of $(COMPILERS).
390 # $(COMPILERS) is defined in `config-lang.in'
392 m2.install-common: installdirs
393         -rm -f $(DESTDIR)$(bindir)/$(GM2_INSTALL_NAME)$(exeext)
394         $(INSTALL_PROGRAM) gm2$(exeext) $(DESTDIR)$(bindir)/$(GM2_INSTALL_NAME)$(exeext)
395         -if test -f cc1gm2$(exeext); then \
396           if test -f gm2-cross$(exeext); then \
397             :; \
398           else \
399             rm -f $(DESTDIR)$(bindir)/$(GM2_TARGET_INSTALL_NAME)$(exeext); \
400             ( cd $(DESTDIR)$(bindir) && \
401               $(LN) $(GM2_INSTALL_NAME)$(exeext) $(GM2_TARGET_INSTALL_NAME)$(exeext) ); \
402           fi; \
403         fi
404         -for tool in cc1gm2$(exeext); do \
405              if [ -f $$tool ]; then \
406                rm -f $(DESTDIR)$(libexecsubdir)/$$tool; \
407                $(INSTALL_PROGRAM) $$tool $(DESTDIR)$(libexecsubdir)/$$tool; \
408                chmod a+x $(DESTDIR)$(libexecsubdir)/$$tool; \
409              else \
410                echo "cannot find $$tool" ; \
411              fi ; \
412          done
414 m2.install-info: installdirs
415         if [ -f gm2$(exeext) ] ; then \
416           if [ -f $(objdir)/doc/m2.info ]; then \
417             rm -f $(DESTDIR)$(infodir)/m2.info*; \
418             for f in $(objdir)/doc/m2.info*; do \
419               realfile=`echo $$f | sed -e 's|.*/\([^/]*\)$$|\1|'`; \
420               rm -f $(DESTDIR)$(infodir)/`basename $$realfile`; \
421               $(INSTALL_DATA) $$f $(DESTDIR)$(infodir)/`basename $$realfile`; \
422             done; \
423             chmod a-x $(DESTDIR)$(infodir)/m2.info*; \
424           else true; fi; \
425         else true; fi
426         -if [ -f gm2$(exeext) ] && [ -f $(DESTDIR)$(infodir)/m2.info ]; then \
427           if $(SHELL) -c 'install-info --version' >/dev/null 2>&1; then \
428             install-info --dir-file=$(infodir)/dir $(DESTDIR)$(infodir)/m2.info; \
429           else true; fi; \
430         else true; fi
432 m2.install-normal: m2.install-common m2.install-info m2.install-man
434 # This target will install GM2 into an existing GCC installation,
435 # without overwriting existing files.
436 # The semicolon is to prevent the install.sh -> install default rule
437 # from doing anything.  Having it run true helps avoid problems and
438 # noise from versions of make which don't like to have null commands.
439 m2.install: m2.install-normal; @true
441 gm2.install-with-gcc: $(INSTALL_HEADERS) gm2.install $(INSTALL_LIBGCC)
442         for file in $(GCC_PASSES); do \
443           if [ x"$$file" != x"xgcc$(exeext)" ]; then \
444             rm -f $(DESTDIR)$(libsubdir)/$$file; \
445             $(INSTALL_PROGRAM) $$file $(DESTDIR)$(libsubdir)/$$file || exit 1; \
446           fi; \
447         done; exit 0
449 m2.uninstall:
450         -rm -rf $(bindir)/$(GM2_INSTALL_NAME)
451         -rm -rf $(bindir)/$(GM2_CROSS_NAME)
453 ifeq ($(enable_plugin),yes)
454 m2.install-plugin: installdirs
455         $(mkinstalldirs) $(DESTDIR)$(plugin_resourcesdir)
456         $(INSTALL_PROGRAM) $(M2RTE_PLUGIN_SO) $(DESTDIR)$(plugin_resourcesdir)/m2rte$(soext)
457         chmod a+x $(DESTDIR)$(plugin_resourcesdir)/m2rte$(soext)
459 override PLUGINCFLAGS := $(filter-out -mdynamic-no-pic,$(PLUGINCFLAGS))
461 plugin/m2rte$(soext): $(srcdir)/m2/plugin/m2rte.cc $(GCC_HEADER_DEPENDENCIES_FOR_M2) \
462         insn-attr-common.h insn-flags.h $(generated_files)
463         -test -d $(@D) || $(mkinstalldirs) $(@D)
464         $(PLUGINCC) $(PLUGINCFLAGS) -fno-rtti -I. -I$(srcdir) $(INCINTL) -I$(srcdir)/m2 -I$(srcdir)/m2/gm2-gcc -I$(srcdir)/../include -I$(srcdir)/../libcpp/include -Wall $(GMPINC) -Wno-literal-suffix -fPIC -c -o plugin/m2rte.o $(srcdir)/m2/plugin/m2rte.cc
465         $(PLUGINCC) $(PLUGINCFLAGS) $(PLUGINLDFLAGS) $(PLUGINLIBS) $(LIBINTL) -fno-rtti plugin/m2rte.o -shared -o $@
466 else
467 m2.install-plugin:
469 plugin/m2rte$(soext):
471 endif
474 # Clean hooks:
475 # A lot of the ancillary files are deleted by the main makefile.
476 # We just have to delete files specific to us.
478 m2.mostlyclean:
479         -rm -f m2/*.o
481 m2.clean:
482         -rm -f m2/*.o
483         -rm -f m2/gm2-libs/config.*
484         -rm m2/gm2-libs/gm2-libs-host.h m2/gm2config.h
486 m2.extraclean:
487 m2.realclean:
489 quit: force
490         echo "calling exit"
491         exit 1
493 # Rules to build the compiler, pge and mc.
495 # MC_COPYRIGHT=--gpl-header --project="GNU Modula-2"
496 MC_COPYRIGHT=
498 MC_ARGS= --olang=c++ \
499  --h-file-prefix=$(SRC_PREFIX) \
500  -I$(srcdir)/m2/gm2-libs \
501  -I$(srcdir)/m2/gm2-compiler \
502  -I$(srcdir)/m2/gm2-libiberty \
503  -I$(srcdir)/m2/gm2-gcc \
504  --quiet \
505  $(MC_COPYRIGHT) \
506  --gcc-config-system
508 MCDEPS=m2/boot-bin/mc$(exeext)
510 MC=m2/boot-bin/mc$(exeext) $(MC_ARGS)
512 MC_LIBS=m2/mc-boot-ch/Glibc.o m2/mc-boot-ch/Gmcrts.o
514 M2LINK=m2/boot-bin/mklink$(exeext)
515 GM2_O=-O0
516 GM2_O_S3=-O
517 GM2_OS=-Os
518 GM2_G=-g -fm2-g
519 GM2_CPP=
520 # GM2_DEBUG_STRMEM=-fcpp
521 GM2_DEBUG_STRMEM=
522 GM2_FLAGS=-fsoft-check-all \
523  -fno-return \
524  $(GM2_G) $(GM2_O) \
525  -funbounded-by-reference -fpim -fextended-opaque \
526  -Wcase-enum -Wpedantic-cast -Wpedantic-param-names \
527  -Wreturn-type -Wunused-variable -Wuninit-variable-checking \
528  -ffunction-sections -fdata-sections \
529  $(GM2_CPP) # -fauto-init
530 GM2_ISO_FLAGS=-fsoft-check-all $(GM2_G) $(GM2_O) \
531  -fno-return \
532  -funbounded-by-reference -fiso -fextended-opaque \
533  -Wcase-enum -Wpedantic-cast -Wpedantic-param-names -Wreturn-type \
534  -Wunused-variable -Wuninit-variable-checking \
535  -ffunction-sections -fdata-sections \
536  $(GM2_CPP)
537 GM2_MIN_FLAGS=$(GM2_G) $(GM2_OS) \
538  -funbounded-by-reference -fextended-opaque \
539  -Wpedantic-cast -Wpedantic-param-names -fno-exceptions \
540  -ffunction-sections -fdata-sections $(GM2_CPP)
542 # ALL_LINKERFLAGS may include -pie (when GCC is configured with
543 # --enable-host-pie), so use -fPIE if needed.  (It would not be
544 # a good idea to override CFLAGS.)
545 GM2_PICFLAGS = $(PICFLAG)
547 O2=-O2 -g
548 SO_O2=-O2 -g -fPIC
549 SO=-O0 -g -fPIC
551 # Language-specific object files for the gm2 compiler.
553 GM2_C_OBJS        = m2/gm2-lang.o \
554                     m2/gm2-gcc/m2pp.o \
555                     m2/gm2-gcc/m2assert.o \
556                     m2/gm2-gcc/m2block.o \
557                     m2/gm2-gcc/m2builtins.o \
558                     m2/gm2-gcc/m2except.o \
559                     m2/gm2-gcc/m2color.o \
560                     m2/gm2-gcc/m2configure.o \
561                     m2/gm2-gcc/m2convert.o \
562                     m2/gm2-gcc/m2decl.o \
563                     m2/gm2-gcc/m2expr.o \
564                     m2/gm2-gcc/m2linemap.o \
565                     m2/gm2-gcc/m2statement.o \
566                     m2/gm2-gcc/m2type.o \
567                     m2/gm2-gcc/m2tree.o \
568                     m2/gm2-gcc/m2treelib.o \
569                     m2/gm2-gcc/m2top.o \
570                     m2/gm2-gcc/m2misc.o \
571                     m2/gm2-gcc/init.o
572 GM2_LIBS          = m2/gm2-compiler/gm2.a \
573                     m2/gm2-libs/libgm2.a \
575 GM2_LIBS_BOOT     = m2/gm2-compiler-boot/gm2.a \
576                     m2/gm2-libs-boot/libgm2.a \
577                     $(GM2-BOOT-O)
579 m2_OBJS = $(GM2_C_OBJS) m2/gm2-gcc/rtegraph.o \
580         m2/gm2-compiler-boot/m2flex.o
582 cc1gm2$(exeext): m2/stage1/cc1gm2$(exeext) $(m2.prev)
583         cp -p $< $@
585 m2/stage2/cc1gm2$(exeext): m2/stage1/cc1gm2$(exeext) m2/gm2-compiler/m2flex.o \
586                             $(GM2_C_OBJS) $(BACKEND) $(LIBDEPS) $(GM2_LIBS) \
587                             m2/gm2-gcc/rtegraph.o $(M2RTE_PLUGIN_SO)
588         -test -d $(@D) || $(mkinstalldirs) $(@D)
589         @$(call LINK_PROGRESS,$(INDEX.m2),start)
590         +$(LLINKER) $(ALL_CFLAGS) $(LDFLAGS) -o $@ $(GM2_C_OBJS) m2/gm2-compiler/m2flex.o \
591                             attribs.o \
592                               $(GM2_LIBS) \
593                               $(BACKEND) $(LIBS) m2/gm2-gcc/rtegraph.o \
594                               $(BACKENDLIBS) $(LIBSTDCXX) -lm
595         @$(call LINK_PROGRESS,$(INDEX.m2),end)
597 m2/stage1/cc1gm2$(exeext): gm2$(exeext) m2/gm2-compiler-boot/m2flex.o \
598                             $(GM2_C_OBJS) $(BACKEND) $(LIBDEPS) \
599                             $(GM2_LIBS_BOOT) $(MC_LIBS) \
600                             m2/gm2-gcc/rtegraph.o $(M2RTE_PLUGIN_SO) \
601                             $(m2.prev)
602         -test -d $(@D) || $(mkinstalldirs) $(@D)
603         @$(call LINK_PROGRESS,$(INDEX.m2),start)
604         +$(LLINKER) $(ALL_CFLAGS) $(LDFLAGS) -o $@ $(GM2_C_OBJS) m2/gm2-compiler-boot/m2flex.o \
605                             attribs.o \
606                              $(GM2_LIBS_BOOT) $(MC_LIBS) \
607                              m2/gm2-gcc/rtegraph.o \
608                              $(BACKEND) $(LIBS) $(BACKENDLIBS)
609         @$(call LINK_PROGRESS,$(INDEX.m2),end)
611 # Compiling object files from source files.
613 GCC_HEADER_DEPENDENCIES_FOR_M2 = $(BUILD-BOOT-H) $(TIMEVAR_H) m2/gm2config.h $(CONFIG_H) \
614         $(TREE_H) $(RTL_H) $(TARGET_H) $(PLUGIN_HEADERS) \
615         $(BCONFIG_H) $(CORETYPES_H) $(SYSTEM_H) \
616         $(srcdir)/flags.h gtype-m2.h \
617         $(generated_files) insn-attr-common.h
619 m2/gm2-gcc/%.o: $(srcdir)/m2/gm2-gcc/%.cc $(GCC_HEADER_DEPENDENCIES_FOR_M2)
620         -test -d $(@D)/$(DEPDIR) || $(mkinstalldirs) $(@D)/$(DEPDIR)
621         $(COMPILER) $(CM2DEP) -c -g $(ALL_COMPILERFLAGS) \
622              $(ALL_CPPFLAGS) $(INCLUDES) $< $(OUTPUT_OPTION)
623         $(POSTCOMPILE)
625 m2/gm2-gcc/m2configure.o: $(srcdir)/m2/gm2-gcc/m2configure.cc \
626                $(SYSTEM_H) $(GCC_H) $(CONFIG_H) \
627                m2/gm2config.h $(TARGET_H) $(PLUGIN_HEADERS) \
628                $(generated_files) $(C_TREE_H) insn-attr-common.h
629         -test -d $(@D)/$(DEPDIR) || $(mkinstalldirs) $(@D)/$(DEPDIR)
630         $(COMPILER) $(CM2DEP) $(ALL_COMPILERFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \
631          $(DRIVER_DEFINES) \
632                 -DLIBSUBDIR=\"$(libsubdir)\" \
633                 -DPREFIX=\"$(prefix)\" \
634                 -c $(srcdir)/m2/gm2-gcc/m2configure.cc $(OUTPUT_OPTION)
635         $(POSTCOMPILE)
637 m2/gm2-lang.o: $(srcdir)/m2/gm2-lang.cc gt-m2-gm2-lang.h $(GCC_HEADER_DEPENDENCIES_FOR_M2)
638         $(COMPILER) $(CM2DEP) -c -g $(GM2GCC) $(ALL_COMPILERFLAGS) \
639             -DLIBSUBDIR=\"$(libsubdir)\" \
640             $(ALL_CPPFLAGS) $(INCLUDES) $< $(OUTPUT_OPTION)
641         $(POSTCOMPILE)
643 m2/gm2-gcc/rtegraph.o: $(srcdir)/m2/gm2-gcc/rtegraph.cc $(GCC_HEADER_DEPENDENCIES_FOR_M2) \
644                        gt-m2-rtegraph.h
645         -test -d $(@D)/$(DEPDIR) || $(mkinstalldirs) $(@D)/$(DEPDIR)
646         $(COMPILER) $(CM2DEP) -c -g $(GM2GCC) $(ALL_COMPILERFLAGS) \
647             $(ALL_CPPFLAGS) $(INCLUDES) $< $(OUTPUT_OPTION)
648         $(POSTCOMPILE)
650 m2/gm2-gcc/$(SRC_PREFIX)%.h: $(srcdir)/m2/gm2-gcc/%.def $(MCDEPS)
651         -test -d $(@D) || $(mkinstalldirs) $(@D)
652         $(MC) -o=$@ $(srcdir)/m2/gm2-gcc/$*.def
654 ifeq ($(HAVE_PYTHON),yes)
655 check-format-error:
656         $(PYTHON) $(srcdir)/m2/tools-src/checkmeta.py -s $(srcdir)/m2/gm2-compiler
657 else
658 check-format-error:
659 endif
661 # The following tables define the source files which are translated into C using mc
662 # and defines the system interface C files.
664 # Core library definition modules found in gm2-libs.
666 GM2-LIBS-BOOT-DEFS = \
667    ASCII.def \
668    Args.def \
669    Assertion.def \
670    Break.def \
671    CmdArgs.def \
672    Debug.def \
673    DynamicStrings.def \
674    Environment.def \
675    FIO.def \
676    FormatStrings.def \
677    FpuIO.def \
678    IO.def \
679    Indexing.def \
680    M2Dependent.def \
681    M2EXCEPTION.def \
682    M2RTS.def \
683    NumberIO.def \
684    PushBackInput.def \
685    RTExceptions.def \
686    SArgs.def \
687    SEnvironment.def \
688    SFIO.def \
689    SYSTEM.def \
690    Scan.def \
691    StdIO.def \
692    Storage.def \
693    StrCase.def \
694    StrIO.def \
695    StrLib.def \
696    StringConvert.def \
697    SysExceptions.def \
698    SysStorage.def \
699    TimeString.def \
700    UnixArgs.def \
701    dtoa.def \
702    errno.def \
703    ldtoa.def \
704    libc.def \
705    libm.def \
706    termios.def \
707    wrapc.def \
709 # Core library implementation modules found in gm2-libs.
711 GM2-LIBS-BOOT-MODS = \
712    ASCII.mod \
713    Args.mod \
714    Assertion.mod \
715    Break.mod \
716    CmdArgs.mod \
717    Debug.mod \
718    DynamicStrings.mod \
719    Environment.mod \
720    FIO.mod \
721    FormatStrings.mod \
722    FpuIO.mod \
723    IO.mod \
724    Indexing.mod \
725    M2Dependent.mod \
726    M2EXCEPTION.mod \
727    M2RTS.mod \
728    NumberIO.mod \
729    PushBackInput.mod \
730    RTExceptions.mod \
731    SArgs.mod \
732    SEnvironment.mod \
733    SFIO.mod \
734    Scan.mod \
735    Storage.mod \
736    StrCase.mod \
737    StrIO.mod \
738    StrLib.mod \
739    StringConvert.mod \
740    SysStorage.mod \
741    TimeString.mod \
743 # Hand translated C files and C files for definition module for "C" modules
744 # found in gm2-libs-ch.
746 GM2-LIBS-BOOT-C = \
747    StdIO.c \
748    SysExceptions.c \
749    choosetemp.c \
750    errno.c \
751    termios.c \
752    wrapc.c \
754 # C++ implemented modules found in gm2-libs-ch.
756 GM2-LIBS-BOOT-CC = \
757    UnixArgs.cc \
758    dtoa.cc \
759    ldtoa.cc
761 # Definition modules for the front end found in gm2-compiler.
763 GM2-COMP-BOOT-DEFS = \
764    FifoQueue.def \
765    Lists.def \
766    M2ALU.def \
767    M2AsmUtil.def \
768    M2Base.def \
769    M2BasicBlock.def \
770    M2Batch.def \
771    M2Bitset.def \
772    M2CaseList.def \
773    M2Check.def \
774    M2Code.def \
775    M2ColorString.def \
776    M2Comp.def \
777    M2Const.def \
778    M2Debug.def \
779    M2DebugStack.def \
780    M2Defaults.def \
781    M2DriverOptions.def \
782    DynamicPath.def \
783    PathName.def \
784    M2Emit.def \
785    M2Error.def \
786    M2EvalSym.def \
787    M2FileName.def \
788    M2GCCDeclare.def \
789    M2GenGCC.def \
790    M2Graph.def \
791    M2LangDump.def \
792    M2LexBuf.def \
793    M2MetaError.def \
794    M2Optimize.def \
795    M2Options.def \
796    M2Pass.def \
797    M2Preprocess.def \
798    M2Printf.def \
799    M2Quads.def \
800    M2Quiet.def \
801    M2Range.def \
802    M2Reserved.def \
803    M2SSA.def \
804    M2Scaffold.def \
805    M2Scope.def \
806    M2Search.def \
807    M2Size.def \
808    M2StackAddress.def \
809    M2StackWord.def \
810    M2Students.def \
811    M2Swig.def \
812    M2SymInit.def \
813    M2System.def \
814    NameKey.def \
815    ObjectFiles.def \
816    Output.def \
817    P0SymBuild.def \
818    P0SyntaxCheck.def \
819    P1Build.def \
820    P1SymBuild.def \
821    P2Build.def \
822    P2SymBuild.def \
823    P3Build.def \
824    P3SymBuild.def \
825    PCBuild.def \
826    PCSymBuild.def \
827    PHBuild.def \
828    Sets.def \
829    SymbolConversion.def \
830    SymbolKey.def \
831    SymbolTable.def \
832    bnflex.def \
833    m2flex.def \
835 # Implementation modules for the front end found in gm2-compiler.
837 GM2-COMP-BOOT-MODS = \
838    FifoQueue.mod \
839    Lists.mod \
840    Lists.mod \
841    M2ALU.mod \
842    M2AsmUtil.mod \
843    M2Base.mod \
844    M2BasicBlock.mod \
845    M2Batch.mod \
846    M2Bitset.mod \
847    M2CaseList.mod \
848    M2Check.mod \
849    M2Code.mod \
850    M2ColorString.mod \
851    M2Comp.mod \
852    M2Const.mod \
853    M2Debug.mod \
854    M2DebugStack.mod \
855    M2Defaults.mod \
856    M2DriverOptions.mod \
857    DynamicPath.mod \
858    PathName.mod \
859    M2Emit.mod \
860    M2Error.mod \
861    M2FileName.mod \
862    M2GCCDeclare.mod \
863    M2GenGCC.mod \
864    M2Graph.mod \
865    M2LangDump.mod \
866    M2LexBuf.mod \
867    M2MetaError.mod \
868    M2Optimize.mod \
869    M2Options.mod \
870    M2Pass.mod \
871    M2Preprocess.mod \
872    M2Printf.mod \
873    M2Quads.mod \
874    M2Quiet.mod \
875    M2Range.mod \
876    M2Reserved.mod \
877    M2SSA.mod \
878    M2Scaffold.mod \
879    M2Scope.mod \
880    M2Search.mod \
881    M2Size.mod \
882    M2StackAddress.mod \
883    M2StackWord.mod \
884    M2Students.mod \
885    M2Swig.mod \
886    M2SymInit.mod \
887    M2System.mod \
888    NameKey.mod \
889    NameKey.mod \
890    ObjectFiles.mod \
891    Output.mod \
892    P0SymBuild.mod \
893    P1SymBuild.mod \
894    P2SymBuild.mod \
895    P3SymBuild.mod \
896    PCSymBuild.mod \
897    Sets.mod \
898    SymbolConversion.mod \
899    SymbolKey.mod \
900    SymbolKey.mod \
901    SymbolTable.mod \
902    bnflex.mod \
904 # The interface between the modula-2 front end and gimple/trees found in directory gm2-gcc.
906 GM2-GCC-DEFS = \
907    m2block.def \
908    m2builtins.def \
909    m2color.def \
910    m2configure.def \
911    m2convert.def \
912    m2decl.def \
913    m2except.def \
914    m2except.def \
915    m2expr.def \
916    m2linemap.def \
917    m2misc.def \
918    m2pp.def \
919    m2statement.def \
920    m2top.def \
921    m2tree.def \
922    m2treelib.def \
923    m2type.def \
925 # The following lists define the source files used to build gm2 using Modula-2
926 # sources directly.
928 # cc1gm2$(exeext) uses these definition modules from the core libraries.
930 GM2-LIBS-DEFS = \
931    ASCII.def \
932    Args.def \
933    Assertion.def \
934    Break.def \
935    Builtins.def \
936    COROUTINES.def \
937    CmdArgs.def \
938    Debug.def \
939    DynamicStrings.def \
940    Environment.def \
941    FIO.def \
942    FormatStrings.def \
943    FpuIO.def \
944    GetOpt.def \
945    IO.def \
946    Indexing.def \
947    LMathLib0.def \
948    LegacyReal.def \
949    M2Dependent.def \
950    M2EXCEPTION.def \
951    M2RTS.def \
952    MathLib0.def \
953    MemUtils.def \
954    NumberIO.def \
955    PushBackInput.def \
956    RTExceptions.def \
957    RTint.def \
958    SArgs.def \
959    SEnvironment.def \
960    SFIO.def \
961    SMathLib0.def \
962    SYSTEM.def \
963    Scan.def \
964    StdIO.def \
965    Storage.def \
966    StrCase.def \
967    StrIO.def \
968    StrLib.def \
969    StringConvert.def \
970    SysStorage.def \
971    TimeString.def \
972    UnixArgs.def \
973    cbuiltin.def \
974    dtoa.def \
975    ldtoa.def \
976    libc.def \
977    termios.def \
978    wrapc.def \
980 # cc1gm2$(exeext) uses these implementation modules from the core libraries.
982 GM2-LIBS-MODS = \
983    ASCII.mod \
984    Args.mod \
985    Assertion.mod \
986    Break.mod \
987    Builtins.mod \
988    COROUTINES.mod \
989    CmdArgs.mod \
990    Debug.mod \
991    DynamicStrings.mod \
992    Environment.mod \
993    FIO.mod \
994    FormatStrings.mod \
995    FpuIO.mod \
996    GetOpt.mod \
997    IO.mod \
998    Indexing.mod \
999    LMathLib0.mod \
1000    LegacyReal.mod \
1001    M2Dependent.mod \
1002    M2EXCEPTION.mod \
1003    M2RTS.mod \
1004    MathLib0.mod \
1005    MemUtils.mod \
1006    NumberIO.mod \
1007    PushBackInput.mod \
1008    RTExceptions.mod \
1009    RTint.mod \
1010    SArgs.mod \
1011    SEnvironment.mod \
1012    SFIO.mod \
1013    SMathLib0.mod \
1014    SYSTEM.mod \
1015    Scan.mod \
1016    StdIO.mod \
1017    Storage.mod \
1018    StrCase.mod \
1019    StrIO.mod \
1020    StrLib.mod \
1021    StringConvert.mod \
1022    SysStorage.mod \
1023    TimeString.mod \
1025 # cc1gm2$(exeext) uses these C modules from the core libraries.
1027 GM2-LIBS-C = \
1028    Selective.c \
1029    SysExceptions.c \
1030    cgetopt.c \
1031    choosetemp.c \
1032    errno.c \
1033    host.c \
1034    termios.c \
1035    wrapc.c \
1037 # cc1gm2$(exeext) uses these C++ modules from the core libraries.
1039 GM2-LIBS-CC = \
1040    UnixArgs.cc \
1041    dtoa.cc \
1042    ldtoa.cc \
1044 # cc1gm2$(exeext) uses these definition modules found in the gm2-compiler directory.
1046 GM2-COMP-DEFS = \
1047    FifoQueue.def \
1048    Lists.def \
1049    M2ALU.def \
1050    M2AsmUtil.def   \
1051    M2Base.def \
1052    M2BasicBlock.def \
1053    M2Batch.def \
1054    M2Bitset.def \
1055    M2CaseList.def \
1056    M2Check.def \
1057    M2Code.def \
1058    M2ColorString.def \
1059    M2Comp.def \
1060    M2Const.def \
1061    M2Debug.def \
1062    M2DebugStack.def \
1063    M2Defaults.def \
1064    M2DriverOptions.def \
1065    DynamicPath.def \
1066    PathName.def \
1067    M2Emit.def \
1068    M2Error.def \
1069    M2FileName.def \
1070    M2GCCDeclare.def \
1071    M2GenGCC.def \
1072    M2Graph.def \
1073    M2LangDump.def \
1074    M2LexBuf.def \
1075    M2MetaError.def \
1076    M2Optimize.def \
1077    M2Options.def \
1078    M2Pass.def \
1079    M2Preprocess.def \
1080    M2Printf.def \
1081    M2Quads.def     \
1082    M2Quiet.def \
1083    M2Range.def \
1084    M2Reserved.def \
1085    M2SSA.def \
1086    M2Scaffold.def \
1087    M2Scope.def \
1088    M2Search.def \
1089    M2Size.def \
1090    M2StackAddress.def \
1091    M2StackWord.def \
1092    M2Students.def \
1093    M2Swig.def \
1094    M2SymInit.def \
1095    M2System.def \
1096    NameKey.def \
1097    ObjectFiles.def \
1098    P0SymBuild.def \
1099    P0SyntaxCheck.def \
1100    P1Build.def \
1101    P1SymBuild.def \
1102    P2Build.def \
1103    P2SymBuild.def \
1104    P3Build.def \
1105    P3SymBuild.def \
1106    PCBuild.def \
1107    PCSymBuild.def \
1108    PHBuild.def \
1109    Sets.def \
1110    SymbolConversion.def \
1111    SymbolKey.def \
1112    SymbolTable.def \
1113    bnflex.def \
1115 # cc1gm2$(exeext) uses these implementation modules found in the gm2-compiler directory.
1117 GM2-COMP-MODS = \
1118    FifoQueue.mod \
1119    Lists.mod \
1120    M2ALU.mod \
1121    M2AsmUtil.mod \
1122    M2Base.mod \
1123    M2BasicBlock.mod \
1124    M2Batch.mod \
1125    M2Bitset.mod \
1126    M2CaseList.mod \
1127    M2Check.mod \
1128    M2Code.mod \
1129    M2ColorString.mod \
1130    M2Comp.mod \
1131    M2Const.mod \
1132    M2Debug.mod \
1133    M2DebugStack.mod \
1134    M2Defaults.mod \
1135    M2DriverOptions.mod \
1136    DynamicPath.mod \
1137    PathName.mod \
1138    M2Emit.mod \
1139    M2Error.mod \
1140    M2FileName.mod \
1141    M2GCCDeclare.mod \
1142    M2GenGCC.mod \
1143    M2Graph.mod \
1144    M2LangDump.mod \
1145    M2LexBuf.mod \
1146    M2MetaError.mod \
1147    M2Optimize.mod \
1148    M2Options.mod \
1149    M2Pass.mod \
1150    M2Preprocess.mod \
1151    M2Printf.mod \
1152    M2Quads.mod \
1153    M2Quiet.mod \
1154    M2Range.mod \
1155    M2Reserved.mod \
1156    M2SSA.mod \
1157    M2Scaffold.mod \
1158    M2Scope.mod \
1159    M2Search.mod \
1160    M2Size.mod \
1161    M2StackAddress.mod \
1162    M2StackWord.mod \
1163    M2Students.mod \
1164    M2Swig.mod \
1165    M2SymInit.mod \
1166    M2System.mod \
1167    NameKey.mod \
1168    ObjectFiles.mod \
1169    Output.mod \
1170    P0SymBuild.mod \
1171    P1SymBuild.mod \
1172    P2SymBuild.mod  \
1173    P3SymBuild.mod  \
1174    PCSymBuild.mod \
1175    Sets.mod \
1176    SymbolConversion.mod \
1177    SymbolKey.mod \
1178    SymbolTable.mod \
1179    bnflex.mod \
1181 # Implementation modules created by the parser generator pge from .bnf files.
1183 GM2-AUTO-MODS = \
1184    P2Build.mod \
1185    P3Build.mod \
1186    PHBuild.mod \
1187    PCBuild.mod \
1188    P1Build.mod \
1189    P0SyntaxCheck.mod \
1191 # LIBIBERTY interface definition modules
1193 GM2-LIBIBERTY-DEFS = \
1194    choosetemp.def \
1195    pexecute.def
1197 BUILD-LIBS-BOOT-H = $(GM2-LIBS-BOOT-DEFS:%.def=m2/gm2-libs-boot/$(SRC_PREFIX)%.h)
1199 BUILD-LIBS-BOOT = $(BUILD-LIBS-BOOT-H) \
1200                   $(GM2-LIBS-BOOT-MODS:%.mod=m2/gm2-libs-boot/%.o) \
1201                   $(GM2-LIBS-BOOT-CC:%.cc=m2/gm2-libs-boot/%.o) \
1202                   $(GM2-LIBS-BOOT-C:%.c=m2/gm2-libs-boot/%.o)
1204 BUILD-COMPILER-BOOT-H = $(GM2-COMP-BOOT-DEFS:%.def=m2/gm2-compiler-boot/$(SRC_PREFIX)%.h) \
1205                         $(GM2-LIBIBERTY-DEFS:%.def=m2/gm2-libiberty/$(SRC_PREFIX)%.h) \
1206                         $(GM2-GCC-DEFS:%.def=m2/gm2-gcc/$(SRC_PREFIX)%.h)
1208 BUILD-COMPILER-BOOT = $(BUILD-COMPILER-BOOT-H) \
1209                       $(GM2-COMP-BOOT-DEFS:%.def=m2/gm2-compiler-boot/$(SRC_PREFIX)%.h) \
1210                       $(GM2-AUTO-MODS:%.mod=m2/gm2-compiler-boot/%.o) \
1211                       $(GM2-COMP-BOOT-MODS:%.mod=m2/gm2-compiler-boot/%.o) \
1212                       m2/gm2-compiler-boot/m2flex.o
1214 BUILD-BOOT-H = m2/boot-bin/mc$(exeext) \
1215                $(BUILD-LIBS-BOOT-H) $(BUILD-COMPILER-BOOT-H) $(TARGET_H) $(PLUGIN_HEADERS)
1217 BUILD-LIBS = $(BUILD-LIBS-BOOT-H) \
1218              $(GM2-LIBS-MODS:%.mod=m2/gm2-libs/%.o) \
1219              $(GM2-LIBS-CC:%.cc=m2/gm2-libs/%.o) \
1220              $(GM2-LIBS-C:%.c=m2/gm2-libs/%.o)
1222 # Core library definition modules used by the modula-2 to C++ translator.
1224 MC-LIB-DEFS = \
1225    ASCII.def \
1226    Args.def \
1227    Assertion.def \
1228    Break.def  \
1229    COROUTINES.def \
1230    CmdArgs.def \
1231    Debug.def \
1232    DynamicStrings.def \
1233    Environment.def \
1234    FIO.def \
1235    FormatStrings.def \
1236    FpuIO.def \
1237    IO.def \
1238    M2Dependent.def \
1239    M2EXCEPTION.def \
1240    M2RTS.def \
1241    MemUtils.def \
1242    NumberIO.def \
1243    PushBackInput.def \
1244    RTExceptions.def \
1245    RTco.def \
1246    RTentity.def \
1247    RTint.def \
1248    SArgs.def \
1249    SFIO.def \
1250    SYSTEM.def \
1251    Selective.def \
1252    StdIO.def \
1253    Storage.def \
1254    StrCase.def \
1255    StrIO.def \
1256    StrLib.def \
1257    StringConvert.def \
1258    SysExceptions.def \
1259    SysStorage.def \
1260    TimeString.def \
1261    UnixArgs.def \
1262    dtoa.def \
1263    errno.def \
1264    ldtoa.def \
1265    libc.def \
1266    libm.def \
1267    termios.def \
1268    wrapc.def \
1270 # Core library implementation modules used by the modula-2 to C++ translator.
1272 MC-LIB-MODS = \
1273    ASCII.mod \
1274    Args.mod \
1275    Assertion.mod \
1276    Break.mod  \
1277    CmdArgs.mod \
1278    Debug.mod \
1279    DynamicStrings.mod \
1280    Environment.mod \
1281    FIO.mod \
1282    FormatStrings.mod \
1283    FpuIO.mod \
1284    IO.mod \
1285    M2Dependent.mod \
1286    M2EXCEPTION.mod \
1287    M2RTS.mod \
1288    MemUtils.mod \
1289    NumberIO.mod \
1290    PushBackInput.mod \
1291    RTExceptions.mod \
1292    RTint.mod \
1293    SArgs.mod \
1294    SFIO.mod \
1295    StdIO.mod \
1296    Storage.mod \
1297    StrCase.mod \
1298    StrIO.mod \
1299    StrLib.mod \
1300    StringConvert.mod \
1301    SysStorage.mod \
1302    TimeString.mod \
1304 MC-LIB-BOOT-CC = $(MC-LIB-MODS:%.mod=%.cc)
1306 # Definition modules for the modula-2 to C++ translator found in mc.
1308 MC-DEFS = \
1309    Indexing.def \
1310    alists.def \
1311    decl.def \
1312    keyc.def \
1313    lists.def \
1314    mcComment.def \
1315    mcComp.def \
1316    mcDebug.def \
1317    mcError.def \
1318    mcFileName.def \
1319    mcLexBuf.def \
1320    mcMetaError.def \
1321    mcOptions.def \
1322    mcPreprocess.def \
1323    mcPretty.def \
1324    mcPrintf.def \
1325    mcQuiet.def \
1326    mcReserved.def \
1327    mcSearch.def \
1328    mcStack.def \
1329    mcStream.def \
1330    mcflex.def \
1331    mcp1.def \
1332    mcp2.def \
1333    mcp3.def \
1334    mcp4.def \
1335    mcp5.def  \
1336    nameKey.def \
1337    symbolKey.def \
1338    varargs.def \
1339    wlists.def \
1341 # Implementation modules for the modula-2 to C++ translator found in mc.
1343 MC-MODS = \
1344    Indexing.mod \
1345    alists.mod \
1346    decl.mod \
1347    keyc.mod \
1348    lists.mod \
1349    mcComment.mod \
1350    mcComp.mod \
1351    mcDebug.mod \
1352    mcError.mod \
1353    mcFileName.mod \
1354    mcLexBuf.mod \
1355    mcMetaError.mod \
1356    mcOptions.mod \
1357    mcPreprocess.mod \
1358    mcPretty.mod \
1359    mcPrintf.mod \
1360    mcQuiet.mod \
1361    mcReserved.mod \
1362    mcSearch.mod \
1363    mcStack.mod \
1364    mcStream.mod \
1365    nameKey.mod \
1366    symbolKey.mod \
1367    top.mod \
1368    varargs.mod \
1369    wlists.mod \
1371 # Parser files generated by pge from .bnf files.
1373 MC-AUTO-MODS = \
1374    mcp1.mod \
1375    mcp2.mod \
1376    mcp3.mod \
1377    mcp4.mod \
1378    mcp5.mod
1380 MC-BOOT-CC = $(MC-MODS:%.mod=%.cc) $(MC-AUTO-MODS:%.mod=%.cc)
1382 # C interface files for mc.
1384 MC-INTERFACE-C = \
1385    M2LINK.c \
1386    SYSTEM.c \
1387    Selective.c \
1388    SysExceptions.c \
1389    abort.c \
1390    errno.c \
1391    libc.c \
1392    mcrts.c \
1393    termios.c \
1394    wrapc.c \
1396 # C++ interface files for mc.
1398 MC-INTERFACE-CC = \
1399    UnixArgs.cc \
1400    dtoa.cc \
1401    ldtoa.cc \
1403 BUILD-MC-BOOT-H =  $(MC-LIB-DEFS:%.def=m2/mc-boot-gen/$(SRC_PREFIX)%.h) \
1404                    $(MC-DEFS:%.def=m2/mc-boot-gen/$(SRC_PREFIX)%.h)
1406 BUILD-MC-BOOT-CC =  $(MC-LIB-MODS:%.mod=m2/mc-boot-gen/$(SRC_PREFIX)%.cc) \
1407                     $(MC-MODS:%.mod=m2/mc-boot-gen/$(SRC_PREFIX)%.cc)
1409 BUILD-MC-BOOT-AUTO-CC = $(MC-AUTO-MODS:%.mod=m2/mc-boot-gen/$(SRC_PREFIX)%.cc)
1411 BUILD-MC-BOOT-O =  $(MC-LIB-BOOT-CC:%.cc=m2/mc-boot/$(SRC_PREFIX)%.o) \
1412                    $(MC-BOOT-CC:%.cc=m2/mc-boot/$(SRC_PREFIX)%.o)
1414 BUILD-MC-INTERFACE-O = $(MC-INTERFACE-C:%.c=m2/mc-boot-ch/$(SRC_PREFIX)%.o) \
1415                        $(MC-INTERFACE-CC:%.cc=m2/mc-boot-ch/$(SRC_PREFIX)%.o)
1417 GM2GCC = -I$(srcdir)/m2 -Im2 -I$(srcdir)/m2/gm2-gcc -Im2/gm2-gcc
1419 MCINCLUDES= -I$(srcdir)/m2/mc-boot-ch
1420 LOCAL_INCLUDES = -I. -I$(srcdir)/../include -I$(srcdir)
1422 GCC_COLOR=m2/gm2-gcc/m2color.o diagnostic-color.o
1424 m2/boot-bin/mc$(exeext): $(BUILD-MC-BOOT-O) $(BUILD-MC-INTERFACE-O) \
1425         m2/mc-boot/main.o mcflex.o m2/gm2-libs-boot/RTcodummy.o
1426         +$(LINKER) $(ALL_LINKERFLAGS) $(LDFLAGS) -o $@ $(BUILD-MC-BOOT-O) \
1427          $(BUILD-MC-INTERFACE-O) m2/mc-boot/main.o \
1428          mcflex.o m2/gm2-libs-boot/RTcodummy.o -lm
1430 m2/mc-boot/$(SRC_PREFIX)%.o: m2/mc-boot/$(SRC_PREFIX)%.cc m2/gm2-libs/gm2-libs-host.h
1431         -test -d $(@D)/$(DEPDIR) || $(mkinstalldirs) $(@D)/$(DEPDIR)
1432         $(CXX) $(CM2DEP) $(CXXFLAGS) $(GM2_PICFLAGS) -g -c -I. -I$(srcdir)/m2/mc-boot-ch -I$(srcdir)/m2/mc-boot -I$(srcdir)/../include -I$(srcdir) $(INCLUDES) $< -o $@
1433         $(POSTCOMPILE)
1435 m2/mc-boot-ch/$(SRC_PREFIX)%.o: m2/mc-boot-ch/$(SRC_PREFIX)%.c m2/gm2-libs/gm2-libs-host.h
1436         -test -d $(@D)/$(DEPDIR) || $(mkinstalldirs) $(@D)/$(DEPDIR)
1437         $(CXX) $(CM2DEP) $(CXXFLAGS) $(GM2_PICFLAGS) -DHAVE_CONFIG_H -g -c -I. -Im2/gm2-libs -I$(srcdir)/../include -I$(srcdir) $(INCLUDES) -Im2/gm2-libs $< -o $@
1438         $(POSTCOMPILE)
1440 m2/mc-boot-ch/$(SRC_PREFIX)%.o: m2/mc-boot-ch/$(SRC_PREFIX)%.cc m2/gm2-libs/gm2-libs-host.h
1441         -test -d $(@D)/$(DEPDIR) || $(mkinstalldirs) $(@D)/$(DEPDIR)
1442         $(CXX) $(CM2DEP) $(CXXFLAGS) $(GM2_PICFLAGS) -DHAVE_CONFIG_H -g -c -I. -Im2/gm2-libs -I$(srcdir)/../include -I$(srcdir) $(INCLUDES) -Im2/gm2-libs $< -o $@
1443         $(POSTCOMPILE)
1445 m2/mc-boot/main.o: $(M2LINK) $(srcdir)/m2/init/mcinit
1446         -test -d $(@D)/$(DEPDIR) || $(mkinstalldirs) $(@D)/$(DEPDIR)
1447         unset CC ; $(M2LINK) -s --langc++ --exit --name m2/mc-boot/main.cc $(srcdir)/m2/init/mcinit
1448         $(CXX) $(CM2DEP) $(CXXFLAGS) $(GM2_PICFLAGS) -g -c -I. -I$(srcdir)/../include -I$(srcdir) $(INCLUDES) m2/mc-boot/main.cc -o $@
1449         $(POSTCOMPILE)
1451 mcflex.o: mcflex.c m2/gm2-libs/gm2-libs-host.h
1452         -test -d $(@D)/$(DEPDIR) || $(mkinstalldirs) $(@D)/$(DEPDIR)
1453         $(CC) $(CM2DEP) $(CFLAGS) $(GM2_PICFLAGS) -I$(srcdir)/m2/mc -g -c $< -o $@   # remember that mcReserved.h is copied into m2/mc
1454         $(POSTCOMPILE)
1456 mcflex.c: $(srcdir)/m2/mc/mc.flex
1457         flex -t $< > $@
1459 m2/gm2-libs-boot/M2RTS.o: $(srcdir)/m2/gm2-libs/M2RTS.mod $(MCDEPS) $(BUILD-BOOT-H)
1460         -test -d $(@D)/$(DEPDIR) || $(mkinstalldirs) $(@D)/$(DEPDIR)
1461         $(MC) --suppress-noreturn -o=m2/gm2-libs-boot/M2RTS.c $(srcdir)/m2/gm2-libs/M2RTS.mod
1462         $(COMPILER) $(CM2DEP) -c -DIN_GCC $(CFLAGS) $(GM2_PICFLAGS) -I$(srcdir)/m2 -Im2 -I. -Im2/gm2-libs-boot $(MCINCLUDES) $(INCLUDES) m2/gm2-libs-boot/M2RTS.c -o $@
1463         $(POSTCOMPILE)
1465 m2/gm2-libs-boot/%.o: $(srcdir)/m2/gm2-libs-boot/%.mod $(MCDEPS) $(BUILD-BOOT-H)
1466         -test -d $(@D)/$(DEPDIR) || $(mkinstalldirs) $(@D)/$(DEPDIR)
1467         $(MC) -o=m2/gm2-libs-boot/$*.c $(srcdir)/m2/gm2-libs-boot/$*.mod
1468         $(COMPILER) $(CM2DEP) -c -DIN_GCC $(CFLAGS) $(GM2_PICFLAGS) $(MCINCLUDES) m2/gm2-libs-boot/$*.c -o $@
1469         $(POSTCOMPILE)
1471 m2/gm2-libs-boot/%.o: $(srcdir)/m2/gm2-libs/%.mod $(MCDEPS) $(BUILD-BOOT-H)
1472         -test -d $(@D)/$(DEPDIR) || $(mkinstalldirs) $(@D)/$(DEPDIR)
1473         $(MC) -o=m2/gm2-libs-boot/$*.c $(srcdir)/m2/gm2-libs/$*.mod
1474         $(COMPILER) $(CM2DEP) -c -DIN_GCC $(CFLAGS) $(GM2_PICFLAGS) -I$(srcdir)/m2 -Im2 -I. -Im2/gm2-libs-boot $(MCINCLUDES) $(INCLUDES) m2/gm2-libs-boot/$*.c -o $@
1475         $(POSTCOMPILE)
1477 m2/gm2-libs-boot/$(SRC_PREFIX)%.h: $(srcdir)/m2/gm2-libs/%.def $(MCDEPS)
1478         -test -d $(@D) || $(mkinstalldirs) $(@D)
1479         $(MC) -o=$@ $(srcdir)/m2/gm2-libs/$*.def
1481 m2/gm2-libs-boot/RTcodummy.o: $(srcdir)/m2/gm2-libs-ch/RTcodummy.c m2/gm2-libs/gm2-libs-host.h
1482         -test -d $(@D)/$(DEPDIR) || $(mkinstalldirs) $(@D)/$(DEPDIR)
1483         $(CXX) $(CM2DEP) -c -DIN_GCC $(CFLAGS) $(GM2_PICFLAGS) -Im2/gm2-libs -I$(srcdir)/m2 -Im2 -I. -Im2/gm2-libs-boot $(INCLUDES) $< -o $@
1484         $(POSTCOMPILE)
1486 m2/gm2-libs-boot/RTintdummy.o: $(srcdir)/m2/gm2-libs-ch/RTintdummy.c m2/gm2-libs/gm2-libs-host.h
1487         -test -d $(@D)/$(DEPDIR) || $(mkinstalldirs) $(@D)/$(DEPDIR)
1488         $(CXX) $(CM2DEP) -c -DIN_GCC $(CFLAGS) $(GM2_PICFLAGS) -Im2/gm2-libs -I$(srcdir)/m2 -Im2 -I. -Im2/gm2-libs-boot $(INCLUDES) $< -o $@
1489         $(POSTCOMPILE)
1491 m2/gm2-libs-boot/wrapc.o: $(srcdir)/m2/gm2-libs-ch/wrapc.c m2/gm2-libs-boot/$(SRC_PREFIX)wrapc.h m2/gm2-libs/gm2-libs-host.h
1492         -test -d $(@D)/$(DEPDIR) || $(mkinstalldirs) $(@D)/$(DEPDIR)
1493         $(CXX) $(CM2DEP) -c -DHAVE_CONFIG_H $(CFLAGS) $(GM2_PICFLAGS) -Im2/gm2-libs -I$(srcdir)/m2 -Im2 -I. -Im2/gm2-libs-boot -Im2/gm2-libs $(INCLUDES) $< -o $@
1494         $(POSTCOMPILE)
1496 m2/gm2-libs-boot/UnixArgs.o: $(srcdir)/m2/gm2-libs-ch/UnixArgs.cc m2/gm2-libs-boot/$(SRC_PREFIX)UnixArgs.h m2/gm2-libs/gm2-libs-host.h
1497         -test -d $(@D)/$(DEPDIR) || $(mkinstalldirs) $(@D)/$(DEPDIR)
1498         $(CXX) $(CM2DEP) -c -DIN_GCC $(CFLAGS) $(GM2_PICFLAGS) -Im2/gm2-libs -I$(srcdir)/m2 -Im2 -I. -Im2/gm2-libs-boot $(INCLUDES) $< -o $@
1499         $(POSTCOMPILE)
1501 m2/gm2-libs-boot/choosetemp.o: m2/gm2-libs-ch/choosetemp.c m2/gm2-libiberty/Gchoosetemp.h m2/gm2-libs/gm2-libs-host.h
1502         -test -d $(@D)/$(DEPDIR) || $(mkinstalldirs) $(@D)/$(DEPDIR)
1503         $(CXX) $(CM2DEP) -c $(CFLAGS) $(GM2_PICFLAGS) -Im2/gm2-libs -I$(srcdir)/m2 -Im2 -I. -Im2/gm2-libs-boot -Im2/gm2-libiberty -I$(srcdir)/m2/gm2-libiberty/ $(INCLUDES) $< -o $@
1504         $(POSTCOMPILE)
1506 m2/gm2-libs-boot/errno.o: $(srcdir)/m2/gm2-libs-ch/errno.c m2/gm2-libs-boot/$(SRC_PREFIX)errno.h m2/gm2-libs/gm2-libs-host.h
1507         -test -d $(@D)/$(DEPDIR) || $(mkinstalldirs) $(@D)/$(DEPDIR)
1508         $(CXX) $(CM2DEP) -c $(CFLAGS) $(GM2_PICFLAGS) -Im2/gm2-libs -I$(srcdir)/m2 -Im2 -I. -Im2/gm2-libs-boot $(INCLUDES) $< -o $@
1509         $(POSTCOMPILE)
1511 m2/gm2-libs-boot/dtoa.o: $(srcdir)/m2/gm2-libs-ch/dtoa.cc m2/gm2-libs/gm2-libs-host.h
1512         -test -d $(@D)/$(DEPDIR) || $(mkinstalldirs) $(@D)/$(DEPDIR)
1513         $(CXX) $(CM2DEP) -c $(CFLAGS) $(GM2_PICFLAGS) -Im2/gm2-libs -I$(srcdir)/m2 -Im2 -I. -Im2/gm2-libs-boot $(INCLUDES) $< -o $@
1514         $(POSTCOMPILE)
1516 m2/gm2-libs-boot/ldtoa.o: $(srcdir)/m2/gm2-libs-ch/ldtoa.cc m2/gm2-libs/gm2-libs-host.h
1517         -test -d $(@D)/$(DEPDIR) || $(mkinstalldirs) $(@D)/$(DEPDIR)
1518         $(CXX) $(CM2DEP) -c $(CFLAGS) $(GM2_PICFLAGS) -Im2/gm2-libs -I$(srcdir)/m2 -Im2 -I. -Im2/gm2-libs-boot $(INCLUDES) $< -o $@
1519         $(POSTCOMPILE)
1521 m2/gm2-libs-boot/termios.o: $(srcdir)/m2/gm2-libs-ch/termios.c $(BUILD-LIBS-BOOT-H) m2/gm2-libs/gm2-libs-host.h
1522         -test -d $(@D)/$(DEPDIR) || $(mkinstalldirs) $(@D)/$(DEPDIR)
1523         $(CXX) $(CM2DEP) -c $(CFLAGS) $(GM2_PICFLAGS) -Im2/gm2-libs -I$(srcdir)/m2 -Im2 -I. -Im2/gm2-libs-boot $(INCLUDES) $< -o $@
1524         $(POSTCOMPILE)
1526 m2/gm2-libs-boot/SysExceptions.o: $(srcdir)/m2/gm2-libs-ch/SysExceptions.c \
1527                                   m2/gm2-libs-boot/$(SRC_PREFIX)SysExceptions.h m2/gm2-libs/gm2-libs-host.h
1528         -test -d $(@D)/$(DEPDIR) || $(mkinstalldirs) $(@D)/$(DEPDIR)
1529         $(CXX) $(CM2DEP) -c $(CFLAGS) $(GM2_PICFLAGS) -Im2/gm2-libs -I$(srcdir)/m2 -Im2 -I. -Im2/gm2-libs-boot $(INCLUDES) $< -o $@
1530         $(POSTCOMPILE)
1532 m2/gm2-libs-boot/SysStorage.o: $(srcdir)/m2/gm2-libs/SysStorage.mod $(MCDEPS) $(BUILD-BOOT-H)
1533         -test -d $(@D)/$(DEPDIR) || $(mkinstalldirs) $(@D)/$(DEPDIR)
1534         $(MC) -o=m2/gm2-libs-boot/SysStorage.c $(srcdir)/m2/gm2-libs/SysStorage.mod
1535         $(COMPILER) $(CM2DEP) -DIN_GCC -c $(CFLAGS) $(GM2_PICFLAGS) \
1536           -I$(srcdir)/m2 -Im2 -I. -Im2/gm2-libs-boot $(MCINCLUDES) $(INCLUDES) \
1537           m2/gm2-libs-boot/SysStorage.c -o m2/gm2-libs-boot/SysStorage.o
1538         $(POSTCOMPILE)
1540 m2/gm2-compiler-boot/M2GCCDeclare.o: $(srcdir)/m2/gm2-compiler/M2GCCDeclare.mod $(MCDEPS) $(BUILD-BOOT-H)
1541         -test -d $(@D)/$(DEPDIR) || $(mkinstalldirs) $(@D)/$(DEPDIR)
1542         $(MC) --extended-opaque -o=m2/gm2-compiler-boot/M2GCCDeclare.c $<
1543         $(COMPILER) $(CM2DEP) -c $(ALL_COMPILERFLAGS) $(ALL_CPPFLAGS) $(GM2GCC) \
1544             -I. -I$(srcdir)/../include -I$(srcdir) \
1545             -I. -Im2/gm2-libs-boot -Im2/gm2-compiler-boot \
1546             -I$(srcdir)/m2/gm2-libiberty $(MCINCLUDES) $(INCLUDES) m2/gm2-compiler-boot/M2GCCDeclare.c -o $@
1547         $(POSTCOMPILE)
1549 m2/gm2-compiler-boot/M2Error.o: $(srcdir)/m2/gm2-compiler/M2Error.mod $(MCDEPS) $(BUILD-BOOT-H)
1550         -test -d $(@D)/$(DEPDIR) || $(mkinstalldirs) $(@D)/$(DEPDIR)
1551         $(MC) --extended-opaque -o=m2/gm2-compiler-boot/M2Error.c $<
1552         $(COMPILER) $(CM2DEP) -c $(ALL_COMPILERFLAGS) $(ALL_CPPFLAGS) $(GM2GCC) \
1553             -I. -I$(srcdir)/../include -I$(srcdir) \
1554             -I. -Im2/gm2-libs-boot -Im2/gm2-compiler-boot \
1555             -I$(srcdir)/m2/gm2-libiberty $(MCINCLUDES) $(INCLUDES) m2/gm2-compiler-boot/M2Error.c -o $@
1556         $(POSTCOMPILE)
1558 m2/gm2-compiler-boot/%.o: $(srcdir)/m2/gm2-compiler/%.mod $(BUILD-BOOT-H) $(MCDEPS) $(BUILD-BOOT-H)
1559         -test -d $(@D)/$(DEPDIR) || $(mkinstalldirs) $(@D)/$(DEPDIR)
1560         $(MC) -o=m2/gm2-compiler-boot/$*.c $(srcdir)/m2/gm2-compiler/$*.mod
1561         $(COMPILER) $(CM2DEP) -c $(ALL_COMPILERFLAGS) $(ALL_CPPFLAGS) $(GM2GCC) \
1562             -I. -I$(srcdir)/../include -I$(srcdir) \
1563             -I. -Im2/gm2-libs-boot -Im2/gm2-compiler-boot -Im2/gm2-libiberty \
1564             -I$(srcdir)/m2/gm2-libiberty $(MCINCLUDES) $(INCLUDES) m2/gm2-compiler-boot/$*.c -o $@
1565         $(POSTCOMPILE)
1567 m2/gm2-compiler-boot/%.o: m2/gm2-compiler-boot/%.mod $(MCDEPS) $(BUILD-BOOT-H)
1568         -test -d $(@D)/$(DEPDIR) || $(mkinstalldirs) $(@D)/$(DEPDIR)
1569         $(MC) -o=m2/gm2-compiler-boot/$*.c m2/gm2-compiler-boot/$*.mod
1570         $(COMPILER) $(CM2DEP) -c $(ALL_COMPILERFLAGS) $(ALL_CPPFLAGS) $(GM2GCC) \
1571             -I. -I$(srcdir)/../include -I$(srcdir) \
1572             -I. -Im2/gm2-libs-boot -Im2/gm2-compiler-boot \
1573             -I$(srcdir)/m2/gm2-libiberty $(MCINCLUDES) $(INCLUDES) m2/gm2-compiler-boot/$*.c -o $@
1574         $(POSTCOMPILE)
1576 m2/gm2-compiler-boot/$(SRC_PREFIX)%.h: $(srcdir)/m2/gm2-compiler/%.def $(MCDEPS)
1577         -test -d $(@D) || $(mkinstalldirs) $(@D)
1578         $(MC) -o=$@ $(srcdir)/m2/gm2-compiler/$*.def
1580 m2/gm2-compiler-boot/m2flex.o: m2/gm2-compiler/m2flex.c $(BUILD-BOOT-H) $(TIMEVAR_H) \
1581         $(BUILD-LIBS-BOOT-H)  m2/gm2-compiler-boot/$(SRC_PREFIX)NameKey.h \
1582         $(CONFIG_H) m2/gm2config.h $(TARGET_H) $(PLUGIN_HEADERS)
1583         -test -d $(@D)/$(DEPDIR) || $(mkinstalldirs) $(@D)/$(DEPDIR)
1584         $(COMPILER) $(CM2DEP) -c -g $(ALL_COMPILERFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \
1585           $(GM2GCC) $(INCLUDES) -I$(srcdir)/m2 \
1586           -Im2 -Im2/gm2-compiler-boot -Im2/gm2-libs-boot $< -o $@
1587         $(POSTCOMPILE)
1589 m2/gm2-compiler/m2flex.c: $(srcdir)/m2/m2.flex $(TIMEVAR_H) insn-attr-common.h
1590         -test -d $(@D) || $(mkinstalldirs) $(@D)
1591         flex -t $< | sed -e 's/ malloc/ xmalloc/' | sed -e 's/ realloc/ xrealloc/' > $@
1593 m2/gm2-libiberty/$(SRC_PREFIX)%.h: $(srcdir)/m2/gm2-libiberty/%.def $(MCDEPS)
1594         -test -d $(@D) || $(mkinstalldirs) $(@D)
1595         $(MC) -o=$@ $(srcdir)/m2/gm2-libiberty/$*.def
1597 # The rules to build objects in gm2-compiler and gm2-libs directories.
1599 m2/gm2-compiler/%.o: $(srcdir)/m2/gm2-compiler/%.mod
1600         -test -d $(@D)/$(DEPDIR) || $(mkinstalldirs) $(@D)/$(DEPDIR)
1601         $(GM2_1) $(GM2_FLAGS) -c -I$(srcdir)/m2/gm2-compiler -I$(srcdir)/m2/gm2-libs -I$(srcdir)/m2/gm2-gcc -I$(srcdir)/m2/gm2-libiberty $< -o $@
1602         $(POSTCOMPILE)
1604 m2/gm2-compiler/m2flex.o: m2/gm2-compiler/m2flex.c m2/gm2-libs/gm2-libs-host.h $(TIMEVAR_H)
1605         -test -d $(@D)/$(DEPDIR) || $(mkinstalldirs) $(@D)/$(DEPDIR)
1606         $(COMPILER) $(CM2DEP) -c -g $(ALL_COMPILERFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \
1607           $(GM2GCC) -Im2/gm2-compiler-boot -Im2/gm2-libs-boot $< -o $@
1608         $(POSTCOMPILE)
1610 m2/gm2-compiler/%.o: m2/gm2-compiler/%.mod
1611         -test -d $(@D)/$(DEPDIR) || $(mkinstalldirs) $(@D)/$(DEPDIR)
1612         $(GM2_1) $(GM2_FLAGS) -c -I$(srcdir)/m2/gm2-compiler -I$(srcdir)/m2/gm2-libs -I$(srcdir)/m2/gm2-gcc -I$(srcdir)/m2/gm2-libiberty $< -o $@
1613         $(POSTCOMPILE)
1615 m2/gm2-libs-iso/%.o: $(srcdir)/m2/gm2-libs-iso/%.c m2/gm2-libs/gm2-libs-host.h
1616         -test -d $(@D)/$(DEPDIR) || $(mkinstalldirs) $(@D)/$(DEPDIR)
1617         $(CXX) $(CM2DEP) -DBUILD_GM2_LIBS_TARGET -DBUILD_GM2_LIBS -c $(CFLAGS) $(GM2_PICFLAGS) -Im2/gm2-libs -I$(srcdir)/m2 -Im2/gm2-libs-boot $(INCLUDES) $< -o $@
1618         $(POSTCOMPILE)
1620 m2/gm2-libs-iso/%.o: $(srcdir)/m2/gm2-libs-iso/%.mod
1621         -test -d $(@D)/$(DEPDIR) || $(mkinstalldirs) $(@D)/$(DEPDIR)
1622         $(GM2_1) $(GM2_ISO_FLAGS) -c -B./ -Im2/gm2-libs-iso:$(srcdir)/m2/gm2-libs-iso -I$(srcdir)/m2/gm2-libs $< -o $@
1623         $(POSTCOMPILE)
1626 # We build the cc1gm2$(exeext) from the boot stage and then proceed to build it
1627 # again using itself.
1629 m2/gm2-libs/gm2-libs-host.h:
1630         -test -d $(@D) || $(mkinstalldirs) $(@D)
1631         echo "Configuring to build libraries using native compiler" ; \
1632         NEW_SRCDIR=`${srcdir}/m2/tools-src/calcpath ../../ ${srcdir} m2/gm2-libs` ; \
1633         export NEW_SRCDIR ; \
1634         cd m2/gm2-libs ; \
1635         $(SHELL) -c '$${NEW_SRCDIR}/config-host \
1636                --srcdir=$${NEW_SRCDIR} \
1637                --target=$(target) \
1638                --program-suffix=$(exeext)'
1640 # Autoconf inserts -DCROSS_DIRECTORY_STRUCTURE if we are building a
1641 # cross compiler and the ../Makefile.in above appends this to INTERNAL_CFLAGS.
1643 m2/gm2config.h: m2/gm2config.aci
1644         grep -v define\ PACKAGE_ $< > $@
1646 m2/gm2config.aci:
1647         NEW_SRCDIR=`${srcdir}/m2/tools-src/calcpath ../ ${srcdir} m2` ; \
1648         export NEW_SRCDIR ; \
1649         cd m2 ; \
1650         if echo $(INTERNAL_CFLAGS) | grep \\-DCROSS_DIRECTORY_STRUCTURE; then \
1651             AR=$(echo $(AR_FOR_TARGET) | sed -e "s/^ //") ; \
1652             export AR ; \
1653             RANLIB=$(echo $(RANLIB_FOR_TARGET) | sed -e "s/^ //") ; \
1654             export RANLIB ; \
1655             $(SHELL) -c '$${NEW_SRCDIR}/configure --srcdir=$${NEW_SRCDIR} \
1656                 --target=$(target) --program-suffix=$(exeext) \
1657                 --includedir=$(SYSTEM_HEADER_DIR) --libdir=$(libdir) \
1658                 --libexecdir=$(libexecdir)' ; \
1659         else \
1660             $(SHELL) -c '$${NEW_SRCDIR}/configure --srcdir=$(NEW_SRCDIR) \
1661                 --target=$(target) --program-suffix=$(exeext)' ; \
1662         fi
1664 $(objdir)/m2/gm2-libs-min/SYSTEM.def: $(GM2_PROG_DEP)
1665         -test -d $(@D) || $(mkinstalldirs) $(@D)
1666         $(SHELL) $(srcdir)/m2/tools-src/makeSystem -fpim \
1667              $(srcdir)/m2/gm2-libs-min/SYSTEM.def \
1668              $(srcdir)/m2/gm2-libs-min/SYSTEM.mod \
1669              -I$(srcdir)/m2/gm2-libs-min -I$(srcdir)/m2/gm2-libs \
1670              "$(GM2_FOR_TARGET)" $@
1672 $(objdir)/m2/gm2-libs/SYSTEM.def: $(GM2_PROG_DEP)
1673         -test -d $(@D) || $(mkinstalldirs) $(@D)
1674         echo "GM2_FOR_TARGET $(GM2_FOR_TARGET)"
1675         echo "GCC_FOR_TARGET $(GCC_FOR_TARGET)"
1676         $(SHELL) $(srcdir)/m2/tools-src/makeSystem -fpim \
1677              $(srcdir)/m2/gm2-libs/SYSTEM.def \
1678              $(srcdir)/m2/gm2-libs/SYSTEM.mod \
1679              -I$(srcdir)/m2/gm2-libs \
1680              "$(GM2_FOR_TARGET)" $@
1682 $(objdir)/m2/gm2-libs-iso/SYSTEM.def: $(GM2_PROG_DEP)
1683         -test -d $(@D) || $(mkinstalldirs) $(@D)
1684         $(SHELL) $(srcdir)/m2/tools-src/makeSystem -fiso \
1685              $(srcdir)/m2/gm2-libs-iso/SYSTEM.def \
1686              $(srcdir)/m2/gm2-libs-iso/SYSTEM.mod \
1687              -I$(srcdir)/m2/gm2-libs-iso -I$(srcdir)/m2/gm2-libs \
1688              "$(GM2_FOR_TARGET)" $@
1690 $(objdir)/m2/gm2-libs-coroutines/SYSTEM.def: $(GM2_PROG_DEP)
1691         -test -d $(@D) || $(mkinstalldirs) $(@D)
1692         $(SHELL) $(srcdir)/m2/tools-src/makeSystem -fpim \
1693              $(srcdir)/m2/gm2-libs-coroutines/SYSTEM.def \
1694              $(srcdir)/m2/gm2-libs-coroutines/SYSTEM.mod \
1695              -I$(srcdir)/m2/gm2-libs-coroutines -I$(srcdir)/m2/gm2-libs-iso -I$(srcdir)/m2/gm2-libs \
1696              "$(GM2_FOR_TARGET)" $@
1698 build-compiler: $(GM2-COMP-MODS:%.mod=m2/gm2-compiler/%.o) \
1699                 $(GM2-AUTO-MODS:%.mod=m2/gm2-compiler/%.o) \
1700                 m2/gm2-compiler/m2flex.o
1702 m2/gm2-compiler/gm2.a: build-compiler gm2$(exeext)
1703         -test -d $(@D) || $(mkinstalldirs) $(@D)
1704         $(AR_FOR_TARGET) cr $@ $(GM2-COMP-MODS:%.mod=m2/gm2-compiler/%.o) \
1705                     $(GM2-AUTO-MODS:%.mod=m2/gm2-compiler/%.o)
1706         $(RANLIB) $@
1708 m2/gm2-libs/libgm2.a: build-compiler gm2$(exeext) $(BUILD-LIBS)
1709         -test -d $(@D) || $(mkinstalldirs) $(@D)
1710         $(AR) cr $@ $(GM2-LIBS-MODS:%.mod=m2/gm2-libs/%.o) \
1711                     $(GM2-LIBS-CC:%.cc=m2/gm2-libs/%.o) \
1712                     $(GM2-LIBS-C:%.c=m2/gm2-libs/%.o)
1713         $(RANLIB) $@
1715 m2/gm2-libs/%.o: $(srcdir)/m2/gm2-libs/%.mod $(MCDEPS) $(BUILD-BOOT-H)
1716         -test -d $(@D)/$(DEPDIR) || $(mkinstalldirs) $(@D)/$(DEPDIR)
1717         $(GM2_1) -c $(GM2_FLAGS) -Im2/gm2-libs -I$(srcdir)/m2/gm2-libs -I$(srcdir)/m2/gm2-libs-iso $< -o $@
1718         $(POSTCOMPILE)
1720 m2/gm2-libs/%.o: $(srcdir)/m2/gm2-libs-ch/%.c m2/gm2-libs/gm2-libs-host.h
1721         -test -d $(@D)/$(DEPDIR) || $(mkinstalldirs) $(@D)/$(DEPDIR)
1722         $(CXX) $(CM2DEP) -DBUILD_GM2_LIBS -c $(CFLAGS) $(GM2_PICFLAGS) -Im2/gm2-libs -I$(srcdir)/m2 -Im2/gm2-libs-boot $(INCLUDES) $< -o $@
1723         $(POSTCOMPILE)
1725 m2/gm2-libs/%.o: $(srcdir)/m2/gm2-libs-ch/%.cc m2/gm2-libs/gm2-libs-host.h
1726         -test -d $(@D)/$(DEPDIR) || $(mkinstalldirs) $(@D)/$(DEPDIR)
1727         $(CXX) $(CM2DEP) -c $(CFLAGS) $(GM2_PICFLAGS) -Im2/gm2-libs -I$(srcdir)/m2 -Im2 -I. -Im2/gm2-libs-boot $(INCLUDES) $< -o $@
1728         $(POSTCOMPILE)
1730 m2/gm2-libs/choosetemp.o: m2/gm2-libs-ch/choosetemp.c m2/gm2-libiberty/Gchoosetemp.h m2/gm2-libs/gm2-libs-host.h
1731         -test -d $(@D)/$(DEPDIR) || $(mkinstalldirs) $(@D)/$(DEPDIR)
1732         $(CXX) $(CM2DEP) -c $(CFLAGS) $(GM2_PICFLAGS) -Im2/gm2-libs -I$(srcdir)/m2 -Im2 -I. -Im2/gm2-libs-boot -Im2/gm2-libiberty -I$(srcdir)/m2/gm2-libiberty/ $(INCLUDES) $< -o $@
1733         $(POSTCOMPILE)
1735 m2/gm2-libs-boot/libgm2.a: m2/boot-bin/mc$(exeext) $(BUILD-LIBS-BOOT)
1736         -test -d $(@D) || $(mkinstalldirs) $(@D)
1737         $(AR) cr $@ $(GM2-LIBS-BOOT-MODS:%.mod=m2/gm2-libs-boot/%.o) \
1738                     $(GM2-LIBS-BOOT-CC:%.cc=m2/gm2-libs-boot/%.o) \
1739                     $(GM2-LIBS-BOOT-C:%.c=m2/gm2-libs-boot/%.o)
1740         $(RANLIB) $@
1742 m2/gm2-compiler-boot/gm2.a: m2/boot-bin/mc$(exeext) m2/boot-bin/mklink$(exeext) \
1743                          $(BUILD-LIBS-BOOT) $(BUILD-COMPILER-BOOT)
1744         -test -d $(@D) || $(mkinstalldirs) $(@D)
1745         $(AR) cr $@ $(GM2-COMP-BOOT-MODS:%.mod=m2/gm2-compiler-boot/%.o) \
1746                     $(GM2-AUTO-MODS:%.mod=m2/gm2-compiler-boot/%.o)
1747         $(RANLIB) $@
1749 m2/gm2-compiler-boot/gm2.a: m2/boot-bin/mc$(exeext)
1751 m2/boot-bin/mklink$(exeext): $(srcdir)/m2/tools-src/mklink.c
1752         -test -d $(@D)/$(DEPDIR) || $(mkinstalldirs) $(@D)/$(DEPDIR)
1753         $(CXX) $(CM2DEP) $(CFLAGS) $(LDFLAGS) -I$(srcdir)/m2 -Im2/gm2-libs-boot -Im2/gm2-compiler-boot -I$(srcdir)/m2/mc-boot-ch $(INCLUDES) $< -o $@
1754         $(POSTCOMPILE)
1756 m2/gm2-compiler-boot/$(SRC_PREFIX)%.h: $(srcdir)/m2/gm2-compiler-boot/%.def $(MCDEPS)
1757         -test -d $(@D) || $(mkinstalldirs) $(@D)
1758         $(MC) --quiet -o=$@ $(srcdir)/m2/gm2-compiler-boot/$*.def
1760 m2/gm2-compiler/%.mod: $(srcdir)/m2/gm2-compiler/%.bnf $(PGE)
1761         -test -d $(@D) || $(mkinstalldirs) $(@D)
1762         $(PGE) -k -l $< -o $@
1764 m2/gm2-compiler-boot/%.mod: $(srcdir)/m2/gm2-compiler/%.bnf $(PGE)
1765         -test -d $(@D) || $(mkinstalldirs) $(@D)
1766         $(PGE) -k -l $< -o $@
1768 check-m2: check-gm2
1769 check_m2: check-gm2
1770 check_gm2: check-gm2
1771 check-modula2: check-gm2
1772 check_modula2: check-gm2
1773 check-modula-2: check-gm2
1774 check_modula-2: check-gm2
1775 check_modula_2: check-gm2
1777 lang_checks += check-gm2
1778 lang_checks_parallelized += check-gm2
1779 # For description see the check_$lang_parallelize comment in gcc/Makefile.in.
1780 check_gm2_parallelize = 10000
1782 check-gm2-local: $(GM2TESTSUITEDIR)/site.exp
1783         -(rootme=`${PWD_COMMAND}`; export rootme; \
1784         srcdir=`cd ${srcdir}; ${PWD_COMMAND}` ; export srcdir ; \
1785         cd $(TESTSUITEDIR); \
1786         EXPECT=${EXPECT} ; export EXPECT ; \
1787         if [ -f $${rootme}/../expect/expect ] ; then  \
1788            TCL_LIBRARY=`cd .. ; cd ${srcdir}/../tcl/library ; ${PWD_COMMAND}` ; \
1789             export TCL_LIBRARY ; fi ; \
1790         $(RUNTEST) --tool gm2 --directory testsuite/m2/pim/pass)
1792 BUILD-PGE-O = \
1793    m2/pge-boot/GArgs.o \
1794    m2/pge-boot/GASCII.o \
1795    m2/pge-boot/GAssertion.o \
1796    m2/pge-boot/Gbnflex.o \
1797    m2/pge-boot/GDebug.o \
1798    m2/pge-boot/GDynamicStrings.o \
1799    m2/pge-boot/GFIO.o \
1800    m2/pge-boot/GIndexing.o \
1801    m2/pge-boot/GIO.o \
1802    m2/pge-boot/GLists.o \
1803    m2/pge-boot/GM2Dependent.o \
1804    m2/pge-boot/GM2EXCEPTION.o \
1805    m2/pge-boot/GM2RTS.o \
1806    m2/pge-boot/GNameKey.o \
1807    m2/pge-boot/GNumberIO.o \
1808    m2/pge-boot/GOutput.o \
1809    m2/pge-boot/Gpge.o \
1810    m2/pge-boot/GPushBackInput.o \
1811    m2/pge-boot/GRTExceptions.o \
1812    m2/pge-boot/GSFIO.o \
1813    m2/pge-boot/GStdIO.o \
1814    m2/pge-boot/GStorage.o \
1815    m2/pge-boot/GStrCase.o \
1816    m2/pge-boot/GStrIO.o \
1817    m2/pge-boot/GStrLib.o \
1818    m2/pge-boot/GSymbolKey.o \
1819    m2/pge-boot/GSysStorage.o \
1820    m2/pge-boot/Glibc.o \
1821    m2/pge-boot/Gwrapc.o \
1822    m2/pge-boot/Gerrno.o \
1823    m2/pge-boot/GUnixArgs.o \
1824    m2/pge-boot/Gtermios.o \
1825    m2/pge-boot/GSysExceptions.o \
1826    m2/pge-boot/Gabort.o \
1827    m2/pge-boot/Gmcrts.o \
1828    m2/pge-boot/main.o
1830 ifeq ($(M2_MAINTAINER),yes)
1831 include m2/Make-maintainer
1832 else
1833 m2/pge-boot/%.o: m2/pge-boot/%.c m2/gm2-libs/gm2-libs-host.h m2/gm2config.h
1834         -test -d $(@D)/$(DEPDIR) || $(mkinstalldirs) $(@D)/$(DEPDIR)
1835         $(CXX) $(CM2DEP) $(CFLAGS) $(GM2_PICFLAGS) $(INCLUDES) -I$(srcdir)/m2/pge-boot -Im2/gm2-libs -g -c $< -o $@
1836         $(POSTCOMPILE)
1838 m2/pge-boot/%.o: m2/pge-boot/%.cc m2/gm2-libs/gm2-libs-host.h m2/gm2config.h
1839         -test -d $(@D)/$(DEPDIR) || $(mkinstalldirs) $(@D)/$(DEPDIR)
1840         $(CXX) $(CM2DEP) $(CXXFLAGS) $(GM2_PICFLAGS) $(INCLUDES) -I$(srcdir)/m2/pge-boot -Im2/gm2-libs -g -c $< -o $@
1841         $(POSTCOMPILE)
1843 $(PGE): $(BUILD-PGE-O)
1844         +$(LINKER) $(ALL_LINKERFLAGS) $(LDFLAGS) -o $@ $(BUILD-PGE-O) -lm
1846 endif