Hi,
Gaius wrote: > the changes do raise questions. The reason for the changes here are to > allow easy linking for modula-2 users. > $ gm2 hello.mod > for example will compile and link with all dependent modules (dependants > are generated by analysing module source imports). The gm2 driver will > add objects and libraries to the link. in more detail the gm2 driver does the following: $ gm2 -v hello.mod full output below, but to summarise and annotate: cc1gm2 generates an assembler file from hello.mod as --64 /tmp/cc8BoL3d.s -o hello.o # gm2l generates a list of all dependent modules from parsing all imports /home/gaius/opt/lib/gcc/x86_64-pc-linux-gnu/13.0.0/gm2l -v \ -I/home/gaius/opt/lib/gcc/x86_64-pc-linux-gnu/13.0.0/m2/m2pim -o \ /tmp/ccSMojUb.l hello.mod # gm2lorder reorders the critical runtime modules /home/gaius/opt/lib/gcc/x86_64-pc-linux-gnu/13.0.0/gm2lorder \ /tmp/ccSMojUb.l -o /tmp/ccHDRdde.lst # gm2lgen generates a C++ scaffold from the reordered module list /home/gaius/opt/lib/gcc/x86_64-pc-linux-gnu/13.0.0/gm2lgen -fcpp \ /tmp/ccHDRdde.lst -o a-hello_m2.cpp # cc1plus compiles the scaffold /home/gaius/opt/lib/gcc/x86_64-pc-linux-gnu/13.0.0/cc1plus -v \ -mtune=generic -march=x86-64 \ -I/home/gaius/opt/lib/gcc/x86_64-pc-linux-gnu/13.0.0/m2/m2pim \ -quiet a-hello_m2.cpp -o a-hello_m2.s as --64 a-hello_m2.s -o a-hello_m2.o # gm2lcc creates an archive from the list of modules and the scaffold /home/gaius/opt/lib/gcc/x86_64-pc-linux-gnu/13.0.0/gm2lcc \ -L/home/gaius/opt/lib/gcc/x86_64-pc-linux-gnu/13.0.0/m2/m2pim \ -ftarget-ar=/usr/bin/ar -ftarget-ranlib=/usr/bin/ranlib \ -fobject-path=/home/gaius/opt/lib/gcc/x86_64-pc-linux-gnu/13.0.0/m2/m2pim \ --exec --startup a-hello_m2.o --ar -o /tmp/ccNJ60fa.a --mainobject \ a-hello_m2.o /tmp/ccHDRdde.lst /usr/bin/ar rc /tmp/ccNJ60fa.a hello.o a-hello_m2.o /usr/bin/ranlib /tmp/ccNJ60fa.a # finally collect2 performs the link from the archive and any default libraries hope this helps regards, Gaius $ ~/opt/bin/gm2 -v hello.mod Using built-in specs. COLLECT_GCC=/home/gaius/opt/bin/gm2 COLLECT_LTO_WRAPPER=/home/gaius/opt/lib/gcc/x86_64-pc-linux-gnu/13.0.0/lto-wrapper Target: x86_64-pc-linux-gnu Configured with: /home/gaius/GM2/graft-combine/gcc-git-devel-modula2/configure --prefix=/home/gaius/opt --libexecdir=/home/gaius/opt/lib --enable-threads=posix --enable-clocale=gnu --enable-languages=m2 --enable-multilib --enable-checking --enable-long-longx --enable-bootstrap --with-build-config=bootstrap-Og Thread model: posix Supported LTO compression algorithms: zlib gcc version 13.0.0 20220519 (experimental) (GCC) COLLECT_GCC_OPTIONS='-I/home/gaius/opt/lib/gcc/x86_64-pc-linux-gnu/13.0.0/m2/m2pim' '-ftarget-ar=/usr/bin/ar' '-ftarget-ranlib=/usr/bin/ranlib' '-fobject-path=/home/gaius/opt/lib/gcc/x86_64-pc-linux-gnu/13.0.0/m2/m2pim' '-x' 'modula-2' '-fplugin=m2rte' '-L/home/gaius/opt/lib/gcc/x86_64-pc-linux-gnu/13.0.0/m2/m2pim' '-L/home/gaius/opt/lib/gcc/x86_64-pc-linux-gnu/13.0.0/m2/m2pim' '-shared-libgcc' '-v' '-mtune=generic' '-march=x86-64' '-dumpdir' 'a-' /home/gaius/opt/lib/gcc/x86_64-pc-linux-gnu/13.0.0/cc1gm2 -iplugindir=/home/gaius/opt/lib/gcc/x86_64-pc-linux-gnu/13.0.0/plugin -quiet -dumpdir a- -dumpbase hello.mod -dumpbase-ext .mod -mtune=generic -march=x86-64 -version -ftarget-ar=/usr/bin/ar -ftarget-ranlib=/usr/bin/ranlib -fobject-path=/home/gaius/opt/lib/gcc/x86_64-pc-linux-gnu/13.0.0/m2/m2pim -fplugin=m2rte -ftarget-ar=/usr/bin/ar -ftarget-ranlib=/usr/bin/ranlib -fobject-path=/home/gaius/opt/lib/gcc/x86_64-pc-linux-gnu/13.0.0/m2/m2pim -fplugin=m2rte -I/home/gaius/opt/lib/gcc/x86_64-pc-linux-gnu/13.0.0/m2/m2pim -o /tmp/cc8BoL3d.s hello.mod GNU Modula-2 1.9.5 (20220520) grafted onto GCC 13.0.0 Copyright (C) 2022 Free Software Foundation, Inc. License GPLv2: GNU GPL version 2 or later <http://gnu.org/licenses/gpl.html> This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. GNU Modula-2 (GCC) version 13.0.0 20220519 (experimental) (x86_64-pc-linux-gnu) compiled by GNU C version 13.0.0 20220519 (experimental), GMP version 6.2.1, MPFR version 4.1.0, MPC version 1.2.1, isl version isl-0.24-GMP GGC heuristics: --param ggc-min-expand=30 --param ggc-min-heapsize=4096 Versions of loaded plugins: m2rte: Unknown version. GNU Modula-2 (GCC) version 13.0.0 20220519 (experimental) (x86_64-pc-linux-gnu) compiled by GNU C version 13.0.0 20220519 (experimental), GMP version 6.2.1, MPFR version 4.1.0, MPC version 1.2.1, isl version isl-0.24-GMP GGC heuristics: --param ggc-min-expand=30 --param ggc-min-heapsize=4096 Versions of loaded plugins: m2rte: Unknown version. COLLECT_GCC_OPTIONS='-I/home/gaius/opt/lib/gcc/x86_64-pc-linux-gnu/13.0.0/m2/m2pim' '-ftarget-ar=/usr/bin/ar' '-ftarget-ranlib=/usr/bin/ranlib' '-fobject-path=/home/gaius/opt/lib/gcc/x86_64-pc-linux-gnu/13.0.0/m2/m2pim' '-x' 'modula-2' '-fplugin=m2rte' '-L/home/gaius/opt/lib/gcc/x86_64-pc-linux-gnu/13.0.0/m2/m2pim' '-L/home/gaius/opt/lib/gcc/x86_64-pc-linux-gnu/13.0.0/m2/m2pim' '-shared-libgcc' '-v' '-mtune=generic' '-march=x86-64' '-dumpdir' 'a-' as --64 /tmp/cc8BoL3d.s -o hello.o COLLECT_GCC_OPTIONS='-I/home/gaius/opt/lib/gcc/x86_64-pc-linux-gnu/13.0.0/m2/m2pim' '-ftarget-ar=/usr/bin/ar' '-ftarget-ranlib=/usr/bin/ranlib' '-fobject-path=/home/gaius/opt/lib/gcc/x86_64-pc-linux-gnu/13.0.0/m2/m2pim' '-x' 'modula-2' '-fplugin=m2rte' '-L/home/gaius/opt/lib/gcc/x86_64-pc-linux-gnu/13.0.0/m2/m2pim' '-L/home/gaius/opt/lib/gcc/x86_64-pc-linux-gnu/13.0.0/m2/m2pim' '-shared-libgcc' '-v' '-mtune=generic' '-march=x86-64' '-dumpdir' 'a-' /home/gaius/opt/lib/gcc/x86_64-pc-linux-gnu/13.0.0/gm2l -v -I/home/gaius/opt/lib/gcc/x86_64-pc-linux-gnu/13.0.0/m2/m2pim -o /tmp/ccSMojUb.l hello.mod gm2l >>> open source file: hello.mod COLLECT_GCC_OPTIONS='-I/home/gaius/opt/lib/gcc/x86_64-pc-linux-gnu/13.0.0/m2/m2pim' '-ftarget-ar=/usr/bin/ar' '-ftarget-ranlib=/usr/bin/ranlib' '-fobject-path=/home/gaius/opt/lib/gcc/x86_64-pc-linux-gnu/13.0.0/m2/m2pim' '-x' 'modula-2' '-fplugin=m2rte' '-L/home/gaius/opt/lib/gcc/x86_64-pc-linux-gnu/13.0.0/m2/m2pim' '-L/home/gaius/opt/lib/gcc/x86_64-pc-linux-gnu/13.0.0/m2/m2pim' '-shared-libgcc' '-v' '-mtune=generic' '-march=x86-64' '-dumpdir' 'a-' /home/gaius/opt/lib/gcc/x86_64-pc-linux-gnu/13.0.0/gm2lorder /tmp/ccSMojUb.l -o /tmp/ccHDRdde.lst COLLECT_GCC_OPTIONS='-I/home/gaius/opt/lib/gcc/x86_64-pc-linux-gnu/13.0.0/m2/m2pim' '-ftarget-ar=/usr/bin/ar' '-ftarget-ranlib=/usr/bin/ranlib' '-fobject-path=/home/gaius/opt/lib/gcc/x86_64-pc-linux-gnu/13.0.0/m2/m2pim' '-x' 'modula-2' '-fplugin=m2rte' '-L/home/gaius/opt/lib/gcc/x86_64-pc-linux-gnu/13.0.0/m2/m2pim' '-L/home/gaius/opt/lib/gcc/x86_64-pc-linux-gnu/13.0.0/m2/m2pim' '-shared-libgcc' '-v' '-mtune=generic' '-march=x86-64' '-dumpdir' 'a-' COLLECT_GCC_OPTIONS='-I/home/gaius/opt/lib/gcc/x86_64-pc-linux-gnu/13.0.0/m2/m2pim' '-ftarget-ar=/usr/bin/ar' '-ftarget-ranlib=/usr/bin/ranlib' '-fobject-path=/home/gaius/opt/lib/gcc/x86_64-pc-linux-gnu/13.0.0/m2/m2pim' '-x' 'modula-2' '-fplugin=m2rte' '-L/home/gaius/opt/lib/gcc/x86_64-pc-linux-gnu/13.0.0/m2/m2pim' '-L/home/gaius/opt/lib/gcc/x86_64-pc-linux-gnu/13.0.0/m2/m2pim' '-shared-libgcc' '-v' '-mtune=generic' '-march=x86-64' '-dumpdir' 'a-' /home/gaius/opt/lib/gcc/x86_64-pc-linux-gnu/13.0.0/gm2lgen -fcpp /tmp/ccHDRdde.lst -o a-hello_m2.cpp COLLECT_GCC_OPTIONS='-I/home/gaius/opt/lib/gcc/x86_64-pc-linux-gnu/13.0.0/m2/m2pim' '-ftarget-ar=/usr/bin/ar' '-ftarget-ranlib=/usr/bin/ranlib' '-fobject-path=/home/gaius/opt/lib/gcc/x86_64-pc-linux-gnu/13.0.0/m2/m2pim' '-x' 'modula-2' '-fplugin=m2rte' '-L/home/gaius/opt/lib/gcc/x86_64-pc-linux-gnu/13.0.0/m2/m2pim' '-L/home/gaius/opt/lib/gcc/x86_64-pc-linux-gnu/13.0.0/m2/m2pim' '-shared-libgcc' '-v' '-mtune=generic' '-march=x86-64' '-dumpdir' 'a-' /home/gaius/opt/lib/gcc/x86_64-pc-linux-gnu/13.0.0/cc1plus -v -mtune=generic -march=x86-64 -I/home/gaius/opt/lib/gcc/x86_64-pc-linux-gnu/13.0.0/m2/m2pim -quiet a-hello_m2.cpp -o a-hello_m2.s ignoring nonexistent directory "/home/gaius/opt/lib/gcc/x86_64-pc-linux-gnu/13.0.0/../../../../x86_64-pc-linux-gnu/include" #include "..." search starts here: #include <...> search starts here: /home/gaius/opt/lib/gcc/x86_64-pc-linux-gnu/13.0.0/m2/m2pim /home/gaius/opt/lib/gcc/x86_64-pc-linux-gnu/13.0.0/../../../../include/c++/13.0.0 /home/gaius/opt/lib/gcc/x86_64-pc-linux-gnu/13.0.0/../../../../include/c++/13.0.0/x86_64-pc-linux-gnu /home/gaius/opt/lib/gcc/x86_64-pc-linux-gnu/13.0.0/../../../../include/c++/13.0.0/backward /home/gaius/opt/lib/gcc/x86_64-pc-linux-gnu/13.0.0/include /usr/local/include /home/gaius/opt/include /home/gaius/opt/lib/gcc/x86_64-pc-linux-gnu/13.0.0/include-fixed /usr/include End of search list. COLLECT_GCC_OPTIONS='-I/home/gaius/opt/lib/gcc/x86_64-pc-linux-gnu/13.0.0/m2/m2pim' '-ftarget-ar=/usr/bin/ar' '-ftarget-ranlib=/usr/bin/ranlib' '-fobject-path=/home/gaius/opt/lib/gcc/x86_64-pc-linux-gnu/13.0.0/m2/m2pim' '-x' 'modula-2' '-fplugin=m2rte' '-L/home/gaius/opt/lib/gcc/x86_64-pc-linux-gnu/13.0.0/m2/m2pim' '-L/home/gaius/opt/lib/gcc/x86_64-pc-linux-gnu/13.0.0/m2/m2pim' '-shared-libgcc' '-v' '-mtune=generic' '-march=x86-64' '-dumpdir' 'a-' as --64 a-hello_m2.s -o a-hello_m2.o COLLECT_GCC_OPTIONS='-I/home/gaius/opt/lib/gcc/x86_64-pc-linux-gnu/13.0.0/m2/m2pim' '-ftarget-ar=/usr/bin/ar' '-ftarget-ranlib=/usr/bin/ranlib' '-fobject-path=/home/gaius/opt/lib/gcc/x86_64-pc-linux-gnu/13.0.0/m2/m2pim' '-x' 'modula-2' '-fplugin=m2rte' '-L/home/gaius/opt/lib/gcc/x86_64-pc-linux-gnu/13.0.0/m2/m2pim' '-L/home/gaius/opt/lib/gcc/x86_64-pc-linux-gnu/13.0.0/m2/m2pim' '-shared-libgcc' '-v' '-mtune=generic' '-march=x86-64' '-dumpdir' 'a-' rm -f /tmp/ccNJ60fa.a COLLECT_GCC_OPTIONS='-I/home/gaius/opt/lib/gcc/x86_64-pc-linux-gnu/13.0.0/m2/m2pim' '-ftarget-ar=/usr/bin/ar' '-ftarget-ranlib=/usr/bin/ranlib' '-fobject-path=/home/gaius/opt/lib/gcc/x86_64-pc-linux-gnu/13.0.0/m2/m2pim' '-x' 'modula-2' '-fplugin=m2rte' '-L/home/gaius/opt/lib/gcc/x86_64-pc-linux-gnu/13.0.0/m2/m2pim' '-L/home/gaius/opt/lib/gcc/x86_64-pc-linux-gnu/13.0.0/m2/m2pim' '-shared-libgcc' '-v' '-mtune=generic' '-march=x86-64' '-dumpdir' 'a-' /home/gaius/opt/lib/gcc/x86_64-pc-linux-gnu/13.0.0/gm2lcc -L/home/gaius/opt/lib/gcc/x86_64-pc-linux-gnu/13.0.0/m2/m2pim -L/home/gaius/opt/lib/gcc/x86_64-pc-linux-gnu/13.0.0/m2/m2pim -ftarget-ar=/usr/bin/ar -ftarget-ranlib=/usr/bin/ranlib -fobject-path=/home/gaius/opt/lib/gcc/x86_64-pc-linux-gnu/13.0.0/m2/m2pim -v --exec --startup a-hello_m2.o --ar -o /tmp/ccNJ60fa.a --mainobject a-hello_m2.o /tmp/ccHDRdde.lst /usr/bin/ar rc /tmp/ccNJ60fa.a hello.o a-hello_m2.o /usr/bin/ranlib /tmp/ccNJ60fa.a COLLECT_GCC_OPTIONS='-I/home/gaius/opt/lib/gcc/x86_64-pc-linux-gnu/13.0.0/m2/m2pim' '-ftarget-ar=/usr/bin/ar' '-ftarget-ranlib=/usr/bin/ranlib' '-fobject-path=/home/gaius/opt/lib/gcc/x86_64-pc-linux-gnu/13.0.0/m2/m2pim' '-x' 'modula-2' '-fplugin=m2rte' '-L/home/gaius/opt/lib/gcc/x86_64-pc-linux-gnu/13.0.0/m2/m2pim' '-L/home/gaius/opt/lib/gcc/x86_64-pc-linux-gnu/13.0.0/m2/m2pim' '-shared-libgcc' '-v' '-mtune=generic' '-march=x86-64' '-dumpdir' 'a-' COMPILER_PATH=/home/gaius/opt/lib/gcc/x86_64-pc-linux-gnu/13.0.0/:/home/gaius/opt/lib/gcc/x86_64-pc-linux-gnu/13.0.0/:/home/gaius/opt/lib/gcc/x86_64-pc-linux-gnu/:/home/gaius/opt/lib/gcc/x86_64-pc-linux-gnu/13.0.0/:/home/gaius/opt/lib/gcc/x86_64-pc-linux-gnu/ LIBRARY_PATH=/home/gaius/opt/lib/gcc/x86_64-pc-linux-gnu/13.0.0/:/home/gaius/opt/lib/gcc/x86_64-pc-linux-gnu/13.0.0/../../../../lib64/:/lib/x86_64-linux-gnu/:/lib/../lib64/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib64/:/home/gaius/opt/lib/gcc/x86_64-pc-linux-gnu/13.0.0/../../../:/lib/:/usr/lib/ COLLECT_GCC_OPTIONS='-I/home/gaius/opt/lib/gcc/x86_64-pc-linux-gnu/13.0.0/m2/m2pim' '-ftarget-ar=/usr/bin/ar' '-ftarget-ranlib=/usr/bin/ranlib' '-fobject-path=/home/gaius/opt/lib/gcc/x86_64-pc-linux-gnu/13.0.0/m2/m2pim' '-x' 'modula-2' '-fplugin=m2rte' '-L/home/gaius/opt/lib/gcc/x86_64-pc-linux-gnu/13.0.0/m2/m2pim' '-L/home/gaius/opt/lib/gcc/x86_64-pc-linux-gnu/13.0.0/m2/m2pim' '-shared-libgcc' '-v' '-mtune=generic' '-march=x86-64' '-dumpdir' 'a.' /home/gaius/opt/lib/gcc/x86_64-pc-linux-gnu/13.0.0/collect2 -plugin /home/gaius/opt/lib/gcc/x86_64-pc-linux-gnu/13.0.0/liblto_plugin.so -plugin-opt=/home/gaius/opt/lib/gcc/x86_64-pc-linux-gnu/13.0.0/lto-wrapper -plugin-opt=-fresolution=/tmp/ccyNQjVa.res -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc --eh-frame-hdr -m elf_x86_64 -dynamic-linker /lib64/ld-linux-x86-64.so.2 /lib/x86_64-linux-gnu/crt1.o /lib/x86_64-linux-gnu/crti.o /home/gaius/opt/lib/gcc/x86_64-pc-linux-gnu/13.0.0/crtbegin.o -L/home/gaius/opt/lib/gcc/x86_64-pc-linux-gnu/13.0.0/m2/m2pim -L/home/gaius/opt/lib/gcc/x86_64-pc-linux-gnu/13.0.0/m2/m2pim -L/home/gaius/opt/lib/gcc/x86_64-pc-linux-gnu/13.0.0 -L/home/gaius/opt/lib/gcc/x86_64-pc-linux-gnu/13.0.0/../../../../lib64 -L/lib/x86_64-linux-gnu -L/lib/../lib64 -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib64 -L/home/gaius/opt/lib/gcc/x86_64-pc-linux-gnu/13.0.0/../../.. /tmp/ccNJ60fa.a -lm2pim -lpthread -lstdc++ -lgcc_eh -lgcc_s -lgcc -lc -lgcc_s -lgcc /home/gaius/opt/lib/gcc/x86_64-pc-linux-gnu/13.0.0/crtend.o /lib/x86_64-linux-gnu/crtn.o COLLECT_GCC_OPTIONS='-I/home/gaius/opt/lib/gcc/x86_64-pc-linux-gnu/13.0.0/m2/m2pim' '-ftarget-ar=/usr/bin/ar' '-ftarget-ranlib=/usr/bin/ranlib' '-fobject-path=/home/gaius/opt/lib/gcc/x86_64-pc-linux-gnu/13.0.0/m2/m2pim' '-x' 'modula-2' '-fplugin=m2rte' '-L/home/gaius/opt/lib/gcc/x86_64-pc-linux-gnu/13.0.0/m2/m2pim' '-L/home/gaius/opt/lib/gcc/x86_64-pc-linux-gnu/13.0.0/m2/m2pim' '-shared-libgcc' '-v' '-mtune=generic' '-march=x86-64' '-dumpdir' 'a.'