[gcc/devel/modula-2] New files implementing the scaffold at compile/runtime.

Gaius Mulley gaius@gcc.gnu.org
Thu Jul 7 16:02:43 GMT 2022


https://gcc.gnu.org/g:9fcf394b7c71bbc399d699c6fc41b73f78ffee01

commit 9fcf394b7c71bbc399d699c6fc41b73f78ffee01
Author: Gaius Mulley <gaius.mulley@southwales.ac.uk>
Date:   Thu Jul 7 15:58:59 2022 +0100

    New files implementing the scaffold at compile/runtime.
    
    gcc/m2/ChangeLog:
    
            * gm2-compiler/M2Scaffold.def (New file).
            * gm2-compiler/M2Scaffold.mod (New file).
            * gm2-libs-ch/M2LINK.c (New file).
            * gm2-libs/M2Dependent.def (New file).
            * gm2-libs/M2Dependent.mod (New file).
            * gm2-libs/M2LINK.def (New file).
            * m2-link-support.h (Removed file).
            * mc-boot-ch/GM2LINK.c (New file).
            * mc-boot/GM2LINK.h (New file).
    
    Signed-off-by: Gaius Mulley <gaius.mulley@southwales.ac.uk>

Diff:
---
 gcc/m2/m2-link-support.h | 197 -----------------------------------------------
 1 file changed, 197 deletions(-)

diff --git a/gcc/m2/m2-link-support.h b/gcc/m2/m2-link-support.h
deleted file mode 100644
index a68b3c9cdc3..00000000000
--- a/gcc/m2/m2-link-support.h
+++ /dev/null
@@ -1,197 +0,0 @@
-/* Link support specs for GNU Modula-2.
-   Copyright (C) 2019-2022 Free Software Foundation, Inc.
-   Contributed by Gaius Mulley <gaius.mulley@southwales.ac.uk>.
-
-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/>.  */
-
-/* The subprograms used by Modula-2 to facilitate linking are:
-   gm2l - parses the top level module and all other dependent
-          modules.  It creates a dependency tree and emits a list
-          of dependent modules.
-   gm2lcc - generates a link command for all dependent modules or
-            display module object filesystem location.
-   gm2m - parses the top level module and all other dependent
-          module and generates a Makefile from the import tree.
-   gm2lgen - generate a C or C++ scaffold from the list of modules.
-   gm2lorder - manipulate the dependent list of modules to force
-               critcal runtime modules to be initialized at the
-               beginning of the init sequence.  */
-
-/* AS run the assembler with default options.  */
-
-#define AS(INPUT,OUTPUT)  "as %a %Y " INPUT " -o " OUTPUT
-
-/* GM2CC_OPTIONS a list of all CC options used by gm2 during the
-   link scaffold generation.  */
-
-#define GM2CC_OPTIONS "%{i*} %{v*} %{m*} %{g*} %{O*} %{fPIC} %{fpic} \
-                       %{+e*} %{I*} %{MD} %{MMD} %{M} %{MM} %{MA} \
-                       %{MT*} %{MF*} -quiet "
-
-/* SCAFFOLDNAME is the basename of the scaffold C or C++ program
-   which may be automatically generated by the linking process.  */
-
-#define SCAFFOLDNAME "%b_m2"
-
-/* RM_IF_NOSAVETEMP remove the next file if save-temps is absent.  */
-
-#define RM_IF_NOSAVETEMP "%{!save-temps*:%d}"
-
-/* GM2CC compile the link scaffold either with the C or C++
-   compiler.  */
-
-#define GM2CC(INPUT,OUTPUT) \
-  "%{!fno-exceptions:cc1plus;:cc1} %1" GM2CC_OPTIONS " " INPUT " \
-     -o " RM_IF_NOSAVETEMP SCAFFOLDNAME ".s \n\
-  " AS(SCAFFOLDNAME ".s",OUTPUT) " "
-
-/* GM2LCC invoke the sub program gm2lcc with the object path options
-   and user supplied objects.  It will search for Modula-2 object
-   if they are not already present on the command line.  The
-   current module is contained in OBJECT and LST is a list of all
-   the dependant modules.  */
-
-#define GM2LCC(OBJECT,LST) \
-  "gm2lcc %{fshared} %{fpic} %{fPIC} %{B*} %{L*} %{ftarget-ar=*} \
-          %{ftarget-ranlib=*} \
-          %{fobject-path=*} %{v} --exec --startup \
-          " SCAFFOLDNAME "%O \
-          %{!fshared:--ar %:objects() %:noobjects() -o " \
-          RM_IF_NOSAVETEMP "%w%g.a } \
-          " OBJECT " \
-          %{fshared:%w%{o:%{o*}}%:nolink() %:objects() %:noobjects() \
-            %:linkargs() } " LST " "
-
-/* GM2LORDER run the gm2lorder sub program.  It generates a module
-   list LST by parsing INPUT and all dependant modules.  */
-
-#define GM2LORDER(INPUT,LST) \
-  "gm2lorder %{fruntime-modules=*} " INPUT " -o " LST " \n"
-
-/* GM2LGEN run the gm2lgen sub program which generates a C or C++
-   scaffold (SCAFFOLDSRC).  It then compiles SCAFFOLDSRC and links
-   it with all dependant modules in LST.  MAINOBJECT is the main
-   module object name containing the scaffold.  */
-
-#define GM2LGEN(LST,SCAFFOLDSRC,MAINOBJECT) \
-  "gm2lgen %{fshared} %{fshared:--terminate --exit} \
-           %{!fno-exceptions:-fcpp} " LST " -o " SCAFFOLDSRC " \n\
-   " GM2L_COMBINE(LST,SCAFFOLDSRC,MAINOBJECT)
-
-/* GM2L_COMBINE compiles the scaffold SCAFFOLDSRC and links all dependant
-   modules in LST.  MAINOBJECT is the main module object containing
-   the scaffold.  */
-
-#define GM2L_COMBINE(LST,SCAFFOLDSRC,MAINOBJECT) \
-  GM2CC(SCAFFOLDSRC,MAINOBJECT) " \n\
-   rm -f %w%d%g.a \n\
-  " GM2LCC("--mainobject " MAINOBJECT,LST)
-
-/* Pass the preprocessor options on the command line together with
-   the exec prefix.  */
-
-#define M2CPP "%{fcpp:-fcppbegin %:exec_prefix(cc1)" \
-              "      -E -lang-asm -traditional-cpp " \
-              "      %(cpp_unique_options) -fcppend}"
-
-/* Generate a list of topologically sorted dependent modules.  */
-
-#define GM2L(INPUT,OUTPUT) \
-  "gm2l %{v} " M2CPP " %{I*} %{fdef=*} %{fmod=*} " OUTPUT " " INPUT " "
-
-/* General GNU options.  */
-
-#define GENERAL_OPTIONS "%{i*} %{f*} %{+e*} %{I*} %{MD} %{MMD} %{M} \
-  %{MM} %{MA} %{MT*} %{MF*} %V"
-
-/* Run the compiler using standard GNU options.  */
-
-#define CC1GM2 "cc1gm2 " M2CPP " %(cc1_options) " GENERAL_OPTIONS
-
-/*  Generate a swig interface file and exit.  */
-
-#define SWIG "%{fswig:" CC1GM2 "%i \n\
-                 %:exit()}"
-
-/* Generate a basename.lst containing a list of all dependent modules
-   for the project and exit.  */
-
-#define MAKELIST "%{fmakelist:" GM2L("%i","%{!pipe:-o %g.l}") " |\n\
-                     gm2lorder %{fruntime-modules=*} %{!pipe:%g.l} \
-                       -o %b.lst \n\
-                     %:exit()}"
-
-/* Generate a scaffold from basename.lst and store the output source
-   into SCAFFOLDNAME.cpp and exit.  */
-
-#define MAKEINIT "%{fmakeinit:gm2lgen %{fshared} \
-                     %{fshared:--terminate --exit} \
-                     %{!fno-exceptions:-fcpp} %b.lst -o " \
-                     SCAFFOLDNAME ".cpp \n\
-                     %:exit()}"
-
-/* Display the filesystem location of the all object files in the
-   project list.  */
-
-#define REPORT_OBJECTS "gm2lcc %{fshared} %{fpic} %{fPIC} %{B*} %{L*} \
-                        %{ftarget-ar=*} %{ftarget-ranlib=*} \
-                        %{fobject-path=*} %{v} -c "
-
-/* Generate a list of modules used within a project and report the
-   object file location and exit.  */
-
-#define MODULES \
-  "%{fmodules:%{fuselist:" REPORT_OBJECTS " %b.lst}" \
-               "%{!fuselist:" GM2L("%i","%{!pipe:-o %g.l}") " |\n\
-                              gm2lorder %{fruntime-modules=*} \
-                                 %{!pipe:%g.l} -o %g.lst \n\
-                            " REPORT_OBJECTS " %g.lst} \n\
-     %:exit()}"
-
-/* MODULA_PROJECT_SUPPORT contains a list of all project support
-   sub components.  */
-
-#define MODULA_PROJECT_SUPPORT  SWIG MAKELIST MAKEINIT MODULES
-
-/* GM2 invoke cc1gm2 placing assembler output into OUTPUT given
-   source file, INPUT.  */
-
-#define GM2(INPUT,OUTPUT) CC1GM2 " -o " OUTPUT " " INPUT
-
-/* GEN_SCAFFOLD_SRC generates the string SCAFFOLDNAME ".cpp"
-   marking it for deletion if -fmakeinit is absent.  */
-
-#define GEN_SCAFFOLD_SRC \
-     "%{fmakeinit:" SCAFFOLDNAME ".cpp;:" \
-                    RM_IF_NOSAVETEMP SCAFFOLDNAME ".cpp}"
-
-/* M2LINK compile main module (providing absense of -fonlylink)
-   and link all project dependent modules.  */
-
-#define M2LINK \
-  "%{!S:%{!gm2gcc:%{!fonlylink:" GM2("%i",RM_IF_NOSAVETEMP "%g.s") " \n\
-                               " AS("%g.s","%w%b%O") " } \n\
-                   %{!fuselist:" GM2L("%i"," -o %g.l ") " \n\
-                               " GM2LORDER("%g.l","%g.lst") " \n\
-                   " GM2LGEN("%{fuselist:%b.lst;:%g.lst}",\
-                             GEN_SCAFFOLD_SRC,\
-			     RM_IF_NOSAVETEMP SCAFFOLDNAME "%O") "}}\n\
-    }"
-
-/* MODULA_LINK_SUPPORT only invoke link subprocesses if no -c option.  */
-
-#define MODULA_LINK_SUPPORT  "%{!c:" M2LINK "}"


More information about the Gcc-cvs mailing list