This worked for me gcc-11
on ubuntu 22.04 (Makefile fragment):
MAPPER_DIR := /path/to/obj/dir
CXXFLAGS += -fmodules-ts '-fmodule-mapper=|@g++-mapper-server -r'$(MAPPER_DIR)
The caveat I ran into is that g++-mapper-server
won't create the root directory, so make sure its created first. You'll still have to work out dependencies so that the gcm is created/updated before the importing code is compiled.
The explanation is |
invokes a mapper process via pipe, @
resolves the process name from the gcc tools directory (cf gcc manual). The -r
option sets the root directory. Take care protecting the spaces and the |
from make
and shell.
The default mapper server takes arguments - you can tweak and play with it - here's the options on my version:
$ /usr/lib/gcc/x86_64-linux-gnu/11/g++-mapper-server --help
Usage: g++-mapper-server [OPTION...] [CONNECTION] [MAPPINGS...]
C++ Module Mapper.
-a, --accept Netmask to accept from
-f, --fallback Use fallback for missing mappings
-h, --help Print this help, then exit
-n, --noisy Print progress messages
-1, --one One connection and then exit
-r, --root DIR Root compiled module directory
-s, --sequential Process connections sequentially
-v, --version Print version number, then exit
Send SIGTERM(15) to terminate
For bug reporting instructions, please see:
<file:///usr/share/doc/gcc-11/README.Bugs>.