Skip to content

Commit

Permalink
Fix Linux build with std modules
Browse files Browse the repository at this point in the history
  • Loading branch information
ClausKlein committed Jan 7, 2025
1 parent e7be420 commit b130701
Show file tree
Hide file tree
Showing 3 changed files with 30 additions and 20 deletions.
41 changes: 22 additions & 19 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -37,28 +37,31 @@ if(FMT_USE_MODULES)
list(APPEND CPPdefinitions FMT_MODULE)
# FIXME: NO! list(APPEND CPPdefinitions FMT_ATTACH_TO_GLOBAL_MODULE)

if(APPLE)
if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 20.0)
execute_process(OUTPUT_VARIABLE LLVM_PREFIX COMMAND brew --prefix llvm@20 COMMAND_ECHO STDOUT)
if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 19.0)
if(APPLE)
execute_process(OUTPUT_VARIABLE LLVM_PREFIX COMMAND brew --prefix llvm@19 COMMAND_ECHO STDOUT)
string(STRIP ${LLVM_PREFIX} LLVM_PREFIX)
message(STATUS "LLVM_PREFIX=${LLVM_PREFIX}")

# /usr/local/opt/llvm/share/libc++/v1/std.cppm
set(LLVM_LIBC_SOURCE ${LLVM_PREFIX}/share/libc++/v1)
file(REAL_PATH ${LLVM_PREFIX} LLVM_ROOT)
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)
endif()

add_compile_options(-fexperimental-library)
add_link_options(-L${LLVM_ROOT}/lib/c++ -lc++experimental)
add_compile_options(-stdlib=libc++)
add_link_options(-stdlib=libc++)
elseif(LINUX)
set(LLVM_PREFIX $ENV{LLVM_ROOT})
endif()

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

# /usr/local/opt/llvm/share/libc++/v1/std.cppm
set(LLVM_LIBC_SOURCE ${LLVM_PREFIX}/share/libc++/v1)
file(REAL_PATH ${LLVM_PREFIX} LLVM_ROOT)
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)
endif()

add_compile_options(-fexperimental-library)
add_link_options(-L${LLVM_ROOT}/lib/c++ -lc++experimental)
add_compile_options(-stdlib=libc++)
add_link_options(-stdlib=libc++)

# Build the stdlib module
function(add_stdlib_module NAME)
add_library(${NAME})
Expand Down
5 changes: 5 additions & 0 deletions CMakePresets.json
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,11 @@
"CMAKE_SHARED_LINKER_FLAGS_DEBUG":
"-Wl,--allow-shlib-undefined,--as-needed,-z,noexecstack,-z,relro,-z,now"
},
"environment": {
"CXX": "clang++-19",
"LLVM_ROOT": "/usr/lib/llvm-19",
"PATH": "$env{LLVM_ROOT}/bin:$penv{PATH}"
},
"condition": {
"type": "equals",
"lhs": "${hostSystemName}",
Expand Down
4 changes: 3 additions & 1 deletion GNUmakefile
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,10 @@ ifeq (${hostSystemName},Darwin)
#XXX export LDFLAGS?=-L${LLVM_ROOT}/lib/c++
export PATH:=${LLVM_ROOT}/bin:${PATH}
export CXX:=clang++
else ifeq (${UNAME},Linux)
else ifeq (${hostSystemName},Linux)
export LLVM_ROOT:=/usr/lib/llvm-19
export PATH:=${LLVM_ROOT}/bin:${PATH}
export CXX:=clang++-19
endif

.PHONY: all check test example format clean distclean
Expand Down

0 comments on commit b130701

Please sign in to comment.