1{
2 lib,
3 stdenv,
4 fetchFromGitHub,
5 cmake,
6 python3,
7 spirv-headers,
8}:
9
10stdenv.mkDerivation rec {
11 pname = "spirv-tools";
12 version = "1.4.313.0";
13
14 src = fetchFromGitHub {
15 owner = "KhronosGroup";
16 repo = "SPIRV-Tools";
17 rev = "vulkan-sdk-${version}";
18 hash = "sha256-nGyEOREua/W2mdb8DhmqXW0gDThnXnIlhnURAUhCO2g=";
19 };
20
21 # The cmake options are sufficient for turning on static building, but not
22 # for disabling shared building, just trim the shared lib from the CMake
23 # description
24 patches = lib.optional stdenv.hostPlatform.isStatic ./no-shared-libs.patch;
25
26 nativeBuildInputs = [
27 cmake
28 python3
29 ];
30
31 cmakeFlags = [
32 "-DSPIRV-Headers_SOURCE_DIR=${spirv-headers.src}"
33 # Avoid blanket -Werror to evade build failures on less
34 # tested compilers.
35 "-DSPIRV_WERROR=OFF"
36 ];
37
38 # https://github.com/KhronosGroup/SPIRV-Tools/issues/3905
39 postPatch = ''
40 substituteInPlace CMakeLists.txt \
41 --replace-fail '-P ''${CMAKE_CURRENT_SOURCE_DIR}/cmake/write_pkg_config.cmake' \
42 '-DCMAKE_INSTALL_FULL_LIBDIR=''${CMAKE_INSTALL_FULL_LIBDIR}
43 -DCMAKE_INSTALL_FULL_INCLUDEDIR=''${CMAKE_INSTALL_FULL_INCLUDEDIR}
44 -P ''${CMAKE_CURRENT_SOURCE_DIR}/cmake/write_pkg_config.cmake'
45 substituteInPlace cmake/SPIRV-Tools.pc.in \
46 --replace-fail '$'{prefix}/@CMAKE_INSTALL_LIBDIR@ @CMAKE_INSTALL_FULL_LIBDIR@ \
47 --replace-fail '$'{prefix}/@CMAKE_INSTALL_INCLUDEDIR@ @CMAKE_INSTALL_FULL_INCLUDEDIR@
48 substituteInPlace cmake/SPIRV-Tools-shared.pc.in \
49 --replace-fail '$'{prefix}/@CMAKE_INSTALL_LIBDIR@ @CMAKE_INSTALL_FULL_LIBDIR@ \
50 --replace-fail '$'{prefix}/@CMAKE_INSTALL_INCLUDEDIR@ @CMAKE_INSTALL_FULL_INCLUDEDIR@
51 '';
52
53 meta = with lib; {
54 description = "SPIR-V Tools project provides an API and commands for processing SPIR-V modules";
55 homepage = "https://github.com/KhronosGroup/SPIRV-Tools";
56 license = licenses.asl20;
57 platforms = with platforms; unix ++ windows;
58 maintainers = [ maintainers.ralith ];
59 };
60}