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 <[email protected]> > --- > 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 > [email protected] > http://lists.freedesktop.org/mailman/listinfo/beignet _______________________________________________ Beignet mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/beignet
