我正在尝试在配置过程中测试一些典型的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宏吗?
答案 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"])