Чего я хочу достичь
Я пытаюсь настроить набор инструментов для компиляции приложений OpenCL для Intel FPGA. Поэтому после создания хост-приложения на основе C ++ мне нужно вызвать автономный компилятор Intel OpenCL для ядер OpenCL.
Этот шаг должен выполняться, только если исходный файл cl был отредактирован или полученные двоичные файлы отсутствуют. Мой подход заключается в добавлении пользовательской команды для вызова компилятора CL и создания пользовательской цели, которая зависит от вывода, сгенерированного этой командой. Автономный компилятор Open CL называется aoc
, и из-за возможности наличия нескольких версий SDK в системе я вызываю его с абсолютным путем, который хранится в aocExecutable
. Это соответствующая часть моего CMakeLists.txt
set (CLKernelName "vector_add")
set (CLKernelSourceFile "${PROJECT_SOURCE_DIR}/${CLKernelName}.cl")
set (CLKernelBinary "${PROJECT_BINARY_DIR}/${CLKernelName}.aocx")
add_executable (HostApplication main.cpp)
# ------ a lot of unneccessary details here ------
add_custom_command (OUTPUT "${CLKernelBinary}"
COMMAND "${aocExecutable} -march=emulator ${CLKernelSourceFile} -o ${CLKernelBinary}"
DEPENDS "${CLKernelSourceFile}"
)
add_custom_target (CompileCLSources DEPENDS "${CLKernelBinary}")
add_dependencies (HostApplication CompileCLSources)
Что не работает
Запуск этого в CLion IDE под Linux приводит к этой ошибке:
/bin/sh: 1: /home/me/SDKsAndFrameworks/intelFPGA/18.1/hld/bin/aoc -march=emulator /home/me/CLionProjects/cltest/vector_add.cl -o /home/me/CLionProjects/cltest/cmake-build-debug-openclintelfpgasimulation/vector_add.aocx: not found
Вся команда расширяется правильно, копирование и вставка в терминал работает без проблем, поэтому я не уверен, что означает ошибка not found
.
Дополнительный вопрос
Предполагая, что вышеуказанная проблема будет решена, как я могу добиться, чтобы пользовательская команда вызывалась не только, если выходной файл отсутствует в каталоге сборки, но также и если исходный файл CL был отредактирован?