How to modify gcm.cache path when using gcc-11 to build c++20 modules?

835 views Asked by At

I am trying to let xmake support gcc-11 to build c++20 modules, but I have some problems.

gcc-11 will generate the gcm.cache directory in the current directory by default. How can I modify this default path to the specified other directory?

I know that clang has a -fmodules-cache-path= option to modify the cache path of modules, but I did not find a similar option for gcc.

Does anyone know? thanks

1

There are 1 answers

1
Greg On

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>.