Build error: error MSB3686
-
Wednesday, November 11, 2009 8:49 AM1> Compiling with CUDA Build Rule...
1>D:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\BuildCustomizations\CUDA_Build_Rule.targets(44,5): error MSB3686: Unable to create Xaml task. Compilation failed.
1>D:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\BuildCustomizations\CUDA_Build_Rule.targets(44,5): error MSB3686: Unrecognized escape sequence
1>D:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\BuildCustomizations\CUDA_Build_Rule.targets(44,5): error MSB3686: Unrecognized escape sequence
1>D:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\BuildCustomizations\CUDA_Build_Rule.targets(44,5): error MSB3686: Unrecognized escape sequence
1>D:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\BuildCustomizations\CUDA_Build_Rule.targets(44,5): error MSB3686: Unrecognized escape sequence
1>D:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\BuildCustomizations\CUDA_Build_Rule.targets(44,5): error MSB3686: Unrecognized escape sequence
1>D:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\BuildCustomizations\CUDA_Build_Rule.targets(44,5): error MSB3686:
1>D:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\BuildCustomizations\CUDA_Build_Rule.targets(44,5): error MSB4036: The "CUDA_Build_Rule" task was not found. Check the following: 1.) The name of the task in the project file is the same as the name of the task class. 2.) The task class is "public" and implements the Microsoft.Build.Framework.ITask interface. 3.) The task is correctly declared with <UsingTask> in the project file, or in the *.tasks files located in the "D:\Windows\Microsoft.NET\Framework\v4.0.21006" directory.
1>
Recently i used VS2010, and convert the cuda rules to targets automatically.
When i build the solution, the errors appear, and i dont know how to fix it...
Is there anyone could read the xml code?
All Replies
-
Wednesday, November 11, 2009 8:50 AMfollows rules file
=================================================================
<?xml version="1.0" encoding="utf-8"?>
<VisualStudioToolFile
Name="CUDA Build Rule v2.3.0"
Version="8.00"
>
<Rules>
<CustomBuildRule
Name="CUDA Build Rule"
DisplayName="CUDA Build Rule v2.3.0"
CommandLine="echo [CompilerPath] [Keep] [CInterleavedPTX] [ExtraNvccOptions] [Arch] -ccbin "$(VCInstallDir)bin" [Emulation] [FastMath] [Defines] -Xcompiler "/EHsc [Warning] /nologo [Optimization] /Zi [RuntimeChecks] [Runtime] [TypeInfo] [ExtraCppOptions]" [Include] [MaxRegCount] [PtxAsOptionV] [NvccCompilation] "$(InputPath)" 
 [CompilerPath] [Keep] [CInterleavedPTX] [ExtraNvccOptions] [Arch] -ccbin "$(VCInstallDir)bin" [Emulation] [FastMath] [Defines] -Xcompiler "/EHsc [Warning] /nologo [Optimization] /Zi [RuntimeChecks] [Runtime] [TypeInfo] [ExtraCppOptions]" [Include] [MaxRegCount] [ptxasoptionv] [NvccCompilation] "$(InputPath)""
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"[value]""
DefaultValue=""$(CUDA_INC_PATH)""
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 "$(IntDir)\$(InputName).cu.obj""
DisplayName="Generate hybrid object file (--compile / -c)"
/>
<EnumValue
Value="1"
Switch="-cuda -o "$(IntDir)\$(InputName).cu.c""
DisplayName="Generate hybrid .c file (-cuda)"
/>
<EnumValue
Value="2"
Switch="-gpu -o "$(IntDir)\$(InputName).gpu""
DisplayName="Generate .gpu file (-gpu)"
/>
<EnumValue
Value="3"
Switch="-cubin -o "data\$(InputName).cubin""
DisplayName="Generate .cubin file (-cubin)"
/>
<EnumValue
Value="4"
Switch="-ptx -o "data\$(InputName).ptx""
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=""$(IntDir)/$(InputName).cu.obj""
DisplayName=""$(IntDir)/$(InputName).cu.obj""
/>
<EnumValue
Value="1"
Switch=""data/$(InputName).cubin""
DisplayName=""data/$(InputName).cubin""
/>
<EnumValue
Value="2"
Switch=""data/$(InputName).ptx""
DisplayName=""data/$(InputName).ptx""
/>
</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=""$(CUDA_BIN_PATH)\nvcc.exe""
DisplayName="Installed Toolkit (uses CUDA_BIN_PATH environment varible)"
/>
<EnumValue
Value="1"
Switch=""[AlternateNvccPath]""
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"
/>
<BooleanProperty
Name="CInterleavedPTX"
DisplayName="Interleave C in PTXAS Output"
Switch="--opencc-options -LIST:source=on"
/>
<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> -
Wednesday, November 11, 2009 8:51 AMfollows the targets file,
===================================================================
<?xml version="1.0" encoding="utf-8"?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<PropertyPageSchema
Include="$(MSBuildThisFileDirectory)$(MSBuildThisFileName).xml" />
<AvailableItemName
Include="CUDA_Build_Rule">
<Targets>_CUDA_Build_Rule</Targets>
</AvailableItemName>
</ItemGroup>
<UsingTask
TaskName="CUDA_Build_Rule"
TaskFactory="XamlTaskFactory"
AssemblyName="Microsoft.Build.Tasks.v4.0">
<Task>$(MSBuildThisFileDirectory)$(MSBuildThisFileName).xml</Task>
</UsingTask>
<Target
Name="_CUDA_Build_Rule"
BeforeTargets="$(CUDA_Build_RuleBeforeTargets)"
AfterTargets="$(CUDA_Build_RuleAfterTargets)"
Condition="'@(CUDA_Build_Rule)' != ''"
DependsOnTargets="_SelectedFiles;ComputeCUDA_Build_RuleOutput"
Outputs="@(CUDA_Build_Rule->Metadata('Outputs')->Distinct())"
Inputs="@(CUDA_Build_Rule);%(CUDA_Build_Rule.AdditionalDependencies);$(MSBuildProjectFile)">
<ItemGroup
Condition="'@(SelectedFiles)' != ''">
<CUDA_Build_Rule
Remove="@(CUDA_Build_Rule)"
Condition="'%(Identity)' != '@(SelectedFiles)'" />
</ItemGroup>
<ItemGroup>
<CUDA_Build_Rule_tlog
Include="%(CUDA_Build_Rule.Outputs)"
Condition="'%(CUDA_Build_Rule.Outputs)' != '' and '%(CUDA_Build_Rule.ExcludedFromBuild)' != 'true'">
<Source>@(CUDA_Build_Rule, '|')</Source>
</CUDA_Build_Rule_tlog>
</ItemGroup>
<Message
Importance="High"
Text="%(CUDA_Build_Rule.ExecutionDescription)" />
<WriteLinesToFile
File="$(IntDir)$(ProjectName).write.1.tlog"
Lines="^%(CUDA_Build_Rule_tlog.Source);@(CUDA_Build_Rule_tlog->'%(Fullpath)')" />
<CUDA_Build_Rule
Condition="'%(CUDA_Build_Rule.ExcludedFromBuild)' != 'true'"
CommandLineTemplate="%(CUDA_Build_Rule.CommandLineTemplate)"
Debug="%(CUDA_Build_Rule.Debug)"
Emulation="%(CUDA_Build_Rule.Emulation)"
FastMath="%(CUDA_Build_Rule.FastMath)"
PtxAsOptionV="%(CUDA_Build_Rule.PtxAsOptionV)"
CInterleavedPTX="%(CUDA_Build_Rule.CInterleavedPTX)"
Keep="%(CUDA_Build_Rule.Keep)"
TypeInfo="%(CUDA_Build_Rule.TypeInfo)"
Include="%(CUDA_Build_Rule.Include)"
AlternateNvccPath="%(CUDA_Build_Rule.AlternateNvccPath)"
ExtraNvccOptions="%(CUDA_Build_Rule.ExtraNvccOptions)"
Defines="%(CUDA_Build_Rule.Defines)"
AddedDependencies="%(CUDA_Build_Rule.AddedDependencies)"
ExtraCppOptions="%(CUDA_Build_Rule.ExtraCppOptions)"
MaxRegCount="%(CUDA_Build_Rule.MaxRegCount)"
NvccCompilation="%(CUDA_Build_Rule.NvccCompilation)"
compileout="%(CUDA_Build_Rule.compileout)"
Arch="%(CUDA_Build_Rule.Arch)"
CompilerPath="%(CUDA_Build_Rule.CompilerPath)"
Warning="%(CUDA_Build_Rule.Warning)"
Optimization="%(CUDA_Build_Rule.Optimization)"
RuntimeChecks="%(CUDA_Build_Rule.RuntimeChecks)"
Runtime="%(CUDA_Build_Rule.Runtime)"
AdditionalOptions="%(CUDA_Build_Rule.AdditionalOptions)"
Inputs="@(CUDA_Build_Rule)" />
</Target>
<PropertyGroup>
<ComputeLinkInputsTargets>
$(ComputeLinkInputsTargets);
ComputeCUDA_Build_RuleOutput;
</ComputeLinkInputsTargets>
<ComputeLibInputsTargets>
$(ComputeLibInputsTargets);
ComputeCUDA_Build_RuleOutput;
</ComputeLibInputsTargets>
</PropertyGroup>
<Target
Name="ComputeCUDA_Build_RuleOutput"
Condition="'@(CUDA_Build_Rule)' != ''">
<ItemGroup>
<CUDA_Build_RuleDirsToMake
Condition="'@(CUDA_Build_Rule)' != ''"
Include="%(CUDA_Build_Rule.Outputs)" />
<Link
Include="%(CUDA_Build_RuleDirsToMake.Identity)"
Condition="'%(Extension)'=='.obj' or '%(Extension)'=='.res' or '%(Extension)'=='.rsc' or '%(Extension)'=='.lib'" />
<Lib
Include="%(CUDA_Build_RuleDirsToMake.Identity)"
Condition="'%(Extension)'=='.obj' or '%(Extension)'=='.res' or '%(Extension)'=='.rsc' or '%(Extension)'=='.lib'" />
<ImpLib
Include="%(CUDA_Build_RuleDirsToMake.Identity)"
Condition="'%(Extension)'=='.obj' or '%(Extension)'=='.res' or '%(Extension)'=='.rsc' or '%(Extension)'=='.lib'" />
</ItemGroup>
<MakeDir
Directories="@(CUDA_Build_RuleDirsToMake->'%(RootDir)%(Directory)')" />
</Target>
</Project> -
Wednesday, November 11, 2009 8:52 AMfollows the props file,
===================================================================
<?xml version="1.0" encoding="utf-8"?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup
Condition="'$(CUDA_Build_RuleBeforeTargets)' == '' and '$(CUDA_Build_RuleAfterTargets)' == '' and '$(ConfigurationType)' != 'Makefile'">
<CUDA_Build_RuleBeforeTargets>Midl</CUDA_Build_RuleBeforeTargets>
<CUDA_Build_RuleAfterTargets>CustomBuild</CUDA_Build_RuleAfterTargets>
</PropertyGroup>
<ItemDefinitionGroup>
<CUDA_Build_Rule>
<Debug>False</Debug>
<Emulation>False</Emulation>
<FastMath>False</FastMath>
<PtxAsOptionV>False</PtxAsOptionV>
<CInterleavedPTX>False</CInterleavedPTX>
<Keep>False</Keep>
<TypeInfo>False</TypeInfo>
<Include>"$(CUDA_INC_PATH)"</Include>
<MaxRegCount>32</MaxRegCount>
<NvccCompilation>0</NvccCompilation>
<compileout>0</compileout>
<Arch>10</Arch>
<CompilerPath>0</CompilerPath>
<Warning>3</Warning>
<Optimization>2</Optimization>
<RuntimeChecks>0</RuntimeChecks>
<Runtime>0</Runtime>
<CommandLineTemplate>echo [CompilerPath] [Keep] [CInterleavedPTX] [ExtraNvccOptions] [Arch] -ccbin "$(VCInstallDir)bin" [Emulation] [FastMath] [Defines] -Xcompiler "/EHsc [Warning] /nologo [Optimization] /Zi [RuntimeChecks] [Runtime] [TypeInfo] [ExtraCppOptions]" [Include] [MaxRegCount] [PtxAsOptionV] [NvccCompilation] "%(FullPath)"
[CompilerPath] [Keep] [CInterleavedPTX] [ExtraNvccOptions] [Arch] -ccbin "$(VCInstallDir)bin" [Emulation] [FastMath] [Defines] -Xcompiler "/EHsc [Warning] /nologo [Optimization] /Zi [RuntimeChecks] [Runtime] [TypeInfo] [ExtraCppOptions]" [Include] [MaxRegCount] [ptxasoptionv] [NvccCompilation] "%(FullPath)"</CommandLineTemplate>
<Outputs>[compileout]</Outputs>
<ExecutionDescription>Compiling with CUDA Build Rule...</ExecutionDescription>
<AdditionalDependencies>[AddedDependencies]</AdditionalDependencies>
</CUDA_Build_Rule>
</ItemDefinitionGroup>
</Project> -
Wednesday, November 11, 2009 8:53 AMfollows the xml file,
========================================================================
<?xml version="1.0" encoding="utf-8"?>
<ProjectSchemaDefinitions xmlns="http://schemas.microsoft.com/build/2009/properties" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:sys="clr-namespace:System;assembly=mscorlib">
<Rule
Name="CUDA_Build_Rule"
PageTemplate="tool"
DisplayName="CUDA Build Rule v2.3.0"
Order="200">
<Rule.DataSource>
<DataSource
Persistence="ProjectFile"
ItemType="CUDA_Build_Rule" />
</Rule.DataSource>
<Rule.Categories>
<Category
Name="General">
<Category.DisplayName>
<sys:String>General</sys:String>
</Category.DisplayName>
</Category>
<Category
Name="Command Line"
Subtype="CommandLine">
<Category.DisplayName>
<sys:String>Command Line</sys:String>
</Category.DisplayName>
</Category>
</Rule.Categories>
<StringListProperty
Name="Inputs"
Category="Command Line"
IsRequired="true"
Switch=" ">
<StringListProperty.DataSource>
<DataSource
Persistence="ProjectFile"
ItemType="CUDA_Build_Rule"
SourceType="Item" />
</StringListProperty.DataSource>
</StringListProperty>
<BoolProperty
Name="Debug"
HelpContext="0"
DisplayName="Generate Debug Information"
Description="Specifies whether or not debugging information is generated by the CUDA compiler. (-D_DEBUG)"
Switch="-D_DEBUG" />
<BoolProperty
Name="Emulation"
HelpContext="0"
DisplayName="Emulation Mode"
Description="Whether or not to generate emulated code."
Switch="-deviceemu -D_DEVICEEMU" />
<BoolProperty
Name="FastMath"
Subcategory="Default"
HelpContext="0"
DisplayName="Use Fast Math"
Description="Make use of the fast math library."
Switch="-use_fast_math" />
<BoolProperty
Name="PtxAsOptionV"
HelpContext="0"
DisplayName="Verbose PTXAS Output"
Switch="--ptxas-options=-v" />
<BoolProperty
Name="CInterleavedPTX"
HelpContext="0"
DisplayName="Interleave C in PTXAS Output"
Switch="--opencc-options -LIST:source=on" />
<BoolProperty
Name="Keep"
Category="Preprocessor"
HelpContext="0"
DisplayName="Keep preprocessed files (.ptx, .cubin, cudafe1.c, cudafe1.cpp, cudafe1.gpu, etc.)"
Description="Specifies that preprocessor files generated by the CUDA compiler are not deleted."
Switch="--keep" />
<BoolProperty
Name="TypeInfo"
Category="Hybrid CUDA/C++ Options"
HelpContext="0"
DisplayName="Enable Run-Time Type Info"
Description="Adds code for checking C++ object types at run time (runtime type information). (/GR)"
Switch="/GR" />
<StringListProperty
Name="Include"
HelpContext="0"
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])"
Separator=";"
Switch="-I"[value]"" />
<StringProperty
Name="AlternateNvccPath"
HelpContext="0"
DisplayName="Alternate path to nvcc.exe (non-standard installation)"
Switch="[value]\nvcc.exe" />
<StringProperty
Name="ExtraNvccOptions"
HelpContext="0"
DisplayName="Extra Options"
Description="Supply any additional command line options to NVCC"
Switch="[value]" />
<StringListProperty
Name="Defines"
Category="Preprocessor"
HelpContext="0"
DisplayName="Preprocessor Definitions"
Description="Specifies one or more preprocessor defines. (-D[macro])"
Separator=";"
Switch="-D[value]" />
<StringProperty
Name="AddedDependencies"
HelpContext="0"
DisplayName="Source Dependencies"
Description="Add additional CUDA file dependencies"
Switch="[value]" />
<StringProperty
Name="ExtraCppOptions"
Category="Hybrid CUDA/C++ Options"
HelpContext="0"
DisplayName="Extra C++ Options"
Description="Supply any additional command line options to the host C++ compiler"
Switch="[value]" />
<EnumProperty
Name="NvccCompilation"
HelpContext="0"
DisplayName="NVCC Compilation Type"
Description="Select desired output of NVCC compilation (-c/-compile, -cuda, -gpu, -cubin, -ptx)">
<EnumValue
Name="0"
DisplayName="Generate hybrid object file (--compile / -c)"
Switch="--compile -o "$(IntDir)\$(InputName).cu.obj"" />
<EnumValue
Name="1"
DisplayName="Generate hybrid .c file (-cuda)"
Switch="-cuda -o "$(IntDir)\$(InputName).cu.c"" />
<EnumValue
Name="2"
DisplayName="Generate .gpu file (-gpu)"
Switch="-gpu -o "$(IntDir)\$(InputName).gpu"" />
<EnumValue
Name="3"
DisplayName="Generate .cubin file (-cubin)"
Switch="-cubin -o "data\$(InputName).cubin"" />
<EnumValue
Name="4"
DisplayName="Generate .ptx file (-ptx)"
Switch="-ptx -o "data\$(InputName).ptx"" />
</EnumProperty>
<EnumProperty
Name="compileout"
HelpContext="0"
DisplayName="Compiler Output (obj/cubin)"
Description="Sets output as an OBJ or cubin file">
<EnumValue
Name="0"
DisplayName=""$(IntDir)/$(InputName).cu.obj""
Switch=""$(IntDir)/$(InputName).cu.obj"" />
<EnumValue
Name="1"
DisplayName=""data/$(InputName).cubin""
Switch=""data/$(InputName).cubin"" />
<EnumValue
Name="2"
DisplayName=""data/$(InputName).ptx""
Switch=""data/$(InputName).ptx"" />
</EnumProperty>
<EnumProperty
Name="Arch"
HelpContext="0"
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)">
<EnumValue
Name="10"
DisplayName="sm_10"
Switch="-arch sm_10" />
<EnumValue
Name="11"
DisplayName="sm_11"
Switch="-arch sm_11" />
<EnumValue
Name="12"
DisplayName="sm_12"
Switch="-arch sm_12" />
<EnumValue
Name="13"
DisplayName="sm_13"
Switch="-arch sm_13" />
</EnumProperty>
<EnumProperty
Name="CompilerPath"
HelpContext="0"
DisplayName="Path to nvcc.exe"
Description="Specifies the path to the CUDA compiler, nvcc.exe ">
<EnumValue
Name="0"
DisplayName="Installed Toolkit (uses CUDA_BIN_PATH environment varible)"
Switch=""$(CUDA_BIN_PATH)\nvcc.exe"" />
<EnumValue
Name="1"
DisplayName="Use Alternate path to CUDA, specified below"
Switch=""[AlternateNvccPath]"" />
</EnumProperty>
<EnumProperty
Name="Warning"
Category="Hybrid CUDA/C++ Options"
HelpContext="0"
DisplayName="Warning Level"
Description="Select how strict you want the compiler to be about checking for potentially suspect constructs. (/W0 - /W4)">
<EnumValue
Name="0"
DisplayName="Off: Turn Off All Warnings (/W0)"
Switch="/W0" />
<EnumValue
Name="1"
DisplayName="Level 1 (/W1)"
Switch="/W1" />
<EnumValue
Name="2"
DisplayName="Level 2 (/W2)"
Switch="/W2" />
<EnumValue
Name="3"
DisplayName="Level 3 (/W3)"
Switch="/W3" />
<EnumValue
Name="4"
DisplayName="Level 4 (/W4)"
Switch="/W4" />
</EnumProperty>
<EnumProperty
Name="Optimization"
HelpContext="0"
DisplayName="Optimization"
Description="Select option for code optimization; choose Custom to use specific optimization options. (/Od, /O1, /O2, /Ox)">
<EnumValue
Name="0"
DisplayName="Disabled (/Od)"
Switch="/Od" />
<EnumValue
Name="1"
DisplayName="Minimize Size (/O1)"
Switch="/O1" />
<EnumValue
Name="2"
DisplayName="Maximize Speed (/O2)"
Switch="/O2" />
<EnumValue
Name="3"
DisplayName="Full Optimization (/Ox)"
Switch="/Ox" />
</EnumProperty>
<EnumProperty
Name="RuntimeChecks"
Category="Hybrid CUDA/C++ Options"
HelpContext="0"
DisplayName="Basic Runtime Checks"
Description="Perform basic runtime error checks, incompatible with any optimization type other than debug. (/RTCs, /RTCu, /RTC1)">
<EnumValue
Name="0"
DisplayName="Default"
Switch=" " />
<EnumValue
Name="1"
DisplayName="Stack Frames (/RTCs)"
Switch="/RTCs" />
<EnumValue
Name="2"
DisplayName="Uninitialized Variables (/RTCu)"
Switch="/RTCu" />
<EnumValue
Name="3"
DisplayName="Both (/RTC1, equiv. to /RTCsu)"
Switch="/RTC1" />
</EnumProperty>
<EnumProperty
Name="Runtime"
Category="Hybrid CUDA/C++ Options"
HelpContext="0"
DisplayName="Runtime Library"
Description="Specify runtime library for linking. (/MT, /MTd, /MD, /MDd, /ML, /MLd)">
<EnumValue
Name="0"
DisplayName="Multi-Threaded (/MT)"
Switch="/MT" />
<EnumValue
Name="1"
DisplayName="Multi-Threaded Debug (/MTd)"
Switch="/MTd" />
<EnumValue
Name="2"
DisplayName="Multi-Threaded DLL (/MD)"
Switch="/MD" />
<EnumValue
Name="3"
DisplayName="Multi-Threaded Debug DLL (/MDd)"
Switch="/MDd" />
<EnumValue
Name="4"
DisplayName="Single-Threaded (/ML)"
Switch="/ML" />
<EnumValue
Name="5"
DisplayName="Single-Threaded Debug (/MLd)"
Switch="/MLd" />
</EnumProperty>
<IntProperty
Name="MaxRegCount"
HelpContext="0"
DisplayName="maxrregcount"
Switch="-maxrregcount=[Value]" />
<StringProperty
Name="CommandLineTemplate"
DisplayName="Command Line"
Visible="False"
IncludeInCommandLine="False" />
<DynamicEnumProperty
Name="CUDA_Build_RuleBeforeTargets"
Category="General"
EnumProvider="Targets"
IncludeInCommandLine="False">
<DynamicEnumProperty.DisplayName>
<sys:String>Execute Before</sys:String>
</DynamicEnumProperty.DisplayName>
<DynamicEnumProperty.Description>
<sys:String>Specifies the targets for the build customization to run before.</sys:String>
</DynamicEnumProperty.Description>
<DynamicEnumProperty.ProviderSettings>
<NameValuePair
Name="Exclude"
Value="^CUDA_Build_RuleBeforeTargets|^Compute" />
</DynamicEnumProperty.ProviderSettings>
<DynamicEnumProperty.DataSource>
<DataSource
Persistence="ProjectFile"
HasConfigurationCondition="true" />
</DynamicEnumProperty.DataSource>
</DynamicEnumProperty>
<DynamicEnumProperty
Name="CUDA_Build_RuleAfterTargets"
Category="General"
EnumProvider="Targets"
IncludeInCommandLine="False">
<DynamicEnumProperty.DisplayName>
<sys:String>Execute After</sys:String>
</DynamicEnumProperty.DisplayName>
<DynamicEnumProperty.Description>
<sys:String>Specifies the targets for the build customization to run after.</sys:String>
</DynamicEnumProperty.Description>
<DynamicEnumProperty.ProviderSettings>
<NameValuePair
Name="Exclude"
Value="^CUDA_Build_RuleAfterTargets|^Compute" />
</DynamicEnumProperty.ProviderSettings>
<DynamicEnumProperty.DataSource>
<DataSource
Persistence="ProjectFile"
ItemType=""
HasConfigurationCondition="true" />
</DynamicEnumProperty.DataSource>
</DynamicEnumProperty>
<StringListProperty
Name="Outputs"
DisplayName="Outputs"
Visible="False"
IncludeInCommandLine="False" />
<StringProperty
Name="ExecutionDescription"
DisplayName="Execution Description"
Visible="False"
IncludeInCommandLine="False" />
<StringListProperty
Name="AdditionalDependencies"
DisplayName="Additional Dependencies"
IncludeInCommandLine="False"
Visible="false" />
<StringProperty
Subtype="AdditionalOptions"
Name="AdditionalOptions"
Category="Command Line">
<StringProperty.DisplayName>
<sys:String>Additional Options</sys:String>
</StringProperty.DisplayName>
<StringProperty.Description>
<sys:String>Additional Options</sys:String>
</StringProperty.Description>
</StringProperty>
</Rule>
<ItemType
Name="CUDA_Build_Rule"
DisplayName="CUDA Build Rule v2.3.0" />
<FileExtension
Name="*.cu"
ContentType="CUDA_Build_Rule" />
<ContentType
Name="CUDA_Build_Rule"
DisplayName="CUDA Build Rule v2.3.0"
ItemType="CUDA_Build_Rule" />
</ProjectSchemaDefinitions> -
Wednesday, November 11, 2009 8:07 PMThank you reporting the issue. I was able to repro your problem on Beta2 drop. To workaround the issue, you can replace the following in your XML file:
<ProjectSchemaDefinitions xmlns="http://schemas.microsoft.com/build/2009/properties" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:sys="clr-namespace:System;assembly=mscorlib">
With this:
<ProjectSchemaDefinitions xmlns="clr-namespace:Microsoft.Build.Framework.XamlTypes;assembly=Microsoft.Build.Framework" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:sys="clr-namespace:System;assembly=mscorlib" xmlns:transformCallback="Microsoft.Cpp.Dev10.ConvertPropertyCallback" xmlns:impl="clr-namespace:Microsoft.VisualStudio.Project.Contracts.Implementation;assembly=Microsoft.VisualStudio.Project.Contracts.Implementation">
This is what I am getting after applying the workaround on Beta2 drop:
Using "CUDA_Build_Rule" task from the task factory "XamlTaskFactory".
1>Task "CUDA_Build_Rule"
1> cmd.exe /C "......\AppData\Local\Temp\4\0d7e768da2664786bf2e5d4e0612a91d.cmd"
1> echo "$(CUDA_BIN_PATH)\nvcc.exe" -arch sm_10 -ccbin "D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin" -Xcompiler "/EHsc /W3 /nologo /O2 /Zi /MT " -I"" -maxrregcount=32 --compile -o "$(IntDir)\$(InputName).cu.obj" "<....file.cu>"
1> "$(CUDA_BIN_PATH)\nvcc.exe" -arch sm_10 -ccbin "D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin" -Xcompiler "/EHsc /W3 /nologo /O2 /Zi /MT " -I"" -maxrregcount=32 --compile -o "$(IntDir)\$(InputName).cu.obj" "<....file.cu>"
1> D:\Users\lishao\Desktop\New folder\customwithspace\customwithspace>echo "$(CUDA_BIN_PATH)\nvcc.exe" -arch sm_10 -ccbin "D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin" -Xcompiler "/EHsc /W3 /nologo /O2 /Zi /MT " -I"" -maxrregcount=32 --compile -o "$(IntDir)\$(InputName).cu.obj" "<....file.cu>"
1> "$(CUDA_BIN_PATH)\nvcc.exe" -arch sm_10 -ccbin "D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin" -Xcompiler "/EHsc /W3 /nologo /O2 /Zi /MT " -I"" -maxrregcount=32 --compile -o "$(IntDir)\$(InputName).cu.obj" "<....file.cu>"
This issue has already been resolved in the recent build.
Li Shao, MSFT
Li Shao -
Thursday, November 12, 2009 7:00 AMThank you for replying.
The replacement you advise is right, and in fact, i modified the xml file according to the masm.xml file in MSbuild directory.
But both don't work. they have the same error ----The "CUDA_Build_Rule" task was not found.
so i want to know, is that enough to obtain three files( .targets, .xml, .props )?
If possible, could you install the cuda toolkit2.3 to test if it's compatible between VS2010 beta2 and CUDA? -
Thursday, November 12, 2009 6:56 PMOK. It looks like some engine level change is also needed to build CUDA_Build_Rule task. The issue is definately already fixed in the recent build. You can also send me a version of your projects and I can check. My email is LISHAO AT Microsoft.com
Li Shao, MSFT
Li Shao -
Sunday, December 27, 2009 12:29 PMHi Li,I am experiencing the same issue with beta2. masm.xml modifications don't help.Thanks,Andrei
-
Monday, January 04, 2010 6:31 PM
Hi Andrei, there are fixes made in MSBuild Engine side that are needed to make the scenario work. These fixes are in Post Beta2 drop. Simply modifying the .xml file won't be enough to resolve the problem.
Li Shao, MSFT
Li Shao- Proposed As Answer by Andrei VaranovichMVP Tuesday, January 05, 2010 7:41 PM
-
Thursday, February 11, 2010 6:18 PMRC build should have fix for this issue. Please download the RC from here: http://msdn.microsoft.com/en-us/vstudio/dd582936.aspx and let us know if your issue has been resolved.
Li Shao, MSFT
Li Shao -
Thursday, April 01, 2010 10:30 PMThis does not seem to be fixed even in the RC1Rel of Visual Studio 2010. What is going on?
-
Friday, April 02, 2010 3:45 PM
Yes, we know about the issue. The failures are due to one major limitation in MSBuild task generator that it does not support expanding environment variables if they are part of the switches when generating tasks. Take the CUDA rule, for example. You have the following in your original rule file:
<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 "$(IntDir)\$(InputName).cu.obj""
DisplayName="Generate hybrid object file (--compile / -c)"
/>
<EnumValue
Value="1"
Switch="-cuda -o "$(IntDir)\$(InputName).cu.c""
DisplayName="Generate hybrid .c file (-cuda)"
/>
/>
They will be converted into:
<EnumProperty
Name="NvccCompilation"
HelpContext="0"
DisplayName="NVCC Compilation Type"
Description="Select desired output of NVCC compilation (-c/-compile, -cuda, -gpu, -cubin, -ptx)">
<EnumValue
Name="0"
DisplayName="Generate hybrid object file (--compile / -c)"
Switch="--compile -o "$(IntDir)\$(InputName).cu.obj"" />
<EnumValue
Name="1"
DisplayName="Generate hybrid .c file (-cuda)"
Switch="-cuda -o "$(IntDir)\$(InputName).cu.c"" />
</EnumProperty>
The $(IntDir) and $(IntputName), however, will not be expanded during compile due to the limitation of the task generated by the task generator. As a result, you will see the following command line that $(IntDir) and $(InputName) are not expanded.
-arch sm_10 -ccbin "C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin" -Xcompiler "/EHsc /W3 /nologo /O2 /Zi /MT " -I -maxrregcount=32 --compile -o "$(IntDir)\$(InputName).cu.obj" "C:\cuda\cuda\cuda2.cu"
To work around this, you need to redefine the value in the converted targets file as follows:
<ItemGroup>
<CUDA_Build_Rule Condition="'%(CUDA_Build_Rule.NvccCompilation)' == '0'">
<NvccCompilation>-c -o "$(IntDir)\%(Filename).cu.obj"</NvccCompilation>
</CUDA_Build_Rule>
<CUDA_Build_Rule Condition="'%(CUDA_Build_Rule.NvccCompilation)' == '1'">
<NvccCompilation>-cuda -o "$(IntDir)\%(Filename).cu.c"</NvccCompilation>
</ItemGroup>
Here are the modified targets/XML/Props files that will work with VS2010.
Cuda.xml:
<?xml version="1.0" encoding="utf-8"?>
<ProjectSchemaDefinitions xmlns="clr-namespace:Microsoft.Build.Framework.XamlTypes;assembly=Microsoft.Build.Framework" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:sys="clr-namespace:System;assembly=mscorlib" xmlns:transformCallback="Microsoft.Cpp.Dev10.ConvertPropertyCallback">
<Rule
Name="CUDA_Build_Rule"
PageTemplate="tool"
DisplayName="CUDA Build Rule v2.3.0"
Order="200">
<Rule.DataSource>
<DataSource
Persistence="ProjectFile"
ItemType="CUDA_Build_Rule" />
</Rule.DataSource>
<Rule.Categories>
<Category
Name="General">
<Category.DisplayName>
<sys:String>General</sys:String>
</Category.DisplayName>
</Category>
<Category
Name="Command Line"
Subtype="CommandLine">
<Category.DisplayName>
<sys:String>Command Line</sys:String>
</Category.DisplayName>
</Category>
</Rule.Categories>
<StringListProperty
Name="Inputs"
Category="Command Line"
IsRequired="true"
Switch=" ">
<StringListProperty.DataSource>
<DataSource
Persistence="ProjectFile"
ItemType="CUDA_Build_Rule"
SourceType="Item" />
</StringListProperty.DataSource>
</StringListProperty>
<StringListProperty
Name="IntDir"
Category="Command Line"
IsRequired="true"
Switch=" ">
<StringListProperty.DataSource>
<DataSource
Persistence="ProjectFile"
ItemType="CUDA_Build_Rule"
SourceType="Item" />
</StringListProperty.DataSource>
</StringListProperty>
<StringListProperty
Name="Filename"
Category="Command Line"
IsRequired="true"
Switch=" ">
</StringListProperty>
<BoolProperty
Name="Debug"
HelpContext="0"
DisplayName="Generate Debug Information"
Description="Specifies whether or not debugging information is generated by the CUDA compiler. (-D_DEBUG)"
Switch="-D_DEBUG" />
<BoolProperty
Name="Emulation"
HelpContext="0"
DisplayName="Emulation Mode"
Description="Whether or not to generate emulated code."
Switch="-deviceemu -D_DEVICEEMU" />
<BoolProperty
Name="FastMath"
Subcategory="Default"
HelpContext="0"
DisplayName="Use Fast Math"
Description="Make use of the fast math library."
Switch="-use_fast_math" />
<BoolProperty
Name="PtxAsOptionV"
HelpContext="0"
DisplayName="Verbose PTXAS Output"
Switch="--ptxas-options=-v" />
<BoolProperty
Name="CInterleavedPTX"
HelpContext="0"
DisplayName="Interleave C in PTXAS Output"
Switch="--opencc-options -LIST:source=on" />
<BoolProperty
Name="Keep"
Category="Preprocessor"
HelpContext="0"
DisplayName="Keep preprocessed files (.ptx, .cubin, cudafe1.c, cudafe1.cpp, cudafe1.gpu, etc.)"
Description="Specifies that preprocessor files generated by the CUDA compiler are not deleted."
Switch="--keep" />
<BoolProperty
Name="TypeInfo"
Category="Hybrid CUDA/C++ Options"
HelpContext="0"
DisplayName="Enable Run-Time Type Info"
Description="Adds code for checking C++ object types at run time (runtime type information). (/GR)"
Switch="/GR" />
<StringListProperty
Name="Include"
HelpContext="0"
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])"
Separator=";"
Switch="-I[value]" />
<StringProperty
Name="AlternateNvccPath"
HelpContext="0"
DisplayName="Alternate path to nvcc.exe (non-standard installation)"
Switch="[value]\nvcc.exe" />
<StringProperty
Name="ExtraNvccOptions"
HelpContext="0"
DisplayName="Extra Options"
Description="Supply any additional command line options to NVCC"
Switch="[value]" />
<StringListProperty
Name="Defines"
Category="Preprocessor"
HelpContext="0"
DisplayName="Preprocessor Definitions"
Description="Specifies one or more preprocessor defines. (-D[macro])"
Separator=";"
Switch="-D[value]" />
<StringProperty
Name="AddedDependencies"
HelpContext="0"
DisplayName="Source Dependencies"
Description="Add additional CUDA file dependencies"
Switch="[value]" />
<StringProperty
Name="ExtraCppOptions"
Category="Hybrid CUDA/C++ Options"
HelpContext="0"
DisplayName="Extra C++ Options"
Description="Supply any additional command line options to the host C++ compiler"
Switch="[value]" />
<StringProperty
Name="NvccCompilation"
Category="NvccCompilation..."
HelpContext="0"
DisplayName="NvccCompilation..."
Description="Select desired output of NVCC compilation (-c/-compile, -cuda, -gpu, -cubin, -ptx)"
Switch="[value]" />
<StringProperty
Name="compileout"
Category="compileout..."
HelpContext="0"
DisplayName="compileout..."
Description="Sets output as an OBJ or cubin file"
Switch="[value]" />
<StringProperty
Name="CudaBinPath"
Category="CudaBinPath..."
HelpContext="0"
DisplayName="CudaBinPath..."
Description="Path to Cuda tool"
Switch="[value]" />
<EnumProperty
Name="Arch"
HelpContext="0"
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)">
<EnumValue
Name="10"
DisplayName="sm_10"
Switch="-arch sm_10" />
<EnumValue
Name="11"
DisplayName="sm_11"
Switch="-arch sm_11" />
<EnumValue
Name="12"
DisplayName="sm_12"
Switch="-arch sm_12" />
<EnumValue
Name="13"
DisplayName="sm_13"
Switch="-arch sm_13" />
</EnumProperty>
<EnumProperty
Name="CompilerPath"
HelpContext="0"
DisplayName="Path to nvcc.exe"
Description="Specifies the path to the CUDA compiler, nvcc.exe ">
<EnumValue
Name="0"
DisplayName="Installed Toolkit (uses CUDA_BIN_PATH environment varible)"
Switch="[value]" />
<EnumValue
Name="1"
DisplayName="Use Alternate path to CUDA, specified below"
Switch="[value]" />
</EnumProperty>
<EnumProperty
Name="Warning"
Category="Hybrid CUDA/C++ Options"
HelpContext="0"
DisplayName="Warning Level"
Description="Select how strict you want the compiler to be about checking for potentially suspect constructs. (/W0 - /W4)">
<EnumValue
Name="0"
DisplayName="Off: Turn Off All Warnings (/W0)"
Switch="/W0" />
<EnumValue
Name="1"
DisplayName="Level 1 (/W1)"
Switch="/W1" />
<EnumValue
Name="2"
DisplayName="Level 2 (/W2)"
Switch="/W2" />
<EnumValue
Name="3"
DisplayName="Level 3 (/W3)"
Switch="/W3" />
<EnumValue
Name="4"
DisplayName="Level 4 (/W4)"
Switch="/W4" />
</EnumProperty>
<EnumProperty
Name="Optimization"
HelpContext="0"
DisplayName="Optimization"
Description="Select option for code optimization; choose Custom to use specific optimization options. (/Od, /O1, /O2, /Ox)">
<EnumValue
Name="0"
DisplayName="Disabled (/Od)"
Switch="/Od" />
<EnumValue
Name="1"
DisplayName="Minimize Size (/O1)"
Switch="/O1" />
<EnumValue
Name="2"
DisplayName="Maximize Speed (/O2)"
Switch="/O2" />
<EnumValue
Name="3"
DisplayName="Full Optimization (/Ox)"
Switch="/Ox" />
</EnumProperty>
<EnumProperty
Name="RuntimeChecks"
Category="Hybrid CUDA/C++ Options"
HelpContext="0"
DisplayName="Basic Runtime Checks"
Description="Perform basic runtime error checks, incompatible with any optimization type other than debug. (/RTCs, /RTCu, /RTC1)">
<EnumValue
Name="0"
DisplayName="Default"
Switch=" " />
<EnumValue
Name="1"
DisplayName="Stack Frames (/RTCs)"
Switch="/RTCs" />
<EnumValue
Name="2"
DisplayName="Uninitialized Variables (/RTCu)"
Switch="/RTCu" />
<EnumValue
Name="3"
DisplayName="Both (/RTC1, equiv. to /RTCsu)"
Switch="/RTC1" />
</EnumProperty>
<EnumProperty
Name="Runtime"
Category="Hybrid CUDA/C++ Options"
HelpContext="0"
DisplayName="Runtime Library"
Description="Specify runtime library for linking. (/MT, /MTd, /MD, /MDd, /ML, /MLd)">
<EnumValue
Name="0"
DisplayName="Multi-Threaded (/MT)"
Switch="/MT" />
<EnumValue
Name="1"
DisplayName="Multi-Threaded Debug (/MTd)"
Switch="/MTd" />
<EnumValue
Name="2"
DisplayName="Multi-Threaded DLL (/MD)"
Switch="/MD" />
<EnumValue
Name="3"
DisplayName="Multi-Threaded Debug DLL (/MDd)"
Switch="/MDd" />
<EnumValue
Name="4"
DisplayName="Single-Threaded (/ML)"
Switch="/ML" />
<EnumValue
Name="5"
DisplayName="Single-Threaded Debug (/MLd)"
Switch="/MLd" />
</EnumProperty>
<IntProperty
Name="MaxRegCount"
HelpContext="0"
DisplayName="maxrregcount"
Switch="-maxrregcount=[Value]" />
<StringProperty
Name="CommandLineTemplate"
DisplayName="Command Line"
Visible="False"
IncludeInCommandLine="False" />
<DynamicEnumProperty
Name="CUDA_Build_RuleBeforeTargets"
Category="General"
EnumProvider="Targets"
IncludeInCommandLine="False">
<DynamicEnumProperty.DisplayName>
<sys:String>Execute Before</sys:String>
</DynamicEnumProperty.DisplayName>
<DynamicEnumProperty.Description>
<sys:String>Specifies the targets for the build customization to run before.</sys:String>
</DynamicEnumProperty.Description>
<DynamicEnumProperty.ProviderSettings>
<NameValuePair
Name="Exclude"
Value="^CUDA_Build_RuleBeforeTargets|^Compute" />
</DynamicEnumProperty.ProviderSettings>
<DynamicEnumProperty.DataSource>
<DataSource
Persistence="ProjectFile"
HasConfigurationCondition="true" />
</DynamicEnumProperty.DataSource>
</DynamicEnumProperty>
<DynamicEnumProperty
Name="CUDA_Build_RuleAfterTargets"
Category="General"
EnumProvider="Targets"
IncludeInCommandLine="False">
<DynamicEnumProperty.DisplayName>
<sys:String>Execute After</sys:String>
</DynamicEnumProperty.DisplayName>
<DynamicEnumProperty.Description>
<sys:String>Specifies the targets for the build customization to run after.</sys:String>
</DynamicEnumProperty.Description>
<DynamicEnumProperty.ProviderSettings>
<NameValuePair
Name="Exclude"
Value="^CUDA_Build_RuleAfterTargets|^Compute" />
</DynamicEnumProperty.ProviderSettings>
<DynamicEnumProperty.DataSource>
<DataSource
Persistence="ProjectFile"
ItemType=""
HasConfigurationCondition="true" />
</DynamicEnumProperty.DataSource>
</DynamicEnumProperty>
<StringListProperty
Name="Outputs"
DisplayName="Outputs"
Visible="False"
IncludeInCommandLine="False" />
<StringProperty
Name="ExecutionDescription"
DisplayName="Execution Description"
Visible="False"
IncludeInCommandLine="False" />
<StringListProperty
Name="AdditionalDependencies"
DisplayName="Additional Dependencies"
IncludeInCommandLine="False"
Visible="false" />
<StringProperty
Subtype="AdditionalOptions"
Name="AdditionalOptions"
Category="Command Line">
<StringProperty.DisplayName>
<sys:String>Additional Options</sys:String>
</StringProperty.DisplayName>
<StringProperty.Description>
<sys:String>Additional Options</sys:String>
</StringProperty.Description>
</StringProperty>
</Rule>
<ItemType
Name="CUDA_Build_Rule"
DisplayName="CUDA Build Rule v2.3.0" />
<FileExtension
Name="*.cu"
ContentType="CUDA_Build_Rule" />
<ContentType
Name="CUDA_Build_Rule"
DisplayName="CUDA Build Rule v2.3.0"
ItemType="CUDA_Build_Rule" />
</ProjectSchemaDefinitions>Cuda.targets:
<?xml version="1.0" encoding="utf-8"?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<PropertyPageSchema
Include="$(MSBuildThisFileDirectory)$(MSBuildThisFileName).xml" />
<AvailableItemName
Include="CUDA_Build_Rule">
<Targets>_CUDA_Build_Rule</Targets>
</AvailableItemName>
</ItemGroup>
<UsingTask
TaskName="CUDA_Build_Rule"
TaskFactory="XamlTaskFactory"
AssemblyName="Microsoft.Build.Tasks.v4.0">
<Task>$(MSBuildThisFileDirectory)$(MSBuildThisFileName).xml</Task>
</UsingTask>
<Target
Name="_CUDA_Build_Rule"
BeforeTargets="$(CUDA_Build_RuleBeforeTargets)"
AfterTargets="$(CUDA_Build_RuleAfterTargets)"
Condition="'@(CUDA_Build_Rule)' != ''"
DependsOnTargets="$(CUDA_Build_RuleDependsOn);ComputeCUDA_Build_RuleOutput"
Outputs="@(CUDA_Build_Rule->Metadata('Outputs')->Distinct())"
Inputs="@(CUDA_Build_Rule);%(CUDA_Build_Rule.AdditionalDependencies);$(MSBuildProjectFile)">
<ItemGroup
Condition="'@(SelectedFiles)' != ''">
<CUDA_Build_Rule
Remove="@(CUDA_Build_Rule)"
Condition="'%(Identity)' != '@(SelectedFiles)'" />
</ItemGroup>
<ItemGroup>
<CUDA_Build_Rule_tlog
Include="%(CUDA_Build_Rule.Outputs)"
Condition="'%(CUDA_Build_Rule.Outputs)' != '' and '%(CUDA_Build_Rule.ExcludedFromBuild)' != 'true'">
<Source>@(CUDA_Build_Rule, '|')</Source>
</CUDA_Build_Rule_tlog>
</ItemGroup>
<Message
Importance="High"
Text="%(CUDA_Build_Rule.ExecutionDescription)" />
<WriteLinesToFile
Condition="'@(CUDA_Build_Rule_tlog)' != '' and '%(CUDA_Build_Rule_tlog.ExcludedFromBuild)' != 'true'"
File="$(IntDir)$(ProjectName).write.1.tlog"
Lines="^%(CUDA_Build_Rule_tlog.Source);@(CUDA_Build_Rule_tlog->'%(Fullpath)')" /><ItemGroup>
<CUDA_Build_Rule Condition="'%(CUDA_Build_Rule.NvccCompilation)' == '0'">
<NvccCompilation>-c -o "$(IntDir)\%(Filename).cu.obj"</NvccCompilation>
</CUDA_Build_Rule>
<CUDA_Build_Rule Condition="'%(CUDA_Build_Rule.NvccCompilation)' == '1'">
<NvccCompilation>-cuda -o "$(IntDir)\%(Filename).cu.c"</NvccCompilation>
</CUDA_Build_Rule>
<CUDA_Build_Rule Condition="'%(CUDA_Build_Rule.NvccCompilation)' == '2'">
<NvccCompilation>-gpu -o "$(IntDir)\%(Filename).gpu"</NvccCompilation>
</CUDA_Build_Rule>
<CUDA_Build_Rule Condition="'%(CUDA_Build_Rule.NvccCompilation)' == '3'">
<NvccCompilation>-cubin -o "data\%(Filename).cubin"</NvccCompilation>
</CUDA_Build_Rule>
<CUDA_Build_Rule Condition="'%(CUDA_Build_Rule.NvccCompilation)' == '4'">
<NvccCompilation>-ptx -o "data\%(Filename).ptx"</NvccCompilation>
</CUDA_Build_Rule>
</ItemGroup><ItemGroup>
<CUDA_Build_Rule Condition="'%(CUDA_Build_Rule.compileout)' == '0'">
<compileout>"$(IntDir)\%(Filename).cu.obj"</compileout>
</CUDA_Build_Rule>
<CUDA_Build_Rule Condition="'%(CUDA_Build_Rule.compileout)' == '1'">
<compileout>"data\%(Filename).cubin"</compileout>
</CUDA_Build_Rule>
<CUDA_Build_Rule Condition="'%(CUDA_Build_Rule.compileout)' == '2'">
<compileout>"data\%(Filename).ptx"</compileout>
</CUDA_Build_Rule>
</ItemGroup><CUDA_Build_Rule
Condition="'@(CUDA_Build_Rule)' != '' and '%(CUDA_Build_Rule.ExcludedFromBuild)' != 'true'"
CommandLineTemplate="%(CUDA_Build_Rule.CommandLineTemplate)"
IntDir = "$(IntDir)"
FileName = "%(Filename)"
CudaBinPath = "$(CUDA_BIN_PATH)\nvcc.exe"
Debug="%(CUDA_Build_Rule.Debug)"
Emulation="%(CUDA_Build_Rule.Emulation)"
FastMath="%(CUDA_Build_Rule.FastMath)"
PtxAsOptionV="%(CUDA_Build_Rule.PtxAsOptionV)"
CInterleavedPTX="%(CUDA_Build_Rule.CInterleavedPTX)"
Keep="%(CUDA_Build_Rule.Keep)"
TypeInfo="%(CUDA_Build_Rule.TypeInfo)"
Include="%(CUDA_Build_Rule.Include)"
AlternateNvccPath="%(CUDA_Build_Rule.AlternateNvccPath)"
ExtraNvccOptions="%(CUDA_Build_Rule.ExtraNvccOptions)"
Defines="%(CUDA_Build_Rule.Defines)"
AddedDependencies="%(CUDA_Build_Rule.AddedDependencies)"
ExtraCppOptions="%(CUDA_Build_Rule.ExtraCppOptions)"
MaxRegCount="%(CUDA_Build_Rule.MaxRegCount)"
NvccCompilation="%(CUDA_Build_Rule.NvccCompilation)"
compileout="%(CUDA_Build_Rule.compileout)"
Arch="%(CUDA_Build_Rule.Arch)"
CompilerPath="%(CUDA_Build_Rule.CompilerPath)"
Warning="%(CUDA_Build_Rule.Warning)"
Optimization="%(CUDA_Build_Rule.Optimization)"
RuntimeChecks="%(CUDA_Build_Rule.RuntimeChecks)"
Runtime="%(CUDA_Build_Rule.Runtime)"
AdditionalOptions="%(CUDA_Build_Rule.AdditionalOptions)"
Inputs="@(CUDA_Build_Rule)" />
</Target>
<PropertyGroup>
<ComputeLinkInputsTargets>
$(ComputeLinkInputsTargets);
ComputeCUDA_Build_RuleOutput;
</ComputeLinkInputsTargets>
<ComputeLibInputsTargets>
$(ComputeLibInputsTargets);
ComputeCUDA_Build_RuleOutput;
</ComputeLibInputsTargets>
</PropertyGroup>
<Target
Name="ComputeCUDA_Build_RuleOutput"
Condition="'@(CUDA_Build_Rule)' != ''">
<ItemGroup>
<CUDA_Build_RuleDirsToMake
Condition="'@(CUDA_Build_Rule)' != '' and '%(CUDA_Build_Rule.ExcludedFromBuild)' != 'true'"
Include="%(CUDA_Build_Rule.Outputs)" />
<Link
Include="%(CUDA_Build_RuleDirsToMake.Identity)"
Condition="'%(Extension)'=='.obj' or '%(Extension)'=='.res' or '%(Extension)'=='.rsc' or '%(Extension)'=='.lib'" />
<Lib
Include="%(CUDA_Build_RuleDirsToMake.Identity)"
Condition="'%(Extension)'=='.obj' or '%(Extension)'=='.res' or '%(Extension)'=='.rsc' or '%(Extension)'=='.lib'" />
<ImpLib
Include="%(CUDA_Build_RuleDirsToMake.Identity)"
Condition="'%(Extension)'=='.obj' or '%(Extension)'=='.res' or '%(Extension)'=='.rsc' or '%(Extension)'=='.lib'" />
</ItemGroup>
<MakeDir
Directories="data;@(CUDA_Build_RuleDirsToMake->'%(RootDir)%(Directory)')" />
</Target>
</Project>Cuda.props:
<?xml version="1.0" encoding="utf-8"?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup
Condition="'$(CUDA_Build_RuleBeforeTargets)' == '' and '$(CUDA_Build_RuleAfterTargets)' == '' and '$(ConfigurationType)' != 'Makefile'">
<CUDA_Build_RuleBeforeTargets>Midl</CUDA_Build_RuleBeforeTargets>
<CUDA_Build_RuleAfterTargets>CustomBuild</CUDA_Build_RuleAfterTargets>
<CudaBinPath Condition="'$(CudaBinPath)' == ''">$(CUDA_BIN_PATH)\nvcc.exe</CudaBinPath>
<VCBinPath Condition="'$(VCBinPATH)' == ''">"$(VCInstallDir)bin"</VCBinPath>
</PropertyGroup>
<PropertyGroup>
<CUDA_Build_RuleDependsOn
Condition="'$(ConfigurationType)' != 'Makefile'">_SelectedFiles;$(CUDA_Build_RuleDependsOn)</CUDA_Build_RuleDependsOn>
</PropertyGroup>
<ItemDefinitionGroup>
<CUDA_Build_Rule>
<Debug>False</Debug>
<Emulation>False</Emulation>
<FastMath>False</FastMath>
<PtxAsOptionV>False</PtxAsOptionV>
<CInterleavedPTX>False</CInterleavedPTX>
<Keep>False</Keep>
<TypeInfo>False</TypeInfo>
<Include>$(CUDA_INC_PATH)</Include>
<MaxRegCount>32</MaxRegCount>
<NvccCompilation>0</NvccCompilation>
<compileout>0</compileout>
<Arch>10</Arch>
<CompilerPath>0</CompilerPath>
<Warning>3</Warning>
<Optimization>2</Optimization>
<RuntimeChecks>0</RuntimeChecks>
<Runtime>0</Runtime>
<CommandLineTemplate>
echo $(CudaBinPath) [Keep] [CInterleavedPTX] [ExtraNvccOptions] [Arch] -ccbin $(VCBinPath) [Emulation] [FastMath] [Defines] -Xcompiler "/EHsc [Warning] /nologo [Optimization] /Zi [RuntimeChecks] [Runtime] [TypeInfo] [ExtraCppOptions]" [Include] [MaxRegCount] [PtxAsOptionV] [NvccCompilation] "%(FullPath)"
$(CudaBinPath) [Keep] [CInterleavedPTX] [ExtraNvccOptions] [Arch] -ccbin $(VCBinPath) [Emulation] [FastMath] [Defines] -Xcompiler "/EHsc [Warning] /nologo [Optimization] /Zi [RuntimeChecks] [Runtime] [TypeInfo] [ExtraCppOptions]" [Include] [MaxRegCount] [ptxasoptionv] [NvccCompilation] "%(FullPath)"</CommandLineTemplate>
<Outputs>[compileout]</Outputs>
<ExecutionDescription>Compiling with CUDA Build Rule...</ExecutionDescription>
<AdditionalDependencies>[AddedDependencies]</AdditionalDependencies>
</CUDA_Build_Rule>
</ItemDefinitionGroup>
</Project>
Li Shao, MSFT
Li Shao -
Thursday, July 08, 2010 3:35 PM
Using your new files doesn't seem to help me. They fix the resolution of the environment variables but when building in VS I still get the
exited with code -1.
when I try and build in a command prompt I get
nvcc cannot find a supported cl version. Only MSVC 8.0 and MSVC 9.0 are supported
Any ideas?
I am using CUDA 2.3 but it looks like you are as well.
-
Wednesday, July 14, 2010 4:59 AM
It might be that nvcc needs cl from earlier version. You can try to install VS2008 version of compiler on the machine and point nvcc to that and see if that can solve your problem.
Li Shao, MSFT
Li Shao -
Tuesday, August 31, 2010 7:52 PM
To be more exact about the previous answer, please set $(VCBinPath) to the directory where VS2008 compiler is.
Also, based on some reported issues, the following is the updated cuda.targets file:
<?xml version="1.0" encoding="utf-8"?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<PropertyPageSchema
Include="$(MSBuildThisFileDirectory)$(MSBuildThisFileName).xml" />
<AvailableItemName
Include="CUDA_Build_Rule">
<Targets>_CUDA_Build_Rule</Targets>
</AvailableItemName>
</ItemGroup>
<UsingTask
TaskName="CUDA_Build_Rule"
TaskFactory="XamlTaskFactory"
AssemblyName="Microsoft.Build.Tasks.v4.0">
<Task>$(MSBuildThisFileDirectory)$(MSBuildThisFileName).xml</Task>
</UsingTask>
<Target
Name="_CUDA_Build_Rule"
BeforeTargets="$(CUDA_Build_RuleBeforeTargets)"
AfterTargets="$(CUDA_Build_RuleAfterTargets)"
Condition="'@(CUDA_Build_Rule)' != ''"
DependsOnTargets="$(CUDA_Build_RuleDependsOn);ComputeCUDA_Build_RuleOutput"
Outputs="@(CUDA_Build_Rule->Metadata('Outputs')->Distinct())"
Inputs="@(CUDA_Build_Rule);%(CUDA_Build_Rule.AdditionalDependencies);$(MSBuildProjectFile)">
<ItemGroup
Condition="'@(SelectedFiles)' != ''">
<CUDA_Build_Rule
Remove="@(CUDA_Build_Rule)"
Condition="'%(Identity)' != '@(SelectedFiles)'" />
</ItemGroup>
<ItemGroup>
<CUDA_Build_Rule_tlog
Include="%(CUDA_Build_Rule.Outputs)"
Condition="'%(CUDA_Build_Rule.Outputs)' != '' and '%(CUDA_Build_Rule.ExcludedFromBuild)' != 'true'">
<Source>@(CUDA_Build_Rule, '|')</Source>
</CUDA_Build_Rule_tlog>
</ItemGroup>
<Message
Importance="High"
Text="%(CUDA_Build_Rule.ExecutionDescription)" />
<WriteLinesToFile
Condition="'@(CUDA_Build_Rule_tlog)' != '' and '%(CUDA_Build_Rule_tlog.ExcludedFromBuild)' != 'true'"
File="$(IntDir)$(ProjectName).write.1.tlog"
Lines="^%(CUDA_Build_Rule_tlog.Source);@(CUDA_Build_Rule_tlog->'%(Fullpath)')" /><ItemGroup>
<CUDA_Build_Rule Condition="'%(CUDA_Build_Rule.NvccCompilation)' == '0'">
<NvccCompilation>-c -o "$(IntDir)\%(Filename).cu.obj"</NvccCompilation>
</CUDA_Build_Rule>
<CUDA_Build_Rule Condition="'%(CUDA_Build_Rule.NvccCompilation)' == '1'">
<NvccCompilation>-cuda -o "$(IntDir)\%(Filename).cu.c"</NvccCompilation>
</CUDA_Build_Rule>
<CUDA_Build_Rule Condition="'%(CUDA_Build_Rule.NvccCompilation)' == '2'">
<NvccCompilation>-gpu -o "$(IntDir)\%(Filename).gpu"</NvccCompilation>
</CUDA_Build_Rule>
<CUDA_Build_Rule Condition="'%(CUDA_Build_Rule.NvccCompilation)' == '3'">
<NvccCompilation>-cubin -o "data\%(Filename).cubin"</NvccCompilation>
</CUDA_Build_Rule>
<CUDA_Build_Rule Condition="'%(CUDA_Build_Rule.NvccCompilation)' == '4'">
<NvccCompilation>-ptx -o "data\%(Filename).ptx"</NvccCompilation>
</CUDA_Build_Rule>
</ItemGroup><CUDA_Build_Rule
Condition="'@(CUDA_Build_Rule)' != '' and '%(CUDA_Build_Rule.ExcludedFromBuild)' != 'true'"
CommandLineTemplate="%(CUDA_Build_Rule.CommandLineTemplate)"
IntDir = "$(IntDir)"
FileName = "%(Filename)"
CudaBinPath = "$(CUDA_BIN_PATH)\nvcc.exe"
Debug="%(CUDA_Build_Rule.Debug)"
Emulation="%(CUDA_Build_Rule.Emulation)"
FastMath="%(CUDA_Build_Rule.FastMath)"
PtxAsOptionV="%(CUDA_Build_Rule.PtxAsOptionV)"
CInterleavedPTX="%(CUDA_Build_Rule.CInterleavedPTX)"
Keep="%(CUDA_Build_Rule.Keep)"
TypeInfo="%(CUDA_Build_Rule.TypeInfo)"
Include="%(CUDA_Build_Rule.Include)"
AlternateNvccPath="%(CUDA_Build_Rule.AlternateNvccPath)"
ExtraNvccOptions="%(CUDA_Build_Rule.ExtraNvccOptions)"
Defines="%(CUDA_Build_Rule.Defines)"
AddedDependencies="%(CUDA_Build_Rule.AddedDependencies)"
ExtraCppOptions="%(CUDA_Build_Rule.ExtraCppOptions)"
MaxRegCount="%(CUDA_Build_Rule.MaxRegCount)"
NvccCompilation="%(CUDA_Build_Rule.NvccCompilation)"
compileout="%(CUDA_Build_Rule.compileout)"
Arch="%(CUDA_Build_Rule.Arch)"
CompilerPath="%(CUDA_Build_Rule.CompilerPath)"
Warning="%(CUDA_Build_Rule.Warning)"
Optimization="%(CUDA_Build_Rule.Optimization)"
RuntimeChecks="%(CUDA_Build_Rule.RuntimeChecks)"
Runtime="%(CUDA_Build_Rule.Runtime)"
AdditionalOptions="%(CUDA_Build_Rule.AdditionalOptions)"
Inputs="@(CUDA_Build_Rule)" />
</Target>
<PropertyGroup>
<ComputeLinkInputsTargets>
$(ComputeLinkInputsTargets);
ComputeCUDA_Build_RuleOutput;
</ComputeLinkInputsTargets>
<ComputeLibInputsTargets>
$(ComputeLibInputsTargets);
ComputeCUDA_Build_RuleOutput;
</ComputeLibInputsTargets>
</PropertyGroup>
<Target
Name="ComputeCUDA_Build_RuleOutput"
Condition="'@(CUDA_Build_Rule)' != ''"><ItemGroup>
<CUDA_Build_Rule Condition="'%(CUDA_Build_Rule.compileout)' == '0'">
<compileout>$(IntDir)\%(Filename).cu.obj</compileout>
</CUDA_Build_Rule>
<CUDA_Build_Rule Condition="'%(CUDA_Build_Rule.compileout)' == '1'">
<compileout>data\%(Filename).cubin</compileout>
</CUDA_Build_Rule>
<CUDA_Build_Rule Condition="'%(CUDA_Build_Rule.compileout)' == '2'">
<compileout>data\%(Filename).ptx</compileout>
</CUDA_Build_Rule>
</ItemGroup><ItemGroup>
<CUDA_Build_RuleDirsToMake
Condition="'@(CUDA_Build_Rule)' != '' and '%(CUDA_Build_Rule.ExcludedFromBuild)' != 'true'"
Include="%(CUDA_Build_Rule.compileout)" />
<Link
Include="%(CUDA_Build_RuleDirsToMake.Identity)"
Condition="'%(Extension)'=='.obj' or '%(Extension)'=='.res' or '%(Extension)'=='.rsc' or '%(Extension)'=='.lib'" />
<Lib
Include="%(CUDA_Build_RuleDirsToMake.Identity)"
Condition="'%(Extension)'=='.obj' or '%(Extension)'=='.res' or '%(Extension)'=='.rsc' or '%(Extension)'=='.lib'" />
<ImpLib
Include="%(CUDA_Build_RuleDirsToMake.Identity)"
Condition="'%(Extension)'=='.obj' or '%(Extension)'=='.res' or '%(Extension)'=='.rsc' or '%(Extension)'=='.lib'" />
</ItemGroup>
<MakeDir
Directories="data;@(CUDA_Build_RuleDirsToMake->'%(RootDir)%(Directory)')" />
</Target>
</Project>Li Shao, MSFT
Li Shao -
Friday, September 24, 2010 6:24 PM
Here is the most up to date version which solves two issues:
1. Resolved incremental build: instead of using Include="%(CUDA_Build_Rule.Outputs)", use Include="%(CUDA_Build_Rule.compileout)"
2. Resolved the issue where include path are being passed to the command line as -Ipath1;path2;path3 instead of -Ipath1 –Ipath2 –Ipath3, The fix is to set Separator property for the switch to "" or remove this property. ";" is taken by MSBuild as the default separator.
CUDA.targets:
<?xml version="1.0" encoding="utf-8"?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<PropertyPageSchema
Include="$(MSBuildThisFileDirectory)$(MSBuildThisFileName).xml" />
<AvailableItemName
Include="CUDA_Build_Rule">
<Targets>_CUDA_Build_Rule</Targets>
</AvailableItemName>
</ItemGroup>
<UsingTask
TaskName="CUDA_Build_Rule"
TaskFactory="XamlTaskFactory"
AssemblyName="Microsoft.Build.Tasks.v4.0">
<Task>$(MSBuildThisFileDirectory)$(MSBuildThisFileName).xml</Task>
</UsingTask>
<Target
Name="_CUDA_Build_Rule"
BeforeTargets="$(CUDA_Build_RuleBeforeTargets)"
AfterTargets="$(CUDA_Build_RuleAfterTargets)"
Condition="'@(CUDA_Build_Rule)' != ''"
DependsOnTargets="$(CUDA_Build_RuleDependsOn);ComputeCUDA_Build_RuleOutput"
Outputs="@(CUDA_Build_Rule->Metadata('compileout')->Distinct())"
Inputs="@(CUDA_Build_Rule);%(CUDA_Build_Rule.AdditionalDependencies);$(MSBuildProjectFile)">
<ItemGroup
Condition="'@(SelectedFiles)' != ''">
<CUDA_Build_Rule
Remove="@(CUDA_Build_Rule)"
Condition="'%(Identity)' != '@(SelectedFiles)'" />
</ItemGroup>
<ItemGroup>
<CUDA_Build_Rule_tlog
Include="%(CUDA_Build_Rule.Outputs)"
Condition="'%(CUDA_Build_Rule.Outputs)' != '' and '%(CUDA_Build_Rule.ExcludedFromBuild)' != 'true'">
<Source>@(CUDA_Build_Rule, '|')</Source>
</CUDA_Build_Rule_tlog>
</ItemGroup>
<Message
Importance="High"
Text="%(CUDA_Build_Rule.ExecutionDescription)" />
<WriteLinesToFile
Condition="'@(CUDA_Build_Rule_tlog)' != '' and '%(CUDA_Build_Rule_tlog.ExcludedFromBuild)' != 'true'"
File="$(IntDir)$(ProjectName).write.1.tlog"
Lines="^%(CUDA_Build_Rule_tlog.Source);@(CUDA_Build_Rule_tlog->'%(Fullpath)')" /><ItemGroup>
<CUDA_Build_Rule Condition="'%(CUDA_Build_Rule.NvccCompilation)' == '0'">
<NvccCompilation>-c -o "$(IntDir)\%(Filename).cu.obj"</NvccCompilation>
</CUDA_Build_Rule>
<CUDA_Build_Rule Condition="'%(CUDA_Build_Rule.NvccCompilation)' == '1'">
<NvccCompilation>-cuda -o "$(IntDir)\%(Filename).cu.c"</NvccCompilation>
</CUDA_Build_Rule>
<CUDA_Build_Rule Condition="'%(CUDA_Build_Rule.NvccCompilation)' == '2'">
<NvccCompilation>-gpu -o "$(IntDir)\%(Filename).gpu"</NvccCompilation>
</CUDA_Build_Rule>
<CUDA_Build_Rule Condition="'%(CUDA_Build_Rule.NvccCompilation)' == '3'">
<NvccCompilation>-cubin -o "data\%(Filename).cubin"</NvccCompilation>
</CUDA_Build_Rule>
<CUDA_Build_Rule Condition="'%(CUDA_Build_Rule.NvccCompilation)' == '4'">
<NvccCompilation>-ptx -o "data\%(Filename).ptx"</NvccCompilation>
</CUDA_Build_Rule>
</ItemGroup><CUDA_Build_Rule
Condition="'@(CUDA_Build_Rule)' != '' and '%(CUDA_Build_Rule.ExcludedFromBuild)' != 'true'"
CommandLineTemplate="%(CUDA_Build_Rule.CommandLineTemplate)"
IntDir = "$(IntDir)"
FileName = "%(Filename)"
CudaBinPath = "$(CUDA_BIN_PATH)\nvcc.exe"
Debug="%(CUDA_Build_Rule.Debug)"
Emulation="%(CUDA_Build_Rule.Emulation)"
FastMath="%(CUDA_Build_Rule.FastMath)"
PtxAsOptionV="%(CUDA_Build_Rule.PtxAsOptionV)"
CInterleavedPTX="%(CUDA_Build_Rule.CInterleavedPTX)"
Keep="%(CUDA_Build_Rule.Keep)"
TypeInfo="%(CUDA_Build_Rule.TypeInfo)"
Include="%(CUDA_Build_Rule.Include)"
AlternateNvccPath="%(CUDA_Build_Rule.AlternateNvccPath)"
ExtraNvccOptions="%(CUDA_Build_Rule.ExtraNvccOptions)"
Defines="%(CUDA_Build_Rule.Defines)"
AddedDependencies="%(CUDA_Build_Rule.AddedDependencies)"
ExtraCppOptions="%(CUDA_Build_Rule.ExtraCppOptions)"
MaxRegCount="%(CUDA_Build_Rule.MaxRegCount)"
NvccCompilation="%(CUDA_Build_Rule.NvccCompilation)"
compileout="%(CUDA_Build_Rule.compileout)"
Arch="%(CUDA_Build_Rule.Arch)"
CompilerPath="%(CUDA_Build_Rule.CompilerPath)"
Warning="%(CUDA_Build_Rule.Warning)"
Optimization="%(CUDA_Build_Rule.Optimization)"
RuntimeChecks="%(CUDA_Build_Rule.RuntimeChecks)"
Runtime="%(CUDA_Build_Rule.Runtime)"
AdditionalOptions="%(CUDA_Build_Rule.AdditionalOptions)"
Inputs="@(CUDA_Build_Rule)" />
</Target>
<PropertyGroup>
<ComputeLinkInputsTargets>
$(ComputeLinkInputsTargets);
ComputeCUDA_Build_RuleOutput;
</ComputeLinkInputsTargets>
<ComputeLibInputsTargets>
$(ComputeLibInputsTargets);
ComputeCUDA_Build_RuleOutput;
</ComputeLibInputsTargets>
</PropertyGroup>
<Target
Name="ComputeCUDA_Build_RuleOutput"
Condition="'@(CUDA_Build_Rule)' != ''"><ItemGroup>
<CUDA_Build_Rule Condition="'%(CUDA_Build_Rule.compileout)' == '0'">
<compileout>$(IntDir)\%(Filename).cu.obj</compileout>
</CUDA_Build_Rule>
<CUDA_Build_Rule Condition="'%(CUDA_Build_Rule.compileout)' == '1'">
<compileout>data\%(Filename).cubin</compileout>
</CUDA_Build_Rule>
<CUDA_Build_Rule Condition="'%(CUDA_Build_Rule.compileout)' == '2'">
<compileout>data\%(Filename).ptx</compileout>
</CUDA_Build_Rule>
</ItemGroup><ItemGroup>
<CUDA_Build_RuleDirsToMake
Condition="'@(CUDA_Build_Rule)' != '' and '%(CUDA_Build_Rule.ExcludedFromBuild)' != 'true'"
Include="%(CUDA_Build_Rule.compileout)" />
<Link
Include="%(CUDA_Build_RuleDirsToMake.Identity)"
Condition="'%(Extension)'=='.obj' or '%(Extension)'=='.res' or '%(Extension)'=='.rsc' or '%(Extension)'=='.lib'" />
<Lib
Include="%(CUDA_Build_RuleDirsToMake.Identity)"
Condition="'%(Extension)'=='.obj' or '%(Extension)'=='.res' or '%(Extension)'=='.rsc' or '%(Extension)'=='.lib'" />
<ImpLib
Include="%(CUDA_Build_RuleDirsToMake.Identity)"
Condition="'%(Extension)'=='.obj' or '%(Extension)'=='.res' or '%(Extension)'=='.rsc' or '%(Extension)'=='.lib'" />
</ItemGroup>
<MakeDir
Directories="data;@(CUDA_Build_RuleDirsToMake->'%(RootDir)%(Directory)')" />
</Target>
</Project>Cuda.Props:
<?xml version="1.0" encoding="utf-8"?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup
Condition="'$(CUDA_Build_RuleBeforeTargets)' == '' and '$(CUDA_Build_RuleAfterTargets)' == '' and '$(ConfigurationType)' != 'Makefile'">
<CUDA_Build_RuleBeforeTargets>Midl</CUDA_Build_RuleBeforeTargets>
<CUDA_Build_RuleAfterTargets>CustomBuild</CUDA_Build_RuleAfterTargets>
<CudaBinPath Condition="'$(CudaBinPath)' == ''">$(CUDA_BIN_PATH)\nvcc.exe</CudaBinPath>
<VCBinPath Condition="'$(VCBinPATH)' == ''">"$(VCInstallDir)bin"</VCBinPath>
</PropertyGroup>
<PropertyGroup>
<CUDA_Build_RuleDependsOn
Condition="'$(ConfigurationType)' != 'Makefile'">_SelectedFiles;$(CUDA_Build_RuleDependsOn)</CUDA_Build_RuleDependsOn>
</PropertyGroup>
<ItemDefinitionGroup>
<CUDA_Build_Rule>
<Debug>False</Debug>
<Emulation>False</Emulation>
<FastMath>False</FastMath>
<PtxAsOptionV>False</PtxAsOptionV>
<CInterleavedPTX>False</CInterleavedPTX>
<Keep>False</Keep>
<TypeInfo>False</TypeInfo>
<Include>$(CUDA_INC_PATH)</Include>
<MaxRegCount>32</MaxRegCount>
<NvccCompilation>0</NvccCompilation>
<compileout>0</compileout>
<Arch>10</Arch>
<CompilerPath>0</CompilerPath>
<Warning>3</Warning>
<Optimization>2</Optimization>
<RuntimeChecks>0</RuntimeChecks>
<Runtime>0</Runtime>
<CommandLineTemplate>
echo $(CudaBinPath) [Keep] [CInterleavedPTX] [ExtraNvccOptions] [Arch] -ccbin $(VCBinPath) [Emulation] [FastMath] [Defines] -Xcompiler "/EHsc [Warning] /nologo [Optimization] /Zi [RuntimeChecks] [Runtime] [TypeInfo] [ExtraCppOptions]" [Include] [MaxRegCount] [PtxAsOptionV] [NvccCompilation] "%(FullPath)"
$(CudaBinPath) [Keep] [CInterleavedPTX] [ExtraNvccOptions] [Arch] -ccbin $(VCBinPath) [Emulation] [FastMath] [Defines] -Xcompiler "/EHsc [Warning] /nologo [Optimization] /Zi [RuntimeChecks] [Runtime] [TypeInfo] [ExtraCppOptions]" [Include] [MaxRegCount] [ptxasoptionv] [NvccCompilation] "%(FullPath)"</CommandLineTemplate>
<ExecutionDescription>Compiling with CUDA Build Rule...</ExecutionDescription>
<AdditionalDependencies>[AddedDependencies]</AdditionalDependencies>
</CUDA_Build_Rule>
</ItemDefinitionGroup>
</Project>
Cuda.xml:
<?xml version="1.0" encoding="utf-8"?>
<ProjectSchemaDefinitions xmlns="clr-namespace:Microsoft.Build.Framework.XamlTypes;assembly=Microsoft.Build.Framework" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:sys="clr-namespace:System;assembly=mscorlib" xmlns:transformCallback="Microsoft.Cpp.Dev10.ConvertPropertyCallback">
<Rule
Name="CUDA_Build_Rule"
PageTemplate="tool"
DisplayName="CUDA Build Rule v2.3.0"
Order="200">
<Rule.DataSource>
<DataSource
Persistence="ProjectFile"
ItemType="CUDA_Build_Rule" />
</Rule.DataSource>
<Rule.Categories>
<Category
Name="General">
<Category.DisplayName>
<sys:String>General</sys:String>
</Category.DisplayName>
</Category>
<Category
Name="Command Line"
Subtype="CommandLine">
<Category.DisplayName>
<sys:String>Command Line</sys:String>
</Category.DisplayName>
</Category>
</Rule.Categories>
<StringListProperty
Name="Inputs"
Category="Command Line"
IsRequired="true"
Switch=" ">
<StringListProperty.DataSource>
<DataSource
Persistence="ProjectFile"
ItemType="CUDA_Build_Rule"
SourceType="Item" />
</StringListProperty.DataSource>
</StringListProperty>
<StringListProperty
Name="IntDir"
Category="Command Line"
IsRequired="true"
Switch=" ">
<StringListProperty.DataSource>
<DataSource
Persistence="ProjectFile"
ItemType="CUDA_Build_Rule"
SourceType="Item" />
</StringListProperty.DataSource>
</StringListProperty>
<StringListProperty
Name="Filename"
Category="Command Line"
IsRequired="true"
Switch=" ">
</StringListProperty>
<BoolProperty
Name="Debug"
HelpContext="0"
DisplayName="Generate Debug Information"
Description="Specifies whether or not debugging information is generated by the CUDA compiler. (-D_DEBUG)"
Switch="-D_DEBUG" />
<BoolProperty
Name="Emulation"
HelpContext="0"
DisplayName="Emulation Mode"
Description="Whether or not to generate emulated code."
Switch="-deviceemu -D_DEVICEEMU" />
<BoolProperty
Name="FastMath"
Subcategory="Default"
HelpContext="0"
DisplayName="Use Fast Math"
Description="Make use of the fast math library."
Switch="-use_fast_math" />
<BoolProperty
Name="PtxAsOptionV"
HelpContext="0"
DisplayName="Verbose PTXAS Output"
Switch="--ptxas-options=-v" />
<BoolProperty
Name="CInterleavedPTX"
HelpContext="0"
DisplayName="Interleave C in PTXAS Output"
Switch="--opencc-options -LIST:source=on" />
<BoolProperty
Name="Keep"
Category="Preprocessor"
HelpContext="0"
DisplayName="Keep preprocessed files (.ptx, .cubin, cudafe1.c, cudafe1.cpp, cudafe1.gpu, etc.)"
Description="Specifies that preprocessor files generated by the CUDA compiler are not deleted."
Switch="--keep" />
<BoolProperty
Name="TypeInfo"
Category="Hybrid CUDA/C++ Options"
HelpContext="0"
DisplayName="Enable Run-Time Type Info"
Description="Adds code for checking C++ object types at run time (runtime type information). (/GR)"
Switch="/GR" />
<StringListProperty
Name="Include"
HelpContext="0"
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])"
Separator=""
Switch="-I[value]" />
<StringProperty
Name="AlternateNvccPath"
HelpContext="0"
DisplayName="Alternate path to nvcc.exe (non-standard installation)"
Switch="[value]\nvcc.exe" />
<StringProperty
Name="ExtraNvccOptions"
HelpContext="0"
DisplayName="Extra Options"
Description="Supply any additional command line options to NVCC"
Switch="[value]" />
<StringListProperty
Name="Defines"
Category="Preprocessor"
HelpContext="0"
DisplayName="Preprocessor Definitions"
Description="Specifies one or more preprocessor defines. (-D[macro])"
Separator=""
Switch="-D[value]" />
<StringProperty
Name="AddedDependencies"
HelpContext="0"
DisplayName="Source Dependencies"
Description="Add additional CUDA file dependencies"
Switch="[value]" />
<StringProperty
Name="ExtraCppOptions"
Category="Hybrid CUDA/C++ Options"
HelpContext="0"
DisplayName="Extra C++ Options"
Description="Supply any additional command line options to the host C++ compiler"
Switch="[value]" />
<StringProperty
Name="NvccCompilation"
Category="NvccCompilation..."
HelpContext="0"
DisplayName="NvccCompilation..."
Description="Select desired output of NVCC compilation (-c/-compile, -cuda, -gpu, -cubin, -ptx)"
Switch="[value]" />
<StringProperty
Name="compileout"
Category="compileout..."
HelpContext="0"
DisplayName="compileout..."
Description="Sets output as an OBJ or cubin file"
Switch="[value]" />
<StringProperty
Name="CudaBinPath"
Category="CudaBinPath..."
HelpContext="0"
DisplayName="CudaBinPath..."
Description="Path to Cuda tool"
Switch="[value]" />
<EnumProperty
Name="Arch"
HelpContext="0"
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)">
<EnumValue
Name="10"
DisplayName="sm_10"
Switch="-arch sm_10" />
<EnumValue
Name="11"
DisplayName="sm_11"
Switch="-arch sm_11" />
<EnumValue
Name="12"
DisplayName="sm_12"
Switch="-arch sm_12" />
<EnumValue
Name="13"
DisplayName="sm_13"
Switch="-arch sm_13" />
</EnumProperty>
<EnumProperty
Name="CompilerPath"
HelpContext="0"
DisplayName="Path to nvcc.exe"
Description="Specifies the path to the CUDA compiler, nvcc.exe ">
<EnumValue
Name="0"
DisplayName="Installed Toolkit (uses CUDA_BIN_PATH environment varible)"
Switch="[value]" />
<EnumValue
Name="1"
DisplayName="Use Alternate path to CUDA, specified below"
Switch="[value]" />
</EnumProperty>
<EnumProperty
Name="Warning"
Category="Hybrid CUDA/C++ Options"
HelpContext="0"
DisplayName="Warning Level"
Description="Select how strict you want the compiler to be about checking for potentially suspect constructs. (/W0 - /W4)">
<EnumValue
Name="0"
DisplayName="Off: Turn Off All Warnings (/W0)"
Switch="/W0" />
<EnumValue
Name="1"
DisplayName="Level 1 (/W1)"
Switch="/W1" />
<EnumValue
Name="2"
DisplayName="Level 2 (/W2)"
Switch="/W2" />
<EnumValue
Name="3"
DisplayName="Level 3 (/W3)"
Switch="/W3" />
<EnumValue
Name="4"
DisplayName="Level 4 (/W4)"
Switch="/W4" />
</EnumProperty>
<EnumProperty
Name="Optimization"
HelpContext="0"
DisplayName="Optimization"
Description="Select option for code optimization; choose Custom to use specific optimization options. (/Od, /O1, /O2, /Ox)">
<EnumValue
Name="0"
DisplayName="Disabled (/Od)"
Switch="/Od" />
<EnumValue
Name="1"
DisplayName="Minimize Size (/O1)"
Switch="/O1" />
<EnumValue
Name="2"
DisplayName="Maximize Speed (/O2)"
Switch="/O2" />
<EnumValue
Name="3"
DisplayName="Full Optimization (/Ox)"
Switch="/Ox" />
</EnumProperty>
<EnumProperty
Name="RuntimeChecks"
Category="Hybrid CUDA/C++ Options"
HelpContext="0"
DisplayName="Basic Runtime Checks"
Description="Perform basic runtime error checks, incompatible with any optimization type other than debug. (/RTCs, /RTCu, /RTC1)">
<EnumValue
Name="0"
DisplayName="Default"
Switch=" " />
<EnumValue
Name="1"
DisplayName="Stack Frames (/RTCs)"
Switch="/RTCs" />
<EnumValue
Name="2"
DisplayName="Uninitialized Variables (/RTCu)"
Switch="/RTCu" />
<EnumValue
Name="3"
DisplayName="Both (/RTC1, equiv. to /RTCsu)"
Switch="/RTC1" />
</EnumProperty>
<EnumProperty
Name="Runtime"
Category="Hybrid CUDA/C++ Options"
HelpContext="0"
DisplayName="Runtime Library"
Description="Specify runtime library for linking. (/MT, /MTd, /MD, /MDd, /ML, /MLd)">
<EnumValue
Name="0"
DisplayName="Multi-Threaded (/MT)"
Switch="/MT" />
<EnumValue
Name="1"
DisplayName="Multi-Threaded Debug (/MTd)"
Switch="/MTd" />
<EnumValue
Name="2"
DisplayName="Multi-Threaded DLL (/MD)"
Switch="/MD" />
<EnumValue
Name="3"
DisplayName="Multi-Threaded Debug DLL (/MDd)"
Switch="/MDd" />
<EnumValue
Name="4"
DisplayName="Single-Threaded (/ML)"
Switch="/ML" />
<EnumValue
Name="5"
DisplayName="Single-Threaded Debug (/MLd)"
Switch="/MLd" />
</EnumProperty>
<IntProperty
Name="MaxRegCount"
HelpContext="0"
DisplayName="maxrregcount"
Switch="-maxrregcount=[Value]" />
<StringProperty
Name="CommandLineTemplate"
DisplayName="Command Line"
Visible="False"
IncludeInCommandLine="False" />
<DynamicEnumProperty
Name="CUDA_Build_RuleBeforeTargets"
Category="General"
EnumProvider="Targets"
IncludeInCommandLine="False">
<DynamicEnumProperty.DisplayName>
<sys:String>Execute Before</sys:String>
</DynamicEnumProperty.DisplayName>
<DynamicEnumProperty.Description>
<sys:String>Specifies the targets for the build customization to run before.</sys:String>
</DynamicEnumProperty.Description>
<DynamicEnumProperty.ProviderSettings>
<NameValuePair
Name="Exclude"
Value="^CUDA_Build_RuleBeforeTargets|^Compute" />
</DynamicEnumProperty.ProviderSettings>
<DynamicEnumProperty.DataSource>
<DataSource
Persistence="ProjectFile"
HasConfigurationCondition="true" />
</DynamicEnumProperty.DataSource>
</DynamicEnumProperty>
<DynamicEnumProperty
Name="CUDA_Build_RuleAfterTargets"
Category="General"
EnumProvider="Targets"
IncludeInCommandLine="False">
<DynamicEnumProperty.DisplayName>
<sys:String>Execute After</sys:String>
</DynamicEnumProperty.DisplayName>
<DynamicEnumProperty.Description>
<sys:String>Specifies the targets for the build customization to run after.</sys:String>
</DynamicEnumProperty.Description>
<DynamicEnumProperty.ProviderSettings>
<NameValuePair
Name="Exclude"
Value="^CUDA_Build_RuleAfterTargets|^Compute" />
</DynamicEnumProperty.ProviderSettings>
<DynamicEnumProperty.DataSource>
<DataSource
Persistence="ProjectFile"
ItemType=""
HasConfigurationCondition="true" />
</DynamicEnumProperty.DataSource>
</DynamicEnumProperty>
<StringListProperty
Name="Outputs"
DisplayName="Outputs"
Visible="False"
IncludeInCommandLine="False" />
<StringProperty
Name="ExecutionDescription"
DisplayName="Execution Description"
Visible="False"
IncludeInCommandLine="False" />
<StringListProperty
Name="AdditionalDependencies"
DisplayName="Additional Dependencies"
IncludeInCommandLine="False"
Visible="false" />
<StringProperty
Subtype="AdditionalOptions"
Name="AdditionalOptions"
Category="Command Line">
<StringProperty.DisplayName>
<sys:String>Additional Options</sys:String>
</StringProperty.DisplayName>
<StringProperty.Description>
<sys:String>Additional Options</sys:String>
</StringProperty.Description>
</StringProperty>
</Rule>
<ItemType
Name="CUDA_Build_Rule"
DisplayName="CUDA Build Rule v2.3.0" />
<FileExtension
Name="*.cu"
ContentType="CUDA_Build_Rule" />
<ContentType
Name="CUDA_Build_Rule"
DisplayName="CUDA Build Rule v2.3.0"
ItemType="CUDA_Build_Rule" />
</ProjectSchemaDefinitions>Li Shao, MSFT
Li Shao

