2009-12-29 79 views
0

我想在配置過程中測試一些典型的cuda功能。我怎樣才能在我的configure.ac中編寫它?例如:是否可以使用autoconf檢查nvcc編譯?

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]) 

但是AC_LANG中未定義nvcc。我必須創建自己的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

非常感謝。這是一個普通的autotools答案,但這正是我需要的。 – 2009-12-31 12:27:28