From 7becffc2143d651df098cf8b1a3488d107bcae65 Mon Sep 17 00:00:00 2001 From: Ismo Puustinen Date: Wed, 15 Feb 2017 08:07:10 +0200 Subject: [PATCH 01/14] meta-clang: add new layer. Add meta-clang (krogoth branch). Signed-off-by: Ismo Puustinen --- .gitmodules | 4 ++++ meta-clang | 1 + meta-refkit/conf/bblayers.conf.sample | 3 ++- meta-refkit/conf/distro/include/refkit_security_flags.inc | 1 + meta-refkit/conf/layer.conf | 2 +- 5 files changed, 9 insertions(+), 2 deletions(-) create mode 160000 meta-clang diff --git a/.gitmodules b/.gitmodules index 51292c526a..90d89e9f48 100644 --- a/.gitmodules +++ b/.gitmodules @@ -28,3 +28,7 @@ [submodule "meta-intel-realsense"] path = meta-intel-realsense url = https://github.com/IntelRealSense/meta-intel-realsense.git +[submodule "meta-clang"] + path = meta-clang + url = https://github.com/kraj/meta-clang.git + branch = krogoth diff --git a/meta-clang b/meta-clang new file mode 160000 index 0000000000..dc1d9d550a --- /dev/null +++ b/meta-clang @@ -0,0 +1 @@ +Subproject commit dc1d9d550a5d33d76a3bc6162739edccbd8bf012 diff --git a/meta-refkit/conf/bblayers.conf.sample b/meta-refkit/conf/bblayers.conf.sample index e4c01a1c98..7f29b131ae 100644 --- a/meta-refkit/conf/bblayers.conf.sample +++ b/meta-refkit/conf/bblayers.conf.sample @@ -1,6 +1,6 @@ # LAYER_CONF_VERSION is increased each time build/conf/bblayers.conf # changes incompatibly -LCONF_VERSION = "1" +LCONF_VERSION = "2" BBPATH = "${TOPDIR}" BBFILES ?= "" @@ -15,6 +15,7 @@ REFKIT_LAYERS = " \ ##OEROOT##/../meta-iotqa \ ##OEROOT##/../meta-security-isafw \ ##OEROOT##/../meta-intel-realsense \ + ##OEROOT##/../meta-clang \ " # REFKIT_LAYERS += "##OEROOT##/../meta-openembedded/meta-efl" diff --git a/meta-refkit/conf/distro/include/refkit_security_flags.inc b/meta-refkit/conf/distro/include/refkit_security_flags.inc index 35c4dd23e7..ae73c0c2ba 100644 --- a/meta-refkit/conf/distro/include/refkit_security_flags.inc +++ b/meta-refkit/conf/distro/include/refkit_security_flags.inc @@ -14,6 +14,7 @@ SECURITY_CFLAGS_pn-krb5 = "${SECURITY_NO_PIE_CFLAGS} ${SECURITY_PIC_CFLAGS}" SECURITY_CFLAGS_pn-tbb = "${SECURITY_NO_PIE_CFLAGS} ${SECURITY_PIC_CFLAGS}" SECURITY_CFLAGS_pn-protobuf = "${SECURITY_NO_PIE_CFLAGS} ${SECURITY_PIC_CFLAGS}" SECURITY_CFLAGS_pn-glog = "${SECURITY_NO_PIE_CFLAGS} ${SECURITY_PIC_CFLAGS}" +SECURITY_CFLAGS_pn-clang = "${SECURITY_NO_PIE_CFLAGS} ${SECURITY_PIC_CFLAGS}" # openjdk-8 ends up linking with "-shared -pie -fpie" in some cases (see # hotspot/make/linux/makefiles/saproc.make) which then tries (and fails) to diff --git a/meta-refkit/conf/layer.conf b/meta-refkit/conf/layer.conf index 1f092d70a5..0563ce1f92 100644 --- a/meta-refkit/conf/layer.conf +++ b/meta-refkit/conf/layer.conf @@ -39,7 +39,7 @@ REFKIT_LOCALCONF_VERSION = "2" LOCALCONF_VERSION = "${REFKIT_LOCALCONF_VERSION}" # Same for LCONF_VERSION in bblayer.conf.sample. -REFKIT_LAYER_CONF_VERSION = "1" +REFKIT_LAYER_CONF_VERSION = "2" LAYER_CONF_VERSION = "${REFKIT_LAYER_CONF_VERSION}" # The default error messages use shell meta* wildcards to find the From cc68214c0dbdfab8f5fa4579117391d1ebea881c Mon Sep 17 00:00:00 2001 From: Ismo Puustinen Date: Wed, 15 Feb 2017 18:15:34 +0200 Subject: [PATCH 02/14] clang: fix toolchain. Make the correct gcc toolchain available for clang. This is backported from meta-clang master. Signed-off-by: Ismo Puustinen --- .../recipes-devtools/clang/clang_%.bbappend | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 meta-refkit/recipes-devtools/clang/clang_%.bbappend diff --git a/meta-refkit/recipes-devtools/clang/clang_%.bbappend b/meta-refkit/recipes-devtools/clang/clang_%.bbappend new file mode 100644 index 0000000000..feb83cf90b --- /dev/null +++ b/meta-refkit/recipes-devtools/clang/clang_%.bbappend @@ -0,0 +1,17 @@ +# From meta-clang (cb30aad4d6ff5e996f7a8c5837591071243dcd2c): +# +# Author: Mikko Ylinen +# Date: Mon Feb 13 18:06:00 2017 +0200 +# +# clang: set target DEPENDS for gcc TOOLCHAIN +# +# With the layer defaults (TOOLCHAIN ??= gcc) clang for target fails +# to build due to missing compilers in the native (recipe specific) +# sysroot. +# +# Set the necessary additional DEPENDS if TOOLCHAIN = gcc to get the +# compilers installed. +# +# Signed-off-by: Mikko Ylinen + +DEPENDS_append_class-target = " clang-cross-${TARGET_ARCH} ${@bb.utils.contains('TOOLCHAIN', 'gcc', 'virtual/${TARGET_PREFIX}gcc virtual/${TARGET_PREFIX}g++', '', d)}" From 11cdcead3f23bc07e2eaffcb0525892e291aad03 Mon Sep 17 00:00:00 2001 From: Ismo Puustinen Date: Wed, 15 Feb 2017 08:11:29 +0200 Subject: [PATCH 03/14] meta-refkit: import recipes-opencl from Ostro XT. Use the recipes-opencl from Ostro XT in unmodified form. Signed-off-by: Ismo Puustinen --- ...in_generater-to-compile-built-in-ker.patch | 27 ++++ .../0001-reduced-native-for-1.2.1.patch | 140 ++++++++++++++++++ .../beignet/beignet/fix-llvm-paths.patch | 37 +++++ .../recipes-opencl/beignet/beignet_git.bb | 67 +++++++++ .../recipes-opencl/ocl-icd/ocl-icd_2.2.9.bb | 12 ++ .../opencl-headers-cxx_1.2.bb | 24 +++ .../opencl-headers/opencl-headers_1.2.bb | 16 ++ .../packagegroups/packagegroup-opencl.bb | 9 ++ 8 files changed, 332 insertions(+) create mode 100644 meta-refkit/recipes-opencl/beignet/beignet/0001-Run-native-gbe_bin_generater-to-compile-built-in-ker.patch create mode 100644 meta-refkit/recipes-opencl/beignet/beignet/0001-reduced-native-for-1.2.1.patch create mode 100644 meta-refkit/recipes-opencl/beignet/beignet/fix-llvm-paths.patch create mode 100644 meta-refkit/recipes-opencl/beignet/beignet_git.bb create mode 100644 meta-refkit/recipes-opencl/ocl-icd/ocl-icd_2.2.9.bb create mode 100644 meta-refkit/recipes-opencl/opencl-headers-cxx/opencl-headers-cxx_1.2.bb create mode 100644 meta-refkit/recipes-opencl/opencl-headers/opencl-headers_1.2.bb create mode 100644 meta-refkit/recipes-opencl/packagegroups/packagegroup-opencl.bb diff --git a/meta-refkit/recipes-opencl/beignet/beignet/0001-Run-native-gbe_bin_generater-to-compile-built-in-ker.patch b/meta-refkit/recipes-opencl/beignet/beignet/0001-Run-native-gbe_bin_generater-to-compile-built-in-ker.patch new file mode 100644 index 0000000000..abc1c6f54a --- /dev/null +++ b/meta-refkit/recipes-opencl/beignet/beignet/0001-Run-native-gbe_bin_generater-to-compile-built-in-ker.patch @@ -0,0 +1,27 @@ +From ea825ebc2ec47db4d3e794fef85de698c0f955a2 Mon Sep 17 00:00:00 2001 +From: Dmitry Rozhkov +Date: Tue, 14 Jun 2016 12:33:40 +0300 +Subject: [PATCH] Run native gbe_bin_generater to compile built-in kernels + +Upstream-Status: Inappropriate [libgbe.so isn't supposed to be cross-compiled] + +Signed-off-by: Dmitry Rozhkov +--- + backend/CMakeLists.txt | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/backend/CMakeLists.txt b/backend/CMakeLists.txt +index 915d60f..c3041bc 100644 +--- a/backend/CMakeLists.txt ++++ b/backend/CMakeLists.txt +@@ -58,6 +58,6 @@ set (GBE_BIN_GENERATER + PARENT_SCOPE) + else (USE_STANDALONE_GBE_COMPILER STREQUAL "true") + set (GBE_BIN_GENERATER +- ${GBE_BIN_GENERATER} LD_LIBRARY_PATH=${CMAKE_CURRENT_BINARY_DIR}/src ${CMAKE_CURRENT_BINARY_DIR}/src/gbe_bin_generater ++ ${GBE_BIN_GENERATER} ${STANDALONE_GBE_COMPILER_DIR}/gbe_bin_generater + PARENT_SCOPE) + endif (USE_STANDALONE_GBE_COMPILER STREQUAL "true") +-- +2.5.5 + diff --git a/meta-refkit/recipes-opencl/beignet/beignet/0001-reduced-native-for-1.2.1.patch b/meta-refkit/recipes-opencl/beignet/beignet/0001-reduced-native-for-1.2.1.patch new file mode 100644 index 0000000000..0d6fd80633 --- /dev/null +++ b/meta-refkit/recipes-opencl/beignet/beignet/0001-reduced-native-for-1.2.1.patch @@ -0,0 +1,140 @@ +From d956e942bdf4a9a0eeb7fef7e416d9fb97dc4232 Mon Sep 17 00:00:00 2001 +From: Tuomas Katila +Date: Wed, 9 Nov 2016 11:16:40 +0200 +Subject: [PATCH] reduced native for 1.2.1 + +Signed-off-by: Tuomas Katila +--- + CMakeLists.txt | 104 --------------------------------------------------------- + 1 file changed, 104 deletions(-) + +diff --git a/CMakeLists.txt b/CMakeLists.txt +index bac054c..6c8412c 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -121,108 +121,11 @@ ELSE(X11_FOUND) + MESSAGE(STATUS "Looking for XLib - not found") + ENDIF(X11_FOUND) + +-# DRM +-pkg_check_modules(DRM REQUIRED libdrm) +-IF(DRM_FOUND) +- MESSAGE(STATUS "Looking for DRM - found at ${DRM_PREFIX} ${DRM_VERSION}") +- INCLUDE_DIRECTORIES(${DRM_INCLUDE_DIRS}) +-ELSE(DRM_FOUND) +- MESSAGE(STATUS "Looking for DRM - not found") +-ENDIF(DRM_FOUND) +- + include(CheckLibraryExists) +-# DRM Intel +-pkg_check_modules(DRM_INTEL libdrm_intel>=2.4.52) +-IF(DRM_INTEL_FOUND) +- INCLUDE_DIRECTORIES(${DRM_INTEL_INCLUDE_DIRS}) +- MESSAGE(STATUS "Looking for DRM Intel - found at ${DRM_INTEL_PREFIX} ${DRM_INTEL_VERSION}") +- CHECK_LIBRARY_EXISTS(drm_intel "drm_intel_bo_alloc_userptr" ${DRM_INTEL_LIBDIR} HAVE_DRM_INTEL_USERPTR) +- IF(HAVE_DRM_INTEL_USERPTR) +- MESSAGE(STATUS "Enable userptr support") +- ELSE(HAVE_DRM_INTEL_USERPTR) +- MESSAGE(STATUS "Disable userptr support") +- ENDIF(HAVE_DRM_INTEL_USERPTR) +- CHECK_LIBRARY_EXISTS(drm_intel "drm_intel_get_eu_total" ${DRM_INTEL_LIBDIR} HAVE_DRM_INTEL_EU_TOTAL) +- IF(HAVE_DRM_INTEL_EU_TOTAL) +- MESSAGE(STATUS "Enable EU total query support") +- ELSE(HAVE_DRM_INTEL_EU_TOTAL) +- MESSAGE(STATUS "Disable EU total query support") +- ENDIF(HAVE_DRM_INTEL_EU_TOTAL) +- CHECK_LIBRARY_EXISTS(drm_intel "drm_intel_get_subslice_total" ${DRM_INTEL_LIBDIR} HAVE_DRM_INTEL_SUBSLICE_TOTAL) +- IF(HAVE_DRM_INTEL_SUBSLICE_TOTAL) +- MESSAGE(STATUS "Enable subslice total query support") +- ELSE(HAVE_DRM_INTEL_SUBSLICE_TOTAL) +- MESSAGE(STATUS "Disable subslice total query support") +- ENDIF(HAVE_DRM_INTEL_SUBSLICE_TOTAL) +- CHECK_LIBRARY_EXISTS(drm_intel "drm_intel_get_pooled_eu" "" HAVE_DRM_INTEL_POOLED_EU) +- IF(HAVE_DRM_INTEL_POOLED_EU) +- MESSAGE(STATUS "Enable pooled eu query support") +- ELSE(HAVE_DRM_INTEL_POOLED_EU) +- MESSAGE(STATUS "Disable pooled eu query support") +- ENDIF(HAVE_DRM_INTEL_POOLED_EU) +- CHECK_LIBRARY_EXISTS(drm_intel "drm_intel_get_min_eu_in_pool" "" HAVE_DRM_INTEL_MIN_EU_IN_POOL) +- IF(HAVE_DRM_INTEL_MIN_EU_IN_POOL) +- MESSAGE(STATUS "Enable min eu in pool query support") +- ELSE(HAVE_DRM_INTEL_MIN_EU_IN_POOL) +- MESSAGE(STATUS "Disable min eu in pool query support") +- ENDIF(HAVE_DRM_INTEL_MIN_EU_IN_POOL) +-ELSE(DRM_INTEL_FOUND) +- MESSAGE(FATAL_ERROR "Looking for DRM Intel (>= 2.4.52) - not found") +-ENDIF(DRM_INTEL_FOUND) +- +-# CMRT +-pkg_check_modules(CMRT libcmrt) +-IF(CMRT_FOUND) +-INCLUDE_DIRECTORIES(${CMRT_INCLUDE_DIRS}) +-ENDIF(CMRT_FOUND) + + # Threads + Find_Package(Threads) + +-IF(X11_FOUND) +-# OpenGL (not use cmake helper) +-pkg_check_modules(OPENGL gl) +-IF(OPENGL_FOUND) +- INCLUDE_DIRECTORIES(${OPENGL_INCLUDE_DIRS}) +- MESSAGE(STATUS "Looking for OpenGL - found at ${OPENGL_PREFIX}") +-ELSE(OPENGL_FOUND) +- MESSAGE(STATUS "Looking for OpenGL - not found") +-ENDIF(OPENGL_FOUND) +- +-# Xext +-pkg_check_modules(XEXT REQUIRED xext) +-IF(XEXT_FOUND) +- INCLUDE_DIRECTORIES(${XEXT_INCLUDE_DIRS}) +- MESSAGE(STATUS "Looking for Xext - found at ${XEXT_PREFIX}") +-ELSE(XEXT_FOUND) +- MESSAGE(STATUS "Looking for Xext - not found") +-ENDIF(XEXT_FOUND) +- +-# Xfixes +-pkg_check_modules(XFIXES REQUIRED xfixes) +-IF(XFIXES_FOUND) +- INCLUDE_DIRECTORIES(${XFIXES_INCLUDE_DIRS}) +- MESSAGE(STATUS "Looking for Xfixes - found at ${XFIXES_PREFIX}") +-ELSE(XFIXES_FOUND) +- MESSAGE(STATUS "Looking for Xfixes - not found") +-ENDIF(XFIXES_FOUND) +-ENDIF(X11_FOUND) +- +-pkg_check_modules(EGL egl) +-IF(EGL_FOUND) +- MESSAGE(STATUS "Looking for EGL - found at ${EGL_PREFIX}") +-ELSE(EGL_FOUND) +- MESSAGE(STATUS "Looking for EGL - not found") +-ENDIF(EGL_FOUND) +- +-# cl_khr_gl_sharing requires to build with mesa source +-#Find_Package(MesaSrc) +-#IF(MESA_SOURCE_FOUND) +-# MESSAGE(STATUS "Looking for mesa source code - found at ${MESA_SOURCE_PREFIX}") +-#ELSE(MESA_SOURCE_FOUND) +-# MESSAGE(STATUS "Looking for mesa source code - not found, cl_khr_gl_sharing will be disabled.") +-#ENDIF(MESA_SOURCE_FOUND) +- + Find_Package(OCLIcd) + IF(OCLIcd_FOUND) + MESSAGE(STATUS "Looking for OCL ICD header file - found") +@@ -276,13 +179,6 @@ ENDIF(BUILD_EXAMPLES) + + ADD_SUBDIRECTORY(include) + ADD_SUBDIRECTORY(backend) +-ADD_SUBDIRECTORY(src) +-ADD_SUBDIRECTORY(utests EXCLUDE_FROM_ALL) +- +-# compile benchmark only if standalone compiler is not provided +-IF (NOT (USE_STANDALONE_GBE_COMPILER STREQUAL "true")) +- ADD_SUBDIRECTORY(benchmark EXCLUDE_FROM_ALL) +-ENDIF (NOT (USE_STANDALONE_GBE_COMPILER STREQUAL "true")) + + IF(BUILD_EXAMPLES) + ADD_SUBDIRECTORY(examples) +-- +2.9.2 + diff --git a/meta-refkit/recipes-opencl/beignet/beignet/fix-llvm-paths.patch b/meta-refkit/recipes-opencl/beignet/beignet/fix-llvm-paths.patch new file mode 100644 index 0000000000..2966b14ed4 --- /dev/null +++ b/meta-refkit/recipes-opencl/beignet/beignet/fix-llvm-paths.patch @@ -0,0 +1,37 @@ +diff --git a/CMake/FindLLVM.cmake b/CMake/FindLLVM.cmake +index 32579f8..df78ec7 100644 +--- a/CMake/FindLLVM.cmake ++++ b/CMake/FindLLVM.cmake +@@ -70,12 +70,6 @@ execute_process( + ) + + execute_process( +- COMMAND ${LLVM_CONFIG_EXECUTABLE} --libdir +- OUTPUT_VARIABLE LLVM_LIBRARY_DIR +- OUTPUT_STRIP_TRAILING_WHITESPACE +-) +- +-execute_process( + COMMAND ${LLVM_CONFIG_EXECUTABLE} --cppflags + OUTPUT_VARIABLE LLVM_CFLAGS + OUTPUT_STRIP_TRAILING_WHITESPACE +@@ -104,12 +98,14 @@ string(REGEX REPLACE " *\n" "" LLVM_SYSTEM_LIBS ${LLVM_SYSTEM_LIBS_ORIG}) + endif (LLVM_SYSTEM_LIBS_ORIG) + endif (LLVM_VERSION_NODOT VERSION_GREATER 34) + ++set(LLVM_LDFLAGS "") ++string(REGEX REPLACE "-lLLVMAArch64[^ ]* " "" LLVM_MODULE_LIBS "${LLVM_MODULE_LIBS}") ++string(REGEX REPLACE "-lLLVMARM[^ ]* " "" LLVM_MODULE_LIBS "${LLVM_MODULE_LIBS}") ++string(REGEX REPLACE "-lLLVMMips[^ ]* " "" LLVM_MODULE_LIBS "${LLVM_MODULE_LIBS}") ++string(REGEX REPLACE "-lLLVMPowerPC[^ ]*" "" LLVM_MODULE_LIBS "${LLVM_MODULE_LIBS}") ++ + macro(add_one_lib name) +- FIND_LIBRARY(CLANG_LIB +- NAMES ${name} +- PATHS ${LLVM_LIBRARY_DIR} NO_DEFAULT_PATH) +- set(CLANG_LIBRARIES ${CLANG_LIBRARIES} ${CLANG_LIB}) +- unset(CLANG_LIB CACHE) ++ set(CLANG_LIBRARIES ${CLANG_LIBRARIES} "${LLVM_LIBRARY_DIR}/lib${name}.a") + endmacro() + + #Assume clang lib path same as llvm lib path diff --git a/meta-refkit/recipes-opencl/beignet/beignet_git.bb b/meta-refkit/recipes-opencl/beignet/beignet_git.bb new file mode 100644 index 0000000000..d99bd5c0e8 --- /dev/null +++ b/meta-refkit/recipes-opencl/beignet/beignet_git.bb @@ -0,0 +1,67 @@ +LICENSE = "LGPLv2.1+" +LIC_FILES_CHKSUM = "file://COPYING;md5=6b566c5b4da35d474758324899cb4562" + +SRC_URI = "git://anongit.freedesktop.org/beignet;nobranch=1 \ + file://fix-llvm-paths.patch \ + " +SRC_URI_append_class-native = " file://0001-reduced-native-for-1.2.1.patch" +SRC_URI_append_class-target = " file://0001-Run-native-gbe_bin_generater-to-compile-built-in-ker.patch" + +BBCLASSEXTEND = "native" + +# CMake cannot digest "+" in pathes -> replace it with dots. +PV = "1.2.1.${@ 'git${SRCPV}'.replace('+', '.')}" +SRCREV = "097365ed1a79cd03dc689b37b03552e455eb3854" +S = "${WORKDIR}/git" + +PROVIDES += "virtual/opencl-headers virtual/opencl-headers-cxx" + +DEPENDS = "beignet-native clang libdrm mesa" +DEPENDS_class-native = "clang-native" + +# built-in kernels depend on libocl's headers (e.g. ocl_as.h) yet there is no +# dependency specified for that in beignet's build system. This causes race +# condition when libgbe.so is compiled for the target. +PARALLEL_MAKE = "" + +inherit cmake pkgconfig + +# There is no python in sysroot -> look for it on the build host. +# WARNING: remove CLang from the host otherwise it might get into use +# instead of the one from meta-clang. +OECMAKE_FIND_ROOT_PATH_MODE_PROGRAM = "BOTH" + +EXTRA_OECMAKE = " -DSTANDALONE_GBE_COMPILER_DIR=${STAGING_BINDIR_NATIVE} -DLLVM_LIBRARY_DIR=${STAGING_LIBDIR} -DGEN_PCI_ID=0x1A84" +EXTRA_OECMAKE_class-native = " -DBEIGNET_INSTALL_DIR=/usr/lib/beignet -DLLVM_LIBRARY_DIR=${STAGING_LIBDIR_NATIVE}" + +# TODO respect distrofeatures for x11 +PACKAGECONFIG ??= "" +PACKAGECONFIG[examples] = '-DBUILD_EXAMPLES=1,-DBUILD_EXAMPLES=0,libva' +# TODO: add explicit on/off upstream +PACKAGECONFIG[x11] = ",,libxext libxfixes" + +FILES_${PN} += " \ + ${sysconfdir}/OpenCL/vendors/intel-beignet.icd \ + ${libdir} \ + ${libdir}/beignet/ \ + ${libdir}/beignet/* \ + " + +do_install_append () { + # Create intel-beignet.icd file + mkdir -p ${D}${sysconfdir}/OpenCL/vendors/ + echo ${libdir}/beignet/libcl.so > ${D}${sysconfdir}/OpenCL/vendors/intel-beignet.icd +} + +do_install_class-native() { + install -d ${D}${libdir}/cmake + install -m644 ${S}/CMake/FindStandaloneGbeCompiler.cmake ${D}${libdir}/cmake + + install -d ${D}${bindir} + install ${B}/backend/src/gbe_bin_generater ${D}${bindir} + install ${B}/backend/src/libgbe.so ${D}${libdir} + + install -d ${D}${bindir}/include + install ${B}/backend/src/libocl/usr/lib/beignet/include/* ${D}${bindir}/include + install ${B}/backend/src/libocl/usr/lib/beignet/beignet.bc ${D}${bindir}/ +} diff --git a/meta-refkit/recipes-opencl/ocl-icd/ocl-icd_2.2.9.bb b/meta-refkit/recipes-opencl/ocl-icd/ocl-icd_2.2.9.bb new file mode 100644 index 0000000000..212c9ee3b1 --- /dev/null +++ b/meta-refkit/recipes-opencl/ocl-icd/ocl-icd_2.2.9.bb @@ -0,0 +1,12 @@ +LICENSE = "BSD-2-Clause" +LIC_FILES_CHKSUM = "file://COPYING;md5=232257bbf7320320725ca9529d3782ab" + +SRC_URI = "https://forge.imag.fr/frs/download.php/716/${BP}.tar.gz" +SRC_URI[md5sum] = "7dab1a9531ea79c19a414a9ee229504e" +SRC_URI[sha256sum] = "0c8ac13e2c5b737c34de49f9aca6cad3c4d33dd0bbb149b01238d76e798feae5" + +inherit autotools + +DEPENDS += "ruby-native" + +BBCLASSEXTEND = "native" diff --git a/meta-refkit/recipes-opencl/opencl-headers-cxx/opencl-headers-cxx_1.2.bb b/meta-refkit/recipes-opencl/opencl-headers-cxx/opencl-headers-cxx_1.2.bb new file mode 100644 index 0000000000..dcf0c1ba90 --- /dev/null +++ b/meta-refkit/recipes-opencl/opencl-headers-cxx/opencl-headers-cxx_1.2.bb @@ -0,0 +1,24 @@ +LICENSE = "KhronosFreeUse" +LIC_FILES_CHKSUM = "file://input_cl.hpp;beginline=1;endline=27;md5=ce1046da63d60ff91438a9c2392e0cc8" + +SRC_URI = "git://github.com/KhronosGroup/OpenCL-CLHPP;branch=opencl21" +SRCREV = "d54d52ce6ab6301e821098c1176cb512686e3dbc" + +S = "${WORKDIR}/git" + +RDEPENDS_${PN}-dev = "" + +PACKAGES = "${PN}" + +PROVIDES += "virtual/opencl-headers-cxx" + +do_compile() { + python ${WORKDIR}/git/gen_cl_hpp.py +} + +do_install() { + mkdir -p ${D}${includedir}/CL + install -m644 cl.hpp ${D}${includedir}/CL +} + +FILES_${PN} = "${includedir}/CL/cl.hpp" diff --git a/meta-refkit/recipes-opencl/opencl-headers/opencl-headers_1.2.bb b/meta-refkit/recipes-opencl/opencl-headers/opencl-headers_1.2.bb new file mode 100644 index 0000000000..7416b4b6b4 --- /dev/null +++ b/meta-refkit/recipes-opencl/opencl-headers/opencl-headers_1.2.bb @@ -0,0 +1,16 @@ +LICENSE = "KhronosFreeUse" +LIC_FILES_CHKSUM = "file://cl.h;beginline=1;endline=27;md5=b75d70d0f7cb3bb2bc8886141a84319e" + +SRC_URI = "git://github.com/KhronosGroup/OpenCL-Headers;branch=opencl12" +SRCREV = "47be6196cb09f2718990f9537ac69fc5ec43aed5" + +S = "${WORKDIR}/git" + +PROVIDES += "virtual/opencl-headers" + +RDEPENDS_${PN}-dev = "" + +do_install() { + mkdir -p ${D}${includedir}/CL + install -m644 *.h ${D}${includedir}/CL +} diff --git a/meta-refkit/recipes-opencl/packagegroups/packagegroup-opencl.bb b/meta-refkit/recipes-opencl/packagegroups/packagegroup-opencl.bb new file mode 100644 index 0000000000..8b5f08c502 --- /dev/null +++ b/meta-refkit/recipes-opencl/packagegroups/packagegroup-opencl.bb @@ -0,0 +1,9 @@ +SUMMARY = "OpenCL package group" +LICENSE = "MIT" + +inherit packagegroup + +RDEPENDS_${PN} = " \ + beignet \ + ocl-icd \ +" From b0e7d1e70c480492f7812e2d7a187726cda9508c Mon Sep 17 00:00:00 2001 From: Ismo Puustinen Date: Wed, 15 Feb 2017 17:52:19 +0200 Subject: [PATCH 04/14] beignet: update to version 1.3.0. Also update the native build cleanup patch. Signed-off-by: Ismo Puustinen --- ...ch => 0001-reduced-native-for-1.3.0.patch} | 90 +++++++++++-------- .../recipes-opencl/beignet/beignet_git.bb | 6 +- 2 files changed, 58 insertions(+), 38 deletions(-) rename meta-refkit/recipes-opencl/beignet/beignet/{0001-reduced-native-for-1.2.1.patch => 0001-reduced-native-for-1.3.0.patch} (62%) diff --git a/meta-refkit/recipes-opencl/beignet/beignet/0001-reduced-native-for-1.2.1.patch b/meta-refkit/recipes-opencl/beignet/beignet/0001-reduced-native-for-1.3.0.patch similarity index 62% rename from meta-refkit/recipes-opencl/beignet/beignet/0001-reduced-native-for-1.2.1.patch rename to meta-refkit/recipes-opencl/beignet/beignet/0001-reduced-native-for-1.3.0.patch index 0d6fd80633..0e56c648c1 100644 --- a/meta-refkit/recipes-opencl/beignet/beignet/0001-reduced-native-for-1.2.1.patch +++ b/meta-refkit/recipes-opencl/beignet/beignet/0001-reduced-native-for-1.3.0.patch @@ -1,18 +1,27 @@ -From d956e942bdf4a9a0eeb7fef7e416d9fb97dc4232 Mon Sep 17 00:00:00 2001 +From ce4ccd76905c48c9267c44f0b2af97456c9e638e Mon Sep 17 00:00:00 2001 From: Tuomas Katila Date: Wed, 9 Nov 2016 11:16:40 +0200 -Subject: [PATCH] reduced native for 1.2.1 +Subject: [PATCH] reduced native for 1.3.0 Signed-off-by: Tuomas Katila +Signed-off-by: Ismo Puustinen --- - CMakeLists.txt | 104 --------------------------------------------------------- - 1 file changed, 104 deletions(-) + CMakeLists.txt | 116 --------------------------------------------------------- + 1 file changed, 116 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt -index bac054c..6c8412c 100644 +index 02b5d88..051d808 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt -@@ -121,108 +121,11 @@ ELSE(X11_FOUND) +@@ -28,7 +28,6 @@ set (NOT_BUILD_STAND_ALONE_UTEST 1) + INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR} + ${CMAKE_CURRENT_SOURCE_DIR}/include) + +- + INCLUDE (FindPkgConfig) + + SET(CMAKE_VERBOSE_MAKEFILE "false") +@@ -111,119 +110,11 @@ ELSE(X11_FOUND) MESSAGE(STATUS "Looking for XLib - not found") ENDIF(X11_FOUND) @@ -49,41 +58,38 @@ index bac054c..6c8412c 100644 - ELSE(HAVE_DRM_INTEL_SUBSLICE_TOTAL) - MESSAGE(STATUS "Disable subslice total query support") - ENDIF(HAVE_DRM_INTEL_SUBSLICE_TOTAL) -- CHECK_LIBRARY_EXISTS(drm_intel "drm_intel_get_pooled_eu" "" HAVE_DRM_INTEL_POOLED_EU) +- CHECK_LIBRARY_EXISTS(drm_intel "drm_intel_get_pooled_eu" ${DRM_INTEL_LIBDIR} HAVE_DRM_INTEL_POOLED_EU) - IF(HAVE_DRM_INTEL_POOLED_EU) - MESSAGE(STATUS "Enable pooled eu query support") - ELSE(HAVE_DRM_INTEL_POOLED_EU) - MESSAGE(STATUS "Disable pooled eu query support") - ENDIF(HAVE_DRM_INTEL_POOLED_EU) -- CHECK_LIBRARY_EXISTS(drm_intel "drm_intel_get_min_eu_in_pool" "" HAVE_DRM_INTEL_MIN_EU_IN_POOL) +- CHECK_LIBRARY_EXISTS(drm_intel "drm_intel_get_min_eu_in_pool" ${DRM_INTEL_LIBDIR} HAVE_DRM_INTEL_MIN_EU_IN_POOL) - IF(HAVE_DRM_INTEL_MIN_EU_IN_POOL) - MESSAGE(STATUS "Enable min eu in pool query support") - ELSE(HAVE_DRM_INTEL_MIN_EU_IN_POOL) - MESSAGE(STATUS "Disable min eu in pool query support") - ENDIF(HAVE_DRM_INTEL_MIN_EU_IN_POOL) +- CHECK_LIBRARY_EXISTS(drm_intel "drm_intel_bo_set_softpin_offset" ${DRM_INTEL_LIBDIR} HAVE_DRM_INTEL_BO_SET_SOFTPIN) -ELSE(DRM_INTEL_FOUND) - MESSAGE(FATAL_ERROR "Looking for DRM Intel (>= 2.4.52) - not found") -ENDIF(DRM_INTEL_FOUND) - -# CMRT +-#disable CMRT as default, since we do not see real case, +-#but see build issue of this feature +-OPTION(INVOKE_CMRT "Enable CMRT" OFF) +-IF(INVOKE_CMRT) -pkg_check_modules(CMRT libcmrt) -IF(CMRT_FOUND) -INCLUDE_DIRECTORIES(${CMRT_INCLUDE_DIRS}) -ENDIF(CMRT_FOUND) +-ENDIF(INVOKE_CMRT) # Threads Find_Package(Threads) -IF(X11_FOUND) --# OpenGL (not use cmake helper) --pkg_check_modules(OPENGL gl) --IF(OPENGL_FOUND) -- INCLUDE_DIRECTORIES(${OPENGL_INCLUDE_DIRS}) -- MESSAGE(STATUS "Looking for OpenGL - found at ${OPENGL_PREFIX}") --ELSE(OPENGL_FOUND) -- MESSAGE(STATUS "Looking for OpenGL - not found") --ENDIF(OPENGL_FOUND) -- -# Xext -pkg_check_modules(XEXT REQUIRED xext) -IF(XEXT_FOUND) @@ -103,25 +109,39 @@ index bac054c..6c8412c 100644 -ENDIF(XFIXES_FOUND) -ENDIF(X11_FOUND) - --pkg_check_modules(EGL egl) --IF(EGL_FOUND) -- MESSAGE(STATUS "Looking for EGL - found at ${EGL_PREFIX}") --ELSE(EGL_FOUND) -- MESSAGE(STATUS "Looking for EGL - not found") --ENDIF(EGL_FOUND) +-OPTION(ENABLE_GL_SHARING "cl_khr_gl_sharing" OFF) +- +-IF(ENABLE_GL_SHARING) +- pkg_check_modules(OPENGL REQUIRED gl) +- IF(OPENGL_FOUND) +- MESSAGE(STATUS "Looking for OpenGL - found at ${OPENGL_PREFIX}") +- ELSE(OPENGL_FOUND) +- MESSAGE(STATUS "Looking for OpenGL - not found") +- ENDIF(OPENGL_FOUND) +- pkg_check_modules(EGL REQUIRED egl>=11.0.0) +- IF(EGL_FOUND) +- MESSAGE(STATUS "Looking for EGL - found at ${EGL_PREFIX}") +- ELSE(EGL_FOUND) +- MESSAGE(STATUS "Looking for EGL - not found") +- ENDIF(EGL_FOUND) +-ENDIF(ENABLE_GL_SHARING) - --# cl_khr_gl_sharing requires to build with mesa source --#Find_Package(MesaSrc) --#IF(MESA_SOURCE_FOUND) --# MESSAGE(STATUS "Looking for mesa source code - found at ${MESA_SOURCE_PREFIX}") --#ELSE(MESA_SOURCE_FOUND) --# MESSAGE(STATUS "Looking for mesa source code - not found, cl_khr_gl_sharing will be disabled.") --#ENDIF(MESA_SOURCE_FOUND) +-Find_Package(OCLIcd) +-IF(OCLIcd_FOUND) +- MESSAGE(STATUS "Looking for OCL ICD header file - found") +- configure_file ( +- "intel-beignet.icd.in" +- "${ICD_FILE_NAME}" +- ) +- install (FILES ${CMAKE_CURRENT_BINARY_DIR}/${ICD_FILE_NAME} DESTINATION /etc/OpenCL/vendors) +-ELSE(OCLIcd_FOUND) +- MESSAGE(STATUS "Looking for OCL ICD header file - not found") +-ENDIF(OCLIcd_FOUND) - - Find_Package(OCLIcd) - IF(OCLIcd_FOUND) - MESSAGE(STATUS "Looking for OCL ICD header file - found") -@@ -276,13 +179,6 @@ ENDIF(BUILD_EXAMPLES) + Find_Package(PythonInterp) + + OPTION(EXPERIMENTAL_DOUBLE "Enable experimental double support" OFF) +@@ -306,13 +197,6 @@ ENDIF(BUILD_EXAMPLES) ADD_SUBDIRECTORY(include) ADD_SUBDIRECTORY(backend) @@ -136,5 +156,5 @@ index bac054c..6c8412c 100644 IF(BUILD_EXAMPLES) ADD_SUBDIRECTORY(examples) -- -2.9.2 +2.9.3 diff --git a/meta-refkit/recipes-opencl/beignet/beignet_git.bb b/meta-refkit/recipes-opencl/beignet/beignet_git.bb index d99bd5c0e8..8cc414d57b 100644 --- a/meta-refkit/recipes-opencl/beignet/beignet_git.bb +++ b/meta-refkit/recipes-opencl/beignet/beignet_git.bb @@ -4,14 +4,14 @@ LIC_FILES_CHKSUM = "file://COPYING;md5=6b566c5b4da35d474758324899cb4562" SRC_URI = "git://anongit.freedesktop.org/beignet;nobranch=1 \ file://fix-llvm-paths.patch \ " -SRC_URI_append_class-native = " file://0001-reduced-native-for-1.2.1.patch" +SRC_URI_append_class-native = " file://0001-reduced-native-for-1.3.0.patch" SRC_URI_append_class-target = " file://0001-Run-native-gbe_bin_generater-to-compile-built-in-ker.patch" BBCLASSEXTEND = "native" # CMake cannot digest "+" in pathes -> replace it with dots. -PV = "1.2.1.${@ 'git${SRCPV}'.replace('+', '.')}" -SRCREV = "097365ed1a79cd03dc689b37b03552e455eb3854" +PV = "1.3.0.${@ 'git${SRCPV}'.replace('+', '.')}" +SRCREV = "c8b47b1737402ff78151daec65c774d437f0b546" S = "${WORKDIR}/git" PROVIDES += "virtual/opencl-headers virtual/opencl-headers-cxx" From bbf771ad409f3fccfa8b75bbc60473c791384456 Mon Sep 17 00:00:00 2001 From: Ismo Puustinen Date: Mon, 20 Feb 2017 12:41:54 +0200 Subject: [PATCH 05/14] beignet: depend on ocl-icd. This is backwards, since the OpenCL ICD shouldn't depend on the ICD loader. However, if beignet doesn't recognize ocl-icd, it doesn't export the correct symbols required by ocl-icd. Signed-off-by: Ismo Puustinen --- meta-refkit/recipes-opencl/beignet/beignet_git.bb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/meta-refkit/recipes-opencl/beignet/beignet_git.bb b/meta-refkit/recipes-opencl/beignet/beignet_git.bb index 8cc414d57b..744c854c16 100644 --- a/meta-refkit/recipes-opencl/beignet/beignet_git.bb +++ b/meta-refkit/recipes-opencl/beignet/beignet_git.bb @@ -16,7 +16,8 @@ S = "${WORKDIR}/git" PROVIDES += "virtual/opencl-headers virtual/opencl-headers-cxx" -DEPENDS = "beignet-native clang libdrm mesa" +# we need to depend on ocl-icd, so that the exported symbols go right +DEPENDS = "beignet-native clang libdrm mesa ocl-icd" DEPENDS_class-native = "clang-native" # built-in kernels depend on libocl's headers (e.g. ocl_as.h) yet there is no From 7e4c2a918ae384f9d55efb11687707c083b70d7f Mon Sep 17 00:00:00 2001 From: Ismo Puustinen Date: Thu, 16 Feb 2017 17:13:39 +0200 Subject: [PATCH 06/14] ocl-icd: provide virtual/opencl-icd. Some packages (opencv) depend on virtual/opencl-icd. Since ocl-icd provides an icd, indicate that in PROVIDES. Signed-off-by: Ismo Puustinen --- meta-refkit/recipes-opencl/ocl-icd/ocl-icd_2.2.9.bb | 2 ++ 1 file changed, 2 insertions(+) diff --git a/meta-refkit/recipes-opencl/ocl-icd/ocl-icd_2.2.9.bb b/meta-refkit/recipes-opencl/ocl-icd/ocl-icd_2.2.9.bb index 212c9ee3b1..9cae736d18 100644 --- a/meta-refkit/recipes-opencl/ocl-icd/ocl-icd_2.2.9.bb +++ b/meta-refkit/recipes-opencl/ocl-icd/ocl-icd_2.2.9.bb @@ -10,3 +10,5 @@ inherit autotools DEPENDS += "ruby-native" BBCLASSEXTEND = "native" + +PROVIDES = "virtual/opencl-icd" From 0e15d355272f7771c7966b5b9e51382d35d98194 Mon Sep 17 00:00:00 2001 From: Ismo Puustinen Date: Fri, 17 Feb 2017 14:01:20 +0200 Subject: [PATCH 07/14] ocl-icd: updated version. Updated version from 2.2.9 to 2.2.11. Signed-off-by: Ismo Puustinen --- .../ocl-icd/{ocl-icd_2.2.9.bb => ocl-icd_2.2.11.bb} | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) rename meta-refkit/recipes-opencl/ocl-icd/{ocl-icd_2.2.9.bb => ocl-icd_2.2.11.bb} (50%) diff --git a/meta-refkit/recipes-opencl/ocl-icd/ocl-icd_2.2.9.bb b/meta-refkit/recipes-opencl/ocl-icd/ocl-icd_2.2.11.bb similarity index 50% rename from meta-refkit/recipes-opencl/ocl-icd/ocl-icd_2.2.9.bb rename to meta-refkit/recipes-opencl/ocl-icd/ocl-icd_2.2.11.bb index 9cae736d18..1068eb78a5 100644 --- a/meta-refkit/recipes-opencl/ocl-icd/ocl-icd_2.2.9.bb +++ b/meta-refkit/recipes-opencl/ocl-icd/ocl-icd_2.2.11.bb @@ -1,9 +1,9 @@ LICENSE = "BSD-2-Clause" LIC_FILES_CHKSUM = "file://COPYING;md5=232257bbf7320320725ca9529d3782ab" -SRC_URI = "https://forge.imag.fr/frs/download.php/716/${BP}.tar.gz" -SRC_URI[md5sum] = "7dab1a9531ea79c19a414a9ee229504e" -SRC_URI[sha256sum] = "0c8ac13e2c5b737c34de49f9aca6cad3c4d33dd0bbb149b01238d76e798feae5" +SRC_URI = "https://forge.imag.fr/frs/download.php/814/${BP}.tar.gz" +SRC_URI[md5sum] = "32335dc7dd3ea2a4b994ca87f2f80554" +SRC_URI[sha256sum] = "02fa41da98ae2807e92742196831d320e3fc2f4cb1118d0061d9f51dda867730" inherit autotools From 4fb9030113cb91c8b8ba1470ddf2c8be560a5849 Mon Sep 17 00:00:00 2001 From: Ismo Puustinen Date: Wed, 15 Feb 2017 21:47:51 +0200 Subject: [PATCH 08/14] packagegroup-computervision: add OpenCL components. Add packagegroup-opencl to packagegroup-computervision and also to supported recipes. Signed-off-by: Ismo Puustinen --- meta-refkit/conf/distro/include/refkit-supported-recipes.txt | 3 +++ .../packagegroups/packagegroup-computervision.bb | 1 + 2 files changed, 4 insertions(+) diff --git a/meta-refkit/conf/distro/include/refkit-supported-recipes.txt b/meta-refkit/conf/distro/include/refkit-supported-recipes.txt index f57d7f4dba..fcee21fa1c 100644 --- a/meta-refkit/conf/distro/include/refkit-supported-recipes.txt +++ b/meta-refkit/conf/distro/include/refkit-supported-recipes.txt @@ -45,6 +45,7 @@ base-passwd@core bash-completion@core bash@core bc@core +beignet@refkit binutils@core bison@core bluez5@core @@ -56,6 +57,7 @@ ca-certificates@core cairo@core cantarell-fonts@core chrpath@core +clang@clang-layer connman-conf@core connman@core coreutils@core @@ -203,6 +205,7 @@ ncurses@core netbase@core nettle@core nodejs@iotweb +ocl-icd@refkit oe-swupd-helpers@meta-swupd opencv@openembedded-layer openjdk-8@meta-java diff --git a/meta-refkit/recipes-computervision/packagegroups/packagegroup-computervision.bb b/meta-refkit/recipes-computervision/packagegroups/packagegroup-computervision.bb index 8033c9b71d..e3a2b62ae5 100644 --- a/meta-refkit/recipes-computervision/packagegroups/packagegroup-computervision.bb +++ b/meta-refkit/recipes-computervision/packagegroups/packagegroup-computervision.bb @@ -9,4 +9,5 @@ RDEPENDS_${PN} = " \ gstreamer1.0-plugins-good \ libva-intel-driver \ librealsense \ + packagegroup-opencl \ " From b603b89b4f4c3f840d51e1154ba4fb3bc38b2951 Mon Sep 17 00:00:00 2001 From: Ismo Puustinen Date: Wed, 15 Feb 2017 21:00:41 +0200 Subject: [PATCH 09/14] refkit.conf: OpenCL support for opencv. Adjust opencv PACKAGECONFIG so that OpenCL support gets enabled. Signed-off-by: Ismo Puustinen --- meta-refkit/conf/distro/refkit.conf | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/meta-refkit/conf/distro/refkit.conf b/meta-refkit/conf/distro/refkit.conf index f7d3e50969..d1b0d60fae 100644 --- a/meta-refkit/conf/distro/refkit.conf +++ b/meta-refkit/conf/distro/refkit.conf @@ -63,6 +63,11 @@ PACKAGECONFIG_remove_pn-gstreamer1.0-plugins-base = "pango" PACKAGECONFIG_remove_pn-pulseaudio = "avahi" +# since we have OpenCL support, turn it on +PACKAGECONFIG_append_pn-opencv = " opencl" +PREFERRED_PROVIDER_virtual/opencl-headers = "beignet" +PREFERRED_PROVIDER_virtual/opencl-headers-cxx = "beignet" + MAINTAINER = "Mikko Ylinen " TARGET_VENDOR = "-refkit" From 40d630c2962aa68c8addcff1c5f2d2b828951999 Mon Sep 17 00:00:00 2001 From: Ismo Puustinen Date: Wed, 15 Feb 2017 21:31:09 +0200 Subject: [PATCH 10/14] opencv: depend rather on virtual/opencl-headers. Do not depend on opencl-headers (which is a name of a recipe), but rather on virtual/opencl-headers, which are supplied by several providers. Signed-off-by: Ismo Puustinen --- meta-refkit/recipes-computervision/opencv/opencv_%.bbappend | 1 + 1 file changed, 1 insertion(+) create mode 100644 meta-refkit/recipes-computervision/opencv/opencv_%.bbappend diff --git a/meta-refkit/recipes-computervision/opencv/opencv_%.bbappend b/meta-refkit/recipes-computervision/opencv/opencv_%.bbappend new file mode 100644 index 0000000000..52a3372f96 --- /dev/null +++ b/meta-refkit/recipes-computervision/opencv/opencv_%.bbappend @@ -0,0 +1 @@ +PACKAGECONFIG[opencl] = "-DWITH_OPENCL=ON,-DWITH_OPENCL=OFF,virtual/opencl-headers virtual/opencl-icd," From 0e0d67153fbd72e8249dd9b95cff3546d329f7f3 Mon Sep 17 00:00:00 2001 From: Ismo Puustinen Date: Thu, 16 Feb 2017 16:34:20 +0200 Subject: [PATCH 11/14] viennacl: add new recipe. ViennaCL is OpenCL-accelerated linear algebra library. The sample files and benchmarks can be used for testing OpenCL functionality and performance. Add viennacl-examples to packagegroup-computervision-test. Signed-off-by: Ismo Puustinen --- .../include/refkit-supported-recipes.txt | 1 + .../packagegroup-computervision-test.bb | 1 + ...nstall-also-benchmarks-and-tutorials.patch | 81 +++++++++++++++++++ .../recipes-opencl/viennacl/viennacl_1.7.1.bb | 49 +++++++++++ 4 files changed, 132 insertions(+) create mode 100644 meta-refkit/recipes-opencl/viennacl/files/0001-examples-install-also-benchmarks-and-tutorials.patch create mode 100644 meta-refkit/recipes-opencl/viennacl/viennacl_1.7.1.bb diff --git a/meta-refkit/conf/distro/include/refkit-supported-recipes.txt b/meta-refkit/conf/distro/include/refkit-supported-recipes.txt index fcee21fa1c..03147ac839 100644 --- a/meta-refkit/conf/distro/include/refkit-supported-recipes.txt +++ b/meta-refkit/conf/distro/include/refkit-supported-recipes.txt @@ -282,6 +282,7 @@ util-macros@core v4l-utils@openembedded-layer v86d@core valgrind@core +viennacl@refkit vim@openembedded-layer volatile-binds@core wget@core diff --git a/meta-refkit/recipes-computervision/packagegroups/packagegroup-computervision-test.bb b/meta-refkit/recipes-computervision/packagegroups/packagegroup-computervision-test.bb index ff8eac6b89..8568ee9b6a 100644 --- a/meta-refkit/recipes-computervision/packagegroups/packagegroup-computervision-test.bb +++ b/meta-refkit/recipes-computervision/packagegroups/packagegroup-computervision-test.bb @@ -7,4 +7,5 @@ RDEPENDS_${PN} = " \ opencv-samples \ python3-opencv \ librealsense-examples \ + viennacl-examples \ " diff --git a/meta-refkit/recipes-opencl/viennacl/files/0001-examples-install-also-benchmarks-and-tutorials.patch b/meta-refkit/recipes-opencl/viennacl/files/0001-examples-install-also-benchmarks-and-tutorials.patch new file mode 100644 index 0000000000..16aa56671e --- /dev/null +++ b/meta-refkit/recipes-opencl/viennacl/files/0001-examples-install-also-benchmarks-and-tutorials.patch @@ -0,0 +1,81 @@ +From f07abb1771586b21de27ae76b11aa148dd95b92b Mon Sep 17 00:00:00 2001 +From: Ismo Puustinen +Date: Thu, 16 Feb 2017 16:16:36 +0200 +Subject: [PATCH] examples: install also benchmarks and tutorials. + +These cannot really be compiled on the target, so package them. + +Upstream-status: Inappropriate [test code] +Signed-off-by: Ismo Puustinen +--- + examples/benchmarks/CMakeLists.txt | 3 +++ + examples/tutorial/CMakeLists.txt | 4 ++++ + 2 files changed, 7 insertions(+) + +diff --git a/examples/benchmarks/CMakeLists.txt b/examples/benchmarks/CMakeLists.txt +index d0d7bf6..e079a8d 100644 +--- a/examples/benchmarks/CMakeLists.txt ++++ b/examples/benchmarks/CMakeLists.txt +@@ -8,6 +8,7 @@ if (ENABLE_UBLAS) + foreach(bench sparse solver direct_solve) + add_executable(${bench}-bench-cpu ${bench}.cpp) + target_link_libraries(${bench}-bench-cpu ${Boost_LIBRARIES}) ++ install(TARGETS ${bench}-bench-cpu DESTINATION bin) + endforeach() + endif (ENABLE_UBLAS) + +@@ -19,6 +20,7 @@ if (ENABLE_OPENCL) + add_executable(${bench}-bench-opencl ${bench}.cpp) + target_link_libraries(${bench}-bench-opencl ${OPENCL_LIBRARIES}) + set_target_properties(${bench}-bench-opencl PROPERTIES COMPILE_FLAGS "-DVIENNACL_WITH_OPENCL") ++ install(TARGETS ${bench}-bench-opencl DESTINATION bin) + endforeach() + + if (ENABLE_UBLAS) +@@ -27,6 +29,7 @@ if (ENABLE_OPENCL) + add_executable(${bench}-bench-opencl ${bench}.cpp) + target_link_libraries(${bench}-bench-opencl ${OPENCL_LIBRARIES} ${Boost_LIBRARIES}) + set_target_properties(${bench}-bench-opencl PROPERTIES COMPILE_FLAGS "-DVIENNACL_WITH_OPENCL") ++ install(TARGETS ${bench}-bench-opencl DESTINATION bin) + endforeach() + endif (ENABLE_UBLAS) + +diff --git a/examples/tutorial/CMakeLists.txt b/examples/tutorial/CMakeLists.txt +index 2991b2e..e96c16d 100644 +--- a/examples/tutorial/CMakeLists.txt ++++ b/examples/tutorial/CMakeLists.txt +@@ -9,6 +9,7 @@ foreach(tut amg bandwidth-reduction blas1 fft iterative-custom matrix-free nmf s + if (ENABLE_OPENCL) + target_link_libraries(${tut} ${OPENCL_LIBRARIES}) + set_target_properties(${tut} PROPERTIES COMPILE_FLAGS "-DVIENNACL_WITH_OPENCL") ++ install(TARGETS ${tut} DESTINATION bin) + endif (ENABLE_OPENCL) + endforeach() + +@@ -20,6 +21,7 @@ if (ENABLE_UBLAS) + if (ENABLE_OPENCL) + target_link_libraries(${tut} ${OPENCL_LIBRARIES} ${Boost_LIBRARIES}) + set_target_properties(${tut} PROPERTIES COMPILE_FLAGS "-DVIENNACL_WITH_OPENCL") ++ install(TARGETS ${tut} DESTINATION bin) + endif (ENABLE_OPENCL) + endforeach() + endif () +@@ -64,6 +66,7 @@ if (ENABLE_OPENCL) + add_executable(${tut} ${tut}.cpp) + target_link_libraries(${tut} ${OPENCL_LIBRARIES}) + set_target_properties(${tut} PROPERTIES COMPILE_FLAGS "-DVIENNACL_WITH_OPENCL") ++ install(TARGETS ${tut} DESTINATION bin) + endforeach() + + if (ENABLE_UBLAS) +@@ -74,6 +77,7 @@ if (ENABLE_OPENCL) + if (ENABLE_OPENCL) + target_link_libraries(${tut} ${OPENCL_LIBRARIES} ${Boost_LIBRARIES}) + set_target_properties(${tut} PROPERTIES COMPILE_FLAGS "-DVIENNACL_WITH_OPENCL") ++ install(TARGETS ${tut} DESTINATION bin) + endif (ENABLE_OPENCL) + endforeach() + endif () +-- +2.9.3 + diff --git a/meta-refkit/recipes-opencl/viennacl/viennacl_1.7.1.bb b/meta-refkit/recipes-opencl/viennacl/viennacl_1.7.1.bb new file mode 100644 index 0000000000..d6803733f1 --- /dev/null +++ b/meta-refkit/recipes-opencl/viennacl/viennacl_1.7.1.bb @@ -0,0 +1,49 @@ +DESCRIPTION = "ViennaCL linear algebra library" +SUMMARY = "ViennaCL: OpenCL accelerated linear algebra library" +HOMEPAGE = "http://viennacl.sourceforge.net/" +LICENSE = "MIT" +PRIORITY= "optional" +SECTION = "libs" +PR = "r0" + +SRC_URI = " \ + https://github.com/viennacl/viennacl-dev/archive/release-1.7.1.zip \ + file://0001-examples-install-also-benchmarks-and-tutorials.patch \ +" +SRC_URI[md5sum] = "aab7a159c7a45466cf5b1b569aed8b49" +SRC_URI[sha256sum] = "8e3f4377e3a815a25c45af5fe94f01f1927f6dfc3f258035d4a5db15b15d6866" + +LIC_FILES_CHKSUM = "file://LICENSE;md5=02f8300a8eef6ede5cbc35fdec63f2a1" +DEPENDS = "boost virtual/opencl-icd virtual/opencl-headers" + +S = "${WORKDIR}/viennacl-dev-release-${PV}" + +inherit cmake + +EXTRA_OECMAKE = " \ + -DBUILD_TESTING=OFF \ + -DBUILD_DOXYGEN_DOCS=OFF \ + -DENABLE_UBLAS=ON \ +" + +# this is a headers-only recipe +RDEPENDS_${PN}-dev = "" + +do_install_append() { + # copy test data into place + install -d ${D}${datadir}/${PN}/examples + cp -r ${S}/examples/testdata ${D}${datadir}/${PN}/examples/ +} + +FILES_${PN}-dev += " \ + ${libdir}/cmake \ +" + +PACKAGES += "${PN}-examples" + +FILES_${PN}-examples += " \ + ${bindir}/* \ + ${datadir}/${PN}/examples \ +" + +FILES_${PN} = "" From 90ad7aa04d21f94fbb1ab12e2fe31e7de8a5cbef Mon Sep 17 00:00:00 2001 From: Ismo Puustinen Date: Mon, 20 Feb 2017 17:19:48 +0200 Subject: [PATCH 12/14] beignet: split recipe for different HW backends. Beignet needs to know compile-time which PCI ID contains the OpenCL device. This PCI id is different on different HW targets. Build an OpenCL ICD for each HW target. Only mark platform available if the driver matches the target hardware. This enables us to have multiple beignet backends, of which only the correct one gets loaded. Signed-off-by: Ismo Puustinen --- .../include/refkit-supported-recipes.txt | 4 +- meta-refkit/conf/distro/refkit.conf | 4 +- .../beignet/beignet-570x_git.bb | 5 + .../beignet/beignet-minnowmax_git.bb | 5 + .../beignet/{beignet_git.bb => beignet.inc} | 26 ++-- ...in_generater-to-compile-built-in-ker.patch | 0 ...m-not-supported-if-device-is-not-fou.patch | 131 ++++++++++++++++++ .../0001-reduced-native-for-1.3.0.patch | 0 .../{beignet => files}/fix-llvm-paths.patch | 0 .../packagegroups/packagegroup-opencl.bb | 3 +- 10 files changed, 163 insertions(+), 15 deletions(-) create mode 100644 meta-refkit/recipes-opencl/beignet/beignet-570x_git.bb create mode 100644 meta-refkit/recipes-opencl/beignet/beignet-minnowmax_git.bb rename meta-refkit/recipes-opencl/beignet/{beignet_git.bb => beignet.inc} (72%) rename meta-refkit/recipes-opencl/beignet/{beignet => files}/0001-Run-native-gbe_bin_generater-to-compile-built-in-ker.patch (100%) create mode 100644 meta-refkit/recipes-opencl/beignet/files/0001-api-mark-platform-not-supported-if-device-is-not-fou.patch rename meta-refkit/recipes-opencl/beignet/{beignet => files}/0001-reduced-native-for-1.3.0.patch (100%) rename meta-refkit/recipes-opencl/beignet/{beignet => files}/fix-llvm-paths.patch (100%) diff --git a/meta-refkit/conf/distro/include/refkit-supported-recipes.txt b/meta-refkit/conf/distro/include/refkit-supported-recipes.txt index 03147ac839..8c8cf6291c 100644 --- a/meta-refkit/conf/distro/include/refkit-supported-recipes.txt +++ b/meta-refkit/conf/distro/include/refkit-supported-recipes.txt @@ -45,7 +45,8 @@ base-passwd@core bash-completion@core bash@core bc@core -beignet@refkit +beignet-570x@refkit +beignet-minnowmax@refkit binutils@core bison@core bluez5@core @@ -207,6 +208,7 @@ nettle@core nodejs@iotweb ocl-icd@refkit oe-swupd-helpers@meta-swupd +opencl-headers@refkit opencv@openembedded-layer openjdk-8@meta-java openssh@core diff --git a/meta-refkit/conf/distro/refkit.conf b/meta-refkit/conf/distro/refkit.conf index d1b0d60fae..6c752faded 100644 --- a/meta-refkit/conf/distro/refkit.conf +++ b/meta-refkit/conf/distro/refkit.conf @@ -65,8 +65,8 @@ PACKAGECONFIG_remove_pn-pulseaudio = "avahi" # since we have OpenCL support, turn it on PACKAGECONFIG_append_pn-opencv = " opencl" -PREFERRED_PROVIDER_virtual/opencl-headers = "beignet" -PREFERRED_PROVIDER_virtual/opencl-headers-cxx = "beignet" +PREFERRED_PROVIDER_virtual/opencl-headers = "opencl-headers" +PREFERRED_PROVIDER_virtual/opencl-headers-cxx = "opencl-headers-cxx" MAINTAINER = "Mikko Ylinen " diff --git a/meta-refkit/recipes-opencl/beignet/beignet-570x_git.bb b/meta-refkit/recipes-opencl/beignet/beignet-570x_git.bb new file mode 100644 index 0000000000..cadc806dce --- /dev/null +++ b/meta-refkit/recipes-opencl/beignet/beignet-570x_git.bb @@ -0,0 +1,5 @@ +# Recipe for compiling beignet for Intel Joule 570x + +require beignet.inc + +EXTRA_OECMAKE_append = " -DGEN_PCI_ID=0x1A84" diff --git a/meta-refkit/recipes-opencl/beignet/beignet-minnowmax_git.bb b/meta-refkit/recipes-opencl/beignet/beignet-minnowmax_git.bb new file mode 100644 index 0000000000..ffcd124d8d --- /dev/null +++ b/meta-refkit/recipes-opencl/beignet/beignet-minnowmax_git.bb @@ -0,0 +1,5 @@ +# Recipe for compiling beignet for Minnowboard Max + +require beignet.inc + +EXTRA_OECMAKE_append = " -DGEN_PCI_ID=0x0F31" diff --git a/meta-refkit/recipes-opencl/beignet/beignet_git.bb b/meta-refkit/recipes-opencl/beignet/beignet.inc similarity index 72% rename from meta-refkit/recipes-opencl/beignet/beignet_git.bb rename to meta-refkit/recipes-opencl/beignet/beignet.inc index 744c854c16..0f0c18948b 100644 --- a/meta-refkit/recipes-opencl/beignet/beignet_git.bb +++ b/meta-refkit/recipes-opencl/beignet/beignet.inc @@ -3,6 +3,7 @@ LIC_FILES_CHKSUM = "file://COPYING;md5=6b566c5b4da35d474758324899cb4562" SRC_URI = "git://anongit.freedesktop.org/beignet;nobranch=1 \ file://fix-llvm-paths.patch \ + file://0001-api-mark-platform-not-supported-if-device-is-not-fou.patch \ " SRC_URI_append_class-native = " file://0001-reduced-native-for-1.3.0.patch" SRC_URI_append_class-target = " file://0001-Run-native-gbe_bin_generater-to-compile-built-in-ker.patch" @@ -14,12 +15,15 @@ PV = "1.3.0.${@ 'git${SRCPV}'.replace('+', '.')}" SRCREV = "c8b47b1737402ff78151daec65c774d437f0b546" S = "${WORKDIR}/git" -PROVIDES += "virtual/opencl-headers virtual/opencl-headers-cxx" - # we need to depend on ocl-icd, so that the exported symbols go right -DEPENDS = "beignet-native clang libdrm mesa ocl-icd" +DEPENDS = "${PN}-native clang libdrm mesa ocl-icd" DEPENDS_class-native = "clang-native" +# To solve the PCI_ID problem, we use the target from filename for +# installing the library. + +CL_HW_TARGET ?= "${@d.getVar('PN').split('-')[1]}" + # built-in kernels depend on libocl's headers (e.g. ocl_as.h) yet there is no # dependency specified for that in beignet's build system. This causes race # condition when libgbe.so is compiled for the target. @@ -32,7 +36,7 @@ inherit cmake pkgconfig # instead of the one from meta-clang. OECMAKE_FIND_ROOT_PATH_MODE_PROGRAM = "BOTH" -EXTRA_OECMAKE = " -DSTANDALONE_GBE_COMPILER_DIR=${STAGING_BINDIR_NATIVE} -DLLVM_LIBRARY_DIR=${STAGING_LIBDIR} -DGEN_PCI_ID=0x1A84" +EXTRA_OECMAKE = " -DSTANDALONE_GBE_COMPILER_DIR=${STAGING_BINDIR_NATIVE} -DLLVM_LIBRARY_DIR=${STAGING_LIBDIR} -DBEIGNET_INSTALL_DIR=${libdir}/beignet-${CL_HW_TARGET}" EXTRA_OECMAKE_class-native = " -DBEIGNET_INSTALL_DIR=/usr/lib/beignet -DLLVM_LIBRARY_DIR=${STAGING_LIBDIR_NATIVE}" # TODO respect distrofeatures for x11 @@ -42,16 +46,16 @@ PACKAGECONFIG[examples] = '-DBUILD_EXAMPLES=1,-DBUILD_EXAMPLES=0,libva' PACKAGECONFIG[x11] = ",,libxext libxfixes" FILES_${PN} += " \ - ${sysconfdir}/OpenCL/vendors/intel-beignet.icd \ + ${sysconfdir}/OpenCL/vendors/intel-beignet-${CL_HW_TARGET}.icd \ ${libdir} \ - ${libdir}/beignet/ \ - ${libdir}/beignet/* \ + ${libdir}/beignet-${CL_HW_TARGET}/ \ + ${libdir}/beignet-${CL_HW_TARGET}/* \ " -do_install_append () { - # Create intel-beignet.icd file - mkdir -p ${D}${sysconfdir}/OpenCL/vendors/ - echo ${libdir}/beignet/libcl.so > ${D}${sysconfdir}/OpenCL/vendors/intel-beignet.icd +do_install_append_class-target () { + # Change the intel-beignet.icd file + rm ${D}${sysconfdir}/OpenCL/vendors/intel-beignet.icd + echo ${libdir}/beignet-${CL_HW_TARGET}/libcl.so > ${D}${sysconfdir}/OpenCL/vendors/intel-beignet-${CL_HW_TARGET}.icd } do_install_class-native() { diff --git a/meta-refkit/recipes-opencl/beignet/beignet/0001-Run-native-gbe_bin_generater-to-compile-built-in-ker.patch b/meta-refkit/recipes-opencl/beignet/files/0001-Run-native-gbe_bin_generater-to-compile-built-in-ker.patch similarity index 100% rename from meta-refkit/recipes-opencl/beignet/beignet/0001-Run-native-gbe_bin_generater-to-compile-built-in-ker.patch rename to meta-refkit/recipes-opencl/beignet/files/0001-Run-native-gbe_bin_generater-to-compile-built-in-ker.patch diff --git a/meta-refkit/recipes-opencl/beignet/files/0001-api-mark-platform-not-supported-if-device-is-not-fou.patch b/meta-refkit/recipes-opencl/beignet/files/0001-api-mark-platform-not-supported-if-device-is-not-fou.patch new file mode 100644 index 0000000000..53de500da7 --- /dev/null +++ b/meta-refkit/recipes-opencl/beignet/files/0001-api-mark-platform-not-supported-if-device-is-not-fou.patch @@ -0,0 +1,131 @@ +From fe2374f27e5f24b047a5a498964fea4de0e4294d Mon Sep 17 00:00:00 2001 +From: Ismo Puustinen +Date: Mon, 20 Feb 2017 23:21:48 +0200 +Subject: [PATCH] api: mark platform not supported if device is not found. + +If the device specified by GEN_PCI_ID cmake switch during compilation +time is not present when the ICD loader queries the driver, mark +platform as not supported. + +This enables the use case where there are multiple beignet libraries, +each for a different target hardware. Then the ICD loader will only use +the correct library. + +Upstream-status: Pending + +Signed-off-by: Ismo Puustinen +--- + src/CMakeLists.txt | 5 ++++ + src/cl_api_platform_id.c | 73 ++++++++++++++++++++++++++++++++++++++++++++++++ + 2 files changed, 78 insertions(+) + +diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt +index f3c4632..c0e78a3 100644 +--- a/src/CMakeLists.txt ++++ b/src/CMakeLists.txt +@@ -7,6 +7,11 @@ include_directories(${CMAKE_CURRENT_SOURCE_DIR} + ${OPENGL_INCLUDE_DIRS} + ${EGL_INCLUDE_DIRS}) + ++if(GEN_PCI_ID) ++ STRING(REGEX REPLACE "0x" "" ONLY_PCI_ID ${GEN_PCI_ID}) ++ add_definitions(-DPCI_ID=${ONLY_PCI_ID}) ++endif(GEN_PCI_ID) ++ + macro (MakeKernelBinStr KERNEL_PATH KERNEL_FILES) + foreach (KF ${KERNEL_FILES}) + set (input_file ${KERNEL_PATH}/${KF}.cl) +diff --git a/src/cl_api_platform_id.c b/src/cl_api_platform_id.c +index 10d8894..1045e93 100644 +--- a/src/cl_api_platform_id.c ++++ b/src/cl_api_platform_id.c +@@ -19,6 +19,13 @@ + #include "cl_platform_id.h" + #include "CL/cl_ext.h" + ++#include ++#include ++#include ++ ++#define STR(x) #x ++#define PCI_ID_STRING(x) STR(x) ++ + cl_int + clGetPlatformInfo(cl_platform_id platform, + cl_platform_info param_name, +@@ -33,6 +40,72 @@ clGetPlatformInfo(cl_platform_id platform, + return CL_INVALID_PLATFORM; + } + ++#ifdef PCI_ID ++ /* Check the PCI id here. */ ++ if (strlen(PCI_ID_STRING(PCI_ID)) == 4) { ++ char *line = NULL; ++ ssize_t read_bytes = 0; ++ size_t n = 0; ++ FILE *pci_ids = fopen("/proc/bus/pci/devices", "r"); ++ ++ int match = 0; ++ ++ if (pci_ids) { ++ while ((read_bytes = getline(&line, &n, pci_ids)) != -1) { ++ ssize_t used = 0; ++ char *s = line, *e; ++ ++ /* find first '\t' */ ++ while (used < read_bytes && *s != '\t') { ++ s++; ++ used++; ++ } ++ if (used == read_bytes) { ++ continue; ++ } ++ ++ /* find second '\t' */ ++ e = s + 1; ++ used++; ++ while (used < read_bytes && *e != '\t') { ++ e++; ++ used++; ++ } ++ if (used == read_bytes) { ++ continue; ++ } ++ ++ /* the data is now in the eight characters between 's' and 'e' ++ * variables */ ++ ++ if (e-s != 9) { ++ continue; ++ } ++ ++ /* ok, we got the id */ ++ if (strncasecmp(s+5, PCI_ID_STRING(PCI_ID), 4) != 0) { ++ continue; ++ } ++ ++ /* We could, in principle, search the rest of the line for any ++ * evidence that this in fact is a GPU device. However, we don't ++ * implement that heuristic here. It seems unlikely that production ++ * systems will have multiple ICDs that accidentally match their ++ * PCI ids to non-GPU devices. */ ++ ++ match = 1; ++ break; ++ } ++ } ++ ++ free(line); ++ ++ if (!match) { ++ return CL_INVALID_PLATFORM; ++ } ++ } ++#endif ++ + /* Only one platform now. */ + if (platform != cl_get_platform_default()) { + return CL_INVALID_PLATFORM; +-- +2.9.3 + diff --git a/meta-refkit/recipes-opencl/beignet/beignet/0001-reduced-native-for-1.3.0.patch b/meta-refkit/recipes-opencl/beignet/files/0001-reduced-native-for-1.3.0.patch similarity index 100% rename from meta-refkit/recipes-opencl/beignet/beignet/0001-reduced-native-for-1.3.0.patch rename to meta-refkit/recipes-opencl/beignet/files/0001-reduced-native-for-1.3.0.patch diff --git a/meta-refkit/recipes-opencl/beignet/beignet/fix-llvm-paths.patch b/meta-refkit/recipes-opencl/beignet/files/fix-llvm-paths.patch similarity index 100% rename from meta-refkit/recipes-opencl/beignet/beignet/fix-llvm-paths.patch rename to meta-refkit/recipes-opencl/beignet/files/fix-llvm-paths.patch diff --git a/meta-refkit/recipes-opencl/packagegroups/packagegroup-opencl.bb b/meta-refkit/recipes-opencl/packagegroups/packagegroup-opencl.bb index 8b5f08c502..a6afcf780e 100644 --- a/meta-refkit/recipes-opencl/packagegroups/packagegroup-opencl.bb +++ b/meta-refkit/recipes-opencl/packagegroups/packagegroup-opencl.bb @@ -4,6 +4,7 @@ LICENSE = "MIT" inherit packagegroup RDEPENDS_${PN} = " \ - beignet \ + beignet-minnowmax \ + beignet-570x \ ocl-icd \ " From bfe6233a5ae290bcf28dadaf182a90401f75cde4 Mon Sep 17 00:00:00 2001 From: Ismo Puustinen Date: Tue, 21 Feb 2017 13:02:38 +0200 Subject: [PATCH 13/14] tests: simple OpenCL sanity test. Run a ViennaCL OpenCL benchmark. This should test beignet, kernel driver, ocl-icd, and ViennaCL. Signed-off-by: Ismo Puustinen --- meta-iotqa/conf/test/refkit-image-computervision.manifest | 1 + .../lib/oeqa/runtime/computervision/opencl_viennacl_1.py | 7 +++++++ 2 files changed, 8 insertions(+) create mode 100644 meta-iotqa/lib/oeqa/runtime/computervision/opencl_viennacl_1.py diff --git a/meta-iotqa/conf/test/refkit-image-computervision.manifest b/meta-iotqa/conf/test/refkit-image-computervision.manifest index b0f65ae2c9..072183c112 100644 --- a/meta-iotqa/conf/test/refkit-image-computervision.manifest +++ b/meta-iotqa/conf/test/refkit-image-computervision.manifest @@ -1,2 +1,3 @@ # Tests for computervision profile oeqa.runtime.computervision.realsense_headless +oeqa.runtime.computervision.opencl_viennacl_1 diff --git a/meta-iotqa/lib/oeqa/runtime/computervision/opencl_viennacl_1.py b/meta-iotqa/lib/oeqa/runtime/computervision/opencl_viennacl_1.py new file mode 100644 index 0000000000..926a8c4f28 --- /dev/null +++ b/meta-iotqa/lib/oeqa/runtime/computervision/opencl_viennacl_1.py @@ -0,0 +1,7 @@ +from oeqa.oetest import oeRuntimeTest + +class OpenCLViennaCL1Test(oeRuntimeTest): + def test_opencl_viennacl_1(self): + # Run an example test from viennacl-examples + (status, output) = self.target.run('dense_blas-bench-opencl') + self.assertEqual(status, 0, msg="Error messages: %s" % output) From ce8599f2312c50fc9c0aec7b7697825c82419660 Mon Sep 17 00:00:00 2001 From: Ismo Puustinen Date: Tue, 21 Feb 2017 15:46:06 +0200 Subject: [PATCH 14/14] opencv: link against libOpenCL. The default behavior is to load the OpenCL library dynamically. OpenCV attempts to use /usr/lib/libOpenCL.so, which is a symlink provided only by ocl-icd-dev package. By really linking against the OpenCL library, OpenCL works without manually having to add the symlink or installing the ocl-icd-dev package. Signed-off-by: Ismo Puustinen --- ...k-dynamically-against-OpenCL-library.patch | 30 +++++++++++++++++++ .../opencv/opencv_%.bbappend | 6 ++++ 2 files changed, 36 insertions(+) create mode 100644 meta-refkit/recipes-computervision/opencv/files/0001-opencv-link-dynamically-against-OpenCL-library.patch diff --git a/meta-refkit/recipes-computervision/opencv/files/0001-opencv-link-dynamically-against-OpenCL-library.patch b/meta-refkit/recipes-computervision/opencv/files/0001-opencv-link-dynamically-against-OpenCL-library.patch new file mode 100644 index 0000000000..9ac736ec7d --- /dev/null +++ b/meta-refkit/recipes-computervision/opencv/files/0001-opencv-link-dynamically-against-OpenCL-library.patch @@ -0,0 +1,30 @@ +From dd07cf878a84662b684c0d59e6fd8effb341174e Mon Sep 17 00:00:00 2001 +From: Ismo Puustinen +Date: Tue, 21 Feb 2017 15:13:59 +0200 +Subject: [PATCH] opencv: link dynamically against OpenCL library. + +This removes the need for runtime /usr/lib/libOpenCL.so symlink. + +Upstream-status: Inappropriate + +Signed-off-by: Ismo Puustinen +--- + cmake/OpenCVDetectOpenCL.cmake | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/cmake/OpenCVDetectOpenCL.cmake b/cmake/OpenCVDetectOpenCL.cmake +index 433f244..5858945 100644 +--- a/cmake/OpenCVDetectOpenCL.cmake ++++ b/cmake/OpenCVDetectOpenCL.cmake +@@ -3,7 +3,7 @@ if(APPLE) + set(OPENCL_LIBRARY "-framework OpenCL" CACHE STRING "OpenCL library") + set(OPENCL_INCLUDE_DIR "" CACHE PATH "OpenCL include directory") + else(APPLE) +- set(OPENCL_LIBRARY "" CACHE STRING "OpenCL library") ++ set(OPENCL_LIBRARY "-lOpenCL" CACHE STRING "OpenCL library") + set(OPENCL_INCLUDE_DIR "${OpenCV_SOURCE_DIR}/3rdparty/include/opencl/1.2" CACHE PATH "OpenCL include directory") + endif(APPLE) + mark_as_advanced(OPENCL_INCLUDE_DIR OPENCL_LIBRARY) +-- +2.9.3 + diff --git a/meta-refkit/recipes-computervision/opencv/opencv_%.bbappend b/meta-refkit/recipes-computervision/opencv/opencv_%.bbappend index 52a3372f96..818c0d50fa 100644 --- a/meta-refkit/recipes-computervision/opencv/opencv_%.bbappend +++ b/meta-refkit/recipes-computervision/opencv/opencv_%.bbappend @@ -1 +1,7 @@ +FILESEXTRAPATHS_prepend := "${THISDIR}/files:" + +SRC_URI_append = " \ + file://0001-opencv-link-dynamically-against-OpenCL-library.patch \ +" + PACKAGECONFIG[opencl] = "-DWITH_OPENCL=ON,-DWITH_OPENCL=OFF,virtual/opencl-headers virtual/opencl-icd,"