[build2] C++ modules: how to generate the modules-list for own library

Wilhelm Meier wilhelm.meier at hs-kl.de
Tue May 9 15:07:55 UTC 2023


I modified the buildfile again but now I'm stuck:

---
config.cxx = /usr/local/bin/avr-g++

cxx.std = experimental
cxx.features.modules = true

config.cxx.target = avr-none-none

using cxx

assert $cxx.features.modules "no modules support for $cxx.signature"

mxx{*}: extension = mpp
cxx{*}: extension = cc

exe{test00}: cxx{test00} bmi{std}@./

bmi{std}@./: mxx{../../../include/std/std}
---

Any help?
Thanks!


On 09.05.23 13:05, Wilhelm Meier via users wrote:
> Actually I'm using the following buildfile:
> ---
> config.cxx = /usr/local/bin/avr-g++
> 
> cxx.std = experimental
> cxx.features.modules = true
> 
> config.cxx.target = avr-none-none
> 
> using cxx
> 
> assert $cxx.features.modules "no modules support for $cxx.signature"
> 
> mxx{*}: extension = mpp
> cxx{*}: extension = cc
> 
> exe{test00}: cxx{test00}
> 
> cxx.modules = std=../../../include/std/std.mpp \
> std:array=../../../include/std/array.mpp \
> std:cstdint=../../../include/std/cstdint.mpp
> ---
> 
> All module interface units are *.mpp file in the
> directory ../../../include/std/.
> 
> The main TU is in test00.cc:
> ---
> import std;
> 
> int main() {
>      std::array<int, 3> arr;
> }
> ---
> 
> This gives the following errors:
> 
> [...]
> /usr/local/bin/avr-g++ -std=c++23 -fmodules-ts -finput-charset=UTF-8 -E 
> -x c++ -fpreprocessed -fdirectives-only 
> /home/lmeier/Projekte/wmucdoc/src/boards/protoboard/tests/test00.o.ii
> /usr/local/bin/avr-g++ -std=c++23 -fmodules-ts -fdiagnostics-color 
> -finput-charset=UTF-8 -fmodule-mapper=test00.o.d?@ -o test00.o -c -x c++ 
> -fpreprocessed -fdirectives-only 
> /home/lmeier/Projekte/wmucdoc/src/boards/protoboard/tests/test00.o.ii
> /home/lmeier/Projekte/wmucdoc/src/boards/protoboard/tests/test00.cc:1:1: 
> error: unknown Compiled Module Interface: no such module
> 1 | import std;
> | ^~~~~~
> In module imported at 
> /home/lmeier/Projekte/wmucdoc/src/boards/protoboard/tests/test00.cc:1:1:
> std: error: failed to read compiled module: Unknown CMI mapping
> std: note: imports must be built before being imported
> std: fatal error: returning to the gate for a mechanical issue
> compilation terminated.
> error: process /usr/local/bin/avr-g++ exited with code 1
> info: while updating 
> /home/lmeier/Projekte/wmucdoc/src/boards/protoboard/tests/obje{test00.o}
> info: while updating 
> /home/lmeier/Projekte/wmucdoc/src/boards/protoboard/tests/exe{test00.}
> info: while updating 
> /home/lmeier/Projekte/wmucdoc/src/boards/protoboard/dir{tests/}
> info: failed to update 
> /home/lmeier/Projekte/wmucdoc/src/boards/protoboard/dir{tests/}
> 
> 
> On 08.05.23 15:31, Boris Kolpackov wrote:
>> Wilhelm Meier <wilhelm.meier at hs-kl.de> writes:
>>
>>> I want to convert a own header-only library to a version using modules.
>>> Because it is a header-only library (mostly templates) I'm using module
>>> interface unit as *.cpp files in some directory structure. Seldom I 
>>> split a
>>> module in module-partitions with more than one *.cpp file.
>>>
>>> If I want to use this modules, the build-tool needs a mapping between 
>>> module
>>> names an the corresponding *.cpp files of our library.
>>
>> Is this header-only library built with build2? If so, you (normally)
>> don't need an explicit mapping. For example, if your module interface
>> is in foo.cpp, then (normally) all you need is:
>>
>> lib{foo}: mxx{foo.cpp}
> 



More information about the users mailing list