Yes, I'm talking about test_load_program_from_bin_file. During build time, the source kernel is built into binary "compiler_ceil.bin" with the standalone compiler. During run time, the binary file is loaded and executed, no compiler is needed at this time.
-----Original Message----- From: Zhigang Gong [mailto:zhigang.g...@linux.intel.com] Sent: Wednesday, January 07, 2015 11:11 AM To: Guo, Yejun Cc: beignet@lists.freedesktop.org Subject: RE: [Beignet] [PATCH 2/3] support CL_EMBEDDED_PROFILE with offline compiler > -----Original Message----- > From: Beignet [mailto:beignet-boun...@lists.freedesktop.org] On Behalf > Of Guo, Yejun > Sent: Wednesday, January 7, 2015 10:54 AM > To: Zhigang Gong > Cc: beignet@lists.freedesktop.org > Subject: Re: [Beignet] [PATCH 2/3] support CL_EMBEDDED_PROFILE with > offline compiler > > Thanks for your nice comments, it would be much clear and user friendly. > > Could you review the third patch of this patch set? It is not relative > to the stand alone compiler, it is about to enable rtti compile > option, it is needed for some old stl version. I will review it latter. > > For the profile discussion, agree that the > CL_DEVICE_COMPILER_AVAILABLE could be true if we provide the stand > alone compiler. Just to clarify that the current implementation is to > report false if unable to load libgbe.so, we can add the stand alone > compiler into consideration, anyway, it can be discussed in a separate thread. Sure, that's next step. We could discuss it after this series laned. > > For the test case demo, there is a utest case shows how to use the > binary kernel, which is prebuilt by the standalone compiler, I'll > modify them to make it clearer. I just checked both binary load test cases: test_load_program_from_bin_file test_load_program_from_gen_bin None of them could work on target system without compiler. Is there any other cases I missed? > > For the CMake option name USE_STANDALONE_GBE_COMPILER, > STANDALONE_GBE_COMPILER_DIR, BUILD_STANDALONE_GBE_COMPILER, and utest > disable, and the document, do not object your comments, and will > modify accordingly. OK, thanks. > > -----Original Message----- > From: Beignet [mailto:beignet-boun...@lists.freedesktop.org] On Behalf > Of Zhigang Gong > Sent: Wednesday, January 07, 2015 8:31 AM > To: Guo, Yejun > Cc: beignet@lists.freedesktop.org > Subject: Re: [Beignet] [PATCH 2/3] support CL_EMBEDDED_PROFILE with > offline compiler > > Thanks for the patchset. > > I have the following comments as below: > > 1. It's better to use USE_STANDALONE_GBE_COMPILER rather than define a > STATIC_GBE_COMPILER_PATH to indicate we will use that standalone > gbe compiler. So we use USE_STANDALONE_GBE_COMPILER to control > whether > we will use a standalone compiler, then at configuration stage, we > need to write a new CMake script to find the > STANDALONE_GBE_COMPILER_DIR. > It may search from some default path and prefer to find it from the > environment variable GBE_BIN_GENERATER_PATH if possible. > > 2. If we set BUILD_STANDALONE_GBE_COMPILER, We'd better to write a new > cmake > target to generate such a standalone tarball includes: > beignet/beignet.bc > beignet/beignet.pch > beignet/include/ocl_xxx.h > beignet/gbe_bin_generator > Then user just need to untar this file to a standard path, such as > /usr/local/lib > or /usr/lib. Then on target system, user just need to set > USE_STANDALONE_GBE_COMPILER > and without set any other environment variables as the cmake script will > search that directory. If user want to put it in a customized place, then > user need to specify GBE_BIN_GENERATER_PATH. > > 3. As to the CL_EMBEDDED_PROFILE profile, I know you are talking about the > CL_DEVICE_COMPILER_AVAILABLE which must be true for full profile and > could be false for embedded profile. But other than that, we are comply > with full profile even on target system. And if the standalone compiler > could work, we even can make the compiler avialable, right? We need to > document the detail difference rather than say we support > CL_EMBEDDED_PROFILE, > and I also don't see you change the: > DECL_INFO_STRING(profile, "FULL_PROFILE") > I agree not to change that. > > 4. We need to disable all the unit test cases which require compiler. > > 5. We need to add some test cases to demostrate how to build gen > kernel binary > and how to load and run the gen kernel binary on target system. > > 6. We need a new document to specify the detail instructions of how to use > this > new function. > > Thanks, > Zhigang Gong. > > On Wed, Dec 31, 2014 at 03:35:19PM +0800, Guo Yejun wrote: > > At some platforms with old c/c++ environment, only > > CL_EMBEDDED_PROFILE is supported, but the offline compiler > > (gbe_bin_generater and some other files) is still needed during the > > build. So, add a CMAKE option STATIC_GBE_COMPILER_PATH as the path > > to the already built offline > compiler. > > Once this option is given, all the compiler relative code will not > > be built any more, only libcl.so and libgebinterp.so will be built. > > > > The process looks like: > > 1. build beignet with option BUILD_STATIC_GBE_COMPILER=true inside > > mainstream c/c++ environment. The built files under the build > > directory that we cared here are: > > backend/src/libocl//usr/local/lib/beignet//beignet.bc > > backend/src/libocl//usr/local/lib/beignet//beignet.pch > > backend/src/libocl//usr/local/lib/beignet//include/* > > backend/src/gbe_bin_generater > > > > 2. copy these files to /your_path_to_compiler inside old environment > > The files under /your_path_to_compiler looks like: > > beignet.bc beignet.pch gbe_bin_generater include > > > > 3. Within old environment, build with > > STATIC_GBE_COMPILER_PATH=/your_path_to_compiler > > libcl.so and libgbeinterp.so will be built here, libgbe.so and > > gbe_bin_generater will not be built here. > > > > Signed-off-by: Guo Yejun <yejun....@intel.com> > > --- > > CMakeLists.txt | 3 +++ > > backend/CMakeLists.txt | 20 +++++++++++++++++--- > > backend/src/CMakeLists.txt | 24 +++++++++++++++++------- > > src/CMakeLists.txt | 5 +++-- > > utests/CMakeLists.txt | 5 +++-- > > 5 files changed, 43 insertions(+), 14 deletions(-) > > > > diff --git a/CMakeLists.txt b/CMakeLists.txt index 4da3561..5cb31c2 > > 100644 > > --- a/CMakeLists.txt > > +++ b/CMakeLists.txt > > @@ -76,9 +76,12 @@ set (CMAKE_C_FLAGS_RELWITHDEBINFO "-O2 -g > -DGBE_DEBUG=1") > > set (CMAKE_C_FLAGS_MINSIZEREL "-Os -DNDEBUG > -DGBE_DEBUG=0") > > set (CMAKE_C_FLAGS_RELEASE "-O2 -DNDEBUG > -DGBE_DEBUG=0") > > > > +# Do not involve llvm if the offline compiler is given IF(NOT > > +STATIC_GBE_COMPILER_PATH) > > # Front end stuff we need > > #INCLUDE(CMake/FindLLVM.cmake) > > Find_Package(LLVM 3.3) > > +ENDIF(NOT STATIC_GBE_COMPILER_PATH) > > > > set (CMAKE_SHARED_LINKER_FLAGS "-Wl,--no-undefined > ${LLVM_LDFLAGS}") > > > > diff --git a/backend/CMakeLists.txt b/backend/CMakeLists.txt index > > bf96baf..36b6beb 100644 > > --- a/backend/CMakeLists.txt > > +++ b/backend/CMakeLists.txt > > @@ -36,14 +36,28 @@ include_directories > (${CMAKE_CURRENT_BINARY_DIR}) > > # Project source code > > ############################################################## > > add_subdirectory (src) > > + > > +if (STATIC_GBE_COMPILER_PATH) > > +set(LOCAL_OCL_BITCODE_BIN > ${STATIC_GBE_COMPILER_PATH}/beignet.bc) > > +set(LOCAL_OCL_HEADER_DIR ${STATIC_GBE_COMPILER_PATH}/include) > > +set(LOCAL_OCL_PCH_OBJECT > ${STATIC_GBE_COMPILER_PATH}/beignet.pch) > > +endif (STATIC_GBE_COMPILER_PATH) > > + > > set(LOCAL_OCL_BITCODE_BIN "${LOCAL_OCL_BITCODE_BIN}" > PARENT_SCOPE) > > set(LOCAL_OCL_HEADER_DIR "${LOCAL_OCL_HEADER_DIR}" > PARENT_SCOPE) > > set(LOCAL_OCL_PCH_OBJECT "${LOCAL_OCL_PCH_OBJECT}" > PARENT_SCOPE) > > - > > set(LOCAL_GBE_OBJECT_DIR ${LOCAL_GBE_OBJECT_DIR} > PARENT_SCOPE) > > set(LOCAL_INTERP_OBJECT_DIR ${LOCAL_INTERP_OBJECT_DIR} > PARENT_SCOPE) > > > > set (GBE_BIN_GENERATER > > - env OCL_BITCODE_LIB_PATH=${LOCAL_OCL_BITCODE_BIN} > OCL_HEADER_FILE_DIR=${LOCAL_OCL_HEADER_DIR} > OCL_PCH_PATH=${LOCAL_OCL_PCH_OBJECT} > LD_LIBRARY_PATH=${CMAKE_CURRENT_BINARY_DIR}/src > ${CMAKE_CURRENT_BINARY_DIR}/src/gbe_bin_generater > > - PARENT_SCOPE) > > + env OCL_BITCODE_LIB_PATH=${LOCAL_OCL_BITCODE_BIN} > > + OCL_HEADER_FILE_DIR=${LOCAL_OCL_HEADER_DIR} > > + OCL_PCH_PATH=${LOCAL_OCL_PCH_OBJECT}) > > > > +if (STATIC_GBE_COMPILER_PATH) > > +set (GBE_BIN_GENERATER > > + ${GBE_BIN_GENERATER} > ${STATIC_GBE_COMPILER_PATH}/gbe_bin_generater > > + PARENT_SCOPE) > > +else (STATIC_GBE_COMPILER_PATH) > > +set (GBE_BIN_GENERATER > > + ${GBE_BIN_GENERATER} > LD_LIBRARY_PATH=${CMAKE_CURRENT_BINARY_DIR}/src > ${CMAKE_CURRENT_BINARY_DIR}/src/gbe_bin_generater > > + PARENT_SCOPE) > > +endif (STATIC_GBE_COMPILER_PATH) > > diff --git a/backend/src/CMakeLists.txt b/backend/src/CMakeLists.txt > > index 118a745..81cf7b8 100644 > > --- a/backend/src/CMakeLists.txt > > +++ b/backend/src/CMakeLists.txt > > @@ -9,15 +9,19 @@ configure_file ( > > "GBEConfig.h" > > ) > > > > +#do not involve libocl if the offline compiler is given, #since we > > +will not build the online compiler if (NOT > > +STATIC_GBE_COMPILER_PATH) > > add_subdirectory(libocl) > > +add_dependencies(beignet_bitcode libocl) endif () > > + > > set (LOCAL_GBE_OBJECT_DIR > "${CMAKE_CURRENT_BINARY_DIR}/libgbe.so" > > PARENT_SCOPE) set (LOCAL_INTERP_OBJECT_DIR > > "${CMAKE_CURRENT_BINARY_DIR}/libgbeinterp.so" PARENT_SCOPE) set > > (LOCAL_OCL_BITCODE_BIN "${OCL_OBJECT_DIR}/beignet.bc" > PARENT_SCOPE) > > set (LOCAL_OCL_HEADER_DIR "${OCL_OBJECT_DIR}/include/" > PARENT_SCOPE) > > set (LOCAL_OCL_PCH_OBJECT "${OCL_OBJECT_DIR}/beignet.local.pch" > > PARENT_SCOPE) > > > > -add_dependencies(beignet_bitcode libocl) > > - > > set (GBE_SRC > > ${ocl_blob_file} > > sys/vector.hpp > > @@ -130,14 +134,16 @@ set (GBE_LINK_LIBRARIES include_directories > > (.) link_directories (${LLVM_LIBRARY_DIRS} ${DRM_LIBDIR}) > > include_directories(${LLVM_INCLUDE_DIRS}) > > -add_library (gbe SHARED ${GBE_SRC}) > > > > +#don't build libgbe (the online compiler) if the offline compiler > > +is given if (NOT STATIC_GBE_COMPILER_PATH) add_library (gbe SHARED > > +${GBE_SRC}) > > target_link_libraries(gbe ${GBE_LINK_LIBRARIES}) > > +add_dependencies(gbe beignet_bitcode) endif (NOT > > +STATIC_GBE_COMPILER_PATH) > > > > add_library(gbeinterp SHARED gbe_bin_interpreter.cpp) > > > > -add_dependencies(gbe beignet_bitcode) > > - > > if (LLVM_VERSION_NODOT VERSION_EQUAL 34) > > find_library(TERMINFO NAMES tinfo ncurses) > > if (${TERMINFO} STREQUAL TERMINFO-NOTFOUND) @@ -150,6 +156,9 > @@ > > endif(LLVM_VERSION_NODOT VERSION_EQUAL 34) > > > > link_directories (${LLVM_LIBRARY_DIR} ${DRM_LIBDIR}) > > > > + > > +#if the offline compiler is given, do not build/install it anymore > > +if (NOT STATIC_GBE_COMPILER_PATH) > > if (BUILD_STATIC_GBE_COMPILER STREQUAL "true") > macro(remove_cxx_flag > > flag) > > string(REPLACE "${flag}" "" CMAKE_CXX_FLAGS > "${CMAKE_CXX_FLAGS}") > > @@ -164,9 +173,10 @@ ADD_EXECUTABLE(gbe_bin_generater > > gbe_bin_generater.cpp) TARGET_LINK_LIBRARIES(gbe_bin_generater gbe) > > endif (BUILD_STATIC_GBE_COMPILER STREQUAL "true") > > > > - > > install (TARGETS gbe LIBRARY DESTINATION ${BEIGNET_INSTALL_DIR}) > > -install (TARGETS gbeinterp LIBRARY DESTINATION > > ${BEIGNET_INSTALL_DIR}) install (FILES ${OCL_OBJECT_DIR}/beignet.bc > > DESTINATION ${BEIGNET_INSTALL_DIR}) install (FILES > > ${OCL_OBJECT_DIR}/beignet.pch DESTINATION ${BEIGNET_INSTALL_DIR}) > > install (FILES ${OCL_HEADER_FILES} DESTINATION > > ${BEIGNET_INSTALL_DIR}/include) > > +endif (NOT STATIC_GBE_COMPILER_PATH) > > + > > +install (TARGETS gbeinterp LIBRARY DESTINATION > > +${BEIGNET_INSTALL_DIR}) > > diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index > > 7182bad..a55f84d 100644 > > --- a/src/CMakeLists.txt > > +++ b/src/CMakeLists.txt > > @@ -10,18 +10,19 @@ foreach (KF ${KERNEL_FILES}) > > set (input_file ${KERNEL_PATH}/${KF}.cl) > > set (output_file ${KERNEL_PATH}/${KF}_str.c) > > list (APPEND KERNEL_STR_FILES ${output_file}) > > + list (GET GBE_BIN_GENERATER -1 GBE_BIN_FILE) > > if(GEN_PCI_ID) > > add_custom_command( > > OUTPUT ${output_file} > > COMMAND rm -rf ${output_file} > > COMMAND ${GBE_BIN_GENERATER} -s ${input_file} > > -o${output_file} > -t${GEN_PCI_ID} > > - DEPENDS ${input_file} > ${CMAKE_CURRENT_BINARY_DIR}/../backend/src/gbe_bin_generater) > > + DEPENDS ${input_file} ${GBE_BIN_FILE}) > > else(GEN_PCI_ID) > > add_custom_command( > > OUTPUT ${output_file} > > COMMAND rm -rf ${output_file} > > COMMAND ${GBE_BIN_GENERATER} -s ${input_file} > -o${output_file} > > - DEPENDS ${input_file} > ${CMAKE_CURRENT_BINARY_DIR}/../backend/src/gbe_bin_generater) > > + DEPENDS ${input_file} ${GBE_BIN_FILE}) > > endif(GEN_PCI_ID) > > endforeach (KF) > > endmacro (MakeKernelBinStr) > > diff --git a/utests/CMakeLists.txt b/utests/CMakeLists.txt index > > 5b29c0b..9623dc1 100644 > > --- a/utests/CMakeLists.txt > > +++ b/utests/CMakeLists.txt > > @@ -219,16 +219,17 @@ endif (X11_FOUND) > > > > SET (kernel_bin > ${CMAKE_CURRENT_SOURCE_DIR}/../kernels/compiler_ceil) > > > > +list (GET GBE_BIN_GENERATER -1 GBE_BIN_FILE) > > if(GEN_PCI_ID) > > ADD_CUSTOM_COMMAND( > > OUTPUT ${kernel_bin}.bin > > COMMAND ${GBE_BIN_GENERATER} ${kernel_bin}.cl -o${kernel_bin}.bin > > -t${GEN_PCI_ID} > > - DEPENDS > > ${CMAKE_CURRENT_BINARY_DIR}/../backend/src/gbe_bin_generater > > ${kernel_bin}.cl) > > + DEPENDS ${GBE_BIN_FILE} ${kernel_bin}.cl) > > else(GEN_PCI_ID) > > ADD_CUSTOM_COMMAND( > > OUTPUT ${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) > > + DEPENDS ${GBE_BIN_FILE} ${kernel_bin}.cl) > > endif(GEN_PCI_ID) > > > > ADD_CUSTOM_TARGET(kernel_bin.bin > > -- > > 1.9.1 > > > > _______________________________________________ > > Beignet mailing list > > Beignet@lists.freedesktop.org > > http://lists.freedesktop.org/mailman/listinfo/beignet > _______________________________________________ > Beignet mailing list > Beignet@lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/beignet > _______________________________________________ > Beignet mailing list > Beignet@lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/beignet _______________________________________________ Beignet mailing list Beignet@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/beignet