From 6157877934003992f0acd954b7ff1c390911c2b3 Mon Sep 17 00:00:00 2001 From: Guo Yejun Date: Mon, 11 May 2015 13:53:49 +0800 Subject: add introduction to build Beignet with yocto Signed-off-by: Guo Yejun Reviewed-by: Zhigang Gong --- docs/Beignet.mdwn | 2 +- docs/howto/cross-compiler-howto.mdwn | 75 ++++++++++++++++++++++++++++++++++-- 2 files changed, 73 insertions(+), 4 deletions(-) (limited to 'docs') diff --git a/docs/Beignet.mdwn b/docs/Beignet.mdwn index 90a00e5f..ec528b58 100644 --- a/docs/Beignet.mdwn +++ b/docs/Beignet.mdwn @@ -289,7 +289,7 @@ by running the beignet's unit test. Documents for OpenCL application developers ------------------------------------------- -- [[Cross compile|Beignet/howto/cross-compiler-howto]] +- [[Cross compile (yocto)|Beignet/howto/cross-compiler-howto]] - [[Work with old system without c++11|Beignet/howto/oldgcc-howto]] - [[Kernel Optimization Guide|Beignet/optimization-guide]] - [[Libva Buffer Sharing|Beignet/howto/libva-buffer-sharing-howto]] diff --git a/docs/howto/cross-compiler-howto.mdwn b/docs/howto/cross-compiler-howto.mdwn index 535cd9aa..d5418162 100644 --- a/docs/howto/cross-compiler-howto.mdwn +++ b/docs/howto/cross-compiler-howto.mdwn @@ -7,6 +7,8 @@ and OpenCL kernels for a target machine (embedded/handheld devices) in a host machine with the help of cross compiler, and also the large-size-reduced Beignet driver package for the target machine. +Key part of yocto receipt is shown as an example. + Build Beignet with a cross compiler ----------------------------------- @@ -17,6 +19,10 @@ configure Beignet with cmake. Beignet depends on llvm+clang, this option refers to the path of llvm-config, llvm-as, llvm-link and clang in the cross compiler environment. + Please ensure that llvm-config, llvm-as, llvm-link and clang are in the same + directory. Please also make sure 'your_llvm_install_dir/llvm-config --libdir' + and 'your_llvm_install_dir/llvm-config --includedir' print the right output. + - CMAKE_SKIP_RPATH Some cross compiler systems forbid the usage of rpath in binaries/libraries, set this option to be TRUE. @@ -26,8 +32,30 @@ configure Beignet with cmake. of Intel Ivybridge GPU, and 0x0f31 is Intel Baytrail GPU. The information can be queried with command 'lspci -n'. -- CMAKE_INSTALL_PREFIX - This option controls the prefix of installation path. +- CMAKE_INSTALL_PREFIX and BEIGNET_INSTALL_DIR + These two options control the installation path. + + +To build Beignet with yocto, the receipt looks like: + +S = "${WORKDIR}/git" +BEIGNET_BUILD_DIR = "${S}/build" +do_configure() { + mkdir -p ${BEIGNET_BUILD_DIR} + cd ${BEIGNET_BUILD_DIR} + cmake \ + .. \ + -DLLVM_INSTALL_DIR=${TMPDIR}/sysroots/baytraili/usr/bin/ \ + -DCMAKE_INSTALL_PREFIX=/usr/ \ + -DBEIGNET_INSTALL_DIR=/usr/lib/ \ + -DCMAKE_SKIP_RPATH=TRUE \ + -DGEN_PCI_ID=0x0f31 +} +do_compile() { + cd ${BEIGNET_BUILD_DIR} + oe_runmake +} + Distribution of large-size-reduced Beignet driver package --------------------------------------------------------- @@ -37,7 +65,48 @@ provide only the OpenCL runtime library without OpenCL compiler, and only the executable binary kernel is supported on such devices. It means that just distribute libcl.so and libgbeinterp.so (~320k in total after strip) -are enough for OpenCL embeded profile in the target machine. +are enough for OpenCL embeded profile in the target machine. The whole Beignet +driver set can be separated into several packages for different usage. + + +Take yocto as an example, the receipt looks like: +SYSROOT_PREPROCESS_FUNCS += "beignet_sysroot_preprocess" +beignet_sysroot_preprocess() { + install -d ${SYSROOT_DESTDIR}${bindir} + install -m 0755 ${BEIGNET_BUILD_DIR}/backend/src/gbe_bin_generater ${SYSROOT_DESTDIR}${bindir} +} +do_install() { + cd ${BEIGNET_BUILD_DIR} + oe_runmake DESTDIR=${D} install + + #install OpenCL offline compiler + install -d ${D}${bindir} + install -m 0755 ${BEIGNET_BUILD_DIR}/backend/src/gbe_bin_generater ${D}${bindir} + + #install utest + install -d ${D}${bindir}/beignet + install -d ${D}${bindir}/beignet/include + install -m 0755 ${BEIGNET_BUILD_DIR}/utests/utest_run ${D}${bindir}/beignet + install -m 0755 ${S}/setenv.sh ${D}${bindir}/beignet + install -m 0644 ${S}/kernels/*.cl ${D}${bindir}/beignet + install -m 0644 ${S}/kernels/*.bmp ${D}${bindir}/beignet + install -m 0644 ${S}/kernels/compiler_ceil.bin ${D}${bindir}/beignet + install -m 0644 ${S}/kernels/runtime_compile_link.h ${D}${bindir}/beignet + install -m 0644 ${S}/kernels/include/runtime_compile_link_inc.h ${D}${bindir}/beignet/include/runtime_compile_link_inc.h + install -d ${D}${libdir} + install -m 0644 ${BEIGNET_BUILD_DIR}/utests/libutests.so ${D}${libdir} +} +do_install_append() { + rm -rf ${D}${sysconfdir} +} +PACKAGES += "${PN}-compiler ${PN}-test" +FILES_${PN} = "${libdir}/libcl.so ${libdir}/libgbeinterp.so" +FILES_${PN}-compiler = "${bindir}/gbe_bin_generater ${libdir}/libgbe.so ${libdir}/beignet.bc ${libdir}/beignet.pch ${libdir}/ocl_stdlib +.h ${libdir}/include/" +FILES_${PN}-dev = "${includedir}/CL/" +FILES_${PN}-test = "${bindir}/beignet/" +FILES_${PN}-test += "${libdir}/libutests.so" + Build OpenCL kernels with OpenCL offline compiler ------------------------------------------------- -- cgit v1.2.3