Always build beignet.pch and beignet.pch, and build beignet_20.bc and beignet_20.pch when enable OpenCL 2.0.
Signed-off-by: Yang Rong <[email protected]> --- backend/src/CMakeLists.txt | 6 ++ backend/src/GBEConfig.h.in | 2 + backend/src/libocl/CMakeLists.txt | 111 +++++++++++++++++++-------------- backend/src/libocl/src/ocl_vload_20.cl | 2 +- 4 files changed, 73 insertions(+), 48 deletions(-) diff --git a/backend/src/CMakeLists.txt b/backend/src/CMakeLists.txt index 6ff25e7..54be2cb 100644 --- a/backend/src/CMakeLists.txt +++ b/backend/src/CMakeLists.txt @@ -3,6 +3,10 @@ set (OCL_HEADER_DIR "${BEIGNET_INSTALL_DIR}/include") set (OCL_PCH_OBJECT "${BEIGNET_INSTALL_DIR}/beignet.pch") set (GBE_OBJECT_DIR "${BEIGNET_INSTALL_DIR}/libgbe.so") set (INTERP_OBJECT_DIR "${BEIGNET_INSTALL_DIR}/libgbeinterp.so") +if (ENABLE_OPENCL_20) +set (OCL_BITCODE_BIN_20 "${BEIGNET_INSTALL_DIR}/beignet_20.bc") +set (OCL_PCH_OBJECT_20 "${BEIGNET_INSTALL_DIR}/beignet_20.pch") +endif (ENABLE_OPENCL_20) configure_file ( "GBEConfig.h.in" @@ -197,6 +201,8 @@ endif () install (TARGETS gbe 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_OBJECT_DIR}/beignet_20.bc DESTINATION ${BEIGNET_INSTALL_DIR}) +install (FILES ${OCL_OBJECT_DIR}/beignet_20.pch DESTINATION ${BEIGNET_INSTALL_DIR}) install (FILES ${OCL_HEADER_FILES} DESTINATION ${BEIGNET_INSTALL_DIR}/include) endif (NOT (USE_STANDALONE_GBE_COMPILER STREQUAL "true")) diff --git a/backend/src/GBEConfig.h.in b/backend/src/GBEConfig.h.in index b5bec14..9514483 100644 --- a/backend/src/GBEConfig.h.in +++ b/backend/src/GBEConfig.h.in @@ -6,3 +6,5 @@ #define OCL_BITCODE_BIN "@OCL_BITCODE_BIN@" #define OCL_HEADER_DIR "@OCL_HEADER_DIR@" #define OCL_PCH_OBJECT "@OCL_PCH_OBJECT@" +#define OCL_BITCODE_BIN_20 "@OCL_BITCODE_BIN_20@" +#define OCL_PCH_OBJECT_20 "@OCL_PCH_OBJECT_20@" diff --git a/backend/src/libocl/CMakeLists.txt b/backend/src/libocl/CMakeLists.txt index e828fd0..a4f575f 100644 --- a/backend/src/libocl/CMakeLists.txt +++ b/backend/src/libocl/CMakeLists.txt @@ -68,7 +68,7 @@ FOREACH(M ${OCL_COPY_MODULES_12}) COPY_THE_SOURCE(OCL_SOURCE_FILES_12 ${M}) ENDFOREACH(M) -SET (OCL_COPY_MODULES_20 ocl_vload_20 ocl_atom ocl_atom_20 ocl_pipe) +SET (OCL_COPY_MODULES_20 ocl_vload_20 ocl_atom_20 ocl_pipe) FOREACH(M ${OCL_COPY_MODULES_20}) COPY_THE_HEADER(${M}) COPY_THE_SOURCE(OCL_SOURCE_FILES_20 ${M}) @@ -156,15 +156,15 @@ FOREACH(M ${OCL_BASH_GENERATED_MODULES}) GENERATE_SOURCE_BASH(${M}) ENDFOREACH(M) +SET (CLANG_OCL_FLAGS -fno-builtin -ffp-contract=off -triple spir -cl-kernel-arg-info -DGEN7_SAMPLER_CLAMP_BORDER_WORKAROUND "-cl-std=CL1.2" -D__OPENCL_C_VERSION__=120) +SET (CLANG_OCL_FLAGS_20 -fno-builtin -ffp-contract=off -triple spir64 -cl-kernel-arg-info -DGEN7_SAMPLER_CLAMP_BORDER_WORKAROUND "-cl-std=CL2.0" -D__OPENCL_C_VERSION__=200) -SET (CLANG_OCL_FLAGS -fno-builtin -ffp-contract=off -cl-kernel-arg-info -DGEN7_SAMPLER_CLAMP_BORDER_WORKAROUND "-cl-std=CL1.2") -MACRO(ADD_CL_TO_BC_TARGET _file) +MACRO(ADD_CL_TO_BC_TARGET _file _output _clang_flag) # CMake seems can not add pattern rule, use MACRO to replace. - STRING(REGEX REPLACE "${LIBOCL_BINARY_DIR}/src/\(o.*\)\\.cl" "${OCL_OBJECT_DIR}/\\1.bc" output_name ${_file}) - ADD_CUSTOM_COMMAND(OUTPUT ${output_name} + ADD_CUSTOM_COMMAND(OUTPUT ${_output} COMMAND mkdir -p ${OCL_OBJECT_DIR}/ - #COMMAND echo ${LLVM_INSTALL_DIR}clang -cc1 ${CLANG_OCL_FLAGS} -I ${LIBOCL_BINARY_DIR}/include/ -emit-llvm-bc -triple spir -o ${output_name} -x cl ${_file} - COMMAND ${CLANG_EXECUTABLE} -cc1 ${CLANG_OCL_FLAGS} -I ${OCL_OBJECT_DIR}/include/ -emit-llvm-bc -triple spir -o ${output_name} -x cl ${_file} + #COMMAND echo ${LLVM_INSTALL_DIR}clang -cc1 ${CLANG_OCL_FLAGS} -I ${LIBOCL_BINARY_DIR}/include/ -emit-llvm-bc -o ${output_name} -x cl ${_file} + COMMAND ${CLANG_EXECUTABLE} -cc1 ${_clang_flag} -I ${OCL_OBJECT_DIR}/include/ -emit-llvm-bc -o ${_output} -x cl ${_file} DEPENDS ${_file} ${OCL_HEADER_FILES} COMMENT "Compiling ${_file}" ) @@ -172,21 +172,15 @@ ENDMACRO(ADD_CL_TO_BC_TARGET) FOREACH(f ${OCL_SOURCE_FILES}) - ADD_CL_TO_BC_TARGET(${f}) STRING(REGEX REPLACE "${LIBOCL_BINARY_DIR}/src/\(o.*\)\\.cl" "${OCL_OBJECT_DIR}/\\1.bc" bc_name ${f}) - SET(OCL_BC_FILES ${OCL_BC_FILES} ${bc_name}) + SET(OCL_BC_FILES_12 ${OCL_BC_FILES_12} ${bc_name}) + ADD_CL_TO_BC_TARGET(${f} ${bc_name} "${CLANG_OCL_FLAGS}") ENDFOREACH(f) FOREACH(f ${OCL_SOURCE_FILES_12}) - ADD_CL_TO_BC_TARGET(${f}) STRING(REGEX REPLACE "${LIBOCL_BINARY_DIR}/src/\(o.*\)\\.cl" "${OCL_OBJECT_DIR}/\\1.bc" bc_name ${f}) SET(OCL_BC_FILES_12 ${OCL_BC_FILES_12} ${bc_name}) -ENDFOREACH(f) - -FOREACH(f ${OCL_SOURCE_FILES_20}) - ADD_CL_TO_BC_TARGET(${f}) - STRING(REGEX REPLACE "${LIBOCL_BINARY_DIR}/src/\(o.*\)\\.cl" "${OCL_OBJECT_DIR}/\\1.bc" bc_name ${f}) - SET(OCL_BC_FILES_20 ${OCL_BC_FILES_20} ${bc_name}) + ADD_CL_TO_BC_TARGET(${f} ${bc_name} "${CLANG_OCL_FLAGS}") ENDFOREACH(f) # handle the ll files @@ -213,19 +207,11 @@ MACRO(ADD_LL_TO_BC_TARGET M) #COMMAND echo ${LLVM_INSTALL_DIR}llvm-as -o ${output_name} ${srcll_name} COMMAND ${LLVM_AS_EXECUTABLE} -o ${output_name} ${srcll_name} DEPENDS ${srcll_name} - COMMENT "Compiling ${srcll_name}" + COMMENT "Compiling ${output_name}" ) ENDMACRO(ADD_LL_TO_BC_TARGET) -SET (OCL_LL_MODULES ocl_barrier ocl_clz) -FOREACH(f ${OCL_LL_MODULES}) - COPY_THE_LL(${f}) - ADD_LL_TO_BC_TARGET(${f}) - STRING(REGEX REPLACE "\(o.*\)" "${OCL_OBJECT_DIR}/\\1.bc" bc_name ${f}) - SET(OCL_BC_FILES ${OCL_BC_FILES} ${bc_name}) -ENDFOREACH(f) - -SET (OCL_LL_MODULES_12 ocl_ctz) +SET (OCL_LL_MODULES_12 ocl_barrier ocl_clz ocl_ctz) FOREACH(f ${OCL_LL_MODULES_12}) COPY_THE_LL(${f}) ADD_LL_TO_BC_TARGET(${f}) @@ -233,47 +219,78 @@ FOREACH(f ${OCL_LL_MODULES_12}) SET(OCL_BC_FILES_12 ${OCL_BC_FILES_12} ${bc_name}) ENDFOREACH(f) -SET (OCL_LL_MODULES_20 ocl_ctz_20 ocl_atomic_20) -FOREACH(f ${OCL_LL_MODULES_20}) - COPY_THE_LL(${f}) - ADD_LL_TO_BC_TARGET(${f}) - STRING(REGEX REPLACE "\(o.*\)" "${OCL_OBJECT_DIR}/\\1.bc" bc_name ${f}) - SET(OCL_BC_FILES_20 ${OCL_BC_FILES_20} ${bc_name}) -ENDFOREACH(f) - ADD_CUSTOM_COMMAND(OUTPUT ${OCL_OBJECT_DIR}/beignet.bc COMMAND mkdir -p ${LIBOCL_BINARY_DIR}/lib/ - #COMMAND echo llvm-link -o ${LIBOCL_BINARY_DIR}/lib/beignet.bc ${OCL_BC_FILES} - COMMAND ${LLVM_LINK_EXECUTABLE} -o ${OCL_OBJECT_DIR}/beignet.bc ${OCL_BC_FILES} ${OCL_BC_FILES_12} - DEPENDS ${OCL_BC_FILES} ${OCL_BC_FILES_12} + #COMMAND echo llvm-link -o ${LIBOCL_BINARY_DIR}/lib/beignet.bc ${OCL_BC_FILES12} + COMMAND ${LLVM_LINK_EXECUTABLE} -o ${OCL_OBJECT_DIR}/beignet.bc ${OCL_BC_FILES_12} + DEPENDS ${OCL_BC_FILES_12} COMMENT "Generate the bitcode file: ${OCL_OBJECT_DIR}/beignet.bc" ) +ADD_CUSTOM_COMMAND(OUTPUT ${OCL_OBJECT_DIR}/beignet.local.pch + COMMAND mkdir -p ${OCL_OBJECT_DIR} + COMMAND ${CLANG_EXECUTABLE} -cc1 ${CLANG_OCL_FLAGS} -I ${OCL_OBJECT_DIR}/include/ -emit-pch -x cl ${OCL_OBJECT_DIR}/include/ocl.h -o ${OCL_OBJECT_DIR}/beignet.local.pch + DEPENDS ${OCL_HEADER_FILES} + COMMENT "Generate the pch file: ${OCL_OBJECT_DIR}/beignet.local.pch" + ) + +ADD_CUSTOM_COMMAND(OUTPUT ${OCL_OBJECT_DIR}/beignet.pch + COMMAND mkdir -p ${OCL_OBJECT_DIR} + COMMAND ${CLANG_EXECUTABLE} -cc1 ${CLANG_OCL_FLAGS} -I ${OCL_OBJECT_DIR}/include/ --relocatable-pch -emit-pch -isysroot ${LIBOCL_BINARY_DIR} -x cl ${OCL_OBJECT_DIR}/include/ocl.h -o ${OCL_OBJECT_DIR}/beignet.pch + DEPENDS ${OCL_HEADER_FILES} + COMMENT "Generate the pch file: ${OCL_OBJECT_DIR}/beignet.pch" + ) + + if (ENABLE_OPENCL_20) -ADD_CUSTOM_COMMAND(OUTPUT ${OCL_OBJECT_DIR}/beignet_20.bc + FOREACH(f ${OCL_SOURCE_FILES}) + STRING(REGEX REPLACE "${LIBOCL_BINARY_DIR}/src/\(o.*\)\\.cl" "${OCL_OBJECT_DIR}/\\1_20.bc" bc_name ${f}) + SET(OCL_BC_FILES_20 ${OCL_BC_FILES_20} ${bc_name}) + ADD_CL_TO_BC_TARGET(${f} ${bc_name} "${CLANG_OCL_FLAGS_20}") + ENDFOREACH(f) + + FOREACH(f ${OCL_SOURCE_FILES_20}) + STRING(REGEX REPLACE "${LIBOCL_BINARY_DIR}/src/\(o.*\)\\.cl" "${OCL_OBJECT_DIR}/\\1.bc" bc_name ${f}) + SET(OCL_BC_FILES_20 ${OCL_BC_FILES_20} ${bc_name}) + ADD_CL_TO_BC_TARGET(${f} ${bc_name} "${CLANG_OCL_FLAGS_20}") + ENDFOREACH(f) + + SET (OCL_LL_MODULES_20 ocl_barrier_20 ocl_clz_20 ocl_ctz_20 ocl_atomic_20) + FOREACH(f ${OCL_LL_MODULES_20}) + COPY_THE_LL(${f}) + ADD_LL_TO_BC_TARGET(${f}) + STRING(REGEX REPLACE "\(o.*\)" "${OCL_OBJECT_DIR}/\\1.bc" bc_name ${f}) + SET(OCL_BC_FILES_20 ${OCL_BC_FILES_20} ${bc_name}) + ENDFOREACH(f) + + ADD_CUSTOM_COMMAND(OUTPUT ${OCL_OBJECT_DIR}/beignet_20.bc COMMAND mkdir -p ${LIBOCL_BINARY_DIR}/lib/ #COMMAND echo llvm-link -o ${LIBOCL_BINARY_DIR}/lib/beignet.bc ${OCL_BC_FILES} - COMMAND ${LLVM_LINK_EXECUTABLE} -o ${OCL_OBJECT_DIR}/beignet_20.bc ${OCL_BC_FILES} ${OCL_BC_FILES_20} - DEPENDS ${OCL_BC_FILES} ${OCL_BC_FILES_20} + COMMAND ${LLVM_LINK_EXECUTABLE} -o ${OCL_OBJECT_DIR}/beignet_20.bc ${OCL_BC_FILES_20} + DEPENDS ${OCL_BC_FILES_20} COMMENT "Generate the bitcode file: ${OCL_OBJECT_DIR}/beignet_20.bc" ) -endif (ENABLE_OPENCL_20) -ADD_CUSTOM_COMMAND(OUTPUT ${OCL_OBJECT_DIR}/beignet.local.pch + ADD_CUSTOM_COMMAND(OUTPUT ${OCL_OBJECT_DIR}/beignet_20.local.pch COMMAND mkdir -p ${OCL_OBJECT_DIR} - COMMAND ${CLANG_EXECUTABLE} -cc1 ${CLANG_OCL_FLAGS} -triple spir -I ${OCL_OBJECT_DIR}/include/ -emit-pch -x cl ${OCL_OBJECT_DIR}/include/ocl.h -o ${OCL_OBJECT_DIR}/beignet.local.pch + COMMAND ${CLANG_EXECUTABLE} -cc1 ${CLANG_OCL_FLAGS_20} -I ${OCL_OBJECT_DIR}/include/ -emit-pch -x cl ${OCL_OBJECT_DIR}/include/ocl.h -o ${OCL_OBJECT_DIR}/beignet_20.local.pch DEPENDS ${OCL_HEADER_FILES} - COMMENT "Generate the pch file: ${OCL_OBJECT_DIR}/beignet.local.pch" + COMMENT "Generate the pch file: ${OCL_OBJECT_DIR}/beignet_20.local.pch" ) -ADD_CUSTOM_COMMAND(OUTPUT ${OCL_OBJECT_DIR}/beignet.pch + ADD_CUSTOM_COMMAND(OUTPUT ${OCL_OBJECT_DIR}/beignet_20.pch COMMAND mkdir -p ${OCL_OBJECT_DIR} - COMMAND ${CLANG_EXECUTABLE} -cc1 ${CLANG_OCL_FLAGS} -triple spir -I ${OCL_OBJECT_DIR}/include/ --relocatable-pch -emit-pch -isysroot ${LIBOCL_BINARY_DIR} -x cl ${OCL_OBJECT_DIR}/include/ocl.h -o ${OCL_OBJECT_DIR}/beignet.pch + COMMAND ${CLANG_EXECUTABLE} -cc1 ${CLANG_OCL_FLAGS_20} -I ${OCL_OBJECT_DIR}/include/ --relocatable-pch -emit-pch -isysroot ${LIBOCL_BINARY_DIR} -x cl ${OCL_OBJECT_DIR}/include/ocl.h -o ${OCL_OBJECT_DIR}/beignet_20.pch DEPENDS ${OCL_HEADER_FILES} - COMMENT "Generate the pch file: ${OCL_OBJECT_DIR}/beignet.pch" + COMMENT "Generate the pch file: ${OCL_OBJECT_DIR}/beignet_20.pch" ) +endif (ENABLE_OPENCL_20) +if (ENABLE_OPENCL_20) +add_custom_target(beignet_bitcode ALL DEPENDS ${OCL_OBJECT_DIR}/beignet.bc ${OCL_OBJECT_DIR}/beignet_20.bc ${OCL_OBJECT_DIR}/beignet.pch ${OCL_OBJECT_DIR}/beignet_20.pch ${OCL_OBJECT_DIR}/beignet.local.pch ${OCL_OBJECT_DIR}/beignet_20.local.pch) +else(ENABLE_OPENCL_20) add_custom_target(beignet_bitcode ALL DEPENDS ${OCL_OBJECT_DIR}/beignet.bc ${OCL_OBJECT_DIR}/beignet.pch ${OCL_OBJECT_DIR}/beignet.local.pch) +endif (ENABLE_OPENCL_20) SET (OCL_OBJECT_DIR ${OCL_OBJECT_DIR} PARENT_SCOPE) SET (OCL_HEADER_FILES ${OCL_HEADER_FILES} PARENT_SCOPE) diff --git a/backend/src/libocl/src/ocl_vload_20.cl b/backend/src/libocl/src/ocl_vload_20.cl index a629f13..ab06aa2 100644 --- a/backend/src/libocl/src/ocl_vload_20.cl +++ b/backend/src/libocl/src/ocl_vload_20.cl @@ -16,7 +16,7 @@ * */ #pragma OPENCL EXTENSION cl_khr_fp64 : enable -#include "ocl_vload20.h" +#include "ocl_vload_20.h" #include "ocl_relational.h" // These loads and stores will use untyped reads and writes, so we can just -- 2.1.4 _______________________________________________ Beignet mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/beignet
