From 5b68c82e8e3c84d6d07d8e749f27036e44eb459b Mon Sep 17 00:00:00 2001 From: fsagbuya Date: Tue, 7 Oct 2025 17:24:20 +0800 Subject: [PATCH 1/5] remove local LLVM 15 build --- llvm/15/clang/default.nix | 97 ------------ llvm/15/clang/gnu-install-dirs.patch | 105 ------------- llvm/15/clang/purity.patch | 29 ---- llvm/15/lld/default.nix | 49 ------- llvm/15/lld/gnu-install-dirs.patch | 46 ------ llvm/15/llvm/default.nix | 86 ----------- llvm/15/llvm/gnu-install-dirs.patch | 138 ------------------ ...-script-runner-set-dyld-library-path.patch | 26 ---- .../llvm-lit-cfg-add-libs-to-dylib-path.patch | 79 ---------- llvm/default.nix | 87 ----------- 10 files changed, 742 deletions(-) delete mode 100644 llvm/15/clang/default.nix delete mode 100644 llvm/15/clang/gnu-install-dirs.patch delete mode 100644 llvm/15/clang/purity.patch delete mode 100644 llvm/15/lld/default.nix delete mode 100644 llvm/15/lld/gnu-install-dirs.patch delete mode 100644 llvm/15/llvm/default.nix delete mode 100644 llvm/15/llvm/gnu-install-dirs.patch delete mode 100644 llvm/15/llvm/lit-shell-script-runner-set-dyld-library-path.patch delete mode 100644 llvm/15/llvm/llvm-lit-cfg-add-libs-to-dylib-path.patch delete mode 100644 llvm/default.nix diff --git a/llvm/15/clang/default.nix b/llvm/15/clang/default.nix deleted file mode 100644 index d4e8d3558b..0000000000 --- a/llvm/15/clang/default.nix +++ /dev/null @@ -1,97 +0,0 @@ -{ - lib, - stdenv, - cmake, - ninja, - python3, - libxml2, - runCommand, - libllvm, - src, - version, - llvm_meta, - getVersionFile, -}: -stdenv.mkDerivation { - pname = "clang"; - inherit version; - - # Extract clang from monorepo - src = runCommand "clang-src-${version}" {} '' - mkdir -p "$out" - cp -r ${src}/cmake "$out" - cp -r ${src}/clang "$out" - cp -r ${src}/clang-tools-extra "$out" - ''; - - sourceRoot = "clang-src-${version}/clang"; - - outputs = [ - "out" - "lib" - "dev" - "python" - ]; - - patches = [ - (getVersionFile "clang/purity.patch") - (getVersionFile "clang/gnu-install-dirs.patch") - ]; - - nativeBuildInputs = [ - cmake - ninja - python3 - ]; - buildInputs = [ - libxml2 - libllvm - ]; - - cmakeFlags = [ - "-DLLVM_ENABLE_RTTI=ON" - "-DCLANG_INSTALL_PACKAGE_DIR=${placeholder "dev"}/lib/cmake/clang" - "-DLLVM_TABLEGEN_EXE=${libllvm.dev}/bin/llvm-tblgen" - ]; - - postPatch = '' - # Link clang-tools-extra - (cd tools && ln -s ../../clang-tools-extra extra) - ''; - - postInstall = '' - # Create cpp symlink - ln -sv $out/bin/clang $out/bin/cpp - - # Move libclang to lib output - moveToOutput "lib/libclang.*" "$lib" - moveToOutput "lib/libclang-cpp.*" "$lib" - - # Setup python output - mkdir -p $python/bin $python/share/clang/ - mv $out/bin/{git-clang-format,scan-view} $python/bin - if [ -e $out/bin/set-xcode-analyzer ]; then - mv $out/bin/set-xcode-analyzer $python/bin - fi - mv $out/share/clang/*.py $python/share/clang - - # Remove test binary - rm $out/bin/c-index-test - - # Move tblgen to dev - mkdir -p $dev/bin - cp bin/clang-tblgen $dev/bin - ''; - - passthru = { - inherit libllvm; - isClang = true; - }; - - meta = - llvm_meta - // { - description = "C language family frontend for LLVM"; - homepage = "https://clang.llvm.org/"; - }; -} diff --git a/llvm/15/clang/gnu-install-dirs.patch b/llvm/15/clang/gnu-install-dirs.patch deleted file mode 100644 index f767c56836..0000000000 --- a/llvm/15/clang/gnu-install-dirs.patch +++ /dev/null @@ -1,105 +0,0 @@ -diff --git a/CMakeLists.txt b/CMakeLists.txt -index c27beec313d7..480f13e73c9f 100644 ---- a/CMakeLists.txt -+++ b/CMakeLists.txt -@@ -78,15 +78,17 @@ if(CLANG_BUILT_STANDALONE) - if (NOT LLVM_CONFIG_FOUND) - # Pull values from LLVMConfig.cmake. We can drop this once the llvm-config - # path is removed. -- set(MAIN_INCLUDE_DIR "${LLVM_INCLUDE_DIR}") -+ set(INCLUDE_DIRS ${LLVM_INCLUDE_DIRS}) - set(LLVM_OBJ_DIR "${LLVM_BINARY_DIR}") - # N.B. this is just a default value, the CACHE PATHs below can be overriden. - set(MAIN_SRC_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../llvm") - set(TOOLS_BINARY_DIR "${LLVM_TOOLS_BINARY_DIR}") - set(LIBRARY_DIR "${LLVM_LIBRARY_DIR}") -+ else() -+ set(INCLUDE_DIRS "${LLVM_BINARY_DIR}/include" "${MAIN_INCLUDE_DIR}") - endif() - -- set(LLVM_MAIN_INCLUDE_DIR "${MAIN_INCLUDE_DIR}" CACHE PATH "Path to llvm/include") -+ set(LLVM_INCLUDE_DIRS ${INCLUDE_DIRS} CACHE PATH "Path to llvm/include and any other header dirs needed") - set(LLVM_BINARY_DIR "${LLVM_OBJ_ROOT}" CACHE PATH "Path to LLVM build tree") - set(LLVM_MAIN_SRC_DIR "${MAIN_SRC_DIR}" CACHE PATH "Path to LLVM source tree") - set(LLVM_TOOLS_BINARY_DIR "${TOOLS_BINARY_DIR}" CACHE PATH "Path to llvm/bin") -@@ -128,7 +130,7 @@ if(CLANG_BUILT_STANDALONE) - set(LLVM_INCLUDE_TESTS ON) - endif() - -- include_directories("${LLVM_BINARY_DIR}/include" "${LLVM_MAIN_INCLUDE_DIR}") -+ include_directories(${LLVM_INCLUDE_DIRS}) - link_directories("${LLVM_LIBRARY_DIR}") - - set( CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin ) -diff --git a/cmake/modules/AddClang.cmake b/cmake/modules/AddClang.cmake -index 21ac332e4f5f..b16c314bd1e2 100644 ---- a/cmake/modules/AddClang.cmake -+++ b/cmake/modules/AddClang.cmake -@@ -119,8 +119,8 @@ macro(add_clang_library name) - install(TARGETS ${lib} - COMPONENT ${lib} - ${export_to_clangtargets} -- LIBRARY DESTINATION lib${LLVM_LIBDIR_SUFFIX} -- ARCHIVE DESTINATION lib${LLVM_LIBDIR_SUFFIX} -+ LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}${LLVM_LIBDIR_SUFFIX}" -+ ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}${LLVM_LIBDIR_SUFFIX}" - RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}") - - if (NOT LLVM_ENABLE_IDE) -diff --git a/lib/Headers/CMakeLists.txt b/lib/Headers/CMakeLists.txt -index 6e2060991b92..b9bc930d26b8 100644 ---- a/lib/Headers/CMakeLists.txt -+++ b/lib/Headers/CMakeLists.txt -@@ -420,7 +420,7 @@ add_header_target("openmp-resource-headers" ${openmp_wrapper_files}) - add_header_target("windows-resource-headers" ${windows_only_files}) - add_header_target("utility-resource-headers" ${utility_files}) - --set(header_install_dir lib${LLVM_LIBDIR_SUFFIX}/clang/${CLANG_VERSION}/include) -+set(header_install_dir ${CMAKE_INSTALL_LIBDIR}${LLVM_LIBDIR_SUFFIX}/clang/${CLANG_VERSION}/include) - - ############################################################# - # Install rules for the catch-all clang-resource-headers target -diff --git a/tools/libclang/CMakeLists.txt b/tools/libclang/CMakeLists.txt -index 8d95d0900e8c..ebc70ff7526d 100644 ---- a/tools/libclang/CMakeLists.txt -+++ b/tools/libclang/CMakeLists.txt -@@ -180,7 +180,7 @@ foreach(PythonVersion ${CLANG_PYTHON_BINDINGS_VERSIONS}) - COMPONENT - libclang-python-bindings - DESTINATION -- "lib${LLVM_LIBDIR_SUFFIX}/python${PythonVersion}/site-packages") -+ "${CMAKE_INSTALL_LIBDIR}${LLVM_LIBDIR_SUFFIX}/python${PythonVersion}/site-packages") - endforeach() - if(NOT LLVM_ENABLE_IDE) - add_custom_target(libclang-python-bindings) -diff --git a/tools/scan-build-py/CMakeLists.txt b/tools/scan-build-py/CMakeLists.txt -index 061dc7ef4dd9..adc54b2edc32 100644 ---- a/tools/scan-build-py/CMakeLists.txt -+++ b/tools/scan-build-py/CMakeLists.txt -@@ -88,7 +88,7 @@ foreach(lib ${LibScanbuild}) - DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/lib/libscanbuild/${lib}) - list(APPEND Depends ${CMAKE_BINARY_DIR}/lib/libscanbuild/${lib}) - install(PROGRAMS lib/libscanbuild/${lib} -- DESTINATION lib/libscanbuild -+ DESTINATION "${CMAKE_INSTALL_LIBDIR}/libscanbuild" - COMPONENT scan-build-py) - endforeach() - -@@ -106,7 +106,7 @@ foreach(resource ${LibScanbuildResources}) - DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/lib/libscanbuild/resources/${resource}) - list(APPEND Depends ${CMAKE_BINARY_DIR}/lib/libscanbuild/resources/${resource}) - install(PROGRAMS lib/libscanbuild/resources/${resource} -- DESTINATION lib/libscanbuild/resources -+ DESTINATION "${CMAKE_INSTALL_LIBDIR}/libscanbuild/resources" - COMPONENT scan-build-py) - endforeach() - -@@ -122,7 +122,7 @@ foreach(lib ${LibEar}) - DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/lib/libear/${lib}) - list(APPEND Depends ${CMAKE_BINARY_DIR}/lib/libear/${lib}) - install(PROGRAMS lib/libear/${lib} -- DESTINATION lib/libear -+ DESTINATION "${CMAKE_INSTALL_LIBDIR}/libear" - COMPONENT scan-build-py) - endforeach() - diff --git a/llvm/15/clang/purity.patch b/llvm/15/clang/purity.patch deleted file mode 100644 index 1c94f293eb..0000000000 --- a/llvm/15/clang/purity.patch +++ /dev/null @@ -1,29 +0,0 @@ -From 4add81bba40dcec62c4ea4481be8e35ac53e89d8 Mon Sep 17 00:00:00 2001 -From: Will Dietz -Date: Thu, 18 May 2017 11:56:12 -0500 -Subject: [PATCH] "purity" patch for 5.0 - ---- - lib/Driver/ToolChains/Gnu.cpp | 7 ------- - 1 file changed, 7 deletions(-) - -diff --git a/lib/Driver/ToolChains/Gnu.cpp b/lib/Driver/ToolChains/Gnu.cpp -index fe3c0191bb..c6a482bece 100644 ---- a/lib/Driver/ToolChains/Gnu.cpp -+++ b/lib/Driver/ToolChains/Gnu.cpp -@@ -487,13 +487,7 @@ void tools::gnutools::Linker::ConstructJob(Compilation &C, const JobAction &JA, - } else { - if (Args.hasArg(options::OPT_rdynamic)) - CmdArgs.push_back("-export-dynamic"); - -- if (!Args.hasArg(options::OPT_shared) && !IsStaticPIE && -- !Args.hasArg(options::OPT_r)) { -- CmdArgs.push_back("-dynamic-linker"); -- CmdArgs.push_back(Args.MakeArgString(Twine(D.DyldPrefix) + -- ToolChain.getDynamicLinker(Args))); -- } - } - - CmdArgs.push_back("-o"); --- -2.11.0 diff --git a/llvm/15/lld/default.nix b/llvm/15/lld/default.nix deleted file mode 100644 index 653c33727b..0000000000 --- a/llvm/15/lld/default.nix +++ /dev/null @@ -1,49 +0,0 @@ -{ - lib, - stdenv, - cmake, - ninja, - libxml2, - libllvm, - runCommand, - src, - version, - llvm_meta, - getVersionFile, -}: -stdenv.mkDerivation { - pname = "lld"; - inherit version; - - src = runCommand "lld-src-${version}" {} '' - mkdir -p "$out" - cp -r ${src}/cmake "$out" - cp -r ${src}/lld "$out" - mkdir -p "$out/libunwind" - cp -r ${src}/libunwind/include "$out/libunwind" - mkdir -p "$out/llvm" - ''; - - sourceRoot = "lld-src-${version}/lld"; - - outputs = ["out" "lib" "dev"]; - - patches = [ - (getVersionFile "lld/gnu-install-dirs.patch") - ]; - - nativeBuildInputs = [cmake ninja]; - buildInputs = [libllvm libxml2]; - - cmakeFlags = [ - "-DLLD_INSTALL_PACKAGE_DIR=${placeholder "dev"}/lib/cmake/lld" - "-DLLVM_TABLEGEN_EXE=${libllvm.dev}/bin/llvm-tblgen" - ]; - - meta = - llvm_meta - // { - description = "LLVM linker"; - homepage = "https://lld.llvm.org/"; - }; -} diff --git a/llvm/15/lld/gnu-install-dirs.patch b/llvm/15/lld/gnu-install-dirs.patch deleted file mode 100644 index ea62b2ad50..0000000000 --- a/llvm/15/lld/gnu-install-dirs.patch +++ /dev/null @@ -1,46 +0,0 @@ -diff --git a/CMakeLists.txt b/CMakeLists.txt -index dcc649629a4b..58dca54642e4 100644 ---- a/CMakeLists.txt -+++ b/CMakeLists.txt -@@ -70,13 +70,15 @@ if(LLD_BUILT_STANDALONE) - if (NOT LLVM_CONFIG_FOUND) - # Pull values from LLVMConfig.cmake. We can drop this once the llvm-config - # path is removed. -- set(MAIN_INCLUDE_DIR "${LLVM_INCLUDE_DIR}") -+ set(INCLUDE_DIRS ${LLVM_INCLUDE_DIRS}) - set(LLVM_OBJ_DIR "${LLVM_BINARY_DIR}") - # N.B. this is just a default value, the CACHE PATHs below can be overridden. - set(MAIN_SRC_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../llvm") -+ else() -+ set(INCLUDE_DIRS "${LLVM_BINARY_DIR}/include" "${MAIN_INCLUDE_DIR}") - endif() - -- set(LLVM_MAIN_INCLUDE_DIR "${MAIN_INCLUDE_DIR}" CACHE PATH "Path to llvm/include") -+ set(LLVM_INCLUDE_DIRS ${INCLUDE_DIRS} CACHE PATH "Path to llvm/include and any other header dirs needed") - set(LLVM_BINARY_DIR "${LLVM_OBJ_ROOT}" CACHE PATH "Path to LLVM build tree") - set(LLVM_MAIN_SRC_DIR "${MAIN_SRC_DIR}" CACHE PATH "Path to LLVM source tree") - -@@ -95,7 +97,7 @@ if(LLD_BUILT_STANDALONE) - - set(PACKAGE_VERSION "${LLVM_PACKAGE_VERSION}") - -- include_directories("${LLVM_BINARY_DIR}/include" ${LLVM_INCLUDE_DIRS}) -+ include_directories(${LLVM_INCLUDE_DIRS}) - link_directories(${LLVM_LIBRARY_DIRS}) - - if(LLVM_INCLUDE_TESTS) -diff --git a/cmake/modules/AddLLD.cmake b/cmake/modules/AddLLD.cmake -index d3924f7243d4..42a7cd62281c 100644 ---- a/cmake/modules/AddLLD.cmake -+++ b/cmake/modules/AddLLD.cmake -@@ -18,8 +18,8 @@ macro(add_lld_library name) - install(TARGETS ${name} - COMPONENT ${name} - ${export_to_lldtargets} -- LIBRARY DESTINATION lib${LLVM_LIBDIR_SUFFIX} -- ARCHIVE DESTINATION lib${LLVM_LIBDIR_SUFFIX} -+ LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}${LLVM_LIBDIR_SUFFIX}" -+ ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}${LLVM_LIBDIR_SUFFIX}" - RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}") - - if (${ARG_SHARED} AND NOT CMAKE_CONFIGURATION_TYPES) diff --git a/llvm/15/llvm/default.nix b/llvm/15/llvm/default.nix deleted file mode 100644 index 8cbf6c75f9..0000000000 --- a/llvm/15/llvm/default.nix +++ /dev/null @@ -1,86 +0,0 @@ -{ - lib, - stdenv, - cmake, - ninja, - python3, - libffi, - libxml2, - ncurses, - zlib, - runCommand, - src, - version, - llvm_meta, - getVersionFile, -}: -stdenv.mkDerivation { - pname = "llvm"; - inherit version; - - src = runCommand "llvm-src-${version}" {} '' - mkdir -p "$out" - cp -r ${src}/llvm "$out" - cp -r ${src}/cmake "$out" - cp -r ${src}/third-party "$out" - ''; - - sourceRoot = "llvm-src-${version}/llvm"; - - outputs = ["out" "lib" "dev" "python"]; - - patches = [ - (getVersionFile "llvm/gnu-install-dirs.patch") - (getVersionFile "llvm/llvm-lit-cfg-add-libs-to-dylib-path.patch") - (getVersionFile "llvm/lit-shell-script-runner-set-dyld-library-path.patch") - ]; - - nativeBuildInputs = [cmake ninja python3]; - buildInputs = [libxml2 libffi]; - propagatedBuildInputs = [ncurses zlib]; - - cmakeBuildType = "Release"; - - cmakeFlags = [ - "-DLLVM_INSTALL_PACKAGE_DIR=${placeholder "dev"}/lib/cmake/llvm" - "-DLLVM_ENABLE_RTTI=ON" - "-DLLVM_LINK_LLVM_DYLIB=ON" - "-DLLVM_INSTALL_UTILS=ON" - "-DLLVM_BUILD_TESTS=OFF" - "-DLLVM_ENABLE_FFI=ON" - "-DLLVM_HOST_TRIPLE=${stdenv.hostPlatform.config}" - "-DLLVM_DEFAULT_TARGET_TRIPLE=${stdenv.hostPlatform.config}" - "-DLLVM_ENABLE_DUMP=ON" - "-DLLVM_ENABLE_TERMINFO=ON" - "-DLLVM_INCLUDE_TESTS=OFF" - ]; - - LDFLAGS = "-Wl,--build-id=sha1"; - - postInstall = '' - # Move opt-viewer to python output - mkdir -p $python/share - mv $out/share/opt-viewer $python/share/opt-viewer - - # Move llvm-config to dev output - moveToOutput "bin/llvm-config*" "$dev" - - # Move llvm-tblgen to dev output (needed by clang and lld) - moveToOutput "bin/llvm-tblgen" "$dev" - - # Fix cmake config to point to dev output - substituteInPlace "$dev/lib/cmake/llvm/LLVMExports-release.cmake" \ - --replace-fail "$out/bin/llvm-config" "$dev/bin/llvm-config" \ - --replace-fail "$out/bin/llvm-tblgen" "$dev/bin/llvm-tblgen" - - substituteInPlace "$dev/lib/cmake/llvm/LLVMConfig.cmake" \ - --replace-fail 'set(LLVM_BINARY_DIR "''${LLVM_INSTALL_PREFIX}")' 'set(LLVM_BINARY_DIR "'"$lib"'")' - ''; - - meta = - llvm_meta - // { - description = "LLVM compiler infrastructure"; - homepage = "https://llvm.org/"; - }; -} diff --git a/llvm/15/llvm/gnu-install-dirs.patch b/llvm/15/llvm/gnu-install-dirs.patch deleted file mode 100644 index 0ef317af8c..0000000000 --- a/llvm/15/llvm/gnu-install-dirs.patch +++ /dev/null @@ -1,138 +0,0 @@ -diff --git a/CMakeLists.txt b/CMakeLists.txt -index 45399dc0537e..5d946e9e6583 100644 ---- a/CMakeLists.txt -+++ b/CMakeLists.txt -@@ -942,7 +942,7 @@ if (NOT TENSORFLOW_AOT_PATH STREQUAL "") - add_subdirectory(${TENSORFLOW_AOT_PATH}/xla_aot_runtime_src - ${CMAKE_ARCHIVE_OUTPUT_DIRECTORY}/tf_runtime) - install(TARGETS tf_xla_runtime EXPORT LLVMExports -- ARCHIVE DESTINATION lib${LLVM_LIBDIR_SUFFIX} COMPONENT tf_xla_runtime) -+ ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}${LLVM_LIBDIR_SUFFIX} COMPONENT tf_xla_runtime) - set_property(GLOBAL APPEND PROPERTY LLVM_EXPORTS tf_xla_runtime) - # Once we add more modules, we should handle this more automatically. - if (DEFINED LLVM_OVERRIDE_MODEL_HEADER_INLINERSIZEMODEL) -diff --git a/cmake/modules/AddLLVM.cmake b/cmake/modules/AddLLVM.cmake -index 057431208322..56f0dcb258da 100644 ---- a/cmake/modules/AddLLVM.cmake -+++ b/cmake/modules/AddLLVM.cmake -@@ -844,8 +844,8 @@ macro(add_llvm_library name) - get_target_export_arg(${name} LLVM export_to_llvmexports ${umbrella}) - install(TARGETS ${name} - ${export_to_llvmexports} -- LIBRARY DESTINATION lib${LLVM_LIBDIR_SUFFIX} COMPONENT ${name} -- ARCHIVE DESTINATION lib${LLVM_LIBDIR_SUFFIX} COMPONENT ${name} -+ LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}${LLVM_LIBDIR_SUFFIX}" COMPONENT ${name} -+ ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}${LLVM_LIBDIR_SUFFIX}" COMPONENT ${name} - RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}" COMPONENT ${name}) - - if (NOT LLVM_ENABLE_IDE) -@@ -2007,7 +2007,7 @@ function(llvm_install_library_symlink name dest type) - set(full_name ${CMAKE_${type}_LIBRARY_PREFIX}${name}${CMAKE_${type}_LIBRARY_SUFFIX}) - set(full_dest ${CMAKE_${type}_LIBRARY_PREFIX}${dest}${CMAKE_${type}_LIBRARY_SUFFIX}) - -- set(output_dir lib${LLVM_LIBDIR_SUFFIX}) -+ set(output_dir ${CMAKE_INSTALL_FULL_LIBDIR}${LLVM_LIBDIR_SUFFIX}) - if(WIN32 AND "${type}" STREQUAL "SHARED") - set(output_dir "${CMAKE_INSTALL_BINDIR}") - endif() -@@ -2271,15 +2271,15 @@ function(llvm_setup_rpath name) - - if (APPLE) - set(_install_name_dir INSTALL_NAME_DIR "@rpath") -- set(_install_rpath "@loader_path/../lib${LLVM_LIBDIR_SUFFIX}" ${extra_libdir}) -+ set(_install_rpath "@loader_path/../${CMAKE_INSTALL_LIBDIR}${LLVM_LIBDIR_SUFFIX}" ${extra_libdir}) - elseif(${CMAKE_SYSTEM_NAME} MATCHES "AIX" AND BUILD_SHARED_LIBS) - # $ORIGIN is not interpreted at link time by aix ld. - # Since BUILD_SHARED_LIBS is only recommended for use by developers, - # hardcode the rpath to build/install lib dir first in this mode. - # FIXME: update this when there is better solution. -- set(_install_rpath "${LLVM_LIBRARY_OUTPUT_INTDIR}" "${CMAKE_INSTALL_PREFIX}/lib${LLVM_LIBDIR_SUFFIX}" ${extra_libdir}) -+ set(_install_rpath "${LLVM_LIBRARY_OUTPUT_INTDIR}" "${CMAKE_INSTALL_FULL_LIBDIR}${LLVM_LIBDIR_SUFFIX}" ${extra_libdir}) - elseif(UNIX) -- set(_install_rpath "\$ORIGIN/../lib${LLVM_LIBDIR_SUFFIX}" ${extra_libdir}) -+ set(_install_rpath "\$ORIGIN/../${CMAKE_INSTALL_LIBDIR}${LLVM_LIBDIR_SUFFIX}" ${extra_libdir}) - if(${CMAKE_SYSTEM_NAME} MATCHES "(FreeBSD|DragonFly)") - set_property(TARGET ${name} APPEND_STRING PROPERTY - LINK_FLAGS " -Wl,-z,origin ") -diff --git a/cmake/modules/AddOCaml.cmake b/cmake/modules/AddOCaml.cmake -index 891c9e6d618c..8d963f3b0069 100644 ---- a/cmake/modules/AddOCaml.cmake -+++ b/cmake/modules/AddOCaml.cmake -@@ -147,9 +147,9 @@ function(add_ocaml_library name) - endforeach() - - if( APPLE ) -- set(ocaml_rpath "@executable_path/../../../lib${LLVM_LIBDIR_SUFFIX}") -+ set(ocaml_rpath "@executable_path/../../../${CMAKE_INSTALL_LIBDIR}${LLVM_LIBDIR_SUFFIX}") - elseif( UNIX ) -- set(ocaml_rpath "\\$ORIGIN/../../../lib${LLVM_LIBDIR_SUFFIX}") -+ set(ocaml_rpath "\\$ORIGIN/../../../${CMAKE_INSTALL_LIBDIR}${LLVM_LIBDIR_SUFFIX}") - endif() - list(APPEND ocaml_flags "-ldopt" "-Wl,-rpath,${ocaml_rpath}") - -diff --git a/cmake/modules/CMakeLists.txt b/cmake/modules/CMakeLists.txt -index d4b0ab959148..26ed981fd09f 100644 ---- a/cmake/modules/CMakeLists.txt -+++ b/cmake/modules/CMakeLists.txt -@@ -128,7 +128,7 @@ set(LLVM_CONFIG_INCLUDE_DIRS - ) - list(REMOVE_DUPLICATES LLVM_CONFIG_INCLUDE_DIRS) - --extend_path(LLVM_CONFIG_LIBRARY_DIR "\${LLVM_INSTALL_PREFIX}" "lib\${LLVM_LIBDIR_SUFFIX}") -+extend_path(LLVM_CONFIG_LIBRARY_DIR "\${LLVM_INSTALL_PREFIX}" "${CMAKE_INSTALL_LIBDIR}\${LLVM_LIBDIR_SUFFIX}") - set(LLVM_CONFIG_LIBRARY_DIRS - "${LLVM_CONFIG_LIBRARY_DIR}" - # FIXME: Should there be other entries here? -diff --git a/docs/CMake.rst b/docs/CMake.rst -index 879b7b231d4c..9c31d14e8950 100644 ---- a/docs/CMake.rst -+++ b/docs/CMake.rst -@@ -250,7 +250,7 @@ description is in `LLVM-related variables`_ below. - **LLVM_LIBDIR_SUFFIX**:STRING - Extra suffix to append to the directory where libraries are to be - installed. On a 64-bit architecture, one could use ``-DLLVM_LIBDIR_SUFFIX=64`` -- to install libraries to ``/usr/lib64``. -+ to install libraries to ``/usr/lib64``. See also ``CMAKE_INSTALL_LIBDIR``. - - **LLVM_PARALLEL_{COMPILE,LINK}_JOBS**:STRING - Building the llvm toolchain can use a lot of resources, particularly -@@ -284,6 +284,10 @@ manual, or execute ``cmake --help-variable VARIABLE_NAME``. - The path to install executables, relative to the *CMAKE_INSTALL_PREFIX*. - Defaults to "bin". - -+**CMAKE_INSTALL_LIBDIR**:PATH -+ The path to install libraries, relative to the *CMAKE_INSTALL_PREFIX*. -+ Defaults to "lib". -+ - **CMAKE_INSTALL_INCLUDEDIR**:PATH - The path to install header files, relative to the *CMAKE_INSTALL_PREFIX*. - Defaults to "include". -diff --git a/tools/llvm-config/BuildVariables.inc.in b/tools/llvm-config/BuildVariables.inc.in -index 370005cd8d7d..7e790bc52111 100644 ---- a/tools/llvm-config/BuildVariables.inc.in -+++ b/tools/llvm-config/BuildVariables.inc.in -@@ -23,6 +23,7 @@ - #define LLVM_CXXFLAGS "@LLVM_CXXFLAGS@" - #define LLVM_BUILDMODE "@LLVM_BUILDMODE@" - #define LLVM_LIBDIR_SUFFIX "@LLVM_LIBDIR_SUFFIX@" -+#define LLVM_INSTALL_LIBDIR "@CMAKE_INSTALL_LIBDIR@" - #define LLVM_INSTALL_INCLUDEDIR "@CMAKE_INSTALL_INCLUDEDIR@" - #define LLVM_INSTALL_PACKAGE_DIR "@LLVM_INSTALL_PACKAGE_DIR@" - #define LLVM_TARGETS_BUILT "@LLVM_TARGETS_BUILT@" -diff --git a/tools/llvm-config/llvm-config.cpp b/tools/llvm-config/llvm-config.cpp -index 2c6c55f89d38..f6d2068a0827 100644 ---- a/tools/llvm-config/llvm-config.cpp -+++ b/tools/llvm-config/llvm-config.cpp -@@ -369,7 +369,11 @@ int main(int argc, char **argv) { - sys::fs::make_absolute(ActivePrefix, Path); - ActiveBinDir = std::string(Path.str()); - } -- ActiveLibDir = ActivePrefix + "/lib" + LLVM_LIBDIR_SUFFIX; -+ { -+ SmallString<256> Path(LLVM_INSTALL_LIBDIR LLVM_LIBDIR_SUFFIX); -+ sys::fs::make_absolute(ActivePrefix, Path); -+ ActiveLibDir = std::string(Path.str()); -+ } - { - SmallString<256> Path(LLVM_INSTALL_PACKAGE_DIR); - sys::fs::make_absolute(ActivePrefix, Path); diff --git a/llvm/15/llvm/lit-shell-script-runner-set-dyld-library-path.patch b/llvm/15/llvm/lit-shell-script-runner-set-dyld-library-path.patch deleted file mode 100644 index 32f1d13a9d..0000000000 --- a/llvm/15/llvm/lit-shell-script-runner-set-dyld-library-path.patch +++ /dev/null @@ -1,26 +0,0 @@ -diff --git a/utils/lit/lit/TestRunner.py b/utils/lit/lit/TestRunner.py -index 0242e0b75af3..d732011306f7 100644 ---- a/utils/lit/lit/TestRunner.py -+++ b/utils/lit/lit/TestRunner.py -@@ -1029,6 +1029,12 @@ def executeScript(test, litConfig, tmpBase, commands, cwd): - f.write('@echo off\n') - f.write('\n@if %ERRORLEVEL% NEQ 0 EXIT\n'.join(commands)) - else: -+ # This env var is *purged* when invoking subprocesses so we have to -+ # manually set it from within the bash script in order for the commands -+ # in run lines to see this var: -+ if "DYLD_LIBRARY_PATH" in test.config.environment: -+ f.write(f'export DYLD_LIBRARY_PATH="{test.config.environment["DYLD_LIBRARY_PATH"]}"\n') -+ - for i, ln in enumerate(commands): - match = re.match(kPdbgRegex, ln) - if match: -@@ -1363,7 +1369,7 @@ def applySubstitutions(script, substitutions, conditions={}, - return processed - - process = processLine if recursion_limit is None else processLineToFixedPoint -- -+ - return [unescapePercents(process(ln)) for ln in script] - - diff --git a/llvm/15/llvm/llvm-lit-cfg-add-libs-to-dylib-path.patch b/llvm/15/llvm/llvm-lit-cfg-add-libs-to-dylib-path.patch deleted file mode 100644 index d824516c0a..0000000000 --- a/llvm/15/llvm/llvm-lit-cfg-add-libs-to-dylib-path.patch +++ /dev/null @@ -1,79 +0,0 @@ -diff --git a/test/Unit/lit.cfg.py b/test/Unit/lit.cfg.py -index 81e8dc04acea..479ff95681e2 100644 ---- a/test/Unit/lit.cfg.py -+++ b/test/Unit/lit.cfg.py -@@ -3,6 +3,7 @@ - # Configuration file for the 'lit' test runner. - - import os -+import platform - import subprocess - - import lit.formats -@@ -55,3 +56,26 @@ if sys.platform in ['win32', 'cygwin'] and os.path.isdir(config.shlibdir): - # Win32 may use %SYSTEMDRIVE% during file system shell operations, so propogate. - if sys.platform == 'win32' and 'SYSTEMDRIVE' in os.environ: - config.environment['SYSTEMDRIVE'] = os.environ['SYSTEMDRIVE'] -+ -+# Add the LLVM dynamic libs to the platform-specific loader search path env var: -+# -+# TODO: this is copied from `clang`'s `lit.cfg.py`; should unify.. -+def find_shlibpath_var(): -+ if platform.system() in ['Linux', 'FreeBSD', 'NetBSD', 'OpenBSD', 'SunOS']: -+ yield 'LD_LIBRARY_PATH' -+ elif platform.system() == 'Darwin': -+ yield 'DYLD_LIBRARY_PATH' -+ elif platform.system() == 'Windows': -+ yield 'PATH' -+ elif platform.system() == 'AIX': -+ yield 'LIBPATH' -+ -+for shlibpath_var in find_shlibpath_var(): -+ shlibpath = os.path.pathsep.join( -+ (config.shlibdir, -+ config.environment.get(shlibpath_var, ''))) -+ config.environment[shlibpath_var] = shlibpath -+ break -+else: -+ lit_config.warning("unable to inject shared library path on '{}'" -+ .format(platform.system())) -diff --git a/test/lit.cfg.py b/test/lit.cfg.py -index 75a38b4c5dad..856fc75c9d74 100644 ---- a/test/lit.cfg.py -+++ b/test/lit.cfg.py -@@ -42,6 +42,26 @@ llvm_config.with_environment('PATH', config.llvm_tools_dir, append_path=True) - llvm_config.with_system_environment( - ['HOME', 'INCLUDE', 'LIB', 'TMP', 'TEMP']) - -+# Add the LLVM dynamic libs to the platform-specific loader search path env var: -+# -+# TODO: this is copied from `clang`'s `lit.cfg.py`; should unify.. -+def find_shlibpath_var(): -+ if platform.system() in ['Linux', 'FreeBSD', 'NetBSD', 'OpenBSD', 'SunOS']: -+ yield 'LD_LIBRARY_PATH' -+ elif platform.system() == 'Darwin': -+ yield 'DYLD_LIBRARY_PATH' -+ elif platform.system() == 'Windows': -+ yield 'PATH' -+ elif platform.system() == 'AIX': -+ yield 'LIBPATH' -+ -+for shlibpath_var in find_shlibpath_var(): -+ shlibpath = config.llvm_shlib_dir -+ llvm_config.with_environment(shlibpath_var, shlibpath, append_path = True) -+ break -+else: -+ lit_config.warning("unable to inject shared library path on '{}'" -+ .format(platform.system())) - - # Set up OCAMLPATH to include newly built OCaml libraries. - top_ocaml_lib = os.path.join(config.llvm_lib_dir, 'ocaml') -@@ -318,7 +338,7 @@ def have_cxx_shared_library(): - - try: - readobj_cmd = subprocess.Popen( -- [readobj_exe, '--needed-libs', readobj_exe], stdout=subprocess.PIPE) -+ [readobj_exe, '--needed-libs', readobj_exe], stdout=subprocess.PIPE, env=config.environment) - except OSError: - print('could not exec llvm-readobj') - return False diff --git a/llvm/default.nix b/llvm/default.nix deleted file mode 100644 index 3602c84ea4..0000000000 --- a/llvm/default.nix +++ /dev/null @@ -1,87 +0,0 @@ -{ - lib, - stdenv, - callPackage, - fetchFromGitHub, - cmake, - ninja, - python3, - libffi, - libxml2, - ncurses, - zlib, - runCommand, -}: let - version = "15.0.7"; - - src = fetchFromGitHub { - owner = "llvm"; - repo = "llvm-project"; - rev = "llvmorg-${version}"; - sha256 = "sha256-wjuZQyXQ/jsmvy6y1aksCcEDXGBjuhpgngF3XQJ/T4s="; - }; - - llvm_meta = { - license = lib.licenses.ncsa; - platforms = lib.platforms.unix; - }; - - getVersionFile = p: ./15 + "/${p}"; - - # Build LLVM first (provides libllvm and llvm-tblgen) - libllvm = callPackage ./15/llvm { - inherit - lib - stdenv - cmake - ninja - python3 - libffi - libxml2 - ncurses - zlib - runCommand - src - version - llvm_meta - getVersionFile - ; - }; - - clang-unwrapped = callPackage ./15/clang { - inherit - lib - stdenv - cmake - ninja - python3 - libxml2 - runCommand - libllvm - src - version - llvm_meta - getVersionFile - ; - }; - - lld = callPackage ./15/lld { - inherit - lib - stdenv - cmake - ninja - libxml2 - libllvm - runCommand - src - version - llvm_meta - getVersionFile - ; - }; -in { - llvm_15 = libllvm; - lld_15 = lld; - llvmPackages_15 = {clang-unwrapped = clang-unwrapped;}; -} From 926f4a66cb190e5e298d7b3a3bc47f1cb0927b0b Mon Sep 17 00:00:00 2001 From: fsagbuya Date: Tue, 7 Oct 2025 17:27:34 +0800 Subject: [PATCH 2/5] flake: update llvmlite and llvm --- flake.nix | 57 +++++++++++++++---------------------------------------- 1 file changed, 15 insertions(+), 42 deletions(-) diff --git a/flake.nix b/flake.nix index 89aae88d62..f888e96518 100644 --- a/flake.nix +++ b/flake.nix @@ -74,8 +74,6 @@ QML2_IMPORT_PATH = "${qtbase}/${qtQmlPrefix}"; }; - inherit (pkgs.callPackage ./llvm {}) llvm_15 lld_15 llvmPackages_15; - rust = pkgs.rust-bin.nightly."2021-09-01".default.override { extensions = ["rust-src"]; targets = []; @@ -158,30 +156,6 @@ ''; }; - llvmlite-new = pkgs.python3Packages.buildPythonPackage rec { - pname = "llvmlite"; - version = "0.44.0"; - src = pkgs.fetchFromGitHub { - owner = "numba"; - repo = "llvmlite"; - rev = "v${version}"; - sha256 = "sha256-ZIA/JfK9ZP00Zn6SZuPus30Xw10hn3DArHCkzBZAUV0="; - }; - pyproject = true; - build-system = [pkgs.python3Packages.setuptools]; - nativeBuildInputs = [llvm_15]; - # Disable static linking - # https://github.com/numba/llvmlite/issues/93 - postPatch = '' - substituteInPlace ffi/Makefile.linux --replace "-static-libstdc++" "" - substituteInPlace llvmlite/tests/test_binding.py --replace "test_linux" "nope" - ''; - # Set directory containing llvm-config binary - preConfigure = '' - export LLVM_CONFIG=${llvm_15.dev}/bin/llvm-config - ''; - }; - artiq-upstream = pkgs.python3Packages.buildPythonPackage rec { pname = "artiq"; version = artiqVersion; @@ -195,10 +169,9 @@ ''; nativeBuildInputs = [pkgs.qt6.wrapQtAppsHook]; - # keep llvm_x and lld_x in sync with llvmlite propagatedBuildInputs = - [llvm_15 lld_15 sipyco.packages.x86_64-linux.sipyco pythonparser llvmlite-new pkgs.qt6.qtsvg artiq-comtools.packages.x86_64-linux.artiq-comtools] - ++ (with pkgs.python3Packages; [pyqtgraph pygit2 numpy dateutil scipy prettytable pyserial levenshtein h5py pyqt6 qasync tqdm lmdb jsonschema platformdirs]); + [pkgs.llvm_20 pkgs.lld_20 sipyco.packages.x86_64-linux.sipyco pythonparser pkgs.qt6.qtsvg artiq-comtools.packages.x86_64-linux.artiq-comtools] + ++ (with pkgs.python3Packages; [llvmlite pyqtgraph pygit2 numpy dateutil scipy prettytable pyserial levenshtein h5py pyqt6 qasync tqdm lmdb jsonschema platformdirs]); dontWrapQtApps = true; postFixup = '' @@ -219,10 +192,10 @@ "--set FONTCONFIG_FILE ${pkgs.fontconfig.out}/etc/fonts/fonts.conf" ]; - # FIXME: automatically propagate lld_15 llvm_15 dependencies + # FIXME: automatically propagate lld_20 llvm_20 dependencies # cacert is required in the check stage only, as certificates are to be # obtained from system elsewhere - nativeCheckInputs = [lld_15 llvm_15 libartiq-support pkgs.lit pkgs.outputcheck pkgs.cacert]; + nativeCheckInputs = with pkgs; [lld_20 llvm_20 lit outputcheck cacert] ++ [libartiq-support]; checkPhase = '' python -m unittest discover -v artiq.test @@ -308,9 +281,9 @@ nativeBuildInputs = [ (pkgs.python3.withPackages (ps: [migen misoc (artiq.withExperimentalFeatures experimentalFeatures) ps.packaging])) rust - llvm_15 - lld_15 - llvmPackages_15.clang-unwrapped + pkgs.llvm_20 + pkgs.lld_20 + pkgs.llvmPackages_20.clang-unwrapped vivado ]; overrideMain = _: { @@ -498,6 +471,9 @@ [ git lit + lld_20 + llvm_20 + llvmPackages_20.clang-unwrapped outputcheck pdf2svg @@ -510,9 +486,6 @@ (python3.withPackages (ps: [migen misoc microscope ps.packaging ps.paramiko] ++ artiq.propagatedBuildInputs)) ] ++ [ - llvm_15 - lld_15 - llvmPackages_15.clang-unwrapped rust latex-artiq-manual artiq-frontend-dev-wrappers @@ -538,9 +511,9 @@ packages = [ rust - llvm_15 - lld_15 - llvmPackages_15.clang-unwrapped + pkgs.llvm_20 + pkgs.lld_20 + pkgs.llvmPackages_20.clang-unwrapped packages.x86_64-linux.vivado packages.x86_64-linux.openocd-bscanspi @@ -584,8 +557,8 @@ ] ++ ps.paramiko.optional-dependencies.ed25519 )) - llvm_15 - lld_15 + pkgs.llvm_20 + pkgs.lld_20 pkgs.openssh packages.x86_64-linux.openocd-bscanspi # for the bscanspi bitstreams ]; From b3fcb0b39554e12521f64e85a7e2a5566f50ccdf Mon Sep 17 00:00:00 2001 From: fsagbuya Date: Tue, 7 Oct 2025 17:31:11 +0800 Subject: [PATCH 3/5] compiler: switch to new pass manager for LLVM 20 --- artiq/compiler/targets.py | 43 ++++++++++++--------------------------- 1 file changed, 13 insertions(+), 30 deletions(-) diff --git a/artiq/compiler/targets.py b/artiq/compiler/targets.py index 5f043eb0e3..5e4d0d78da 100644 --- a/artiq/compiler/targets.py +++ b/artiq/compiler/targets.py @@ -2,7 +2,6 @@ from artiq.compiler import types, ir from llvmlite import ir as ll, binding as llvm -llvm.initialize() llvm.initialize_all_targets() llvm.initialize_all_asmprinters() @@ -108,35 +107,19 @@ def target_machine(self): return llmachine def optimize(self, llmodule): - llpassmgr = llvm.create_module_pass_manager() - - # Register our alias analysis passes. - llpassmgr.add_basic_alias_analysis_pass() - llpassmgr.add_type_based_alias_analysis_pass() - - # Start by cleaning up after our codegen and exposing as much - # information to LLVM as possible. - llpassmgr.add_constant_merge_pass() - llpassmgr.add_cfg_simplification_pass() - llpassmgr.add_instruction_combining_pass() - llpassmgr.add_sroa_pass() - llpassmgr.add_dead_code_elimination_pass() - llpassmgr.add_function_attrs_pass() - llpassmgr.add_global_optimizer_pass() - - # Now, actually optimize the code. - llpassmgr.add_function_inlining_pass(275) - llpassmgr.add_ipsccp_pass() - llpassmgr.add_instruction_combining_pass() - llpassmgr.add_gvn_pass() - llpassmgr.add_cfg_simplification_pass() - llpassmgr.add_licm_pass() - - # Clean up after optimizing. - llpassmgr.add_dead_arg_elimination_pass() - llpassmgr.add_global_dce_pass() - - llpassmgr.run(llmodule) + llmachine = self.target_machine() + pto = llvm.create_pipeline_tuning_options(size_level=1) + + # This combination of levels gets mapped to the -Os PassManagerBuilder default in + # llvmlite 0.45. The mapping is slightly nonsensical in that -Oz (which is more + # aggressively optimizing for size at the expense of runtime) is accessed via + # speed_level=size_level=2. + pto.speed_level = 1 + + pb = llvm.create_pass_builder(llmachine, pto) + llpassmgr = pb.getModulePassManager() + + llpassmgr.run(llmodule, pb) def compile(self, module): """Compile the module to a relocatable object for this target.""" From 9e226aa5de203fb31bbb51eb56320371e0d0d5fc Mon Sep 17 00:00:00 2001 From: fsagbuya Date: Tue, 7 Oct 2025 17:34:14 +0800 Subject: [PATCH 4/5] test: update lit tests for LLVM 20 --- artiq/test/lit/embedding/annotation.py | 2 +- artiq/test/lit/embedding/annotation_py.py | 6 +++--- artiq/test/lit/embedding/index_tuple.py | 2 +- artiq/test/lit/embedding/invariant_propagation.py | 4 ++-- artiq/test/lit/embedding/subkernel_message_recv.py | 4 ++-- artiq/test/lit/embedding/subkernel_message_send.py | 2 +- artiq/test/lit/embedding/subkernel_return.py | 4 ++-- artiq/test/lit/embedding/subkernel_self_args.py | 2 +- artiq/test/lit/embedding/subkernel_with_arg.py | 2 +- artiq/test/lit/embedding/subkernel_with_opt_arg.py | 2 +- artiq/test/lit/embedding/syscall_arg_attrs.py | 8 ++++---- artiq/test/lit/embedding/syscall_flags.py | 4 ++-- 12 files changed, 21 insertions(+), 21 deletions(-) diff --git a/artiq/test/lit/embedding/annotation.py b/artiq/test/lit/embedding/annotation.py index 21ae253322..7d79fbfc07 100644 --- a/artiq/test/lit/embedding/annotation.py +++ b/artiq/test/lit/embedding/annotation.py @@ -4,7 +4,7 @@ from artiq.language.core import * from artiq.language.types import * -# CHECK: i64 @_Z13testbench.foozz\(i64 %ARG.x, \{ i1, i64 \} %ARG.y\) +# CHECK-L: i64 @_Z13testbench.foozz(i64 @kernel def foo(x: TInt64, y: TInt64 = 1) -> TInt64: diff --git a/artiq/test/lit/embedding/annotation_py.py b/artiq/test/lit/embedding/annotation_py.py index c790b69145..86da7f031e 100644 --- a/artiq/test/lit/embedding/annotation_py.py +++ b/artiq/test/lit/embedding/annotation_py.py @@ -8,19 +8,19 @@ from artiq.language.core import * from artiq.language.types import * -# CHECK-L: i64 @_Z13testbench.foozz(i64 %ARG.x, { i1, i32 } %ARG.y) +# CHECK-L: i64 @_Z13testbench.foozz(i64 @kernel def foo(x: np.int64, y: np.int32 = 1) -> np.int64: print(x + y) return x + y -# CHECK-L: void @_Z13testbench.barzz() +# CHECK-L: void @_Z13testbench.barzz(i32 @kernel def bar(x: np.int32) -> None: print(x) -# CHECK-L: @_Z21testbench.unpack_listzz({ i1, i64 }* nocapture writeonly sret({ i1, i64 }) %.1, { i64*, i32 }* %ARG.xs) +# CHECK-L: @_Z21testbench.unpack_listzz(ptr @kernel def unpack_list(xs: List[np.int64]) -> Tuple[bool, np.int64]: print(xs) diff --git a/artiq/test/lit/embedding/index_tuple.py b/artiq/test/lit/embedding/index_tuple.py index fced902016..90f8f47e3d 100644 --- a/artiq/test/lit/embedding/index_tuple.py +++ b/artiq/test/lit/embedding/index_tuple.py @@ -4,7 +4,7 @@ from artiq.language.core import * from artiq.language.types import * -# CHECK-L: void @_Z16testbench.unpackzz({ i32, { i8*, i32 }, i1 } %ARG.x) +# CHECK-L: void @_Z16testbench.unpackzz({ i32, { ptr, i32 }, i1 } %ARG.x) @kernel def unpack(x): diff --git a/artiq/test/lit/embedding/invariant_propagation.py b/artiq/test/lit/embedding/invariant_propagation.py index e1af5c9c1c..71a7f852b7 100644 --- a/artiq/test/lit/embedding/invariant_propagation.py +++ b/artiq/test/lit/embedding/invariant_propagation.py @@ -15,8 +15,8 @@ def run(self): if self.foo: print("bar") else: - # Make sure all the code for this branch will be completely elided: - # CHECK-NOT: baz + # The kernel_invariant annotation should generate !invariant.load metadata + # CHECK: invariant.load print("baz") obj = Class() diff --git a/artiq/test/lit/embedding/subkernel_message_recv.py b/artiq/test/lit/embedding/subkernel_message_recv.py index 35e094aa64..dcc4e70503 100644 --- a/artiq/test/lit/embedding/subkernel_message_recv.py +++ b/artiq/test/lit/embedding/subkernel_message_recv.py @@ -9,13 +9,13 @@ def entrypoint(): # CHECK: call void @subkernel_load_run\(i32 1, i8 1, i1 true\), !dbg !. message_pass() # CHECK-NOT: call void @subkernel_send_message\(i32 ., i1 false, i8 1, i8 1, .*\), !dbg !. - # CHECK: call i8 @subkernel_await_message\(i32 2, i64 -1, { i8\*, i32 }\* nonnull .*, i8 1, i8 1\), !dbg !. + # CHECK: call i8 @subkernel_await_message\(i32 2, i64 -1, ptr nonnull .*, i8 1, i8 1\), !dbg !. subkernel_recv("message", TInt32) # CHECK-L: declare void @subkernel_load_run(i32, i8, i1) local_unnamed_addr # CHECK-NOT-L: declare void @subkernel_send_message(i32, i1, i8, i8, { i8*, i32 }*, i8**) local_unnamed_addr -# CHECK-L: declare i8 @subkernel_await_message(i32, i64, { i8*, i32 }*, i8, i8) local_unnamed_addr +# CHECK-L: declare i8 @subkernel_await_message(i32, i64, ptr, i8, i8) local_unnamed_addr # CHECK-NOT-L: declare void @subkernel_await_finish(i32, i64) local_unnamed_addr @subkernel(destination=1) def message_pass() -> TNone: diff --git a/artiq/test/lit/embedding/subkernel_message_send.py b/artiq/test/lit/embedding/subkernel_message_send.py index 3f0f77e357..04b9da0359 100644 --- a/artiq/test/lit/embedding/subkernel_message_send.py +++ b/artiq/test/lit/embedding/subkernel_message_send.py @@ -14,7 +14,7 @@ def entrypoint(): # CHECK-L: declare void @subkernel_load_run(i32, i8, i1) local_unnamed_addr -# CHECK-L: declare void @subkernel_send_message(i32, i1, i8, i8, { i8*, i32 }*, i8**) local_unnamed_addr +# CHECK-L: declare void @subkernel_send_message(i32, i1, i8, i8, ptr, ptr) local_unnamed_addr @subkernel(destination=1) def message_pass() -> TNone: subkernel_recv("message", TInt32) diff --git a/artiq/test/lit/embedding/subkernel_return.py b/artiq/test/lit/embedding/subkernel_return.py index 3c9d1169af..fe1777253a 100644 --- a/artiq/test/lit/embedding/subkernel_return.py +++ b/artiq/test/lit/embedding/subkernel_return.py @@ -9,13 +9,13 @@ def entrypoint(): # CHECK: call void @subkernel_load_run\(i32 1, i8 1, i1 true\), !dbg !. # CHECK-NOT: call void @subkernel_send_message\(.*\), !dbg !. returning() - # CHECK: call i8 @subkernel_await_message\(i32 1, i64 -1, { i8\*, i32 }\* nonnull .*, i8 1, i8 1\), !dbg !. + # CHECK: call i8 @subkernel_await_message\(i32 1, i64 -1, ptr nonnull .*, i8 1, i8 1\), !dbg !. # CHECK: call void @subkernel_await_finish\(i32 1, i64 -1\), !dbg !. subkernel_await(returning) # CHECK-L: declare void @subkernel_load_run(i32, i8, i1) local_unnamed_addr # CHECK-NOT-L: declare void @subkernel_send_message(i32, i1, i8, i8, { i8*, i32 }*, i8**) local_unnamed_addr -# CHECK-L: declare i8 @subkernel_await_message(i32, i64, { i8*, i32 }*, i8, i8) local_unnamed_addr +# CHECK-L: declare i8 @subkernel_await_message(i32, i64, ptr, i8, i8) local_unnamed_addr # CHECK-L: declare void @subkernel_await_finish(i32, i64) local_unnamed_addr @subkernel(destination=1) def returning() -> TInt32: diff --git a/artiq/test/lit/embedding/subkernel_self_args.py b/artiq/test/lit/embedding/subkernel_self_args.py index 5aebed2e91..44aae9ab19 100644 --- a/artiq/test/lit/embedding/subkernel_self_args.py +++ b/artiq/test/lit/embedding/subkernel_self_args.py @@ -22,4 +22,4 @@ def entrypoint(): a.kernel_entrypoint() # CHECK-L: declare void @subkernel_load_run(i32, i8, i1) local_unnamed_addr -# CHECK-L: declare void @subkernel_send_message(i32, i1, i8, i8, { i8*, i32 }*, i8**) local_unnamed_addr +# CHECK-L: declare void @subkernel_send_message(i32, i1, i8, i8, ptr, ptr) local_unnamed_addr diff --git a/artiq/test/lit/embedding/subkernel_with_arg.py b/artiq/test/lit/embedding/subkernel_with_arg.py index 1145165864..86e61140f8 100644 --- a/artiq/test/lit/embedding/subkernel_with_arg.py +++ b/artiq/test/lit/embedding/subkernel_with_arg.py @@ -12,7 +12,7 @@ def entrypoint(): # CHECK-L: declare void @subkernel_load_run(i32, i8, i1) local_unnamed_addr -# CHECK-L: declare void @subkernel_send_message(i32, i1, i8, i8, { i8*, i32 }*, i8**) local_unnamed_addr +# CHECK-L: declare void @subkernel_send_message(i32, i1, i8, i8, ptr, ptr) local_unnamed_addr @subkernel(destination=1) def accept_arg(arg: TInt32) -> TNone: pass diff --git a/artiq/test/lit/embedding/subkernel_with_opt_arg.py b/artiq/test/lit/embedding/subkernel_with_opt_arg.py index fb5cc3df12..91b2c1aeeb 100644 --- a/artiq/test/lit/embedding/subkernel_with_opt_arg.py +++ b/artiq/test/lit/embedding/subkernel_with_opt_arg.py @@ -15,7 +15,7 @@ def entrypoint(): # CHECK-L: declare void @subkernel_load_run(i32, i8, i1) local_unnamed_addr -# CHECK-L: declare void @subkernel_send_message(i32, i1, i8, i8, { i8*, i32 }*, i8**) local_unnamed_addr +# CHECK-L: declare void @subkernel_send_message(i32, i1, i8, i8, ptr, ptr) local_unnamed_addr @subkernel(destination=1) def accept_arg(arg_a, arg_b=5) -> TNone: pass diff --git a/artiq/test/lit/embedding/syscall_arg_attrs.py b/artiq/test/lit/embedding/syscall_arg_attrs.py index 8d0c05c34d..616201451d 100644 --- a/artiq/test/lit/embedding/syscall_arg_attrs.py +++ b/artiq/test/lit/embedding/syscall_arg_attrs.py @@ -11,20 +11,20 @@ @kernel def entrypoint(): - # CHECK: call void @accept_str\({ i8\*, i32 } + # CHECK: call void @accept_str\({ ptr, i32 } accept_str("foo") - # CHECK: call void @return_str\({ i8\*, i32 }\* nonnull sret + # CHECK: call void @return_str\(ptr nonnull sret return_str() -# CHECK: declare void @accept_str\({ i8\*, i32 }\) +# CHECK: declare void @accept_str\({ ptr, i32 }\) @syscall def accept_str(name: TStr) -> TNone: pass -# CHECK: declare void @return_str\({ i8\*, i32 }\* sret\({ i8\*, i32 }\)\) +# CHECK: declare void @return_str\(ptr sret\({ ptr, i32 }\)\) @syscall def return_str() -> TStr: pass diff --git a/artiq/test/lit/embedding/syscall_flags.py b/artiq/test/lit/embedding/syscall_flags.py index b2e27d6a07..a7c3c3caec 100644 --- a/artiq/test/lit/embedding/syscall_flags.py +++ b/artiq/test/lit/embedding/syscall_flags.py @@ -6,7 +6,7 @@ # CHECK: call void @foo\(\)(, !dbg !\d+)? -# CHECK-L: ; Function Attrs: inaccessiblememonly nounwind +# CHECK-L: ; Function Attrs: nounwind memory(inaccessiblemem: readwrite) # CHECK-NEXT-L: declare void @foo() @syscall(flags={"nounwind", "nowrite"}) @@ -15,7 +15,7 @@ def foo() -> TNone: # sret nowrite functions shouldn't be marked inaccessiblememonly. # CHECK-L: ; Function Attrs: nounwind -# CHECK-NEXT-L: declare void @bar({ i32, i64 }* sret({ i32, i64 })) +# CHECK-NEXT-L: declare void @bar(ptr sret({ i32, i64 })) @syscall(flags={"nounwind", "nowrite"}) def bar() -> TTuple([TInt32, TInt64]): pass From e148bdcc497f258f0277914bd554b1ec492bb493 Mon Sep 17 00:00:00 2001 From: fsagbuya Date: Tue, 7 Oct 2025 17:39:56 +0800 Subject: [PATCH 5/5] firmware/ksupport: discard .riscv.attributes section LLVM lld 17+ adds PT_RISCV_ATTRIBUTES program header, increasing ELF header size from 0x74 to 0x94 bytes and breaking runtime validation. Discard the section to restore expected header size. The section contains only metadata and PT_RISCV_ATTRIBUTES is now deprecated in RISC-V ELF psABI. --- artiq/firmware/ksupport/ksupport.ld | 1 + 1 file changed, 1 insertion(+) diff --git a/artiq/firmware/ksupport/ksupport.ld b/artiq/firmware/ksupport/ksupport.ld index 24c4d2524f..4f3dd6265a 100644 --- a/artiq/firmware/ksupport/ksupport.ld +++ b/artiq/firmware/ksupport/ksupport.ld @@ -71,5 +71,6 @@ SECTIONS /DISCARD/ : { *(.debug*) + *(.riscv.attributes) } }