if(ENABLE_GITEE_EULER)
    set(GIT_REPOSITORY "git@gitee.com:src-openeuler/opencl-clhpp.git")
    set(GIT_TAG "7347fa1bb52ebee9f3d6c44ff65ef3c4253cab79")
    set(SHA256 "d41d8cd98f00b204e9800998ecf8427e")

    if(EXISTS "${CMAKE_BINARY_DIR}/_deps/opencl-clhpp-src")
        # Extracting tarball into git repository would make git-status tainted, and case cmake rebuild error.
        # Here we clean source dir before rebuild to fix this error.
        file(REMOVE_RECURSE "${CMAKE_BINARY_DIR}/_deps/opencl-clhpp-src")
        file(REMOVE_RECURSE "${CMAKE_BINARY_DIR}/_deps/opencl-clhpp-build")
        file(REMOVE_RECURSE "${CMAKE_BINARY_DIR}/_deps/opencl-clhpp-subbuild")
    endif()

    __download_pkg_with_git(OpenCL-CLHPP ${GIT_REPOSITORY} ${GIT_TAG} ${SHA256})
    set(OPENCL_CLHPP_SRC "${CMAKE_BINARY_DIR}/_deps/opencl-clhpp-src")
    execute_process(COMMAND tar -xf ${OPENCL_CLHPP_SRC}/v2.0.12.tar.gz --strip-components 1 -C ${OPENCL_CLHPP_SRC})

    set(OPENCL_HEADER_SRC "${CMAKE_BINARY_DIR}/_deps/opencl-headers-src")
    file(MAKE_DIRECTORY "${OPENCL_HEADER_SRC}")
    execute_process(COMMAND tar -xf ${OPENCL_CLHPP_SRC}/v2020.12.18.tar.gz --strip-components 1 -C ${OPENCL_HEADER_SRC})
elseif(ENABLE_GITEE)
    set(REQ_URL "https://gitee.com/mirrors/OpenCL-Headers/repository/archive/v2020.12.18.tar.gz")# VER v2020.12.18
    set(SHA256 "076251b94284b931399ee525527bc9aef3f5f6f3f3b1964ae485218cc88956ba")
    __download_pkg(OpenCL-Headers ${REQ_URL} ${SHA256})
else()
    set(REQ_URL "https://github.com/KhronosGroup/OpenCL-Headers/archive/v2020.12.18.tar.gz")
    set(SHA256 "5dad6d436c0d7646ef62a39ef6cd1f3eba0a98fc9157808dfc1d808f3705ebc2")
    __download_pkg(OpenCL-Headers ${REQ_URL} ${SHA256})
endif()

function(gene_opencl CL_SRC_DIR)
    message(STATUS "**********gene opencl********* cl path: " "${CL_SRC_DIR}")
    if(NOT EXISTS ${CL_SRC_DIR})
        return()
    endif()
    file(GLOB_RECURSE CL_LIST ${CL_SRC_DIR}/*.cl)
    foreach(file_path ${CL_LIST})
        set(out_file_path "${file_path}.inc")
        file(REMOVE ${out_file_path})

        string(REGEX REPLACE ".+/(.+)\\..*" "\\1" kernel_name "${file_path}")
        file(READ ${file_path} cl_program)
        string(CONCAT cl_str "static const std::string ${kernel_name}_source = R\"(\n" "${cl_program}" ")\";")
        file(WRITE ${out_file_path} "${cl_str}")
    endforeach()
endfunction()