2009-12-29 16 views
0

J'essaye de tester certaines fonctions cuda typiques pendant le processus de configuration. Comment puis-je l'écrire dans mon configure.ac? Quelque chose comme:Est-il possible de vérifier la compilation de nvcc avec 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]) 

Mais nvcc n'est pas défini dans AC_LANG. Dois-je créer mes propres macros m4?

Répondre

3

Je doute fortement qu'il soit possible de connecter proprement les séries de macros AC_LANG, AC_TRY_COMPILE etc. sans réécrire réellement des parties d'autoconf.

La valeur sûre pour vous est de simplement écrire un test. Si vous n'avez pas besoin de ce test dans plusieurs projets, vous n'avez même pas besoin d'encapsuler le test dans les macros m4.

Le test vérifie d'abord nvcc, puis crée un fichier source de test et finalement essaie de compiler en utilisant $NVCC. Ensuite, il doit examiner les résultats de la compilation (code retour et fichiers générés), et enfin nettoyer les fichiers qu'il a pu générer.

Quelque chose comme

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

Merci beaucoup. C'est plus une réponse autotools générale, mais c'est exactement ce dont j'ai besoin. –