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-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) 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-supported-recipes.txt b/meta-refkit/conf/distro/include/refkit-supported-recipes.txt index f57d7f4dba..8c8cf6291c 100644 --- a/meta-refkit/conf/distro/include/refkit-supported-recipes.txt +++ b/meta-refkit/conf/distro/include/refkit-supported-recipes.txt @@ -45,6 +45,8 @@ base-passwd@core bash-completion@core bash@core bc@core +beignet-570x@refkit +beignet-minnowmax@refkit binutils@core bison@core bluez5@core @@ -56,6 +58,7 @@ ca-certificates@core cairo@core cantarell-fonts@core chrpath@core +clang@clang-layer connman-conf@core connman@core coreutils@core @@ -203,7 +206,9 @@ ncurses@core netbase@core nettle@core nodejs@iotweb +ocl-icd@refkit oe-swupd-helpers@meta-swupd +opencl-headers@refkit opencv@openembedded-layer openjdk-8@meta-java openssh@core @@ -279,6 +284,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/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/distro/refkit.conf b/meta-refkit/conf/distro/refkit.conf index f7d3e50969..6c752faded 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 = "opencl-headers" +PREFERRED_PROVIDER_virtual/opencl-headers-cxx = "opencl-headers-cxx" + MAINTAINER = "Mikko Ylinen " TARGET_VENDOR = "-refkit" 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 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 new file mode 100644 index 0000000000..818c0d50fa --- /dev/null +++ b/meta-refkit/recipes-computervision/opencv/opencv_%.bbappend @@ -0,0 +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," 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-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 \ " 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)}" 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.inc b/meta-refkit/recipes-opencl/beignet/beignet.inc new file mode 100644 index 0000000000..0f0c18948b --- /dev/null +++ b/meta-refkit/recipes-opencl/beignet/beignet.inc @@ -0,0 +1,72 @@ +LICENSE = "LGPLv2.1+" +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" + +BBCLASSEXTEND = "native" + +# CMake cannot digest "+" in pathes -> replace it with dots. +PV = "1.3.0.${@ 'git${SRCPV}'.replace('+', '.')}" +SRCREV = "c8b47b1737402ff78151daec65c774d437f0b546" +S = "${WORKDIR}/git" + +# we need to depend on ocl-icd, so that the exported symbols go right +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. +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} -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 +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-${CL_HW_TARGET}.icd \ + ${libdir} \ + ${libdir}/beignet-${CL_HW_TARGET}/ \ + ${libdir}/beignet-${CL_HW_TARGET}/* \ + " + +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() { + 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/beignet/files/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 new file mode 100644 index 0000000000..abc1c6f54a --- /dev/null +++ b/meta-refkit/recipes-opencl/beignet/files/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/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/files/0001-reduced-native-for-1.3.0.patch b/meta-refkit/recipes-opencl/beignet/files/0001-reduced-native-for-1.3.0.patch new file mode 100644 index 0000000000..0e56c648c1 --- /dev/null +++ b/meta-refkit/recipes-opencl/beignet/files/0001-reduced-native-for-1.3.0.patch @@ -0,0 +1,160 @@ +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.3.0 + +Signed-off-by: Tuomas Katila +Signed-off-by: Ismo Puustinen +--- + CMakeLists.txt | 116 --------------------------------------------------------- + 1 file changed, 116 deletions(-) + +diff --git a/CMakeLists.txt b/CMakeLists.txt +index 02b5d88..051d808 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -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) + +-# 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" ${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" ${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) +-# 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) +- +-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) +- +-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(PythonInterp) + + OPTION(EXPERIMENTAL_DOUBLE "Enable experimental double support" OFF) +@@ -306,13 +197,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.3 + diff --git a/meta-refkit/recipes-opencl/beignet/files/fix-llvm-paths.patch b/meta-refkit/recipes-opencl/beignet/files/fix-llvm-paths.patch new file mode 100644 index 0000000000..2966b14ed4 --- /dev/null +++ b/meta-refkit/recipes-opencl/beignet/files/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/ocl-icd/ocl-icd_2.2.11.bb b/meta-refkit/recipes-opencl/ocl-icd/ocl-icd_2.2.11.bb new file mode 100644 index 0000000000..1068eb78a5 --- /dev/null +++ b/meta-refkit/recipes-opencl/ocl-icd/ocl-icd_2.2.11.bb @@ -0,0 +1,14 @@ +LICENSE = "BSD-2-Clause" +LIC_FILES_CHKSUM = "file://COPYING;md5=232257bbf7320320725ca9529d3782ab" + +SRC_URI = "https://forge.imag.fr/frs/download.php/814/${BP}.tar.gz" +SRC_URI[md5sum] = "32335dc7dd3ea2a4b994ca87f2f80554" +SRC_URI[sha256sum] = "02fa41da98ae2807e92742196831d320e3fc2f4cb1118d0061d9f51dda867730" + +inherit autotools + +DEPENDS += "ruby-native" + +BBCLASSEXTEND = "native" + +PROVIDES = "virtual/opencl-icd" 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..a6afcf780e --- /dev/null +++ b/meta-refkit/recipes-opencl/packagegroups/packagegroup-opencl.bb @@ -0,0 +1,10 @@ +SUMMARY = "OpenCL package group" +LICENSE = "MIT" + +inherit packagegroup + +RDEPENDS_${PN} = " \ + beignet-minnowmax \ + beignet-570x \ + ocl-icd \ +" 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} = ""