fmtlib / fmt

A modern formatting library
https://fmt.dev
Other
19.84k stars 2.42k forks source link

Use native c++ module support from CMake #3990

Closed yujincheng08 closed 1 month ago

yujincheng08 commented 1 month ago

Hi, fmtlib supports using FMT_MODULE to make itself a c++ module, but the implementation is building manually rather than using native support from CMake. This leads to some problems. For example, we cannot add definitions like FMT_STATIC_THOUSANDS_SEPARATOR.

I saw previous discussion https://github.com/fmtlib/fmt/issues/3429#issuecomment-1544266960 concerning native support from CMake is not yet ready. But now it has been stabilize: https://www.kitware.com/import-cmake-the-experiment-is-over. Maybe it's time to add the support?

I tried something like

add_library(fmt STATIC)
target_sources(fmt PUBLIC FILE_SET CXX_MODULES FILES fmt/src/fmt.cc)
target_include_directories(fmt PRIVATE fmt/include)
target_compile_definitions(fmt PUBLIC FMT_USE_FLOAT=0 FMT_USE_DOUBLE=0 FMT_USE_LONG_DOUBLE=0 FMT_USE_FLOAT128=0 FMT_USE_LONG_DOUBLE=0)

and it does work! (though we cannot add FMT_STATIC_THOUSANDS_SEPARATOR unless we comment out chrono.h.)

vitaut commented 1 month ago

Now that C++20 module support has been released in CMake I think it's reasonable to add it, at least as an option. Thanks for the suggestion.

yujincheng08 commented 1 month ago

@vitaut I have raised a PR for it. Lets see if it is a good start point.