diff --git a/cmake/tools/SetupLLVM.cmake b/cmake/tools/SetupLLVM.cmake index c695a4175e..d1b462701a 100644 --- a/cmake/tools/SetupLLVM.cmake +++ b/cmake/tools/SetupLLVM.cmake @@ -1,4 +1,3 @@ - set(DEFAULT_ENABLE_LLVM ON) # if target is bun-zig, set ENABLE_LLVM to OFF @@ -12,7 +11,13 @@ if(NOT ENABLE_LLVM) return() endif() -set(DEFAULT_LLVM_VERSION "21.1.8") +# LLVM 21 is required for Windows ARM64 (first version with ARM64 Windows builds) +# Other platforms use LLVM 19.1.7 +if(WIN32 AND CMAKE_SYSTEM_PROCESSOR MATCHES "ARM64|aarch64|AARCH64") + set(DEFAULT_LLVM_VERSION "21.1.8") +else() + set(DEFAULT_LLVM_VERSION "19.1.7") +endif() optionx(LLVM_VERSION STRING "The version of LLVM to use" DEFAULT ${DEFAULT_LLVM_VERSION}) @@ -72,12 +77,14 @@ macro(find_llvm_command variable command) ) endif() + math(EXPR LLVM_VERSION_NEXT_MAJOR "${LLVM_VERSION_MAJOR} + 1") + find_command( VARIABLE ${variable} VERSION_VARIABLE LLVM_VERSION COMMAND ${commands} PATHS ${LLVM_PATHS} - VERSION "${LLVM_VERSION_MAJOR}.${LLVM_VERSION_MINOR}.${LLVM_VERSION_PATCH}" + VERSION ">=${LLVM_VERSION_MAJOR}.1.0 <${LLVM_VERSION_NEXT_MAJOR}.0.0" ) list(APPEND CMAKE_ARGS -D${variable}=${${variable}}) endmacro() diff --git a/src/bun.js/bindings/EncodingTables.h b/src/bun.js/bindings/EncodingTables.h index ca3d1d7e7a..a7b7dec52a 100644 --- a/src/bun.js/bindings/EncodingTables.h +++ b/src/bun.js/bindings/EncodingTables.h @@ -55,10 +55,6 @@ template static auto findInSortedPair inline void checkEncodingTableInvariants() {} #endif -// LLVM 21+ -Wcharacter-conversion flags intentional char32_t/char16_t comparisons -// used for Unicode code point range checks in findFirstInSortedPairs. -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wcharacter-conversion" struct CompareFirst { template bool operator()(const TypeA& a, const TypeB& b) { @@ -136,6 +132,5 @@ template static auto findInSortedPair } return std::ranges::equal_range(collection, makeFirstAdapter(key), CompareFirst {}); } -#pragma clang diagnostic pop }