diff --git a/.env b/.env index 6a62cad5fcd..c365a30c405 100644 --- a/.env +++ b/.env @@ -67,7 +67,7 @@ HDFS=3.2.1 JDK=11 KARTOTHEK=latest # LLVM 12 and GCC 11 reports -Wmismatched-new-delete. -LLVM=18 +LLVM=21 MAVEN=3.8.7 NODE=20 NUMBA=latest diff --git a/ci/vcpkg/overlay/llvm/0001-fix-install-package-dir.patch b/ci/vcpkg/overlay/llvm/0001-fix-install-package-dir.patch new file mode 100644 index 00000000000..6bbe1af08f8 --- /dev/null +++ b/ci/vcpkg/overlay/llvm/0001-fix-install-package-dir.patch @@ -0,0 +1,13 @@ + openmp/tools/Modules/CMakeLists.txt | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/openmp/tools/Modules/CMakeLists.txt b/openmp/tools/Modules/CMakeLists.txt +index 22d818eea72d..75aacc4468d4 100644 +--- a/openmp/tools/Modules/CMakeLists.txt ++++ b/openmp/tools/Modules/CMakeLists.txt +@@ -12,4 +12,4 @@ + + + install(FILES "FindOpenMPTarget.cmake" +- DESTINATION "${OPENMP_INSTALL_LIBDIR}/cmake/openmp") ++ DESTINATION "share/openmp") diff --git a/ci/vcpkg/overlay/llvm/0002-fix-tools-install-dir.patch b/ci/vcpkg/overlay/llvm/0002-fix-tools-install-dir.patch new file mode 100644 index 00000000000..bf46382567a --- /dev/null +++ b/ci/vcpkg/overlay/llvm/0002-fix-tools-install-dir.patch @@ -0,0 +1,205 @@ + bolt/cmake/modules/AddBOLT.cmake | 2 +- + clang-tools-extra/clang-tidy/tool/CMakeLists.txt | 2 +- + clang-tools-extra/modularize/CMakeLists.txt | 2 +- + clang/cmake/modules/AddClang.cmake | 4 ++-- + clang/tools/c-index-test/CMakeLists.txt | 2 +- + clang/tools/clang-format/CMakeLists.txt | 4 ++-- + clang/tools/scan-build-py/CMakeLists.txt | 4 ++-- + clang/tools/scan-build/CMakeLists.txt | 2 +- + clang/tools/scan-view/CMakeLists.txt | 2 +- + flang/cmake/modules/AddFlang.cmake | 2 +- + flang/tools/flang-driver/CMakeLists.txt | 2 +- + lld/cmake/modules/AddLLD.cmake | 4 ++-- + lldb/cmake/modules/AddLLDB.cmake | 2 +- + 13 files changed, 17 insertions(+), 17 deletions(-) + +diff --git a/bolt/cmake/modules/AddBOLT.cmake b/bolt/cmake/modules/AddBOLT.cmake +index c7ac662c6b12..f5a7e7c01c66 100644 +--- a/bolt/cmake/modules/AddBOLT.cmake ++++ b/bolt/cmake/modules/AddBOLT.cmake +@@ -16,7 +16,7 @@ macro(add_bolt_tool name) + get_target_export_arg(${name} BOLT export_to_bolttargets) + install(TARGETS ${name} + ${export_to_bolttargets} +- RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}" ++ RUNTIME DESTINATION "${BOLT_TOOLS_INSTALL_DIR}" + COMPONENT bolt) + + if(NOT LLVM_ENABLE_IDE) +diff --git a/clang-tools-extra/clang-tidy/tool/CMakeLists.txt b/clang-tools-extra/clang-tidy/tool/CMakeLists.txt +index 0d4501d1eac0..a6ff0261f5f3 100644 +--- a/clang-tools-extra/clang-tidy/tool/CMakeLists.txt ++++ b/clang-tools-extra/clang-tidy/tool/CMakeLists.txt +@@ -66,6 +66,6 @@ install(PROGRAMS clang-tidy-diff.py + DESTINATION "${CMAKE_INSTALL_DATADIR}/clang" + COMPONENT clang-tidy) + install(PROGRAMS run-clang-tidy.py +- DESTINATION "${CMAKE_INSTALL_BINDIR}" ++ DESTINATION "${CLANG_TOOLS_INSTALL_DIR}" + COMPONENT clang-tidy + RENAME run-clang-tidy) +diff --git a/clang-tools-extra/modularize/CMakeLists.txt b/clang-tools-extra/modularize/CMakeLists.txt +index eb5383c3ad44..39a34dfe8c71 100644 +--- a/clang-tools-extra/modularize/CMakeLists.txt ++++ b/clang-tools-extra/modularize/CMakeLists.txt +@@ -27,5 +27,5 @@ clang_target_link_libraries(modularize + ) + + install(TARGETS modularize +- RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}" ++ RUNTIME DESTINATION "${CLANG_TOOLS_INSTALL_DIR}" + COMPONENT clang-extras) +diff --git a/clang/cmake/modules/AddClang.cmake b/clang/cmake/modules/AddClang.cmake +index 4059fc3e986c..2dc34826ba1e 100644 +--- a/clang/cmake/modules/AddClang.cmake ++++ b/clang/cmake/modules/AddClang.cmake +@@ -183,11 +183,11 @@ macro(add_clang_tool name) + get_target_export_arg(${name} Clang export_to_clangtargets) + install(TARGETS ${name} + ${export_to_clangtargets} +- RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}" ++ RUNTIME DESTINATION "${CLANG_TOOLS_INSTALL_DIR}" + COMPONENT ${name}) + + if (LLVM_ENABLE_PDB) +- install(FILES $ DESTINATION "${CMAKE_INSTALL_BINDIR}" COMPONENT ${name} OPTIONAL) ++ install(FILES $ DESTINATION "${CLANG_TOOLS_INSTALL_DIR}" COMPONENT ${name} OPTIONAL) + endif() + + if(NOT LLVM_ENABLE_IDE) +diff --git a/clang/tools/c-index-test/CMakeLists.txt b/clang/tools/c-index-test/CMakeLists.txt +index 24e7c9692ca5..841f49cd5e0b 100644 +--- a/clang/tools/c-index-test/CMakeLists.txt ++++ b/clang/tools/c-index-test/CMakeLists.txt +@@ -48,7 +48,7 @@ if (NOT LLVM_INSTALL_TOOLCHAIN_ONLY) + set_property(TARGET c-index-test APPEND PROPERTY INSTALL_RPATH + "@executable_path/../../lib") + else() +- set(INSTALL_DESTINATION "${CMAKE_INSTALL_BINDIR}") ++ set(INSTALL_DESTINATION "${CLANG_TOOLS_INSTALL_DIR}") + endif() + + install(TARGETS c-index-test +diff --git a/clang/tools/clang-format/CMakeLists.txt b/clang/tools/clang-format/CMakeLists.txt +index 1c61a3c8fb80..41f019c1fbf9 100644 +--- a/clang/tools/clang-format/CMakeLists.txt ++++ b/clang/tools/clang-format/CMakeLists.txt +@@ -36,11 +36,11 @@ install(FILES clang-format.py + DESTINATION "${CMAKE_INSTALL_DATADIR}/clang" + COMPONENT clang-format) + install(PROGRAMS git-clang-format +- DESTINATION "${CMAKE_INSTALL_BINDIR}" ++ DESTINATION "${CLANG_TOOLS_INSTALL_DIR}" + COMPONENT clang-format) + + if (WIN32 AND NOT CYGWIN) + install(PROGRAMS git-clang-format.bat +- DESTINATION "${CMAKE_INSTALL_BINDIR}" ++ DESTINATION "${CLANG_TOOLS_INSTALL_DIR}" + COMPONENT clang-format) + endif() +diff --git a/clang/tools/scan-build-py/CMakeLists.txt b/clang/tools/scan-build-py/CMakeLists.txt +index 9273eb5ed977..f9abcb2ca248 100644 +--- a/clang/tools/scan-build-py/CMakeLists.txt ++++ b/clang/tools/scan-build-py/CMakeLists.txt +@@ -43,7 +43,7 @@ foreach(BinFile ${BinFiles}) + ${CMAKE_BINARY_DIR}/bin/scan-build-py + DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/bin/scan-build) + install (PROGRAMS "bin/scan-build" +- DESTINATION "${CMAKE_INSTALL_BINDIR}" ++ DESTINATION "${CLANG_TOOLS_INSTALL_DIR}" + RENAME scan-build-py + COMPONENT scan-build-py) + list(APPEND Depends ${CMAKE_BINARY_DIR}/bin/scan-build-py) +@@ -56,7 +56,7 @@ foreach(BinFile ${BinFiles}) + ${CMAKE_BINARY_DIR}/bin/ + DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/bin/${BinFile}) + install(PROGRAMS bin/${BinFile} +- DESTINATION "${CMAKE_INSTALL_BINDIR}" ++ DESTINATION "${CLANG_TOOLS_INSTALL_DIR}" + COMPONENT scan-build-py) + list(APPEND Depends ${CMAKE_BINARY_DIR}/bin/${BinFile}) + endif() +diff --git a/clang/tools/scan-build/CMakeLists.txt b/clang/tools/scan-build/CMakeLists.txt +index ef687b0e90a1..47f31efc9174 100644 +--- a/clang/tools/scan-build/CMakeLists.txt ++++ b/clang/tools/scan-build/CMakeLists.txt +@@ -47,7 +47,7 @@ if(CLANG_INSTALL_SCANBUILD) + DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/bin/${BinFile}) + list(APPEND Depends ${CMAKE_BINARY_DIR}/bin/${BinFile}) + install(PROGRAMS bin/${BinFile} +- DESTINATION "${CMAKE_INSTALL_BINDIR}" ++ DESTINATION "${CLANG_TOOLS_INSTALL_DIR}" + COMPONENT scan-build) + endforeach() + +diff --git a/clang/tools/scan-view/CMakeLists.txt b/clang/tools/scan-view/CMakeLists.txt +index 07aec76ee66f..55a945bb278d 100644 +--- a/clang/tools/scan-view/CMakeLists.txt ++++ b/clang/tools/scan-view/CMakeLists.txt +@@ -20,7 +20,7 @@ if(CLANG_INSTALL_SCANVIEW) + DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/bin/${BinFile}) + list(APPEND Depends ${CMAKE_BINARY_DIR}/bin/${BinFile}) + install(PROGRAMS bin/${BinFile} +- DESTINATION "${CMAKE_INSTALL_BINDIR}" ++ DESTINATION "${CLANG_TOOLS_INSTALL_DIR}" + COMPONENT scan-view) + endforeach() + +diff --git a/flang/cmake/modules/AddFlang.cmake b/flang/cmake/modules/AddFlang.cmake +index ca233103ccdb..e079f33d9426 100644 +--- a/flang/cmake/modules/AddFlang.cmake ++++ b/flang/cmake/modules/AddFlang.cmake +@@ -122,7 +122,7 @@ macro(add_flang_tool name) + get_target_export_arg(${name} Flang export_to_flangtargets) + install(TARGETS ${name} + ${export_to_flangtargets} +- RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}" ++ RUNTIME DESTINATION "${FLANG_TOOLS_INSTALL_DIR}" + COMPONENT ${name}) + + if(NOT LLVM_ENABLE_IDE) +diff --git a/flang/tools/flang-driver/CMakeLists.txt b/flang/tools/flang-driver/CMakeLists.txt +index b5d672702512..67f5d4304dac 100644 +--- a/flang/tools/flang-driver/CMakeLists.txt ++++ b/flang/tools/flang-driver/CMakeLists.txt +@@ -43,7 +43,7 @@ if(FLANG_PLUGIN_SUPPORT) + export_executable_symbols_for_plugins(flang) + endif() + +-install(TARGETS flang DESTINATION "${CMAKE_INSTALL_BINDIR}") ++install(TARGETS flang DESTINATION "${FLANG_TOOLS_INSTALL_DIR}") + + # Keep "flang-new" as a symlink for backwards compatiblity. Remove once "flang" + # is a widely adopted name. +diff --git a/lld/cmake/modules/AddLLD.cmake b/lld/cmake/modules/AddLLD.cmake +index 37f73afa915f..7df335698aab 100644 +--- a/lld/cmake/modules/AddLLD.cmake ++++ b/lld/cmake/modules/AddLLD.cmake +@@ -55,11 +55,11 @@ macro(add_lld_tool name) + get_target_export_arg(${name} LLD export_to_lldtargets) + install(TARGETS ${name} + ${export_to_lldtargets} +- RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}" ++ RUNTIME DESTINATION "${LLD_TOOLS_INSTALL_DIR}" + COMPONENT ${name}) + + if (LLVM_ENABLE_PDB) +- install(FILES $ DESTINATION "${CMAKE_INSTALL_BINDIR}" COMPONENT ${name} OPTIONAL) ++ install(FILES $ DESTINATION "${LLD_TOOLS_INSTALL_DIR}" COMPONENT ${name} OPTIONAL) + endif() + + if(NOT CMAKE_CONFIGURATION_TYPES) +diff --git a/lldb/cmake/modules/AddLLDB.cmake b/lldb/cmake/modules/AddLLDB.cmake +index 28bf8d816d89..372eec626160 100644 +--- a/lldb/cmake/modules/AddLLDB.cmake ++++ b/lldb/cmake/modules/AddLLDB.cmake +@@ -184,7 +184,7 @@ function(add_lldb_executable name) + endif() + + if(ARG_GENERATE_INSTALL) +- set(install_dest bin) ++ set(install_dest "${LLVM_TOOLS_INSTALL_DIR}") + if(ARG_INSTALL_PREFIX) + set(install_dest ${ARG_INSTALL_PREFIX}) + endif() diff --git a/ci/vcpkg/overlay/llvm/0003-fix-llvm-config.patch b/ci/vcpkg/overlay/llvm/0003-fix-llvm-config.patch new file mode 100644 index 00000000000..568cb17cbb0 --- /dev/null +++ b/ci/vcpkg/overlay/llvm/0003-fix-llvm-config.patch @@ -0,0 +1,16 @@ + llvm/tools/llvm-config/llvm-config.cpp | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/llvm/tools/llvm-config/llvm-config.cpp b/llvm/tools/llvm-config/llvm-config.cpp +index d5b76b1bb6c1..9fedcb2ab75f 100644 +--- a/llvm/tools/llvm-config/llvm-config.cpp ++++ b/llvm/tools/llvm-config/llvm-config.cpp +@@ -304,7 +304,7 @@ int main(int argc, char **argv) { + // bin dir). + sys::fs::make_absolute(CurrentPath); + CurrentExecPrefix = +- sys::path::parent_path(sys::path::parent_path(CurrentPath)).str(); ++ sys::path::parent_path(sys::path::parent_path(sys::path::parent_path(CurrentPath))).str(); + + // Check to see if we are inside a development tree by comparing to possible + // locations (prefix style or CMake style). diff --git a/ci/vcpkg/overlay/llvm/0004-disable-libomp-aliases.patch b/ci/vcpkg/overlay/llvm/0004-disable-libomp-aliases.patch new file mode 100644 index 00000000000..6736f2a31d5 --- /dev/null +++ b/ci/vcpkg/overlay/llvm/0004-disable-libomp-aliases.patch @@ -0,0 +1,32 @@ + openmp/runtime/src/CMakeLists.txt | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +diff --git a/openmp/runtime/src/CMakeLists.txt b/openmp/runtime/src/CMakeLists.txt +index bb5822264514..340cef14df89 100644 +--- a/openmp/runtime/src/CMakeLists.txt ++++ b/openmp/runtime/src/CMakeLists.txt +@@ -215,7 +215,7 @@ endif() + set(LIBOMP_INCLUDE_DIR ${CMAKE_CURRENT_BINARY_DIR} PARENT_SCOPE) + + # Add symbolic links to libomp +-if(NOT WIN32) ++if(0) + add_custom_command(TARGET omp POST_BUILD + COMMAND ${CMAKE_COMMAND} -E create_symlink ${LIBOMP_LIB_FILE} + libgomp${LIBOMP_LIBRARY_SUFFIX} +@@ -367,6 +367,7 @@ if(WIN32) + install(TARGETS omp ${export_to_llvmexports} RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}") + install(TARGETS ${LIBOMP_IMP_LIB_TARGET} ARCHIVE DESTINATION "${OPENMP_INSTALL_LIBDIR}") + # Create aliases (regular copies) of the library for backwards compatibility ++ if(0) + set(LIBOMP_ALIASES "libiomp5md") + foreach(alias IN LISTS LIBOMP_ALIASES) + install(CODE "execute_process(COMMAND \"\${CMAKE_COMMAND}\" -E copy \"${LIBOMP_LIB_FILE}\" +@@ -375,6 +376,7 @@ if(WIN32) + install(CODE "execute_process(COMMAND \"\${CMAKE_COMMAND}\" -E copy \"${LIBOMP_IMP_LIB_FILE}\" + \"${alias}${CMAKE_STATIC_LIBRARY_SUFFIX}\" WORKING_DIRECTORY \"${outdir}\")") + endforeach() ++ endif() + else() + + install(TARGETS omp ${export_to_llvmexports} ${LIBOMP_INSTALL_KIND} DESTINATION "${OPENMP_INSTALL_LIBDIR}") diff --git a/ci/vcpkg/overlay/llvm/0005-fix-runtimes.patch b/ci/vcpkg/overlay/llvm/0005-fix-runtimes.patch new file mode 100644 index 00000000000..0047333171e --- /dev/null +++ b/ci/vcpkg/overlay/llvm/0005-fix-runtimes.patch @@ -0,0 +1,23 @@ + llvm/runtimes/CMakeLists.txt | 6 ++++-- + 1 file changed, 4 insertions(+), 2 deletions(-) + +diff --git a/llvm/runtimes/CMakeLists.txt b/llvm/runtimes/CMakeLists.txt +index 94a43b96d218..fff91366fbb2 100644 +--- a/llvm/runtimes/CMakeLists.txt ++++ b/llvm/runtimes/CMakeLists.txt +@@ -504,11 +504,13 @@ if(build_runtimes) + # Forward user-provived system configuration to runtimes for requirement introspection. + # CMAKE_PREFIX_PATH is the search path for CMake packages. + if(CMAKE_PREFIX_PATH) +- list(APPEND extra_cmake_args "-DCMAKE_PREFIX_PATH=${CMAKE_PREFIX_PATH}") ++ string(REPLACE ";" "|" new_value "${CMAKE_PREFIX_PATH}") ++ list(APPEND extra_cmake_args "-DCMAKE_PREFIX_PATH=${new_value}") + endif() + # CMAKE_PROGRAM_PATH is the search path for executables such as python. + if(CMAKE_PROGRAM_PATH) +- list(APPEND extra_cmake_args "-DCMAKE_PROGRAM_PATH=${CMAKE_PROGRAM_PATH}") ++ string(REPLACE ";" "|" new_value "${CMAKE_PROGRAM_PATH}") ++ list(APPEND extra_cmake_args "-DCMAKE_PROGRAM_PATH=${new_value}") + endif() + + # TODO: We need to consider passing it as '-DRUNTIMES_x86_64_LLVM_ENABLE_RUNTIMES'. diff --git a/ci/vcpkg/overlay/llvm/0006-create-destination-mlir-directory.patch b/ci/vcpkg/overlay/llvm/0006-create-destination-mlir-directory.patch new file mode 100644 index 00000000000..4950a48c3b5 --- /dev/null +++ b/ci/vcpkg/overlay/llvm/0006-create-destination-mlir-directory.patch @@ -0,0 +1,16 @@ + mlir/python/CMakeLists.txt | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/mlir/python/CMakeLists.txt b/mlir/python/CMakeLists.txt +index 50fbca38a08f..957a6722c21c 100644 +--- a/mlir/python/CMakeLists.txt ++++ b/mlir/python/CMakeLists.txt +@@ -527,6 +527,8 @@ add_mlir_python_common_capi_library(MLIRPythonCAPI + ${_ADDL_TEST_SOURCES} + ) + ++file(MAKE_DIRECTORY "${MLIR_BINARY_DIR}/python_packages/mlir_core/mlir/_mlir_libs") ++ + ################################################################################ + # Custom targets. + ################################################################################ diff --git a/ci/vcpkg/overlay/llvm/clang_usage b/ci/vcpkg/overlay/llvm/clang_usage new file mode 100644 index 00000000000..f239721f484 --- /dev/null +++ b/ci/vcpkg/overlay/llvm/clang_usage @@ -0,0 +1,5 @@ +The package clang provides CMake targets: + + find_package(Clang CONFIG REQUIRED) + target_include_directories(main PRIVATE ${CLANG_INCLUDE_DIRS}) + target_link_libraries(main PRIVATE clangBasic clangLex clangParse clangAST ...) diff --git a/ci/vcpkg/overlay/llvm/cmake4.patch b/ci/vcpkg/overlay/llvm/cmake4.patch new file mode 100644 index 00000000000..984981e88f8 --- /dev/null +++ b/ci/vcpkg/overlay/llvm/cmake4.patch @@ -0,0 +1,117 @@ +diff --git a/cmake/Modules/HandleCompilerRT.cmake b/cmake/Modules/HandleCompilerRT.cmake +index 6865f45175..33dda44d18 100644 +--- a/cmake/Modules/HandleCompilerRT.cmake ++++ b/cmake/Modules/HandleCompilerRT.cmake +@@ -20,25 +20,25 @@ function(get_component_name name variable) + if(NOT name MATCHES "builtins.*") + set(component_name "${name}_") + endif() +- if (CMAKE_OSX_SYSROOT MATCHES ".+MacOSX.+") ++ if (_CMAKE_OSX_SYSROOT_PATH MATCHES ".+MacOSX.+") + set(component_name "${component_name}osx") + +- elseif (CMAKE_OSX_SYSROOT MATCHES ".+iPhoneOS.+") ++ elseif (_CMAKE_OSX_SYSROOT_PATH MATCHES ".+iPhoneOS.+") + set(component_name "${component_name}ios") +- elseif (CMAKE_OSX_SYSROOT MATCHES ".+iPhoneSimulator.+") ++ elseif (_CMAKE_OSX_SYSROOT_PATH MATCHES ".+iPhoneSimulator.+") + set(component_name "${component_name}iossim") + +- elseif (CMAKE_OSX_SYSROOT MATCHES ".+AppleTVOS.+") ++ elseif (_CMAKE_OSX_SYSROOT_PATH MATCHES ".+AppleTVOS.+") + set(component_name "${component_name}tvos") +- elseif (CMAKE_OSX_SYSROOT MATCHES ".+AppleTVSimulator.+") ++ elseif (_CMAKE_OSX_SYSROOT_PATH MATCHES ".+AppleTVSimulator.+") + set(component_name "${component_name}tvossim") + +- elseif (CMAKE_OSX_SYSROOT MATCHES ".+WatchOS.+") ++ elseif (_CMAKE_OSX_SYSROOT_PATH MATCHES ".+WatchOS.+") + set(component_name "${component_name}watchos") +- elseif (CMAKE_OSX_SYSROOT MATCHES ".+WatchSimulator.+") ++ elseif (_CMAKE_OSX_SYSROOT_PATH MATCHES ".+WatchSimulator.+") + set(component_name "${component_name}watchossim") + else() +- message(WARNING "Unknown Apple SDK ${CMAKE_OSX_SYSROOT}, we don't know which compiler-rt library suffix to use.") ++ message(WARNING "Unknown Apple SDK ${_CMAKE_OSX_SYSROOT_PATH}, we don't know which compiler-rt library suffix to use.") + endif() + else() + set(component_name "${name}") +diff --git a/libcxxabi/src/CMakeLists.txt b/libcxxabi/src/CMakeLists.txt +index f4722c3b35..a553615ebc 100644 +--- a/libcxxabi/src/CMakeLists.txt ++++ b/libcxxabi/src/CMakeLists.txt +@@ -134,7 +134,7 @@ if ( APPLE ) + # Make sure we link in CrashReporterClient if we find it -- it's used by + # abort() on Apple platforms when building the system dylib. + find_library(CrashReporterClient NAMES libCrashReporterClient.a +- PATHS "${CMAKE_OSX_SYSROOT}/usr/local/lib") ++ PATHS "${_CMAKE_OSX_SYSROOT_PATH}/usr/local/lib") + if (CrashReporterClient) + message(STATUS "Linking with CrashReporterClient at ${CrashReporterClient}") + add_library_flags("${CrashReporterClient}") +diff --git a/lldb/tools/debugserver/source/CMakeLists.txt b/lldb/tools/debugserver/source/CMakeLists.txt +index f0b9756bec..0c784545c4 100644 +--- a/lldb/tools/debugserver/source/CMakeLists.txt ++++ b/lldb/tools/debugserver/source/CMakeLists.txt +@@ -125,17 +125,17 @@ if(APPLE) + set(LIBCOMPRESSION compression) + if(APPLE_EMBEDDED) + find_library(BACKBOARD_LIBRARY BackBoardServices +- PATHS ${CMAKE_OSX_SYSROOT}/System/Library/PrivateFrameworks) ++ PATHS ${_CMAKE_OSX_SYSROOT_PATH}/System/Library/PrivateFrameworks) + find_library(FRONTBOARD_LIBRARY FrontBoardServices +- PATHS ${CMAKE_OSX_SYSROOT}/System/Library/PrivateFrameworks) ++ PATHS ${_CMAKE_OSX_SYSROOT_PATH}/System/Library/PrivateFrameworks) + find_library(SPRINGBOARD_LIBRARY SpringBoardServices +- PATHS ${CMAKE_OSX_SYSROOT}/System/Library/PrivateFrameworks) ++ PATHS ${_CMAKE_OSX_SYSROOT_PATH}/System/Library/PrivateFrameworks) + find_library(MOBILESERVICES_LIBRARY MobileCoreServices +- PATHS ${CMAKE_OSX_SYSROOT}/System/Library/PrivateFrameworks) ++ PATHS ${_CMAKE_OSX_SYSROOT_PATH}/System/Library/PrivateFrameworks) + find_library(LOCKDOWN_LIBRARY lockdown) + if (APPLE_EMBEDDED STREQUAL "watchos") + find_library(CAROUSELSERVICES_LIBRARY CarouselServices +- PATHS ${CMAKE_OSX_SYSROOT}/System/Library/PrivateFrameworks) ++ PATHS ${_CMAKE_OSX_SYSROOT_PATH}/System/Library/PrivateFrameworks) + endif() + + if(NOT BACKBOARD_LIBRARY) +@@ -158,7 +158,7 @@ endif() + + add_definitions(-DLLDB_USE_OS_LOG) + +-if(${CMAKE_OSX_SYSROOT} MATCHES ".Internal.sdk$") ++if(${_CMAKE_OSX_SYSROOT_PATH} MATCHES ".Internal.sdk$") + message(STATUS "LLDB debugserver energy support is enabled") + add_definitions(-DLLDB_ENERGY) + set(ENERGY_LIBRARY -lpmenergy -lpmsample) +@@ -181,7 +181,7 @@ endif() + separate_arguments(MIG_ARCH_FLAGS_SEPARTED NATIVE_COMMAND "${MIG_ARCH_FLAGS}") + + add_custom_command(OUTPUT ${generated_mach_interfaces} +- VERBATIM COMMAND mig ${MIG_ARCH_FLAGS_SEPARTED} -isysroot ${CMAKE_OSX_SYSROOT} ${CMAKE_CURRENT_SOURCE_DIR}/MacOSX/dbgnub-mig.defs ++ VERBATIM COMMAND mig ${MIG_ARCH_FLAGS_SEPARTED} -isysroot ${_CMAKE_OSX_SYSROOT_PATH} ${CMAKE_CURRENT_SOURCE_DIR}/MacOSX/dbgnub-mig.defs + DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/MacOSX/dbgnub-mig.defs + ) + +@@ -305,7 +305,7 @@ if(APPLE_EMBEDDED) + WITH_BKS + ) + set_property(TARGET lldbDebugserverCommon APPEND PROPERTY COMPILE_FLAGS +- -F${CMAKE_OSX_SYSROOT}/System/Library/PrivateFrameworks ++ -F${_CMAKE_OSX_SYSROOT_PATH}/System/Library/PrivateFrameworks + ) + + add_lldb_library(lldbDebugserverCommon_NonUI ${lldbDebugserverCommonSources}) +diff --git a/llvm/test/CMakeLists.txt b/llvm/test/CMakeLists.txt +index 6127b76db0..0a810db531 100644 +--- a/llvm/test/CMakeLists.txt ++++ b/llvm/test/CMakeLists.txt +@@ -33,6 +33,7 @@ configure_lit_site_cfg( + MAIN_CONFIG + ${CMAKE_CURRENT_SOURCE_DIR}/lit.cfg.py + PATHS ++ "_CMAKE_OSX_SYSROOT_PATH" + "CMAKE_OSX_SYSROOT" + "LLVM_SOURCE_DIR" + "LLVM_BINARY_DIR" diff --git a/ci/vcpkg/overlay/llvm/flang_usage b/ci/vcpkg/overlay/llvm/flang_usage new file mode 100644 index 00000000000..b3cb08592f0 --- /dev/null +++ b/ci/vcpkg/overlay/llvm/flang_usage @@ -0,0 +1,5 @@ +The package flang provides CMake targets: + + find_package(Flang CONFIG REQUIRED) + target_include_directories(main PRIVATE ${FLANG_INCLUDE_DIRS}) + target_link_libraries(main PRIVATE flangFrontend flangFrontendTool ...) diff --git a/ci/vcpkg/overlay/llvm/lld_usage b/ci/vcpkg/overlay/llvm/lld_usage new file mode 100644 index 00000000000..92c8d10a085 --- /dev/null +++ b/ci/vcpkg/overlay/llvm/lld_usage @@ -0,0 +1,5 @@ +The package lld provides CMake targets: + + find_package(LLD CONFIG REQUIRED) + target_include_directories(main PRIVATE ${LLD_INCLUDE_DIRS}) + target_link_libraries(main PRIVATE lldCommon lldCore lldDriver ...) diff --git a/ci/vcpkg/overlay/llvm/llvm_usage b/ci/vcpkg/overlay/llvm/llvm_usage new file mode 100644 index 00000000000..72d57dbfa57 --- /dev/null +++ b/ci/vcpkg/overlay/llvm/llvm_usage @@ -0,0 +1,15 @@ +The package llvm provides CMake targets: + + find_package(LLVM CONFIG REQUIRED) + + list(APPEND CMAKE_MODULE_PATH "${LLVM_CMAKE_DIR}") + include(HandleLLVMOptions) + add_definitions(${LLVM_DEFINITIONS}) + + target_include_directories(main PRIVATE ${LLVM_INCLUDE_DIRS}) + + # Find the libraries that correspond to the LLVM components that we wish to use + llvm_map_components_to_libnames(llvm_libs Support Core IRReader ...) + + # Link against LLVM libraries + target_link_libraries(main PRIVATE ${llvm_libs}) diff --git a/ci/vcpkg/overlay/llvm/mlir_usage b/ci/vcpkg/overlay/llvm/mlir_usage new file mode 100644 index 00000000000..da45a1612ec --- /dev/null +++ b/ci/vcpkg/overlay/llvm/mlir_usage @@ -0,0 +1,5 @@ +The package lld provides CMake targets: + + find_package(MLIR CONFIG REQUIRED) + target_include_directories(main PRIVATE ${MLIR_INCLUDE_DIRS}) + target_link_libraries(main PRIVATE MLIRIR MLIRParser MLIRPass MLIRSupport ...) diff --git a/ci/vcpkg/overlay/llvm/portfile.cmake b/ci/vcpkg/overlay/llvm/portfile.cmake new file mode 100644 index 00000000000..b6d5bdacd02 --- /dev/null +++ b/ci/vcpkg/overlay/llvm/portfile.cmake @@ -0,0 +1,367 @@ +# Suppress warning: There should be no installed empty directories +set(VCPKG_POLICY_ALLOW_EMPTY_FOLDERS enabled) + +vcpkg_check_linkage(ONLY_STATIC_LIBRARY) + +# [BOLT] Allow to compile with MSVC (#151189) +vcpkg_download_distfile( + PATCH1_FILE + URLS https://github.com/llvm/llvm-project/commit/497d17737518d417f6411d46aef1334f642ccd81.patch?full_index=1 + SHA512 7bf4d4ee8f72fea5b8094320d1f3a71063ec19fe1b552424182c4140055bf6aacfa9ff64b0bcab0a8d6739e4b6249641f58d19fb6b35e1ada67b66b53776dc1a + FILENAME 497d17737518d417f6411d46aef1334f642ccd81.patch +) + +vcpkg_from_github( + OUT_SOURCE_PATH SOURCE_PATH + REPO llvm/llvm-project + REF "llvmorg-${VERSION}" + SHA512 85d272761253428b648f3d111b7308f8cdee74cceebec9e709126c4555ad1e78c443183ad8eb7319e0a15bafb97868ab5b5a3d86ba64812750c568dbf715d8ec + HEAD_REF main + PATCHES + 0001-fix-install-package-dir.patch + 0002-fix-tools-install-dir.patch + 0003-fix-llvm-config.patch + 0004-disable-libomp-aliases.patch + 0005-fix-runtimes.patch + 0006-create-destination-mlir-directory.patch + "${PATCH1_FILE}" +) + +vcpkg_check_features( + OUT_FEATURE_OPTIONS FEATURE_OPTIONS + FEATURES + tools LLVM_BUILD_TOOLS + tools LLVM_INCLUDE_TOOLS + utils LLVM_BUILD_UTILS + utils LLVM_INCLUDE_UTILS + utils LLVM_INSTALL_UTILS + enable-assertions LLVM_ENABLE_ASSERTIONS + enable-rtti LLVM_ENABLE_RTTI + enable-ffi LLVM_ENABLE_FFI + enable-eh LLVM_ENABLE_EH + enable-bindings LLVM_ENABLE_BINDINGS + export-symbols LLVM_EXPORT_SYMBOLS_FOR_PLUGINS +) + +vcpkg_cmake_get_vars(cmake_vars_file) +include("${cmake_vars_file}") + +# LLVM generates CMake error due to Visual Studio version 16.4 is known to miscompile part of LLVM. +# LLVM_TEMPORARILY_ALLOW_OLD_TOOLCHAIN=ON disables this error. +# See https://developercommunity.visualstudio.com/content/problem/845933/miscompile-boolean-condition-deduced-to-be-always.html +# and thread "[llvm-dev] Longstanding failing tests - clang-tidy, MachO, Polly" on llvm-dev Jan 21-23 2020. +if(VCPKG_DETECTED_CMAKE_CXX_COMPILER_ID STREQUAL "MSVC" AND VCPKG_DETECTED_MSVC_VERSION LESS "1925") + list(APPEND FEATURE_OPTIONS + -DLLVM_TEMPORARILY_ALLOW_OLD_TOOLCHAIN=ON + ) +endif() + +# Force enable or disable external libraries +set(llvm_external_libraries + zlib + libxml2 + zstd +) +foreach(external_library IN LISTS llvm_external_libraries) + string(TOLOWER "enable-${external_library}" feature_name) + string(TOUPPER "LLVM_ENABLE_${external_library}" define_name) + if(feature_name IN_LIST FEATURES) + list(APPEND FEATURE_OPTIONS + -D${define_name}=FORCE_ON + ) + else() + list(APPEND FEATURE_OPTIONS + -D${define_name}=OFF + ) + endif() +endforeach() + +# LLVM_ABI_BREAKING_CHECKS can be WITH_ASSERTS (default), FORCE_ON or FORCE_OFF. +# By default in LLVM, abi-breaking checks are enabled if assertions are enabled. +# however, this breaks linking with the debug versions, since the option is +# baked into the header files; thus, we always turn off LLVM_ABI_BREAKING_CHECKS +# unless the user asks for it +if("enable-abi-breaking-checks" IN_LIST FEATURES) + # Force enable abi-breaking checks. + list(APPEND FEATURE_OPTIONS + -DLLVM_ABI_BREAKING_CHECKS=FORCE_ON + ) +else() + # Force disable abi-breaking checks. + list(APPEND FEATURE_OPTIONS + -DLLVM_ABI_BREAKING_CHECKS=FORCE_OFF + ) +endif() + +# All projects: bolt;clang;clang-tools-extra;lld;lldb;mlir;polly +# Extra projects: flang +set(LLVM_ENABLE_PROJECTS) +if("bolt" IN_LIST FEATURES) + list(APPEND LLVM_ENABLE_PROJECTS "bolt") + list(APPEND FEATURE_OPTIONS + -DBOLT_TOOLS_INSTALL_DIR:PATH=tools/llvm + ) +endif() +if("clang" IN_LIST FEATURES) + list(APPEND LLVM_ENABLE_PROJECTS "clang") + vcpkg_check_features( + OUT_FEATURE_OPTIONS CLANG_FEATURE_OPTIONS + FEATURES + clang-enable-cir CLANG_ENABLE_CIR + clang-enable-static-analyzer CLANG_ENABLE_STATIC_ANALYZER + ) + string(REGEX MATCH "^[0-9]+" CLANG_VERSION_MAJOR ${VERSION}) + list(APPEND CLANG_FEATURE_OPTIONS + -DCLANG_INSTALL_PACKAGE_DIR:PATH=share/clang + -DCLANG_TOOLS_INSTALL_DIR:PATH=tools/llvm + # 1) LLVM/Clang tools are relocated from ./bin/ to ./tools/llvm/ (CLANG_TOOLS_INSTALL_DIR=tools/llvm) + # 2) Clang resource files should be relocated from lib/clang/ to ../tools/llvm/lib/clang/ + -DCLANG_RESOURCE_DIR=lib/clang/${CLANG_VERSION_MAJOR} + ) +endif() +if("clang-tools-extra" IN_LIST FEATURES) + list(APPEND LLVM_ENABLE_PROJECTS "clang-tools-extra") +endif() +if("flang" IN_LIST FEATURES) + if(VCPKG_DETECTED_CMAKE_CXX_COMPILER_ID STREQUAL "MSVC" AND VCPKG_TARGET_ARCHITECTURE STREQUAL "x86") + message(FATAL_ERROR "Building Flang with MSVC is not supported on x86. Disable it until issues are fixed.") + endif() + list(APPEND LLVM_ENABLE_PROJECTS "flang") + list(APPEND FEATURE_OPTIONS + -DFLANG_INSTALL_PACKAGE_DIR:PATH=share/flang + -DFLANG_TOOLS_INSTALL_DIR:PATH=tools/llvm + ) + list(APPEND FEATURE_OPTIONS + # Flang requires C++17 + -DCMAKE_CXX_STANDARD=17 + ) +endif() +if("lld" IN_LIST FEATURES) + list(APPEND LLVM_ENABLE_PROJECTS "lld") + list(APPEND FEATURE_OPTIONS + -DLLD_INSTALL_PACKAGE_DIR:PATH=share/lld + -DLLD_TOOLS_INSTALL_DIR:PATH=tools/llvm + ) +endif() +if("lldb" IN_LIST FEATURES) + list(APPEND LLVM_ENABLE_PROJECTS "lldb") + list(APPEND FEATURE_OPTIONS + -DLLDB_ENABLE_CURSES=OFF + ) +endif() +if("mlir" IN_LIST FEATURES) + list(APPEND LLVM_ENABLE_PROJECTS "mlir") + list(APPEND FEATURE_OPTIONS + -DMLIR_INSTALL_PACKAGE_DIR:PATH=share/mlir + -DMLIR_TOOLS_INSTALL_DIR:PATH=tools/llvm + -DMLIR_INSTALL_AGGREGATE_OBJECTS=OFF # Disables installation of object files in lib/objects-{CMAKE_BUILD_TYPE}. + ) + if("enable-mlir-python-bindings" IN_LIST FEATURES) + list(APPEND FEATURE_OPTIONS + -DMLIR_ENABLE_BINDINGS_PYTHON=ON + "-Dpybind11_DIR=${CURRENT_INSTALLED_DIR}/share/pybind11" + ) + endif() +endif() +if("polly" IN_LIST FEATURES) + list(APPEND LLVM_ENABLE_PROJECTS "polly") + list(APPEND FEATURE_OPTIONS + -DPOLLY_INSTALL_PACKAGE_DIR:PATH=share/polly + ) +endif() + +# Supported runtimes: libc;libclc;libcxx;libcxxabi;libunwind;compiler-rt;openmp;llvm-libgcc;offload;flang-rt +set(LLVM_ENABLE_RUNTIMES) +if("libc" IN_LIST FEATURES) + list(APPEND LLVM_ENABLE_RUNTIMES "libc") +endif() +if("libclc" IN_LIST FEATURES) + list(APPEND LLVM_ENABLE_RUNTIMES "libclc") +endif() +if("libcxx" IN_LIST FEATURES) + if(VCPKG_DETECTED_CMAKE_CXX_COMPILER_ID STREQUAL "MSVC" AND VCPKG_DETECTED_MSVC_VERSION LESS "1914") + # libcxx supports being built with clang-cl, but not with MSVC’s cl.exe, as cl doesn’t support the #include_next extension. + # Furthermore, VS 2017 or newer (19.14) is required. + # More info: https://releases.llvm.org/17.0.1/projects/libcxx/docs/BuildingLibcxx.html#support-for-windows + message(FATAL_ERROR "libcxx requiries MSVC 19.14 or newer.") + endif() + list(APPEND LLVM_ENABLE_RUNTIMES "libcxx") +endif() +if("libcxxabi" IN_LIST FEATURES) + list(APPEND LLVM_ENABLE_RUNTIMES "libcxxabi") +endif() +if("libunwind" IN_LIST FEATURES) + list(APPEND LLVM_ENABLE_RUNTIMES "libunwind") +endif() +if("compiler-rt" IN_LIST FEATURES) + list(APPEND LLVM_ENABLE_RUNTIMES "compiler-rt") + vcpkg_check_features( + OUT_FEATURE_OPTIONS COMPILER_RT_FEATURE_OPTIONS + FEATURES + enable-ios COMPILER_RT_ENABLE_IOS + ) +endif() +if("openmp" IN_LIST FEATURES) + list(APPEND LLVM_ENABLE_RUNTIMES "openmp") +endif() + +# this is for normal targets +set(known_llvm_targets + AArch64 + AMDGPU + ARM + AVR + BPF + Hexagon + Lanai + LoongArch + Mips + MSP430 + NVPTX + PowerPC + RISCV + Sparc + SPIRV + SystemZ + VE + WebAssembly + X86 + XCore +) + +set(LLVM_TARGETS_TO_BUILD) +foreach(llvm_target IN LISTS known_llvm_targets) + string(TOLOWER "target-${llvm_target}" feature_name) + if(feature_name IN_LIST FEATURES) + list(APPEND LLVM_TARGETS_TO_BUILD "${llvm_target}") + endif() +endforeach() + +# this is for experimental targets +set(known_llvm_experimental_targets + ARC + CSKY + DirectX + M68k + Xtensa +) + +set(LLVM_EXPERIMENTAL_TARGETS_TO_BUILD) +foreach(llvm_target IN LISTS known_llvm_experimental_targets) + string(TOLOWER "target-${llvm_target}" feature_name) + if(feature_name IN_LIST FEATURES) + list(APPEND LLVM_EXPERIMENTAL_TARGETS_TO_BUILD "${llvm_target}") + endif() +endforeach() + +vcpkg_find_acquire_program(PYTHON3) +get_filename_component(PYTHON3_DIR ${PYTHON3} DIRECTORY) +vcpkg_add_to_path(PREPEND "${PYTHON3_DIR}") + +file(REMOVE "${SOURCE_PATH}/llvm/cmake/modules/Findzstd.cmake") + +if("${LLVM_ENABLE_RUNTIMES}" STREQUAL "") + list(APPEND FEATURE_OPTIONS + -DLLVM_INCLUDE_RUNTIMES=OFF + -DLLVM_BUILD_RUNTIMES=OFF + -DLLVM_BUILD_RUNTIME=OFF + ) +endif() + +# At least one target must be specified, otherwise default to "all". +if("${LLVM_TARGETS_TO_BUILD}" STREQUAL "") + set(LLVM_TARGETS_TO_BUILD "all") +endif() + +vcpkg_cmake_configure( + SOURCE_PATH "${SOURCE_PATH}/llvm" + OPTIONS + -DLLVM_INCLUDE_EXAMPLES=OFF + -DLLVM_BUILD_EXAMPLES=OFF + -DLLVM_INCLUDE_TESTS=OFF + -DLLVM_BUILD_TESTS=OFF + -DLLVM_INCLUDE_BENCHMARKS=OFF + -DLLVM_BUILD_BENCHMARKS=OFF + # Force TableGen to be built with optimization. This will significantly improve build time. + -DLLVM_OPTIMIZED_TABLEGEN=ON + -DPACKAGE_VERSION=${VERSION} + # Limit the maximum number of concurrent link jobs to 1. This should fix low amount of memory issue for link. + -DLLVM_PARALLEL_LINK_JOBS=1 + -DLLVM_INSTALL_PACKAGE_DIR:PATH=share/llvm + -DLLVM_TOOLS_INSTALL_DIR:PATH=tools/llvm + "-DLLVM_ENABLE_PROJECTS=${LLVM_ENABLE_PROJECTS}" + "-DLLVM_ENABLE_RUNTIMES=${LLVM_ENABLE_RUNTIMES}" + "-DLLVM_TARGETS_TO_BUILD=${LLVM_TARGETS_TO_BUILD}" + "-DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD=${LLVM_EXPERIMENTAL_TARGETS_TO_BUILD}" + ${FEATURE_OPTIONS} + ${CLANG_FEATURE_OPTIONS} + ${COMPILER_RT_FEATURE_OPTIONS} +) + +vcpkg_cmake_install(ADD_BIN_TO_PATH) + +function(llvm_cmake_package_config_fixup package_name) + cmake_parse_arguments("arg" "DO_NOT_DELETE_PARENT_CONFIG_PATH" "FEATURE_NAME;CONFIG_PATH" "" ${ARGN}) + if(NOT DEFINED arg_FEATURE_NAME) + set(arg_FEATURE_NAME ${package_name}) + endif() + if("${arg_FEATURE_NAME}" STREQUAL "${PORT}" OR "${arg_FEATURE_NAME}" IN_LIST FEATURES) + set(args) + list(APPEND args PACKAGE_NAME "${package_name}") + if(arg_DO_NOT_DELETE_PARENT_CONFIG_PATH) + list(APPEND args "DO_NOT_DELETE_PARENT_CONFIG_PATH") + endif() + if(arg_CONFIG_PATH) + list(APPEND args "CONFIG_PATH" "${arg_CONFIG_PATH}") + endif() + vcpkg_cmake_config_fixup(${args}) + file(INSTALL "${SOURCE_PATH}/${arg_FEATURE_NAME}/LICENSE.TXT" DESTINATION "${CURRENT_PACKAGES_DIR}/share/${package_name}" RENAME copyright) + if(EXISTS "${CMAKE_CURRENT_LIST_DIR}/${package_name}_usage") + file(INSTALL "${CMAKE_CURRENT_LIST_DIR}/${package_name}_usage" DESTINATION "${CURRENT_PACKAGES_DIR}/share/${package_name}" RENAME usage) + endif() + endif() +endfunction() + +llvm_cmake_package_config_fixup("clang" DO_NOT_DELETE_PARENT_CONFIG_PATH) +llvm_cmake_package_config_fixup("flang" DO_NOT_DELETE_PARENT_CONFIG_PATH) +llvm_cmake_package_config_fixup("lld" DO_NOT_DELETE_PARENT_CONFIG_PATH) +llvm_cmake_package_config_fixup("mlir" DO_NOT_DELETE_PARENT_CONFIG_PATH) +llvm_cmake_package_config_fixup("polly" DO_NOT_DELETE_PARENT_CONFIG_PATH) +llvm_cmake_package_config_fixup("llvm") + +if(EXISTS "${CURRENT_PACKAGES_DIR}/debug/share/pkgconfig") + file(RENAME "${CURRENT_PACKAGES_DIR}/debug/share/pkgconfig" "${CURRENT_PACKAGES_DIR}/debug/lib/pkgconfig") +endif() +if(EXISTS "${CURRENT_PACKAGES_DIR}/share/pkgconfig") + file(RENAME "${CURRENT_PACKAGES_DIR}/share/pkgconfig" "${CURRENT_PACKAGES_DIR}/lib/pkgconfig") +endif() +vcpkg_fixup_pkgconfig() + +vcpkg_copy_tool_dependencies("${CURRENT_PACKAGES_DIR}/tools/${PORT}") + +# Move Clang's runtime libraries from bin/lib to tools/${PORT}/lib +if(EXISTS "${CURRENT_PACKAGES_DIR}/bin/lib") + file(MAKE_DIRECTORY "${CURRENT_PACKAGES_DIR}/tools/${PORT}") + file(RENAME "${CURRENT_PACKAGES_DIR}/bin/lib" "${CURRENT_PACKAGES_DIR}/tools/${PORT}/lib") +endif() +if(EXISTS "${CURRENT_PACKAGES_DIR}/debug/bin/lib") + file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/debug/bin/lib") +endif() + +# Remove debug headers and tools +if(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "debug") + file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/debug/include" + "${CURRENT_PACKAGES_DIR}/debug/share" + "${CURRENT_PACKAGES_DIR}/debug/tools" + ) +endif() + +# LLVM generates shared libraries in a static build (LLVM-C.dll, libclang.dll, LTO.dll, Remarks.dll, ...) +# for the corresponding export targets (used in LLVMExports-.cmake files on the Windows platform) +if(VCPKG_TARGET_IS_WINDOWS) + set(VCPKG_POLICY_DLLS_IN_STATIC_LIBRARY enabled) +else() + file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/bin" + "${CURRENT_PACKAGES_DIR}/debug/bin" + ) +endif() \ No newline at end of file diff --git a/ci/vcpkg/overlay/llvm/vcpkg.json b/ci/vcpkg/overlay/llvm/vcpkg.json new file mode 100644 index 00000000000..df3f3bb2b05 --- /dev/null +++ b/ci/vcpkg/overlay/llvm/vcpkg.json @@ -0,0 +1,492 @@ +{ + "name": "llvm", + "version": "21.1.1", + "description": "The LLVM Compiler Infrastructure.", + "homepage": "https://llvm.org", + "license": "Apache-2.0 WITH LLVM-exception", + "supports": "!uwp & !(arm & windows)", + "dependencies": [ + { + "name": "atl", + "platform": "windows & !mingw" + }, + { + "name": "vcpkg-cmake", + "host": true + }, + { + "name": "vcpkg-cmake-config", + "host": true + }, + { + "name": "vcpkg-cmake-get-vars", + "host": true + } + ], + "default-features": [ + "clang", + "enable-terminfo", + "default-targets", + "enable-bindings", + "enable-zlib", + "enable-zstd", + "lld", + "tools" + ], + "features": { + "bolt": { + "description": "BOLT is a post-link optimizer developed to speed up large applications.", + "dependencies": [ + { + "name": "llvm", + "default-features": false, + "features": [ + "tools" + ] + } + ] + }, + "clang": { + "description": "Include C Language Family Front-end.", + "dependencies": [ + { + "name": "llvm", + "default-features": false, + "features": [ + "tools" + ] + } + ] + }, + "clang-enable-cir": { + "description": "Include ClangIR.", + "dependencies": [ + { + "name": "llvm", + "default-features": false, + "features": [ + "clang", + "mlir" + ] + } + ] + }, + "clang-enable-static-analyzer": { + "description": "Include static analyzer in Clang binary.", + "dependencies": [ + { + "name": "llvm", + "default-features": false, + "features": [ + "clang" + ] + } + ] + }, + "clang-tools-extra": { + "description": "Include Clang tools.", + "dependencies": [ + { + "name": "llvm", + "default-features": false, + "features": [ + "clang" + ] + } + ] + }, + "compiler-rt": { + "description": "Include compiler's runtime libraries.", + "dependencies": [ + { + "name": "llvm", + "default-features": false, + "features": [ + "clang" + ] + } + ] + }, + "default-targets": { + "description": "Build with platform-specific default targets.", + "dependencies": [ + { + "name": "llvm", + "default-features": false, + "features": [ + "target-aarch64" + ], + "platform": "arm64" + }, + { + "name": "llvm", + "default-features": false, + "features": [ + "target-x86" + ], + "platform": "x86 | x64" + }, + { + "name": "llvm", + "default-features": false, + "features": [ + "target-arm" + ], + "platform": "arm & !arm64" + } + ] + }, + "enable-abi-breaking-checks": { + "description": "Build LLVM with LLVM_ABI_BREAKING_CHECKS=FORCE_ON." + }, + "enable-assertions": { + "description": "Build LLVM with assertions." + }, + "enable-bindings": { + "description": "Build bindings." + }, + "enable-eh": { + "description": "Build LLVM with exception handler.", + "dependencies": [ + { + "name": "llvm", + "default-features": false, + "features": [ + "enable-rtti" + ] + } + ] + }, + "enable-ffi": { + "description": "Build LLVM with FFI.", + "dependencies": [ + "libffi" + ] + }, + "enable-ios": { + "description": "Build compiler-rt for iOS SDK.", + "dependencies": [ + { + "name": "llvm", + "default-features": false, + "features": [ + "target-arm" + ] + } + ] + }, + "enable-libxml2": { + "description": "Build with LibXml2.", + "dependencies": [ + "libxml2" + ] + }, + "enable-mlir-python-bindings": { + "description": "Build MLIR Python bindings.", + "supports": "!(windows & static)", + "dependencies": [ + { + "name": "llvm", + "default-features": false, + "features": [ + "mlir" + ] + }, + "pybind11", + "python3" + ] + }, + "enable-rtti": { + "description": "Build LLVM with run-time type information." + }, + "enable-zlib": { + "description": "Build with ZLib.", + "dependencies": [ + "zlib" + ] + }, + "enable-terminfo": { + "description": "Use terminfo database if available." + }, + "enable-zstd": { + "description": "Build with zstd.", + "dependencies": [ + "zstd" + ] + }, + "export-symbols": { + "description": "Export symbols for plugins." + }, + "flang": { + "description": "Include Fortran front end.", + "dependencies": [ + { + "name": "llvm", + "default-features": false, + "features": [ + "clang", + "mlir", + "tools" + ] + } + ] + }, + "libc": { + "description": "Include libc library.", + "supports": "linux", + "dependencies": [ + { + "name": "llvm", + "default-features": false, + "features": [ + "clang", + "tools" + ] + } + ] + }, + "libclc": { + "description": "Include OpenCL library.", + "dependencies": [ + { + "name": "llvm", + "default-features": false, + "features": [ + "clang", + "tools" + ] + } + ] + }, + "libcxx": { + "description": "Include libcxx library.", + "dependencies": [ + { + "name": "llvm", + "default-features": false, + "features": [ + "clang", + "libcxxabi", + "tools" + ] + } + ] + }, + "libcxxabi": { + "description": "Include libcxxabi library.", + "dependencies": [ + { + "name": "llvm", + "default-features": false, + "features": [ + "clang", + "libcxx", + "tools" + ] + } + ] + }, + "libunwind": { + "description": "Include libunwind library.", + "dependencies": [ + { + "name": "llvm", + "default-features": false, + "features": [ + "tools" + ] + } + ] + }, + "lld": { + "description": "Include LLVM linker.", + "dependencies": [ + { + "name": "llvm", + "default-features": false, + "features": [ + "tools" + ] + } + ] + }, + "lldb": { + "description": "Include LLVM debugger.", + "dependencies": [ + { + "name": "llvm", + "default-features": false, + "features": [ + "clang", + "tools" + ] + } + ] + }, + "mlir": { + "description": "Include MLIR (Multi-Level IR Compiler Framework) project.", + "dependencies": [ + { + "name": "llvm", + "default-features": false, + "features": [ + "tools", + "utils" + ] + } + ] + }, + "openmp": { + "description": "Include LLVM OpenMP libraries.", + "dependencies": [ + { + "name": "llvm", + "default-features": false, + "features": [ + "clang", + "utils" + ] + } + ] + }, + "polly": { + "description": "Include Polly (Polyhedral optimizations for LLVM) project.", + "dependencies": [ + { + "name": "llvm", + "default-features": false, + "features": [ + "tools", + "utils" + ] + } + ] + }, + "target-aarch64": { + "description": "Build with AArch64 backend." + }, + "target-all": { + "description": "Build with all backends.", + "dependencies": [ + { + "name": "llvm", + "default-features": false, + "features": [ + "target-aarch64", + "target-amdgpu", + "target-arc", + "target-arm", + "target-avr", + "target-bpf", + "target-csky", + "target-directx", + "target-hexagon", + "target-lanai", + "target-loongarch", + "target-m68k", + "target-mips", + "target-msp430", + "target-nvptx", + "target-powerpc", + "target-riscv", + "target-sparc", + "target-spirv", + "target-systemz", + "target-ve", + "target-webassembly", + "target-x86", + "target-xcore", + "target-xtensa" + ] + } + ] + }, + "target-amdgpu": { + "description": "Build with AMDGPU backend." + }, + "target-arc": { + "description": "Build with ARC backend (experimental)." + }, + "target-arm": { + "description": "Build with ARM backend." + }, + "target-avr": { + "description": "Build with AVR backend." + }, + "target-bpf": { + "description": "Build with BPF backend." + }, + "target-csky": { + "description": "Build with CSKY backend (experimental)." + }, + "target-directx": { + "description": "Build with DirectX backend (experimental)." + }, + "target-hexagon": { + "description": "Build with Hexagon backend." + }, + "target-lanai": { + "description": "Build with Lanai backend." + }, + "target-loongarch": { + "description": "Build with LoongArch backend." + }, + "target-m68k": { + "description": "Build with M68k backend (experimental)." + }, + "target-mips": { + "description": "Build with Mips backend." + }, + "target-msp430": { + "description": "Build with MSP430 backend." + }, + "target-nvptx": { + "description": "Build with NVPTX backend." + }, + "target-powerpc": { + "description": "Build with PowerPC backend." + }, + "target-riscv": { + "description": "Build with RISC-V backend." + }, + "target-sparc": { + "description": "Build with Sparc backend." + }, + "target-spirv": { + "description": "Build with SPIRV backend." + }, + "target-systemz": { + "description": "Build with SystemZ backend." + }, + "target-ve": { + "description": "Build with VE backend." + }, + "target-webassembly": { + "description": "Build with WebAssembly backend." + }, + "target-x86": { + "description": "Build with X86 backend." + }, + "target-xcore": { + "description": "Build with XCore backend." + }, + "target-xtensa": { + "description": "Build with Xtensa backend (experimental)." + }, + "tools": { + "description": "Build LLVM tools." + }, + "utils": { + "description": "Build LLVM utils.", + "dependencies": [ + { + "name": "llvm", + "default-features": false, + "features": [ + "tools" + ] + } + ] + } + } +} diff --git a/ci/vcpkg/overlay/symengine/portfile.cmake b/ci/vcpkg/overlay/symengine/portfile.cmake new file mode 100644 index 00000000000..8bb494ec611 --- /dev/null +++ b/ci/vcpkg/overlay/symengine/portfile.cmake @@ -0,0 +1,62 @@ +vcpkg_from_github( + OUT_SOURCE_PATH SOURCE_PATH + REPO symengine/symengine + REF "v${VERSION}" + SHA512 2b6012ed65064ff81c8828032c5a3148340582274e3604db2a43797ddbaa191520ed97da41efc2e842ba4a25326f53becc51f1e98935e8c34625bc5eaac8397f + HEAD_REF master +) + +vcpkg_check_features( + OUT_FEATURE_OPTIONS FEATURE_OPTIONS + FEATURES + arb WITH_ARB + flint WITH_FLINT + mpfr WITH_MPFR + tcmalloc WITH_TCMALLOC + llvm WITH_LLVM +) + +if(integer-class-flint IN_LIST FEATURES) + set(INTEGER_CLASS flint) +endif() + +if(VCPKG_TARGET_IS_UWP) + set(VCPKG_C_FLAGS "${VCPKG_C_FLAGS} -D_CRT_SECURE_NO_WARNINGS -D_CRT_NONSTDC_NO_DEPRECATE") + set(VCPKG_CXX_FLAGS "${VCPKG_CXX_FLAGS} -D_CRT_SECURE_NO_WARNINGS -D_CRT_NONSTDC_NO_DEPRECATE") +endif() + +vcpkg_cmake_configure( + SOURCE_PATH "${SOURCE_PATH}" + OPTIONS + -DINTEGER_CLASS=${INTEGER_CLASS} + -DBUILD_BENCHMARKS=no + -DBUILD_TESTS=no + -DMSVC_WARNING_LEVEL=3 + -DMSVC_USE_MT=no + -DWITH_SYMENGINE_RCP=yes + -DWITH_SYMENGINE_TEUCHOS=no + -DWITH_SYMENGINE_THREAD_SAFE=yes + ${FEATURE_OPTIONS} +) + +vcpkg_cmake_install() + +if(EXISTS "${CURRENT_PACKAGES_DIR}/CMake") + vcpkg_cmake_config_fixup(CONFIG_PATH CMake) +elseif(EXISTS "${CURRENT_PACKAGES_DIR}/lib/cmake/${PORT}") + vcpkg_cmake_config_fixup(CONFIG_PATH lib/cmake/${PORT}) +endif() + +vcpkg_copy_pdbs() + +file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/debug/include") +file(REMOVE "${CURRENT_PACKAGES_DIR}/include/symengine/symengine_config_cling.h") + +vcpkg_replace_string("${CURRENT_PACKAGES_DIR}/share/symengine/SymEngineConfig.cmake" "${CURRENT_BUILDTREES_DIR}" "") # not used, inside if (False) +vcpkg_replace_string("${CURRENT_PACKAGES_DIR}/share/symengine/SymEngineConfig.cmake" + [[${SYMENGINE_CMAKE_DIR}/../../../include]] + [[${SYMENGINE_CMAKE_DIR}/../../include]] + IGNORE_UNCHANGED +) + +vcpkg_install_copyright(FILE_LIST "${SOURCE_PATH}/LICENSE") diff --git a/ci/vcpkg/overlay/symengine/vcpkg.json b/ci/vcpkg/overlay/symengine/vcpkg.json new file mode 100644 index 00000000000..702d5fd06f3 --- /dev/null +++ b/ci/vcpkg/overlay/symengine/vcpkg.json @@ -0,0 +1,73 @@ +{ + "name": "symengine", + "version": "0.14.0", + "description": "SymEngine is a fast symbolic manipulation library", + "homepage": "https://github.com/symengine/symengine", + "license": "BSD-3-Clause", + "supports": "!uwp", + "dependencies": [ + "boost-math", + "boost-random", + { + "name": "symengine", + "default-features": false, + "features": [ + "integer-class-flint" + ] + }, + { + "name": "vcpkg-cmake", + "host": true + }, + { + "name": "vcpkg-cmake-config", + "host": true + } + ], + "default-features": [ + "arb", + "llvm", + "mpfr" + ], + "features": { + "arb": { + "description": "Build with arb", + "dependencies": [ + "arb" + ] + }, + "flint": { + "description": "Build with flint", + "dependencies": [ + "flint" + ] + }, + "integer-class-flint": { + "description": "Use flint integer class", + "dependencies": [ + "flint" + ] + }, + "llvm": { + "description": "Build with LLVM", + "dependencies": [ + { + "name": "llvm", + "default-features": false + } + ] + }, + "mpfr": { + "description": "Build with mpfr", + "dependencies": [ + "mpfr" + ] + }, + "tcmalloc": { + "description": "Build with tcmalloc", + "dependencies": [ + "gperftools" + ] + } + } +} diff --git a/ci/vcpkg/vcpkg.json b/ci/vcpkg/vcpkg.json index 5dfe61a0c60..eefe0098ba2 100644 --- a/ci/vcpkg/vcpkg.json +++ b/ci/vcpkg/vcpkg.json @@ -75,7 +75,28 @@ { "name": "llvm", "default-features": false, - "version>=": "18.1", + "version>=": "21.1.1", + "features": [ + "clang", + "default-targets", + "enable-bindings", + "enable-terminfo", + "enable-zlib", + "enable-zstd", + "enable-rtti", + "lld", + "tools" + ] + } + ] + }, + "gandiva-llvm": { + "description": "Gandiva support", + "dependencies": [ + { + "name": "llvm", + "default-features": false, + "version>=": "21.1.1", "features": [ "clang", "default-targets", diff --git a/cpp/Brewfile b/cpp/Brewfile index 4c42607568c..5a5d7435e72 100644 --- a/cpp/Brewfile +++ b/cpp/Brewfile @@ -28,7 +28,6 @@ brew "git" brew "glog" brew "googletest" brew "grpc" -brew "llvm" brew "lz4" brew "mimalloc" brew "ninja" diff --git a/cpp/src/gandiva/engine.cc b/cpp/src/gandiva/engine.cc index a55421b1b48..19c2b0260b8 100644 --- a/cpp/src/gandiva/engine.cc +++ b/cpp/src/gandiva/engine.cc @@ -330,6 +330,7 @@ Engine::Engine(const std::shared_ptr& conf, // LLVM 10 doesn't like the expr function name to be the same as the module name auto module_id = "gdv_module_" + std::to_string(reinterpret_cast(this)); module_ = std::make_unique(module_id, *context_); + module_->setDataLayout(target_machine_->createDataLayout()); } Engine::~Engine() {} diff --git a/cpp/src/gandiva/llvm_types.h b/cpp/src/gandiva/llvm_types.h index 447989b52e0..3f6a01f2378 100644 --- a/cpp/src/gandiva/llvm_types.h +++ b/cpp/src/gandiva/llvm_types.h @@ -73,7 +73,8 @@ class GANDIVA_EXPORT LLVMTypes { template llvm::Constant* int_constant(ctype val) { - return llvm::ConstantInt::get(context_, llvm::APInt(N, val)); + constexpr bool is_signed = std::is_signed_v; + return llvm::ConstantInt::get(context_, llvm::APInt(N, val, is_signed)); } llvm::Constant* i1_constant(bool val) { return int_constant(val); } diff --git a/cpp/src/gandiva/tests/boolean_expr_test.cc b/cpp/src/gandiva/tests/boolean_expr_test.cc index a54f7622ba2..434fbfb247b 100644 --- a/cpp/src/gandiva/tests/boolean_expr_test.cc +++ b/cpp/src/gandiva/tests/boolean_expr_test.cc @@ -36,6 +36,55 @@ class TestBooleanExpr : public ::testing::Test { arrow::MemoryPool* pool_; }; +TEST_F(TestBooleanExpr, OrWithManyEqualityChecks) { + // Test case for: field IN (-8, -7, -6, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5) + // This tests the scenario where IN expression is rewritten as OR with many equality checks + // OR(=($7, -8), =($7, -7), ..., =($7, 5)) + + auto field0 = field("f0", int32()); + auto schema = arrow::schema({field0}); + + // output fields + auto field_result = field("res", boolean()); + + // build expression: (f0 == -8) || (f0 == -7) || ... || (f0 == 5) + auto node_f0 = TreeExprBuilder::MakeField(field0); + auto lit_minus8 = TreeExprBuilder::MakeLiteral((int32_t)-8); + auto lit_minus5 = TreeExprBuilder::MakeLiteral((int32_t)-5); + auto lit_0 = TreeExprBuilder::MakeLiteral((int32_t)0); + auto lit_5 = TreeExprBuilder::MakeLiteral((int32_t)5); + auto lit_10 = TreeExprBuilder::MakeLiteral((int32_t)10); + + auto eq_minus8 = TreeExprBuilder::MakeFunction("equal", {node_f0, lit_minus8}, boolean()); + auto eq_minus5 = TreeExprBuilder::MakeFunction("equal", {node_f0, lit_minus5}, boolean()); + auto eq_0 = TreeExprBuilder::MakeFunction("equal", {node_f0, lit_0}, boolean()); + auto eq_5 = TreeExprBuilder::MakeFunction("equal", {node_f0, lit_5}, boolean()); + auto eq_10 = TreeExprBuilder::MakeFunction("equal", {node_f0, lit_10}, boolean()); + + // Build OR: (f0 == -8) || (f0 == -5) || (f0 == 0) || (f0 == 5) || (f0 == 10) + auto node_or = TreeExprBuilder::MakeOr({eq_minus8, eq_minus5, eq_0, eq_5, eq_10}); + auto expr = TreeExprBuilder::MakeExpression(node_or, field_result); + + // Build a projector for the expressions. + std::shared_ptr projector; + auto status = Projector::Make(schema, {expr}, TestConfiguration(), &projector); + EXPECT_TRUE(status.ok()); + + // Test data: -10, -8, -5, 0, 5, 10, 15 + // Expected: true for indices 1(-8), 2(-5), 3(0), 4(5), false for others + int num_records = 7; + auto array0 = MakeArrowArrayInt32({-10, -8, -5, 0, 5, 10, 15}, + {true, true, true, true, true, true, true}); + auto exp = MakeArrowArrayBool({false, true, true, true, true, true, false}, + {true, true, true, true, true, true, true}); + auto in_batch = arrow::RecordBatch::Make(schema, num_records, {array0}); + + arrow::ArrayVector outputs; + status = projector->Evaluate(*in_batch, pool_, &outputs); + EXPECT_TRUE(status.ok()); + EXPECT_ARROW_ARRAY_EQUALS(exp, outputs.at(0)); +} + TEST_F(TestBooleanExpr, SimpleAnd) { // schema for input fields auto fielda = field("a", int32());