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)
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)'`
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
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)))
46 PLUGINLDFLAGS = -Wl,-undefined,dynamic_lookup
47 PLUGINLDFLAGS += -Wl,-install_name,m2rte$(soext)
48 PLUGINLDFLAGS += -nodefaultlibs
52 TEXISRC = $(srcdir)/doc/gm2.texi \
58 m2/gpl_v3_without_node.texi
60 RSTSRC = $(srcdir)/doc/gm2.texi \
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)
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
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
107 ifeq ($(enable_plugin),yes)
108 M2RTE_PLUGIN_SO=plugin/m2rte$(soext)
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) \
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) \
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)
143 m2.all.cross: gm2-cross$(exeext) $(M2RTE_PLUGIN_SO)
145 m2.start.encap: gm2$(exeext) $(M2RTE_PLUGIN_SO)
153 m2.install-man: $(DESTDIR)$(man1dir)/$(GM2_INSTALL_NAME)$(man1ext)
155 $(DESTDIR)$(man1dir)/$(GM2_INSTALL_NAME)$(man1ext): doc/m2.1 installdirs
157 -$(INSTALL_DATA) $< $@
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)
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"; \
177 doc/m2.ps: doc/m2.dvi
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)
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"; \
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 ; \
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)
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)
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"; \
235 echo " $(INSTALL_DATA) '$$d$$p' '$(DESTDIR)$(htmldir)/$$f'"; \
236 $(INSTALL_DATA) "$$d$$p" "$(DESTDIR)$(htmldir)/$$f"; \
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
253 cp $(srcdir)/m2/target-independent/m2/gm2-libs.texi $(objdir)/m2/gm2-libs.texi
255 $(STAMP) gm2-libs.texi-check
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
267 cp $(srcdir)/m2/target-independent/m2/gm2-libs.rst $(objdir)/m2/gm2-libs.rst
269 $(STAMP) gm2-libs.rst-check
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
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
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
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
298 $(STAMP) SYSTEM-pim-texi-check
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
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
311 $(STAMP) SYSTEM-pim-rst-check
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
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
324 $(STAMP) SYSTEM-iso.texi-check
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
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
337 $(STAMP) SYSTEM-iso.rst-check
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
348 Builtins.texi-check: m2/gm2-libs/Builtins.def
349 cp $(srcdir)/m2/target-independent/m2/Builtins.texi $(objdir)/m2/Builtins.texi
351 $(STAMP) Builtins.texi-check
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
361 Builtins.rst-check: m2/gm2-libs/Builtins.def
362 cp $(srcdir)/m2/target-independent/m2/Builtins.rst $(objdir)/m2/Builtins.rst
364 $(STAMP) Builtins.rst-check
366 m2/gpl_v3_without_node.texi: doc/include/gpl_v3.texi
367 grep -v "^@node" $< > $@
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
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 \
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) ); \
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; \
410 echo "cannot find $$tool" ; \
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`; \
423 chmod a-x $(DESTDIR)$(infodir)/m2.info*; \
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; \
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; \
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 $@
469 plugin/m2rte$(soext):
475 # A lot of the ancillary files are deleted by the main makefile.
476 # We just have to delete files specific to us.
483 -rm -f m2/gm2-libs/config.*
484 -rm m2/gm2-libs/gm2-libs-host.h m2/gm2config.h
493 # Rules to build the compiler, pge and mc.
495 # MC_COPYRIGHT=--gpl-header --project="GNU Modula-2"
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 \
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)
520 # GM2_DEBUG_STRMEM=-fcpp
522 GM2_FLAGS=-fsoft-check-all \
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) \
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 \
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)
551 # Language-specific object files for the gm2 compiler.
553 GM2_C_OBJS = m2/gm2-lang.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 \
570 m2/gm2-gcc/m2misc.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 \
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)
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 \
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) \
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 \
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)
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) \
632 -DLIBSUBDIR=\"$(libsubdir)\" \
633 -DPREFIX=\"$(prefix)\" \
634 -c $(srcdir)/m2/gm2-gcc/m2configure.cc $(OUTPUT_OPTION)
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)
643 m2/gm2-gcc/rtegraph.o: $(srcdir)/m2/gm2-gcc/rtegraph.cc $(GCC_HEADER_DEPENDENCIES_FOR_M2) \
645 -test -d $(@D)/$(DEPDIR) || $(mkinstalldirs) $(@D)/$(DEPDIR)
646 $(COMPILER) $(CM2DEP) -c -g $(GM2GCC) $(ALL_COMPILERFLAGS) \
647 $(ALL_CPPFLAGS) $(INCLUDES) $< $(OUTPUT_OPTION)
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)
656 $(PYTHON) $(srcdir)/m2/tools-src/checkmeta.py -s $(srcdir)/m2/gm2-compiler
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 = \
709 # Core library implementation modules found in gm2-libs.
711 GM2-LIBS-BOOT-MODS = \
743 # Hand translated C files and C files for definition module for "C" modules
744 # found in gm2-libs-ch.
754 # C++ implemented modules found in gm2-libs-ch.
761 # Definition modules for the front end found in gm2-compiler.
763 GM2-COMP-BOOT-DEFS = \
781 M2DriverOptions.def \
829 SymbolConversion.def \
835 # Implementation modules for the front end found in gm2-compiler.
837 GM2-COMP-BOOT-MODS = \
856 M2DriverOptions.mod \
898 SymbolConversion.mod \
904 # The interface between the modula-2 front end and gimple/trees found in directory gm2-gcc.
925 # The following lists define the source files used to build gm2 using Modula-2
928 # cc1gm2$(exeext) uses these definition modules from the core libraries.
980 # cc1gm2$(exeext) uses these implementation modules from the core libraries.
1025 # cc1gm2$(exeext) uses these C modules from the core libraries.
1037 # cc1gm2$(exeext) uses these C++ modules from the core libraries.
1044 # cc1gm2$(exeext) uses these definition modules found in the gm2-compiler directory.
1064 M2DriverOptions.def \
1090 M2StackAddress.def \
1110 SymbolConversion.def \
1115 # cc1gm2$(exeext) uses these implementation modules found in the gm2-compiler directory.
1135 M2DriverOptions.mod \
1161 M2StackAddress.mod \
1176 SymbolConversion.mod \
1181 # Implementation modules created by the parser generator pge from .bnf files.
1191 # LIBIBERTY interface definition modules
1193 GM2-LIBIBERTY-DEFS = \
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.
1232 DynamicStrings.def \
1270 # Core library implementation modules used by the modula-2 to C++ translator.
1279 DynamicStrings.mod \
1304 MC-LIB-BOOT-CC = $(MC-LIB-MODS:%.mod=%.cc)
1306 # Definition modules for the modula-2 to C++ translator found in mc.
1341 # Implementation modules for the modula-2 to C++ translator found in mc.
1371 # Parser files generated by pge from .bnf files.
1380 MC-BOOT-CC = $(MC-MODS:%.mod=%.cc) $(MC-AUTO-MODS:%.mod=%.cc)
1382 # C interface files for mc.
1396 # C++ interface files for mc.
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 $@
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 $@
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 $@
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 $@
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
1456 mcflex.c: $(srcdir)/m2/mc/mc.flex
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 $@
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 $@
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 $@
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 $@
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 $@
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 $@
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 $@
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 $@
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 $@
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 $@
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 $@
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 $@
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 $@
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
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 $@
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 $@
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 $@
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 $@
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 $@
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 $@
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 $@
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 $@
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 $@
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 $@
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 ; \
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_ $< > $@
1647 NEW_SRCDIR=`${srcdir}/m2/tools-src/calcpath ../ ${srcdir} m2` ; \
1648 export NEW_SRCDIR ; \
1650 if echo $(INTERNAL_CFLAGS) | grep \\-DCROSS_DIRECTORY_STRUCTURE; then \
1651 AR=$(echo $(AR_FOR_TARGET) | sed -e "s/^ //") ; \
1653 RANLIB=$(echo $(RANLIB_FOR_TARGET) | sed -e "s/^ //") ; \
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)' ; \
1660 $(SHELL) -c '$${NEW_SRCDIR}/configure --srcdir=$(NEW_SRCDIR) \
1661 --target=$(target) --program-suffix=$(exeext)' ; \
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)
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)
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 $@
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 $@
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 $@
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 $@
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)
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)
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 $@
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 $@
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)
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 \
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 \
1830 ifeq ($(M2_MAINTAINER),yes)
1831 include m2/Make-maintainer
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 $@
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 $@
1843 $(PGE): $(BUILD-PGE-O)
1844 +$(LINKER) $(ALL_LINKERFLAGS) $(LDFLAGS) -o $@ $(BUILD-PGE-O) -lm