llvmPackages_19.libclc: fix building

Changed files
+53 -6
pkgs
development
compilers
+31
pkgs/development/compilers/llvm/19/libclc/use-default-paths.patch
···
+
From e8b910246d0c7c3d9fff994f71c6f8a48ec09a50 Mon Sep 17 00:00:00 2001
+
From: Tristan Ross <tristan.ross@midstall.com>
+
Date: Sat, 24 Aug 2024 19:56:24 -0700
+
Subject: [PATCH] [libclc] use default paths with find_program when possible
+
+
---
+
libclc/CMakeLists.txt | 4 ++--
+
1 file changed, 2 insertions(+), 2 deletions(-)
+
+
diff --git a/CMakeLists.txt b/CMakeLists.txt
+
index 02bb859ae8590b..6bcd8ae52a5794 100644
+
--- a/CMakeLists.txt
+
+++ b/CMakeLists.txt
+
@@ -55,7 +55,7 @@ if( LIBCLC_STANDALONE_BUILD OR CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DI
+
# Import required tools
+
if( NOT EXISTS ${LIBCLC_CUSTOM_LLVM_TOOLS_BINARY_DIR} )
+
foreach( tool IN ITEMS clang llvm-as llvm-link opt )
+
- find_program( LLVM_TOOL_${tool} ${tool} PATHS ${LLVM_TOOLS_BINARY_DIR} NO_DEFAULT_PATH )
+
+ find_program( LLVM_TOOL_${tool} ${tool} PATHS ${LLVM_TOOLS_BINARY_DIR} )
+
set( ${tool}_exe ${LLVM_TOOL_${tool}} )
+
set( ${tool}_target )
+
endforeach()
+
@@ -104,7 +104,7 @@ foreach( tool IN ITEMS clang opt llvm-as llvm-link )
+
endforeach()
+
+
# llvm-spirv is an optional dependency, used to build spirv-* targets.
+
-find_program( LLVM_SPIRV llvm-spirv PATHS ${LLVM_TOOLS_BINARY_DIR} NO_DEFAULT_PATH )
+
+find_program( LLVM_SPIRV llvm-spirv PATHS ${LLVM_TOOLS_BINARY_DIR} )
+
+
if( LLVM_SPIRV )
+
add_executable( libclc::llvm-spirv IMPORTED GLOBAL )
+6
pkgs/development/compilers/llvm/common/default.nix
···
path = ../14;
}
];
+
"libclc/use-default-paths.patch" = [
+
{
+
after = "19";
+
path = ../19;
+
}
+
];
};
constraints = patches."${p}" or null;
+16 -6
pkgs/development/compilers/llvm/common/libclc.nix
···
-
{ lib, stdenv, version, runCommand, monorepoSrc, llvm, buildPackages, buildLlvmTools, ninja, cmake, python3 }:
-
+
{ lib, stdenv, version, runCommand, monorepoSrc, llvm, buildPackages, buildLlvmTools, ninja, cmake, python3, release_version, getVersionFile }:
+
let
+
spirv-llvm-translator = buildPackages.spirv-llvm-translator.override { inherit (buildLlvmTools) llvm; };
+
in
stdenv.mkDerivation rec {
pname = "libclc";
inherit version;
···
patches = [
./libclc/libclc-gnu-install-dirs.patch
-
];
+
] # LLVM 19 changes how host tools are looked up.
+
# Need to remove NO_DEFAULT_PATH and the PATHS arguments for find_program
+
# so CMake can actually find the tools in nativeBuildInputs.
+
# https://github.com/llvm/llvm-project/pull/105969
+
++ lib.optional (lib.versionAtLeast release_version "19") (getVersionFile "libclc/use-default-paths.patch");
# cmake expects all required binaries to be in the same place, so it will not be able to find clang without the patch
-
postPatch = ''
+
postPatch = lib.optionalString (lib.versionOlder release_version "19") ''
substituteInPlace CMakeLists.txt \
--replace 'find_program( LLVM_CLANG clang PATHS ''${LLVM_TOOLS_BINARY_DIR} NO_DEFAULT_PATH )' \
'find_program( LLVM_CLANG clang PATHS "${buildLlvmTools.clang.cc}/bin" NO_DEFAULT_PATH )' \
···
--replace 'find_program( LLVM_OPT opt PATHS ''${LLVM_TOOLS_BINARY_DIR} NO_DEFAULT_PATH )' \
'find_program( LLVM_OPT opt PATHS "${buildLlvmTools.llvm}/bin" NO_DEFAULT_PATH )' \
--replace 'find_program( LLVM_SPIRV llvm-spirv PATHS ''${LLVM_TOOLS_BINARY_DIR} NO_DEFAULT_PATH )' \
-
'find_program( LLVM_SPIRV llvm-spirv PATHS "${buildPackages.spirv-llvm-translator.override { inherit (buildLlvmTools) llvm; }}/bin" NO_DEFAULT_PATH )'
+
'find_program( LLVM_SPIRV llvm-spirv PATHS "${spirv-llvm-translator}/bin" NO_DEFAULT_PATH )'
'' + lib.optionalString (stdenv.hostPlatform != stdenv.buildPlatform) ''
substituteInPlace CMakeLists.txt \
--replace 'COMMAND prepare_builtins' 'COMMAND ${buildLlvmTools.libclc.dev}/bin/prepare_builtins'
'';
-
nativeBuildInputs = [ cmake ninja python3 ];
+
nativeBuildInputs = [ cmake ninja python3 ] ++ lib.optional (lib.versionAtLeast release_version "19") [
+
buildLlvmTools.clang.cc
+
buildLlvmTools.llvm
+
spirv-llvm-translator
+
];
buildInputs = [ llvm ];
strictDeps = true;