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
