mirror of
https://git.FreeBSD.org/ports.git
synced 2024-12-23 04:23:08 +00:00
Add pocl.
Portable OpenCL aims to be an efficient open source (MIT-licensed) implementation of the OpenCL 1.2 standard. pocl uses Clang as an OpenCL C frontend and LLVM for the kernel compiler implementation, and as a portability layer. Thus, if your desired target has an LLVM backend, it should be able to get OpenCL support easily by using pocl. PR: 171914 Submitted by: O.Hartmann <ohartmann@walstatt.org> (based on)
This commit is contained in:
parent
39c0f174f4
commit
1e36af0daa
Notes:
svn2git
2021-03-31 03:12:20 +00:00
svn path=/head/; revision=426722
@ -256,6 +256,7 @@
|
||||
SUBDIR += php_doc
|
||||
SUBDIR += picoc
|
||||
SUBDIR += pike78
|
||||
SUBDIR += pocl
|
||||
SUBDIR += polyml
|
||||
SUBDIR += ptoc
|
||||
SUBDIR += pure
|
||||
|
67
lang/pocl/Makefile
Normal file
67
lang/pocl/Makefile
Normal file
@ -0,0 +1,67 @@
|
||||
# $FreeBSD$
|
||||
|
||||
PORTNAME= pocl
|
||||
PORTVERSION= 0.13
|
||||
CATEGORIES= lang
|
||||
MASTER_SITES= SF/pocl \
|
||||
http://portablecl.org/downloads/
|
||||
|
||||
MAINTAINER= ohartman@zedat.fu-berlin.de
|
||||
COMMENT= POrtable Computing Language (POCL)
|
||||
|
||||
LICENSE= GPLv3
|
||||
LICENSE_FILE= ${WRKSRC}/LICENSE
|
||||
|
||||
BUILD_DEPENDS= llvm${LLVM_VERSION}>=0:devel/llvm${LLVM_VERSION} \
|
||||
opencl>=2.1:devel/opencl
|
||||
LIB_DEPENDS= libhwloc.so:devel/hwloc \
|
||||
libOpenCL.so:devel/ocl-icd \
|
||||
libltdl.so:devel/libltdl
|
||||
RUN_DEPENDS= llvm${LLVM_VERSION}>=0:devel/llvm${LLVM_VERSION}
|
||||
|
||||
CONFLICTS= freeocl[0-9]*
|
||||
|
||||
BROKEN_FreeBSD_9= pocl is not supported on 9.x
|
||||
BROKEN_FreeBSD_10= pocl is not supported on 10.x
|
||||
ONLY_FOR_ARCHS= amd64
|
||||
ONLY_FOR_ARCHS_REASON_amd64= only tested on amd64
|
||||
|
||||
LLVM_VERSION= 37
|
||||
|
||||
GNU_CONFIGURE= yes
|
||||
USE_LDCONFIG= yes
|
||||
USE_GL= yes
|
||||
#USES= autoreconf gmake localbase pathfix pkgconfig libtool
|
||||
USES= gmake localbase ncurses pathfix pkgconfig libtool:keepla
|
||||
|
||||
INSTALL_TARGET= install-strip
|
||||
|
||||
MAKE_ARGS+= PKGCONFIGDIR=${PREFIX}/libdata/pkgconfig
|
||||
|
||||
CONFIGURE_ENV= LLVM_CONFIG="${LOCALBASE}/llvm${LLVM_VERSION}/bin/llvm-config" \
|
||||
CLANGXX_FLAGS=-std=gnu++11
|
||||
#CONFIGURE_ARGS+= --enable-pedantic
|
||||
# needed for the libltdl configure check
|
||||
LDFLAGS+= -L${LOCALBASE}/lib
|
||||
|
||||
ALL_TARGET= all
|
||||
|
||||
OCL_ICD_VENDORS?= ${PREFIX}/etc/OpenCL/vendors
|
||||
|
||||
OPTIONS_DEFINE= DEBUG
|
||||
|
||||
OPTIONS_GROUP= TEST
|
||||
OPTIONS_GROUP_TEST= OCLBOOK
|
||||
|
||||
OCLBOOK_DESC= Tests from the OpenCL book
|
||||
DEBUG_DESC= Debug build of pocl
|
||||
|
||||
OCLBOOK_CONFIGURE_ENABLE= enable_testsuites="opencl-book-samples,cloverleaf,opencl_book_samples,halide,vexcl"
|
||||
OCLBOOK_ALL_TARGET= check
|
||||
|
||||
DEBUG_CONFIGURE_ENABLE= debug
|
||||
|
||||
do-test:
|
||||
cd ${WRKSRC} && ${GMAKE} check
|
||||
|
||||
.include <bsd.port.mk>
|
3
lang/pocl/distinfo
Normal file
3
lang/pocl/distinfo
Normal file
@ -0,0 +1,3 @@
|
||||
TIMESTAMP = 1479738879
|
||||
SHA256 (pocl-0.13.tar.gz) = a17f37d8f26819c0c8efc6de2b57f67a0c8a81514fc9cd5005434e49d67499f9
|
||||
SIZE (pocl-0.13.tar.gz) = 1901208
|
25
lang/pocl/files/patch-Makefile.in
Normal file
25
lang/pocl/files/patch-Makefile.in
Normal file
@ -0,0 +1,25 @@
|
||||
First part: this is false, this was due to a libtool bug, which is fixed now
|
||||
Second part: cmp --quiet is long for the -s option, use that since FreeBSD
|
||||
cmp doesn't have the long option.
|
||||
|
||||
--- Makefile.in.orig 2016-09-13 22:57:13.327123000 +0200
|
||||
+++ Makefile.in 2016-09-13 23:01:18.738696000 +0200
|
||||
@@ -116,8 +116,7 @@
|
||||
@POCL_ANDROID_FALSE@am__append_1 = scripts examples tests
|
||||
|
||||
#TODO: this naming scheme is used on other platforms (primarly BSDs?) too
|
||||
-@BUILD_ICD_TRUE@@FREEBSD_HOST_OS_TRUE@am__append_2 = -e 's,so.VER,so.$(LIB_CURRENT_VERSION),g'
|
||||
-@BUILD_ICD_TRUE@@FREEBSD_HOST_OS_FALSE@am__append_3 = -e 's,so.VER,so.$(LIB_FIRST_VERSION).$(LIB_AGE_VERSION).$(LIB_REVISION_VERSION),g'
|
||||
+@BUILD_ICD_TRUE@am__append_3 = -e 's,so.VER,so.$(LIB_FIRST_VERSION).$(LIB_AGE_VERSION).$(LIB_REVISION_VERSION),g'
|
||||
@BUILD_ICD_TRUE@am__append_4 = pocl.icd
|
||||
@BUILD_ICD_TRUE@am__append_5 = pocl.icd
|
||||
subdir = .
|
||||
@@ -1076,7 +1075,7 @@
|
||||
echo "#define PKGDATADIR \"${pkgdatadir}\"" > $@.new
|
||||
echo "#define PKGLIBEXECDIR \"${pkglibexecdir}\"" >> $@.new
|
||||
echo "#define PKGINCLUDEDIR \"${pkgincludedir}\"" >> $@.new
|
||||
- @if cmp --quiet $@.new $@ ; then \
|
||||
+ @if cmp -s $@.new $@ ; then \
|
||||
: "Paths not changed" ;\
|
||||
$(RM) $@.new ;\
|
||||
else \
|
90
lang/pocl/files/patch-lib_CL_devices_cpuinfo.c
Normal file
90
lang/pocl/files/patch-lib_CL_devices_cpuinfo.c
Normal file
@ -0,0 +1,90 @@
|
||||
--- lib/CL/devices/cpuinfo.c.orig 2016-11-20 11:31:19.521203000 +0100
|
||||
+++ lib/CL/devices/cpuinfo.c 2016-11-20 11:29:24.502817000 +0100
|
||||
@@ -31,9 +31,13 @@
|
||||
# include "vccompat.hpp"
|
||||
#endif
|
||||
|
||||
+#include <sys/types.h>
|
||||
+#include <sys/sysctl.h>
|
||||
+
|
||||
#include "config.h"
|
||||
#include "cpuinfo.h"
|
||||
|
||||
+#if 0
|
||||
const char* cpuinfo = "/proc/cpuinfo";
|
||||
#define MAX_CPUINFO_SIZE 64*1024
|
||||
//#define DEBUG_POCL_CPUINFO
|
||||
@@ -152,8 +156,29 @@ pocl_cpuinfo_detect_max_clock_frequency(
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
+#endif
|
||||
+
|
||||
+/**
|
||||
+ * Detects the number of parallel hardware threads supported by
|
||||
+ * the CPU.
|
||||
+ *
|
||||
+ * @return The number of hardware threads.
|
||||
+ */
|
||||
+ int
|
||||
+pocl_cpuinfo_detect_compute_unit_count()
|
||||
+{
|
||||
+ int mib[2], nocpus;
|
||||
+ size_t len;
|
||||
|
||||
+ mib[0] = CTL_HW;
|
||||
+ mib[1] = HW_NCPU;
|
||||
+ len = sizeof(nocpus);
|
||||
+ sysctl(mib, 2, &nocpus, &len, NULL, 0);
|
||||
|
||||
+ return nocpus;
|
||||
+}
|
||||
+
|
||||
+#if 0
|
||||
/**
|
||||
* Detects the number of parallel hardware threads supported by
|
||||
* the CPU by parsing the cpuinfo.
|
||||
@@ -231,6 +256,27 @@ pocl_cpuinfo_detect_compute_unit_count()
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
+#endif
|
||||
+
|
||||
+/**
|
||||
+ * Detects the maximum clock frequency of the CPU.
|
||||
+ *
|
||||
+ * Assumes all cores have the same max clock freq.
|
||||
+ *
|
||||
+ * @return The clock frequency in MHz.
|
||||
+ */
|
||||
+int
|
||||
+pocl_cpuinfo_detect_max_clock_frequency()
|
||||
+{
|
||||
+ //XXX PLEASE NOTE, THIS IS NOT TOO PORTABLE (AND/OR ACCURATE)!
|
||||
+ const char mib[] = "hw.clockrate";
|
||||
+ size_t size = sizeof(int);
|
||||
+ int clockrate;
|
||||
+
|
||||
+ sysctlbyname(mib, (void *)&clockrate, &size, NULL, 0);
|
||||
+
|
||||
+ return clockrate;
|
||||
+ }
|
||||
|
||||
#ifdef POCL_ANDROID
|
||||
|
||||
@@ -269,6 +315,7 @@ pocl_cpuinfo_get_cpu_name_and_vendor(cl_
|
||||
* short_name is in the .data anyways.*/
|
||||
device->long_name = device->short_name;
|
||||
|
||||
+#if 0
|
||||
/* default vendor and vendor_id, in case it cannot be found by other means */
|
||||
device->vendor = cpuvendor_default;
|
||||
if (device->vendor_id == 0)
|
||||
@@ -317,6 +364,7 @@ pocl_cpuinfo_get_cpu_name_and_vendor(cl_
|
||||
char *new_name = (char*)malloc (len);
|
||||
snprintf (new_name, len, "%s-%s", device->short_name, start);
|
||||
device->long_name = new_name;
|
||||
+#endif
|
||||
|
||||
}
|
||||
|
21
lang/pocl/files/patch-scripts_Makefile.in
Normal file
21
lang/pocl/files/patch-scripts_Makefile.in
Normal file
@ -0,0 +1,21 @@
|
||||
dirty hack, pocl-standalone will be installed into stage with
|
||||
r-xr-xr-x permissions. So writing to it is problemetic. give the file write
|
||||
permission and take it away after.
|
||||
|
||||
Upstream (pre 0.14) will be using cmake so this hack is only temporary.
|
||||
|
||||
--- scripts/Makefile.in.orig 2016-09-13 22:10:48.091956000 +0200
|
||||
+++ scripts/Makefile.in 2016-09-13 22:13:33.388168000 +0200
|
||||
@@ -651,10 +651,11 @@
|
||||
|
||||
install-exec-hook: $(bin_SCRIPTS)
|
||||
for f in $(bin_SCRIPTS) ; do \
|
||||
+ chmod +w "$(DESTDIR)$(bindir)/$$f" ; \
|
||||
sed -e '/^# BEGIN REMOVE ONCE INSTALLED$$/,/^# END REMOVE ONCE INSTALLED$$/d' \
|
||||
> "$(DESTDIR)$(bindir)/$$f" \
|
||||
< "$$f" && \
|
||||
- chmod +x "$(DESTDIR)$(bindir)/$$f" ; \
|
||||
+ chmod +x-w "$(DESTDIR)$(bindir)/$$f" ; \
|
||||
done
|
||||
|
||||
# Tell versions [3.59,3.63) of GNU make to not export all variables.
|
22
lang/pocl/pkg-descr
Normal file
22
lang/pocl/pkg-descr
Normal file
@ -0,0 +1,22 @@
|
||||
Portable OpenCL (pocl)
|
||||
----------------------
|
||||
|
||||
Portable OpenCL aims to be an efficient open source (MIT-licensed)
|
||||
implementation of the OpenCL 1.2 standard.
|
||||
|
||||
In addition to producing an easily portable open source OpenCL
|
||||
implementation, another major goal of the project is improving
|
||||
performance portability of OpenCL programs with compiler
|
||||
optimizations, reducing the need for target-dependent manual
|
||||
optimizations. At the core of pocl is a set of LLVM passes
|
||||
used to statically parallelize multiple work-items with the kernel
|
||||
compiler, even in the presence of work-group barriers. This enables
|
||||
parallelization of the fine-grained static concurrency in the work
|
||||
groups in multiple ways (SIMD, VLIW, superscalar,...).
|
||||
|
||||
The code base is modularized to allow easy adding of new "device drivers"
|
||||
in the host-device layer. A generic multithreaded "target driver" is
|
||||
included. It allows running OpenCL applications on a host that supports
|
||||
the pthread library with multithreading at the work group granularity.
|
||||
|
||||
WWW: http://portablecl.org/
|
12
lang/pocl/pkg-message
Normal file
12
lang/pocl/pkg-message
Normal file
@ -0,0 +1,12 @@
|
||||
|
||||
Deadlocks (freezes) on FreeBSD:
|
||||
|
||||
OpenCL applications using pocl on FreeBSD must be compiled with
|
||||
options CFLAGS+=-pthread or CXXFLAGS+=-pthread, otherwise someone risk
|
||||
that a library may not initialize the threading on BSD independently,
|
||||
even if an ICD loader is used.
|
||||
|
||||
See:
|
||||
http://www.freebsd.org/cgi/query-pr.cgi?pr=163512
|
||||
|
||||
(Source: http://portablecl.org/docs/html/faq.html?highlight=freebsd)
|
27
lang/pocl/pkg-plist
Normal file
27
lang/pocl/pkg-plist
Normal file
@ -0,0 +1,27 @@
|
||||
bin/pocl-standalone
|
||||
etc/OpenCL/vendors/pocl.icd
|
||||
include/poclu.h
|
||||
lib/libpocl.a
|
||||
lib/libpocl.la
|
||||
lib/libpocl.so
|
||||
lib/libpocl.so.1
|
||||
lib/libpocl.so.1.6.0
|
||||
lib/libpoclu.a
|
||||
lib/libpoclu.la
|
||||
lib/libpoclu.so
|
||||
lib/libpoclu.so.1
|
||||
lib/libpoclu.so.1.6.0
|
||||
lib/pocl/llvmopencl.a
|
||||
lib/pocl/llvmopencl.la
|
||||
lib/pocl/llvmopencl.so
|
||||
lib/pocl/llvmopencl.so.7
|
||||
lib/pocl/llvmopencl.so.7.0.0
|
||||
libdata/pkgconfig/pocl.pc
|
||||
%%DATADIR%%/include/_kernel.h
|
||||
%%DATADIR%%/include/_kernel_c.h
|
||||
%%DATADIR%%/include/_kernel_constants.h
|
||||
%%DATADIR%%/include/pocl.h
|
||||
%%DATADIR%%/include/pocl_device.h
|
||||
%%DATADIR%%/include/pocl_tests.h
|
||||
%%DATADIR%%/include/pocl_types.h
|
||||
%%DATADIR%%/kernel-amd64-portbld-freebsd%%OSREL%%.bc
|
Loading…
Reference in New Issue
Block a user