So recently I have been using dynamic parallelism with my cuda fluid simulation. Qt is my IDE of choice so ideally I needed it to be compiles with that. As there is not a lot of documentation on it I figured it would be a crime not to share with the world. So here is the .pro file! Enjoy!
TARGET=FluidSim OBJECTS_DIR=obj # as I want to support 4.8 and 5 this will set a flag for some of the mac stuff # mainly in the types.h file for the setMacVisual which is native in Qt5 isEqual(QT_MAJOR_VERSION, 5) { cache() DEFINES +=QT5BUILD } UI_HEADERS_DIR=ui MOC_DIR=moc CONFIG-=app_bundle QT+=gui opengl core SOURCES += #any srcs you hav HEADERS += #any headers you have FORMS += #whatever you want OTHER_FILES += #whaterver you want INCLUDEPATH +=./include /opt/local/include $$(HOME)/NGL/include/ LIBS += -L/opt/local/lib -lGLEW DESTDIR=./ CONFIG += console CONFIG -= app_bundle #This is some stuff for NGL the ncca graphics lib remove if you dont want it #---------------------------------------------------------------- #------------------------ NGL setup ----------------------------- #---------------------------------------------------------------- # use this to suppress some warning from boost QMAKE_CXXFLAGS_WARN_ON += "-Wno-unused-parameter" QMAKE_CXXFLAGS+= -msse -msse2 -msse3 macx:QMAKE_CXXFLAGS+= -arch x86_64 macx:INCLUDEPATH+=/usr/local/include/ # define the _DEBUG flag for the graphics lib DEFINES +=NGL_DEBUG unix:LIBS += -L/usr/local/lib # add the ngl lib unix:LIBS += -L/$(HOME)/NGL/lib -lNGL # now if we are under unix and not on a Mac (i.e. linux) define GLEW linux-*{ linux-*:QMAKE_CXXFLAGS += -march=native linux-*:DEFINES+=GL42 DEFINES += LINUX } DEPENDPATH+=include # if we are on a mac define DARWIN macx:DEFINES += DARWIN #---------------------------------------------------------------- #-------------------------Cuda setup----------------------------- #---------------------------------------------------------------- #set out cuda sources CUDA_SOURCES += cudaSrc/*.cu # Path to cuda SDK install macx:CUDA_DIR = /Developer/NVIDIA/CUDA-6.5 linux:CUDA_DIR = /usr/local/cuda-6.5 # Path to cuda toolkit install macx:CUDA_SDK = /Developer/NVIDIA/CUDA-6.5/samples linux:CUDA_SDK = /usr/local/cuda-6.5/samples #Cuda include paths INCLUDEPATH += $$CUDA_DIR/include INCLUDEPATH += $$CUDA_DIR/common/inc/ INCLUDEPATH += $$CUDA_DIR/../shared/inc/ #cuda libs macx:QMAKE_LIBDIR += $$CUDA_DIR/lib linux:QMAKE_LIBDIR += $$CUDA_DIR/lib64 QMAKE_LIBDIR += $$CUDA_SDK/common/lib #note for dynamic parallelism you need libcudadevrt LIBS += -lcudart -lcudadevrt # join the includes in a line CUDA_INC = $$join(INCLUDEPATH,' -I','-I',' ') # nvcc flags (ptxas option verbose is always useful) NVCCFLAGS = --compiler-options -fno-strict-aliasing -use_fast_math --ptxas-options=-v #prepare intermediat cuda compiler cudaIntr.input = CUDA_SOURCES cudaIntr.output = ${OBJECTS_DIR}${QMAKE_FILE_BASE}.o ## Tweak arch according to your hw's compute capability cudaIntr.commands = $$CUDA_DIR/bin/nvcc -m64 -g -G -gencode arch=compute_52,code=sm_52 -dc $$NVCCFLAGS $$CUDA_INC $$LIBS ${QMAKE_FILE_NAME} -o ${QMAKE_FILE_OUT} #Set our variable out. These obj files need to be used to create the link obj file #and used in our final gcc compilation cudaIntr.variable_out = CUDA_OBJ cudaIntr.variable_out += OBJECTS cudaIntr.clean = cudaIntrObj/*.o QMAKE_EXTRA_UNIX_COMPILERS += cudaIntr # Prepare the linking compiler step cuda.input = CUDA_OBJ cuda.output = ${QMAKE_FILE_BASE}_link.o # Tweak arch according to your hw's compute capability cuda.commands = $$CUDA_DIR/bin/nvcc -m64 -g -G -gencode arch=compute_52,code=sm_52 -dlink ${QMAKE_FILE_NAME} -o ${QMAKE_FILE_OUT} cuda.dependency_type = TYPE_C cuda.depend_command = $$CUDA_DIR/bin/nvcc -g -G -M $$CUDA_INC $$NVCCFLAGS ${QMAKE_FILE_NAME} # Tell Qt that we want add more stuff to the Makefile QMAKE_EXTRA_UNIX_COMPILERS += cuda
Hello, I am really stuck to compile and link file on windows.
Can you give a little help?
Best regard.
LikeLiked by 1 person
Hi Xavier,
Sorry for the late reply. What issues are you having? If you are using Qt I have some more recent projects on my github with a newer qmake for windows e.g.
https://github.com/DeclanRussell/Stippling
I also have a blog post about this, however with the latest CUDA release some of the information about compilers is a little out of date
https://declanrussell.com/2016/02/10/qt-cuda-and-windows-development/
Let me know how you get on π
Cheers
Dec
LikeLike
Thank you for your answer. I try your project and I get thate error:
obj\main.obj : fatal error LNK1112: module machine type ‘X86’ conflicts with target machine type ‘x64’
What should I modify?
LikeLike
I’m not a 100% sure but it looks like you might be trying to compile to 32bit. The libraries I have setup in the qmake all use 64bit. What compiler are you using? If 32bit try compiling with a 64bit compiler?
LikeLike
Indeed It was the reason. Now I would like to add more than one cu file in the project so I add SPHSolverCUDAKernals2.cu and I get that error:
tmpxft_000008f0_00000000-25_SPHSolverCUDAKernals2.ii: fatal error C1041: cannot open program database ‘C:\Users\seniordev\Desktop\build-Stippling-Desktop_Qt_5_6_2_MSVC2015_64bit-Release\vc140.pdb’; if multiple CL.EXE write to the same .PDB file, please use /FS
So I change the /MD to the /FS and I get the same error.
LikeLike
I had a couple of issues with added multiple .cu files on windows. For some reason qmake will just ignore all but the first file. Im sure there is probably a fix but I haven’t looked into it yet. As to your error however you need to turn off shadow building i.e. the Projects tab on the left then untick shadow build in the “General” field.
LikeLike
I unstick the shadow build but for the multiple cu file there are still error on the compilation
So there is no solution to compile multiple file on windows?
I already have project on Linux with multiple cu file which works properly but on Windows not.
LikeLike
Yeah, for some reason qmake behaves differently on windows to linux. I am unsure why. Personally I haven’t looked into a solution for windows as I haven’t had a need for multiple .cu files with my projects. However I’m sure there must be a neat trick to get around it. If you find a solution I would love to hear it π
LikeLike
Thanks! That was a big help!
LikeLiked by 1 person