From: Zhigang Gong Date: Thu, 9 Jan 2014 06:20:29 +0000 (+0800) Subject: GBE: enable relocatable pch files. X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=c9d1b85a151ed3918a65584b654e5ff059a7724c;p=contrib%2Fbeignet.git GBE: enable relocatable pch files. As by default, when include a pch file, clang need to make sure the original header file is untouched. This is impossible when we want to distribute a pch file to a new system. We need to use the relocatable pch feature provided by clang here. We now create two pch files. One is relocatable pch file which is used to install to the system directory. The other is a local pch file which is used during the build time. We need both pch files because at the build time, we don't have an ocl_stdlib.h in the system directory. The local pch file is used for the beignet's build and the utest only. All the other applications will use the installed pch/pcm files. Signed-off-by: Zhigang Gong --- diff --git a/backend/src/CMakeLists.txt b/backend/src/CMakeLists.txt index b93133f..d19cb50 100644 --- a/backend/src/CMakeLists.txt +++ b/backend/src/CMakeLists.txt @@ -1,10 +1,13 @@ +set (beignet_install_path ${CMAKE_INSTALL_PREFIX}/lib/beignet/) + + set (ocl_vector_spec_file ${GBE_SOURCE_DIR}/src/builtin_vector_proto.def) set (ocl_vector_file ${GBE_SOURCE_DIR}/src/ocl_vector.h) set (ocl_as_file ${GBE_SOURCE_DIR}/src/ocl_as.h) set (ocl_convert_file ${GBE_SOURCE_DIR}/src/ocl_convert.h) set (ocl_stdlib_tmpl_file ${GBE_SOURCE_DIR}/src/ocl_stdlib.tmpl.h) set (ocl_common_header_file ${GBE_SOURCE_DIR}/src/ocl_common_defines.h) -set (ocl_blob_file ${CMAKE_CURRENT_BINARY_DIR}/ocl_stdlib.h) +set (ocl_blob_file ${CMAKE_CURRENT_BINARY_DIR}/${beignet_install_path}/ocl_stdlib.h) set (ocl_blob_cpp_file ${GBE_SOURCE_DIR}/src/ocl_stdlib_str.cpp) set (ocl_gen_blob_cmd ${GBE_SOURCE_DIR}/src/update_blob_ocl_header.py) set (ocl_gen_vector_cmd ${GBE_SOURCE_DIR}/src/gen_builtin_vector.py) @@ -23,28 +26,31 @@ add_custom_command( COMMAND echo "" >> ${ocl_blob_cpp_file} DEPENDS ${ocl_blob_file}) -set_property(DIRECTORY APPEND PROPERTY ADDITIONAL_MAKE_CLEAN_FILES "ocl_vector.h;ocl_stdlib.h") +set_property(DIRECTORY APPEND PROPERTY ADDITIONAL_MAKE_CLEAN_FILES "ocl_vector.h;${ocl_blob_file}") add_custom_command( OUTPUT ${ocl_vector_file} COMMAND ${PYTHON_EXECUTABLE} ${ocl_gen_vector_cmd} ${ocl_vector_spec_file} ${ocl_vector_file} - DEPENDS ${ocl_gen_vector_cmd} ${ocl_vector_spec_file}) + DEPENDS ${ocl_gen_vector_cmd} ${ocl_vector_spec_file} + ) add_custom_command( OUTPUT ${ocl_blob_file} + COMMAND mkdir -p ${CMAKE_CURRENT_BINARY_DIR}/${beignet_install_path} COMMAND ${PYTHON_EXECUTABLE} ${ocl_gen_blob_cmd} ${ocl_stdlib_tmpl_file} ${ocl_blob_file} - DEPENDS ${ocl_gen_blob_cmd} ${ocl_stdlib_tmpl_file} ${ocl_common_header_file} ${ocl_vector_file} ${ocl_as_file} ${ocl_convert_file}) - + DEPENDS ${ocl_gen_blob_cmd} ${ocl_stdlib_tmpl_file} ${ocl_common_header_file} ${ocl_vector_file} ${ocl_as_file} ${ocl_convert_file} + ) set (pch_object ${ocl_blob_file}.pch) +set (local_pch_object ${ocl_blob_file}.local.pch) # generate pch object if (LLVM_VERSION_NODOT VERSION_GREATER 32) - set (clang_cmd -cc1 -x cl -triple spir -ffp-contract=off -emit-pch) + set (clang_cmd -cc1 -x cl -triple spir -ffp-contract=off) else (LLVM_VERSION_NODOT VERSION_GREATER 32) if (LLVM_VERSION_NODOT VERSION_GREATER 31) - set (clang_cmd -cc1 -x cl -triple nvptx -ffp-contract=off -emit-pch) + set (clang_cmd -cc1 -x cl -triple nvptx -ffp-contract=off) else (LLVM_VERSION_NODOT VERSION_GREATER 31) - set (clang_cmd -cc1 -x cl -triple ptx32 -emit-pch) + set (clang_cmd -cc1 -x cl -triple ptx32) endif (LLVM_VERSION_NODOT VERSION_GREATER 31) endif (LLVM_VERSION_NODOT VERSION_GREATER 32) set (clang_cmd ${clang_cmd} -fno-builtin -DGEN7_SAMPLER_CLAMP_BORDER_WORKAROUND) @@ -52,7 +58,8 @@ set (clang_cmd ${clang_cmd} -fno-builtin -DGEN7_SAMPLER_CLAMP_BORDER_WORKAROUND) add_custom_command( OUTPUT ${pch_object} COMMAND rm -f ${pch_object} - COMMAND clang ${clang_cmd} ${ocl_blob_file} -o ${pch_object} + COMMAND clang ${clang_cmd} --relocatable-pch -emit-pch -isysroot ${CMAKE_CURRENT_BINARY_DIR} ${ocl_blob_file} -o ${pch_object} + COMMAND clang ${clang_cmd} -emit-pch ${ocl_blob_file} -o ${local_pch_object} DEPENDS ${ocl_blob_file} ) @@ -84,7 +91,7 @@ if (GBE_USE_BLOB) backend/gen/gen_mesa_disasm.c) else (GBE_USE_BLOB) set (GBE_SRC - ocl_stdlib.h + ${ocl_blob_file} ocl_stdlib_str.cpp # this file is auto-generated. sys/vector.hpp sys/hash_map.hpp @@ -185,11 +192,12 @@ TARGET_LINK_LIBRARIES(gbe_bin_generater gbe) #install (TARGETS gbe LIBRARY DESTINATION lib) #install (FILES backend/program.h DESTINATION include/gen) +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) -set (PCH_OBJECT_DIR "${pch_object};${CMAKE_INSTALL_PREFIX}/lib/beignet/ocl_stdlib.h.pch") -set (PCM_LIB_DIR "${CMAKE_CURRENT_BINARY_DIR}/${pcm_lib};${CMAKE_INSTALL_PREFIX}/lib/beignet/${pcm_lib}") +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}") configure_file ( "GBEConfig.h.in" "GBEConfig.h"