From ad698315ba049833ea157ed2e3705b787d7f5faf Mon Sep 17 00:00:00 2001 From: Quinn Pham Date: Tue, 27 Jan 2026 20:21:28 +0000 Subject: [PATCH 1/6] Apply patch for triton-ext build support This commit applies a patch from an open PR in the triton repo that implements the build support for the triton-ext repo. PR: https://github.com/triton-lang/triton/pull/9146 Commit: f54029c01670023920399b1b61d55c567650a444 --- CMakeLists.txt | 9 +++++++++ Makefile | 10 ++++++++++ setup.py | 1 + 3 files changed, 20 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index f8f2b62ad6..5ecd1f42e8 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -182,6 +182,15 @@ endif() # ----- +# Build extensions +if (DEFINED TRITON_EXT_DIRS) + foreach(EXT_DIR ${TRITON_EXT_DIRS}) + get_filename_component(EXT_NAME ${EXT_DIR} NAME) + cmake_path(APPEND TRITON_BINARY_DIR "third_party" ${EXT_NAME} OUTPUT_VARIABLE EXT_DIR_BUILD_OUTPUT) + message(STATUS "Building extension '${EXT_NAME}' from ${EXT_DIR} with output ${EXT_DIR_BUILD_OUTPUT}") + add_subdirectory(${EXT_DIR} ${EXT_DIR_BUILD_OUTPUT}) + endforeach() +endif() # ------ if(TRITON_BUILD_PYTHON_MODULE) diff --git a/Makefile b/Makefile index dfcf1f5453..b559882b29 100644 --- a/Makefile +++ b/Makefile @@ -120,6 +120,16 @@ dev-install-llvm: LLVM_SYSPATH=$(LLVM_BUILD_PATH) \ $(MAKE) dev-install +.PHONY: dev-install-llvm-shared +.NOPARALLEL: dev-install-llvm-shared +dev-install-llvm-shared: + LLVM_BUILD_PATH=$(LLVM_BUILD_PATH) LLVM_BUILD_SHARED_LIBS=1 scripts/build-llvm-project.sh + TRITON_BUILD_WITH_CLANG_LLD=1 TRITON_BUILD_WITH_CCACHE=0 \ + LLVM_INCLUDE_DIRS=$(LLVM_BUILD_PATH)/include \ + LLVM_LIBRARY_DIR=$(LLVM_BUILD_PATH)/lib \ + LLVM_SYSPATH=$(LLVM_BUILD_PATH) \ + $(MAKE) dev-install + # Updating lit tests .PHONY: golden-samples diff --git a/setup.py b/setup.py index ae7f7893fa..ffb85db515 100644 --- a/setup.py +++ b/setup.py @@ -483,6 +483,7 @@ def build_extension(self, ext): "-DPython3_EXECUTABLE:FILEPATH=" + sys.executable, "-DPython3_INCLUDE_DIR=" + python_include_dir, "-DTRITON_CODEGEN_BACKENDS=" + ';'.join([b.name for b in backends if not b.is_external]), "-DTRITON_PLUGIN_DIRS=" + ';'.join([b.src_dir for b in backends if b.is_external]), + "-DTRITON_EXT_DIRS=" + os.getenv("TRITON_EXT_DIRS", ""), "-DTRITON_WHEEL_DIR=" + wheeldir ] if lit_dir is not None: From a5a8f1576e18de41869c952e255f6b7c6b08ddf2 Mon Sep 17 00:00:00 2001 From: Quinn Pham Date: Wed, 4 Feb 2026 22:10:56 +0000 Subject: [PATCH 2/6] Support builds with llvm shared libraries - Update the compile-triton.sh script to build intel-triton by introducing the --llvm-shared option that enables building with llvm shared libraries. - Update the find module for the SPIRVToLLVMTranslator subproject to patch the subproject's cmake configuration with a change that ensures it finds the LLVM config package used by the main project instead of falling back to the find module for LLVM, which always requires that static LLVM libraries are available. --- scripts/compile-triton.sh | 13 +++++- .../cmake/FindSPIRVToLLVMTranslator.cmake | 45 ++++++++++++++++++- .../spirv-llvm-translator-llvm-config.patch | 22 +++++++++ 3 files changed, 78 insertions(+), 2 deletions(-) create mode 100644 third_party/intel/cmake/spirv-llvm-translator-llvm-config.patch diff --git a/scripts/compile-triton.sh b/scripts/compile-triton.sh index 709cd9118e..bdc97a14a6 100755 --- a/scripts/compile-triton.sh +++ b/scripts/compile-triton.sh @@ -6,6 +6,7 @@ export PIP_DISABLE_PIP_VERSION_CHECK=1 # Select what to build. BUILD_LLVM=false +LLVM_SHARED=false BUILD_TRITON=false CLEAN=false VENV=false @@ -16,6 +17,11 @@ for arg in "$@"; do BUILD_LLVM=true shift ;; + --llvm-shared) + BUILD_LLVM=true + LLVM_SHARED=true + shift + ;; --triton) BUILD_TRITON=true shift @@ -33,7 +39,7 @@ for arg in "$@"; do shift ;; --help) - echo "Example usage: ./compile-triton.sh [--llvm | --triton | --clean | --venv | --ccache]" + echo "Example usage: ./compile-triton.sh [--llvm | --llvm-shared | --triton | --clean | --venv | --ccache]" exit 1 ;; *) @@ -124,6 +130,11 @@ build_llvm() { ADDITIONAL_FLAGS="$ADDITIONAL_FLAGS -DCMAKE_CXX_COMPILER_LAUNCHER=ccache" fi + if [ "$LLVM_SHARED" = true ] + then + ADDITIONAL_FLAGS="$ADDITIONAL_FLAGS -DBUILD_SHARED_LIBS=ON" + fi + if [ ! -d "$LLVM_PROJ_BUILD" ] then mkdir $LLVM_PROJ_BUILD diff --git a/third_party/intel/cmake/FindSPIRVToLLVMTranslator.cmake b/third_party/intel/cmake/FindSPIRVToLLVMTranslator.cmake index 1fcad7acc3..bdf81d021f 100644 --- a/third_party/intel/cmake/FindSPIRVToLLVMTranslator.cmake +++ b/third_party/intel/cmake/FindSPIRVToLLVMTranslator.cmake @@ -24,7 +24,50 @@ if (NOT SPIRVToLLVMTranslator_FOUND) set(LLVM_DIR "${LLVM_LIBRARY_DIR}/cmake/llvm" CACHE PATH "Path to LLVM build dir " FORCE) set(LLVM_SPIRV_BUILD_EXTERNAL YES CACHE BOOL "Build SPIRV-LLVM Translator as external" FORCE) - FetchContent_MakeAvailable(spirv-llvm-translator) + # Populate and add SPIRV-LLVM-Translator in two steps rather than + # using FetchContent_MakeAvailable(). MakeAvailable() performs + # populate + add_subdirectory() in one call, which immediately + # configures the subproject. We need a hook to apply patches after + # the repo is fetched but before CMake processes the project's + # CMakeLists.txt (otherwise patches affecting the configuration + # would be applied too late). + FetchContent_Populate(spirv-llvm-translator) + + # Apply a patch to the SPIRV-LLVM-Translator project to ensure that + # its configuration finds the LLVM config package (LLVMConfig.cmake) + # used by the main project. This avoids falling back to the find + # module (FindLLVM.cmake). We need this patch to support builds with + # LLVM shared libraries because FindLLVM.cmake always invokes + # `llvm-config --link-static` and requires that static LLVM + # libraries are available. + message(STATUS "Applying spirv-llvm-translator-llvm-config.patch to SPIRV-LLVM-Translator") + execute_process( + COMMAND git apply --check ${CMAKE_CURRENT_LIST_DIR}/spirv-llvm-translator-llvm-config.patch + WORKING_DIRECTORY ${spirv-llvm-translator_SOURCE_DIR} + ERROR_QUIET + RESULT_VARIABLE PATCH_RESULT + ) + if(PATCH_RESULT EQUAL 0) + execute_process( + COMMAND git apply ${CMAKE_CURRENT_LIST_DIR}/spirv-llvm-translator-llvm-config.patch + WORKING_DIRECTORY ${spirv-llvm-translator_SOURCE_DIR} + RESULT_VARIABLE PATCH_RESULT + ) + else() + execute_process( # Check if the patch is already applied + COMMAND git apply --reverse --check ${CMAKE_CURRENT_LIST_DIR}/spirv-llvm-translator-llvm-config.patch + WORKING_DIRECTORY ${spirv-llvm-translator_SOURCE_DIR} + RESULT_VARIABLE PATCH_RESULT + ) + endif() + if(NOT PATCH_RESULT EQUAL 0) + message(FATAL_ERROR "Failed to apply spirv-llvm-translator-llvm-config.patch to SPIRV-LLVM-Translator") + endif() + + add_subdirectory( + ${spirv-llvm-translator_SOURCE_DIR} + ${spirv-llvm-translator_BINARY_DIR} + ) # FIXME: Don't apply patch when LTS driver is updated. execute_process( diff --git a/third_party/intel/cmake/spirv-llvm-translator-llvm-config.patch b/third_party/intel/cmake/spirv-llvm-translator-llvm-config.patch new file mode 100644 index 0000000000..514fc6f5f3 --- /dev/null +++ b/third_party/intel/cmake/spirv-llvm-translator-llvm-config.patch @@ -0,0 +1,22 @@ +diff --git a/CMakeLists.txt b/CMakeLists.txt +index 59e5ea0b..35e2450c 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -1,7 +1,7 @@ + cmake_minimum_required(VERSION 3.13.4) + + if(NOT DEFINED BASE_LLVM_VERSION) +- set (BASE_LLVM_VERSION 22.0.0) ++ set (BASE_LLVM_VERSION 23.0.0) + endif(NOT DEFINED BASE_LLVM_VERSION) + set(LLVM_SPIRV_VERSION ${BASE_LLVM_VERSION}.0) + +@@ -79,7 +79,7 @@ if(LLVM_SPIRV_BUILD_EXTERNAL) + ) + endif(LLVM_SPIRV_INCLUDE_TESTS) + +- find_package(LLVM ${BASE_LLVM_VERSION} REQUIRED ++ find_package(LLVM CONFIG ${BASE_LLVM_VERSION} REQUIRED + COMPONENTS + Analysis + BitReader From a8825a775cdf3be66e5a2acc8bb6600eaaf13868 Mon Sep 17 00:00:00 2001 From: Quinn Pham Date: Thu, 5 Feb 2026 15:24:02 +0000 Subject: [PATCH 3/6] Propagate `TRITON_EXT_NAMES` through setup.py to triton-ext --- setup.py | 1 + 1 file changed, 1 insertion(+) diff --git a/setup.py b/setup.py index ffb85db515..47a4e99917 100644 --- a/setup.py +++ b/setup.py @@ -484,6 +484,7 @@ def build_extension(self, ext): "-DTRITON_CODEGEN_BACKENDS=" + ';'.join([b.name for b in backends if not b.is_external]), "-DTRITON_PLUGIN_DIRS=" + ';'.join([b.src_dir for b in backends if b.is_external]), "-DTRITON_EXT_DIRS=" + os.getenv("TRITON_EXT_DIRS", ""), + "-DTRITON_EXT_NAMES=" + os.getenv("TRITON_EXT_NAMES", ""), "-DTRITON_WHEEL_DIR=" + wheeldir ] if lit_dir is not None: From 97565671516233512fc36b39e15e7da75d7d4007 Mon Sep 17 00:00:00 2001 From: Quinn Pham Date: Fri, 6 Feb 2026 15:12:43 +0000 Subject: [PATCH 4/6] Fix pre-commit hook style error --- setup.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/setup.py b/setup.py index 47a4e99917..bb48189ae0 100644 --- a/setup.py +++ b/setup.py @@ -484,8 +484,7 @@ def build_extension(self, ext): "-DTRITON_CODEGEN_BACKENDS=" + ';'.join([b.name for b in backends if not b.is_external]), "-DTRITON_PLUGIN_DIRS=" + ';'.join([b.src_dir for b in backends if b.is_external]), "-DTRITON_EXT_DIRS=" + os.getenv("TRITON_EXT_DIRS", ""), - "-DTRITON_EXT_NAMES=" + os.getenv("TRITON_EXT_NAMES", ""), - "-DTRITON_WHEEL_DIR=" + wheeldir + "-DTRITON_EXT_NAMES=" + os.getenv("TRITON_EXT_NAMES", ""), "-DTRITON_WHEEL_DIR=" + wheeldir ] if lit_dir is not None: cmake_args.append("-DLLVM_EXTERNAL_LIT=" + lit_dir) From c3439cabb4409897d367fd863d54337ca2a6e7af Mon Sep 17 00:00:00 2001 From: Quinn Pham Date: Tue, 10 Feb 2026 17:44:46 +0000 Subject: [PATCH 5/6] Stop updating the llvm version number for the llvm-spirv-translator This was updated in the project. --- .../cmake/spirv-llvm-translator-llvm-config.patch | 13 ++----------- 1 file changed, 2 insertions(+), 11 deletions(-) diff --git a/third_party/intel/cmake/spirv-llvm-translator-llvm-config.patch b/third_party/intel/cmake/spirv-llvm-translator-llvm-config.patch index 514fc6f5f3..aa7a5ed029 100644 --- a/third_party/intel/cmake/spirv-llvm-translator-llvm-config.patch +++ b/third_party/intel/cmake/spirv-llvm-translator-llvm-config.patch @@ -1,22 +1,13 @@ diff --git a/CMakeLists.txt b/CMakeLists.txt -index 59e5ea0b..35e2450c 100644 +index ce492a7a..b1c35b38 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt -@@ -1,7 +1,7 @@ - cmake_minimum_required(VERSION 3.13.4) - - if(NOT DEFINED BASE_LLVM_VERSION) -- set (BASE_LLVM_VERSION 22.0.0) -+ set (BASE_LLVM_VERSION 23.0.0) - endif(NOT DEFINED BASE_LLVM_VERSION) - set(LLVM_SPIRV_VERSION ${BASE_LLVM_VERSION}.0) - @@ -79,7 +79,7 @@ if(LLVM_SPIRV_BUILD_EXTERNAL) ) endif(LLVM_SPIRV_INCLUDE_TESTS) - find_package(LLVM ${BASE_LLVM_VERSION} REQUIRED -+ find_package(LLVM CONFIG ${BASE_LLVM_VERSION} REQUIRED ++ find_package(LLVM ${BASE_LLVM_VERSION} REQUIRED CONFIG COMPONENTS Analysis BitReader From b35c424b73054d0176df719dd039546d395ebf40 Mon Sep 17 00:00:00 2001 From: Quinn Pham Date: Mon, 23 Feb 2026 23:35:35 +0000 Subject: [PATCH 6/6] Remove in-tree build support and add support to build Triton shared libs --- CMakeLists.txt | 9 --------- Makefile | 10 ---------- scripts/compile-triton.sh | 14 ++++++++++++-- setup.py | 5 +++-- 4 files changed, 15 insertions(+), 23 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index e162e6e57e..65dd8e9867 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -298,15 +298,6 @@ endif() # ----- -# Build extensions -if (DEFINED TRITON_EXT_DIRS) - foreach(EXT_DIR ${TRITON_EXT_DIRS}) - get_filename_component(EXT_NAME ${EXT_DIR} NAME) - cmake_path(APPEND TRITON_BINARY_DIR "third_party" ${EXT_NAME} OUTPUT_VARIABLE EXT_DIR_BUILD_OUTPUT) - message(STATUS "Building extension '${EXT_NAME}' from ${EXT_DIR} with output ${EXT_DIR_BUILD_OUTPUT}") - add_subdirectory(${EXT_DIR} ${EXT_DIR_BUILD_OUTPUT}) - endforeach() -endif() # ------ if(TRITON_BUILD_PYTHON_MODULE) diff --git a/Makefile b/Makefile index b559882b29..dfcf1f5453 100644 --- a/Makefile +++ b/Makefile @@ -120,16 +120,6 @@ dev-install-llvm: LLVM_SYSPATH=$(LLVM_BUILD_PATH) \ $(MAKE) dev-install -.PHONY: dev-install-llvm-shared -.NOPARALLEL: dev-install-llvm-shared -dev-install-llvm-shared: - LLVM_BUILD_PATH=$(LLVM_BUILD_PATH) LLVM_BUILD_SHARED_LIBS=1 scripts/build-llvm-project.sh - TRITON_BUILD_WITH_CLANG_LLD=1 TRITON_BUILD_WITH_CCACHE=0 \ - LLVM_INCLUDE_DIRS=$(LLVM_BUILD_PATH)/include \ - LLVM_LIBRARY_DIR=$(LLVM_BUILD_PATH)/lib \ - LLVM_SYSPATH=$(LLVM_BUILD_PATH) \ - $(MAKE) dev-install - # Updating lit tests .PHONY: golden-samples diff --git a/scripts/compile-triton.sh b/scripts/compile-triton.sh index bdc97a14a6..7f10cdd893 100755 --- a/scripts/compile-triton.sh +++ b/scripts/compile-triton.sh @@ -8,6 +8,7 @@ export PIP_DISABLE_PIP_VERSION_CHECK=1 BUILD_LLVM=false LLVM_SHARED=false BUILD_TRITON=false +TRITON_SHARED=false CLEAN=false VENV=false CCACHE=false @@ -26,6 +27,11 @@ for arg in "$@"; do BUILD_TRITON=true shift ;; + --triton-shared) + BUILD_TRITON=true + TRITON_SHARED=true + shift + ;; --clean) CLEAN=true shift @@ -39,7 +45,7 @@ for arg in "$@"; do shift ;; --help) - echo "Example usage: ./compile-triton.sh [--llvm | --llvm-shared | --triton | --clean | --venv | --ccache]" + echo "Example usage: ./compile-triton.sh [--llvm | --llvm-shared | --triton | --triton-shared | --clean | --venv | --ccache]" exit 1 ;; *) @@ -132,7 +138,7 @@ build_llvm() { if [ "$LLVM_SHARED" = true ] then - ADDITIONAL_FLAGS="$ADDITIONAL_FLAGS -DBUILD_SHARED_LIBS=ON" + ADDITIONAL_FLAGS="$ADDITIONAL_FLAGS -DBUILD_SHARED_LIBS=true" fi if [ ! -d "$LLVM_PROJ_BUILD" ] @@ -190,6 +196,10 @@ build_triton() { then export TRITON_BUILD_WITH_CCACHE=true fi + if [ "$TRITON_SHARED" = true ] + then + export BUILD_SHARED_LIBS=true + fi # Install triton and its dependencies. pip install -v -e '.[build,tests]' diff --git a/setup.py b/setup.py index 31be4e2229..6fb7d1cf32 100644 --- a/setup.py +++ b/setup.py @@ -293,8 +293,6 @@ def build_extension(self, ext): "-DTRITON_PLUGIN_DIRS=" + ';'.join([b.src_dir for b in backends if b.is_external]), "-DTRITON_WHEEL_DIR=" + wheeldir, f"-DTRITON_CACHE_PATH={get_triton_cache_path()}", - "-DTRITON_EXT_DIRS=" + os.getenv("TRITON_EXT_DIRS", ""), - "-DTRITON_EXT_NAMES=" + os.getenv("TRITON_EXT_NAMES", "") ] if lit_dir is not None: cmake_args.append("-DLLVM_EXTERNAL_LIT=" + lit_dir) @@ -326,6 +324,9 @@ def build_extension(self, ext): else: cmake_args += ["-DLLVM_BUILD_SHARED_LIBS=0"] + if check_env_flag("BUILD_SHARED_LIBS"): + cmake_args += ["-DBUILD_SHARED_LIBS=1"] + # Note that asan doesn't work with binaries that use the GPU, so this is # only useful for tools like triton-opt that don't run code on the GPU. #