On Mon, 2014-01-13 at 16:38 +0800, Zhigang Gong wrote: > oops, you are right. Thanks for reporting this. > The new version patch is attached. Can you revert previous patch in master-branch and commit new patch? > > On Mon, Jan 13, 2014 at 09:07:15AM +0000, Sun, Yi wrote: > > 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 > _______________________________________________ > Beignet mailing list > [email protected] > http://lists.freedesktop.org/mailman/listinfo/beignet
-- -Igor Gnatenko _______________________________________________ Beignet mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/beignet
