Message ID | E1ohukQ-00Blzp-Rc@lancelot |
---|---|
State | New |
Headers | show |
Series | 2/19 modula2 front end: Make-lang.in | expand |
On Mon, Oct 10, 2022 at 5:34 PM Gaius Mulley via Gcc-patches <gcc-patches@gcc.gnu.org> wrote: > > > > The makefile fragment for modula2 which builds the gm2 driver and cc1gm2. > > > ------8<----------8<----------8<----------8<----------8<----------8<---- > diff -ruw /dev/null gcc-git-devel-modula2/gcc/m2/Make-lang.in > --- /dev/null 2022-08-24 16:22:16.888000070 +0100 > +++ gcc-git-devel-modula2/gcc/m2/Make-lang.in 2022-10-07 20:21:18.634096743 +0100 > @@ -0,0 +1,1556 @@ > +# Top level -*- makefile -*- fragment for GNU M2. > + > +# Copyright (C) 2000-2022 Free Software Foundation, Inc. > + > +#This file is part of GCC. > + > +#GCC is free software; you can redistribute it and/or modify > +#it under the terms of the GNU General Public License as published by > +#the Free Software Foundation; either version 3, or (at your option) > +#any later version. > + > +#GCC is distributed in the hope that it will be useful, > +#but WITHOUT ANY WARRANTY; without even the implied warranty of > +#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > +#GNU General Public License for more details. > + > +#You should have received a copy of the GNU General Public License > +#along with GCC; see the file COPYING3. If not see > +#<http://www.gnu.org/licenses/>. > + > +GM2_MAKE_DEBUG= > + > +# Actual names to use when installing a native compiler. > +GM2_INSTALL_NAME = $(shell echo gm2|sed '$(program_transform_name)') > +GM2_TARGET_INSTALL_NAME = $(target_noncanonical)-$(shell echo gm2|sed '$(program_transform_name)') > + > +# Actual names to use when installing a cross-compiler. > +GM2_CROSS_NAME = `echo gm2|sed '$(program_transform_cross_name)'` > + > +M2_MAINTAINER = no > + > +CPP_GM2=-fpermissive -DIN_GCC -g Do we really need -fpermissive here? > +GM2_1 = ./gm2 -B./stage1/m2 -g -fm2-g > + > +GM2_FOR_TARGET = $(STAGE_CC_WRAPPER) ./gm2 -B./ -B$(build_tooldir)/bin/ -L$(objdir)/../ld $(TFLAGS) > + > +TEXISRC = $(objdir)/m2/images/gnu.eps \ > + $(srcdir)/doc/gm2.texi \ > + m2/gm2-libs.texi \ > + m2/gm2-ebnf.texi \ > + m2/SYSTEM-pim.texi \ > + m2/SYSTEM-iso.texi \ > + m2/Builtins.texi > + That will need Sphinx treatment > +# Define the names for selecting modula-2 in LANGUAGES. > +m2 modula-2 modula2: gm2$(exeext) xgcc$(exeext) cc1gm2$(exeext) \ > + $(GCC_PASSES) $(GCC_PARTS) > +m2.serial = cc1gm2$(exeext) > + > +# Tell GNU make to ignore these if they exist. > +.PHONY: m2 modula-2 modula2 > + > +GM2_PROG_DEP=gm2$(exeext) xgcc$(exeext) cc1gm2$(exeext) > + > +include m2/config-make > +LIBSTDCXX=../$(TARGET_SUBDIR)/libstdc++-v3/src/.libs/libstdc++.a > + > +PGE=m2/pge$(exeext) > + > +SRC_PREFIX=G > + > +m2/gm2spec.o: $(srcdir)/m2/gm2spec.cc $(SYSTEM_H) $(GCC_H) $(CONFIG_H) \ > + m2/gm2config.h $(TARGET_H) $(PLUGIN_HEADERS) \ > + $(generated_files) $(C_TREE_H) insn-attr-common.h > + (SHLIB_LINK='$(SHLIB_LINK)' \ > + SHLIB_MULTILIB='$(SHLIB_MULTILIB)'; \ > + $(COMPILER) $(ALL_COMPILERFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \ > + $(DRIVER_DEFINES) \ > + -DLIBSUBDIR=\"$(libsubdir)\" \ > + -DPREFIX=\"$(prefix)\" \ > + -c $(srcdir)/m2/gm2spec.cc $(OUTPUT_OPTION)) > + > +# Create the compiler driver for M2. > +CFLAGS-m2/m2/gm2spec.o += $(DRIVER_DEFINES) > + > +GM2_OBJS = $(GCC_OBJS) prefix.o intl.o m2/gm2spec.o > + > +# Create the compiler driver for gm2. > +gm2$(exeext): $(GM2_OBJS) $(EXTRA_GCC_OBJS) libcommon-target.a $(LIBDEPS) \ > + m2/gm2config.h > + +$(LINKER) $(ALL_LINKERFLAGS) $(LDFLAGS) -o $@ \ > + $(GM2_OBJS) $(EXTRA_GCC_OBJS) libcommon-target.a \ > + $(EXTRA_GCC_LIBS) $(LIBS) > + > +# Create a version of the gm2 driver which calls the cross-compiler. > +gm2-cross$(exeext): gm2$(exeext) > + -rm -f gm2-cross$(exeext) > + cp gm2$(exeext) gm2-cross$(exeext) > + > +po-generated: > + > +# Build hooks: > + > +m2.all.cross: gm2-cross$(exeext) plugin/m2rte$(exeext).so > + > +m2.start.encap: gm2$(exeext) plugin/m2rte$(exeext).so > +m2.rest.encap: > + > +m2.info: doc/m2.info > + > +m2.man: doc/m2.1 > + > +m2.install-man: $(DESTDIR)$(man1dir)/$(GM2_INSTALL_NAME)$(man1ext) > + > +$(DESTDIR)$(man1dir)/$(GM2_INSTALL_NAME)$(man1ext): doc/m2.1 installdirs > + -rm -f $@ > + -$(INSTALL_DATA) $< $@ > + -chmod a-x $@ > + > +m2.dvi: $(TEXISRC) > + $(TEXI2DVI) -I $(objdir)/m2 -I $(srcdir)/doc/include $(srcdir)/doc/gm2.texi -o $@ > + > +m2.ps: m2.dvi > + dvips -o $@ $< > + > +m2.pdf: m2.ps > + gs -q -dBATCH -dNOPAUSE -sDEVICE=pdfwrite -sOutputFile=$@ $< > + > +.INTERMEDIATE: gm2.pod > + > +m2.pod: doc/gm2.texi $(TEXISRC) > + -$(TEXI2POD) -I $(objdir)/m2 -D m2 < $< > $@ Likewise for the doc parts above and below > +doc/m2.info: $(TEXISRC) > + if test "x$(BUILD_INFO)" = xinfo; then \ > + rm -f doc/m2.info*; \ > + $(MAKEINFO) --no-headers -I$(objdir)/m2 -I$(srcdir)/doc/include \ > + -o $@ $(srcdir)/doc/gm2.texi ; \ > + else true; fi > + > +$(objdir)/m2/images/gnu.eps: $(srcdir)/m2/images/gnupng > + test -d m2/images || mkdir -p m2/images > + if [ -f $(srcdir)/m2/images/gnu.eps ] ; then \ > + cp $(srcdir)/m2/images/gnu.eps $@ ; \ > + else \ > + pngtopnm $< | pnmtops -noturn > $@ ; \ > + fi > + > +m2/gm2-libs.texi: gm2-libs.texi-check; @true > + > +gm2-libs.texi-check: m2/SYSTEM-pim.texi m2/SYSTEM-iso.texi m2/Builtins.texi \ > + $(objdir)/m2/gm2-libs-coroutines/SYSTEM.def m2/gm2-ebnf.texi > + python3 $(srcdir)/m2/tools-src/def2texi.py -uLibraries -s$(srcdir)/m2 -b$(objdir)/m2 > $(objdir)/m2/gm2-libs.texi > + $(STAMP) gm2-libs.texi-check > + > +m2/gm2-ebnf.texi: gm2-ebnf.texi-check; @true > + > +gm2-ebnf.texi-check: $(PGE) $(srcdir)/m2/gm2-compiler/P0SyntaxCheck.bnf > + $(PGE) -c -p -t -f $(srcdir)/m2/gm2-compiler/P0SyntaxCheck.bnf > m2/gm2-ebnf.texi > + $(STAMP) gm2-ebnf.texi-check > + > +m2/SYSTEM-pim.texi: SYSTEM-pim-texi-check; @true > + > +SYSTEM-pim-texi-check: $(objdir)/m2/gm2-libs/SYSTEM.def > + python3 $(srcdir)/m2/tools-src/def2texi.py -b$(objdir)/m2 -f$(objdir)/m2/gm2-libs/SYSTEM.def > $(objdir)/m2/SYSTEM-pim.texi > + $(STAMP) SYSTEM-pim-texi-check > + > +m2/SYSTEM-iso.texi: SYSTEM-iso.texi-check; @true > + > +SYSTEM-iso.texi-check: $(objdir)/m2/gm2-libs-iso/SYSTEM.def > + python3 $(srcdir)/m2/tools-src/def2texi.py -b$(objdir)/m2 -f$(objdir)/m2/gm2-libs-iso/SYSTEM.def > $(objdir)/m2/SYSTEM-iso.texi > + $(STAMP) SYSTEM-iso.texi-check > + > +m2/Builtins.texi: Builtins.texi-check; @true > + > +Builtins.texi-check: m2/gm2-libs/Builtins.def > + python3 $(srcdir)/m2/tools-src/def2texi.py -b./ -f$(srcdir)/m2/gm2-libs/Builtins.def > $(objdir)/m2/Builtins.texi > + $(STAMP) Builtins.texi-check > + > +$(objdir)/m2/gm2-compiler-boot: > + test -d $@ || mkdir $@ > + > +$(objdir)/m2/gm2-libs-boot: > + test -d $@ || mkdir $@ > + > +$(objdir)/m2/gm2-libiberty: > + test -d $@ || mkdir $@ > + > +$(objdir)/m2/gm2-gcc: > + test -d $@ || mkdir $@ > + > +$(objdir)/m2/gm2-compiler: > + test -d $@ || mkdir $@ > + > +$(objdir)/m2/gm2-libs: > + test -d $@ || mkdir $@ > + > +$(objdir)/m2/gm2-libs-iso: > + test -d $@ || mkdir $@ > + > +$(objdir)/m2/gm2-libs-min: > + test -d $@ || mkdir $@ > + > +$(objdir)/m2/gm2-compiler-paranoid: > + test -d $@ || mkdir $@ > + > +$(objdir)/m2/gm2-libs-paranoid: > + test -d $@ || mkdir $@ > + > +$(objdir)/m2/gm2-compiler-verify: > + test -d $@ || mkdir $@ > + > +$(objdir)/m2/boot-bin: > + test -d $@ || mkdir $@ > + > +$(objdir)/m2/gm2-libs-pim: > + test -d $@ || mkdir $@ > + > +$(objdir)/m2/gm2-libs-coroutines: > + test -d $@ || mkdir $@ > + > +stage1/m2: > + -test -d $@ || mkdir -p stage1/m2 > + > +stage2/m2: > + -test -d $@ || mkdir -p stage2/m2 > + > +stage3/m2: > + -test -d $@ || mkdir -p stage3/m2 > + > +stage4/m2: > + -test -d $@ || mkdir -p stage4/m2 > + > +# No gm2-specific selftests > +selftest-m2: > + > +# Install hooks: > +# cc1gm2 is installed elsewhere as part of $(COMPILERS). > +# $(COMPILERS) is defined in `config-lang.in' > + > +m2.install-common: installdirs > + -rm -f $(DESTDIR)$(bindir)/$(GM2_INSTALL_NAME)$(exeext) > + $(INSTALL_PROGRAM) gm2$(exeext) $(DESTDIR)$(bindir)/$(GM2_INSTALL_NAME)$(exeext) > + -if test -f cc1gm2$(exeext); then \ > + if test -f gm2-cross$(exeext); then \ > + :; \ > + else \ > + rm -f $(DESTDIR)$(bindir)/$(GM2_TARGET_INSTALL_NAME)$(exeext); \ > + ( cd $(DESTDIR)$(bindir) && \ > + $(LN) $(GM2_INSTALL_NAME)$(exeext) $(GM2_TARGET_INSTALL_NAME)$(exeext) ); \ > + fi; \ > + fi > + -for tool in cc1gm2$(exeext); do \ > + if [ -f $$tool ]; then \ > + rm -f $(DESTDIR)$(libexecsubdir)/$$tool; \ > + $(INSTALL_PROGRAM) $$tool $(DESTDIR)$(libexecsubdir)/$$tool; \ > + chmod a+x $(DESTDIR)$(libexecsubdir)/$$tool; \ > + else \ > + echo "cannot find $$tool" ; \ > + fi ; \ > + done > + > +m2.install-info: installdirs > + if [ -d gm2$(exeext) ] ; then \ > + if [ -f $(objdir)/doc/gm2.info ]; then \ > + rm -f $(DESTDIR)$(infodir)/gm2.info*; \ > + for f in $(objdir)/doc/gm2.info*; do \ > + realfile=`echo $$f | sed -e 's|.*/\([^/]*\)$$|\1|'`; \ > + rm -f $(DESTDIR)$(infodir)/`basename $$realfile`; \ > + $(INSTALL_DATA) $$f $(DESTDIR)$(infodir)/`basename $$realfile`; \ > + done; \ > + chmod a-x $(DESTDIR)$(infodir)/gm2.info*; \ > + else true; fi; \ > + else true; fi > + -if [ -f gm2$(exeext) ] && [ -f $(DESTDIR)$(infodir)/gm2.info ]; then \ > + if $(SHELL) -c 'install-info --version' >/dev/null 2>&1; then \ > + install-info --dir-file=$(infodir)/dir $(DESTDIR)$(infodir)/gm2.info; \ > + else true; fi; \ > + else true; fi > + > +m2.install-normal: m2.install-common m2.install-info m2.install-man > + > +# This target will install GM2 into an existing GCC installation, > +# without overwriting existing files. > +# The semicolon is to prevent the install.sh -> install default rule > +# from doing anything. Having it run true helps avoid problems and > +# noise from versions of make which don't like to have null commands. > +m2.install: m2.install-normal; @true > + > +gm2.install-with-gcc: $(INSTALL_HEADERS) gm2.install $(INSTALL_LIBGCC) > + for file in $(GCC_PASSES); do \ > + if [ x"$$file" != x"xgcc$(exeext)" ]; then \ > + rm -f $(DESTDIR)$(libsubdir)/$$file; \ > + $(INSTALL_PROGRAM) $$file $(DESTDIR)$(libsubdir)/$$file || exit 1; \ > + fi; \ > + done; exit 0 > + > +m2.uninstall: > + -rm -rf $(bindir)/$(GM2_INSTALL_NAME) > + -rm -rf $(bindir)/$(GM2_CROSS_NAME) > + > +m2.install-plugin: installdirs > + $(mkinstalldirs) $(DESTDIR)$(plugin_resourcesdir) > + $(INSTALL_PROGRAM) plugin/m2rte$(exeext).so $(DESTDIR)$(plugin_resourcesdir)/m2rte$(exeext).so > + chmod a+x $(DESTDIR)$(plugin_resourcesdir)/m2rte$(exeext).so > + > +plugin/m2rte$(exeext).so: $(srcdir)/m2/plugin/m2rte.cc $(GCC_HEADER_DEPENDENCIES_FOR_M2) \ > + insn-attr-common.h insn-flags.h $(generated_files) > + test -d plugin || mkdir plugin > + $(PLUGINCC) $(PLUGINCFLAGS) -fno-rtti -I. -I$(srcdir) -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 > + $(PLUGINCC) $(PLUGINCFLAGS) $(PLUGINLIBS) -fno-rtti plugin/m2rte.o -shared -o $@ > + > + > +# Clean hooks: > +# A lot of the ancillary files are deleted by the main makefile. > +# We just have to delete files specific to us. > + > +m2.mostlyclean: > + -rm -f m2/*.o > + > +m2.clean: > + -rm -f m2/*.o > + -rm -f m2/gm2-libs/config.* > + -rm m2/gm2-libs/gm2-libs-host.h m2/gm2config.h > + > +m2.extraclean: > +m2.realclean: > + > +# Stage hooks: > + > +m2.stage1: stage1-start > + -mv m2/*$(objext) stage1/m2 > + > +m2.stage2: stage2-start > + -mv m2/*$(objext) stage2/m2 > + > +m2.stage3: stage3-start > + -mv m2/*$(objext) stage3/m2 > + > +m2.stage4: stage4-start > + -mv m2/*$(objext) stage4/m2 > + > +quit: force > + echo "calling exit" > + exit 1 > + > +# Rules to build the compiler, pge and mc. > + > +# MC_COPYRIGHT=--gpl-header --project="GNU Modula-2" > +MC_COPYRIGHT= > + > +MC_ARGS= --olang=c++ \ > + --h-file-prefix=$(SRC_PREFIX) \ > + -I$(srcdir)/m2/gm2-libs \ > + -I$(srcdir)/m2/gm2-compiler \ > + -I$(srcdir)/m2/gm2-libiberty \ > + -I$(srcdir)/m2/gm2-gcc \ > + --quiet \ > + $(MC_COPYRIGHT) \ > + --gcc-config-system > + > +MCDEPS=m2/boot-bin/mc$(exeext) > + > +MC=m2/boot-bin/mc$(exeext) $(MC_ARGS) > + > +MC_LIBS=m2/mc-boot-ch/Glibc.o m2/mc-boot-ch/Gmcrts.o > + > +M2LINK=m2/boot-bin/mklink$(exeext) > +GM2_O= > +GM2_O_S3=-O > +GM2_OS=-Os > +GM2_G=-g -fm2-g > +GM2_CPP= > +# GM2_DEBUG_STRMEM=-fcpp > +GM2_DEBUG_STRMEM= > +GM2_FLAGS=-Wunused-variable -fsoft-check-all $(GM2_G) $(GM2_O) \ > + -funbounded-by-reference -fpim -fextended-opaque \ > + -Wpedantic-cast -Wpedantic-param-names -ffunction-sections \ > + -fdata-sections $(GM2_CPP) # -fauto-init > +GM2_ISO_FLAGS=-fsoft-check-all $(GM2_G) $(GM2_O) \ > + -funbounded-by-reference -fiso -fextended-opaque \ > + -Wpedantic-cast -Wpedantic-param-names -ffunction-sections \ > + -fdata-sections $(GM2_CPP) > +GM2_MIN_FLAGS=$(GM2_G) $(GM2_OS) \ > + -funbounded-by-reference -fextended-opaque \ > + -Wpedantic-cast -Wpedantic-param-names -fno-exceptions \ > + -ffunction-sections -fdata-sections $(GM2_CPP) > + > +O2=-O2 -g > +SO_O2=-O2 -g -fPIC > +SO=-O0 -g -fPIC > + > +# Language-specific object files for the gm2 compiler. > + > +GM2_C_OBJS = m2/gm2-lang.o \ > + m2/stor-layout.o \ > + m2/m2pp.o \ > + m2/gm2-gcc/m2assert.o \ > + m2/gm2-gcc/m2block.o \ > + m2/gm2-gcc/m2builtins.o \ > + m2/gm2-gcc/m2except.o \ > + m2/gm2-gcc/m2color.o \ > + m2/gm2-gcc/m2configure.o \ > + m2/gm2-gcc/m2convert.o \ > + m2/gm2-gcc/m2decl.o \ > + m2/gm2-gcc/m2expr.o \ > + m2/gm2-gcc/m2linemap.o \ > + m2/gm2-gcc/m2statement.o \ > + m2/gm2-gcc/m2type.o \ > + m2/gm2-gcc/m2tree.o \ > + m2/gm2-gcc/m2treelib.o \ > + m2/gm2-gcc/m2top.o \ > + m2/gm2-gcc/m2misc.o \ > + m2/gm2-gcc/init.o > +GM2_LIBS = m2/gm2-compiler/gm2.a \ > + ../$(target_subdir)/libgm2/libm2pim/.libs/libm2pim.a m2/gm2-libs-boot/choosetemp.o > + > +GM2_LIBS_BOOT = m2/gm2-compiler-boot/gm2.a \ > + m2/gm2-libs-boot/libgm2.a \ > + $(GM2-BOOT-O) > +GM2_LIBS_PARANOID = m2/gm2-compiler-paranoid/gm2.a \ > + m2/gm2-libs-paranoid/libgm2.a # build it again using GM2_LIBS > + > +gm2.paranoid: stage3/m2/cc1gm2$(exeext) gm2.verifyparanoid > + > +cc1gm2$(exeext): stage1/m2/cc1gm2$(exeext) $(m2.prev) > + cp -p $< $@ > + > +stage3/m2/cc1gm2$(exeext): stage2/m2/cc1gm2$(exeext) m2/gm2-compiler-paranoid/m2flex.o \ > + $(P) $(GM2_C_OBJS) $(BACKEND) $(LIBDEPS) $(GM2_LIBS_PARANOID) \ > + m2/gm2-gcc/rtegraph.o plugin/m2rte$(exeext).so > + @$(call LINK_PROGRESS,$(INDEX.m2),start) > + +$(LLINKER) $(ALL_CFLAGS) $(LDFLAGS) -o $@ $(GM2_C_OBJS) m2/gm2-compiler-paranoid/m2flex.o \ > + attribs.o \ > + $(GM2_LIBS_PARANOID) \ > + $(BACKEND) $(LIBS) m2/gm2-gcc/rtegraph.o \ > + $(BACKENDLIBS) $(LIBSTDCXX) -lm > + @$(call LINK_PROGRESS,$(INDEX.m2),end) > + > +stage2/m2/cc1gm2$(exeext): stage1/m2/cc1gm2$(exeext) m2/gm2-compiler/m2flex.o $(P) \ > + $(GM2_C_OBJS) $(BACKEND) $(LIBDEPS) $(GM2_LIBS) \ > + m2/gm2-gcc/rtegraph.o plugin/m2rte$(exeext).so > + @$(call LINK_PROGRESS,$(INDEX.m2),start) > + +$(LLINKER) $(ALL_CFLAGS) $(LDFLAGS) -o $@ $(GM2_C_OBJS) m2/gm2-compiler/m2flex.o \ > + attribs.o \ > + $(GM2_LIBS) \ > + $(BACKEND) $(LIBS) m2/gm2-gcc/rtegraph.o \ > + $(BACKENDLIBS) $(LIBSTDCXX) -lm > + @$(call LINK_PROGRESS,$(INDEX.m2),end) > + > +stage1/m2/cc1gm2$(exeext): gm2$(exeext) m2/gm2-compiler-boot/m2flex.o \ > + $(P) $(GM2_C_OBJS) $(BACKEND) $(LIBDEPS) \ > + $(GM2_LIBS_BOOT) $(MC_LIBS) \ > + m2/gm2-gcc/rtegraph.o plugin/m2rte$(exeext).so \ > + m2/gm2-libs-boot/M2LINK.o \ > + $(m2.prev) > + @$(call LINK_PROGRESS,$(INDEX.m2),start) > + +$(LLINKER) $(ALL_CFLAGS) $(LDFLAGS) -o $@ $(GM2_C_OBJS) m2/gm2-compiler-boot/m2flex.o \ > + attribs.o \ > + $(GM2_LIBS_BOOT) $(MC_LIBS) \ > + m2/gm2-gcc/rtegraph.o m2/gm2-libs-boot/M2LINK.o \ > + $(BACKEND) $(LIBS) $(BACKENDLIBS) > + @$(call LINK_PROGRESS,$(INDEX.m2),end) It looks like you are employing your own bootstrapping scheme here? In theory one could use --enable-stage1-languages=m2 and the stage1 built compiler could be used to shorten the above for stage2 and stage3? Likewise it might be feasible to provide a --with-system-gm2? Anyway, I can't spot any obvious issues in this file (but it's large). I think exposing this to a wider audience earlier is most important at this point. Thus OK. Thanks, Richard. > +# Compiling object files from source files. > + > +GCC_HEADER_DEPENDENCIES_FOR_M2 = $(BUILD-BOOT-H) $(TIMEVAR_H) m2/gm2config.h $(CONFIG_H) \ > + $(TREE_H) $(RTL_H) $(TARGET_H) $(PLUGIN_HEADERS) \ > + $(BCONFIG_H) $(CORETYPES_H) $(SYSTEM_H) \ > + $(srcdir)/flags.h gtype-m2.h \ > + $(generated_files) insn-attr-common.h > + > +m2/gm2-gcc/%.o: $(srcdir)/m2/gm2-gcc/%.cc $(GCC_HEADER_DEPENDENCIES_FOR_M2) > + $(COMPILER) -c -g $(ALL_COMPILERFLAGS) \ > + $(ALL_CPPFLAGS) $(INCLUDES) $< $(OUTPUT_OPTION) > + > +m2/gm2-gcc/m2configure.o: $(srcdir)/m2/gm2-gcc/m2configure.cc \ > + $(SYSTEM_H) $(GCC_H) $(CONFIG_H) \ > + m2/gm2config.h $(TARGET_H) $(PLUGIN_HEADERS) \ > + $(generated_files) $(C_TREE_H) insn-attr-common.h > + $(COMPILER) $(ALL_COMPILERFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \ > + $(DRIVER_DEFINES) \ > + -DLIBSUBDIR=\"$(libsubdir)\" \ > + -DPREFIX=\"$(prefix)\" \ > + -c $(srcdir)/m2/gm2-gcc/m2configure.cc $(OUTPUT_OPTION) > + > +m2/gm2-lang.o: $(srcdir)/m2/gm2-lang.cc gt-m2-gm2-lang.h $(GCC_HEADER_DEPENDENCIES_FOR_M2) > + $(COMPILER) -c -g -I$(GM2GCC) $(ALL_COMPILERFLAGS) \ > + $(ALL_CPPFLAGS) $(INCLUDES) $< $(OUTPUT_OPTION) > + > +m2/stor-layout.o: $(srcdir)/stor-layout.cc $(GCC_HEADER_DEPENDENCIES_FOR_M2) > + $(COMPILER) -c -DSET_WORD_SIZE=INT_TYPE_SIZE $(ALL_COMPILERFLAGS) \ > + $(ALL_CPPFLAGS) $(INCLUDES) $< $(OUTPUT_OPTION) > + > +m2/m2pp.o : $(srcdir)/m2/m2pp.cc $(GCC_HEADER_DEPENDENCIES_FOR_M2) > + $(COMPILER) -c -g -DGM2 $(ALL_COMPILERFLAGS) \ > + $(ALL_CPPFLAGS) $(INCLUDES) $< $(OUTPUT_OPTION) > + > +m2/gm2-gcc/rtegraph.o: $(srcdir)/m2/gm2-gcc/rtegraph.cc $(GCC_HEADER_DEPENDENCIES_FOR_M2) \ > + gt-m2-rtegraph.h > + $(COMPILER) -c -g -I$(GM2GCC) $(ALL_COMPILERFLAGS) \ > + $(ALL_CPPFLAGS) $(INCLUDES) $< $(OUTPUT_OPTION) > + > +c-family/m2pp.o : $(srcdir)/m2/m2pp.cc $(GCC_HEADER_DEPENDENCIES_FOR_M2) > + $(COMPILER) -c -g $(ALL_COMPILERFLAGS) \ > + $(ALL_CPPFLAGS) $(INCLUDES) $< $(OUTPUT_OPTION) > + > +m2/gm2-gcc/$(SRC_PREFIX)%.h: $(srcdir)/m2/gm2-gcc/%.def $(MCDEPS) > + $(MC) -o=$@ $(srcdir)/m2/gm2-gcc/$*.def > + > +# The following tables define the source files which are translated into C using mc > +# and defines the system interface C files. > + > +# Core library definition modules found in gm2-libs. > + > +GM2-LIBS-BOOT-DEFS = \ > + ASCII.def \ > + Args.def \ > + Assertion.def \ > + Break.def \ > + CmdArgs.def \ > + Debug.def \ > + DynamicStrings.def \ > + Environment.def \ > + FIO.def \ > + FormatStrings.def \ > + FpuIO.def \ > + IO.def \ > + Indexing.def \ > + M2Dependent.def \ > + M2EXCEPTION.def \ > + M2LINK.def \ > + M2RTS.def \ > + NumberIO.def \ > + PushBackInput.def \ > + RTExceptions.def \ > + SArgs.def \ > + SEnvironment.def \ > + SFIO.def \ > + SYSTEM.def \ > + Scan.def \ > + StdIO.def \ > + Storage.def \ > + StrCase.def \ > + StrIO.def \ > + StrLib.def \ > + StringConvert.def \ > + SysExceptions.def \ > + SysStorage.def \ > + TimeString.def \ > + UnixArgs.def \ > + dtoa.def \ > + errno.def \ > + ldtoa.def \ > + libc.def \ > + libm.def \ > + termios.def \ > + wrapc.def \ > + > +# Core library implementation modules found in gm2-libs. > + > +GM2-LIBS-BOOT-MODS = \ > + ASCII.mod \ > + Args.mod \ > + Assertion.mod \ > + Break.mod \ > + CmdArgs.mod \ > + Debug.mod \ > + DynamicStrings.mod \ > + Environment.mod \ > + FIO.mod \ > + FormatStrings.mod \ > + FpuIO.mod \ > + IO.mod \ > + Indexing.mod \ > + M2Dependent.mod \ > + M2EXCEPTION.mod \ > + M2RTS.mod \ > + NumberIO.mod \ > + PushBackInput.mod \ > + RTExceptions.mod \ > + SArgs.mod \ > + SEnvironment.mod \ > + SFIO.mod \ > + Scan.mod \ > + Storage.mod \ > + StrCase.mod \ > + StrIO.mod \ > + StrLib.mod \ > + StringConvert.mod \ > + SysStorage.mod \ > + TimeString.mod \ > + > +# Hand translated C files and C files for definition module for "C" modules > +# found in gm2-libs-ch. > + > +GM2-LIBS-BOOT-C = \ > + StdIO.c \ > + SysExceptions.c \ > + choosetemp.c \ > + errno.c \ > + termios.c \ > + wrapc.c \ > + > +# C++ implemented modules found in gm2-libs-ch. > + > +GM2-LIBS-BOOT-CC = \ > + UnixArgs.cc \ > + dtoa.cc \ > + ldtoa.cc > + > +# Definition modules for the front end found in gm2-compiler. > + > +GM2-COMP-BOOT-DEFS = \ > + FifoQueue.def \ > + Lists.def \ > + M2ALU.def \ > + M2AsmUtil.def \ > + M2Base.def \ > + M2BasicBlock.def \ > + M2Batch.def \ > + M2Bitset.def \ > + M2CaseList.def \ > + M2Check.def \ > + M2Code.def \ > + M2ColorString.def \ > + M2Comp.def \ > + M2Const.def \ > + M2Debug.def \ > + M2DebugStack.def \ > + M2Defaults.def \ > + M2DriverOptions.def \ > + M2Emit.def \ > + M2Error.def \ > + M2EvalSym.def \ > + M2FileName.def \ > + M2GCCDeclare.def \ > + M2GenGCC.def \ > + M2Graph.def \ > + M2LexBuf.def \ > + M2MetaError.def \ > + M2Optimize.def \ > + M2Options.def \ > + M2Pass.def \ > + M2Preprocess.def \ > + M2Printf.def \ > + M2Quads.def \ > + M2Quiet.def \ > + M2Range.def \ > + M2Reserved.def \ > + M2SSA.def \ > + M2Scaffold.def \ > + M2Scope.def \ > + M2Search.def \ > + M2Size.def \ > + M2StackAddress.def \ > + M2StackWord.def \ > + M2Students.def \ > + M2Swig.def \ > + M2System.def \ > + NameKey.def \ > + ObjectFiles.def \ > + Output.def \ > + P0SymBuild.def \ > + P0SyntaxCheck.def \ > + P1Build.def \ > + P1SymBuild.def \ > + P2Build.def \ > + P2SymBuild.def \ > + P3Build.def \ > + P3SymBuild.def \ > + PCBuild.def \ > + PCSymBuild.def \ > + PHBuild.def \ > + Sets.def \ > + SymbolConversion.def \ > + SymbolKey.def \ > + SymbolTable.def \ > + bnflex.def \ > + m2flex.def \ > + > +# Implementation modules for the front end found in gm2-compiler. > + > +GM2-COMP-BOOT-MODS = \ > + FifoQueue.mod \ > + Lists.mod \ > + Lists.mod \ > + M2ALU.mod \ > + M2AsmUtil.mod \ > + M2Base.mod \ > + M2BasicBlock.mod \ > + M2Batch.mod \ > + M2Bitset.mod \ > + M2CaseList.mod \ > + M2Check.mod \ > + M2Code.mod \ > + M2ColorString.mod \ > + M2Comp.mod \ > + M2Const.mod \ > + M2Debug.mod \ > + M2DebugStack.mod \ > + M2Defaults.mod \ > + M2DriverOptions.mod \ > + M2Emit.mod \ > + M2Error.mod \ > + M2FileName.mod \ > + M2GCCDeclare.mod \ > + M2GenGCC.mod \ > + M2Graph.mod \ > + M2LexBuf.mod \ > + M2MetaError.mod \ > + M2Optimize.mod \ > + M2Options.mod \ > + M2Pass.mod \ > + M2Preprocess.mod \ > + M2Printf.mod \ > + M2Quads.mod \ > + M2Quiet.mod \ > + M2Range.mod \ > + M2Reserved.mod \ > + M2SSA.mod \ > + M2Scaffold.mod \ > + M2Scope.mod \ > + M2Search.mod \ > + M2Size.mod \ > + M2StackAddress.mod \ > + M2StackWord.mod \ > + M2Students.mod \ > + M2Swig.mod \ > + M2System.mod \ > + NameKey.mod \ > + NameKey.mod \ > + ObjectFiles.mod \ > + Output.mod \ > + P0SymBuild.mod \ > + P1SymBuild.mod \ > + P2SymBuild.mod \ > + P3SymBuild.mod \ > + PCSymBuild.mod \ > + Sets.mod \ > + SymbolConversion.mod \ > + SymbolKey.mod \ > + SymbolKey.mod \ > + SymbolTable.mod \ > + bnflex.mod \ > + > +# The interface between the modula-2 front end and gimple/trees found in directory gm2-gcc. > + > +GM2-GCC-DEFS = \ > + m2block.def \ > + m2builtins.def \ > + m2color.def \ > + m2configure.def \ > + m2convert.def \ > + m2decl.def \ > + m2except.def \ > + m2except.def \ > + m2expr.def \ > + m2linemap.def \ > + m2misc.def \ > + m2statement.def \ > + m2top.def \ > + m2tree.def \ > + m2treelib.def \ > + m2type.def \ > + > +# The following lists define the source files used to build gm2 using Modula-2 > +# sources directly. > +# > +# cc1gm2$(exeext) uses these definition modules from the core libraries. > + > +GM2-LIBS-DEFS = \ > + ASCII.def \ > + Args.def \ > + Assertion.def \ > + Break.def \ > + Builtins.def \ > + COROUTINES.def \ > + CmdArgs.def \ > + Debug.def \ > + DynamicStrings.def \ > + Environment.def \ > + FIO.def \ > + FormatStrings.def \ > + FpuIO.def \ > + GetOpt.def \ > + IO.def \ > + Indexing.def \ > + LMathLib0.def \ > + LegacyReal.def \ > + M2Dependent.def \ > + M2EXCEPTION.def \ > + M2LINK.def \ > + M2RTS.def \ > + MathLib0.def \ > + MemUtils.def \ > + NumberIO.def \ > + PushBackInput.def \ > + RTExceptions.def \ > + RTint.def \ > + SArgs.def \ > + SEnvironment.def \ > + SFIO.def \ > + SMathLib0.def \ > + SYSTEM.def \ > + Scan.def \ > + StdIO.def \ > + Storage.def \ > + StrCase.def \ > + StrIO.def \ > + StrLib.def \ > + StringConvert.def \ > + SysStorage.def \ > + TimeString.def \ > + UnixArgs.def \ > + cbuiltin.def \ > + dtoa.def \ > + ldtoa.def \ > + libc.def \ > + termios.def \ > + wrapc.def \ > + > +# cc1gm2$(exeext) uses these implementation modules from the core libraries. > + > +GM2-LIBS-MODS = \ > + ASCII.mod \ > + Args.mod \ > + Assertion.mod \ > + Break.mod \ > + Builtins.mod \ > + COROUTINES.mod \ > + CmdArgs.mod \ > + Debug.mod \ > + DynamicStrings.mod \ > + Environment.mod \ > + FIO.mod \ > + FormatStrings.mod \ > + FpuIO.mod \ > + GetOpt.mod \ > + IO.mod \ > + Indexing.mod \ > + LMathLib0.mod \ > + LegacyReal.mod \ > + M2Dependent.mod \ > + M2EXCEPTION.mod \ > + M2RTS.mod \ > + MathLib0.mod \ > + MemUtils.mod \ > + NumberIO.mod \ > + PushBackInput.mod \ > + RTExceptions.mod \ > + RTint.mod \ > + SArgs.mod \ > + SEnvironment.mod \ > + SFIO.mod \ > + SMathLib0.mod \ > + SYSTEM.mod \ > + Scan.mod \ > + StdIO.mod \ > + Storage.mod \ > + StrCase.mod \ > + StrIO.mod \ > + StrLib.mod \ > + StringConvert.mod \ > + SysStorage.mod \ > + TimeString.mod \ > + > +# cc1gm2$(exeext) uses these C modules from the core libraries. > + > +GM2-LIBS-C = \ > + Selective.c \ > + SysExceptions.c \ > + cgetopt.c \ > + choosetemp.c \ > + errno.c \ > + host.c \ > + termios.c \ > + wrapc.c \ > + > +# cc1gm2$(exeext) uses these C++ modules from the core libraries. > + > +GM2-LIBS-CC = \ > + UnixArgs.cc \ > + dtoa.cc \ > + ldtoa.cc \ > + > +# cc1gm2$(exeext) uses these definition modules found in the gm2-compiler directory. > + > +GM2-COMP-DEFS = \ > + FifoQueue.def \ > + Lists.def \ > + M2ALU.def \ > + M2AsmUtil.def \ > + M2Base.def \ > + M2BasicBlock.def \ > + M2Batch.def \ > + M2Bitset.def \ > + M2CaseList.def \ > + M2Check.def \ > + M2Code.def \ > + M2ColorString.def \ > + M2Comp.def \ > + M2Const.def \ > + M2Debug.def \ > + M2DebugStack.def \ > + M2Defaults.def \ > + M2DriverOptions.def \ > + M2Emit.def \ > + M2Error.def \ > + M2FileName.def \ > + M2GCCDeclare.def \ > + M2GenGCC.def \ > + M2Graph.def \ > + M2LexBuf.def \ > + M2MetaError.def \ > + M2Optimize.def \ > + M2Options.def \ > + M2Pass.def \ > + M2Preprocess.def \ > + M2Printf.def \ > + M2Quads.def \ > + M2Quiet.def \ > + M2Range.def \ > + M2Reserved.def \ > + M2SSA.def \ > + M2Scaffold.def \ > + M2Scope.def \ > + M2Search.def \ > + M2Size.def \ > + M2StackAddress.def \ > + M2StackWord.def \ > + M2Students.def \ > + M2Swig.def \ > + M2System.def \ > + NameKey.def \ > + ObjectFiles.def \ > + P0SymBuild.def \ > + P0SyntaxCheck.def \ > + P1Build.def \ > + P1SymBuild.def \ > + P2Build.def \ > + P2SymBuild.def \ > + P3Build.def \ > + P3SymBuild.def \ > + PCBuild.def \ > + PCSymBuild.def \ > + PHBuild.def \ > + Sets.def \ > + SymbolConversion.def \ > + SymbolKey.def \ > + SymbolTable.def \ > + bnflex.def \ > + > +# cc1gm2$(exeext) uses these implementation modules found in the gm2-compiler directory. > + > +GM2-COMP-MODS = \ > + FifoQueue.mod \ > + Lists.mod \ > + M2ALU.mod \ > + M2AsmUtil.mod \ > + M2Base.mod \ > + M2BasicBlock.mod \ > + M2Batch.mod \ > + M2Bitset.mod \ > + M2CaseList.mod \ > + M2Check.mod \ > + M2Code.mod \ > + M2ColorString.mod \ > + M2Comp.mod \ > + M2Const.mod \ > + M2Debug.mod \ > + M2DebugStack.mod \ > + M2Defaults.mod \ > + M2DriverOptions.mod \ > + M2Emit.mod \ > + M2Error.mod \ > + M2FileName.mod \ > + M2GCCDeclare.mod \ > + M2GenGCC.mod \ > + M2Graph.mod \ > + M2LexBuf.mod \ > + M2MetaError.mod \ > + M2Optimize.mod \ > + M2Options.mod \ > + M2Pass.mod \ > + M2Preprocess.mod \ > + M2Printf.mod \ > + M2Quads.mod \ > + M2Quiet.mod \ > + M2Range.mod \ > + M2Reserved.mod \ > + M2SSA.mod \ > + M2Scaffold.mod \ > + M2Scope.mod \ > + M2Search.mod \ > + M2Size.mod \ > + M2StackAddress.mod \ > + M2StackWord.mod \ > + M2Students.mod \ > + M2Swig.mod \ > + M2System.mod \ > + NameKey.mod \ > + ObjectFiles.mod \ > + Output.mod \ > + P0SymBuild.mod \ > + P1SymBuild.mod \ > + P2SymBuild.mod \ > + P3SymBuild.mod \ > + PCSymBuild.mod \ > + Sets.mod \ > + SymbolConversion.mod \ > + SymbolKey.mod \ > + SymbolTable.mod \ > + bnflex.mod \ > + > +# Implementation modules created by the parser generator pge from .bnf files. > + > +GM2-AUTO-MODS = \ > + P2Build.mod \ > + P3Build.mod \ > + PHBuild.mod \ > + PCBuild.mod \ > + P1Build.mod \ > + P0SyntaxCheck.mod \ > + > +# LIBIBERTY interface definition modules > + > +GM2-LIBIBERTY-DEFS = \ > + choosetemp.def \ > + pexecute.def > + > +BUILD-LIBS-BOOT-H = $(GM2-LIBS-BOOT-DEFS:%.def=m2/gm2-libs-boot/$(SRC_PREFIX)%.h) > + > +BUILD-LIBS-BOOT = $(BUILD-LIBS-BOOT-H) \ > + $(GM2-LIBS-BOOT-MODS:%.mod=m2/gm2-libs-boot/%.o) \ > + $(GM2-LIBS-BOOT-CC:%.cc=m2/gm2-libs-boot/%.o) \ > + $(GM2-LIBS-BOOT-C:%.c=m2/gm2-libs-boot/%.o) > + > +BUILD-COMPILER-BOOT-H = $(GM2-COMP-BOOT-DEFS:%.def=m2/gm2-compiler-boot/$(SRC_PREFIX)%.h) \ > + $(GM2-LIBIBERTY-DEFS:%.def=m2/gm2-libiberty/$(SRC_PREFIX)%.h) \ > + $(GM2-GCC-DEFS:%.def=m2/gm2-gcc/$(SRC_PREFIX)%.h) > + > +BUILD-COMPILER-BOOT = $(BUILD-COMPILER-BOOT-H) \ > + $(GM2-COMP-BOOT-DEFS:%.def=m2/gm2-compiler-boot/$(SRC_PREFIX)%.h) \ > + $(GM2-AUTO-MODS:%.mod=m2/gm2-compiler-boot/%.o) \ > + $(GM2-COMP-BOOT-MODS:%.mod=m2/gm2-compiler-boot/%.o) \ > + m2/gm2-compiler-boot/m2flex.o > + > +BUILD-BOOT-H = m2/boot-bin/mc$(exeext) \ > + $(BUILD-LIBS-BOOT-H) $(BUILD-COMPILER-BOOT-H) $(TARGET_H) $(PLUGIN_HEADERS) > + > +# Core library definition modules used by the modula-2 to C++ translator. > + > +MC-LIB-DEFS = \ > + ASCII.def \ > + Args.def \ > + Assertion.def \ > + Break.def \ > + COROUTINES.def \ > + CmdArgs.def \ > + Debug.def \ > + DynamicStrings.def \ > + Environment.def \ > + FIO.def \ > + FormatStrings.def \ > + FpuIO.def \ > + IO.def \ > + M2Dependent.def \ > + M2EXCEPTION.def \ > + M2LINK.def \ > + M2RTS.def \ > + MemUtils.def \ > + NumberIO.def \ > + PushBackInput.def \ > + RTExceptions.def \ > + RTco.def \ > + RTint.def \ > + SArgs.def \ > + SFIO.def \ > + SYSTEM.def \ > + Selective.def \ > + StdIO.def \ > + Storage.def \ > + StrCase.def \ > + StrIO.def \ > + StrLib.def \ > + StringConvert.def \ > + SysExceptions.def \ > + SysStorage.def \ > + TimeString.def \ > + UnixArgs.def \ > + dtoa.def \ > + errno.def \ > + ldtoa.def \ > + libc.def \ > + libm.def \ > + termios.def \ > + wrapc.def \ > + > +# Core library implementation modules used by the modula-2 to C++ translator. > + > +MC-LIB-MODS = \ > + ASCII.mod \ > + Args.mod \ > + Assertion.mod \ > + Break.mod \ > + CmdArgs.mod \ > + Debug.mod \ > + DynamicStrings.mod \ > + Environment.mod \ > + FIO.mod \ > + FormatStrings.mod \ > + FpuIO.mod \ > + IO.mod \ > + M2Dependent.mod \ > + M2EXCEPTION.mod \ > + M2RTS.mod \ > + MemUtils.mod \ > + NumberIO.mod \ > + PushBackInput.mod \ > + RTExceptions.mod \ > + RTint.mod \ > + SArgs.mod \ > + SFIO.mod \ > + StdIO.mod \ > + Storage.mod \ > + StrCase.mod \ > + StrIO.mod \ > + StrLib.mod \ > + StringConvert.mod \ > + SysStorage.mod \ > + TimeString.mod \ > + > +MC-LIB-BOOT-C = $(MC-LIB-MODS:%.mod=%.c) > + > +# Definition modules for the modula-2 to C++ translator found in mc. > + > +MC-DEFS = \ > + Indexing.def \ > + alists.def \ > + decl.def \ > + keyc.def \ > + lists.def \ > + mcComment.def \ > + mcComp.def \ > + mcDebug.def \ > + mcError.def \ > + mcFileName.def \ > + mcLexBuf.def \ > + mcMetaError.def \ > + mcOptions.def \ > + mcPreprocess.def \ > + mcPretty.def \ > + mcPrintf.def \ > + mcQuiet.def \ > + mcReserved.def \ > + mcSearch.def \ > + mcStack.def \ > + mcStream.def \ > + mcflex.def \ > + mcp1.def \ > + mcp2.def \ > + mcp3.def \ > + mcp4.def \ > + mcp5.def \ > + nameKey.def \ > + symbolKey.def \ > + varargs.def \ > + wlists.def \ > + > +# Implementation modules for the modula-2 to C++ translator found in mc. > + > +MC-MODS = \ > + Indexing.mod \ > + alists.mod \ > + decl.mod \ > + keyc.mod \ > + lists.mod \ > + mcComment.mod \ > + mcComp.mod \ > + mcDebug.mod \ > + mcError.mod \ > + mcFileName.mod \ > + mcLexBuf.mod \ > + mcMetaError.mod \ > + mcOptions.mod \ > + mcPreprocess.mod \ > + mcPretty.mod \ > + mcPrintf.mod \ > + mcQuiet.mod \ > + mcReserved.mod \ > + mcSearch.mod \ > + mcStack.mod \ > + mcStream.mod \ > + nameKey.mod \ > + symbolKey.mod \ > + top.mod \ > + varargs.mod \ > + wlists.mod \ > + > +# Parser files generated by pge from .bnf files. > + > +MC-AUTO-MODS = \ > + mcp1.mod \ > + mcp2.mod \ > + mcp3.mod \ > + mcp4.mod \ > + mcp5.mod > + > +MC-BOOT-C = $(MC-MODS:%.mod=%.c) $(MC-AUTO-MODS:%.mod=%.c) > + > +# C interface files for mc. > + > +MC-INTERFACE-C = \ > + M2LINK.c \ > + SYSTEM.c \ > + Selective.c \ > + SysExceptions.c \ > + abort.c \ > + errno.c \ > + libc.c \ > + mcrts.c \ > + termios.c \ > + wrapc.c \ > + > +# C++ interface files for mc. > + > +MC-INTERFACE-CC = \ > + UnixArgs.cc \ > + dtoa.cc \ > + ldtoa.cc \ > + > +BUILD-MC-BOOT-H = $(MC-LIB-DEFS:%.def=m2/mc-boot-gen/$(SRC_PREFIX)%.h) \ > + $(MC-DEFS:%.def=m2/mc-boot-gen/$(SRC_PREFIX)%.h) > + > +BUILD-MC-BOOT-C = $(MC-LIB-MODS:%.mod=m2/mc-boot-gen/$(SRC_PREFIX)%.c) \ > + $(MC-MODS:%.mod=m2/mc-boot-gen/$(SRC_PREFIX)%.c) > + > +BUILD-MC-BOOT-AUTO-C = $(MC-AUTO-MODS:%.mod=m2/mc-boot-gen/$(SRC_PREFIX)%.c) > + > +BUILD-MC-BOOT-O = $(MC-LIB-BOOT-C:%.c=m2/mc-boot/$(SRC_PREFIX)%.o) \ > + $(MC-BOOT-C:%.c=m2/mc-boot/$(SRC_PREFIX)%.o) > + > +BUILD-MC-INTERFACE-O = $(MC-INTERFACE-C:%.c=m2/mc-boot-ch/$(SRC_PREFIX)%.o) \ > + $(MC-INTERFACE-CC:%.cc=m2/mc-boot-ch/$(SRC_PREFIX)%.o) > + > +GM2GCC = -I$(srcdir)/m2 -Im2 -I$(srcdir)/m2/gm2-gcc -Im2/gm2-gcc > + > +MCINCLUDES= -I$(srcdir)/m2/mc-boot-ch > +LOCAL_INCLUDES = -I. -I$(srcdir)/../include -I$(srcdir) > + > +GCC_COLOR=m2/gm2-gcc/m2color.o diagnostic-color.o > + > +m2/boot-bin/mc$(exeext): $(BUILD-MC-BOOT-O) $(BUILD-MC-INTERFACE-O) \ > + m2/mc-boot/main.o mcflex.o m2/gm2-libs-boot/RTcodummy.o > + +$(LINKER) $(ALL_LINKERFLAGS) $(LDFLAGS) -o $@ $(BUILD-MC-BOOT-O) \ > + $(BUILD-MC-INTERFACE-O) m2/mc-boot/main.o \ > + mcflex.o m2/gm2-libs-boot/RTcodummy.o -lm > + > +m2/mc-boot/$(SRC_PREFIX)%.o: m2/mc-boot/$(SRC_PREFIX)%.c > + $(CXX) -g -c -I. -I$(srcdir)/m2/mc-boot-ch -I$(srcdir)/m2/mc-boot -I$(srcdir)/../include -I$(srcdir) $(INCLUDES) $< -o $@ > + > +m2/mc-boot-ch/$(SRC_PREFIX)%.o: m2/mc-boot-ch/$(SRC_PREFIX)%.c m2/gm2-libs/gm2-libs-host.h > + $(CXX) -DHAVE_CONFIG_H -g -c -I. -Im2/gm2-libs -I$(srcdir)/../include -I$(srcdir) $(INCLUDES) -Im2/gm2-libs $< -o $@ > + > +m2/mc-boot-ch/$(SRC_PREFIX)%.o: m2/mc-boot-ch/$(SRC_PREFIX)%.cc m2/gm2-libs/gm2-libs-host.h > + $(CXX) -DHAVE_CONFIG_H -g -c -I. -Im2/gm2-libs -I$(srcdir)/../include -I$(srcdir) $(INCLUDES) -Im2/gm2-libs $< -o $@ > + > +m2/mc-boot/main.o: $(M2LINK) $(srcdir)/m2/init/mcinit > + unset CC ; $(M2LINK) -s --langc++ --exit --name m2/mc-boot/main.c $(srcdir)/m2/init/mcinit > + $(CXX) -g -c -I. -I$(srcdir)/../include -I$(srcdir) $(INCLUDES) m2/mc-boot/main.c -o $@ > + > +mcflex.o: mcflex.c > + $(CC) -I$(srcdir)/m2/mc -g -c $< -o $@ # remember that mcReserved.h is copied into m2/mc > + > +mcflex.c: $(srcdir)/m2/mc/mc.flex > + flex -t $< > $@ > + > +m2/gm2-libs-boot/%.o: $(srcdir)/m2/gm2-libs-boot/%.mod $(MCDEPS) $(BUILD-BOOT-H) > + $(MC) -o=m2/gm2-libs-boot/$*.c $(srcdir)/m2/gm2-libs-boot/$*.mod > + $(COMPILER) -c $(CPP_GM2) $(CFLAGS) $(MCINCLUDES) m2/gm2-libs-boot/$*.c -o $@ > + > +m2/gm2-libs-boot/%.o: $(srcdir)/m2/gm2-libs/%.mod $(MCDEPS) $(BUILD-BOOT-H) > + $(MC) -o=m2/gm2-libs-boot/$*.c $(srcdir)/m2/gm2-libs/$*.mod > + $(COMPILER) -c $(CPP_GM2) $(CFLAGS) -I$(srcdir)/m2 -Im2 -I. -Im2/gm2-libs-boot $(MCINCLUDES) $(INCLUDES) m2/gm2-libs-boot/$*.c -o $@ > + > +m2/gm2-libs-boot/$(SRC_PREFIX)%.h: $(srcdir)/m2/gm2-libs/%.def $(MCDEPS) > + $(MC) -o=$@ $(srcdir)/m2/gm2-libs/$*.def > + > +m2/gm2-libs-boot/RTcodummy.o: $(srcdir)/m2/gm2-libs-ch/RTcodummy.c m2/gm2-libs/gm2-libs-host.h > + $(CXX) -c -DIN_GCC $(CFLAGS) -Im2/gm2-libs -I$(srcdir)/m2 -Im2 -I. -Im2/gm2-libs-boot $(INCLUDES) $< -o $@ > + > +m2/gm2-libs-boot/RTintdummy.o: $(srcdir)/m2/gm2-libs-ch/RTintdummy.c m2/gm2-libs/gm2-libs-host.h > + $(CXX) -c -DIN_GCC $(CFLAGS) -Im2/gm2-libs -I$(srcdir)/m2 -Im2 -I. -Im2/gm2-libs-boot $(INCLUDES) $< -o $@ > + > +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 > + $(CXX) -c -DHAVE_CONFIG_H $(CFLAGS) -Im2/gm2-libs -I$(srcdir)/m2 -Im2 -I. -Im2/gm2-libs-boot -Im2/gm2-libs $(INCLUDES) $< -o $@ > + > +m2/gm2-libs-boot/M2LINK.o: $(srcdir)/m2/gm2-libs-ch/M2LINK.c m2/gm2-libs-boot/$(SRC_PREFIX)M2LINK.h m2/gm2-libs/gm2-libs-host.h > + $(CXX) -c -DHAVE_CONFIG_H $(CFLAGS) -Im2/gm2-libs -I$(srcdir)/m2 -Im2 -I. -Im2/gm2-libs-boot -Im2/gm2-libs $(INCLUDES) $< -o $@ > + > +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 > + $(CXX) -c -DIN_GCC $(CFLAGS) -Im2/gm2-libs -I$(srcdir)/m2 -Im2 -I. -Im2/gm2-libs-boot $(INCLUDES) $< -o $@ > + > +m2/gm2-libs-boot/choosetemp.o: m2/gm2-libs-ch/choosetemp.c m2/gm2-libiberty/Gchoosetemp.h m2/gm2-libs/gm2-libs-host.h > + $(CXX) -c $(CFLAGS) -Im2/gm2-libs -I$(srcdir)/m2 -Im2 -I. -Im2/gm2-libs-boot -Im2/gm2-libiberty -I$(srcdir)/m2/gm2-libiberty/ $(INCLUDES) $< -o $@ > + > +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 > + $(CXX) -c $(CFLAGS) -Im2/gm2-libs -I$(srcdir)/m2 -Im2 -I. -Im2/gm2-libs-boot $(INCLUDES) $< -o $@ > + > +m2/gm2-libs-boot/dtoa.o: $(srcdir)/m2/gm2-libs-ch/dtoa.cc m2/gm2-libs/gm2-libs-host.h > + $(CXX) -c $(CFLAGS) -Im2/gm2-libs -I$(srcdir)/m2 -Im2 -I. -Im2/gm2-libs-boot $(INCLUDES) $< -o $@ > + > +m2/gm2-libs-boot/ldtoa.o: $(srcdir)/m2/gm2-libs-ch/ldtoa.cc m2/gm2-libs/gm2-libs-host.h > + $(CXX) -c $(CFLAGS) -Im2/gm2-libs -I$(srcdir)/m2 -Im2 -I. -Im2/gm2-libs-boot $(INCLUDES) $< -o $@ > + > +m2/gm2-libs-boot/termios.o: $(srcdir)/m2/gm2-libs-ch/termios.c $(BUILD-LIBS-BOOT-H) m2/gm2-libs/gm2-libs-host.h > + $(CXX) -c $(CFLAGS) -Im2/gm2-libs -I$(srcdir)/m2 -Im2 -I. -Im2/gm2-libs-boot $(INCLUDES) $< -o $@ > + > +m2/gm2-libs-boot/SysExceptions.o: $(srcdir)/m2/gm2-libs-ch/SysExceptions.c \ > + m2/gm2-libs-boot/$(SRC_PREFIX)SysExceptions.h m2/gm2-libs/gm2-libs-host.h > + $(CXX) -c $(CFLAGS) -Im2/gm2-libs -I$(srcdir)/m2 -Im2 -I. -Im2/gm2-libs-boot $(INCLUDES) $< -o $@ > + > +m2/gm2-libs-boot/SysStorage.o: $(srcdir)/m2/gm2-libs/SysStorage.mod $(MCDEPS) $(BUILD-BOOT-H) > + $(MC) -o=m2/gm2-libs-boot/SysStorage.c $(srcdir)/m2/gm2-libs/SysStorage.mod > + $(COMPILER) -DIN_GCC -c -fpermissive $(CFLAGS) \ > + -I$(srcdir)/m2 -Im2 -I. -Im2/gm2-libs-boot $(MCINCLUDES) $(INCLUDES) \ > + m2/gm2-libs-boot/SysStorage.c -o m2/gm2-libs-boot/SysStorage.o > + > +m2/gm2-compiler-boot/M2GCCDeclare.o: $(srcdir)/m2/gm2-compiler/M2GCCDeclare.mod $(MCDEPS) $(BUILD-BOOT-H) > + $(MC) --extended-opaque -o=m2/gm2-compiler-boot/M2GCCDeclare.c $< > + $(COMPILER) -c -fpermissive $(ALL_COMPILERFLAGS) $(ALL_CPPFLAGS) $(GM2GCC) \ > + -I. -I$(srcdir)/../include -I$(srcdir) \ > + -I. -Im2/gm2-libs-boot -Im2/gm2-compiler-boot \ > + -I$(srcdir)/m2/gm2-libiberty $(MCINCLUDES) $(INCLUDES) m2/gm2-compiler-boot/M2GCCDeclare.c -o $@ > + > +m2/gm2-compiler-boot/M2Error.o: $(srcdir)/m2/gm2-compiler/M2Error.mod $(MCDEPS) $(BUILD-BOOT-H) > + $(MC) --extended-opaque -o=m2/gm2-compiler-boot/M2Error.c $< > + $(COMPILER) -c -fpermissive $(ALL_COMPILERFLAGS) $(ALL_CPPFLAGS) $(GM2GCC) \ > + -I. -I$(srcdir)/../include -I$(srcdir) \ > + -I. -Im2/gm2-libs-boot -Im2/gm2-compiler-boot \ > + -I$(srcdir)/m2/gm2-libiberty $(MCINCLUDES) $(INCLUDES) m2/gm2-compiler-boot/M2Error.c -o $@ > + > +m2/gm2-compiler-boot/%.o: $(srcdir)/m2/gm2-compiler/%.mod $(BUILD-BOOT-H) $(MCDEPS) $(BUILD-BOOT-H) > + $(MC) -o=m2/gm2-compiler-boot/$*.c $(srcdir)/m2/gm2-compiler/$*.mod > + $(COMPILER) -c -fpermissive $(ALL_COMPILERFLAGS) $(ALL_CPPFLAGS) $(GM2GCC) \ > + -I. -I$(srcdir)/../include -I$(srcdir) \ > + -I. -Im2/gm2-libs-boot -Im2/gm2-compiler-boot -Im2/gm2-libiberty \ > + -I$(srcdir)/m2/gm2-libiberty $(MCINCLUDES) $(INCLUDES) m2/gm2-compiler-boot/$*.c -o $@ > + > +m2/gm2-compiler-boot/%.o: m2/gm2-compiler-boot/%.mod $(MCDEPS) $(BUILD-BOOT-H) > + $(MC) -o=m2/gm2-compiler-boot/$*.c m2/gm2-compiler-boot/$*.mod > + $(COMPILER) -c -fpermissive $(ALL_COMPILERFLAGS) $(ALL_CPPFLAGS) $(GM2GCC) \ > + -I. -I$(srcdir)/../include -I$(srcdir) \ > + -I. -Im2/gm2-libs-boot -Im2/gm2-compiler-boot \ > + -I$(srcdir)/m2/gm2-libiberty $(MCINCLUDES) $(INCLUDES) m2/gm2-compiler-boot/$*.c -o $@ > + > +m2/gm2-compiler-boot/$(SRC_PREFIX)%.h: $(srcdir)/m2/gm2-compiler/%.def $(MCDEPS) > + $(MC) -o=$@ $(srcdir)/m2/gm2-compiler/$*.def > + > +m2/gm2-compiler-boot/m2flex.o: m2/gm2-compiler/m2flex.c $(BUILD-BOOT-H) $(TIMEVAR_H) \ > + $(BUILD-LIBS-BOOT-H) m2/gm2-compiler-boot/$(SRC_PREFIX)NameKey.h \ > + $(CONFIG_H) m2/gm2config.h $(TARGET_H) $(PLUGIN_HEADERS) > + $(COMPILER) -c -g $(ALL_COMPILERFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \ > + $(GM2GCC) $(INCLUDES) -I$(srcdir)/m2 \ > + -Im2 -Im2/gm2-compiler-boot -Im2/gm2-libs-boot $< -o $@ > + > +m2/gm2-compiler/m2flex.c: $(srcdir)/m2/m2.flex $(TIMEVAR_H) insn-attr-common.h > + flex -t $< | sed -e 's/ malloc/ xmalloc/' | sed -e 's/ realloc/ xrealloc/' > $@ > + > +m2/gm2-libiberty/$(SRC_PREFIX)%.h: $(srcdir)/m2/gm2-libiberty/%.def $(MCDEPS) > + $(MC) -o=$@ $(srcdir)/m2/gm2-libiberty/$*.def > + > +# The rules to build objects in gm2-compiler and gm2-libs directories. > + > +m2/gm2-compiler/%.o: $(srcdir)/m2/gm2-compiler/%.mod > + $(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 $@ > + > +m2/gm2-compiler/m2flex.o: m2/gm2-compiler/m2flex.c m2/gm2-libs/gm2-libs-host.h $(TIMEVAR_H) > + $(COMPILER) -c -g $(ALL_COMPILERFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \ > + $(GM2GCC) -Im2/gm2-compiler-boot -Im2/gm2-libs-boot $< -o $@ > + > +m2/gm2-compiler/%.o: m2/gm2-compiler/%.mod > + $(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 $@ > + > +m2/gm2-libs-iso/%.o: $(srcdir)/m2/gm2-libs-iso/%.c m2/gm2-libs/gm2-libs-host.h > + $(CXX) -DBUILD_GM2_LIBS_TARGET -DBUILD_GM2_LIBS -c $(CFLAGS) -Im2/gm2-libs -I$(srcdir)/m2 -Im2/gm2-libs-boot $(INCLUDES) $< -o $@ > + > +m2/gm2-libs-iso/%.o: $(srcdir)/m2/gm2-libs-iso/%.mod > + $(GM2_1) $(GM2_ISO_FLAGS) -c -B./ -Im2/gm2-libs-iso:$(srcdir)/m2/gm2-libs-iso -I$(srcdir)/m2/gm2-libs $< -o $@ > + > + > +# We build the cc1gm2$(exeext) from the boot stage and then proceed to build it > +# again using itself. > + > +m2/gm2-libs/gm2-libs-host.h: > + echo "Configuring to build libraries using native compiler" ; \ > + NEW_SRCDIR=`${srcdir}/m2/tools-src/calcpath ../../ ${srcdir} m2/gm2-libs` ; \ > + export NEW_SRCDIR ; \ > + cd m2/gm2-libs ; \ > + $(SHELL) -c '$${NEW_SRCDIR}/config-host \ > + --srcdir=$${NEW_SRCDIR} \ > + --target=$(target) \ > + --program-suffix=$(exeext)' > + > +# Autoconf inserts -DCROSS_DIRECTORY_STRUCTURE if we are building a > +# cross compiler and the ../Makefile.in above appends this to INTERNAL_CFLAGS. > + > +m2/gm2config.h: > + NEW_SRCDIR=`${srcdir}/m2/tools-src/calcpath ../ ${srcdir} m2` ; \ > + export NEW_SRCDIR ; \ > + cd m2 ; \ > + if echo $(INTERNAL_CFLAGS) | grep \\-DCROSS_DIRECTORY_STRUCTURE; then \ > + AR=$(echo $(AR_FOR_TARGET) | sed -e "s/^ //") ; \ > + export AR ; \ > + RANLIB=$(echo $(RANLIB_FOR_TARGET) | sed -e "s/^ //") ; \ > + export RANLIB ; \ > + $(SHELL) -c '$${NEW_SRCDIR}/configure --srcdir=$${NEW_SRCDIR} \ > + --target=$(target) --program-suffix=$(exeext) \ > + --includedir=$(SYSTEM_HEADER_DIR) --libdir=$(libdir) \ > + --libexecdir=$(libexecdir)' ; \ > + else \ > + $(SHELL) -c '$${NEW_SRCDIR}/configure --srcdir=$(NEW_SRCDIR) \ > + --target=$(target) --program-suffix=$(exeext)' ; \ > + fi > + > +$(objdir)/m2/gm2-libs-min/SYSTEM.def: $(GM2_PROG_DEP) > + $(SHELL) $(srcdir)/m2/tools-src/makeSystem -fpim \ > + $(srcdir)/m2/gm2-libs-min/SYSTEM.def \ > + $(srcdir)/m2/gm2-libs-min/SYSTEM.mod \ > + -I$(srcdir)/m2/gm2-libs-min:$(srcdir)/m2/gm2-libs \ > + "$(GM2_FOR_TARGET)" $@ > + > +$(objdir)/m2/gm2-libs/SYSTEM.def: $(GM2_PROG_DEP) > + echo "GM2_FOR_TARGET $(GM2_FOR_TARGET)" > + echo "GCC_FOR_TARGET $(GCC_FOR_TARGET)" > + $(SHELL) $(srcdir)/m2/tools-src/makeSystem -fpim \ > + $(srcdir)/m2/gm2-libs/SYSTEM.def \ > + $(srcdir)/m2/gm2-libs/SYSTEM.mod \ > + -I$(srcdir)/m2/gm2-libs \ > + "$(GM2_FOR_TARGET)" $@ > + > +$(objdir)/m2/gm2-libs-iso/SYSTEM.def: $(GM2_PROG_DEP) > + $(SHELL) $(srcdir)/m2/tools-src/makeSystem -fiso \ > + $(srcdir)/m2/gm2-libs-iso/SYSTEM.def \ > + $(srcdir)/m2/gm2-libs-iso/SYSTEM.mod \ > + -I$(srcdir)/m2/gm2-libs-iso:$(srcdir)/m2/gm2-libs \ > + "$(GM2_FOR_TARGET)" $@ > + > +$(objdir)/m2/gm2-libs-coroutines/SYSTEM.def: $(GM2_PROG_DEP) > + $(SHELL) $(srcdir)/m2/tools-src/makeSystem -fpim \ > + $(srcdir)/m2/gm2-libs-coroutines/SYSTEM.def \ > + $(srcdir)/m2/gm2-libs-coroutines/SYSTEM.mod \ > + -I$(srcdir)/m2/gm2-libs-coroutines:$(srcdir)/m2/gm2-libs-iso:$(srcdir)/m2/gm2-libs \ > + "$(GM2_FOR_TARGET)" $@ > + > +build-compiler: $(GM2-COMP-MODS:%.mod=m2/gm2-compiler/%.o) \ > + $(GM2-AUTO-MODS:%.mod=m2/gm2-compiler/%.o) \ > + m2/gm2-compiler/m2flex.o > + > +m2/gm2-compiler/gm2.a: build-compiler gm2$(exeext) > + $(AR_FOR_TARGET) cr $@ $(GM2-COMP-MODS:%.mod=m2/gm2-compiler/%.o) \ > + $(GM2-AUTO-MODS:%.mod=m2/gm2-compiler/%.o) > + $(RANLIB) $@ > + > +m2/gm2-libs-boot/libgm2.a: m2/boot-bin/mc$(exeext) $(BUILD-LIBS-BOOT) > + $(AR) cr $@ $(GM2-LIBS-BOOT-MODS:%.mod=m2/gm2-libs-boot/%.o) \ > + $(GM2-LIBS-BOOT-CC:%.cc=m2/gm2-libs-boot/%.o) \ > + $(GM2-LIBS-BOOT-C:%.c=m2/gm2-libs-boot/%.o) > + $(RANLIB) $@ > + > +m2/gm2-compiler-boot/gm2.a: m2/boot-bin/mc$(exeext) m2/boot-bin/mklink$(exeext) \ > + $(BUILD-LIBS-BOOT) $(BUILD-COMPILER-BOOT) > + $(AR) cr $@ $(GM2-COMP-BOOT-MODS:%.mod=m2/gm2-compiler-boot/%.o) \ > + $(GM2-AUTO-MODS:%.mod=m2/gm2-compiler-boot/%.o) > + $(RANLIB) $@ > + > +m2/gm2-compiler-boot/gm2.a: m2/boot-bin/mc$(exeext) > + > +m2/boot-bin/mklink$(exeext): $(srcdir)/m2/tools-src/mklink.c > + $(CXX) $(CFLAGS) -I$(srcdir)/m2 -Im2/gm2-libs-boot -Im2/gm2-compiler-boot -I$(srcdir)/m2/mc-boot-ch $(INCLUDES) $< -o $@ > + > +m2/gm2-compiler-boot/$(SRC_PREFIX)%.h: $(srcdir)/m2/gm2-compiler-boot/%.def $(MCDEPS) > + $(MC) --quiet -o=$@ $(srcdir)/m2/gm2-compiler-boot/$*.def > + > +m2/gm2-compiler/%.mod: $(srcdir)/m2/gm2-compiler/%.bnf $(PGE) > + $(PGE) -k -l $< -o $@ > + > +m2/gm2-compiler-boot/%.mod: $(srcdir)/m2/gm2-compiler/%.bnf $(PGE) > + $(PGE) -k -l $< -o $@ > + > +check-m2: check-gm2 > +check_m2: check-gm2 > +check_gm2: check-gm2 > +check-modula2: check-gm2 > +check_modula2: check-gm2 > +check-modula-2: check-gm2 > +check_modula-2: check-gm2 > +check_modula_2: check-gm2 > + > +lang_checks += check-gm2 > +lang_checks_parallelized += check-gm2 > +# For description see the check_$lang_parallelize comment in gcc/Makefile.in. > +check_gm2_parallelize = 10000 > + > +check-gm2-local: $(GM2TESTSUITEDIR)/site.exp > + -(rootme=`${PWD_COMMAND}`; export rootme; \ > + srcdir=`cd ${srcdir}; ${PWD_COMMAND}` ; export srcdir ; \ > + cd $(TESTSUITEDIR); \ > + EXPECT=${EXPECT} ; export EXPECT ; \ > + if [ -f $${rootme}/../expect/expect ] ; then \ > + TCL_LIBRARY=`cd .. ; cd ${srcdir}/../tcl/library ; ${PWD_COMMAND}` ; \ > + export TCL_LIBRARY ; fi ; \ > + $(RUNTEST) --tool gm2 --directory testsuite/m2/pim/pass) > + > +BUILD-PGE-O = \ > + m2/pge-boot/GArgs.o \ > + m2/pge-boot/GASCII.o \ > + m2/pge-boot/GAssertion.o \ > + m2/pge-boot/Gbnflex.o \ > + m2/pge-boot/GDebug.o \ > + m2/pge-boot/GDynamicStrings.o \ > + m2/pge-boot/GFIO.o \ > + m2/pge-boot/GIndexing.o \ > + m2/pge-boot/GIO.o \ > + m2/pge-boot/GLists.o \ > + m2/pge-boot/GM2Dependent.o \ > + m2/pge-boot/GM2EXCEPTION.o \ > + m2/pge-boot/GM2RTS.o \ > + m2/pge-boot/GNameKey.o \ > + m2/pge-boot/GNumberIO.o \ > + m2/pge-boot/GOutput.o \ > + m2/pge-boot/Gpge.o \ > + m2/pge-boot/GPushBackInput.o \ > + m2/pge-boot/GRTExceptions.o \ > + m2/pge-boot/GSFIO.o \ > + m2/pge-boot/GStdIO.o \ > + m2/pge-boot/GStorage.o \ > + m2/pge-boot/GStrCase.o \ > + m2/pge-boot/GStrIO.o \ > + m2/pge-boot/GStrLib.o \ > + m2/pge-boot/GSymbolKey.o \ > + m2/pge-boot/GSysStorage.o \ > + m2/pge-boot/Glibc.o \ > + m2/pge-boot/Gerrno.o \ > + m2/pge-boot/GUnixArgs.o \ > + m2/pge-boot/GM2LINK.o \ > + m2/pge-boot/Gtermios.o \ > + m2/pge-boot/GSysExceptions.o \ > + m2/pge-boot/Gabort.o \ > + m2/pge-boot/Gmcrts.o \ > + m2/pge-boot/main.o > + > +ifeq ($(M2_MAINTAINER),yes) > +include m2/Make-maintainer > +else > +m2/pge-boot/%.o: m2/pge-boot/%.c m2/gm2-libs/gm2-libs-host.h > + $(CXX) $(INCLUDES) -I$(srcdir)/m2/pge-boot -Im2/gm2-libs -g -c $< -o $@ > + > +m2/pge-boot/%.o: m2/pge-boot/%.cc m2/gm2-libs/gm2-libs-host.h > + $(CXX) $(INCLUDES) -I$(srcdir)/m2/pge-boot -Im2/gm2-libs -g -c $< -o $@ > + > +$(PGE): $(BUILD-PGE-O) > + +$(LINKER) $(ALL_LINKERFLAGS) $(LDFLAGS) -o $@ $(BUILD-PGE-O) -lm > + > +endif
Richard Biener <richard.guenther@gmail.com> writes: >> +M2_MAINTAINER = no >> + >> +CPP_GM2=-fpermissive -DIN_GCC -g > > Do we really need -fpermissive here? no not needed (and now removed) - thanks for spotting it. >> +GM2_1 = ./gm2 -B./stage1/m2 -g -fm2-g >> + >> +GM2_FOR_TARGET = $(STAGE_CC_WRAPPER) ./gm2 -B./ -B$(build_tooldir)/bin/ -L$(objdir)/../ld $(TFLAGS) >> + >> +TEXISRC = $(objdir)/m2/images/gnu.eps \ >> + $(srcdir)/doc/gm2.texi \ >> + m2/gm2-libs.texi \ >> + m2/gm2-ebnf.texi \ >> + m2/SYSTEM-pim.texi \ >> + m2/SYSTEM-iso.texi \ >> + m2/Builtins.texi >> + > > That will need Sphinx treatment true >> +# Define the names for selecting modula-2 in LANGUAGES. snip >> +m2.info: doc/m2.info >> + >> +m2.man: doc/m2.1 >> + >> +m2.install-man: $(DESTDIR)$(man1dir)/$(GM2_INSTALL_NAME)$(man1ext) >> + >> +$(DESTDIR)$(man1dir)/$(GM2_INSTALL_NAME)$(man1ext): doc/m2.1 installdirs >> + -rm -f $@ >> + -$(INSTALL_DATA) $< $@ >> + -chmod a-x $@ >> + >> +m2.dvi: $(TEXISRC) >> + $(TEXI2DVI) -I $(objdir)/m2 -I $(srcdir)/doc/include $(srcdir)/doc/gm2.texi -o $@ >> + >> +m2.ps: m2.dvi >> + dvips -o $@ $< >> + >> +m2.pdf: m2.ps >> + gs -q -dBATCH -dNOPAUSE -sDEVICE=pdfwrite -sOutputFile=$@ $< >> + >> +.INTERMEDIATE: gm2.pod >> + >> +m2.pod: doc/gm2.texi $(TEXISRC) >> + -$(TEXI2POD) -I $(objdir)/m2 -D m2 < $< > $@ > > Likewise for the doc parts above and below yes, sure I'll convert them >> +doc/m2.info: $(TEXISRC) >> + if test "x$(BUILD_INFO)" = xinfo; then \ >> + rm -f doc/m2.info*; \ >> + $(MAKEINFO) --no-headers -I$(objdir)/m2 -I$(srcdir)/doc/include \ >> + -o $@ $(srcdir)/doc/gm2.texi ; \ >> + else true; fi >> + >> +$(objdir)/m2/images/gnu.eps: $(srcdir)/m2/images/gnupng >> + test -d m2/images || mkdir -p m2/images >> + if [ -f $(srcdir)/m2/images/gnu.eps ] ; then \ >> + cp $(srcdir)/m2/images/gnu.eps $@ ; \ >> + else \ >> + pngtopnm $< | pnmtops -noturn > $@ ; \ >> + fi >> + >> +m2/gm2-libs.texi: gm2-libs.texi-check; @true >> + >> +gm2-libs.texi-check: m2/SYSTEM-pim.texi m2/SYSTEM-iso.texi m2/Builtins.texi \ >> + $(objdir)/m2/gm2-libs-coroutines/SYSTEM.def m2/gm2-ebnf.texi >> + python3 $(srcdir)/m2/tools-src/def2texi.py -uLibraries -s$(srcdir)/m2 -b$(objdir)/m2 > $(objdir)/m2/gm2-libs.texi >> + $(STAMP) gm2-libs.texi-check >> + >> +m2/gm2-ebnf.texi: gm2-ebnf.texi-check; @true >> + >> +gm2-ebnf.texi-check: $(PGE) $(srcdir)/m2/gm2-compiler/P0SyntaxCheck.bnf >> + $(PGE) -c -p -t -f $(srcdir)/m2/gm2-compiler/P0SyntaxCheck.bnf > m2/gm2-ebnf.texi >> + $(STAMP) gm2-ebnf.texi-check >> + >> +m2/SYSTEM-pim.texi: SYSTEM-pim-texi-check; @true >> + >> +SYSTEM-pim-texi-check: $(objdir)/m2/gm2-libs/SYSTEM.def >> + python3 $(srcdir)/m2/tools-src/def2texi.py -b$(objdir)/m2 -f$(objdir)/m2/gm2-libs/SYSTEM.def > $(objdir)/m2/SYSTEM-pim.texi >> + $(STAMP) SYSTEM-pim-texi-check >> + >> +m2/SYSTEM-iso.texi: SYSTEM-iso.texi-check; @true >> + >> +SYSTEM-iso.texi-check: $(objdir)/m2/gm2-libs-iso/SYSTEM.def >> + python3 $(srcdir)/m2/tools-src/def2texi.py -b$(objdir)/m2 -f$(objdir)/m2/gm2-libs-iso/SYSTEM.def > $(objdir)/m2/SYSTEM-iso.texi >> + $(STAMP) SYSTEM-iso.texi-check >> + >> +m2/Builtins.texi: Builtins.texi-check; @true >> + >> +Builtins.texi-check: m2/gm2-libs/Builtins.def >> + python3 $(srcdir)/m2/tools-src/def2texi.py -b./ -f$(srcdir)/m2/gm2-libs/Builtins.def > $(objdir)/m2/Builtins.texi >> + $(STAMP) Builtins.texi-check snip >> +gm2.paranoid: stage3/m2/cc1gm2$(exeext) gm2.verifyparanoid >> + >> +cc1gm2$(exeext): stage1/m2/cc1gm2$(exeext) $(m2.prev) >> + cp -p $< $@ >> + >> +stage3/m2/cc1gm2$(exeext): stage2/m2/cc1gm2$(exeext) m2/gm2-compiler-paranoid/m2flex.o \ >> + $(P) $(GM2_C_OBJS) $(BACKEND) $(LIBDEPS) $(GM2_LIBS_PARANOID) \ >> + m2/gm2-gcc/rtegraph.o plugin/m2rte$(exeext).so >> + @$(call LINK_PROGRESS,$(INDEX.m2),start) >> + +$(LLINKER) $(ALL_CFLAGS) $(LDFLAGS) -o $@ $(GM2_C_OBJS) m2/gm2-compiler-paranoid/m2flex.o \ >> + attribs.o \ >> + $(GM2_LIBS_PARANOID) \ >> + $(BACKEND) $(LIBS) m2/gm2-gcc/rtegraph.o \ >> + $(BACKENDLIBS) $(LIBSTDCXX) -lm >> + @$(call LINK_PROGRESS,$(INDEX.m2),end) >> + >> +stage2/m2/cc1gm2$(exeext): stage1/m2/cc1gm2$(exeext) m2/gm2-compiler/m2flex.o $(P) \ >> + $(GM2_C_OBJS) $(BACKEND) $(LIBDEPS) $(GM2_LIBS) \ >> + m2/gm2-gcc/rtegraph.o plugin/m2rte$(exeext).so >> + @$(call LINK_PROGRESS,$(INDEX.m2),start) >> + +$(LLINKER) $(ALL_CFLAGS) $(LDFLAGS) -o $@ $(GM2_C_OBJS) m2/gm2-compiler/m2flex.o \ >> + attribs.o \ >> + $(GM2_LIBS) \ >> + $(BACKEND) $(LIBS) m2/gm2-gcc/rtegraph.o \ >> + $(BACKENDLIBS) $(LIBSTDCXX) -lm >> + @$(call LINK_PROGRESS,$(INDEX.m2),end) >> + >> +stage1/m2/cc1gm2$(exeext): gm2$(exeext) m2/gm2-compiler-boot/m2flex.o \ >> + $(P) $(GM2_C_OBJS) $(BACKEND) $(LIBDEPS) \ >> + $(GM2_LIBS_BOOT) $(MC_LIBS) \ >> + m2/gm2-gcc/rtegraph.o plugin/m2rte$(exeext).so \ >> + m2/gm2-libs-boot/M2LINK.o \ >> + $(m2.prev) >> + @$(call LINK_PROGRESS,$(INDEX.m2),start) >> + +$(LLINKER) $(ALL_CFLAGS) $(LDFLAGS) -o $@ $(GM2_C_OBJS) m2/gm2-compiler-boot/m2flex.o \ >> + attribs.o \ >> + $(GM2_LIBS_BOOT) $(MC_LIBS) \ >> + m2/gm2-gcc/rtegraph.o m2/gm2-libs-boot/M2LINK.o \ >> + $(BACKEND) $(LIBS) $(BACKENDLIBS) >> + @$(call LINK_PROGRESS,$(INDEX.m2),end) > > It looks like you are employing your own bootstrapping scheme here? > In theory one could > use --enable-stage1-languages=m2 and the stage1 built compiler could > be used to shorten the above for stage2 and stage3? ah yes this would work and likely reduce the number of rules. > Likewise it might be feasible to provide a --with-system-gm2? sure I will look into this > Anyway, I can't spot any obvious issues in this file (but it's large). I think it might also be shortened by changing the bootstrap tool mc to only use generic rules (and avoid using the --extended-opaque specific rules) > I think exposing this to a wider audience > earlier is most important at this point. > > Thus OK. great news thanks! regards, Gaius
diff -ruw /dev/null gcc-git-devel-modula2/gcc/m2/Make-lang.in --- /dev/null 2022-08-24 16:22:16.888000070 +0100 +++ gcc-git-devel-modula2/gcc/m2/Make-lang.in 2022-10-07 20:21:18.634096743 +0100 @@ -0,0 +1,1556 @@ +# Top level -*- makefile -*- fragment for GNU M2. + +# Copyright (C) 2000-2022 Free Software Foundation, Inc. + +#This file is part of GCC. + +#GCC is free software; you can redistribute it and/or modify +#it under the terms of the GNU General Public License as published by +#the Free Software Foundation; either version 3, or (at your option) +#any later version. + +#GCC is distributed in the hope that it will be useful, +#but WITHOUT ANY WARRANTY; without even the implied warranty of +#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +#GNU General Public License for more details. + +#You should have received a copy of the GNU General Public License +#along with GCC; see the file COPYING3. If not see +#<http://www.gnu.org/licenses/>. + +GM2_MAKE_DEBUG= + +# Actual names to use when installing a native compiler. +GM2_INSTALL_NAME = $(shell echo gm2|sed '$(program_transform_name)') +GM2_TARGET_INSTALL_NAME = $(target_noncanonical)-$(shell echo gm2|sed '$(program_transform_name)') + +# Actual names to use when installing a cross-compiler. +GM2_CROSS_NAME = `echo gm2|sed '$(program_transform_cross_name)'` + +M2_MAINTAINER = no + +CPP_GM2=-fpermissive -DIN_GCC -g +GM2_1 = ./gm2 -B./stage1/m2 -g -fm2-g + +GM2_FOR_TARGET = $(STAGE_CC_WRAPPER) ./gm2 -B./ -B$(build_tooldir)/bin/ -L$(objdir)/../ld $(TFLAGS) + +TEXISRC = $(objdir)/m2/images/gnu.eps \ + $(srcdir)/doc/gm2.texi \ + m2/gm2-libs.texi \ + m2/gm2-ebnf.texi \ + m2/SYSTEM-pim.texi \ + m2/SYSTEM-iso.texi \ + m2/Builtins.texi + +# Define the names for selecting modula-2 in LANGUAGES. +m2 modula-2 modula2: gm2$(exeext) xgcc$(exeext) cc1gm2$(exeext) \ + $(GCC_PASSES) $(GCC_PARTS) +m2.serial = cc1gm2$(exeext) + +# Tell GNU make to ignore these if they exist. +.PHONY: m2 modula-2 modula2 + +GM2_PROG_DEP=gm2$(exeext) xgcc$(exeext) cc1gm2$(exeext) + +include m2/config-make +LIBSTDCXX=../$(TARGET_SUBDIR)/libstdc++-v3/src/.libs/libstdc++.a + +PGE=m2/pge$(exeext) + +SRC_PREFIX=G + +m2/gm2spec.o: $(srcdir)/m2/gm2spec.cc $(SYSTEM_H) $(GCC_H) $(CONFIG_H) \ + m2/gm2config.h $(TARGET_H) $(PLUGIN_HEADERS) \ + $(generated_files) $(C_TREE_H) insn-attr-common.h + (SHLIB_LINK='$(SHLIB_LINK)' \ + SHLIB_MULTILIB='$(SHLIB_MULTILIB)'; \ + $(COMPILER) $(ALL_COMPILERFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \ + $(DRIVER_DEFINES) \ + -DLIBSUBDIR=\"$(libsubdir)\" \ + -DPREFIX=\"$(prefix)\" \ + -c $(srcdir)/m2/gm2spec.cc $(OUTPUT_OPTION)) + +# Create the compiler driver for M2. +CFLAGS-m2/m2/gm2spec.o += $(DRIVER_DEFINES) + +GM2_OBJS = $(GCC_OBJS) prefix.o intl.o m2/gm2spec.o + +# Create the compiler driver for gm2. +gm2$(exeext): $(GM2_OBJS) $(EXTRA_GCC_OBJS) libcommon-target.a $(LIBDEPS) \ + m2/gm2config.h + +$(LINKER) $(ALL_LINKERFLAGS) $(LDFLAGS) -o $@ \ + $(GM2_OBJS) $(EXTRA_GCC_OBJS) libcommon-target.a \ + $(EXTRA_GCC_LIBS) $(LIBS) + +# Create a version of the gm2 driver which calls the cross-compiler. +gm2-cross$(exeext): gm2$(exeext) + -rm -f gm2-cross$(exeext) + cp gm2$(exeext) gm2-cross$(exeext) + +po-generated: + +# Build hooks: + +m2.all.cross: gm2-cross$(exeext) plugin/m2rte$(exeext).so + +m2.start.encap: gm2$(exeext) plugin/m2rte$(exeext).so +m2.rest.encap: + +m2.info: doc/m2.info + +m2.man: doc/m2.1 + +m2.install-man: $(DESTDIR)$(man1dir)/$(GM2_INSTALL_NAME)$(man1ext) + +$(DESTDIR)$(man1dir)/$(GM2_INSTALL_NAME)$(man1ext): doc/m2.1 installdirs + -rm -f $@ + -$(INSTALL_DATA) $< $@ + -chmod a-x $@ + +m2.dvi: $(TEXISRC) + $(TEXI2DVI) -I $(objdir)/m2 -I $(srcdir)/doc/include $(srcdir)/doc/gm2.texi -o $@ + +m2.ps: m2.dvi + dvips -o $@ $< + +m2.pdf: m2.ps + gs -q -dBATCH -dNOPAUSE -sDEVICE=pdfwrite -sOutputFile=$@ $< + +.INTERMEDIATE: gm2.pod + +m2.pod: doc/gm2.texi $(TEXISRC) + -$(TEXI2POD) -I $(objdir)/m2 -D m2 < $< > $@ + +doc/m2.info: $(TEXISRC) + if test "x$(BUILD_INFO)" = xinfo; then \ + rm -f doc/m2.info*; \ + $(MAKEINFO) --no-headers -I$(objdir)/m2 -I$(srcdir)/doc/include \ + -o $@ $(srcdir)/doc/gm2.texi ; \ + else true; fi + +$(objdir)/m2/images/gnu.eps: $(srcdir)/m2/images/gnupng + test -d m2/images || mkdir -p m2/images + if [ -f $(srcdir)/m2/images/gnu.eps ] ; then \ + cp $(srcdir)/m2/images/gnu.eps $@ ; \ + else \ + pngtopnm $< | pnmtops -noturn > $@ ; \ + fi + +m2/gm2-libs.texi: gm2-libs.texi-check; @true + +gm2-libs.texi-check: m2/SYSTEM-pim.texi m2/SYSTEM-iso.texi m2/Builtins.texi \ + $(objdir)/m2/gm2-libs-coroutines/SYSTEM.def m2/gm2-ebnf.texi + python3 $(srcdir)/m2/tools-src/def2texi.py -uLibraries -s$(srcdir)/m2 -b$(objdir)/m2 > $(objdir)/m2/gm2-libs.texi + $(STAMP) gm2-libs.texi-check + +m2/gm2-ebnf.texi: gm2-ebnf.texi-check; @true + +gm2-ebnf.texi-check: $(PGE) $(srcdir)/m2/gm2-compiler/P0SyntaxCheck.bnf + $(PGE) -c -p -t -f $(srcdir)/m2/gm2-compiler/P0SyntaxCheck.bnf > m2/gm2-ebnf.texi + $(STAMP) gm2-ebnf.texi-check + +m2/SYSTEM-pim.texi: SYSTEM-pim-texi-check; @true + +SYSTEM-pim-texi-check: $(objdir)/m2/gm2-libs/SYSTEM.def + python3 $(srcdir)/m2/tools-src/def2texi.py -b$(objdir)/m2 -f$(objdir)/m2/gm2-libs/SYSTEM.def > $(objdir)/m2/SYSTEM-pim.texi + $(STAMP) SYSTEM-pim-texi-check + +m2/SYSTEM-iso.texi: SYSTEM-iso.texi-check; @true + +SYSTEM-iso.texi-check: $(objdir)/m2/gm2-libs-iso/SYSTEM.def + python3 $(srcdir)/m2/tools-src/def2texi.py -b$(objdir)/m2 -f$(objdir)/m2/gm2-libs-iso/SYSTEM.def > $(objdir)/m2/SYSTEM-iso.texi + $(STAMP) SYSTEM-iso.texi-check + +m2/Builtins.texi: Builtins.texi-check; @true + +Builtins.texi-check: m2/gm2-libs/Builtins.def + python3 $(srcdir)/m2/tools-src/def2texi.py -b./ -f$(srcdir)/m2/gm2-libs/Builtins.def > $(objdir)/m2/Builtins.texi + $(STAMP) Builtins.texi-check + +$(objdir)/m2/gm2-compiler-boot: + test -d $@ || mkdir $@ + +$(objdir)/m2/gm2-libs-boot: + test -d $@ || mkdir $@ + +$(objdir)/m2/gm2-libiberty: + test -d $@ || mkdir $@ + +$(objdir)/m2/gm2-gcc: + test -d $@ || mkdir $@ + +$(objdir)/m2/gm2-compiler: + test -d $@ || mkdir $@ + +$(objdir)/m2/gm2-libs: + test -d $@ || mkdir $@ + +$(objdir)/m2/gm2-libs-iso: + test -d $@ || mkdir $@ + +$(objdir)/m2/gm2-libs-min: + test -d $@ || mkdir $@ + +$(objdir)/m2/gm2-compiler-paranoid: + test -d $@ || mkdir $@ + +$(objdir)/m2/gm2-libs-paranoid: + test -d $@ || mkdir $@ + +$(objdir)/m2/gm2-compiler-verify: + test -d $@ || mkdir $@ + +$(objdir)/m2/boot-bin: + test -d $@ || mkdir $@ + +$(objdir)/m2/gm2-libs-pim: + test -d $@ || mkdir $@ + +$(objdir)/m2/gm2-libs-coroutines: + test -d $@ || mkdir $@ + +stage1/m2: + -test -d $@ || mkdir -p stage1/m2 + +stage2/m2: + -test -d $@ || mkdir -p stage2/m2 + +stage3/m2: + -test -d $@ || mkdir -p stage3/m2 + +stage4/m2: + -test -d $@ || mkdir -p stage4/m2 + +# No gm2-specific selftests +selftest-m2: + +# Install hooks: +# cc1gm2 is installed elsewhere as part of $(COMPILERS). +# $(COMPILERS) is defined in `config-lang.in' + +m2.install-common: installdirs + -rm -f $(DESTDIR)$(bindir)/$(GM2_INSTALL_NAME)$(exeext) + $(INSTALL_PROGRAM) gm2$(exeext) $(DESTDIR)$(bindir)/$(GM2_INSTALL_NAME)$(exeext) + -if test -f cc1gm2$(exeext); then \ + if test -f gm2-cross$(exeext); then \ + :; \ + else \ + rm -f $(DESTDIR)$(bindir)/$(GM2_TARGET_INSTALL_NAME)$(exeext); \ + ( cd $(DESTDIR)$(bindir) && \ + $(LN) $(GM2_INSTALL_NAME)$(exeext) $(GM2_TARGET_INSTALL_NAME)$(exeext) ); \ + fi; \ + fi + -for tool in cc1gm2$(exeext); do \ + if [ -f $$tool ]; then \ + rm -f $(DESTDIR)$(libexecsubdir)/$$tool; \ + $(INSTALL_PROGRAM) $$tool $(DESTDIR)$(libexecsubdir)/$$tool; \ + chmod a+x $(DESTDIR)$(libexecsubdir)/$$tool; \ + else \ + echo "cannot find $$tool" ; \ + fi ; \ + done + +m2.install-info: installdirs + if [ -d gm2$(exeext) ] ; then \ + if [ -f $(objdir)/doc/gm2.info ]; then \ + rm -f $(DESTDIR)$(infodir)/gm2.info*; \ + for f in $(objdir)/doc/gm2.info*; do \ + realfile=`echo $$f | sed -e 's|.*/\([^/]*\)$$|\1|'`; \ + rm -f $(DESTDIR)$(infodir)/`basename $$realfile`; \ + $(INSTALL_DATA) $$f $(DESTDIR)$(infodir)/`basename $$realfile`; \ + done; \ + chmod a-x $(DESTDIR)$(infodir)/gm2.info*; \ + else true; fi; \ + else true; fi + -if [ -f gm2$(exeext) ] && [ -f $(DESTDIR)$(infodir)/gm2.info ]; then \ + if $(SHELL) -c 'install-info --version' >/dev/null 2>&1; then \ + install-info --dir-file=$(infodir)/dir $(DESTDIR)$(infodir)/gm2.info; \ + else true; fi; \ + else true; fi + +m2.install-normal: m2.install-common m2.install-info m2.install-man + +# This target will install GM2 into an existing GCC installation, +# without overwriting existing files. +# The semicolon is to prevent the install.sh -> install default rule +# from doing anything. Having it run true helps avoid problems and +# noise from versions of make which don't like to have null commands. +m2.install: m2.install-normal; @true + +gm2.install-with-gcc: $(INSTALL_HEADERS) gm2.install $(INSTALL_LIBGCC) + for file in $(GCC_PASSES); do \ + if [ x"$$file" != x"xgcc$(exeext)" ]; then \ + rm -f $(DESTDIR)$(libsubdir)/$$file; \ + $(INSTALL_PROGRAM) $$file $(DESTDIR)$(libsubdir)/$$file || exit 1; \ + fi; \ + done; exit 0 + +m2.uninstall: + -rm -rf $(bindir)/$(GM2_INSTALL_NAME) + -rm -rf $(bindir)/$(GM2_CROSS_NAME) + +m2.install-plugin: installdirs + $(mkinstalldirs) $(DESTDIR)$(plugin_resourcesdir) + $(INSTALL_PROGRAM) plugin/m2rte$(exeext).so $(DESTDIR)$(plugin_resourcesdir)/m2rte$(exeext).so + chmod a+x $(DESTDIR)$(plugin_resourcesdir)/m2rte$(exeext).so + +plugin/m2rte$(exeext).so: $(srcdir)/m2/plugin/m2rte.cc $(GCC_HEADER_DEPENDENCIES_FOR_M2) \ + insn-attr-common.h insn-flags.h $(generated_files) + test -d plugin || mkdir plugin + $(PLUGINCC) $(PLUGINCFLAGS) -fno-rtti -I. -I$(srcdir) -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 + $(PLUGINCC) $(PLUGINCFLAGS) $(PLUGINLIBS) -fno-rtti plugin/m2rte.o -shared -o $@ + + +# Clean hooks: +# A lot of the ancillary files are deleted by the main makefile. +# We just have to delete files specific to us. + +m2.mostlyclean: + -rm -f m2/*.o + +m2.clean: + -rm -f m2/*.o + -rm -f m2/gm2-libs/config.* + -rm m2/gm2-libs/gm2-libs-host.h m2/gm2config.h + +m2.extraclean: +m2.realclean: + +# Stage hooks: + +m2.stage1: stage1-start + -mv m2/*$(objext) stage1/m2 + +m2.stage2: stage2-start + -mv m2/*$(objext) stage2/m2 + +m2.stage3: stage3-start + -mv m2/*$(objext) stage3/m2 + +m2.stage4: stage4-start + -mv m2/*$(objext) stage4/m2 + +quit: force + echo "calling exit" + exit 1 + +# Rules to build the compiler, pge and mc. + +# MC_COPYRIGHT=--gpl-header --project="GNU Modula-2" +MC_COPYRIGHT= + +MC_ARGS= --olang=c++ \ + --h-file-prefix=$(SRC_PREFIX) \ + -I$(srcdir)/m2/gm2-libs \ + -I$(srcdir)/m2/gm2-compiler \ + -I$(srcdir)/m2/gm2-libiberty \ + -I$(srcdir)/m2/gm2-gcc \ + --quiet \ + $(MC_COPYRIGHT) \ + --gcc-config-system + +MCDEPS=m2/boot-bin/mc$(exeext) + +MC=m2/boot-bin/mc$(exeext) $(MC_ARGS) + +MC_LIBS=m2/mc-boot-ch/Glibc.o m2/mc-boot-ch/Gmcrts.o + +M2LINK=m2/boot-bin/mklink$(exeext) +GM2_O= +GM2_O_S3=-O +GM2_OS=-Os +GM2_G=-g -fm2-g +GM2_CPP= +# GM2_DEBUG_STRMEM=-fcpp +GM2_DEBUG_STRMEM= +GM2_FLAGS=-Wunused-variable -fsoft-check-all $(GM2_G) $(GM2_O) \ + -funbounded-by-reference -fpim -fextended-opaque \ + -Wpedantic-cast -Wpedantic-param-names -ffunction-sections \ + -fdata-sections $(GM2_CPP) # -fauto-init +GM2_ISO_FLAGS=-fsoft-check-all $(GM2_G) $(GM2_O) \ + -funbounded-by-reference -fiso -fextended-opaque \ + -Wpedantic-cast -Wpedantic-param-names -ffunction-sections \ + -fdata-sections $(GM2_CPP) +GM2_MIN_FLAGS=$(GM2_G) $(GM2_OS) \ + -funbounded-by-reference -fextended-opaque \ + -Wpedantic-cast -Wpedantic-param-names -fno-exceptions \ + -ffunction-sections -fdata-sections $(GM2_CPP) + +O2=-O2 -g +SO_O2=-O2 -g -fPIC +SO=-O0 -g -fPIC + +# Language-specific object files for the gm2 compiler. + +GM2_C_OBJS = m2/gm2-lang.o \ + m2/stor-layout.o \ + m2/m2pp.o \ + m2/gm2-gcc/m2assert.o \ + m2/gm2-gcc/m2block.o \ + m2/gm2-gcc/m2builtins.o \ + m2/gm2-gcc/m2except.o \ + m2/gm2-gcc/m2color.o \ + m2/gm2-gcc/m2configure.o \ + m2/gm2-gcc/m2convert.o \ + m2/gm2-gcc/m2decl.o \ + m2/gm2-gcc/m2expr.o \ + m2/gm2-gcc/m2linemap.o \ + m2/gm2-gcc/m2statement.o \ + m2/gm2-gcc/m2type.o \ + m2/gm2-gcc/m2tree.o \ + m2/gm2-gcc/m2treelib.o \ + m2/gm2-gcc/m2top.o \ + m2/gm2-gcc/m2misc.o \ + m2/gm2-gcc/init.o +GM2_LIBS = m2/gm2-compiler/gm2.a \ + ../$(target_subdir)/libgm2/libm2pim/.libs/libm2pim.a m2/gm2-libs-boot/choosetemp.o + +GM2_LIBS_BOOT = m2/gm2-compiler-boot/gm2.a \ + m2/gm2-libs-boot/libgm2.a \ + $(GM2-BOOT-O) +GM2_LIBS_PARANOID = m2/gm2-compiler-paranoid/gm2.a \ + m2/gm2-libs-paranoid/libgm2.a # build it again using GM2_LIBS + +gm2.paranoid: stage3/m2/cc1gm2$(exeext) gm2.verifyparanoid + +cc1gm2$(exeext): stage1/m2/cc1gm2$(exeext) $(m2.prev) + cp -p $< $@ + +stage3/m2/cc1gm2$(exeext): stage2/m2/cc1gm2$(exeext) m2/gm2-compiler-paranoid/m2flex.o \ + $(P) $(GM2_C_OBJS) $(BACKEND) $(LIBDEPS) $(GM2_LIBS_PARANOID) \ + m2/gm2-gcc/rtegraph.o plugin/m2rte$(exeext).so + @$(call LINK_PROGRESS,$(INDEX.m2),start) + +$(LLINKER) $(ALL_CFLAGS) $(LDFLAGS) -o $@ $(GM2_C_OBJS) m2/gm2-compiler-paranoid/m2flex.o \ + attribs.o \ + $(GM2_LIBS_PARANOID) \ + $(BACKEND) $(LIBS) m2/gm2-gcc/rtegraph.o \ + $(BACKENDLIBS) $(LIBSTDCXX) -lm + @$(call LINK_PROGRESS,$(INDEX.m2),end) + +stage2/m2/cc1gm2$(exeext): stage1/m2/cc1gm2$(exeext) m2/gm2-compiler/m2flex.o $(P) \ + $(GM2_C_OBJS) $(BACKEND) $(LIBDEPS) $(GM2_LIBS) \ + m2/gm2-gcc/rtegraph.o plugin/m2rte$(exeext).so + @$(call LINK_PROGRESS,$(INDEX.m2),start) + +$(LLINKER) $(ALL_CFLAGS) $(LDFLAGS) -o $@ $(GM2_C_OBJS) m2/gm2-compiler/m2flex.o \ + attribs.o \ + $(GM2_LIBS) \ + $(BACKEND) $(LIBS) m2/gm2-gcc/rtegraph.o \ + $(BACKENDLIBS) $(LIBSTDCXX) -lm + @$(call LINK_PROGRESS,$(INDEX.m2),end) + +stage1/m2/cc1gm2$(exeext): gm2$(exeext) m2/gm2-compiler-boot/m2flex.o \ + $(P) $(GM2_C_OBJS) $(BACKEND) $(LIBDEPS) \ + $(GM2_LIBS_BOOT) $(MC_LIBS) \ + m2/gm2-gcc/rtegraph.o plugin/m2rte$(exeext).so \ + m2/gm2-libs-boot/M2LINK.o \ + $(m2.prev) + @$(call LINK_PROGRESS,$(INDEX.m2),start) + +$(LLINKER) $(ALL_CFLAGS) $(LDFLAGS) -o $@ $(GM2_C_OBJS) m2/gm2-compiler-boot/m2flex.o \ + attribs.o \ + $(GM2_LIBS_BOOT) $(MC_LIBS) \ + m2/gm2-gcc/rtegraph.o m2/gm2-libs-boot/M2LINK.o \ + $(BACKEND) $(LIBS) $(BACKENDLIBS) + @$(call LINK_PROGRESS,$(INDEX.m2),end) + +# Compiling object files from source files. + +GCC_HEADER_DEPENDENCIES_FOR_M2 = $(BUILD-BOOT-H) $(TIMEVAR_H) m2/gm2config.h $(CONFIG_H) \ + $(TREE_H) $(RTL_H) $(TARGET_H) $(PLUGIN_HEADERS) \ + $(BCONFIG_H) $(CORETYPES_H) $(SYSTEM_H) \ + $(srcdir)/flags.h gtype-m2.h \ + $(generated_files) insn-attr-common.h + +m2/gm2-gcc/%.o: $(srcdir)/m2/gm2-gcc/%.cc $(GCC_HEADER_DEPENDENCIES_FOR_M2) + $(COMPILER) -c -g $(ALL_COMPILERFLAGS) \ + $(ALL_CPPFLAGS) $(INCLUDES) $< $(OUTPUT_OPTION) + +m2/gm2-gcc/m2configure.o: $(srcdir)/m2/gm2-gcc/m2configure.cc \ + $(SYSTEM_H) $(GCC_H) $(CONFIG_H) \ + m2/gm2config.h $(TARGET_H) $(PLUGIN_HEADERS) \ + $(generated_files) $(C_TREE_H) insn-attr-common.h + $(COMPILER) $(ALL_COMPILERFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \ + $(DRIVER_DEFINES) \ + -DLIBSUBDIR=\"$(libsubdir)\" \ + -DPREFIX=\"$(prefix)\" \ + -c $(srcdir)/m2/gm2-gcc/m2configure.cc $(OUTPUT_OPTION) + +m2/gm2-lang.o: $(srcdir)/m2/gm2-lang.cc gt-m2-gm2-lang.h $(GCC_HEADER_DEPENDENCIES_FOR_M2) + $(COMPILER) -c -g -I$(GM2GCC) $(ALL_COMPILERFLAGS) \ + $(ALL_CPPFLAGS) $(INCLUDES) $< $(OUTPUT_OPTION) + +m2/stor-layout.o: $(srcdir)/stor-layout.cc $(GCC_HEADER_DEPENDENCIES_FOR_M2) + $(COMPILER) -c -DSET_WORD_SIZE=INT_TYPE_SIZE $(ALL_COMPILERFLAGS) \ + $(ALL_CPPFLAGS) $(INCLUDES) $< $(OUTPUT_OPTION) + +m2/m2pp.o : $(srcdir)/m2/m2pp.cc $(GCC_HEADER_DEPENDENCIES_FOR_M2) + $(COMPILER) -c -g -DGM2 $(ALL_COMPILERFLAGS) \ + $(ALL_CPPFLAGS) $(INCLUDES) $< $(OUTPUT_OPTION) + +m2/gm2-gcc/rtegraph.o: $(srcdir)/m2/gm2-gcc/rtegraph.cc $(GCC_HEADER_DEPENDENCIES_FOR_M2) \ + gt-m2-rtegraph.h + $(COMPILER) -c -g -I$(GM2GCC) $(ALL_COMPILERFLAGS) \ + $(ALL_CPPFLAGS) $(INCLUDES) $< $(OUTPUT_OPTION) + +c-family/m2pp.o : $(srcdir)/m2/m2pp.cc $(GCC_HEADER_DEPENDENCIES_FOR_M2) + $(COMPILER) -c -g $(ALL_COMPILERFLAGS) \ + $(ALL_CPPFLAGS) $(INCLUDES) $< $(OUTPUT_OPTION) + +m2/gm2-gcc/$(SRC_PREFIX)%.h: $(srcdir)/m2/gm2-gcc/%.def $(MCDEPS) + $(MC) -o=$@ $(srcdir)/m2/gm2-gcc/$*.def + +# The following tables define the source files which are translated into C using mc +# and defines the system interface C files. + +# Core library definition modules found in gm2-libs. + +GM2-LIBS-BOOT-DEFS = \ + ASCII.def \ + Args.def \ + Assertion.def \ + Break.def \ + CmdArgs.def \ + Debug.def \ + DynamicStrings.def \ + Environment.def \ + FIO.def \ + FormatStrings.def \ + FpuIO.def \ + IO.def \ + Indexing.def \ + M2Dependent.def \ + M2EXCEPTION.def \ + M2LINK.def \ + M2RTS.def \ + NumberIO.def \ + PushBackInput.def \ + RTExceptions.def \ + SArgs.def \ + SEnvironment.def \ + SFIO.def \ + SYSTEM.def \ + Scan.def \ + StdIO.def \ + Storage.def \ + StrCase.def \ + StrIO.def \ + StrLib.def \ + StringConvert.def \ + SysExceptions.def \ + SysStorage.def \ + TimeString.def \ + UnixArgs.def \ + dtoa.def \ + errno.def \ + ldtoa.def \ + libc.def \ + libm.def \ + termios.def \ + wrapc.def \ + +# Core library implementation modules found in gm2-libs. + +GM2-LIBS-BOOT-MODS = \ + ASCII.mod \ + Args.mod \ + Assertion.mod \ + Break.mod \ + CmdArgs.mod \ + Debug.mod \ + DynamicStrings.mod \ + Environment.mod \ + FIO.mod \ + FormatStrings.mod \ + FpuIO.mod \ + IO.mod \ + Indexing.mod \ + M2Dependent.mod \ + M2EXCEPTION.mod \ + M2RTS.mod \ + NumberIO.mod \ + PushBackInput.mod \ + RTExceptions.mod \ + SArgs.mod \ + SEnvironment.mod \ + SFIO.mod \ + Scan.mod \ + Storage.mod \ + StrCase.mod \ + StrIO.mod \ + StrLib.mod \ + StringConvert.mod \ + SysStorage.mod \ + TimeString.mod \ + +# Hand translated C files and C files for definition module for "C" modules +# found in gm2-libs-ch. + +GM2-LIBS-BOOT-C = \ + StdIO.c \ + SysExceptions.c \ + choosetemp.c \ + errno.c \ + termios.c \ + wrapc.c \ + +# C++ implemented modules found in gm2-libs-ch. + +GM2-LIBS-BOOT-CC = \ + UnixArgs.cc \ + dtoa.cc \ + ldtoa.cc + +# Definition modules for the front end found in gm2-compiler. + +GM2-COMP-BOOT-DEFS = \ + FifoQueue.def \ + Lists.def \ + M2ALU.def \ + M2AsmUtil.def \ + M2Base.def \ + M2BasicBlock.def \ + M2Batch.def \ + M2Bitset.def \ + M2CaseList.def \ + M2Check.def \ + M2Code.def \ + M2ColorString.def \ + M2Comp.def \ + M2Const.def \ + M2Debug.def \ + M2DebugStack.def \ + M2Defaults.def \ + M2DriverOptions.def \ + M2Emit.def \ + M2Error.def \ + M2EvalSym.def \ + M2FileName.def \ + M2GCCDeclare.def \ + M2GenGCC.def \ + M2Graph.def \ + M2LexBuf.def \ + M2MetaError.def \ + M2Optimize.def \ + M2Options.def \ + M2Pass.def \ + M2Preprocess.def \ + M2Printf.def \ + M2Quads.def \ + M2Quiet.def \ + M2Range.def \ + M2Reserved.def \ + M2SSA.def \ + M2Scaffold.def \ + M2Scope.def \ + M2Search.def \ + M2Size.def \ + M2StackAddress.def \ + M2StackWord.def \ + M2Students.def \ + M2Swig.def \ + M2System.def \ + NameKey.def \ + ObjectFiles.def \ + Output.def \ + P0SymBuild.def \ + P0SyntaxCheck.def \ + P1Build.def \ + P1SymBuild.def \ + P2Build.def \ + P2SymBuild.def \ + P3Build.def \ + P3SymBuild.def \ + PCBuild.def \ + PCSymBuild.def \ + PHBuild.def \ + Sets.def \ + SymbolConversion.def \ + SymbolKey.def \ + SymbolTable.def \ + bnflex.def \ + m2flex.def \ + +# Implementation modules for the front end found in gm2-compiler. + +GM2-COMP-BOOT-MODS = \ + FifoQueue.mod \ + Lists.mod \ + Lists.mod \ + M2ALU.mod \ + M2AsmUtil.mod \ + M2Base.mod \ + M2BasicBlock.mod \ + M2Batch.mod \ + M2Bitset.mod \ + M2CaseList.mod \ + M2Check.mod \ + M2Code.mod \ + M2ColorString.mod \ + M2Comp.mod \ + M2Const.mod \ + M2Debug.mod \ + M2DebugStack.mod \ + M2Defaults.mod \ + M2DriverOptions.mod \ + M2Emit.mod \ + M2Error.mod \ + M2FileName.mod \ + M2GCCDeclare.mod \ + M2GenGCC.mod \ + M2Graph.mod \ + M2LexBuf.mod \ + M2MetaError.mod \ + M2Optimize.mod \ + M2Options.mod \ + M2Pass.mod \ + M2Preprocess.mod \ + M2Printf.mod \ + M2Quads.mod \ + M2Quiet.mod \ + M2Range.mod \ + M2Reserved.mod \ + M2SSA.mod \ + M2Scaffold.mod \ + M2Scope.mod \ + M2Search.mod \ + M2Size.mod \ + M2StackAddress.mod \ + M2StackWord.mod \ + M2Students.mod \ + M2Swig.mod \ + M2System.mod \ + NameKey.mod \ + NameKey.mod \ + ObjectFiles.mod \ + Output.mod \ + P0SymBuild.mod \ + P1SymBuild.mod \ + P2SymBuild.mod \ + P3SymBuild.mod \ + PCSymBuild.mod \ + Sets.mod \ + SymbolConversion.mod \ + SymbolKey.mod \ + SymbolKey.mod \ + SymbolTable.mod \ + bnflex.mod \ + +# The interface between the modula-2 front end and gimple/trees found in directory gm2-gcc. + +GM2-GCC-DEFS = \ + m2block.def \ + m2builtins.def \ + m2color.def \ + m2configure.def \ + m2convert.def \ + m2decl.def \ + m2except.def \ + m2except.def \ + m2expr.def \ + m2linemap.def \ + m2misc.def \ + m2statement.def \ + m2top.def \ + m2tree.def \ + m2treelib.def \ + m2type.def \ + +# The following lists define the source files used to build gm2 using Modula-2 +# sources directly. +# +# cc1gm2$(exeext) uses these definition modules from the core libraries. + +GM2-LIBS-DEFS = \ + ASCII.def \ + Args.def \ + Assertion.def \ + Break.def \ + Builtins.def \ + COROUTINES.def \ + CmdArgs.def \ + Debug.def \ + DynamicStrings.def \ + Environment.def \ + FIO.def \ + FormatStrings.def \ + FpuIO.def \ + GetOpt.def \ + IO.def \ + Indexing.def \ + LMathLib0.def \ + LegacyReal.def \ + M2Dependent.def \ + M2EXCEPTION.def \ + M2LINK.def \ + M2RTS.def \ + MathLib0.def \ + MemUtils.def \ + NumberIO.def \ + PushBackInput.def \ + RTExceptions.def \ + RTint.def \ + SArgs.def \ + SEnvironment.def \ + SFIO.def \ + SMathLib0.def \ + SYSTEM.def \ + Scan.def \ + StdIO.def \ + Storage.def \ + StrCase.def \ + StrIO.def \ + StrLib.def \ + StringConvert.def \ + SysStorage.def \ + TimeString.def \ + UnixArgs.def \ + cbuiltin.def \ + dtoa.def \ + ldtoa.def \ + libc.def \ + termios.def \ + wrapc.def \ + +# cc1gm2$(exeext) uses these implementation modules from the core libraries. + +GM2-LIBS-MODS = \ + ASCII.mod \ + Args.mod \ + Assertion.mod \ + Break.mod \ + Builtins.mod \ + COROUTINES.mod \ + CmdArgs.mod \ + Debug.mod \ + DynamicStrings.mod \ + Environment.mod \ + FIO.mod \ + FormatStrings.mod \ + FpuIO.mod \ + GetOpt.mod \ + IO.mod \ + Indexing.mod \ + LMathLib0.mod \ + LegacyReal.mod \ + M2Dependent.mod \ + M2EXCEPTION.mod \ + M2RTS.mod \ + MathLib0.mod \ + MemUtils.mod \ + NumberIO.mod \ + PushBackInput.mod \ + RTExceptions.mod \ + RTint.mod \ + SArgs.mod \ + SEnvironment.mod \ + SFIO.mod \ + SMathLib0.mod \ + SYSTEM.mod \ + Scan.mod \ + StdIO.mod \ + Storage.mod \ + StrCase.mod \ + StrIO.mod \ + StrLib.mod \ + StringConvert.mod \ + SysStorage.mod \ + TimeString.mod \ + +# cc1gm2$(exeext) uses these C modules from the core libraries. + +GM2-LIBS-C = \ + Selective.c \ + SysExceptions.c \ + cgetopt.c \ + choosetemp.c \ + errno.c \ + host.c \ + termios.c \ + wrapc.c \ + +# cc1gm2$(exeext) uses these C++ modules from the core libraries. + +GM2-LIBS-CC = \ + UnixArgs.cc \ + dtoa.cc \ + ldtoa.cc \ + +# cc1gm2$(exeext) uses these definition modules found in the gm2-compiler directory. + +GM2-COMP-DEFS = \ + FifoQueue.def \ + Lists.def \ + M2ALU.def \ + M2AsmUtil.def \ + M2Base.def \ + M2BasicBlock.def \ + M2Batch.def \ + M2Bitset.def \ + M2CaseList.def \ + M2Check.def \ + M2Code.def \ + M2ColorString.def \ + M2Comp.def \ + M2Const.def \ + M2Debug.def \ + M2DebugStack.def \ + M2Defaults.def \ + M2DriverOptions.def \ + M2Emit.def \ + M2Error.def \ + M2FileName.def \ + M2GCCDeclare.def \ + M2GenGCC.def \ + M2Graph.def \ + M2LexBuf.def \ + M2MetaError.def \ + M2Optimize.def \ + M2Options.def \ + M2Pass.def \ + M2Preprocess.def \ + M2Printf.def \ + M2Quads.def \ + M2Quiet.def \ + M2Range.def \ + M2Reserved.def \ + M2SSA.def \ + M2Scaffold.def \ + M2Scope.def \ + M2Search.def \ + M2Size.def \ + M2StackAddress.def \ + M2StackWord.def \ + M2Students.def \ + M2Swig.def \ + M2System.def \ + NameKey.def \ + ObjectFiles.def \ + P0SymBuild.def \ + P0SyntaxCheck.def \ + P1Build.def \ + P1SymBuild.def \ + P2Build.def \ + P2SymBuild.def \ + P3Build.def \ + P3SymBuild.def \ + PCBuild.def \ + PCSymBuild.def \ + PHBuild.def \ + Sets.def \ + SymbolConversion.def \ + SymbolKey.def \ + SymbolTable.def \ + bnflex.def \ + +# cc1gm2$(exeext) uses these implementation modules found in the gm2-compiler directory. + +GM2-COMP-MODS = \ + FifoQueue.mod \ + Lists.mod \ + M2ALU.mod \ + M2AsmUtil.mod \ + M2Base.mod \ + M2BasicBlock.mod \ + M2Batch.mod \ + M2Bitset.mod \ + M2CaseList.mod \ + M2Check.mod \ + M2Code.mod \ + M2ColorString.mod \ + M2Comp.mod \ + M2Const.mod \ + M2Debug.mod \ + M2DebugStack.mod \ + M2Defaults.mod \ + M2DriverOptions.mod \ + M2Emit.mod \ + M2Error.mod \ + M2FileName.mod \ + M2GCCDeclare.mod \ + M2GenGCC.mod \ + M2Graph.mod \ + M2LexBuf.mod \ + M2MetaError.mod \ + M2Optimize.mod \ + M2Options.mod \ + M2Pass.mod \ + M2Preprocess.mod \ + M2Printf.mod \ + M2Quads.mod \ + M2Quiet.mod \ + M2Range.mod \ + M2Reserved.mod \ + M2SSA.mod \ + M2Scaffold.mod \ + M2Scope.mod \ + M2Search.mod \ + M2Size.mod \ + M2StackAddress.mod \ + M2StackWord.mod \ + M2Students.mod \ + M2Swig.mod \ + M2System.mod \ + NameKey.mod \ + ObjectFiles.mod \ + Output.mod \ + P0SymBuild.mod \ + P1SymBuild.mod \ + P2SymBuild.mod \ + P3SymBuild.mod \ + PCSymBuild.mod \ + Sets.mod \ + SymbolConversion.mod \ + SymbolKey.mod \ + SymbolTable.mod \ + bnflex.mod \ + +# Implementation modules created by the parser generator pge from .bnf files. + +GM2-AUTO-MODS = \ + P2Build.mod \ + P3Build.mod \ + PHBuild.mod \ + PCBuild.mod \ + P1Build.mod \ + P0SyntaxCheck.mod \ + +# LIBIBERTY interface definition modules + +GM2-LIBIBERTY-DEFS = \ + choosetemp.def \ + pexecute.def + +BUILD-LIBS-BOOT-H = $(GM2-LIBS-BOOT-DEFS:%.def=m2/gm2-libs-boot/$(SRC_PREFIX)%.h) + +BUILD-LIBS-BOOT = $(BUILD-LIBS-BOOT-H) \ + $(GM2-LIBS-BOOT-MODS:%.mod=m2/gm2-libs-boot/%.o) \ + $(GM2-LIBS-BOOT-CC:%.cc=m2/gm2-libs-boot/%.o) \ + $(GM2-LIBS-BOOT-C:%.c=m2/gm2-libs-boot/%.o) + +BUILD-COMPILER-BOOT-H = $(GM2-COMP-BOOT-DEFS:%.def=m2/gm2-compiler-boot/$(SRC_PREFIX)%.h) \ + $(GM2-LIBIBERTY-DEFS:%.def=m2/gm2-libiberty/$(SRC_PREFIX)%.h) \ + $(GM2-GCC-DEFS:%.def=m2/gm2-gcc/$(SRC_PREFIX)%.h) + +BUILD-COMPILER-BOOT = $(BUILD-COMPILER-BOOT-H) \ + $(GM2-COMP-BOOT-DEFS:%.def=m2/gm2-compiler-boot/$(SRC_PREFIX)%.h) \ + $(GM2-AUTO-MODS:%.mod=m2/gm2-compiler-boot/%.o) \ + $(GM2-COMP-BOOT-MODS:%.mod=m2/gm2-compiler-boot/%.o) \ + m2/gm2-compiler-boot/m2flex.o + +BUILD-BOOT-H = m2/boot-bin/mc$(exeext) \ + $(BUILD-LIBS-BOOT-H) $(BUILD-COMPILER-BOOT-H) $(TARGET_H) $(PLUGIN_HEADERS) + +# Core library definition modules used by the modula-2 to C++ translator. + +MC-LIB-DEFS = \ + ASCII.def \ + Args.def \ + Assertion.def \ + Break.def \ + COROUTINES.def \ + CmdArgs.def \ + Debug.def \ + DynamicStrings.def \ + Environment.def \ + FIO.def \ + FormatStrings.def \ + FpuIO.def \ + IO.def \ + M2Dependent.def \ + M2EXCEPTION.def \ + M2LINK.def \ + M2RTS.def \ + MemUtils.def \ + NumberIO.def \ + PushBackInput.def \ + RTExceptions.def \ + RTco.def \ + RTint.def \ + SArgs.def \ + SFIO.def \ + SYSTEM.def \ + Selective.def \ + StdIO.def \ + Storage.def \ + StrCase.def \ + StrIO.def \ + StrLib.def \ + StringConvert.def \ + SysExceptions.def \ + SysStorage.def \ + TimeString.def \ + UnixArgs.def \ + dtoa.def \ + errno.def \ + ldtoa.def \ + libc.def \ + libm.def \ + termios.def \ + wrapc.def \ + +# Core library implementation modules used by the modula-2 to C++ translator. + +MC-LIB-MODS = \ + ASCII.mod \ + Args.mod \ + Assertion.mod \ + Break.mod \ + CmdArgs.mod \ + Debug.mod \ + DynamicStrings.mod \ + Environment.mod \ + FIO.mod \ + FormatStrings.mod \ + FpuIO.mod \ + IO.mod \ + M2Dependent.mod \ + M2EXCEPTION.mod \ + M2RTS.mod \ + MemUtils.mod \ + NumberIO.mod \ + PushBackInput.mod \ + RTExceptions.mod \ + RTint.mod \ + SArgs.mod \ + SFIO.mod \ + StdIO.mod \ + Storage.mod \ + StrCase.mod \ + StrIO.mod \ + StrLib.mod \ + StringConvert.mod \ + SysStorage.mod \ + TimeString.mod \ + +MC-LIB-BOOT-C = $(MC-LIB-MODS:%.mod=%.c) + +# Definition modules for the modula-2 to C++ translator found in mc. + +MC-DEFS = \ + Indexing.def \ + alists.def \ + decl.def \ + keyc.def \ + lists.def \ + mcComment.def \ + mcComp.def \ + mcDebug.def \ + mcError.def \ + mcFileName.def \ + mcLexBuf.def \ + mcMetaError.def \ + mcOptions.def \ + mcPreprocess.def \ + mcPretty.def \ + mcPrintf.def \ + mcQuiet.def \ + mcReserved.def \ + mcSearch.def \ + mcStack.def \ + mcStream.def \ + mcflex.def \ + mcp1.def \ + mcp2.def \ + mcp3.def \ + mcp4.def \ + mcp5.def \ + nameKey.def \ + symbolKey.def \ + varargs.def \ + wlists.def \ + +# Implementation modules for the modula-2 to C++ translator found in mc. + +MC-MODS = \ + Indexing.mod \ + alists.mod \ + decl.mod \ + keyc.mod \ + lists.mod \ + mcComment.mod \ + mcComp.mod \ + mcDebug.mod \ + mcError.mod \ + mcFileName.mod \ + mcLexBuf.mod \ + mcMetaError.mod \ + mcOptions.mod \ + mcPreprocess.mod \ + mcPretty.mod \ + mcPrintf.mod \ + mcQuiet.mod \ + mcReserved.mod \ + mcSearch.mod \ + mcStack.mod \ + mcStream.mod \ + nameKey.mod \ + symbolKey.mod \ + top.mod \ + varargs.mod \ + wlists.mod \ + +# Parser files generated by pge from .bnf files. + +MC-AUTO-MODS = \ + mcp1.mod \ + mcp2.mod \ + mcp3.mod \ + mcp4.mod \ + mcp5.mod + +MC-BOOT-C = $(MC-MODS:%.mod=%.c) $(MC-AUTO-MODS:%.mod=%.c) + +# C interface files for mc. + +MC-INTERFACE-C = \ + M2LINK.c \ + SYSTEM.c \ + Selective.c \ + SysExceptions.c \ + abort.c \ + errno.c \ + libc.c \ + mcrts.c \ + termios.c \ + wrapc.c \ + +# C++ interface files for mc. + +MC-INTERFACE-CC = \ + UnixArgs.cc \ + dtoa.cc \ + ldtoa.cc \ + +BUILD-MC-BOOT-H = $(MC-LIB-DEFS:%.def=m2/mc-boot-gen/$(SRC_PREFIX)%.h) \ + $(MC-DEFS:%.def=m2/mc-boot-gen/$(SRC_PREFIX)%.h) + +BUILD-MC-BOOT-C = $(MC-LIB-MODS:%.mod=m2/mc-boot-gen/$(SRC_PREFIX)%.c) \ + $(MC-MODS:%.mod=m2/mc-boot-gen/$(SRC_PREFIX)%.c) + +BUILD-MC-BOOT-AUTO-C = $(MC-AUTO-MODS:%.mod=m2/mc-boot-gen/$(SRC_PREFIX)%.c) + +BUILD-MC-BOOT-O = $(MC-LIB-BOOT-C:%.c=m2/mc-boot/$(SRC_PREFIX)%.o) \ + $(MC-BOOT-C:%.c=m2/mc-boot/$(SRC_PREFIX)%.o) + +BUILD-MC-INTERFACE-O = $(MC-INTERFACE-C:%.c=m2/mc-boot-ch/$(SRC_PREFIX)%.o) \ + $(MC-INTERFACE-CC:%.cc=m2/mc-boot-ch/$(SRC_PREFIX)%.o) + +GM2GCC = -I$(srcdir)/m2 -Im2 -I$(srcdir)/m2/gm2-gcc -Im2/gm2-gcc + +MCINCLUDES= -I$(srcdir)/m2/mc-boot-ch +LOCAL_INCLUDES = -I. -I$(srcdir)/../include -I$(srcdir) + +GCC_COLOR=m2/gm2-gcc/m2color.o diagnostic-color.o + +m2/boot-bin/mc$(exeext): $(BUILD-MC-BOOT-O) $(BUILD-MC-INTERFACE-O) \ + m2/mc-boot/main.o mcflex.o m2/gm2-libs-boot/RTcodummy.o + +$(LINKER) $(ALL_LINKERFLAGS) $(LDFLAGS) -o $@ $(BUILD-MC-BOOT-O) \ + $(BUILD-MC-INTERFACE-O) m2/mc-boot/main.o \ + mcflex.o m2/gm2-libs-boot/RTcodummy.o -lm + +m2/mc-boot/$(SRC_PREFIX)%.o: m2/mc-boot/$(SRC_PREFIX)%.c + $(CXX) -g -c -I. -I$(srcdir)/m2/mc-boot-ch -I$(srcdir)/m2/mc-boot -I$(srcdir)/../include -I$(srcdir) $(INCLUDES) $< -o $@ + +m2/mc-boot-ch/$(SRC_PREFIX)%.o: m2/mc-boot-ch/$(SRC_PREFIX)%.c m2/gm2-libs/gm2-libs-host.h + $(CXX) -DHAVE_CONFIG_H -g -c -I. -Im2/gm2-libs -I$(srcdir)/../include -I$(srcdir) $(INCLUDES) -Im2/gm2-libs $< -o $@ + +m2/mc-boot-ch/$(SRC_PREFIX)%.o: m2/mc-boot-ch/$(SRC_PREFIX)%.cc m2/gm2-libs/gm2-libs-host.h + $(CXX) -DHAVE_CONFIG_H -g -c -I. -Im2/gm2-libs -I$(srcdir)/../include -I$(srcdir) $(INCLUDES) -Im2/gm2-libs $< -o $@ + +m2/mc-boot/main.o: $(M2LINK) $(srcdir)/m2/init/mcinit + unset CC ; $(M2LINK) -s --langc++ --exit --name m2/mc-boot/main.c $(srcdir)/m2/init/mcinit + $(CXX) -g -c -I. -I$(srcdir)/../include -I$(srcdir) $(INCLUDES) m2/mc-boot/main.c -o $@ + +mcflex.o: mcflex.c + $(CC) -I$(srcdir)/m2/mc -g -c $< -o $@ # remember that mcReserved.h is copied into m2/mc + +mcflex.c: $(srcdir)/m2/mc/mc.flex + flex -t $< > $@ + +m2/gm2-libs-boot/%.o: $(srcdir)/m2/gm2-libs-boot/%.mod $(MCDEPS) $(BUILD-BOOT-H) + $(MC) -o=m2/gm2-libs-boot/$*.c $(srcdir)/m2/gm2-libs-boot/$*.mod + $(COMPILER) -c $(CPP_GM2) $(CFLAGS) $(MCINCLUDES) m2/gm2-libs-boot/$*.c -o $@ + +m2/gm2-libs-boot/%.o: $(srcdir)/m2/gm2-libs/%.mod $(MCDEPS) $(BUILD-BOOT-H) + $(MC) -o=m2/gm2-libs-boot/$*.c $(srcdir)/m2/gm2-libs/$*.mod + $(COMPILER) -c $(CPP_GM2) $(CFLAGS) -I$(srcdir)/m2 -Im2 -I. -Im2/gm2-libs-boot $(MCINCLUDES) $(INCLUDES) m2/gm2-libs-boot/$*.c -o $@ + +m2/gm2-libs-boot/$(SRC_PREFIX)%.h: $(srcdir)/m2/gm2-libs/%.def $(MCDEPS) + $(MC) -o=$@ $(srcdir)/m2/gm2-libs/$*.def + +m2/gm2-libs-boot/RTcodummy.o: $(srcdir)/m2/gm2-libs-ch/RTcodummy.c m2/gm2-libs/gm2-libs-host.h + $(CXX) -c -DIN_GCC $(CFLAGS) -Im2/gm2-libs -I$(srcdir)/m2 -Im2 -I. -Im2/gm2-libs-boot $(INCLUDES) $< -o $@ + +m2/gm2-libs-boot/RTintdummy.o: $(srcdir)/m2/gm2-libs-ch/RTintdummy.c m2/gm2-libs/gm2-libs-host.h + $(CXX) -c -DIN_GCC $(CFLAGS) -Im2/gm2-libs -I$(srcdir)/m2 -Im2 -I. -Im2/gm2-libs-boot $(INCLUDES) $< -o $@ + +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 + $(CXX) -c -DHAVE_CONFIG_H $(CFLAGS) -Im2/gm2-libs -I$(srcdir)/m2 -Im2 -I. -Im2/gm2-libs-boot -Im2/gm2-libs $(INCLUDES) $< -o $@ + +m2/gm2-libs-boot/M2LINK.o: $(srcdir)/m2/gm2-libs-ch/M2LINK.c m2/gm2-libs-boot/$(SRC_PREFIX)M2LINK.h m2/gm2-libs/gm2-libs-host.h + $(CXX) -c -DHAVE_CONFIG_H $(CFLAGS) -Im2/gm2-libs -I$(srcdir)/m2 -Im2 -I. -Im2/gm2-libs-boot -Im2/gm2-libs $(INCLUDES) $< -o $@ + +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 + $(CXX) -c -DIN_GCC $(CFLAGS) -Im2/gm2-libs -I$(srcdir)/m2 -Im2 -I. -Im2/gm2-libs-boot $(INCLUDES) $< -o $@ + +m2/gm2-libs-boot/choosetemp.o: m2/gm2-libs-ch/choosetemp.c m2/gm2-libiberty/Gchoosetemp.h m2/gm2-libs/gm2-libs-host.h + $(CXX) -c $(CFLAGS) -Im2/gm2-libs -I$(srcdir)/m2 -Im2 -I. -Im2/gm2-libs-boot -Im2/gm2-libiberty -I$(srcdir)/m2/gm2-libiberty/ $(INCLUDES) $< -o $@ + +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 + $(CXX) -c $(CFLAGS) -Im2/gm2-libs -I$(srcdir)/m2 -Im2 -I. -Im2/gm2-libs-boot $(INCLUDES) $< -o $@ + +m2/gm2-libs-boot/dtoa.o: $(srcdir)/m2/gm2-libs-ch/dtoa.cc m2/gm2-libs/gm2-libs-host.h + $(CXX) -c $(CFLAGS) -Im2/gm2-libs -I$(srcdir)/m2 -Im2 -I. -Im2/gm2-libs-boot $(INCLUDES) $< -o $@ + +m2/gm2-libs-boot/ldtoa.o: $(srcdir)/m2/gm2-libs-ch/ldtoa.cc m2/gm2-libs/gm2-libs-host.h + $(CXX) -c $(CFLAGS) -Im2/gm2-libs -I$(srcdir)/m2 -Im2 -I. -Im2/gm2-libs-boot $(INCLUDES) $< -o $@ + +m2/gm2-libs-boot/termios.o: $(srcdir)/m2/gm2-libs-ch/termios.c $(BUILD-LIBS-BOOT-H) m2/gm2-libs/gm2-libs-host.h + $(CXX) -c $(CFLAGS) -Im2/gm2-libs -I$(srcdir)/m2 -Im2 -I. -Im2/gm2-libs-boot $(INCLUDES) $< -o $@ + +m2/gm2-libs-boot/SysExceptions.o: $(srcdir)/m2/gm2-libs-ch/SysExceptions.c \ + m2/gm2-libs-boot/$(SRC_PREFIX)SysExceptions.h m2/gm2-libs/gm2-libs-host.h + $(CXX) -c $(CFLAGS) -Im2/gm2-libs -I$(srcdir)/m2 -Im2 -I. -Im2/gm2-libs-boot $(INCLUDES) $< -o $@ + +m2/gm2-libs-boot/SysStorage.o: $(srcdir)/m2/gm2-libs/SysStorage.mod $(MCDEPS) $(BUILD-BOOT-H) + $(MC) -o=m2/gm2-libs-boot/SysStorage.c $(srcdir)/m2/gm2-libs/SysStorage.mod + $(COMPILER) -DIN_GCC -c -fpermissive $(CFLAGS) \ + -I$(srcdir)/m2 -Im2 -I. -Im2/gm2-libs-boot $(MCINCLUDES) $(INCLUDES) \ + m2/gm2-libs-boot/SysStorage.c -o m2/gm2-libs-boot/SysStorage.o + +m2/gm2-compiler-boot/M2GCCDeclare.o: $(srcdir)/m2/gm2-compiler/M2GCCDeclare.mod $(MCDEPS) $(BUILD-BOOT-H) + $(MC) --extended-opaque -o=m2/gm2-compiler-boot/M2GCCDeclare.c $< + $(COMPILER) -c -fpermissive $(ALL_COMPILERFLAGS) $(ALL_CPPFLAGS) $(GM2GCC) \ + -I. -I$(srcdir)/../include -I$(srcdir) \ + -I. -Im2/gm2-libs-boot -Im2/gm2-compiler-boot \ + -I$(srcdir)/m2/gm2-libiberty $(MCINCLUDES) $(INCLUDES) m2/gm2-compiler-boot/M2GCCDeclare.c -o $@ + +m2/gm2-compiler-boot/M2Error.o: $(srcdir)/m2/gm2-compiler/M2Error.mod $(MCDEPS) $(BUILD-BOOT-H) + $(MC) --extended-opaque -o=m2/gm2-compiler-boot/M2Error.c $< + $(COMPILER) -c -fpermissive $(ALL_COMPILERFLAGS) $(ALL_CPPFLAGS) $(GM2GCC) \ + -I. -I$(srcdir)/../include -I$(srcdir) \ + -I. -Im2/gm2-libs-boot -Im2/gm2-compiler-boot \ + -I$(srcdir)/m2/gm2-libiberty $(MCINCLUDES) $(INCLUDES) m2/gm2-compiler-boot/M2Error.c -o $@ + +m2/gm2-compiler-boot/%.o: $(srcdir)/m2/gm2-compiler/%.mod $(BUILD-BOOT-H) $(MCDEPS) $(BUILD-BOOT-H) + $(MC) -o=m2/gm2-compiler-boot/$*.c $(srcdir)/m2/gm2-compiler/$*.mod + $(COMPILER) -c -fpermissive $(ALL_COMPILERFLAGS) $(ALL_CPPFLAGS) $(GM2GCC) \ + -I. -I$(srcdir)/../include -I$(srcdir) \ + -I. -Im2/gm2-libs-boot -Im2/gm2-compiler-boot -Im2/gm2-libiberty \ + -I$(srcdir)/m2/gm2-libiberty $(MCINCLUDES) $(INCLUDES) m2/gm2-compiler-boot/$*.c -o $@ + +m2/gm2-compiler-boot/%.o: m2/gm2-compiler-boot/%.mod $(MCDEPS) $(BUILD-BOOT-H) + $(MC) -o=m2/gm2-compiler-boot/$*.c m2/gm2-compiler-boot/$*.mod + $(COMPILER) -c -fpermissive $(ALL_COMPILERFLAGS) $(ALL_CPPFLAGS) $(GM2GCC) \ + -I. -I$(srcdir)/../include -I$(srcdir) \ + -I. -Im2/gm2-libs-boot -Im2/gm2-compiler-boot \ + -I$(srcdir)/m2/gm2-libiberty $(MCINCLUDES) $(INCLUDES) m2/gm2-compiler-boot/$*.c -o $@ + +m2/gm2-compiler-boot/$(SRC_PREFIX)%.h: $(srcdir)/m2/gm2-compiler/%.def $(MCDEPS) + $(MC) -o=$@ $(srcdir)/m2/gm2-compiler/$*.def + +m2/gm2-compiler-boot/m2flex.o: m2/gm2-compiler/m2flex.c $(BUILD-BOOT-H) $(TIMEVAR_H) \ + $(BUILD-LIBS-BOOT-H) m2/gm2-compiler-boot/$(SRC_PREFIX)NameKey.h \ + $(CONFIG_H) m2/gm2config.h $(TARGET_H) $(PLUGIN_HEADERS) + $(COMPILER) -c -g $(ALL_COMPILERFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \ + $(GM2GCC) $(INCLUDES) -I$(srcdir)/m2 \ + -Im2 -Im2/gm2-compiler-boot -Im2/gm2-libs-boot $< -o $@ + +m2/gm2-compiler/m2flex.c: $(srcdir)/m2/m2.flex $(TIMEVAR_H) insn-attr-common.h + flex -t $< | sed -e 's/ malloc/ xmalloc/' | sed -e 's/ realloc/ xrealloc/' > $@ + +m2/gm2-libiberty/$(SRC_PREFIX)%.h: $(srcdir)/m2/gm2-libiberty/%.def $(MCDEPS) + $(MC) -o=$@ $(srcdir)/m2/gm2-libiberty/$*.def + +# The rules to build objects in gm2-compiler and gm2-libs directories. + +m2/gm2-compiler/%.o: $(srcdir)/m2/gm2-compiler/%.mod + $(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 $@ + +m2/gm2-compiler/m2flex.o: m2/gm2-compiler/m2flex.c m2/gm2-libs/gm2-libs-host.h $(TIMEVAR_H) + $(COMPILER) -c -g $(ALL_COMPILERFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \ + $(GM2GCC) -Im2/gm2-compiler-boot -Im2/gm2-libs-boot $< -o $@ + +m2/gm2-compiler/%.o: m2/gm2-compiler/%.mod + $(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 $@ + +m2/gm2-libs-iso/%.o: $(srcdir)/m2/gm2-libs-iso/%.c m2/gm2-libs/gm2-libs-host.h + $(CXX) -DBUILD_GM2_LIBS_TARGET -DBUILD_GM2_LIBS -c $(CFLAGS) -Im2/gm2-libs -I$(srcdir)/m2 -Im2/gm2-libs-boot $(INCLUDES) $< -o $@ + +m2/gm2-libs-iso/%.o: $(srcdir)/m2/gm2-libs-iso/%.mod + $(GM2_1) $(GM2_ISO_FLAGS) -c -B./ -Im2/gm2-libs-iso:$(srcdir)/m2/gm2-libs-iso -I$(srcdir)/m2/gm2-libs $< -o $@ + + +# We build the cc1gm2$(exeext) from the boot stage and then proceed to build it +# again using itself. + +m2/gm2-libs/gm2-libs-host.h: + echo "Configuring to build libraries using native compiler" ; \ + NEW_SRCDIR=`${srcdir}/m2/tools-src/calcpath ../../ ${srcdir} m2/gm2-libs` ; \ + export NEW_SRCDIR ; \ + cd m2/gm2-libs ; \ + $(SHELL) -c '$${NEW_SRCDIR}/config-host \ + --srcdir=$${NEW_SRCDIR} \ + --target=$(target) \ + --program-suffix=$(exeext)' + +# Autoconf inserts -DCROSS_DIRECTORY_STRUCTURE if we are building a +# cross compiler and the ../Makefile.in above appends this to INTERNAL_CFLAGS. + +m2/gm2config.h: + NEW_SRCDIR=`${srcdir}/m2/tools-src/calcpath ../ ${srcdir} m2` ; \ + export NEW_SRCDIR ; \ + cd m2 ; \ + if echo $(INTERNAL_CFLAGS) | grep \\-DCROSS_DIRECTORY_STRUCTURE; then \ + AR=$(echo $(AR_FOR_TARGET) | sed -e "s/^ //") ; \ + export AR ; \ + RANLIB=$(echo $(RANLIB_FOR_TARGET) | sed -e "s/^ //") ; \ + export RANLIB ; \ + $(SHELL) -c '$${NEW_SRCDIR}/configure --srcdir=$${NEW_SRCDIR} \ + --target=$(target) --program-suffix=$(exeext) \ + --includedir=$(SYSTEM_HEADER_DIR) --libdir=$(libdir) \ + --libexecdir=$(libexecdir)' ; \ + else \ + $(SHELL) -c '$${NEW_SRCDIR}/configure --srcdir=$(NEW_SRCDIR) \ + --target=$(target) --program-suffix=$(exeext)' ; \ + fi + +$(objdir)/m2/gm2-libs-min/SYSTEM.def: $(GM2_PROG_DEP) + $(SHELL) $(srcdir)/m2/tools-src/makeSystem -fpim \ + $(srcdir)/m2/gm2-libs-min/SYSTEM.def \ + $(srcdir)/m2/gm2-libs-min/SYSTEM.mod \ + -I$(srcdir)/m2/gm2-libs-min:$(srcdir)/m2/gm2-libs \ + "$(GM2_FOR_TARGET)" $@ + +$(objdir)/m2/gm2-libs/SYSTEM.def: $(GM2_PROG_DEP) + echo "GM2_FOR_TARGET $(GM2_FOR_TARGET)" + echo "GCC_FOR_TARGET $(GCC_FOR_TARGET)" + $(SHELL) $(srcdir)/m2/tools-src/makeSystem -fpim \ + $(srcdir)/m2/gm2-libs/SYSTEM.def \ + $(srcdir)/m2/gm2-libs/SYSTEM.mod \ + -I$(srcdir)/m2/gm2-libs \ + "$(GM2_FOR_TARGET)" $@ + +$(objdir)/m2/gm2-libs-iso/SYSTEM.def: $(GM2_PROG_DEP) + $(SHELL) $(srcdir)/m2/tools-src/makeSystem -fiso \ + $(srcdir)/m2/gm2-libs-iso/SYSTEM.def \ + $(srcdir)/m2/gm2-libs-iso/SYSTEM.mod \ + -I$(srcdir)/m2/gm2-libs-iso:$(srcdir)/m2/gm2-libs \ + "$(GM2_FOR_TARGET)" $@ + +$(objdir)/m2/gm2-libs-coroutines/SYSTEM.def: $(GM2_PROG_DEP) + $(SHELL) $(srcdir)/m2/tools-src/makeSystem -fpim \ + $(srcdir)/m2/gm2-libs-coroutines/SYSTEM.def \ + $(srcdir)/m2/gm2-libs-coroutines/SYSTEM.mod \ + -I$(srcdir)/m2/gm2-libs-coroutines:$(srcdir)/m2/gm2-libs-iso:$(srcdir)/m2/gm2-libs \ + "$(GM2_FOR_TARGET)" $@ + +build-compiler: $(GM2-COMP-MODS:%.mod=m2/gm2-compiler/%.o) \ + $(GM2-AUTO-MODS:%.mod=m2/gm2-compiler/%.o) \ + m2/gm2-compiler/m2flex.o + +m2/gm2-compiler/gm2.a: build-compiler gm2$(exeext) + $(AR_FOR_TARGET) cr $@ $(GM2-COMP-MODS:%.mod=m2/gm2-compiler/%.o) \ + $(GM2-AUTO-MODS:%.mod=m2/gm2-compiler/%.o) + $(RANLIB) $@ + +m2/gm2-libs-boot/libgm2.a: m2/boot-bin/mc$(exeext) $(BUILD-LIBS-BOOT) + $(AR) cr $@ $(GM2-LIBS-BOOT-MODS:%.mod=m2/gm2-libs-boot/%.o) \ + $(GM2-LIBS-BOOT-CC:%.cc=m2/gm2-libs-boot/%.o) \ + $(GM2-LIBS-BOOT-C:%.c=m2/gm2-libs-boot/%.o) + $(RANLIB) $@ + +m2/gm2-compiler-boot/gm2.a: m2/boot-bin/mc$(exeext) m2/boot-bin/mklink$(exeext) \ + $(BUILD-LIBS-BOOT) $(BUILD-COMPILER-BOOT) + $(AR) cr $@ $(GM2-COMP-BOOT-MODS:%.mod=m2/gm2-compiler-boot/%.o) \ + $(GM2-AUTO-MODS:%.mod=m2/gm2-compiler-boot/%.o) + $(RANLIB) $@ + +m2/gm2-compiler-boot/gm2.a: m2/boot-bin/mc$(exeext) + +m2/boot-bin/mklink$(exeext): $(srcdir)/m2/tools-src/mklink.c + $(CXX) $(CFLAGS) -I$(srcdir)/m2 -Im2/gm2-libs-boot -Im2/gm2-compiler-boot -I$(srcdir)/m2/mc-boot-ch $(INCLUDES) $< -o $@ + +m2/gm2-compiler-boot/$(SRC_PREFIX)%.h: $(srcdir)/m2/gm2-compiler-boot/%.def $(MCDEPS) + $(MC) --quiet -o=$@ $(srcdir)/m2/gm2-compiler-boot/$*.def + +m2/gm2-compiler/%.mod: $(srcdir)/m2/gm2-compiler/%.bnf $(PGE) + $(PGE) -k -l $< -o $@ + +m2/gm2-compiler-boot/%.mod: $(srcdir)/m2/gm2-compiler/%.bnf $(PGE) + $(PGE) -k -l $< -o $@ + +check-m2: check-gm2 +check_m2: check-gm2 +check_gm2: check-gm2 +check-modula2: check-gm2 +check_modula2: check-gm2 +check-modula-2: check-gm2 +check_modula-2: check-gm2 +check_modula_2: check-gm2 + +lang_checks += check-gm2 +lang_checks_parallelized += check-gm2 +# For description see the check_$lang_parallelize comment in gcc/Makefile.in. +check_gm2_parallelize = 10000 + +check-gm2-local: $(GM2TESTSUITEDIR)/site.exp + -(rootme=`${PWD_COMMAND}`; export rootme; \ + srcdir=`cd ${srcdir}; ${PWD_COMMAND}` ; export srcdir ; \ + cd $(TESTSUITEDIR); \ + EXPECT=${EXPECT} ; export EXPECT ; \ + if [ -f $${rootme}/../expect/expect ] ; then \ + TCL_LIBRARY=`cd .. ; cd ${srcdir}/../tcl/library ; ${PWD_COMMAND}` ; \ + export TCL_LIBRARY ; fi ; \ + $(RUNTEST) --tool gm2 --directory testsuite/m2/pim/pass) + +BUILD-PGE-O = \ + m2/pge-boot/GArgs.o \ + m2/pge-boot/GASCII.o \ + m2/pge-boot/GAssertion.o \ + m2/pge-boot/Gbnflex.o \ + m2/pge-boot/GDebug.o \ + m2/pge-boot/GDynamicStrings.o \ + m2/pge-boot/GFIO.o \ + m2/pge-boot/GIndexing.o \ + m2/pge-boot/GIO.o \ + m2/pge-boot/GLists.o \ + m2/pge-boot/GM2Dependent.o \ + m2/pge-boot/GM2EXCEPTION.o \ + m2/pge-boot/GM2RTS.o \ + m2/pge-boot/GNameKey.o \ + m2/pge-boot/GNumberIO.o \ + m2/pge-boot/GOutput.o \ + m2/pge-boot/Gpge.o \ + m2/pge-boot/GPushBackInput.o \ + m2/pge-boot/GRTExceptions.o \ + m2/pge-boot/GSFIO.o \ + m2/pge-boot/GStdIO.o \ + m2/pge-boot/GStorage.o \ + m2/pge-boot/GStrCase.o \ + m2/pge-boot/GStrIO.o \ + m2/pge-boot/GStrLib.o \ + m2/pge-boot/GSymbolKey.o \ + m2/pge-boot/GSysStorage.o \ + m2/pge-boot/Glibc.o \ + m2/pge-boot/Gerrno.o \ + m2/pge-boot/GUnixArgs.o \ + m2/pge-boot/GM2LINK.o \ + m2/pge-boot/Gtermios.o \ + m2/pge-boot/GSysExceptions.o \ + m2/pge-boot/Gabort.o \ + m2/pge-boot/Gmcrts.o \ + m2/pge-boot/main.o + +ifeq ($(M2_MAINTAINER),yes) +include m2/Make-maintainer +else +m2/pge-boot/%.o: m2/pge-boot/%.c m2/gm2-libs/gm2-libs-host.h + $(CXX) $(INCLUDES) -I$(srcdir)/m2/pge-boot -Im2/gm2-libs -g -c $< -o $@ + +m2/pge-boot/%.o: m2/pge-boot/%.cc m2/gm2-libs/gm2-libs-host.h + $(CXX) $(INCLUDES) -I$(srcdir)/m2/pge-boot -Im2/gm2-libs -g -c $< -o $@ + +$(PGE): $(BUILD-PGE-O) + +$(LINKER) $(ALL_LINKERFLAGS) $(LDFLAGS) -o $@ $(BUILD-PGE-O) -lm + +endif