Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .dielib_commit
Original file line number Diff line number Diff line change
@@ -1 +1 @@
09df9ccafe48a0531987ad1e605402ed79d4c3f6
da15bca4474d30107ba4e6b20a268b05bbc13f81
43 changes: 43 additions & 0 deletions cmake/FindDieLibrary.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,10 @@ list(INSERT CMAKE_MODULE_PATH 0
${Qt6_DIR}
)

# Ensure the bundled Qt wins over any system-wide Qt (e.g. Homebrew) when Qt
# config files resolve their own dependencies (Qt6CoreTools, etc.)
list(INSERT CMAKE_PREFIX_PATH 0 "${ROOT_DIR}/build/${QT_BUILD_VERSION}/${QT_BUILD_COMPILER}")

find_package(Qt6 REQUIRED COMPONENTS Core Qml Concurrent)

file(STRINGS "${ROOT_DIR}/.dielib_commit" DIE_LIBRARY_GIT_TAG)
Expand All @@ -71,11 +75,50 @@ FetchContent_Declare(
DieLibrary
GIT_REPOSITORY "https://github.com/horsicq/die_library"
GIT_TAG "${DIE_LIBRARY_GIT_TAG}"
PATCH_COMMAND ${CMAKE_COMMAND} -P "${CMAKE_CURRENT_LIST_DIR}/PatchDieLibrary.cmake"
)

set(DIE_BUILD_AS_STATIC ON CACHE INTERNAL "")
FetchContent_MakeAvailable( DieLibrary )

# The xsimd component of Formats unconditionally adds x86 SIMD flags
# (-msse/-mavx2) and the USE_SSE2 define under GCC/Clang, which breaks
# non-x86 targets. The runtime dispatcher in xsimd.c never enables SSE2/AVX2
# on non-x86 CPUs, so dropping them is safe (functions fall back to -1 /
# "not available").
# The zlib vendored by XArchive predates zlib 1.2.12: its zutil.h treats
# TARGET_OS_MAC (predefined by recent Apple clang) as Mac OS Classic and
# #defines fdopen to NULL, breaking the macOS SDK's stdio. Pre-defining
# fdopen as a self-referencing macro skips that branch (guarded by #ifndef).
if(APPLE)
foreach(XARCHIVE_CONSUMER zlib die)
if(TARGET ${XARCHIVE_CONSUMER})
target_compile_definitions(${XARCHIVE_CONSUMER} PRIVATE "fdopen=fdopen")
endif()
endforeach()
if(TARGET die)
# XArchive's Algos sources still use the C++17-removed `register` keyword
target_compile_options(die PRIVATE -Wno-register)
endif()
endif()

if(NOT CMAKE_SYSTEM_PROCESSOR MATCHES "(x86_64|AMD64|i.86)")
foreach(XSIMD_TARGET xsimd_sse2 xsimd_avx2)
if(TARGET ${XSIMD_TARGET})
get_target_property(XSIMD_OPTS ${XSIMD_TARGET} COMPILE_OPTIONS)
if(XSIMD_OPTS)
list(REMOVE_ITEM XSIMD_OPTS -msse -msse2 -mavx -mavx2)
set_target_properties(${XSIMD_TARGET} PROPERTIES COMPILE_OPTIONS "${XSIMD_OPTS}")
endif()
get_target_property(XSIMD_DEFS ${XSIMD_TARGET} COMPILE_DEFINITIONS)
if(XSIMD_DEFS)
list(REMOVE_ITEM XSIMD_DEFS USE_SSE2)
set_target_properties(${XSIMD_TARGET} PROPERTIES COMPILE_DEFINITIONS "${XSIMD_DEFS}")
endif()
endif()
endforeach()
endif()

message(STATUS "Using DieLibrary in '${dielibrary_SOURCE_DIR}'")

list(APPEND CMAKE_MODULE_PATH "${dielibrary_SOURCE_DIR}/dep/build_tools/cmake")
20 changes: 20 additions & 0 deletions cmake/PatchDieLibrary.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
# Post-fetch fixups for die_library sources, run as FetchContent PATCH_COMMAND
# from the die_library source directory. Must stay idempotent: the command can
# run again on re-population.

# XArchive's xdeflatedecoder.cpp defines the zlib-style `local` macro
# (`#define local static`) and later includes Qt headers that, on macOS, pull
# in CoreFoundation's CFMessagePort.h which uses `local` as a parameter name.
# Undefine the macro before those includes; nothing below them uses it.
set(XDEFLATE "dep/XArchive/Algos/xdeflatedecoder.cpp")
if(EXISTS "${XDEFLATE}")
file(READ "${XDEFLATE}" CONTENT)
if(NOT CONTENT MATCHES "#undef local")
string(REPLACE
"#include \"xdeflatedecoder.h\""
"#undef local\n#include \"xdeflatedecoder.h\""
CONTENT "${CONTENT}")
file(WRITE "${XDEFLATE}" "${CONTENT}")
message(STATUS "Patched ${XDEFLATE}: #undef local before includes")
endif()
endif()
Loading