[Beignet] [PATCH 2/2] Refine the method to find pch and pcm files.
Zhigang Gong
zhigang.gong at linux.intel.com
Mon Jan 13 17:04:51 PST 2014
The same problem as previous. I will fix that. Thanks.
On Mon, Jan 13, 2014 at 09:41:13AM +0000, Gong, Zhigang wrote:
> Could you give more details of the bug? How to reproduce it?
>
> -----Original Message-----
> From: Sun, Yi
> Sent: Monday, January 13, 2014 5:34 PM
> To: Sun, Yi; Gong, Zhigang; beignet at lists.freedesktop.org
> Cc: junyan.he at linux.intel.com; Simon.Richter at hogyros.de; Gong, Zhigang
> Subject: RE: [Beignet] [PATCH 2/2] Refine the method to find pch and pcm files.
>
> It seems another regression issue occurred before this one:
> commit 03e53efebb24387a48ce10c0d21f58dbb7b5c82e
> Author: Zhigang Gong <zhigang.gong at intel.com>
> Date: Wed Jan 8 18:57:31 2014 +0800
>
> CL: prepare to support ICD if the system has ocl-icd..
>
> v2:
> Only install the intel-beignet.icd if the system has ocl-icd
> support.
>
> Signed-off-by: Zhigang Gong <zhigang.gong at intel.com>
>
> This commit also introduced bug, while running cmake.
>
> Thanks
> --Sun, Yi
>
> > -----Original Message-----
> > From: beignet-bounces+yi.sun=intel.com at lists.freedesktop.org
> > [mailto:beignet-bounces+yi.sun=intel.com at lists.freedesktop.org] On
> > Behalf Of Sun, Yi
> > Sent: Monday, January 13, 2014 5:07 PM
> > To: Gong, Zhigang; beignet at lists.freedesktop.org
> > Cc: junyan.he at linux.intel.com; Simon.Richter at hogyros.de; Gong, Zhigang
> > Subject: Re: [Beignet] [PATCH 2/2] Refine the method to find pch and pcm files.
> >
> > Hi Zhigang,
> >
> > It seems you miss adding file utests/setenv.sh.in?
> > I failed to build this commit with following error info:
> >
> > CMake Error: File /home/OpenCL/beignet/utests/setenv.sh.in does not exist.
> >
> > Thanks
> > --Sun, Yi
> >
> > > -----Original Message-----
> > > From: beignet-bounces at lists.freedesktop.org
> > > [mailto:beignet-bounces at lists.freedesktop.org] On Behalf Of Zhigang
> > > Gong
> > > Sent: Thursday, January 9, 2014 6:15 PM
> > > To: beignet at lists.freedesktop.org
> > > Cc: junyan.he at linux.intel.com; Simon.Richter at hogyros.de; Gong,
> > > Zhigang
> > > Subject: [Beignet] [PATCH 2/2] Refine the method to find pch and pcm files.
> > >
> > > When compile user kernels, we need to find the precompiled header
> > > file and the precompiled module file. The previous implementation
> > > will find the build directory then find the system directory.
> > >
> > > This is not elegant when it is packaged to a distro. It doesn't need
> > > to search the build directory. So I change the default search path
> > > to the
> > system directory only.
> > > And for the deveoper, I change the build script to set a proper
> > > environment variable and make the gbe bin generator and the utest
> > > could find the local pch files and pcm files firstly.
> > >
> > > The only change is now, after the build process. Before the user run
> > > the utests, it need to set up the environment firstly. Just invoke
> > >
> > > . utest/setenv.sh.
> > >
> > > Then everything should be the same as previous. This setenv.sh also
> > > set the OCL_KERNEL_PATH, so you don't need to set it manually now.
> > >
> > > This patch also update the document.
> > >
> > > Signed-off-by: Zhigang Gong <zhigang.gong at intel.com>
> > > ---
> > > backend/CMakeLists.txt | 6 ++++++
> > > backend/src/CMakeLists.txt | 8 ++++++--
> > > backend/src/GBEConfig.h.in | 2 +-
> > > backend/src/backend/program.cpp | 22 +++++++++++++---------
> > > docs/Beignet.mdwn | 20 ++++++++++++++++++--
> > > src/CMakeLists.txt | 3 +--
> > > utests/CMakeLists.txt | 11 ++++++++---
> > > utests/utest.cpp | 2 --
> > > 8 files changed, 53 insertions(+), 21 deletions(-)
> > >
> > > diff --git a/backend/CMakeLists.txt b/backend/CMakeLists.txt index
> > > 476c6f2..dd55a4a 100644
> > > --- a/backend/CMakeLists.txt
> > > +++ b/backend/CMakeLists.txt
> > > @@ -91,9 +91,15 @@ elseif (COMPILER STREQUAL "ICC")
> > > set (CCMAKE_CXX_FLAGS_MINSIZEREL "-Os -DGBE_DEBUG=0")
> > > set (CMAKE_EXE_LINKER_FLAGS "")
> > > endif ()
> > > +
> > > include_directories (${CMAKE_CURRENT_BINARY_DIR})
> > > ##############################################################
> > > # Project source code
> > >
> > ##############################################################
> > > add_subdirectory (src)
> > > +set(LOCAL_PCH_OBJECT_DIR ${LOCAL_PCH_OBJECT_DIR} PARENT_SCOPE)
> > > +set(LOCAL_PCM_OBJECT_DIR ${LOCAL_PCM_OBJECT_DIR}
> > PARENT_SCOPE)
> > > set
> > > +(GBE_BIN_GENERATER
> > > + OCL_PCM_PATH=${LOCAL_PCM_OBJECT_DIR}
> > > OCL_PCH_PATH=${LOCAL_PCH_OBJECT_DIR}
> > > ${CMAKE_CURRENT_BINARY_DIR}/src/gbe_bin_generater
> > > + PARENT_SCOPE)
> > >
> > > diff --git a/backend/src/CMakeLists.txt b/backend/src/CMakeLists.txt
> > > index
> > > d19cb50..d15e7b7 100644
> > > --- a/backend/src/CMakeLists.txt
> > > +++ b/backend/src/CMakeLists.txt
> > > @@ -195,9 +195,13 @@ TARGET_LINK_LIBRARIES(gbe_bin_generater gbe)
> > > install (FILES ${ocl_blob_file} DESTINATION lib/beignet) install
> > > (FILES ${pch_object} DESTINATION lib/beignet) install (FILES
> > > ${CMAKE_CURRENT_BINARY_DIR}/${pcm_lib} DESTINATION lib/beignet)
> > > +# When build beignet itself, we need to export the local
> > > +precompiled header file and precompiled module # file to libcl and utests.
> > > +set (LOCAL_PCH_OBJECT_DIR
> > > +"${local_pch_object}:${beignet_install_path}/ocl_stdlib.h.pch"
> > > +PARENT_SCOPE) set (LOCAL_PCM_OBJECT_DIR
> > >
> > +"${CMAKE_CURRENT_BINARY_DIR}/${pcm_lib}:${beignet_install_path}/${pc
> > > m_l
> > > +ib}" PARENT_SCOPE)
> > >
> > > -set (PCH_OBJECT_DIR
> > > "${local_pch_object};${beignet_install_path}/ocl_stdlib.h.pch")
> > > -set (PCM_LIB_DIR
> > >
> > "${CMAKE_CURRENT_BINARY_DIR}/${pcm_lib};${beignet_install_path}/${pcm
> > > _lib}")
> > > +set (PCH_OBJECT_DIR "${beignet_install_path}/ocl_stdlib.h.pch")
> > > +set (PCM_OBJECT_DIR "${beignet_install_path}/${pcm_lib}")
> > > configure_file (
> > > "GBEConfig.h.in"
> > > "GBEConfig.h"
> > > diff --git a/backend/src/GBEConfig.h.in b/backend/src/GBEConfig.h.in
> > > index
> > > 9920d25..5bc09b8 100644
> > > --- a/backend/src/GBEConfig.h.in
> > > +++ b/backend/src/GBEConfig.h.in
> > > @@ -2,4 +2,4 @@
> > > #define LIBGBE_VERSION_MAJOR @LIBGBE_VERSION_MAJOR@ #define
> > > LIBGBE_VERSION_MINOR @LIBGBE_VERSION_MINOR@ #define
> > PCH_OBJECT_DIR
> > > "@PCH_OBJECT_DIR@"
> > > -#define PCM_LIB_DIR "@PCM_LIB_DIR@"
> > > +#define PCM_OBJECT_DIR "@PCM_OBJECT_DIR@"
> > > diff --git a/backend/src/backend/program.cpp
> > > b/backend/src/backend/program.cpp index 3ab1bc2..284a755 100644
> > > --- a/backend/src/backend/program.cpp
> > > +++ b/backend/src/backend/program.cpp
> > > @@ -465,6 +465,9 @@ namespace gbe {
> > > }
> > >
> > > BVAR(OCL_OUTPUT_BUILD_LOG, false);
> > > + SVAR(OCL_PCH_PATH, PCH_OBJECT_DIR); SVAR(OCL_PCM_PATH,
> > > + PCM_OBJECT_DIR);
> > > +
> > > static bool buildModuleFromSource(const char* input, const char*
> > > output, std::string options,
> > > size_t stringSize, char *err,
> > > size_t *errSize) {
> > > // Arguments to pass to the clang frontend @@ -582,12 +585,13
> > > @@ namespace gbe {
> > > // Create an action and make the compiler instance carry it out
> > > llvm::OwningPtr<clang::CodeGenAction> Act(new
> > > clang::EmitLLVMOnlyAction());
> > >
> > > - std::string dirs = PCM_LIB_DIR, pcmLib;
> > > + std::string dirs = OCL_PCM_PATH;
> > > + std::string pcmFileName;
> > > std::istringstream idirs(dirs);
> > > bool findPcm = false;
> > >
> > > - while (getline(idirs, pcmLib, ';')) {
> > > - if(access(pcmLib.c_str(), R_OK) == 0) {
> > > + while (getline(idirs, pcmFileName, ':')) {
> > > + if(access(pcmFileName.c_str(), R_OK) == 0) {
> > > findPcm = true;
> > > break;
> > > }
> > > @@ -595,7 +599,7 @@ namespace gbe {
> > >
> > > GBE_ASSERT(findPcm && "Could not find pre compiled module
> > > library.\n");
> > >
> > > - Clang.getCodeGenOpts().LinkBitcodeFile = pcmLib;
> > > + Clang.getCodeGenOpts().LinkBitcodeFile = pcmFileName;
> > > auto retVal = Clang.ExecuteAction(*Act);
> > >
> > > if (err != NULL) {
> > > @@ -651,7 +655,6 @@ namespace gbe {
> > > char clStr[L_tmpnam+1], llStr[L_tmpnam+1];
> > > const std::string clName = std::string(tmpnam_r(clStr)) +
> > > ".cl"; /*
> > unsafe!
> > > */
> > > const std::string llName = std::string(tmpnam_r(llStr)) +
> > > ".ll"; /*
> > unsafe!
> > > */
> > > - std::string pchHeaderName;
> > > std::string clOpt;
> > > int optLevel = 1;
> > >
> > > @@ -730,11 +733,12 @@ namespace gbe {
> > > clOpt += options;
> > > }
> > >
> > > - std::string dirs = PCH_OBJECT_DIR;
> > > + std::string dirs = OCL_PCH_PATH;
> > > std::istringstream idirs(dirs);
> > > + std::string pchFileName;
> > >
> > > - while (getline(idirs, pchHeaderName, ';')) {
> > > - if(access(pchHeaderName.c_str(), R_OK) == 0) {
> > > + while (getline(idirs, pchFileName, ':')) {
> > > + if(access(pchFileName.c_str(), R_OK) == 0) {
> > > findPCH = true;
> > > break;
> > > }
> > > @@ -742,7 +746,7 @@ namespace gbe {
> > >
> > > if (usePCH && findPCH) {
> > > clOpt += " -include-pch ";
> > > - clOpt += pchHeaderName;
> > > + clOpt += pchFileName;
> > > clOpt += " ";
> > > } else
> > > fwrite(ocl_stdlib_str.c_str(),
> > > strlen(ocl_stdlib_str.c_str()), 1, clFile); diff --git
> > > a/docs/Beignet.mdwn b/docs/Beignet.mdwn index d05950f..e3b4b1b
> > > 100644
> > > --- a/docs/Beignet.mdwn
> > > +++ b/docs/Beignet.mdwn
> > > @@ -70,8 +70,10 @@ this code also produces various tests to ensure
> > > the compiler and the run-time consistency. This small test
> > > framework uses a simple c++ registration system to register all the unit tests.
> > >
> > > -You need to set the variable `OCL_KERNEL_PATH` to locate the OCL kernels.
> > > They -are with the run-time in `./kernels`.
> > > +You need to call setenv.sh in the utests/ directory to set some
> > > +environment variables firstly as below:
> > > +
> > > +`> . setenv.sh`
> > >
> > > Then in `utests/`:
> > >
> > > @@ -83,6 +85,20 @@ will run all the unit tests one after the others
> > >
> > > will only run `some_unit_test0` and `some_unit_test1` tests
> > >
> > > +How to install
> > > +--------------
> > > +
> > > +Simply invoke:
> > > +`> make install`
> > > +
> > > +It installs libcl.so and the precompiled header/module files and
> > > +the ocl_stdlib.h file into install_prefix/beignet/ direcotry. If
> > > +the system support ICD, it also installs the intel-beignet.icd to
> > /etc/OpenCL/vendors/.
> > > +
> > > +To make beignet support ICD, you need to have the following two
> > > +packages
> > > installed:
> > > +ocl-icd-dev, ocl-icd-libopencl1 (package name for the ubuntu.)
> > > +before your build beignet.
> > > +
> > > Supported Hardware
> > > ------------------
> > >
> > > diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index
> > > cf53a69..7d4d93d
> > > 100644
> > > --- a/src/CMakeLists.txt
> > > +++ b/src/CMakeLists.txt
> > > @@ -4,7 +4,6 @@ include_directories(${CMAKE_CURRENT_SOURCE_DIR}
> > >
> > > ${CMAKE_CURRENT_SOURCE_DIR}/../backend/src/backend/
> > > ${CMAKE_CURRENT_SOURCE_DIR}/../include
> > > ${MESA_SOURCE_INCLUDES})
> > > -
> > > macro (MakeKernelBinStr KERNEL_PATH KERNEL_FILES) foreach (KF
> > > ${KERNEL_FILES})
> > > set (input_file ${KERNEL_PATH}/${KF}.cl) @@ -13,7 +12,7 @@
> > > foreach (KF
> > > ${KERNEL_FILES})
> > > add_custom_command(
> > > OUTPUT ${output_file}
> > > COMMAND rm -rf ${output_file}
> > > - COMMAND
> > > ${CMAKE_CURRENT_BINARY_DIR}/../backend/src/gbe_bin_generater -s
> > > ${input_file} -o${output_file}
> > > + COMMAND ${GBE_BIN_GENERATER} -s ${input_file} -o${output_file}
> > > DEPENDS ${input_file}
> > > ${CMAKE_CURRENT_BINARY_DIR}/../backend/src/gbe_bin_generater)
> > > endforeach (KF)
> > > endmacro (MakeKernelBinStr)
> > > diff --git a/utests/CMakeLists.txt b/utests/CMakeLists.txt index
> > > b1f0b52..8c64844 100644
> > > --- a/utests/CMakeLists.txt
> > > +++ b/utests/CMakeLists.txt
> > > @@ -12,6 +12,11 @@ string(REGEX REPLACE "generated/([^\ ]*)\\.cpp"
> > > "${CMAKE_CURRENT_SOURCE_DIR}/../ string(REGEX REPLACE " " ";"
> > > KERNEL_MATH_LIST ${KERNEL_MATH_LIST})
> > > set_directory_properties(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES
> > > "generated;${KERNEL_MATH_LIST}")
> > >
> > > +configure_file (
> > > + "setenv.sh.in"
> > > + "setenv.sh"
> > > + )
> > > +
> > > link_directories (${LLVM_LIBRARY_DIR}) set (utests_sources
> > > utest_error.c
> > > @@ -170,7 +175,7 @@ set (utests_sources SET (kernel_bin
> > > ${CMAKE_CURRENT_SOURCE_DIR}/../kernels/compiler_ceil)
> > > ADD_CUSTOM_COMMAND(
> > > OUTPUT ${kernel_bin}.bin
> > > - COMMAND
> > > ${CMAKE_CURRENT_BINARY_DIR}/../backend/src/gbe_bin_generater
> > > ${kernel_bin}.cl -o${kernel_bin}.bin
> > > + COMMAND ${GBE_BIN_GENERATER} ${kernel_bin}.cl
> > -o${kernel_bin}.bin
> > > DEPENDS
> > > ${CMAKE_CURRENT_BINARY_DIR}/../backend/src/gbe_bin_generater
> > > ${kernel_bin}.cl
> > > )
> > >
> > > @@ -189,8 +194,8 @@ add_custom_target(utest_generator
> > >
> > > if (EGL_FOUND AND MESA_SOURCE_FOUND) SET(utests_sources
> > > ${utests_sources} compiler_fill_gl_image.cpp) -SET(CMAKE_CXX_FLAGS
> > > "-DHAS_EGL ${CMAKE_CXX_FLAGS}") -SET(CMAKE_C_FLAGS "-DHAS_EGL
> > > ${CMAKE_C_FLAGS}")
> > > +SET(CMAKE_CXX_FLAGS "-DHAS_EGL ${CMAKE_CXX_FLAGS}
> > > +${DEF_OCL_PCH_PCM_PATH}") SET(CMAKE_C_FLAGS "-DHAS_EGL
> > > ${CMAKE_C_FLAGS}
> > > +${DEF_OCL_PCH_PCM_PATH}")
> > > endif (EGL_FOUND AND MESA_SOURCE_FOUND)
> > >
> > > ADD_LIBRARY(utests SHARED ${ADDMATHFUNC} ${utests_sources}) diff
> > > --git a/utests/utest.cpp b/utests/utest.cpp index 6d51598..718916f
> > > 100644
> > > --- a/utests/utest.cpp
> > > +++ b/utests/utest.cpp
> > > @@ -41,8 +41,6 @@ UTest::UTest(Function fn, const char *name, bool
> > > haveIssue, bool needDestroyProg
> > > utestList->push_back(*this);
> > > }
> > >
> > > -UTest::UTest(void) : fn(NULL), name(NULL), haveIssue(false) {}
> > > -
> > > static bool strequal(const char *s1, const char *s2) {
> > > if (strcmp(s1, s2) == 0) return true;
> > > return false;
> > > --
> > > 1.7.9.5
> > >
> > > _______________________________________________
> > > Beignet mailing list
> > > Beignet at lists.freedesktop.org
> > > http://lists.freedesktop.org/mailman/listinfo/beignet
> > _______________________________________________
> > Beignet mailing list
> > Beignet at lists.freedesktop.org
> > http://lists.freedesktop.org/mailman/listinfo/beignet
> _______________________________________________
> Beignet mailing list
> Beignet at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/beignet
More information about the Beignet
mailing list