É possível verificar a compilação do NVCC com o AutoConf?
Pergunta
Estou tentando testar algumas funções típicas do CUDA durante o processo de configuração. Como posso escrever na minha configuração.ac? Algo como:
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])
Mas o NVCC não é definido em AC_Lang. Devo criar minhas próprias macros M4?
Solução
Eu sou altamente duvidoso se é possível conectar de maneira limpa na série de macros AC_LANG, AC_TRY_COMPILE, etc. sem reescrever partes do AutoConf.
A aposta segura para você é apenas escrever um teste. A menos que você precise desse teste em vários projetos, você nem precisa envolver o teste no M4 Macros.
O teste veria primeiro para nvcc
, depois crie algum arquivo de fonte de teste e, finalmente, tente compilar isso usando $NVCC
. Em seguida, ele precisa examinar os resultados da compilação (código de retorno e arquivos gerados) e, finalmente, limpar os arquivos que poderiam ter gerado.
Algo como
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"])