Hi everyone. I use nvcc
and gcc
to develop the code. I use CMake
to compile and link. the CMakeLists.txt
is as follow
cmake_minimum_required(VERSION 3.21.3)
project(nmg_ddm LANGUAGES CXX C CUDA)
set(CMAKE_THREAD_LIBS_INIT "-lpthread")
set(CMAKE_HAVE_THREADS_LIBRARY 1)
set(CMAKE_USE_WIN32_THREADS_INIT 0)
set(CMAKE_USE_PTHREADS_INIT 1)
set(THREADS_PREFER_PTHREAD_FLAG ON)
set (CMAKE_CXX_FLAGS "-Wsign-compare -Wno-unused-variable -Wno-unused-parameter -Wdeprecated-copy ")
if (CMAKE_BUILD_TYPE STREQUAL "Debug")
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -fsanitize=address ")
endif()
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -ltbb")
#set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} --extended-lambda")
# setting for test for Poisson equ
#set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DTEST")
# setting for Debug mode
#set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DMyDebug")
if (CMAKE_BUILD_TYPE STREQUAL "RelWithDebInfo")
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g")
endif()
#set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -fuse-ld=lld")
#set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fuse-ld=lld")
#set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fuse-ld=lld")
find_package(MPI)
# CUDA
find_package(CUDA REQUIRED)
# VTK library
find_package(VTK REQUIRED COMPONENTS
vtkCommonColor
vtkCommonCore
vtkCommonDataModel
vtkInteractionStyle
vtkRenderingContextOpenGL2
vtkRenderingCore
vtkRenderingFreeType
vtkRenderingGL2PSOpenGL2
vtkRenderingOpenGL2
vtkCommonCore
vtkCommonDataModel
vtkIOXML
QUIET
)
if (NOT VTK_FOUND)
message("Skipping StructuredGrid: ${VTK_NOT_FOUND_MESSAGE}")
return ()
endif()
message (STATUS "VTK_VERSION: ${VTK_VERSION}")
if (VTK_VERSION VERSION_LESS "8.90.0")
# old system
INCLUDE_DIRECTORIES(include ${VTK_USE_FILE} ${VTK_INCLUDE_DIRS} )
FILE (GLOB LIB "src/*.cc")
FILE (GLOB LIB "src/*.cu")
CUDA_ADD_LIBRARY(lib SHARED ${LIB})
vtk_module_autoinit(
TARGETS lib
MODULES ${VTK_LIBRARIES}
)
TARGET_LINK_LIBRARIES(lib ${VTK_LIBRARIES} ${CUDA_LIBRARIES})
add_executable(${PROJECT_NAME} MACOSX_BUNDLE "test/main.cc")
TARGET_LINK_LIBRARIES(${PROJECT_NAME} lib ${VTK_LIBRARIES} ${CUDA_LIBRARIES})
else ()
# include all components
INCLUDE_DIRECTORIES(include ${VTK_INCLUDE_DIRS} ${CUDA_LIBRARIES} )
FILE (GLOB LIB "src/*.cc")
FILE (GLOB LIB "src/*.cu")
CUDA_ADD_LIBRARY(lib SHARED ${LIB})
vtk_module_autoinit(
TARGETS lib
MODULES ${VTK_LIBRARIES}
)
TARGET_LINK_LIBRARIES(lib ${VTK_LIBRARIES} ${CUDA_LIBRARIES} )
add_executable(${PROJECT_NAME} MACOSX_BUNDLE "test/main.cc")
TARGET_LINK_LIBRARIES(${PROJECT_NAME} lib ${VTK_LIBRARIES} ${CUDA_LIBRARIES} )
# vtk_module_autoinit is needed
vtk_module_autoinit(
TARGETS ${PROJECT_NAME}
MODULES ${VTK_LIBRARIES}
)
endif ()
running $cmake ..
it is ok. but running make
I get the following errors
[ 20%] Building NVCC (Device) object CMakeFiles/lib.dir/src/lib_generated_device_vector.cu.o
[ 40%] Building NVCC (Device) object CMakeFiles/lib.dir/src/lib_generated_device_matrix.cu.o
cc1plus: warning: /opt/cuda/lib64/libcudart_static.a: not a directory
cc1plus: warning: /usr/lib/librt.a: not a directory
cc1plus: warning: /opt/cuda/lib64/libcudart_static.a: not a directory
cc1plus: warning: /usr/lib/librt.a: not a directory
cc1plus: warning: /opt/cuda/lib64/libcudart_static.a: not a directory
cc1plus: warning: /usr/lib/librt.a: not a directory
cc1plus: warning: /opt/cuda/lib64/libcudart_static.a: not a directory
cc1plus: warning: /usr/lib/librt.a: not a directory
cc1plus: warning: /opt/cuda/lib64/libcudart_static.a: not a directory
cc1plus: warning: /usr/lib/librt.a: not a directory
cc1plus: warning: /opt/cuda/lib64/libcudart_static.a: not a directory
cc1plus: warning: /usr/lib/librt.a: not a directory
/usr/lib/gcc/x86_64-pc-linux-gnu/12.1.0/include/avx512fp16intrin.h(38): error: identifier "_Float16" is undefined
I use Arch Linux as OS.