- Disable SPIR-V Support on Leap (missing llvm-spirv)

- Enable CPU TBB driver

OBS-URL: https://build.opensuse.org/package/show/science/pocl?expand=0&rev=81
This commit is contained in:
2025-02-04 05:57:07 +00:00
committed by Git OBS Bridge
commit 7b50d0199c
12 changed files with 939 additions and 0 deletions

23
.gitattributes vendored Normal file
View File

@@ -0,0 +1,23 @@
## Default LFS
*.7z filter=lfs diff=lfs merge=lfs -text
*.bsp filter=lfs diff=lfs merge=lfs -text
*.bz2 filter=lfs diff=lfs merge=lfs -text
*.gem filter=lfs diff=lfs merge=lfs -text
*.gz filter=lfs diff=lfs merge=lfs -text
*.jar filter=lfs diff=lfs merge=lfs -text
*.lz filter=lfs diff=lfs merge=lfs -text
*.lzma filter=lfs diff=lfs merge=lfs -text
*.obscpio filter=lfs diff=lfs merge=lfs -text
*.oxt filter=lfs diff=lfs merge=lfs -text
*.pdf filter=lfs diff=lfs merge=lfs -text
*.png filter=lfs diff=lfs merge=lfs -text
*.rpm filter=lfs diff=lfs merge=lfs -text
*.tbz filter=lfs diff=lfs merge=lfs -text
*.tbz2 filter=lfs diff=lfs merge=lfs -text
*.tgz filter=lfs diff=lfs merge=lfs -text
*.ttf filter=lfs diff=lfs merge=lfs -text
*.txz filter=lfs diff=lfs merge=lfs -text
*.whl filter=lfs diff=lfs merge=lfs -text
*.xz filter=lfs diff=lfs merge=lfs -text
*.zip filter=lfs diff=lfs merge=lfs -text
*.zst filter=lfs diff=lfs merge=lfs -text

1
.gitignore vendored Normal file
View File

@@ -0,0 +1 @@
.osc

21
_service Normal file
View File

@@ -0,0 +1,21 @@
<services>
<service name="format_spec_file" mode="manual" />
<service name="obs_scm" mode="manual">
<param name="filename">pocl</param>
<param name="url">https://github.com/pocl/pocl.git</param>
<param name="scm">git</param>
<param name="revision">v6.0</param>
<param name="versionformat">@PARENT_TAG@</param>
<param name="versionrewrite-pattern">v(.*)</param>
</service>
<service name="set_version" mode="manual" />
<service name="tar" mode="buildtime">
<param name="package-meta">yes</param>
</service>
<service name="recompress" mode="buildtime">
<param name="compression">gz</param>
<param name="file">pocl-*.tar</param>
</service>
</services>

View File

@@ -0,0 +1,13 @@
diff --git a/cmake/LLVM.cmake b/cmake/LLVM.cmake
index 2827d64..e186bc1 100644
--- a/cmake/LLVM.cmake
+++ b/cmake/LLVM.cmake
@@ -239,7 +239,7 @@ string(STRIP "${LLVM_SYSLIBS}" LLVM_SYSLIBS)
####################################################################
# llvm-config does not include clang libs
-if((9 LESS LLVM_MAJOR) AND (NOT STATIC_LLVM))
+if((8 LESS LLVM_MAJOR) AND (NOT STATIC_LLVM))
# For Clang 10+, link against a single shared library instead of multiple component shared
# libraries.
if("${LLVM_LIBNAMES}" MATCHES "LLVMTCE")

2
maint.README Normal file
View File

@@ -0,0 +1,2 @@
By default POCL uses the TBB backend. If libpocl-devices-tbb is not installed, the OpenCL runtime will not be able to find any devices.
To force POCl to use the CPU backend, set the environment variable POCL_DEVICES=cpu.

3
pocl-3.1.tar.gz Normal file
View File

@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:82314362552e050aff417318dd623b18cf0f1d0f84f92d10a7e3750dd12d3a9a
size 1928607

3
pocl-6.0.obscpio Normal file
View File

@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:1b5ccd6b9b1cb241e5e89f9cb8b327cbc98be977afe4ff71151e7ddac1be8914
size 42336269

203
pocl-llvm16.patch Normal file
View File

@@ -0,0 +1,203 @@
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 8c8741b6..85de3968 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -520,7 +520,7 @@ if(ENABLE_LLVM)
# of the code, since this macro adds another layer of complexity.
if(LLVM_VERSION VERSION_LESS_EQUAL 14.0)
set(ENABLE_LLVM_OPAQUE_POINTERS OFF CACHE INTERNAL "llvm opaque pointers" FORCE)
- elseif(LLVM_VERSION VERSION_EQUAL 15.0)
+ elseif(LLVM_VERSION VERSION_EQUAL 15.0 OR LLVM_VERSION VERSION_EQUAL 16.0)
option(ENABLE_LLVM_OPAQUE_POINTERS "Handle the change to llvm opaque pointers." ON)
else()
set(ENABLE_LLVM_OPAQUE_POINTERS ON CACHE INTERNAL "llvm opaque pointers" FORCE)
diff --git a/cmake/LLVM.cmake b/cmake/LLVM.cmake
index 18138f36..00ad2186 100644
--- a/cmake/LLVM.cmake
+++ b/cmake/LLVM.cmake
@@ -122,8 +122,10 @@ string(REPLACE "${LLVM_PREFIX}" "${LLVM_PREFIX_CMAKE}" LLVM_LIBDIR "${LLVM_LIBDI
run_llvm_config(LLVM_INCLUDEDIR --includedir)
string(REPLACE "${LLVM_PREFIX}" "${LLVM_PREFIX_CMAKE}" LLVM_INCLUDEDIR "${LLVM_INCLUDEDIR}")
-run_llvm_config(LLVM_SRC_ROOT --src-root)
-run_llvm_config(LLVM_OBJ_ROOT --obj-root)
+if(LLVM_VERSION_MAJOR LESS 16)
+ run_llvm_config(LLVM_SRC_ROOT --src-root)
+ run_llvm_config(LLVM_OBJ_ROOT --obj-root)
+endif()
string(REPLACE "${LLVM_PREFIX}" "${LLVM_PREFIX_CMAKE}" LLVM_OBJ_ROOT "${LLVM_OBJ_ROOT}")
run_llvm_config(LLVM_ALL_TARGETS --targets-built)
run_llvm_config(LLVM_HOST_TARGET --host-target)
@@ -772,12 +774,35 @@ endif()
####################################################################
-if(ENABLE_HOST_CPU_DEVICES AND NOT DEFINED ${CL_DISABLE_HALF})
- set(CL_DISABLE_HALF 0)
- message(STATUS "Checking fp16 support")
- custom_try_compile_clang_silent("__fp16 callfp16(__fp16 a) { return a * (__fp16)1.8; };" "__fp16 x=callfp16((__fp16)argc);" RESV ${CLANG_TARGET_OPTION}${LLC_TRIPLE} ${CLANG_MARCH_FLAG}${LLC_HOST_CPU})
- if(RESV)
+# Clang documentation on Language Extensions:
+# __fp16 is supported on every target, as it is purely a storage format
+# _Float16 is currently only supported on the following targets... SPIR, x86
+# DIsabled for non-x86-64 because of limitations:
+# The _Float16 type requires SSE2 feature and above due to the instruction
+# limitations. When using it on i386 targets, you need to specify -msse2
+# explicitly.
+# For targets without F16C feature or above, please make sure:
+# Use GCC 12.0 and above if you are using libgcc.
+# If you are using compiler-rt, use the same version with the compiler.
+# Early versions provided FP16 builtins in a different ABI. A workaround is
+# to use a small code snippet to check the ABI if you cannot make sure of it.
+
+if(ENABLE_HOST_CPU_DEVICES AND NOT DEFINED CL_DISABLE_HALF)
+ # LLVM <15 doesn't support FP16 emulation
+ # LLVM 15 crashes on some code, with the FP16 emulation
+ # CONFORMANCE disables FP16 b/c it's incomplete
+ # enabled on x86-64 only for now
+ if((LLVM_VERSION_MAJOR LESS 16) OR ENABLE_CONFORMANCE OR (NOT X86_64))
+ message(STATUS "FP16 support disabled")
set(CL_DISABLE_HALF 1)
+ else()
+ set(CL_DISABLE_HALF 0)
+ message(STATUS "Checking fp16 support")
+ custom_try_compile_clang_silent("_Float16 callfp16(_Float16 a) { return a * 1.8f16; };" "_Float16 x=callfp16((_Float16)argc);"
+ RESV ${CLANG_TARGET_OPTION}${LLC_TRIPLE} ${CLANG_MARCH_FLAG}${LLC_HOST_CPU})
+ if(RESV)
+ set(CL_DISABLE_HALF 1)
+ endif()
endif()
endif()
diff --git a/cmake/bitcode_rules.cmake b/cmake/bitcode_rules.cmake
index 3d1a373f..10a309c2 100644
--- a/cmake/bitcode_rules.cmake
+++ b/cmake/bitcode_rules.cmake
@@ -167,7 +167,7 @@ function(compile_ll_to_bc FILENAME SUBDIR BCLIST)
list(APPEND ${BCLIST} "${BC_FILE}")
set(${BCLIST} ${${BCLIST}} PARENT_SCOPE)
- if(LLVM_VERSION VERSION_EQUAL 15.0)
+ if(LLVM_VERSION VERSION_EQUAL 15.0 OR LLVM_VERSION VERSION_EQUAL 16.0)
# both of these are necesssary. some of the files (like barrier.ll)
# don't contain any pointers and thus cannot be guessed; if llvm-as
# produces the wrong opaque-type file, later llvm-link will fail
diff --git a/include/_kernel_c.h b/include/_kernel_c.h
index e1038ea5..73ad9d18 100644
--- a/include/_kernel_c.h
+++ b/include/_kernel_c.h
@@ -112,7 +112,7 @@ typedef uint uint16 __attribute__((__ext_vector_type__(16)));
/* NOTE: the Clang's __fp16 does not work robustly in C mode,
it might produce invalid code at least with half vectors.
Using the native 'half' type in OpenCL C mode works better. */
-typedef __fp16 half;
+typedef _Float16 half;
typedef half half2 __attribute__((__ext_vector_type__(2)));
typedef half half3 __attribute__((__ext_vector_type__(3)));
diff --git a/lib/CL/pocl_llvm_build.cc b/lib/CL/pocl_llvm_build.cc
index 3ef6e0c5..84413a48 100644
--- a/lib/CL/pocl_llvm_build.cc
+++ b/lib/CL/pocl_llvm_build.cc
@@ -263,7 +263,7 @@ int pocl_llvm_build_program(cl_program program,
size_t fastmath_flag = user_options.find("-cl-fast-relaxed-math");
-#if (CLANG_MAJOR == 15)
+#if (CLANG_MAJOR == 15) || (CLANG_MAJOR == 16)
#ifdef LLVM_OPAQUE_POINTERS
ss << "-opaque-pointers ";
#else
diff --git a/lib/CL/pocl_llvm_utils.cc b/lib/CL/pocl_llvm_utils.cc
index 3cc7fcc5..0690af17 100644
--- a/lib/CL/pocl_llvm_utils.cc
+++ b/lib/CL/pocl_llvm_utils.cc
@@ -273,7 +273,9 @@ void InitializeLLVM() {
initializeAnalysis(Registry);
initializeTransformUtils(Registry);
initializeInstCombine(Registry);
+#ifdef LLVM_OLDER_THAN_16_0
initializeInstrumentation(Registry);
+#endif
initializeTarget(Registry);
}
@@ -390,7 +392,7 @@ void pocl_llvm_create_context(cl_context ctx) {
data->Context = new llvm::LLVMContext();
assert(data->Context);
-#if (CLANG_MAJOR == 15)
+#if (CLANG_MAJOR == 15) || (CLANG_MAJOR == 16)
#ifdef LLVM_OPAQUE_POINTERS
data->Context->setOpaquePointers(true);
#else
diff --git a/lib/llvmopencl/BarrierTailReplication.cc b/lib/llvmopencl/BarrierTailReplication.cc
index 98bc0635..43802f73 100644
--- a/lib/llvmopencl/BarrierTailReplication.cc
+++ b/lib/llvmopencl/BarrierTailReplication.cc
@@ -352,7 +352,11 @@ BarrierTailReplication::ReplicateBasicBlocks(BasicBlockVector &new_graph,
i2 != e2; ++i2) {
Instruction *i = i2->clone();
reference_map.insert(std::make_pair(&*i2, i));
+#ifdef LLVM_OLDER_THAN_16_0
new_b->getInstList().push_back(i);
+#else
+ i->insertInto(new_b, new_b->end());
+#endif
}
// Add predicates to PHINodes of basic blocks the replicated
diff --git a/lib/llvmopencl/ParallelRegion.cc b/lib/llvmopencl/ParallelRegion.cc
index dfe56e03..639bd686 100644
--- a/lib/llvmopencl/ParallelRegion.cc
+++ b/lib/llvmopencl/ParallelRegion.cc
@@ -201,12 +201,17 @@ ParallelRegion::chainAfter(ParallelRegion *region)
#endif
BasicBlock *successor = t->getSuccessor(0);
- Function::BasicBlockListType &bb_list =
- successor->getParent()->getBasicBlockList();
-
- for (iterator i = begin(), e = end(); i != e; ++i)
+ Function *F = successor->getParent();
+#ifdef LLVM_OLDER_THAN_16_0
+ Function::BasicBlockListType &bb_list =
+ F->getBasicBlockList();
+ for (iterator i = begin(), e = end(); i != e; ++i)
bb_list.insertAfter(tail->getIterator(), *i);
+#else
+ for (iterator i = begin(), e = end(); i != e; ++i)
+ F->insert(tail->getIterator(), *i);
+#endif
t->setSuccessor(0, entryBB());
t = exitBB()->getTerminator();
diff --git a/lib/llvmopencl/WorkItemAliasAnalysis.cc b/lib/llvmopencl/WorkItemAliasAnalysis.cc
index 02dcd2ec..8a85b25a 100644
--- a/lib/llvmopencl/WorkItemAliasAnalysis.cc
+++ b/lib/llvmopencl/WorkItemAliasAnalysis.cc
@@ -51,6 +51,12 @@ using namespace llvm;
typedef llvm::MemoryLocation Location;
typedef llvm::AliasResult AliasResult;
+#ifdef LLVM_OLDER_THAN_16_0
+#define AAResultB AAResultBase<WorkItemAAResult>
+#else
+#define AAResultB AAResultBase
+#endif
+
/// WorkItemAliasAnalysis - This is a simple alias analysis
/// implementation that uses pocl metadata to make sure memory accesses from
/// different work items are not aliasing.
@@ -58,8 +64,8 @@ typedef llvm::AliasResult AliasResult;
// LLVM 3.8+
-class WorkItemAAResult : public AAResultBase<WorkItemAAResult> {
- friend AAResultBase<WorkItemAAResult>;
+class WorkItemAAResult : public AAResultB {
+ friend AAResultB;
public:
static char ID;

1
pocl-rpmlintrc Normal file
View File

@@ -0,0 +1 @@
addFilter("devel-file-in-non-devel-package")

487
pocl.changes Normal file
View File

@@ -0,0 +1,487 @@
-------------------------------------------------------------------
Mon Jan 6 13:30:37 UTC 2025 - Eyad Issa <eyadlorenzo@gmail.com>
- Disable SPIR-V Support on Leap (missing llvm-spirv)
- Enable CPU TBB driver
-------------------------------------------------------------------
Sat Dec 28 01:52:48 UTC 2024 - Eyad Issa <eyadlorenzo@gmail.com>
- Use _service file to create tarball from git
- Enable SPIR-V support
- Remove pocl-llvm16.patch
- Remove link_against_libclang-cpp_so.patch
- Update to version 6.0:
* New CPU driver which uses Threading Building Blocks for
task scheduling
* Experimental cl_ext_buffer_device_address prototype
* Multi-device command buffer infrastructure
* Command queue priority/throttle hints
* Support for using OpenMP for task scheduling in the
"cpu" driver
* Improvements to the Remote driver
* Improvements to the Level Zero driver
* Improvements to the CUDA driver
- Update to version 5.0:
* New backend: Remote
* CUDA driver: More OpenCL 3.0 features and extensions
implemented
* RISC-V CPU support improved
* Other CPU improvements
* Experimental built-in-kernel library based FPGA backend
- Update to version 4.0:
* Support for Clang/LLVM 16.0
* CPU driver improvements
* New Level Zero driver
-------------------------------------------------------------------
Thu Feb 29 14:57:59 UTC 2024 - Dominique Leuenberger <dimstar@opensuse.org>
- Use %autosetup macro. Allows to eliminate the usage of deprecated
%patchN.
-------------------------------------------------------------------
Fri Feb 16 08:20:55 UTC 2024 - Max Lin <mlin@suse.com>
- BuildRequires clang15-devel on Leap 15.6
* the default clang-devel is clang17 and Leap15 doesn't
have clang16
-------------------------------------------------------------------
Wed Nov 8 16:12:20 UTC 2023 - Dominique Leuenberger <dimstar@opensuse.org>
- BuildRequire clang16-devel whenever clang-devel is not in the
range >= 6 < 17.
-------------------------------------------------------------------
Sat May 13 05:43:35 UTC 2023 - Carsten Ziepke <kieltux@gmail.com>
- Add pocl-llvm16.patch, enables support for LLVM 16
- Use BuildRequires ocl-icd-devel instead pkgconfig(OpenCL), fix
have choice for pkgconfig(OpenCL) for SLE
-------------------------------------------------------------------
Sat Dec 24 12:27:06 UTC 2022 - Andreas Schwab <schwab@suse.de>
- Use generic-rv64 cpu on riscv64
-------------------------------------------------------------------
Mon Dec 5 13:43:13 UTC 2022 - Ondřej Súkup <mimi.vx@gmail.com>
- Update to version 3.1
* Support CLang/LLVM 15
* Much improved SPIR-V support for CPU and CUDA drivers
* Major rework of the custom device driver.
* Various improvements to the work-in-progress Vulkan driver
* Basic implementation of cl_khr_command_buffer
-------------------------------------------------------------------
Wed Nov 2 10:13:14 UTC 2022 - Dominique Leuenberger <dimstar@opensuse.org>
- IF clang-devel is >= 15, force dependency to clang14-devel.
-------------------------------------------------------------------
Tue Sep 6 16:34:33 UTC 2022 - Stefan Brüns <stefan.bruens@rwth-aachen.de>
- Update to version 3.0
* Minimal OpenCL 3.0 feature set should be now supported
(official conformance stamp still to apply for).
* Support for Clang/LLVM 14.0.
* Improved tracing and visualization.
* Support for generating specialized work-group functions and
include them in the PoCL kernel program binaries.
* Fixed printf for SPIR-V.
* A lot of other fixes and improvements.
-------------------------------------------------------------------
Sat Jun 4 14:33:49 UTC 2022 - Aaron Puchert <aaronpuchert@alice-dsl.net>
- Use LLVM 13 on Tumbleweed, since LLVM 14 does not yet work
according to upstream. (gh#pocl/pocl#1047, gh#pocl/pocl#1048)
- Require at least version 6 of clang-devel, older versions are
not supported. (Otherwise configuration will fail.)
- Strip prefix from CMAKE_INSTALL_LIBDIR on older distributions
to fix paths there.
-------------------------------------------------------------------
Sat Oct 30 11:37:16 UTC 2021 - Martin Hauke <mardnh@gmx.de>
- Update to version 1.8
* Support for Clang/LLVM 13
* Improved debugging support with Valgrind, LTTNG
* Improved support for SPIR/SPIR-V on CUDA
- Update to version 1.7
* Support for Clang/LLVM 12
* Improved support for cross-compiling
* Improved support for SPIR-V binaries when using CPU device
* Implemented OpenCL 3.0 features: clGetDeviceInfo queries
+ CL_DEVICE_ATOMIC_MEMORY_CAPABILITIES (Minimal implementation)
+ CL_DEVICE_ATOMIC_FENCE_CAPABILITIES (Minimal implementation)
-------------------------------------------------------------------
Fri Dec 25 14:30:16 UTC 2020 - Martin Hauke <mardnh@gmx.de>
- Update to version 1.6
* Support for LLVM 11.
* CUDA kernels using constant __local blocks are now ABI
incompatible with previous release. Users need to delete their
pocl cache.
* Improved debugging of OpenCL code with CPU driver.
* Improved the PTX code generation for __local blocks.
* Improved handling of command queue barriers
* Fix LLVM loop vectorizing remarks printing
(POCL_VECTORIZER_REMARKS=1).
* Fix an issue in which the loop vectorizer produced code with
invalid memory reads (issue #757).
* Fix compilation error when CMake option SINGLE_LLVM_LIB is
set to OFF.
* Fix wrongly output dlerror (Undefined symbol) after dlopen,
caused by a previous libdl call in an ICD loader
* [CPU] safety margin of pocl's CPU driver local memory
allocation has been reduced to a much more reasonable value
* [CPU] buffer size for OpenCL printf is now configurable with
PRINTF_BUFFER_SIZE CMake variable
* [CPU] local memory size reported is now the size of last level
of non-shared data cache (usually L1 or L2 depending on CPU),
if hwloc can determine it.
- Update patch link_against_libclang-cpp_so.patch
-------------------------------------------------------------------
Fri Oct 23 22:46:28 UTC 2020 - Ondřej Súkup <mimi.vx@gmail.com>
- remove broken installation workaround
-------------------------------------------------------------------
Fri Jun 26 11:05:12 UTC 2020 - Stefan Dirsch <sndirsch@suse.com>
- moved pocl.icd to /usr/share/OpenCL/vendors for real ...
-------------------------------------------------------------------
Thu Jun 25 09:53:25 UTC 2020 - Stefan Dirsch <sndirsch@suse.com>
- Update to version 1.5
* Added support for LLVM/Clang 10.0
- adjusted link_against_libclang-cpp_so.patch
- move pocl.icd from /usr/etc/OpenCL/vendors to
/usr/share/OpenCL/vendors (boo#1173005)
-------------------------------------------------------------------
Mon Nov 4 20:04:34 UTC 2019 - Stefan Brüns <stefan.bruens@rwth-aachen.de>
- Update to version 1.4
* Support for LLVM/Clang 8.0 and 9.0
* Support for LLVM older than 6.0 has been removed.
* Improved SPIR and SPIR-V support for CPU device
* pocl-accel: An example driver and support infrastructure for
OpenCL 1.2 CL_DEVICE_TYPE_CUSTOM hardware accelerators.
- Remove upstreamed fix_resources_path_version_dependency.patch
- Fix build with single-component libclang-cpp.so, add
link_against_libclang-cpp_so.patch
-------------------------------------------------------------------
Sun Jul 28 19:15:03 UTC 2019 - Stefan Brüns <stefan.bruens@rwth-aachen.de>
- Use GCC (default host compiler) for compiling the library itself,
and only compile the openCL kernel bytecode with clang, which is the
upstream default setup. This also fixes problems where clang chokes
on the GCC LTO options.
- Drop unused boost_headers, glew, ncurses and uthash devel BuildRequires.
- Remove unneeded extra linker flags.
- Fix build on ARM, and enable Arch64 (needs explicit CPU specification),
supported since pocl 1.1.
- Fix failing header lookup when minor libclang version changes
(https://github.com/pocl/pocl/issues/747), add
fix_resources_path_version_dependency.patch
- Require implementation (libpocl2) from the main package which
contains the ICD referencing it.
-------------------------------------------------------------------
Fri Apr 5 19:56:21 UTC 2019 - Martin Hauke <mardnh@gmx.de>
- Adjust required clang version (clang < 9) since clang 8 is now
supported by upstream.
-------------------------------------------------------------------
Thu Apr 4 19:21:26 UTC 2019 - Martin Hauke <mardnh@gmx.de>
- Update to version 1.3
* Support for Clang/LLVM 8.0.
Bug Fixes:
* Fixed kernel debug symbol generation.
* HSA: fix kernel caching.
* Fix clCreateImage doesn't fail with unsupported image type.
* Fix handle non-kernel functions with barriers properly.
* Fix Unable to build pocl with CUDA support with LLVM 7 and host
GCC 8.2.
* Fix image format/size handling with multiple devices in context.
* Fix padding issue with context arrays that manifested as unaligned
access errors after autovectorization.
Notable Internal Changes
* Add group ids as hidden kernel arguments instead of digging
them up from the context struct.
* Ability to generate the final binary via separate assembly text +
assembler call. Useful for supporting LLVM targets without direct
binary emission support.
* Use Clang's Driver API for launching the final linkage step. This
way we utilize the toolchain registry with correct linkage steps
required for the target at hand.
* Add 'device_aux_functions' to the driver layer attributes. This
can be used to retain device-specific functions required by the
target across the pruning of unused globals.
* The "default kernels" hack which was used to store kernel metadata,
has been removed. Kernel metadata are now stored only once, in
cl_program struct; every new cl_kernel structs holds only a pointer.
* Major 'pthread' CPU driver cleanup.
* Major Workgroup.cc cleanup.
- Remove reproducible.patch (fixed upstream)
-------------------------------------------------------------------
Wed Oct 31 12:13:35 UTC 2018 - Bernhard Wiedemann <bwiedemann@suse.com>
- Add reproducible.patch to make build result independent of
build system CPU (boo#1110722)
-------------------------------------------------------------------
Tue Sep 25 10:30:51 UTC 2018 - Ondřej Súkup <mimi.vx@gmail.com>
- update to version 1.2
* Support for LLVM/Clang 7.0 and 6.0
* HWLOC 2.0 support
- build kernels with distro support - detect and load cpu
optimized code on runtime
-------------------------------------------------------------------
Mon Jul 30 04:53:06 UTC 2018 - bwiedemann@suse.com
- Disable compile time CPU-detection
instead always asume core2 (boo#1100677)
-------------------------------------------------------------------
Tue May 15 20:34:02 UTC 2018 - mimi.vx@gmail.com
- move nonversioned lib to main package
-------------------------------------------------------------------
Fri Mar 9 17:17:10 UTC 2018 - mardnh@gmx.de
- Update to version 1.1
* Support for LLVM/Clang 6.0 and 5.0.
* Experimental SPIR and SPIR-V support
* Improved kernel compilation speed
- Several tests have problems on some OBS workers while the same
tests run perfectly fine in a local chroot.
Disable tests for now.
-------------------------------------------------------------------
Mon Mar 5 19:34:47 UTC 2018 - mardnh@gmx.de
- Create subpackage for the shared library
- Run tests after the build
-------------------------------------------------------------------
Wed Jan 31 14:51:17 UTC 2018 - msrb@suse.com
- Remove dependency on clang-devel-static. (bnc#1065464)
* It was removed, clang-devel now again provides everything
necessary as shared libraries.
-------------------------------------------------------------------
Tue Dec 19 18:44:43 UTC 2017 - mardnh@gmx.de
- Update to version 1.0
Highlights
* Improved automatic local work-group sizing on kernel enqueue, taking
into account standard constraints, SIMD width for vectorization as
well as the number of compute units available on the device.
* Support for NVIDIA GPUs via a new CUDA backend (currently experimental).
* Removed support for BBVectorizer.
* LLVM 5.0 is now supported.
* A few build options have been added for distribution builds,
see README.packaging.
* Somewhat improved scalability in the CPU driver. CPUs with many cores
and programs using a lot of WIs with small kernels can run somewhat faster.
* Full conformance with OpenCL 1.2 standard, enabled by default. There are
some caveats though - see the documentation.
* When conformance is enabled, some kernel library functions might be
slower than in previous releases.
* Pocl now reports OpenCL 1.2 instead of 2.0, except HSA enabled builds.
* Updated format of pocl binaries, which is NOT backwards compatible.
* You'll need to clean any kernel caches.
* Fixed several memory leaks.
* Unresolved symbols (missing/misspelled functions etc) in a kernel will
result in error in clBuildProgram() instead of pocl silently ignoring
them and then aborting at dlopen().
* New env variable POCL_MEMORY_LIMIT=N limits the Global memory size
reported by pocl to N gigabytes.
* New env variable POCL_AFFINITY (defaults to 0): if enabled, sets
the affinity of each CPU driver pthread to a single core.
* Improved AVX512 support (with LLVM 5.0). Note that even with LLVM 5.0
there are still a few bugs (see pocl issue #555); AVX512 + LLVM 4.0 are
a lot more broken, and probably not worth trying.
* POCL_DEBUG env var has been revamped. You can now limit debuginfo to
these categories (or their combination): all,error,warning,general
memory,llvm,events,cache,locking,refcounts,timing,hsa,tce,cuda
* The old setting POCL_DEBUG=1 now equals error+warning+general.
- Remove patch:
* pocl-disable-tests.diff
- Disable CUDA backend since it depends on CUDA_TOOLKIT which is
not available in Factory
-------------------------------------------------------------------
Thu Oct 26 14:13:18 UTC 2017 - mpluskal@suse.com
- Simplify spec file a bit
- Enable CUDA backend
- Enable all available cpu specific kernels for intel platform
-------------------------------------------------------------------
Sat Oct 21 06:28:35 UTC 2017 - mpluskal@suse.com
- We need clang4-devel-static to build with current clang packaging
- Small spec-file cleanup
* drop conditionals for older releases then Factory as building
was not possible anyways
-------------------------------------------------------------------
Wed Jul 12 10:50:47 UTC 2017 - jengelh@inai.de
- Description should say what it is, not what it plans in the
future.
-------------------------------------------------------------------
Sat Jul 8 17:29:43 UTC 2017 - mardnh@gmx.de
- Fix runtime linking issues (missing crtbeginS.so)
- Require gcc for Factory
-------------------------------------------------------------------
Mon Jul 3 21:23:21 UTC 2017 - mardnh@gmx.de
- Fix path in the ICD-file
-------------------------------------------------------------------
Fri May 19 08:49:22 UTC 2017 - idonmez@suse.com
- Update library name for uthash -> libut2
-------------------------------------------------------------------
Tue May 16 18:59:30 UTC 2017 - mardnh@gmx.de
- Update to 0.14
- Support for LLVM/Clang versions 3.9 and 4.0. Version 3.9 was the first
release to include all frontend features for OpenCL 2.0.
- Ability to build pocl in a mode where online compilation is not
supported to run in hosts without LLVM and binaries compiled offline
e.g. using poclcc.
- pocl's binary format now can contain all the necessary bits to
execute the programs on a host without online compiler support.
- Initial support for out-of-order execution execution of command queues.
- It's now possible to cross-compile pocl when building an offline
compiler build.
- New driver api extension to support out-of-order and asynchronous
devices/drivers.
- Pthread and HSA drivers are now fully asynchronous.
- CMake now the only supported build system, autotools removed.
- LTTng tracing support
- Add patches:
- pocl-disable-tests.diff
- compilation errors on some tests disable tests for now
- Remove patches:
- 0001-Fixes-357-broken-build-with-GCC-6.1.patch
- fixed upstream
-------------------------------------------------------------------
Thu Feb 2 10:52:12 UTC 2017 - adam.majer@suse.de
- use individual libboost-*-devel packages instead of boost-devel
-------------------------------------------------------------------
Fri Jan 20 08:45:21 UTC 2017 - mpluskal@suse.com
- Use llvm3_8 for building and as runtime dependency
-------------------------------------------------------------------
Sun Oct 9 09:17:33 UTC 2016 - mpluskal@suse.com
- Use cmake macros
- Use ninja to speedup building
-------------------------------------------------------------------
Mon Jul 4 15:04:04 UTC 2016 - mardnh@gmx.de
- Add patch: 0001-Fixes-357-broken-build-with-GCC-6.1.patch
* Fix build with GCC 6.x
-------------------------------------------------------------------
Tue Apr 5 07:18:43 UTC 2016 - mpluskal@suse.com
- Update to 0.13
* kernel compiler support for LLVM/Clang 3.8
* initial (partial) OpenCL 2.0 support
* CMake build system almost on parity with autotools
* Improved HSA support
* Other optimizations and bug fixes
-------------------------------------------------------------------
Mon Oct 26 20:02:35 UTC 2015 - mardnh@gmx.de
- update to version 0.12
Highlights
* Support for HSA-compliant devices (kernel agents). The GPU of AMD Kaveri
now works through pocl with a bunch of test cases in the AMD SDK 2.9 example
suite.
* New and improved kernel cache system that enables caching
kernels with #includes.
* Support for LLVM/Clang 3.7.
* Little endian MIPS32 now passes almost all pocl testsuite tests.
OpenCL Runtime/Platform API support
* Transferred buffer read/write/copy offset calculation to device driver side.
- these driver api functions have changed; got offset as a new argument.
* Maximum allocation is not limited to 1/4th of total memory size.
* Maximum image dimensions grow to fit maximum allocation.
* clGetDeviceInfo() reports better information about CPU vendor and cache.
* experimental clCreateSubDevices() for pthread CPU device.
OpenCL C Builtin Function Implementations
* Implemented get_image_dim().
Bugfixes
* Avoid infinite loops when users recycle an event waiting list.
* Correctly report the base address alignment.
* Lots of others.
Misc
* Tests now using new cl2.hpp, removing dependency on OpenGL headers
- remove OpenGL-related packages from BuildRequires
- add rpmlintrc
-------------------------------------------------------------------
Wed Jul 1 14:54:09 UTC 2015 - cdenicolo@suse.com
- license update: MIT
overall license is MIT, other licenses refere to build scripts only.
-------------------------------------------------------------------
Thu Mar 12 19:11:26 UTC 2015 - mardnh@gmx.de
- update to version 0.11
This release adds:
* kernel compiler support for LLVM/Clang 3.6,
* caching of compiled OpenCL kernels
* initial Android support
* experimental Windows support (many things still broken there)
* two new examples, Cloverleaf and Halide, updated AMDSDK examples
* better debugging possibilities
* initial MIPS architecture support
-------------------------------------------------------------------
Tue Oct 7 19:16:42 UTC 2014 - mardnh@gmx.de
- initial stable package, version 0.10
based on home:mnhauke:opencl:testing/pocl

4
pocl.obsinfo Normal file
View File

@@ -0,0 +1,4 @@
name: pocl
version: 6.0
mtime: 1718712945
commit: 952bc559f790e5deb5ae48692c4a19619b53fcdc

178
pocl.spec Normal file
View File

@@ -0,0 +1,178 @@
#
# spec file for package pocl
#
# Copyright (c) 2025 SUSE LLC
# Copyright (c) 2014 Guillaume GARDET <guillaume@opensuse.org>
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
# upon. The license for this file, and modifications and additions to the
# file, is the same license as for the pristine package itself (unless the
# license for the pristine package is not an Open Source License, in which
# case the license is the MIT License). An "Open Source License" is a
# license that conforms to the Open Source Definition (Version 1.9)
# published by the Open Source Initiative.
# Please submit bugfixes or comments via https://bugs.opensuse.org/
#
%define sover 2
%if 0%{?suse_version} > 1600
%bcond_without spirv
%else
%bcond_with spirv
%endif
%if 0%{?suse_version} > 1600
%bcond_without ttb
%else
%bcond_with ttb
%endif
Name: pocl
Version: 6.0
Release: 0
Summary: Portable Computing Language - an OpenCL implementation
# The whole code is under MIT
# except include/utlist.h which is under BSD (and unbundled)
License: MIT
Group: Development/Tools/Other
URL: https://portablecl.org/
Source0: https://github.com/pocl/pocl/archive/v%{version}.tar.gz#/%{name}-%{version}.tar.gz
Source99: pocl-rpmlintrc
# Version 6.0: Supports LLVM versions 14.0 to 18.0
BuildRequires: ((clang-devel >= 14 with clang-devel < 19) or clang18-devel)
BuildRequires: cmake
BuildRequires: gcc-c++
BuildRequires: ninja
BuildRequires: ocl-icd-devel
BuildRequires: opencl-headers
BuildRequires: pkgconfig
BuildRequires: pkgconfig(hwloc)
# PPC has limited support/testing from upstream
# s390(x) is also not supported, so use ExclusiveArch
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64 riscv64
%if %{with ttb}
BuildRequires: tbb-devel
%endif
%if %{with spirv}
BuildRequires: libLLVMSPIRVLib-devel
%endif
%description
Portable Computing Language (pocl) is an implementation of the OpenCL standard
which can be adapted for new targets and devices, both for homogeneous CPU and
heterogenous GPUs/accelerators.
pocl uses Clang as an OpenCL C frontend and LLVM for the kernel compiler
implementation, and as a portability layer. If your desired target has an LLVM
backend, it should be possible to get OpenCL support by using pocl.
pocl yields improved performance portability by using a kernel compiler that
can generate multi-work-item work-group functions that exploit various types of
parallel hardware resources, such as VLIW, superscalar, SIMD, SIMT, multicore
and multithread.
%package -n libpocl%{sover}
Summary: Shared Library part of pocl
Group: System/Libraries
Recommends: libpocl-devices-tbb = %{version}
%description -n libpocl%{sover}
Portable Computing Language (pocl) is an implementation of the OpenCL standard
which can be adapted for new targets and devices, both for homogeneous CPU and
heterogenous GPUs/accelerators.
This subpackage contains the shared library part of pocl.
%if %{with ttb}
%package -n libpocl-devices-tbb
Summary: TBB device for pocl
Group: System/Libraries
%description -n libpocl-devices-tbb
Portable Computing Language (pocl) is an implementation of the OpenCL standard
which can be adapted for new targets and devices, both for homogeneous CPU and
heterogenous GPUs/accelerators.
This subpackage contains the Thread Building Blocks (TBB) device for pocl.
%endif
%package devel
Summary: Development files for the Portable Computing Language
Group: Development/Languages/Other
Requires: %{name} = %{version}
Requires: libpocl%{sover} = %{version}
Requires: opencl-headers >= 2.2
%description devel
Portable Computing Language (pocl) is an implementation of the OpenCL standard
which can be adapted for new targets and devices, both for homogeneous CPU and
heterogenous GPUs/accelerators.
This subpackage provides the development files needed for pocl.
%prep
%autosetup -p1
%build
%define __builder ninja
%cmake \
-DENABLE_CUDA=OFF \
%if %{with spirv}
-DENABLE_SPIRV=ON \
%endif
-DENABLE_ICD=ON \
%if %{with ttb}
-DENABLE_TBB_DEVICE=ON \
%endif
-DPOCL_INSTALL_ICD_VENDORDIR=%{_datadir}/OpenCL/vendors \
%ifarch %{ix86} x86_64
-DKERNELLIB_HOST_CPU_VARIANTS=distro \
%endif
%ifarch %{arm}
-DLLC_HOST_CPU=cortex-a9 \
%endif
%ifarch aarch64
-DLLC_HOST_CPU=cortex-a53 \
%endif
%ifarch riscv64
-DLLC_HOST_CPU=generic-rv64 \
%endif
%if 0%{?suse_version} <= 1500 && 0%{?sle_version} <= 150300
-DCMAKE_INSTALL_LIBDIR:PATH=%{_lib} \
%endif
-DWITH_LLVM_CONFIG=%{_bindir}/llvm-config
%cmake_build
%install
%cmake_install
%post -n libpocl%{sover} -p /sbin/ldconfig
%postun -n libpocl%{sover} -p /sbin/ldconfig
%files
%doc CHANGES README.* doc/sphinx/source/*.rst
%license LICENSE
%dir %{_datadir}/OpenCL/
%dir %{_datadir}/OpenCL/vendors
%{_datadir}/OpenCL/vendors/pocl.icd
%{_bindir}/poclcc
%dir %{_libdir}/pocl/
%{_libdir}/pocl/libpocl-devices-basic.so
%{_libdir}/pocl/libpocl-devices-pthread.so
%{_datadir}/pocl/
%files -n libpocl%{sover}
%{_libdir}/libpocl.so.%{sover}*
%files devel
%{_libdir}/libpocl.so
%{_libdir}/pkgconfig/pocl.pc
%if %{with ttb}
%files -n libpocl-devices-tbb
%{_libdir}/pocl/libpocl-devices-tbb.so
%endif
%changelog