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: [email protected] > [mailto:[email protected]] On Behalf Of Zhigang Gong > Sent: Thursday, January 9, 2014 6:15 PM > To: [email protected] > Cc: [email protected]; [email protected]; 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 <[email protected]> > --- > 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 > [email protected] > http://lists.freedesktop.org/mailman/listinfo/beignet _______________________________________________ Beignet mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/beignet
