diff --git a/src/c_wrapper/command_queue.cpp b/src/c_wrapper/command_queue.cpp index 4e2ee733a814948a14e7159a1263d154fff684e5..1f0eb1e619812fdc301cd6478620a643b582004e 100644 --- a/src/c_wrapper/command_queue.cpp +++ b/src/c_wrapper/command_queue.cpp @@ -6,6 +6,8 @@ namespace pyopencl { +template class clobj; + command_queue::~command_queue() { pyopencl_call_guarded_cleanup(clReleaseCommandQueue, this); diff --git a/src/c_wrapper/command_queue.h b/src/c_wrapper/command_queue.h index d7fcd08c9aefc8d77c1a17abebb7896903148c27..4ad5450a3efb758bba25cc9e64f9f2744e217ef7 100644 --- a/src/c_wrapper/command_queue.h +++ b/src/c_wrapper/command_queue.h @@ -7,6 +7,8 @@ namespace pyopencl { // {{{ command_queue +extern template class clobj; + class command_queue : public clobj { public: PYOPENCL_DEF_CL_CLASS(COMMAND_QUEUE); diff --git a/src/c_wrapper/context.cpp b/src/c_wrapper/context.cpp index 9b16c87c30a69d7657220c1ecf53586a536e0384..cd6e49ab6aa946d5c1815a7785f740d6d8cbc552 100644 --- a/src/c_wrapper/context.cpp +++ b/src/c_wrapper/context.cpp @@ -5,6 +5,8 @@ namespace pyopencl { +template class clobj; + context::~context() { pyopencl_call_guarded_cleanup(clReleaseContext, this); diff --git a/src/c_wrapper/context.h b/src/c_wrapper/context.h index 74a108a545ac660de62f583190c902394b50d0a2..44ffc92ad91ff1bc9983e7eb07334b3d23b6eb00 100644 --- a/src/c_wrapper/context.h +++ b/src/c_wrapper/context.h @@ -7,6 +7,8 @@ namespace pyopencl { // {{{ context +extern template class clobj; + class context : public clobj { public: PYOPENCL_DEF_CL_CLASS(CONTEXT); diff --git a/src/c_wrapper/device.cpp b/src/c_wrapper/device.cpp index 495c215201a9b419e0b45d9c878f1bb75fe82ef9..54d1b7de4d16b149ea8b992cccdc7a974e3e5f35 100644 --- a/src/c_wrapper/device.cpp +++ b/src/c_wrapper/device.cpp @@ -3,6 +3,8 @@ namespace pyopencl { +template class clobj; + device::~device() { if (false) { diff --git a/src/c_wrapper/device.h b/src/c_wrapper/device.h index 9e7ffd5ee76bea049e4e251a30add8ea7ca996ec..402461eb945d35421713a50cf62c6de132c573a4 100644 --- a/src/c_wrapper/device.h +++ b/src/c_wrapper/device.h @@ -7,6 +7,8 @@ namespace pyopencl { // {{{ device +extern template class clobj; + class device : public clobj { public: PYOPENCL_DEF_CL_CLASS(DEVICE); diff --git a/src/c_wrapper/event.cpp b/src/c_wrapper/event.cpp index 8dffa034a7a523d4483c073403919999a3999c3f..d7373af4fe13b2e108233b914c65bceb9e6678d0 100644 --- a/src/c_wrapper/event.cpp +++ b/src/c_wrapper/event.cpp @@ -5,6 +5,9 @@ #include "pyhelper.h" namespace pyopencl { + +template class clobj; + #if PYOPENCL_CL_VERSION >= 0x1010 class event_callback { std::function m_func; diff --git a/src/c_wrapper/event.h b/src/c_wrapper/event.h index 57517e2fca959769c801296352e86ba810afe8e2..7f3d6759a28d557d877f70e6225430cc6f7ac3dc 100644 --- a/src/c_wrapper/event.h +++ b/src/c_wrapper/event.h @@ -7,6 +7,8 @@ namespace pyopencl { // {{{ event +extern template class clobj; + class event : public clobj { public: PYOPENCL_DEF_CL_CLASS(EVENT); diff --git a/src/c_wrapper/kernel.cpp b/src/c_wrapper/kernel.cpp index b7f55ecb9310fc5742b28ed8ccb0ba16d4a62a03..5f9555e199c03c1ab829488d9b930cc804872d23 100644 --- a/src/c_wrapper/kernel.cpp +++ b/src/c_wrapper/kernel.cpp @@ -10,6 +10,8 @@ namespace pyopencl { +template class clobj; + kernel::~kernel() { pyopencl_call_guarded_cleanup(clReleaseKernel, this); diff --git a/src/c_wrapper/kernel.h b/src/c_wrapper/kernel.h index 5c52bdccceac40981a1db525fcb0f33321a933d2..5029d0c335c8cb245625195c01f084826a16a278 100644 --- a/src/c_wrapper/kernel.h +++ b/src/c_wrapper/kernel.h @@ -9,6 +9,8 @@ class device; // {{{ kernel +extern template class clobj; + class kernel : public clobj { public: PYOPENCL_DEF_CL_CLASS(KERNEL); diff --git a/src/c_wrapper/memory_map.cpp b/src/c_wrapper/memory_map.cpp index 3826074ca02e3e0d5d959b466c5e985ab2667e8b..2dbbe02b913a8b888532fa19f90aba8924c203fb 100644 --- a/src/c_wrapper/memory_map.cpp +++ b/src/c_wrapper/memory_map.cpp @@ -6,6 +6,8 @@ namespace pyopencl { +template class clobj; + memory_map::~memory_map() { if (!m_valid.exchange(false)) diff --git a/src/c_wrapper/memory_map.h b/src/c_wrapper/memory_map.h index 6c3d6c8dca02d22f3bbcdea9c601b6068f9cc585..85d90917589e1e744eda976e2b0239f3bff0de4e 100644 --- a/src/c_wrapper/memory_map.h +++ b/src/c_wrapper/memory_map.h @@ -11,6 +11,8 @@ class event; // {{{ memory_map +extern template class clobj; + class memory_map : public clobj { private: mutable volatile std::atomic_bool m_valid; diff --git a/src/c_wrapper/memory_object.cpp b/src/c_wrapper/memory_object.cpp index a6945b2107c0290942d91189e32d8749a91237a5..b2f0f02d8dcadd933f8763afbc9975cdaf1cfceb 100644 --- a/src/c_wrapper/memory_object.cpp +++ b/src/c_wrapper/memory_object.cpp @@ -4,6 +4,8 @@ namespace pyopencl { +template class clobj; + generic_info memory_object::get_info(cl_uint param_name) const { diff --git a/src/c_wrapper/memory_object.h b/src/c_wrapper/memory_object.h index b9eb25fb5dd58a978d544a53cc02571ffd59c51c..5f1bb91b6346c79eb563676a0b61ce3322d8e62f 100644 --- a/src/c_wrapper/memory_object.h +++ b/src/c_wrapper/memory_object.h @@ -8,6 +8,8 @@ namespace pyopencl { // {{{ memory_object +extern template class clobj; + class memory_object : public clobj { private: mutable volatile std::atomic_bool m_valid; diff --git a/src/c_wrapper/platform.cpp b/src/c_wrapper/platform.cpp index dbb6e096fc5a3be11ed62c34f8583f4911e7b09b..b4b993e90f03bbb3431e1de6d96ed080021c5b03 100644 --- a/src/c_wrapper/platform.cpp +++ b/src/c_wrapper/platform.cpp @@ -4,6 +4,8 @@ namespace pyopencl { +template class clobj; + generic_info platform::get_info(cl_uint param_name) const { diff --git a/src/c_wrapper/platform.h b/src/c_wrapper/platform.h index 3474c227bb19e3ad27b14445ca083581a7508668..00c24fa81144f16c095be76827f17d6b30a3eba2 100644 --- a/src/c_wrapper/platform.h +++ b/src/c_wrapper/platform.h @@ -7,6 +7,8 @@ namespace pyopencl { // {{{ platform +extern template class clobj; + class platform : public clobj { public: using clobj::clobj; diff --git a/src/c_wrapper/program.cpp b/src/c_wrapper/program.cpp index b1f6d6688953eda7195547866bd9671015e1bbc6..c3f67defc34fca97276021ff62b75de81fb65ef5 100644 --- a/src/c_wrapper/program.cpp +++ b/src/c_wrapper/program.cpp @@ -5,6 +5,8 @@ namespace pyopencl { +template class clobj; + program::~program() { pyopencl_call_guarded_cleanup(clReleaseProgram, this); diff --git a/src/c_wrapper/program.h b/src/c_wrapper/program.h index 21e93bd5536b0f01dc46226a2cc21b2db16c6096..e4830427a0e7efd9e29dfe53827b66b03d04a471 100644 --- a/src/c_wrapper/program.h +++ b/src/c_wrapper/program.h @@ -9,6 +9,8 @@ class device; // {{{ program +extern template class clobj; + class program : public clobj { private: program_kind_type m_program_kind; diff --git a/src/c_wrapper/sampler.cpp b/src/c_wrapper/sampler.cpp index 0c6cb902494774da4b7d9bb81b3f88dc151488ce..b961e00fa3fad5e8843ffef6a6de146522d4cfba 100644 --- a/src/c_wrapper/sampler.cpp +++ b/src/c_wrapper/sampler.cpp @@ -4,6 +4,8 @@ namespace pyopencl { +template class clobj; + sampler::~sampler() { pyopencl_call_guarded_cleanup(clReleaseSampler, this); diff --git a/src/c_wrapper/sampler.h b/src/c_wrapper/sampler.h index ed934f75118c34c9efe806ec06c576c0fcc6e3fc..30b1508bc2d984e2146e57d61d63b44b37dd4753 100644 --- a/src/c_wrapper/sampler.h +++ b/src/c_wrapper/sampler.h @@ -7,6 +7,8 @@ namespace pyopencl { // {{{ sampler +extern template class clobj; + class sampler : public clobj { public: PYOPENCL_DEF_CL_CLASS(SAMPLER);