cxxmodules: incorrect modmap for OBJECT libraries
This simple project reproduces an issue where a module can't be imported from a translation unit built from an OBJECT library.
CMakeLists.txt
cmake_minimum_required(VERSION 3.28)
project(bug LANGUAGES CXX)
set(CMAKE_CXX_STANDARD 20)
add_library(foo STATIC)
target_sources(foo PUBLIC FILE_SET CXX_MODULES FILES foo.cc)
add_library(bar OBJECT bar.cc)
target_link_libraries(bar PUBLIC foo)
foo.cc
module;
export module foo;
bar.cc
import foo;
Building this fails with:
cmake --version
cmake version 3.28.1
CMake suite maintained and supported by Kitware (kitware.com/cmake).
cmake -GNinja -Bbuild
-- The CXX compiler identification is Clang 17.0.6 with GNU-like command-line
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: C:/Program Files/LLVM/bin/clang++.exe - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Configuring done (1.6s)
-- Generating done (0.0s)
-- Build files have been written to: build
ninja -C build
[5/7] Building CXX object CMakeFiles/bar.dir/bar.cc.obj
FAILED: CMakeFiles/bar.dir/bar.cc.obj
C:\PROGRA~1\LLVM\bin\CLANG_~1.EXE -O0 -std=gnu++20 -D_DEBUG -D_DLL -D_MT -Xclang --dependent-lib=msvcrtd -g -Xclang -gcodeview -MD -MT CMakeFiles/bar.dir/bar.cc.obj -MF CMakeFiles\bar.dir\bar.cc.obj.d @CMakeFiles\bar.dir\bar.cc.obj.modmap -o CMakeFiles/bar.dir/bar.cc.obj -c bar.cc
bar.cc:1:8: fatal error: module 'foo' not found
1 | import foo;
| ~~~~~~~^~~