Skip to content

Commit

Permalink
Try to refactory the CMakeLists.txt files
Browse files Browse the repository at this point in the history
Use CXX_MODULE_STD

Cleanup after rebase
  • Loading branch information
ClausKlein committed Jan 7, 2025
1 parent b130701 commit ba624a8
Show file tree
Hide file tree
Showing 4 changed files with 27 additions and 14 deletions.
18 changes: 12 additions & 6 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@ cmake_minimum_required(VERSION 3.30...3.31)

include(cmake/prelude.cmake)

set(CMAKE_CXX_SCAN_FOR_MODULES ON)

# Set experimental flag to enable `import std` support from CMake.
# This must be enabled before C++ language support.
if(CMAKE_CXX_SCAN_FOR_MODULES)
Expand All @@ -20,7 +22,6 @@ include(cmake/variables.cmake)

set(CMAKE_CXX_STANDARD 23)
set(CMAKE_CXX_EXTENSIONS ON)
set(CMAKE_CXX_SCAN_FOR_MODULES ON)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

set(CMAKE_DEBUG_POSTFIX D)
Expand Down Expand Up @@ -48,13 +49,16 @@ if(FMT_USE_MODULES)
message(STATUS "LLVM_PREFIX=${LLVM_PREFIX}")

# /usr/local/opt/llvm/share/libc++/v1/std.cppm
set(LLVM_LIBC_SOURCE ${LLVM_PREFIX}/share/libc++/v1)
# /usr/lib/llvm-19/share/libc++/v1/std.cppm
set(LLVM_LIBC_SOURCE ${LLVM_PREFIX}/share/libc++/v1 CACHE PATH "")
file(REAL_PATH ${LLVM_PREFIX} LLVM_ROOT)
set(LLVM_ROOT ${LLVM_ROOT} CACHE PATH "")
message(STATUS "LLVM_ROOT=${LLVM_ROOT}")

if(EXISTS ${LLVM_LIBC_SOURCE}/std.cppm)
message(STATUS "LLVM_LIBC_SOURCE=${LLVM_LIBC_SOURCE}")
set(ADD_STDLIB_MODULES stdlib)
set(ADD_STDLIB_MODULES __CMAKE::CXX23)
list(APPEND CMAKE_CXX_COMPILER_IMPORT_STD 23)
endif()

add_compile_options(-fexperimental-library)
Expand Down Expand Up @@ -83,7 +87,7 @@ if(FMT_USE_MODULES)

# Tell CMake that we explicitly want `import std`.
# This will initialize the property on all targets declared after this to 1
if(CMAKE_CXX_COMPILER_IMPORT_STD)
if(26 IN_LIST CMAKE_CXX_COMPILER_IMPORT_STD)
set(CMAKE_CXX_MODULE_STD ON)
endif()

Expand All @@ -93,13 +97,14 @@ if(FMT_USE_MODULES)
endif()

message(STATUS "CMAKE_CXX_COMPILER_IMPORT_STD=${CMAKE_CXX_COMPILER_IMPORT_STD}")

message(STATUS "CMAKE_CXX_SCAN_FOR_MODULES=${CMAKE_CXX_SCAN_FOR_MODULES}")
message(STATUS "CMAKE_CXX_MODULE_STD=${CMAKE_CXX_MODULE_STD}")
message(STATUS "CPPdefinitions=${CPPdefinitions}")
else()
set(CMAKE_VERIFY_INTERFACE_HEADER_SETS ${PROJECT_IS_TOP_LEVEL})
endif()

if(CMAKE_EXPERIMENTAL_CXX_IMPORT_STD AND CMAKE_BUILD_TYPE STREQUAL Release)
if(CMAKE_CXX_MODULE_STD AND CMAKE_BUILD_TYPE STREQUAL Release)
include(cmake/example.cmake)
endif()

Expand Down Expand Up @@ -161,6 +166,7 @@ if(FMT_SEPARATE_COMPILATION)
)

if(FMT_USE_MODULES)
message(STATUS "FMT_USE_MODULES=${FMT_USE_MODULES}")
add_library(fmt::fmt_module ALIAS fmt)
# cmake-format: off
target_sources(fmt PUBLIC
Expand Down
6 changes: 3 additions & 3 deletions GNUmakefile
Original file line number Diff line number Diff line change
Expand Up @@ -34,9 +34,9 @@ check: all
-ninja -C build/dev spell-check

test:
cmake --preset ci-${hostSystemName}
cmake --build build -- -v -j 1
cmake --install build --prefix $(CURDIR)/stagedir
# cmake --preset ci-${hostSystemName} --fresh
# cmake --build build
# cmake --install build --prefix $(CURDIR)/stagedir
cmake -G Ninja -B build/tests -S tests -D CMAKE_PREFIX_PATH=$(CURDIR)/stagedir
cmake --build build/tests -- -v -j 1
ctest --test-dir build/tests
Expand Down
4 changes: 2 additions & 2 deletions module/tests/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -45,10 +45,10 @@ message(STATUS "Module tests to be built: ${ALL_TESTS}")
foreach(_file ${ALL_TESTS})
add_executable(module_${_file})
target_sources(module_${_file} PRIVATE ../../tests/${_file}.cc)
if(CMAKE_CXX_MODULE_STD)
if(CMAKE_CXX_COMPILER_IMPORT_STD)
target_link_libraries(module_${_file} fmt_module)
elseif(ADD_STDLIB_MODULES)
if(NOT CMAKE_CXX_COMPILER_IMPORT_STD AND ADD_STDLIB_MODULES)
if(NOT TARGET ${ADD_STDLIB_MODULES})
message(WARNING "ADD_STDLIB_MODULES=${ADD_STDLIB_MODULES}")
add_stdlib_module(${ADD_STDLIB_MODULES})
endif()
Expand Down
13 changes: 10 additions & 3 deletions tests/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
cmake_minimum_required(VERSION 3.30...3.31)

# Set experimental flag to enable `import std` support from CMake.
# This must be enabled before C++ language support.
set(CMAKE_EXPERIMENTAL_CXX_IMPORT_STD 0e5b6991-d74f-4b3d-a41c-cf096e0b2508)

project(fmt_test LANGUAGES CXX)

include(../cmake/folders.cmake OPTIONAL)
Expand All @@ -15,9 +19,10 @@ if(PROJECT_IS_TOP_LEVEL)
set(CMAKE_CXX_SCAN_FOR_MODULES ON)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

find_package(fmt 11.1.1.1 EXACT REQUIRED HINT ../stagedir/lib)
#XXX find_package(fmt 11.1.1.1 EXACT REQUIRED HINT ../stagedir/lib)

add_subdirectory(../module/tests module_test)
set(ADD_STDLIB_MODULES stdlib)
add_subdirectory(.. fmt_module)
endif()

# ---- Tests ----
Expand Down Expand Up @@ -45,7 +50,9 @@ else()
target_link_libraries(header-only-test fmt::fmt-header-only)
endif()

if(NOT PROJECT_IS_TOP_LEVEL)
if(PROJECT_IS_TOP_LEVEL)
add_subdirectory(../module/tests module_test)
else()
if(NOT DEFINED CMAKE_PREFIX_PATH)
set(CMAKE_PREFIX_PATH ${CMAKE_INSTALL_PREFIX})
endif()
Expand Down

0 comments on commit ba624a8

Please sign in to comment.