¿Es posible comprobar la compilación NVCC con autoconf?
Pregunta
Estoy intentando probar algunas funciones típicas cuda durante el proceso de configuración. ¿Cómo puedo escribir en mi configure.ac? Algo así 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])
Pero NVCC no está definido en AC_LANG. ¿Debo crear mis propias macros m4?
Solución
Estoy muy dudoso si es posible conectar limpiamente en la AC_LANG, etc. AC_TRY_COMPILE serie de macros sin tener que volver a escribir partes de autoconf.
La apuesta segura para usted es simplemente escribir una prueba. A menos que necesite esa prueba en varios proyectos, que ni siquiera es necesario para envolver la prueba en m4 macros.
La prueba primero sería comprobar si hay nvcc
, a continuación, crear algún archivo fuente de prueba y, finalmente, tratar de compilar que el uso de $NVCC
. Entonces tiene que examinar los resultados de la compilación (código de retorno y los archivos generados), y, finalmente, para limpiar todos los archivos que podría haber generado.
Algo así 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"])