Skip to content

Commit

Permalink
LLVM 19 is incompatible with static library inclusion.
Browse files Browse the repository at this point in the history
  • Loading branch information
elliottslaughter committed Feb 7, 2025
1 parent b9fcf21 commit 6cb9edb
Show file tree
Hide file tree
Showing 3 changed files with 34 additions and 6 deletions.
25 changes: 23 additions & 2 deletions .github/workflows/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ jobs:
llvm: ['11', '12', '13', '14', '15', '16', '17', '18', '19']
cuda: ['0', '1']
lua: ['luajit', 'moonjit']
slib: ['0', '1']
exclude:
# macOS: exclude cuda
- os: 'macos-13'
Expand Down Expand Up @@ -100,6 +101,26 @@ jobs:
lua: 'moonjit'
- llvm: '19'
lua: 'moonjit'

# LLVM 19 is incompatible with SLIB_INCLUDE_LLVM
- llvm: '11'
slib: '0'
- llvm: '12'
slib: '0'
- llvm: '13'
slib: '0'
- llvm: '14'
slib: '0'
- llvm: '15'
slib: '0'
- llvm: '16'
slib: '0'
- llvm: '17'
slib: '0'
- llvm: '18'
slib: '0'
- llvm: '19'
slib: '1'
steps:
- uses: actions/checkout@v4
- run: ./travis.sh
Expand All @@ -109,7 +130,7 @@ jobs:
USE_CUDA: ${{ matrix.cuda }}
STATIC_LLVM: 1
STATIC_LUAJIT: 1
SLIB_INCLUDE_LLVM: 1
SLIB_INCLUDE_LLVM: ${{ matrix.slib }}
SLIB_INCLUDE_LUAJIT: 1
TERRA_LUA: ${{ matrix.lua }}
- uses: actions/upload-artifact@v4
Expand Down Expand Up @@ -178,7 +199,7 @@ jobs:
lua: 'luajit'
cuda: '0'
variant: 'prebuilt'
slib: '1'
slib: '0'
static: '1'

# LLVM 12, 13, 14 on Ubuntu 22.04
Expand Down
9 changes: 8 additions & 1 deletion CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ set(TERRA_ENABLE_CUDA ${CUDA_FOUND} CACHE BOOL "Build Terra with support for CUD
if(DEFINED TERRA_STATIC_LINK_LLVM)
set(DEFAULT_TERRA_SLIB_INCLUDE_LLVM ${TERRA_STATIC_LINK_LLVM})
else()
if(WIN32)
if(WIN32 OR LLVM_VERSION_MAJOR GREATER 18)
set(DEFAULT_TERRA_SLIB_INCLUDE_LLVM OFF)
else()
set(DEFAULT_TERRA_SLIB_INCLUDE_LLVM ON)
Expand All @@ -26,6 +26,13 @@ endif()
set(TERRA_SLIB_INCLUDE_LLVM ${DEFAULT_TERRA_SLIB_INCLUDE_LLVM} CACHE BOOL "Include LLVM in Terra static libraries")
set(TERRA_STATIC_LINK_LLVM ON CACHE BOOL "Statically link Terra against LLVM")

if(LLVM_VERSION_MAJOR GREATER 18)
set(DEFAULT_TERRA_WHOLE_ARCHIVE_LLVM OFF)
else()
set(DEFAULT_TERRA_WHOLE_ARCHIVE_LLVM ON)
endif()
set(TERRA_WHOLE_ARCHIVE_LLVM ${DEFAULT_TERRA_WHOLE_ARCHIVE_LLVM} CACHE BOOL "When statically linking LLVM, force inclusion of all objects")

if(TERRA_SLIB_INCLUDE_LLVM AND NOT TERRA_STATIC_LINK_LLVM)
message(FATAL_ERROR "TERRA_SLIB_INCLUDE_LLVM requires TERRA_STATIC_LINK_LLVM to be set")
endif()
Expand Down
6 changes: 3 additions & 3 deletions cmake/Modules/ExtractLLVM.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -69,22 +69,22 @@ elseif(TERRA_STATIC_LINK_LLVM)
endif()
endforeach()

if(UNIX AND NOT APPLE)
if(UNIX AND NOT APPLE AND TERRA_WHOLE_ARCHIVE_LLVM)
list(APPEND ALL_LLVM_LIBRARIES
-Wl,-export-dynamic
-Wl,--whole-archive
)
endif()

foreach(LLVM_LIB_PATH ${LLVM_LIBRARIES} ${CLANG_LIBRARIES})
if(APPLE)
if(APPLE AND TERRA_WHOLE_ARCHIVE_LLVM)
list(APPEND ALL_LLVM_LIBRARIES "-Wl,-force_load,${LLVM_LIB_PATH}")
else()
list(APPEND ALL_LLVM_LIBRARIES "${LLVM_LIB_PATH}")
endif()
endforeach()

if(UNIX AND NOT APPLE)
if(UNIX AND NOT APPLE AND TERRA_WHOLE_ARCHIVE_LLVM)
list(APPEND ALL_LLVM_LIBRARIES
-Wl,--no-whole-archive
)
Expand Down

0 comments on commit 6cb9edb

Please sign in to comment.