Locked Build error: error MSB3686

  • Wednesday, November 11, 2009 8:49 AM
     
     
    1>  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 AM
     
     
    follows 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 &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; &#x0D;&#x0A; [CompilerPath] [Keep] [CInterleavedPTX] [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="-cubin -o &quot;data\$(InputName).cubin&quot;"
           DisplayName="Generate .cubin file  (-cubin)"
          />
          <EnumValue
           Value="4"
           Switch="-ptx -o &quot;data\$(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;"
          />
          <EnumValue
           Value="2"
           Switch="&quot;data/$(InputName).ptx&quot;"
           DisplayName="&quot;data/$(InputName).ptx&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"
        />
                                    <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 AM
     
     
    follows 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-&gt;Metadata('Outputs')-&gt;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-&gt;'%(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-&gt;'%(RootDir)%(Directory)')" />
      </Target>
    </Project>
  • Wednesday, November 11, 2009 8:52 AM
     
     
    follows 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 AM
     
     
    follows 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&quot;[value]&quot;" />
        <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 &quot;$(IntDir)\$(InputName).cu.obj&quot;" />
          <EnumValue
            Name="1"
            DisplayName="Generate hybrid .c file  (-cuda)"
            Switch="-cuda -o &quot;$(IntDir)\$(InputName).cu.c&quot;" />
          <EnumValue
            Name="2"
            DisplayName="Generate .gpu file  (-gpu)"
            Switch="-gpu -o &quot;$(IntDir)\$(InputName).gpu&quot;" />
          <EnumValue
            Name="3"
            DisplayName="Generate .cubin file  (-cubin)"
            Switch="-cubin -o &quot;data\$(InputName).cubin&quot;" />
          <EnumValue
            Name="4"
            DisplayName="Generate .ptx file  (-ptx)"
            Switch="-ptx -o &quot;data\$(InputName).ptx&quot;" />
        </EnumProperty>
        <EnumProperty
          Name="compileout"
          HelpContext="0"
          DisplayName="Compiler Output (obj/cubin)"
          Description="Sets output as an OBJ or cubin file">
          <EnumValue
            Name="0"
            DisplayName="&quot;$(IntDir)/$(InputName).cu.obj&quot;"
            Switch="&quot;$(IntDir)/$(InputName).cu.obj&quot;" />
          <EnumValue
            Name="1"
            DisplayName="&quot;data/$(InputName).cubin&quot;"
            Switch="&quot;data/$(InputName).cubin&quot;" />
          <EnumValue
            Name="2"
            DisplayName="&quot;data/$(InputName).ptx&quot;"
            Switch="&quot;data/$(InputName).ptx&quot;" />
        </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="&quot;$(CUDA_BIN_PATH)\nvcc.exe&quot;" />
          <EnumValue
            Name="1"
            DisplayName="Use Alternate path to CUDA, specified below"
            Switch="&quot;[AlternateNvccPath]&quot;" />
        </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 PM
     
     
    Thank 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 AM
     
     
    Thank 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 PM
     
     
    OK. 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 PM
     
     
    Hi Li,

    I am experiencing the same issue with beta2.  masm.xml modifications don't help.

    Thanks,
    Andrei
  • Monday, January 04, 2010 6:31 PM
     
     Proposed Answer

    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
  • Thursday, February 11, 2010 6:18 PM
     
     
    RC 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 PM
     
     
    This 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 &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)"

          />

      />

     

    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 &quot;$(IntDir)\$(InputName).cu.obj&quot;" />

          <EnumValue

            Name="1"

            DisplayName="Generate hybrid .c file  (-cuda)"

            Switch="-cuda -o &quot;$(IntDir)\$(InputName).cu.c&quot;" />

    </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 &quot;$(IntDir)\%(Filename).cu.obj&quot;</NvccCompilation>

    </CUDA_Build_Rule>

    <CUDA_Build_Rule Condition="'%(CUDA_Build_Rule.NvccCompilation)' == '1'">

    <NvccCompilation>-cuda -o &quot;$(IntDir)\%(Filename).cu.c&quot;</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-&gt;Metadata('Outputs')-&gt;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-&gt;'%(Fullpath)')" />

        <ItemGroup>
          <CUDA_Build_Rule Condition="'%(CUDA_Build_Rule.NvccCompilation)' == '0'">
         <NvccCompilation>-c -o &quot;$(IntDir)\%(Filename).cu.obj&quot;</NvccCompilation>
          </CUDA_Build_Rule>
          <CUDA_Build_Rule Condition="'%(CUDA_Build_Rule.NvccCompilation)' == '1'">
         <NvccCompilation>-cuda -o &quot;$(IntDir)\%(Filename).cu.c&quot;</NvccCompilation>
          </CUDA_Build_Rule>
          <CUDA_Build_Rule Condition="'%(CUDA_Build_Rule.NvccCompilation)' == '2'">
         <NvccCompilation>-gpu -o &quot;$(IntDir)\%(Filename).gpu&quot;</NvccCompilation>
          </CUDA_Build_Rule>
          <CUDA_Build_Rule Condition="'%(CUDA_Build_Rule.NvccCompilation)' == '3'">
         <NvccCompilation>-cubin -o &quot;data\%(Filename).cubin&quot;</NvccCompilation>
          </CUDA_Build_Rule>
          <CUDA_Build_Rule Condition="'%(CUDA_Build_Rule.NvccCompilation)' == '4'">
         <NvccCompilation>-ptx -o &quot;data\%(Filename).ptx&quot;</NvccCompilation>
          </CUDA_Build_Rule>
        </ItemGroup>

        <ItemGroup>
          <CUDA_Build_Rule Condition="'%(CUDA_Build_Rule.compileout)' == '0'">
            <compileout>&quot;$(IntDir)\%(Filename).cu.obj&quot;</compileout>
          </CUDA_Build_Rule>
          <CUDA_Build_Rule Condition="'%(CUDA_Build_Rule.compileout)' == '1'">
            <compileout>&quot;data\%(Filename).cubin&quot;</compileout>
        </CUDA_Build_Rule>
          <CUDA_Build_Rule Condition="'%(CUDA_Build_Rule.compileout)' == '2'">
            <compileout>&quot;data\%(Filename).ptx&quot;</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-&gt;'%(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-&gt;Metadata('Outputs')-&gt;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-&gt;'%(Fullpath)')" />

        <ItemGroup>
          <CUDA_Build_Rule Condition="'%(CUDA_Build_Rule.NvccCompilation)' == '0'">
         <NvccCompilation>-c -o &quot;$(IntDir)\%(Filename).cu.obj&quot;</NvccCompilation>
          </CUDA_Build_Rule>
          <CUDA_Build_Rule Condition="'%(CUDA_Build_Rule.NvccCompilation)' == '1'">
         <NvccCompilation>-cuda -o &quot;$(IntDir)\%(Filename).cu.c&quot;</NvccCompilation>
          </CUDA_Build_Rule>
          <CUDA_Build_Rule Condition="'%(CUDA_Build_Rule.NvccCompilation)' == '2'">
         <NvccCompilation>-gpu -o &quot;$(IntDir)\%(Filename).gpu&quot;</NvccCompilation>
          </CUDA_Build_Rule>
          <CUDA_Build_Rule Condition="'%(CUDA_Build_Rule.NvccCompilation)' == '3'">
         <NvccCompilation>-cubin -o &quot;data\%(Filename).cubin&quot;</NvccCompilation>
          </CUDA_Build_Rule>
          <CUDA_Build_Rule Condition="'%(CUDA_Build_Rule.NvccCompilation)' == '4'">
         <NvccCompilation>-ptx -o &quot;data\%(Filename).ptx&quot;</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-&gt;'%(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-&gt;Metadata('compileout')-&gt;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-&gt;'%(Fullpath)')" />

        <ItemGroup>
          <CUDA_Build_Rule Condition="'%(CUDA_Build_Rule.NvccCompilation)' == '0'">
         <NvccCompilation>-c -o &quot;$(IntDir)\%(Filename).cu.obj&quot;</NvccCompilation>
          </CUDA_Build_Rule>
          <CUDA_Build_Rule Condition="'%(CUDA_Build_Rule.NvccCompilation)' == '1'">
         <NvccCompilation>-cuda -o &quot;$(IntDir)\%(Filename).cu.c&quot;</NvccCompilation>
          </CUDA_Build_Rule>
          <CUDA_Build_Rule Condition="'%(CUDA_Build_Rule.NvccCompilation)' == '2'">
         <NvccCompilation>-gpu -o &quot;$(IntDir)\%(Filename).gpu&quot;</NvccCompilation>
          </CUDA_Build_Rule>
          <CUDA_Build_Rule Condition="'%(CUDA_Build_Rule.NvccCompilation)' == '3'">
         <NvccCompilation>-cubin -o &quot;data\%(Filename).cubin&quot;</NvccCompilation>
          </CUDA_Build_Rule>
          <CUDA_Build_Rule Condition="'%(CUDA_Build_Rule.NvccCompilation)' == '4'">
         <NvccCompilation>-ptx -o &quot;data\%(Filename).ptx&quot;</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-&gt;'%(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