2015-02-09 2 views
0

Я пытаюсь добавить ядра OpenCL в проект CMake. Они должны быть скомпилированы в файлы .ptx как часть компиляции.Проект CMake: цели с разными определениями

Ядра живут в подкаталоге исходного дерева, а выход должен идти в двоичное дерево. Для каждого файла .cl будет один файл .ptx.

Мой вопрос заключается в том, как выразить это как пользовательскую команду 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-формате «сгустка» для компиляции в окончательном исполняемый файл, так что я полагаю, что нужно закончить с ${ptxFiles} списка, Я могу использовать в качестве параметра следующей команды DEPENDS.

ответ

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} 
) 
Смежные вопросы