Date: Mon, 12 Aug 2013 20:37:02 GMT From: "O. Hartmann" <ohartman@zedat.fu-berlin.de> To: freebsd-gnats-submit@FreeBSD.org Subject: ports/181243: New port: devel/opencl-icd Khronos OpenCL Installable Client Driver Message-ID: <201308122037.r7CKb2Nh055815@oldred.freebsd.org> Resent-Message-ID: <201308122040.r7CKe0RC000556@freefall.freebsd.org>
next in thread | raw e-mail | index | archive | help
>Number: 181243 >Category: ports >Synopsis: New port: devel/opencl-icd Khronos OpenCL Installable Client Driver >Confidential: no >Severity: non-critical >Priority: low >Responsible: freebsd-ports-bugs >State: open >Quarter: >Keywords: >Date-Required: >Class: change-request >Submitter-Id: current-users >Arrival-Date: Mon Aug 12 20:40:00 UTC 2013 >Closed-Date: >Last-Modified: >Originator: O. Hartmann >Release: >Organization: FU Berlin >Environment: >Description: This port provides the Khronos OpenCL Installable Client Driver, which acts as a proxy for different OpenCL platforms. This software has been extracted from the POCL project and can be choosen as the ICD for devel/pocl. >How-To-Repeat: >Fix: Patch attached with submission follows: # This is a shell archive. Save it in a file, remove anything before # this line, and then unpack it by entering "sh file". Note, it may # create directories; files and directories will be owned by you and # have default permissions. # # This archive contains: # # ./opencl-icd # ./opencl-icd/files # ./opencl-icd/files/patch-test-loader_test-icd_test_match.c # ./opencl-icd/files/patch-CMakeLists.txt # ./opencl-icd/files/patch-icd_linux.c # ./opencl-icd/pkg-plist # ./opencl-icd/Makefile # ./opencl-icd/distinfo # ./opencl-icd/pkg-descr # ./opencl-icd/pkg-message # echo c - ./opencl-icd mkdir -p ./opencl-icd > /dev/null 2>&1 echo c - ./opencl-icd/files mkdir -p ./opencl-icd/files > /dev/null 2>&1 echo x - ./opencl-icd/files/patch-test-loader_test-icd_test_match.c sed 's/^X//' >./opencl-icd/files/patch-test-loader_test-icd_test_match.c << '352a0fcd228fea1bcd4e5b0d7d7658d3' X--- test/loader_test/icd_test_match.c.orig 2013-05-26 11:03:02.000000000 +0200 X+++ test/loader_test/icd_test_match.c 2013-05-26 11:03:44.000000000 +0200 X@@ -1,6 +1,10 @@ X #include <stdio.h> X #include <string.h> X+#ifdef __FreeBSD__ X+#include <stdlib.h> X+#else X #include <malloc.h> X+#endif X #include <platform/icd_test_log.h> X X int test_icd_match() 352a0fcd228fea1bcd4e5b0d7d7658d3 echo x - ./opencl-icd/files/patch-CMakeLists.txt sed 's/^X//' >./opencl-icd/files/patch-CMakeLists.txt << 'f7e660cc75d5fc09c5036c8c1c577569' X--- CMakeLists.txt.orig 2012-08-27 16:44:45.000000000 +0200 X+++ CMakeLists.txt 2013-05-26 11:01:21.000000000 +0200 X@@ -9,6 +9,8 @@ X X if ("${CMAKE_SYSTEM_NAME}" STREQUAL "Linux") X list (APPEND OPENCL_ICD_LOADER_SOURCES icd_linux.c icd_exports.map) X+elseif ("${CMAKE_SYSTEM_NAME}" STREQUAL "FreeBSD") X+ list (APPEND OPENCL_ICD_LOADER_SOURCES icd_linux.c icd_exports.map) X else () X list (APPEND OPENCL_ICD_LOADER_SOURCES icd_windows.c OpenCL.def) X include_directories ($ENV{DXSDK_DIR}/Include) X@@ -23,6 +25,8 @@ X X if ("${CMAKE_SYSTEM_NAME}" STREQUAL "Linux") X set_target_properties (OpenCL PROPERTIES LINK_FLAGS "-Wl,--version-script -Wl,../icd_exports.map") X+elseif ("${CMAKE_SYSTEM_NAME}" STREQUAL "FreeBSD") X+ set_target_properties (OpenCL PROPERTIES LINK_FLAGS "-Wl,--version-script -Wl,./icd_exports.map") X endif () X X target_link_libraries (OpenCL ${CMAKE_DL_LIBS}) f7e660cc75d5fc09c5036c8c1c577569 echo x - ./opencl-icd/files/patch-icd_linux.c sed 's/^X//' >./opencl-icd/files/patch-icd_linux.c << 'dcdf3f2fc208cba8674164215ba45f59' X--- icd_linux.c.orig 2012-08-06 08:53:39.000000000 +0200 X+++ icd_linux.c 2013-05-28 23:15:43.116526383 +0200 X@@ -52,12 +52,22 @@ X * X */ X X+#ifdef __FreeBSD__ X+#define ETC_ICD_VENDORS "%%PREFIX%%/etc/OpenCL/vendors" X+#else X+#define ETC_ICD_VENDORS "/etc/OpenCL/vendors" X+#endif X+ X // go through the list of vendors in the two configuration files X void khrIcdOsVendorsEnumerate(void) X { X DIR *dir = NULL; X struct dirent *dirEntry = NULL; X- char *vendorPath = "/etc/OpenCL/vendors/"; X+ char *vendorPath = getenv("OCL_ICD_VENDORS"); X+ if (vendorPath == NULL || strncmp(vendorPath, "", 1) == 0) X+ { X+ vendorPath = ETC_ICD_VENDORS; X+ } X X // open the directory X dir = opendir(vendorPath); X@@ -85,21 +95,21 @@ X // make sure the file name ends in .icd X if (strlen(extension) > strlen(dirEntry->d_name) ) X { X- break; X+ continue; X } X if (strcmp(dirEntry->d_name + strlen(dirEntry->d_name) - strlen(extension), extension) ) X { X- break; X+ continue; X } X X // allocate space for the full path of the vendor library name X- fileName = malloc(strlen(dirEntry->d_name) + strlen(vendorPath) + 1); X+ fileName = malloc(strlen(dirEntry->d_name) + strlen(vendorPath) + 2); X if (!fileName) X { X KHR_ICD_TRACE("Failed allocate space for ICD file path\n"); X break; X } X- sprintf(fileName, "%s%s", vendorPath, dirEntry->d_name); X+ sprintf(fileName, "%s/%s", vendorPath, dirEntry->d_name); X X // open the file and read its contents X fin = fopen(fileName, "r"); dcdf3f2fc208cba8674164215ba45f59 echo x - ./opencl-icd/pkg-plist sed 's/^X//' >./opencl-icd/pkg-plist << 'f03fb7fc7ab667c57943586b50f969e4' Xlib/libIcdLog.so Xlib/libOpenCL.so Xlib/libOpenCL.so.1 Xlib/libOpenCLDriverStub.so f03fb7fc7ab667c57943586b50f969e4 echo x - ./opencl-icd/Makefile sed 's/^X//' >./opencl-icd/Makefile << '5286b374cbf28348a9e2de6403dfd3f6' XPORTNAME= opencl-icd XPORTVERSION= 1.2.11.0 XCATEGORIES= devel X XSUFFIX= so X XMAINTAINER= ohartman@zedat.fu-berlin.de XCOMMENT= Khronos OpenCL Installable Client Driver X XMASTER_SITES= http://www.khronos.org/registry/cl/specs/ XEXTRACT_SUFX= .tgz X XWRKSRC= ${WRKDIR}/icd X XCONFLICTS= freeocl* ocl-icd* X XCFLAGS+= -I${LOCALBASE}/include XLDFLAGS+= -L${LOCALBASE}/lib X XBUILD_DEPENDS+= ${LOCALBASE}/include/CL/cl.h:${PORTSDIR}/devel/opencl X XUSES= cmake XUSE_LDCONFIG= yes XCMAKE_BUILD_TYPE= Release X XLIBFILES= libIcdLog.so libOpenCLDriverStub.so libOpenCL.so.1 libOpenCL.so X Xpost-configure: X ${REINPLACE_CMD} -e 's:%%PREFIX%%:${PREFIX}:g' ${WRKSRC}/icd_linux.c X Xdo-install: X.for f in ${LIBFILES} X ${INSTALL_LIB} ${WRKSRC}/bin/$f ${PREFIX}/lib/$f X.endfor X X.include <bsd.port.mk> 5286b374cbf28348a9e2de6403dfd3f6 echo x - ./opencl-icd/distinfo sed 's/^X//' >./opencl-icd/distinfo << '1cf4e8e5b066e7c454bccc55aa53d2cd' XSHA256 (opencl-icd-1.2.11.0.tgz) = bb82a4bfec8d2fe3839c1f079554990af2229bbd52f31acec31d0c4e11e99048 XSIZE (opencl-icd-1.2.11.0.tgz) = 51373 1cf4e8e5b066e7c454bccc55aa53d2cd echo x - ./opencl-icd/pkg-descr sed 's/^X//' >./opencl-icd/pkg-descr << '11118c6d8165a7e309dd26718d5712d9' XOpenCL 1.2 Installable Client Driver (ICD) Loader. X XThe related cl_khr_icd extension allows multiple Ximplementations of OpenCL to co-exist on the same Xsystem. The ICD Loader allows applications to Xchoose a platform from the list of installed Xplatforms and dispatches OpenCL API calls to the Xunderlying implementation. Consult LICENSE.txt in Xthe tarball for full terms and conditions. X XSee X Xhttp://www.khronos.org/registry/cl/ 11118c6d8165a7e309dd26718d5712d9 echo x - ./opencl-icd/pkg-message sed 's/^X//' >./opencl-icd/pkg-message << '78308e6168a395897395246408c0cdad' XYou have to set the global variable X XOCL_ICD_VENDORS X Xto point to the directory where the multiple Xplatform ICD config files are stored, for FreeBSD Xby default X Xcsh/tcsh: X Xsetenv OCL_ICD_VENDORS /usr/local/etc/OpenCL/vendors X Xsh/ksh/bash: X Xexport OCL_ICD_VENDORS=/usr/local/etc/OpenCL/vendors 78308e6168a395897395246408c0cdad exit >Release-Note: >Audit-Trail: >Unformatted:
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201308122037.r7CKb2Nh055815>