Skip to content

Commit 6c85396

Browse files
committed
To compile fmt module define FMT_MODULE
1 parent b515252 commit 6c85396

File tree

5 files changed

+50
-18
lines changed

5 files changed

+50
-18
lines changed

CMakeLists.txt

Lines changed: 33 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -11,20 +11,37 @@ project(fmt
1111

1212
include(cmake/variables.cmake)
1313

14-
# XXX NO! set(CPPdefinitions FMT_ATTACH_TO_GLOBAL_MODULE)
15-
set(CPPdefinitions)
16-
17-
set(CMAKE_VERIFY_INTERFACE_HEADER_SETS ${PROJECT_IS_TOP_LEVEL})
1814
set(CMAKE_DEBUG_POSTFIX D)
15+
set(CPPdefinitions)
1916

20-
# TODO: option(FMT_SEPARATE_COMPILATION "build fmt lib too" ${PROJECT_IS_TOP_LEVEL})
21-
option(FMT_USE_MODULES "Export a CXX_MODULE asio if possible" ${FMT_SEPARATE_COMPILATION})
22-
option(FMT_IMPORT_STD "Import the CXX_MODULE std if possible" OFF)
17+
option(FMT_SEPARATE_COMPILATION "build fmt lib too" ${PROJECT_IS_TOP_LEVEL})
18+
option(FMT_USE_MODULES "Export a CXX_MODULE asio if possible" ${PROJECT_IS_TOP_LEVEL})
19+
# TODO: option(FMT_IMPORT_STD "Import the CXX_MODULE std if possible" ${FMT_USE_MODULES})
2320

2421
if(FMT_IMPORT_STD)
25-
set(CPPdefinitions FMT_IMPORT_STD)
22+
list(APPEND CPPdefinitions FMT_IMPORT_STD)
23+
endif()
24+
25+
if(FMT_USE_MODULES)
26+
list(APPEND CPPdefinitions FMT_MODULE)
27+
# XXX NO! list(APPEND CPPdefinitions FMT_ATTACH_TO_GLOBAL_MODULE)
28+
# FIXME: add_compile_options(-Wno-reserved-module-identifier -Wno-include-angled-in-module-purview)
29+
30+
if(FMT_IMPORT_STD) # FIXME: clang++ only! AND $ENV{LLVM_ROOT})
31+
set(CMAKE_CXX_COMPILER_IMPORT_STD 23)
32+
add_compile_options(-fexperimental-library)
33+
add_link_options(-lc++experimental)
34+
add_compile_options(-stdlib=libc++)
35+
add_link_options(-stdlib=libc++)
36+
37+
message(STATUS "CMAKE_CXX_COMPILER_IMPORT_STD=${CMAKE_CXX_COMPILER_IMPORT_STD}")
38+
endif()
39+
40+
message(STATUS "CPPdefinitions=${CPPdefinitions}")
41+
else()
42+
set(CMAKE_VERIFY_INTERFACE_HEADER_SETS ${PROJECT_IS_TOP_LEVEL})
2643
endif()
27-
#
44+
2845
# ---- add dependency libraries ----
2946

3047
include(cmake/CPM.cmake)
@@ -66,7 +83,6 @@ target_compile_options(fmt-header-only INTERFACE $<$<AND:$<COMPILE_LANGUAGE:CXX>
6683

6784
if(FMT_SEPARATE_COMPILATION)
6885
file(GLOB_RECURSE _fmt_all_sources "${fmt_SOURCE_DIR}/src/*.cc")
69-
set(_fmt_sources ${fmt_SOURCE_DIR}/src/fmt.cc)
7086

7187
add_library(fmt)
7288
add_library(fmt::fmt ALIAS fmt)
@@ -79,19 +95,22 @@ if(FMT_SEPARATE_COMPILATION)
7995
)
8096

8197
if(FMT_USE_MODULES)
82-
target_compile_definitions(fmt PUBLIC USE_MODULES ${CPPdefinitions})
98+
target_compile_definitions(fmt PUBLIC ${CPPdefinitions})
8399
# cmake-format: off
84100
target_sources(fmt PUBLIC
85101
FILE_SET public_modules
86102
TYPE CXX_MODULES
87-
BASE_DIRS ${PROJECT_SOURCE_DIR}
103+
BASE_DIRS
104+
#NO! ${fmt_SOURCE_DIR}
105+
${PROJECT_SOURCE_DIR}/module
88106
FILES
107+
#NO! ${_fmt_all_sources}
89108
${PROJECT_SOURCE_DIR}/module/fmt.cppm
90109
)
91110
# cmake-format: on
92111
else()
93-
target_compile_definitions(fmt PUBLIC FMT_SEPARATE_COMPILATION ${CPPdefinitions})
94-
target_sources(fmt PUBLIC ${_fmt_sources})
112+
target_compile_definitions(fmt PUBLIC ${CPPdefinitions})
113+
target_sources(fmt PUBLIC ${_fmt_all_sources})
95114
endif()
96115

97116
if(FMT_WARNINGS_AS_ERRORS AND FMT_DEVELOPER_MODE AND UNIX)

CMakePresets.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,8 +49,8 @@
4949
"This preset makes sure the project actually builds with at least the specified standard",
5050
"hidden": true,
5151
"cacheVariables": {
52-
"CMAKE_CXX_EXTENSIONS": "OFF",
53-
"CMAKE_CXX_STANDARD": "20",
52+
"CMAKE_CXX_EXTENSIONS": "ON",
53+
"CMAKE_CXX_STANDARD": "23",
5454
"CMAKE_CXX_STANDARD_REQUIRED": "ON"
5555
}
5656
},

GNUmakefile

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,17 @@ MAKEFLAGS+= --warn-undefined-variables
88

99
export hostSystemName=$(shell uname)
1010

11+
ifeq (${hostSystemName},Darwin)
12+
export LLVM_PREFIX:=$(shell brew --prefix llvm@19)
13+
export LLVM_ROOT:=$(shell realpath ${LLVM_PREFIX})
14+
15+
export LDFLAGS?=-L${LLVM_ROOT}/lib/c++
16+
export PATH:=${LLVM_ROOT}/bin:${PATH}
17+
export CXX:=clang++
18+
else ifeq (${UNAME},Linux)
19+
export LLVM_ROOT:=/usr/lib/llvm-19
20+
endif
21+
1122
.PHONY: all check test format clean distclean
1223
all: .init
1324
cmake --workflow --preset dev --fresh

cmake/install-rules.cmake

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,14 @@ set(FMT_INSTALL_CMAKEDIR "${CMAKE_INSTALL_LIBDIR}/cmake/${_package}"
1616
mark_as_advanced(FMT_INSTALL_CMAKEDIR)
1717

1818
install(TARGETS fmt-header-only EXPORT fmtTargets FILE_SET HEADERS)
19-
install(FILES module/fmt.cppm DESTINATION ${FMT_INSTALL_CMAKEDIR}/module)
2019

2120
if(FMT_USE_MODULES)
2221
install(TARGETS fmt EXPORT fmtTargets FILE_SET public_headers FILE_SET public_modules
2322
DESTINATION ${FMT_INSTALL_CMAKEDIR}/module
2423
)
24+
install(FILES ${_fmt_all_sources} DESTINATION ${FMT_INSTALL_CMAKEDIR}/module)
25+
else()
26+
install(FILES module/fmt.cppm DESTINATION ${FMT_INSTALL_CMAKEDIR}/module)
2527
endif()
2628

2729
write_basic_package_version_file("${_package}ConfigVersion.cmake" COMPATIBILITY SameMajorVersion ARCH_INDEPENDENT)

tests/header-only-test.cc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
// Header-only configuration test
22

3-
#ifdef FMT_USE_MODULES
3+
#ifdef FMT_MODULE
44
import fmt;
55
#else
66
# include "fmt/base.h"

0 commit comments

Comments
 (0)