我正在尝试将一些OpenCL内核添加到CMake项目中。这些需要编译成.ptx
文件作为编译的一部分。
内核位于源树的子目录中,输出应该进入二叉树。每个.ptx
文件都会有一个.cl
个文件。
我的问题是如何将其表达为CMake自定义命令?
我尝试了以下操作,但这是从带有单个预定义输出文件的自定义命令派生的 - 我现在有许多输出,其名称取决于输入。
set(OPENCL_CL_DIR ${CMAKE_CURRENT_SOURCE_DIR}/openclkern)
set(OPENCL_PTX_DIR ${CMAKE_CURRENT_BINARY_DIR}/openclkern/ptx)
set(OPENCL_CLOPTS "-cl-nv-verbose")
set(OPENCL_COMPILER ${CMAKE_SOURCE_DIR}/linux/clcc)
file (GLOB openclkern openclkern/*.cl)
ADD_CUSTOM_COMMAND(
OUTPUT ${OPENCL_PTX_DIR}
COMMAND "${OPENCL_COMPILER}" ${OPENCL_CLOPTS} ${OPENCL_PTX_DIR} ${openclkern}
DEPENDS ${openclkern}
)
这个编译步骤之后会有另一个自定义命令将.ptx
文件转换为C格式的“blob”,以便编译成最终的可执行文件,所以我想我最终需要{{1我可以用作下一个命令${ptxFiles}
参数的列表。
答案 0 :(得分:0)
最后,我通过使用简单的字符串替换构建输出列表来完成它,这给了我一个.ptx
文件列表,用作依赖项。
file (GLOB openclkern ${OPENCL_CL_DIR}/*.cl)
string(REPLACE ".cl" ".ptx" compiledkernels ${openclkern})
# compile .cl kernels to .ptx
ADD_CUSTOM_COMMAND(
OUTPUT ${compiledkernels}
COMMAND "${OPENCL_COMPILER}" ${OPENCL_CLOPTS} ${OPENCL_PTX_DIR} ${openclkern}
DEPENDS ${openclkern}
)