是否可以使用autoconf检查nvcc编译?

时间:2009-12-29 10:06:46

标签: c cuda autoconf nvcc

我正在尝试在配置过程中测试一些典型的cuda功能。如何在configure.ac中编写它?类似的东西:

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宏吗?

1 个答案:

答案 0 :(得分: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"])