2009-12-29 5 views
0

Я пытаюсь проверить некоторые типичные функции cuda во время процесса настройки. Как я могу написать его в моем файле configure.ac? Что-то вроде:Можно ли проверить сборку nvcc с помощью autoconf?

AC_TRY_COMPILE([], 
[ 
__global__ static void test_cuda() { 
    const int tid = threadIdx.x; 
    const int bid = blockIdx.x; 
    __syncthreads(); 
} 
], 
[cuda_comp=ok],[cuda_comp=no]) 

Но nvcc не определен в AC_LANG. Должен ли я создавать свои собственные макросы m4?

ответ

3

Я очень сомневаюсь, можно ли легко подключить AC_LANG, AC_TRY_COMPILE и т. Д. Серии макросов без фактического перезаписи частей autoconf.

Безопасная ставка для вас - это просто написать тест. Если вам не нужен этот тест в нескольких проектах, вам даже не нужно переносить тест в макросы m4.

Тест сначала должен быть проверен на nvcc, а затем создать некоторый исходный тестовый файл и, наконец, попытаться скомпилировать его с помощью $NVCC. Затем нужно изучить результаты компиляции (код возврата и сгенерированные файлы) и, наконец, очистить все файлы, которые он мог бы сгенерировать.

Что-то вроде

AC_ARG_VAR([NVCC], [nvcc compiler to use]) 
AC_PATH_PROG([NVCC], [nvcc], [no]) 
working_nvcc=no 
if test "x$NVCC" != "xno" 
the 
    AC_MSG_CHECKING([whether nvcc works]) 
    cat>conftest.c<<EOF 
    __global__ whatever() { 
     ... 
    } 
EOF 
    if $NVCC conftest.c && test_whether_output_files_are_ok 
    then 
     working_nvcc=yes 
    fi 
    rm -f conftest.c conftest.o conftest.what conftest.ever 
    AC_MSG_RESULT([$working_nvcc]) 
fi 
AM_CONDITIONAL([WORKING_NVCC], [test "x$working_nvcc" = "xyes"]) 
+0

Спасибо много. Это более общий ответ автоуслуг, но это именно то, что мне нужно. –