Add CUDA Build Rules to Visual Studio

Posted: September 22, 2009 in CUDA

CUDA build rule can be found at NVSDKCUDA_ROOT\common folder. In that folder you can find Cuda.rules. Copy that Cuda.rules to VC\VCProjectDefaults in Microsoft Visual Studio installed directory.

If you can’t find Cuda.rules in your system then copy the below to a file and save it as Cuda.rules and follow the steps given above. The CUDA build rule for version 2.1.1

Cuda.rules

<?xml version="1.0" encoding="utf-8"?>
<VisualStudioToolFile
 Name="CUDA Build Rule v2.1.1"
 Version="8.00"
 >
 <Rules>
 <CustomBuildRule
 Name="CUDA Build Rule"
 DisplayName="CUDA Build Rule v2.1.1"
 CommandLine="echo [CompilerPath] [Keep] [ExtraNvccOptions] [Arch] -

ccbin &quot;$(VCInstallDir)bin&quot; [Emulation] [FastMath] [Defines] -Xcompiler &quot;/EHsc 

[Warning] /nologo [Optimization] /Zi [RuntimeChecks] [Runtime] [TypeInfo] [ExtraCppOptions]

&quot; [Include] [MaxRegCount] [PtxAsOptionV] [NvccCompilation] $(InputFileName) 
 

[CompilerPath] [Keep] [ExtraNvccOptions] [Arch] -ccbin &quot;$(VCInstallDir)bin&quot; 

[Emulation] [FastMath] [Defines] -Xcompiler &quot;/EHsc [Warning] /nologo [Optimization] /Zi 

[RuntimeChecks] [Runtime] [TypeInfo] [ExtraCppOptions]&quot; [Include] [MaxRegCount] 

[ptxasoptionv] [NvccCompilation] &quot;$(InputPath)&quot;"
 Outputs="[compileout]"
 AdditionalDependencies="[AddedDependencies]"
 FileExtensions="*.cu"
 ExecutionDescription="Compiling with CUDA Build Rule..."
 >
 <Properties>
 <StringProperty
 Name="Include"
 DisplayName="Additional Include Directories"
 Description="Specifies one or more directories to add 

to the include path; use semi-colon delimited list if more than one.  (/I[path])"
 Switch="-I&quot;[value]&quot;"
 DefaultValue="&quot;$(CUDA_INC_PATH)&quot;"
 Inheritable="true"
 Delimited="true"
 Delimiters=";"
 />
 <BooleanProperty
 Name="Debug"
 DisplayName="Generate Debug Information"
 Description="Specifies whether or not debugging 

information is generated by the CUDA compiler.  (-D_DEBUG)"
 Switch="-D_DEBUG"
 />
 <EnumProperty
 Name="NvccCompilation"
 DisplayName="NVCC Compilation Type"
 Description="Select desired output of NVCC compilation 

(-c/-compile, -cuda, -gpu, -cubin, -ptx)"
 >
 <Values>
 <EnumValue
 Value="0"
 Switch="--compile -o &quot;$(IntDir)

\$(InputName).cu.obj&quot;"
 DisplayName="Generate hybrid object 

file  (--compile / -c)"
 />
 <EnumValue
 Value="1"
 Switch="-cuda -o &quot;$(IntDir)

\$(InputName).cu.c&quot;"
 DisplayName="Generate hybrid .c file  

(-cuda)"
 />
 <EnumValue
 Value="2"
 Switch="-gpu -o &quot;$(IntDir)

\$(InputName).gpu&quot;"
 DisplayName="Generate .gpu file  (-

gpu)"
 />
 <EnumValue
 Value="3"
 Switch="-m32 -cubin -o 

&quot;data\$(InputName).cubin&quot;"
 DisplayName="Generate .cubin file  (-

cubin)"
 />
 <EnumValue
 Value="4"
 Switch="-ptx -o &quot;$(IntDir)

\$(InputName).ptx&quot;"
 DisplayName="Generate .ptx file  (-

ptx)"
 />
 </Values>
 </EnumProperty>
 <EnumProperty
 Name="compileout"
 DisplayName="Compiler Output (obj/cubin)"
 Description="Sets output as an OBJ or cubin file"
 >
 <Values>
 <EnumValue
 Value="0"
 Switch="&quot;$(IntDir)/

$(InputName).cu.obj&quot;"
 DisplayName="&quot;$(IntDir)/

$(InputName).cu.obj&quot;"
 />
 <EnumValue
 Value="1"
 Switch="&quot;data/

$(InputName).cubin&quot;"
 DisplayName="&quot;data/

$(InputName).cubin&quot;"
 />
 </Values>
 </EnumProperty>
 <EnumProperty
 Name="Arch"
 DisplayName="GPU Architecture"
 Description="Select option for the GPU architecture to 

use on the command line (-arch sm_10, sm_11, sm_12, sm_13)"
 DefaultValue="10"
 >
 <Values>
 <EnumValue
 Value="10"
 Switch="-arch sm_10"
 DisplayName="sm_10"
 />
 <EnumValue
 Value="11"
 Switch="-arch sm_11"
 DisplayName="sm_11"
 />
 <EnumValue
 Value="12"
 Switch="-arch sm_12"
 DisplayName="sm_12"
 />
 <EnumValue
 Value="13"
 Switch="-arch sm_13"
 DisplayName="sm_13"
 />
 </Values>
 </EnumProperty>
 <EnumProperty
 Name="CompilerPath"
 DisplayName="Path to nvcc.exe"
 Description="Specifies the path to the CUDA compiler, 

nvcc.exe "
 >
 <Values>
 <EnumValue
 Value="0"
 Switch="&quot;$(CUDA_BIN_PATH)

\nvcc.exe&quot;"
 DisplayName="Installed Toolkit (uses 

CUDA_BIN_PATH environment varible)"
 />
 <EnumValue
 Value="1"
 Switch="&quot;[AlternateNvccPath]

&quot;"
 DisplayName="Use Alternate path to 

CUDA, specified below"
 />
 </Values>
 </EnumProperty>
 <StringProperty
 Name="AlternateNvccPath"
 DisplayName="Alternate path to nvcc.exe (non-standard 

installation)"
 Switch="[value]\nvcc.exe"
 />
 <BooleanProperty
 Name="Emulation"
 DisplayName="Emulation Mode"
 Description="Whether or not to generate emulated 

code."
 Switch="-deviceemu -D_DEVICEEMU"
 />
 <BooleanProperty
 Name="FastMath"
 DisplayName="Use Fast Math"
 Category="Default"
 Description="Make use of the fast math library."
 Switch="-use_fast_math"
 />
 <IntegerProperty
 Name="MaxRegCount"
 DisplayName="maxrregcount"
 Switch="-maxrregcount=[Value]"
 DefaultValue="32"
 />
 <BooleanProperty
 Name="PtxAsOptionV"
 DisplayName="Verbose PTXAS Output"
 Switch="--ptxas-options=-v"
 />
 <StringProperty
 Name="ExtraNvccOptions"
 DisplayName="Extra Options"
 Description="Supply any additional command line 

options to NVCC"
 Switch="[value]"
 />
 <StringProperty
 Name="Defines"
 DisplayName="Preprocessor Definitions"
 PropertyPageName="Preprocessor"
 Description="Specifies one or more preprocessor 

defines.  (-D[macro])"
 Switch="-D[value]"
 Delimited="true"
 Inheritable="true"
 />
 <BooleanProperty
 Name="Keep"
 DisplayName="Keep preprocessed files (.ptx, .cubin, 

cudafe1.c, cudafe1.cpp, cudafe1.gpu, etc.)"
 PropertyPageName="Preprocessor"
 Description="Specifies that preprocessor files 

generated by the CUDA compiler are not deleted."
 Switch="--keep"
 />
 <EnumProperty
 Name="Warning"
 DisplayName="Warning Level"
 PropertyPageName="Hybrid CUDA/C++ Options"
 Description="Select how strict you want the compiler 

to be about checking for potentially suspect constructs.   (/W0 - /W4)"
 DefaultValue="3"
 >
 <Values>
 <EnumValue
 Value="0"
 Switch="/W0"
 DisplayName="Off: Turn Off All 

Warnings (/W0)"
 />
 <EnumValue
 Value="1"
 Switch="/W1"
 DisplayName="Level 1 (/W1)"
 />
 <EnumValue
 Value="2"
 Switch="/W2"
 DisplayName="Level 2 (/W2)"
 />
 <EnumValue
 Value="3"
 Switch="/W3"
 DisplayName="Level 3 (/W3)"
 />
 <EnumValue
 Value="4"
 Switch="/W4"
 DisplayName="Level 4 (/W4)"
 />
 </Values>
 </EnumProperty>
 <EnumProperty
 Name="Optimization"
 DisplayName="Optimization"
 Description="Select option for code optimization; 

choose Custom to use specific optimization options.  (/Od, /O1, /O2, /Ox)"
 DefaultValue="2"
 >
 <Values>
 <EnumValue
 Value="0"
 Switch="/Od"
 DisplayName="Disabled (/Od)"
 />
 <EnumValue
 Value="1"
 Switch="/O1"
 DisplayName="Minimize Size (/O1)"
 />
 <EnumValue
 Value="2"
 Switch="/O2"
 DisplayName="Maximize Speed (/O2)"
 />
 <EnumValue
 Value="3"
 Switch="/Ox"
 DisplayName="Full Optimization (/Ox)"
 />
 </Values>
 </EnumProperty>
 <StringProperty
 Name="AddedDependencies"
 DisplayName="Source Dependencies"
 Description="Add additional CUDA file dependencies"
 Switch="[value]"
 />
 <EnumProperty
 Name="RuntimeChecks"
 DisplayName="Basic Runtime Checks"
 PropertyPageName="Hybrid CUDA/C++ Options"
 Description="Perform basic runtime error checks, 

incompatible with any optimization type other than debug.   (/RTCs, /RTCu, /RTC1)"
 >
 <Values>
 <EnumValue
 Value="0"
 Switch=" "
 DisplayName="Default"
 />
 <EnumValue
 Value="1"
 Switch="/RTCs"
 DisplayName="Stack Frames (/RTCs)"
 />
 <EnumValue
 Value="2"
 Switch="/RTCu"
 DisplayName="Uninitialized Variables 

(/RTCu)"
 />
 <EnumValue
 Value="3"
 Switch="/RTC1"
 DisplayName="Both (/RTC1, equiv. to 

/RTCsu)"
 />
 </Values>
 </EnumProperty>
 <EnumProperty
 Name="Runtime"
 DisplayName="Runtime Library"
 PropertyPageName="Hybrid CUDA/C++ Options"
 Description="Specify runtime library for linking.   

(/MT, /MTd, /MD, /MDd, /ML, /MLd)"
 >
 <Values>
 <EnumValue
 Value="0"
 Switch="/MT"
 DisplayName="Multi-Threaded (/MT)"
 />
 <EnumValue
 Value="1"
 Switch="/MTd"
 DisplayName="Multi-Threaded Debug 

(/MTd)"
 />
 <EnumValue
 Value="2"
 Switch="/MD"
 DisplayName="Multi-Threaded DLL (/MD)"
 />
 <EnumValue
 Value="3"
 Switch="/MDd"
 DisplayName="Multi-Threaded Debug DLL 

(/MDd)"
 />
 <EnumValue
 Value="4"
 Switch="/ML"
 DisplayName="Single-Threaded (/ML)"
 />
 <EnumValue
 Value="5"
 Switch="/MLd"
 DisplayName="Single-Threaded Debug 

(/MLd)"
 />
 </Values>
 </EnumProperty>
 <BooleanProperty
 Name="TypeInfo"
 DisplayName="Enable Run-Time Type Info"
 PropertyPageName="Hybrid CUDA/C++ Options"
 Description="Adds code for checking C++ object types 

at run time (runtime type information). (/GR)"
 Switch="/GR"
 />
 <StringProperty
 Name="ExtraCppOptions"
 DisplayName="Extra C++ Options"
 PropertyPageName="Hybrid CUDA/C++ Options"
 Description="Supply any additional command line 

options to the host C++ compiler"
 Switch="[value]"
 />
 </Properties>
 </CustomBuildRule>
 </Rules>
</VisualStudioToolFile>

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s