mirror of
https://github.com/c3lang/c3c.git
synced 2026-02-27 03:51:18 +00:00
fix: prevent Homebrew dylib contamination in macOS builds (#2908)
When C3_FETCH_LLVM=ON, the fetched LLVM artifact is self-contained. Two issues caused the macOS release binary to embed hardcoded /opt/homebrew paths, making it fail on systems without Homebrew: 1. /opt/homebrew/lib was unconditionally appended to LLVM_LIBRARY_DIRS, causing find_library to discover Homebrew's LLD dylibs (whose LC_ID_DYLIB points to /opt/homebrew/opt/lld/lib/...). Guard this behind NOT C3_FETCH_LLVM so it only applies when using a system-installed LLVM. 2. In the static linking block (C3_LINK_DYNAMIC=OFF), find_library NAMES listed .dylib before .a, so shared libraries were preferred even when static linking was intended. Reorder to prefer .a, keeping .dylib as a fallback for systems that only ship shared libraries. Co-authored-by: Christoffer Lerno <christoffer@aegik.com>
This commit is contained in:
@@ -235,7 +235,7 @@ if(C3_WITH_LLVM)
|
|||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if (EXISTS /opt/homebrew/lib)
|
if (NOT C3_FETCH_LLVM AND EXISTS /opt/homebrew/lib)
|
||||||
list(APPEND LLVM_LIBRARY_DIRS /opt/homebrew/lib)
|
list(APPEND LLVM_LIBRARY_DIRS /opt/homebrew/lib)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
@@ -311,16 +311,16 @@ if(C3_WITH_LLVM)
|
|||||||
message(STATUS "Looking for static lld libraries in ${LLVM_LIBRARY_DIRS}")
|
message(STATUS "Looking for static lld libraries in ${LLVM_LIBRARY_DIRS}")
|
||||||
|
|
||||||
# These don't seem to be reliable on windows.
|
# These don't seem to be reliable on windows.
|
||||||
find_library(LLD_COFF NAMES liblldCOFF.dylib lldCOFF.lib lldCOFF.a liblldCOFF.dll.a liblldCOFF.a PATHS ${LLVM_LIBRARY_DIRS} NO_DEFAULT_PATH REQUIRED)
|
find_library(LLD_COFF NAMES lldCOFF.a liblldCOFF.a liblldCOFF.dylib lldCOFF.lib liblldCOFF.dll.a PATHS ${LLVM_LIBRARY_DIRS} NO_DEFAULT_PATH REQUIRED)
|
||||||
find_library(LLD_COMMON NAMES liblldCommon.dylib lldCommon.lib lldCommon.a liblldCommon.dll.a liblldCommon.a PATHS ${LLVM_LIBRARY_DIRS} NO_DEFAULT_PATH REQUIRED)
|
find_library(LLD_COMMON NAMES lldCommon.a liblldCommon.a liblldCommon.dylib lldCommon.lib liblldCommon.dll.a PATHS ${LLVM_LIBRARY_DIRS} NO_DEFAULT_PATH REQUIRED)
|
||||||
find_library(LLD_ELF NAMES liblldELF.dylib lldELF.lib lldELF.a liblldELF.dll.a liblldELF.a PATHS ${LLVM_LIBRARY_DIRS} NO_DEFAULT_PATH REQUIRED)
|
find_library(LLD_ELF NAMES lldELF.a liblldELF.a liblldELF.dylib lldELF.lib liblldELF.dll.a PATHS ${LLVM_LIBRARY_DIRS} NO_DEFAULT_PATH REQUIRED)
|
||||||
if (NOT ${CMAKE_SYSTEM_NAME} STREQUAL "OpenBSD")
|
if (NOT ${CMAKE_SYSTEM_NAME} STREQUAL "OpenBSD")
|
||||||
find_library(LLD_MACHO NAMES liblldMachO.dylib lldMachO.lib lldMachO.a liblldMachO.dll.a liblldMachO.a PATHS ${LLVM_LIBRARY_DIRS} NO_DEFAULT_PATH REQUIRED)
|
find_library(LLD_MACHO NAMES lldMachO.a liblldMachO.a liblldMachO.dylib lldMachO.lib liblldMachO.dll.a PATHS ${LLVM_LIBRARY_DIRS} NO_DEFAULT_PATH REQUIRED)
|
||||||
else()
|
else()
|
||||||
set(LLD_MACHO "")
|
set(LLD_MACHO "")
|
||||||
endif()
|
endif()
|
||||||
find_library(LLD_MINGW NAMES liblldMinGW.dylib lldMinGW.lib lldMinGW.a liblldMinGW.dll.a liblldMinGW.a PATHS ${LLVM_LIBRARY_DIRS} NO_DEFAULT_PATH REQUIRED)
|
find_library(LLD_MINGW NAMES lldMinGW.a liblldMinGW.a liblldMinGW.dylib lldMinGW.lib liblldMinGW.dll.a PATHS ${LLVM_LIBRARY_DIRS} NO_DEFAULT_PATH REQUIRED)
|
||||||
find_library(LLD_WASM NAMES liblldWasm.dylib lldWasm.lib lldWasm.a liblldWasm.dll.a liblldWasm.a PATHS ${LLVM_LIBRARY_DIRS} NO_DEFAULT_PATH REQUIRED)
|
find_library(LLD_WASM NAMES lldWasm.a liblldWasm.a liblldWasm.dylib lldWasm.lib liblldWasm.dll.a PATHS ${LLVM_LIBRARY_DIRS} NO_DEFAULT_PATH REQUIRED)
|
||||||
else()
|
else()
|
||||||
message(STATUS "Looking for shared lld libraries in ${LLVM_LIBRARY_DIRS}")
|
message(STATUS "Looking for shared lld libraries in ${LLVM_LIBRARY_DIRS}")
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user