1{
2 lib,
3 stdenv,
4 fetchFromGitHub,
5 buildPythonPackage,
6
7 # build-system
8 cmake,
9 scikit-build-core,
10 pathspec,
11 ninja,
12 nanobind,
13
14 # dependencies
15 appdirs,
16 cffi,
17 darwin,
18 decorator,
19 mako,
20 numpy,
21 ocl-icd,
22 oldest-supported-numpy,
23 opencl-headers,
24 platformdirs,
25 pybind11,
26 pytestCheckHook,
27 pytools,
28 six,
29}:
30
31let
32 os-specific-buildInputs = if stdenv.isDarwin then [ darwin.apple_sdk.frameworks.OpenCL ] else [ ocl-icd ];
33in
34buildPythonPackage rec {
35 pname = "pyopencl";
36 version = "2024.2.6";
37 format = "pyproject";
38
39 src = fetchFromGitHub {
40 owner = "inducer";
41 repo = "pyopencl";
42 rev = "refs/tags/v${version}";
43 hash = "sha256-nP7ZAGeRXrjqDRWlc2SDP1hk1fseGeu9Zx0lOp9Pchs=";
44 };
45
46 nativeBuildInputs = [
47 cmake
48 nanobind
49 ninja
50 numpy
51 oldest-supported-numpy
52 pathspec
53 scikit-build-core
54 ];
55
56 dontUseCmakeConfigure = true;
57
58 buildInputs = [
59 opencl-headers
60 pybind11
61 ] ++ os-specific-buildInputs;
62
63 propagatedBuildInputs = [
64 appdirs
65 cffi
66 decorator
67 mako
68 numpy
69 platformdirs
70 pytools
71 six
72 ];
73
74 nativeCheckInputs = [ pytestCheckHook ];
75
76 preBuild = ''
77 export HOME=$(mktemp -d)
78 rm -rf pyopencl
79 '';
80
81 # gcc: error: pygpu_language_opencl.cpp: No such file or directory
82 doCheck = false;
83
84 pythonImportsCheck = [ "pyopencl" ];
85
86 meta = with lib; {
87 description = "Python wrapper for OpenCL";
88 homepage = "https://github.com/pyopencl/pyopencl";
89 license = licenses.mit;
90 };
91}