Visual Studio 2010 Beta 2 - Conversion Problems with Custom Build Rules - by BRG

Status : 

  Fixed<br /><br />
		This item has been fixed in the current or upcoming version of this product.<br /><br />
		A more detailed explanation for the resolution of this particular item may have been provided in the comments section.


2
0
Sign in
to vote
ID 499953 Comments
Status Closed Workarounds
Type Bug Repros 0
Opened 10/23/2009 2:34:34 AM
Access Restriction Public

Description

Converting a VC+ project with custom build rules for the open source YASM assembler produces a Visual Studio 2010 beta 2 project that fails to build.

The details are provided in the attached ZIP file  
Sign in to post a comment.
Posted by Li Shao [MSFT] on 12/8/2009 at 1:29 PM
Hi Brian,

I am going to resolve this bug as fixed. Please open new connect bugs if you have further issues.

Again, thank you for using the product.

Li Shao
Project and Build Team
Posted by Li Shao [MSFT] on 12/4/2009 at 10:57 AM
Thank you Brian. It is my pleasure to work with you and make sure all your issues are taken care of. We really appreciate that you reporting and investigating the issues. We will make sure the few issues that we are not going to fix for VS2010 are documented in some forms so others can reference to them. Again, thank you for using beta version of the product and please let us know if you have more feedback.

Sincerely,
Li Shao
Project and Build Team
Posted by BRG on 12/4/2009 at 3:46 AM
Hi Li

Thank you once again for your most helpful comments.

I agree that a forced rebuild of selected assembler files works. I don't know why I was seeing a failure but I have made so many changes to the targets file in recent days that I may have used a bad version.

The THREE scenario is not normal so its not really a big issue.

You are right about the build event - I am currently using the post build event to run a cmd script to copy files and I would prefer this to be incremental. I haven't tried it but I assume, as you suggest, that I can just move the command line into the Custom Build Step.

I think the three customisation files work pretty well now. My only concern will be how to change them to use a version of YASM with file batching. But that's for the future when Peter Johnson, YASM's main developer, produces this!

I really am very grateful for the time you have spent on this, which I greatly appreciate as it means I can move a lot of projects onto 2010 in anticipation of the full release of VS 2010 next year.

yours sincerely

     Brian Gladman
Posted by Li Shao [MSFT] on 12/3/2009 at 7:31 PM
Hi Brian, thanks for the information.

This is what I have choosing to build one file after a clean build. It seems to behave correctly.

1>------ Build started: Project: lib_mpir_amd64, Configuration: Debug x64 ------
1>Build started 12/3/2009 4:57:10 PM.
1>Building with tools version "4.0".
1>Target "_CheckForInvalidConfigurationAndPlatform" in file "C:\Windows\Microsoft.NET\Framework\v4.0.21114\Microsoft.Common.Targets" from project "C:\Users\lishao\Desktop\mpir\build.vc9\lib_mpir_amd64\lib_mpir_amd64.vcxproj" (entry point):
1>Task "Error" skipped, due to false condition; ( '$(_InvalidConfigurationError)' == 'true' ) was evaluated as ( '' == 'true' ).
1>Task "Warning" skipped, due to false condition; ( '$(_InvalidConfigurationWarning)' == 'true' ) was evaluated as ( '' == 'true' ).
1>Using "Message" task from assembly "Microsoft.Build.Tasks.v4.0, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a".
1>Task "Message"
1> Configuration=Debug
1>Done executing task "Message".
1>Task "Message"
1> Platform=x64
1>Done executing task "Message".
1>Task "Error" skipped, due to false condition; ('$(OutDir)' != '' and !HasTrailingSlash('$(OutDir)')) was evaluated as ('x64\Debug\' != '' and !HasTrailingSlash('x64\Debug\')).
1>Task "Error" skipped, due to false condition; ('$(BaseIntermediateOutputPath)' != '' and !HasTrailingSlash('$(BaseIntermediateOutputPath)')) was evaluated as ('obj\' != '' and !HasTrailingSlash('obj\')).
1>Task "Error" skipped, due to false condition; ('$(IntermediateOutputPath)' != '' and !HasTrailingSlash('$(IntermediateOutputPath)')) was evaluated as ('x64\Debug\' != '' and !HasTrailingSlash('x64\Debug\')).
1>Done building target "_CheckForInvalidConfigurationAndPlatform" in project "lib_mpir_amd64.vcxproj".
1>Target "PlatformPrepareForBuild" in file "C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Platforms\x64\Microsoft.Cpp.x64.Targets" from project "C:\Users\lishao\Desktop\mpir\build.vc9\lib_mpir_amd64\lib_mpir_amd64.vcxproj" (target "PrepareForBuild" depends on it):
1>Task "VCMessage" skipped, due to false condition; (!(exists('$(VCTargetsPath)\Platforms\x64\PlatformToolsets\$(PlatformToolset)\Microsoft.Cpp.x64.$(PlatformToolset).targets'))) was evaluated as (!(exists('C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\\Platforms\x64\PlatformToolsets\v100\Microsoft.Cpp.x64.v100.targets'))).
1>Done building target "PlatformPrepareForBuild" in project "lib_mpir_amd64.vcxproj".
1>Target "GetFrameworkPaths" in file "C:\Windows\Microsoft.NET\Framework\v4.0.21114\Microsoft.NETFramework.targets" from project "C:\Users\lishao\Desktop\mpir\build.vc9\lib_mpir_amd64\lib_mpir_amd64.vcxproj" (target "PrepareForBuild" depends on it):
1>Done building target "GetFrameworkPaths" in project "lib_mpir_amd64.vcxproj".
1>Target "PrepareForBuild" in file "C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Microsoft.CppBuild.targets" from project "C:\Users\lishao\Desktop\mpir\build.vc9\lib_mpir_amd64\lib_mpir_amd64.vcxproj" (target "_SelectedFiles" depends on it):
1>Task "VCMessage" skipped, due to false condition; ('$(DesignTimeBuild)'!='true' and '$(ConfigurationPlatformExists)' != 'true') was evaluated as (''!='true' and 'true' != 'true').
1>Using "MakeDir" task from assembly "Microsoft.Build.Tasks.v4.0, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a".
1>Task "MakeDir"
1>Done executing task "MakeDir".
1>Task "VCMessage" skipped, due to false condition; ('$(DesignTimeBuild)'!='true' and '$(VCInstallDir)'=='' and '$(UseEnv)' != 'true' and ($(TargetFrameworkVersion)=='v3.5' or $(TargetFrameworkVersion)=='v3.0' or $(TargetFrameworkVersion)=='v2.0' )) was evaluated as (''!='true' and 'C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\'=='' and '' != 'true' and (v4.0=='v3.5' or v4.0=='v3.0' or v4.0=='v2.0' )).
1>Task "VCMessage" skipped, due to false condition; ('$(DesignTimeBuild)'!='true' and '$(VCInstallDir)'=='' and '$(UseEnv)' != 'true' and '$(PlatformToolset)'=='v90') was evaluated as (''!='true' and 'C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\'=='' and '' != 'true' and 'v100'=='v90').
1>Task "VCMessage" skipped, due to false condition; ('$(VCInstallDir)'=='' and '$(UseEnv)' != 'true') was evaluated as ('C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\'=='' and '' != 'true').
1>Task "VCMessage" skipped, due to false condition; ('$(WindowsSDKDir)'=='' and '$(UseEnv)' != 'true') was evaluated as ('C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\'=='' and '' != 'true').
1>Task "VCMessage" skipped, due to false condition; ('$(IntDirTrailingSlashWarning)'=='true') was evaluated as (''=='true').
1>Task "VCMessage" skipped, due to false condition; ('$(OutDirTrailingSlashWarning)'=='true') was evaluated as (''=='true').
1>Task "MakeDir"
1>Done executing task "MakeDir".
1>Done building target "PrepareForBuild" in project "lib_mpir_amd64.vcxproj".
1>Target "SetBuildDefaultEnvironmentVariables" in file "C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Microsoft.Cpp.targets" from project "C:\Users\lishao\Desktop\mpir\build.vc9\lib_mpir_amd64\lib_mpir_amd64.vcxproj" (target "_SelectedFiles" depends on it):
1>Using "SetEnv" task from assembly "Microsoft.Build.CppTasks.Common, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a".
1>Task "SetEnv"
1> PATH=C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\x86_amd64;C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin;C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\bin\NETFX 4.0 Tools;C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\bin;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\Tools\bin;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\tools;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\ide;C:\Program Files (x86)\HTML Help Workshop;C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\\bin;C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\\lib\win64;C:\Windows\Microsoft.NET\Framework\v4.0.21114\;;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;c:\Program Files (x86)\Microsoft SQL Server\100\Tools\Binn\;c:\Program Files\Microsoft SQL Server\100\Tools\Binn\;c:\Program Files\Microsoft SQL Server\100\DTS\Binn\;
1>Done executing task "SetEnv".
1>Task "SetEnv" skipped, due to false condition; ('$(_IsNativeEnvironment)' == 'true') was evaluated as ('' == 'true').
1>Task "SetEnv"
1> LIB=C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\lib\amd64;C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\atlmfc\lib\amd64;C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\lib\x64;
1>Done executing task "SetEnv".
1>Task "SetEnv"
1> LIBPATH=C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\atlmfc\lib\amd64;C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\lib\amd64
1>Done executing task "SetEnv".
1>Task "SetEnv"
1> INCLUDE=C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include;C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\atlmfc\include;C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include;C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\\include;
1>Done executing task "SetEnv".
1>Done building target "SetBuildDefaultEnvironmentVariables" in project "lib_mpir_amd64.vcxproj".
1>Target "SetUserMacroEnvironmentVariables" skipped, due to false condition; ('@(BuildMacro)' != '') was evaluated as ('' != '').
1>Target "_SelectedFiles" in file "C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Microsoft.CppBuild.targets" from project "C:\Users\lishao\Desktop\mpir\build.vc9\lib_mpir_amd64\lib_mpir_amd64.vcxproj" (target "_YASM" depends on it):
1>Done building target "_SelectedFiles" in project "lib_mpir_amd64.vcxproj".
1>Target "ComputeYASMOutput" in file "C:\Users\lishao\Desktop\mpir\build.vc9\yasm.targets" from project "C:\Users\lishao\Desktop\mpir\build.vc9\lib_mpir_amd64\lib_mpir_amd64.vcxproj" (target "_YASM" depends on it):
1>Task "MakeDir"
1>Done executing task "MakeDir".
1>Done building target "ComputeYASMOutput" in project "lib_mpir_amd64.vcxproj".
1>Target "_YASM" in file "C:\Users\lishao\Desktop\mpir\build.vc9\yasm.targets" from project "C:\Users\lishao\Desktop\mpir\build.vc9\lib_mpir_amd64\lib_mpir_amd64.vcxproj" (entry point):
1>Building target "_YASM" completely.
1>Output file "x64\Debug\mpn\add_err1_n.obj" does not exist.
1>Task "Message"
1> Assembling addadd_n.asm
1>Done executing task "Message".
1>Using "WriteLinesToFile" task from assembly "Microsoft.Build.Tasks.v4.0, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a".
1>Task "WriteLinesToFile"
1>Done executing task "WriteLinesToFile".
1>Initializing task factory "XamlTaskFactory" from assembly "Microsoft.Build.Tasks.v4.0".
1>Using "YASM" task from the task factory "XamlTaskFactory".
1>Task "YASM"
1> cmd.exe /C "C:\Users\lishao\AppData\Local\Temp\30ce4859f8a64de99084bbbd561943fb.cmd"
1> yasm -Xvc -f x64 -g cv8 -D _WIN64_ABI -i "C:\Users\lishao\Desktop\mpir\build.vc9\lib_mpir_amd64\\" -o "x64\Debug\mpn\addadd_n.obj" -rnasm -pnasm ..\..\mpn\x86_64w\amd64\addadd_n.asm
1>
1> C:\Users\lishao\Desktop\mpir\build.vc9\lib_mpir_amd64>yasm -Xvc -f x64 -g cv8 -D _WIN64_ABI -i "C:\Users\lishao\Desktop\mpir\build.vc9\lib_mpir_amd64\\" -o "x64\Debug\mpn\addadd_n.obj" -rnasm -pnasm ..\..\mpn\x86_64w\amd64\addadd_n.asm
1>Done executing task "YASM".
1>Done building target "_YASM" in project "lib_mpir_amd64.vcxproj".
1>
1>Build succeeded.
1>
1>Time Elapsed 00:00:08.78
========== Build: 1 succeeded, 0 failed, 0 up-to-date, 0 skipped ==========

I was able to repro the incremental build issue you mentioned in THREE. I will make sure the issue is considered for fixing in the final release build.

When you say "Post build step", you mean post build event, right? There is no way to switch it from unconditional to incremental. I will look into the possiblity of making it incremental. On the other hand, custom build event is incremental and you can use that if incremental is desired for now.

Li

Li
Posted by BRG on 12/3/2009 at 3:38 AM
Hi Li

One
===

Starting with a complete clean build, if I then select one assembler file for a forced rebuild, the end of the build log is:

----------------------------------------
11:07:56.046     1>Done building target "SetBuildDefaultEnvironmentVariables" in project "lib_mpir_core2.vcxproj".: (TargetId:6)
                 Target "SetUserMacroEnvironmentVariables" skipped, due to false condition; ('@(BuildMacro)' != '') was evaluated as ('' != '').
00:00:00.000     1>Target "_SelectedFiles: (TargetId:7)" in file "C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Microsoft.CppBuild.targets" from project "C:\Users\Brian Gladman\Desktop\Documents\Visual Studio 2010\Projects\mpir\build.vc10\lib_mpir_core2\lib_mpir_core2.vcxproj":
11:07:56.046     1>Done building target "_SelectedFiles" in project "lib_mpir_core2.vcxproj".: (TargetId:7)
00:00:00.000     1>Target "ComputeYASMOutput: (TargetId:8)" in file "C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\BuildCustomizations\yasm.targets" from project "C:\Users\Brian Gladman\Desktop\Documents\Visual Studio 2010\Projects\mpir\build.vc10\lib_mpir_core2\lib_mpir_core2.vcxproj":
                 Task "MakeDir" (TaskId:9)
                 Done executing task "MakeDir". (TaskId:9)
11:07:56.046     1>Done building target "ComputeYASMOutput" in project "lib_mpir_core2.vcxproj".: (TargetId:8)
00:00:00.000     1>Target "_YASM: (TargetId:9)" in file "C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\BuildCustomizations\yasm.targets" from project "C:\Users\Brian Gladman\Desktop\Documents\Visual Studio 2010\Projects\mpir\build.vc10\lib_mpir_core2\lib_mpir_core2.vcxproj":
                 Skipping target "_YASM" because all output files are up-to-date with respect to the input files.
                 Input files: lib_mpir_core2.vcxproj;..\..\mpn\x86_64w\core2\add_n.asm;..\..\mpn\x86_64w\core2\addadd_n.asm;..\..\mpn\x86_64w\core2\addlsh1_n.asm;..\..\mpn\x86_64w\core2\addlsh_n.asm;..\..\mpn\x86_64w\core2\addmul_1.asm;..\..\mpn\x86_64w\addmul_2.asm;..\..\mpn\x86_64w\core2\addsub_n.asm;..\..\mpn\x86_64w\aors_err1_n.asm;..\..\mpn\x86_64w\aors_err2_n.asm;..\..\mpn\x86_64w\core2\com_n.asm;..\..\mpn\x86_64w\core2\copyd.asm;..\..\mpn\x86_64w\core2\copyi.asm;..\..\mpn\x86_64w\dive_1.asm;..\..\mpn\x86_64w\diveby3.asm;..\..\mpn\x86_64w\divebyBm1of.asm;..\..\mpn\x86_64w\core2\divebyff.asm;..\..\mpn\x86_64w\divrem_euclidean_qr_1.asm;..\..\mpn\x86_64w\divrem_euclidean_qr_2.asm;..\..\mpn\x86_64w\amd64\divrem_hensel_qr_1_2.asm;..\..\mpn\x86_64w\core2\lshift.asm;..\..\mpn\x86_64w\amd64\mod_1_1.asm;..\..\mpn\x86_64w\amd64\mod_1_2.asm;..\..\mpn\x86_64w\amd64\mod_1_3.asm;..\..\mpn\x86_64w\mode1o.asm;..\..\mpn\x86_64w\core2\mul_1.asm;..\..\mpn\x86_64w\mul_2.asm;..\..\mpn\x86_64w\core2\mul_basecase.asm;..\..\mpn\x86_64w\core2\redc_basecase.asm;..\..\mpn\x86_64w\core2\rsh1add_n.asm;..\..\mpn\x86_64w\core2\rsh1sub_n.asm;..\..\mpn\x86_64w\amd64\rsh_divrem_hensel_qr_1_2.asm;..\..\mpn\x86_64w\core2\rshift.asm;..\..\mpn\x86_64w\core2\sqr_basecase.asm;..\..\mpn\x86_64w\core2\store.asm;..\..\mpn\x86_64w\core2\sub_n.asm;..\..\mpn\x86_64w\core2\subadd_n.asm;..\..\mpn\x86_64w\core2\sublsh1_n.asm;..\..\mpn\x86_64w\core2\submul_1.asm;..\..\mpn\x86_64w\udiv.asm;..\..\mpn\x86_64w\umul.asm;..\..\mpn\x86_64w\core2\and_n.asm;..\..\mpn\x86_64w\core2\andn_n.asm;..\..\mpn\x86_64w\core2\ior_n.asm;..\..\mpn\x86_64w\core2\iorn_n.asm;..\..\mpn\x86_64w\core2\nand_n.asm;..\..\mpn\x86_64w\core2\nior_n.asm;..\..\mpn\x86_64w\core2\xnor_n.asm;..\..\mpn\x86_64w\core2\xor_n.asm
                 Output files: x64\Release\mpn\add_n.obj;x64\Release\mpn\addadd_n.obj;x64\Release\mpn\addlsh1_n.obj;x64\Release\mpn\addlsh_n.obj;x64\Release\mpn\addmul_1.obj;x64\Release\mpn\addmul_2.obj;x64\Release\mpn\addsub_n.obj;x64\Release\mpn\aors_err1_n.obj;x64\Release\mpn\aors_err2_n.obj;x64\Release\mpn\com_n.obj;x64\Release\mpn\copyd.obj;x64\Release\mpn\copyi.obj;x64\Release\mpn\dive_1.obj;x64\Release\mpn\diveby3.obj;x64\Release\mpn\divebyBm1of.obj;x64\Release\mpn\divebyff.obj;x64\Release\mpn\divrem_euclidean_qr_1.obj;x64\Release\mpn\divrem_euclidean_qr_2.obj;x64\Release\mpn\divrem_hensel_qr_1_2.obj;x64\Release\mpn\lshift.obj;x64\Release\mpn\mod_1_1.obj;x64\Release\mpn\mod_1_2.obj;x64\Release\mpn\mod_1_3.obj;x64\Release\mpn\mode1o.obj;x64\Release\mpn\mul_1.obj;x64\Release\mpn\mul_2.obj;x64\Release\mpn\mul_basecase.obj;x64\Release\mpn\redc_basecase.obj;x64\Release\mpn\rsh1add_n.obj;x64\Release\mpn\rsh1sub_n.obj;x64\Release\mpn\rsh_divrem_hensel_qr_1_2.obj;x64\Release\mpn\rshift.obj;x64\Release\mpn\sqr_basecase.obj;x64\Release\mpn\store.obj;x64\Release\mpn\sub_n.obj;x64\Release\mpn\subadd_n.obj;x64\Release\mpn\sublsh1_n.obj;x64\Release\mpn\submul_1.obj;x64\Release\mpn\udiv.obj;x64\Release\mpn\umul.obj;x64\Release\mpn\and_n.obj;x64\Release\mpn\andn_n.obj;x64\Release\mpn\ior_n.obj;x64\Release\mpn\iorn_n.obj;x64\Release\mpn\nand_n.obj;x64\Release\mpn\nior_n.obj;x64\Release\mpn\xnor_n.obj;x64\Release\mpn\xor_n.obj
11:07:56.046     1>Done building target "_YASM" in project "lib_mpir_core2.vcxproj".: (TargetId:9)
11:07:56.046     1>Done Building Project "C:\Users\Brian Gladman\Desktop\Documents\Visual Studio 2010\Projects\mpir\build.vc10\lib_mpir_core2\lib_mpir_core2.vcxproj" (_YASM target(s)).

Project Performance Summary:
     16 ms C:\Users\Brian Gladman\Desktop\Documents\Visual Studio 2010\Projects\mpir\build.vc10\lib_mpir_core2\lib_mpir_core2.vcxproj 1 calls
                 16 ms _YASM                                     1 calls

Target Performance Summary:
        0 ms PrepareForBuild                            1 calls
        0 ms GetFrameworkPaths                         1 calls
        0 ms PlatformPrepareForBuild                    1 calls
        0 ms _SelectedFiles                             1 calls
        0 ms _CheckForInvalidConfigurationAndPlatform 1 calls
        0 ms ComputeYASMOutput                         1 calls
        0 ms _YASM                                     1 calls
     16 ms SetBuildDefaultEnvironmentVariables        1 calls

Task Performance Summary:
        0 ms Message                                    2 calls
        0 ms MakeDir                                    2 calls
     16 ms SetEnv                                     4 calls

Build succeeded.
----------------------------------------

But the Output windows shows:

----------------------------------------
1>------ Build started: Project: lib_mpir_core2, Configuration: Release x64 ------
========== Build: 1 succeeded, 0 failed, 0 up-to-date, 0 skipped ==========
----------------------------------------

There is no message in the Output window saying that the selected file is being assembled (as set in the yasm.props file). Morover checking the date/time on the output object file shows that it has not been built as requested.

Two
===

If after a full project build, I now delete _only_ this one _object_ file and then ask for a forced build of this file, it assembles it with the Output window message:

----------------------------------------
1>------ Build started: Project: lib_mpir_core2, Configuration: Release x64 ------
1> Assembling add_n.asm
========== Build: 1 succeeded, 0 failed, 0 up-to-date, 0 skipped ==========
----------------------------------------

as expected, and a subsequent build then only does a link operation as expected.

Three
====

If after a full project build, I now delete _only_ this one _object_ file and then ask for a build of the project, I would expect only this single object file to be built.

it assembles it with the Output window message:

----------------------------------------
1>------ Build started: Project: lib_mpir_core2, Configuration: Release x64 ------
1> Assembling add_n.asm
1> Assembling addadd_n.asm
1> Assembling addlsh1_n.asm
1> Assembling addlsh_n.asm
1> Assembling addmul_1.asm
1> Assembling addmul_2.asm
1> Assembling addsub_n.asm
1> Assembling aors_err1_n.asm
1> Assembling aors_err2_n.asm
1> Assembling com_n.asm
1> Assembling copyd.asm
1> Assembling copyi.asm
1> Assembling dive_1.asm
1> Assembling diveby3.asm
1> Assembling divebyBm1of.asm
1> Assembling divebyff.asm
1> Assembling divrem_euclidean_qr_1.asm
1> Assembling divrem_euclidean_qr_2.asm
1> Assembling divrem_hensel_qr_1_2.asm
1> Assembling lshift.asm
1> Assembling mod_1_1.asm
1> Assembling mod_1_2.asm
1> Assembling mod_1_3.asm
1> Assembling mode1o.asm
1> Assembling mul_1.asm
1> Assembling mul_2.asm
1> Assembling mul_basecase.asm
1> Assembling redc_basecase.asm
1> Assembling rsh1add_n.asm
1> Assembling rsh1sub_n.asm
1> Assembling rsh_divrem_hensel_qr_1_2.asm
1> Assembling rshift.asm
1> Assembling sqr_basecase.asm
1> Assembling store.asm
1> Assembling sub_n.asm
1> Assembling subadd_n.asm
1> Assembling sublsh1_n.asm
1> Assembling submul_1.asm
1> Assembling udiv.asm
1> Assembling umul.asm
1> Assembling and_n.asm
1> Assembling andn_n.asm
1> Assembling ior_n.asm
1> Assembling iorn_n.asm
1> Assembling nand_n.asm
1> Assembling nior_n.asm
1> Assembling xnor_n.asm
1> Assembling xor_n.asm
----------------------------------------

So now it does a non incremental build even though only one file needs to be rebuilt!

Another Issue
=========

In VS 2008 a post build step was incremental - if nothing had changed the step did not run. I notice that this behaviour has changed - it appears that with VS 2010 a post build step is now unconditional. It would make sense to be able to set a post build step as either unconditional or incremental but I don't see any way of doing this. IS this possible?

best regards,

    Brian







Posted by Li Shao [MSFT] on 12/2/2009 at 4:20 PM
Hi Brian,

This is what I am getting selecting a few assembler files to build based on the targets/props/xml files that I sent you:

1>------ Build started: Project: lib_mpir_amd64, Configuration: Debug x64 ------
1>Build started 12/2/2009 3:56:21 PM.
1>Building with tools version "4.0".
1>Target "_CheckForInvalidConfigurationAndPlatform" in file "C:\Windows\Microsoft.NET\Framework\v4.0.21114\Microsoft.Common.Targets" from project "C:\Users\lishao\Desktop\mpir\build.vc9\lib_mpir_amd64\lib_mpir_amd64.vcxproj" (entry point):
1>Task "Error" skipped, due to false condition; ( '$(_InvalidConfigurationError)' == 'true' ) was evaluated as ( '' == 'true' ).
1>Task "Warning" skipped, due to false condition; ( '$(_InvalidConfigurationWarning)' == 'true' ) was evaluated as ( '' == 'true' ).
1>Using "Message" task from assembly "Microsoft.Build.Tasks.v4.0, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a".
1>Task "Message"
1> Configuration=Debug
1>Done executing task "Message".
1>Task "Message"
1> Platform=x64
1>Done executing task "Message".
1>Task "Error" skipped, due to false condition; ('$(OutDir)' != '' and !HasTrailingSlash('$(OutDir)')) was evaluated as ('x64\Debug\' != '' and !HasTrailingSlash('x64\Debug\')).
1>Task "Error" skipped, due to false condition; ('$(BaseIntermediateOutputPath)' != '' and !HasTrailingSlash('$(BaseIntermediateOutputPath)')) was evaluated as ('obj\' != '' and !HasTrailingSlash('obj\')).
1>Task "Error" skipped, due to false condition; ('$(IntermediateOutputPath)' != '' and !HasTrailingSlash('$(IntermediateOutputPath)')) was evaluated as ('x64\Debug\' != '' and !HasTrailingSlash('x64\Debug\')).
1>Done building target "_CheckForInvalidConfigurationAndPlatform" in project "lib_mpir_amd64.vcxproj".
1>Target "PlatformPrepareForBuild" in file "C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Platforms\x64\Microsoft.Cpp.x64.Targets" from project "C:\Users\lishao\Desktop\mpir\build.vc9\lib_mpir_amd64\lib_mpir_amd64.vcxproj" (target "PrepareForBuild" depends on it):
1>Task "VCMessage" skipped, due to false condition; (!(exists('$(VCTargetsPath)\Platforms\x64\PlatformToolsets\$(PlatformToolset)\Microsoft.Cpp.x64.$(PlatformToolset).targets'))) was evaluated as (!(exists('C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\\Platforms\x64\PlatformToolsets\v100\Microsoft.Cpp.x64.v100.targets'))).
1>Done building target "PlatformPrepareForBuild" in project "lib_mpir_amd64.vcxproj".
1>Target "GetFrameworkPaths" in file "C:\Windows\Microsoft.NET\Framework\v4.0.21114\Microsoft.NETFramework.targets" from project "C:\Users\lishao\Desktop\mpir\build.vc9\lib_mpir_amd64\lib_mpir_amd64.vcxproj" (target "PrepareForBuild" depends on it):
1>Done building target "GetFrameworkPaths" in project "lib_mpir_amd64.vcxproj".
1>Target "PrepareForBuild" in file "C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Microsoft.CppBuild.targets" from project "C:\Users\lishao\Desktop\mpir\build.vc9\lib_mpir_amd64\lib_mpir_amd64.vcxproj" (target "_SelectedFiles" depends on it):
1>Task "VCMessage" skipped, due to false condition; ('$(DesignTimeBuild)'!='true' and '$(ConfigurationPlatformExists)' != 'true') was evaluated as (''!='true' and 'true' != 'true').
1>Using "MakeDir" task from assembly "Microsoft.Build.Tasks.v4.0, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a".
1>Task "MakeDir"
1>Done executing task "MakeDir".
1>Task "VCMessage" skipped, due to false condition; ('$(DesignTimeBuild)'!='true' and '$(VCInstallDir)'=='' and '$(UseEnv)' != 'true' and ($(TargetFrameworkVersion)=='v3.5' or $(TargetFrameworkVersion)=='v3.0' or $(TargetFrameworkVersion)=='v2.0' )) was evaluated as (''!='true' and 'C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\'=='' and '' != 'true' and (v4.0=='v3.5' or v4.0=='v3.0' or v4.0=='v2.0' )).
1>Task "VCMessage" skipped, due to false condition; ('$(DesignTimeBuild)'!='true' and '$(VCInstallDir)'=='' and '$(UseEnv)' != 'true' and '$(PlatformToolset)'=='v90') was evaluated as (''!='true' and 'C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\'=='' and '' != 'true' and 'v100'=='v90').
1>Task "VCMessage" skipped, due to false condition; ('$(VCInstallDir)'=='' and '$(UseEnv)' != 'true') was evaluated as ('C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\'=='' and '' != 'true').
1>Task "VCMessage" skipped, due to false condition; ('$(WindowsSDKDir)'=='' and '$(UseEnv)' != 'true') was evaluated as ('C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\'=='' and '' != 'true').
1>Task "VCMessage" skipped, due to false condition; ('$(IntDirTrailingSlashWarning)'=='true') was evaluated as (''=='true').
1>Task "VCMessage" skipped, due to false condition; ('$(OutDirTrailingSlashWarning)'=='true') was evaluated as (''=='true').
1>Task "MakeDir"
1>Done executing task "MakeDir".
1>Done building target "PrepareForBuild" in project "lib_mpir_amd64.vcxproj".
1>Target "SetBuildDefaultEnvironmentVariables" in file "C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Microsoft.Cpp.targets" from project "C:\Users\lishao\Desktop\mpir\build.vc9\lib_mpir_amd64\lib_mpir_amd64.vcxproj" (target "_SelectedFiles" depends on it):
1>Using "SetEnv" task from assembly "Microsoft.Build.CppTasks.Common, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a".
1>Task "SetEnv"
1> PATH=C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\x86_amd64;C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin;C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\bin\NETFX 4.0 Tools;C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\bin;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\Tools\bin;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\tools;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\ide;C:\Program Files (x86)\HTML Help Workshop;C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\\bin;C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\\lib\win64;C:\Windows\Microsoft.NET\Framework\v4.0.21114\;;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;c:\Program Files (x86)\Microsoft SQL Server\100\Tools\Binn\;c:\Program Files\Microsoft SQL Server\100\Tools\Binn\;c:\Program Files\Microsoft SQL Server\100\DTS\Binn\;
1>Done executing task "SetEnv".
1>Task "SetEnv" skipped, due to false condition; ('$(_IsNativeEnvironment)' == 'true') was evaluated as ('' == 'true').
1>Task "SetEnv"
1> LIB=C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\lib\amd64;C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\atlmfc\lib\amd64;C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\lib\x64;
1>Done executing task "SetEnv".
1>Task "SetEnv"
1> LIBPATH=C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\atlmfc\lib\amd64;C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\lib\amd64
1>Done executing task "SetEnv".
1>Task "SetEnv"
1> INCLUDE=C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include;C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\atlmfc\include;C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include;C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\\include;
1>Done executing task "SetEnv".
1>Done building target "SetBuildDefaultEnvironmentVariables" in project "lib_mpir_amd64.vcxproj".
1>Target "SetUserMacroEnvironmentVariables" skipped, due to false condition; ('@(BuildMacro)' != '') was evaluated as ('' != '').
1>Target "_SelectedFiles" in file "C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Microsoft.CppBuild.targets" from project "C:\Users\lishao\Desktop\mpir\build.vc9\lib_mpir_amd64\lib_mpir_amd64.vcxproj" (target "_YASM" depends on it):
1>Done building target "_SelectedFiles" in project "lib_mpir_amd64.vcxproj".
1>Target "ComputeYASMOutput" in file "C:\Users\lishao\Desktop\mpir\build.vc9\yasm.targets" from project "C:\Users\lishao\Desktop\mpir\build.vc9\lib_mpir_amd64\lib_mpir_amd64.vcxproj" (target "_YASM" depends on it):
1>Task "MakeDir"
1>Done executing task "MakeDir".
1>Done building target "ComputeYASMOutput" in project "lib_mpir_amd64.vcxproj".
1>Target "_YASM" in file "C:\Users\lishao\Desktop\mpir\build.vc9\yasm.targets" from project "C:\Users\lishao\Desktop\mpir\build.vc9\lib_mpir_amd64\lib_mpir_amd64.vcxproj" (entry point):
1>Building target "_YASM" completely.
1>Output file "x64\Debug\mpn\hamdist.obj" does not exist.
1>Task "Message"
1> Assembling com_n.asm
1>Done executing task "Message".
1>Task "Message"
1> Assembling copyd.asm
1>Done executing task "Message".
1>Task "Message"
1> Assembling copyi.asm
1>Done executing task "Message".
1>Task "Message"
1> Assembling dive_1.asm
1>Done executing task "Message".
1>Using "WriteLinesToFile" task from assembly "Microsoft.Build.Tasks.v4.0, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a".
1>Task "WriteLinesToFile"
1>Done executing task "WriteLinesToFile".
1>Task "WriteLinesToFile"
1>Done executing task "WriteLinesToFile".
1>Task "WriteLinesToFile"
1>Done executing task "WriteLinesToFile".
1>Task "WriteLinesToFile"
1>Done executing task "WriteLinesToFile".
1>Initializing task factory "XamlTaskFactory" from assembly "Microsoft.Build.Tasks.v4.0".
1>Using "YASM" task from the task factory "XamlTaskFactory".
1>Task "YASM"
1> cmd.exe /C "C:\Users\lishao\AppData\Local\Temp\8d33e69a618a42eca925648dc2cbed8a.cmd"
1> yasm -Xvc -f x64 -g cv8 -D _WIN64_ABI -i "C:\Users\lishao\Desktop\mpir\build.vc9\lib_mpir_amd64\\" -o "x64\Debug\mpn\com_n.obj" -rnasm -pnasm ..\..\mpn\x86_64w\amd64\com_n.asm
1>
1> C:\Users\lishao\Desktop\mpir\build.vc9\lib_mpir_amd64>yasm -Xvc -f x64 -g cv8 -D _WIN64_ABI -i "C:\Users\lishao\Desktop\mpir\build.vc9\lib_mpir_amd64\\" -o "x64\Debug\mpn\com_n.obj" -rnasm -pnasm ..\..\mpn\x86_64w\amd64\com_n.asm
1>Done executing task "YASM".
1>Task "YASM"
1> cmd.exe /C "C:\Users\lishao\AppData\Local\Temp\18aa2936895c4423b5e557f69513240b.cmd"
1> yasm -Xvc -f x64 -g cv8 -D _WIN64_ABI -i "C:\Users\lishao\Desktop\mpir\build.vc9\lib_mpir_amd64\\" -o "x64\Debug\mpn\copyd.obj" -rnasm -pnasm ..\..\mpn\x86_64w\amd64\copyd.asm
1>
1> C:\Users\lishao\Desktop\mpir\build.vc9\lib_mpir_amd64>yasm -Xvc -f x64 -g cv8 -D _WIN64_ABI -i "C:\Users\lishao\Desktop\mpir\build.vc9\lib_mpir_amd64\\" -o "x64\Debug\mpn\copyd.obj" -rnasm -pnasm ..\..\mpn\x86_64w\amd64\copyd.asm
1>Done executing task "YASM".
1>Task "YASM"
1> cmd.exe /C "C:\Users\lishao\AppData\Local\Temp\9cc164f5f3924c5bae456af5e8dc652f.cmd"
1> yasm -Xvc -f x64 -g cv8 -D _WIN64_ABI -i "C:\Users\lishao\Desktop\mpir\build.vc9\lib_mpir_amd64\\" -o "x64\Debug\mpn\copyi.obj" -rnasm -pnasm ..\..\mpn\x86_64w\amd64\copyi.asm
1>
1> C:\Users\lishao\Desktop\mpir\build.vc9\lib_mpir_amd64>yasm -Xvc -f x64 -g cv8 -D _WIN64_ABI -i "C:\Users\lishao\Desktop\mpir\build.vc9\lib_mpir_amd64\\" -o "x64\Debug\mpn\copyi.obj" -rnasm -pnasm ..\..\mpn\x86_64w\amd64\copyi.asm
1>Done executing task "YASM".
1>Task "YASM"
1> cmd.exe /C "C:\Users\lishao\AppData\Local\Temp\6912702a78b04a4790d4a59fb4fbb945.cmd"
1> yasm -Xvc -f x64 -g cv8 -D _WIN64_ABI -i "C:\Users\lishao\Desktop\mpir\build.vc9\lib_mpir_amd64\\" -o "x64\Debug\mpn\dive_1.obj" -rnasm -pnasm ..\..\mpn\x86_64w\dive_1.asm
1>
1> C:\Users\lishao\Desktop\mpir\build.vc9\lib_mpir_amd64>yasm -Xvc -f x64 -g cv8 -D _WIN64_ABI -i "C:\Users\lishao\Desktop\mpir\build.vc9\lib_mpir_amd64\\" -o "x64\Debug\mpn\dive_1.obj" -rnasm -pnasm ..\..\mpn\x86_64w\dive_1.asm
1>Done executing task "YASM".
1>Done building target "_YASM" in project "lib_mpir_amd64.vcxproj".
1>
1>Build succeeded.
1>
1>Time Elapsed 00:00:01.15
========== Build: 1 succeeded, 0 failed, 0 up-to-date, 0 skipped ==========

This is the log when I selected one assembly to build:

1>------ Build started: Project: lib_mpir_amd64, Configuration: Debug x64 ------
1>Build started 12/2/2009 4:14:18 PM.
1>Building with tools version "4.0".
1>Target "_CheckForInvalidConfigurationAndPlatform" in file "C:\Windows\Microsoft.NET\Framework\v4.0.21114\Microsoft.Common.Targets" from project "C:\Users\lishao\Desktop\mpir\build.vc9\lib_mpir_amd64\lib_mpir_amd64.vcxproj" (entry point):
1>Task "Error" skipped, due to false condition; ( '$(_InvalidConfigurationError)' == 'true' ) was evaluated as ( '' == 'true' ).
1>Task "Warning" skipped, due to false condition; ( '$(_InvalidConfigurationWarning)' == 'true' ) was evaluated as ( '' == 'true' ).
1>Using "Message" task from assembly "Microsoft.Build.Tasks.v4.0, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a".
1>Task "Message"
1> Configuration=Debug
1>Done executing task "Message".
1>Task "Message"
1> Platform=x64
1>Done executing task "Message".
1>Task "Error" skipped, due to false condition; ('$(OutDir)' != '' and !HasTrailingSlash('$(OutDir)')) was evaluated as ('x64\Debug\' != '' and !HasTrailingSlash('x64\Debug\')).
1>Task "Error" skipped, due to false condition; ('$(BaseIntermediateOutputPath)' != '' and !HasTrailingSlash('$(BaseIntermediateOutputPath)')) was evaluated as ('obj\' != '' and !HasTrailingSlash('obj\')).
1>Task "Error" skipped, due to false condition; ('$(IntermediateOutputPath)' != '' and !HasTrailingSlash('$(IntermediateOutputPath)')) was evaluated as ('x64\Debug\' != '' and !HasTrailingSlash('x64\Debug\')).
1>Done building target "_CheckForInvalidConfigurationAndPlatform" in project "lib_mpir_amd64.vcxproj".
1>Target "PlatformPrepareForBuild" in file "C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Platforms\x64\Microsoft.Cpp.x64.Targets" from project "C:\Users\lishao\Desktop\mpir\build.vc9\lib_mpir_amd64\lib_mpir_amd64.vcxproj" (target "PrepareForBuild" depends on it):
1>Task "VCMessage" skipped, due to false condition; (!(exists('$(VCTargetsPath)\Platforms\x64\PlatformToolsets\$(PlatformToolset)\Microsoft.Cpp.x64.$(PlatformToolset).targets'))) was evaluated as (!(exists('C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\\Platforms\x64\PlatformToolsets\v100\Microsoft.Cpp.x64.v100.targets'))).
1>Done building target "PlatformPrepareForBuild" in project "lib_mpir_amd64.vcxproj".
1>Target "GetFrameworkPaths" in file "C:\Windows\Microsoft.NET\Framework\v4.0.21114\Microsoft.NETFramework.targets" from project "C:\Users\lishao\Desktop\mpir\build.vc9\lib_mpir_amd64\lib_mpir_amd64.vcxproj" (target "PrepareForBuild" depends on it):
1>Done building target "GetFrameworkPaths" in project "lib_mpir_amd64.vcxproj".
1>Target "PrepareForBuild" in file "C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Microsoft.CppBuild.targets" from project "C:\Users\lishao\Desktop\mpir\build.vc9\lib_mpir_amd64\lib_mpir_amd64.vcxproj" (target "_SelectedFiles" depends on it):
1>Task "VCMessage" skipped, due to false condition; ('$(DesignTimeBuild)'!='true' and '$(ConfigurationPlatformExists)' != 'true') was evaluated as (''!='true' and 'true' != 'true').
1>Using "MakeDir" task from assembly "Microsoft.Build.Tasks.v4.0, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a".
1>Task "MakeDir"
1>Done executing task "MakeDir".
1>Task "VCMessage" skipped, due to false condition; ('$(DesignTimeBuild)'!='true' and '$(VCInstallDir)'=='' and '$(UseEnv)' != 'true' and ($(TargetFrameworkVersion)=='v3.5' or $(TargetFrameworkVersion)=='v3.0' or $(TargetFrameworkVersion)=='v2.0' )) was evaluated as (''!='true' and 'C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\'=='' and '' != 'true' and (v4.0=='v3.5' or v4.0=='v3.0' or v4.0=='v2.0' )).
1>Task "VCMessage" skipped, due to false condition; ('$(DesignTimeBuild)'!='true' and '$(VCInstallDir)'=='' and '$(UseEnv)' != 'true' and '$(PlatformToolset)'=='v90') was evaluated as (''!='true' and 'C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\'=='' and '' != 'true' and 'v100'=='v90').
1>Task "VCMessage" skipped, due to false condition; ('$(VCInstallDir)'=='' and '$(UseEnv)' != 'true') was evaluated as ('C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\'=='' and '' != 'true').
1>Task "VCMessage" skipped, due to false condition; ('$(WindowsSDKDir)'=='' and '$(UseEnv)' != 'true') was evaluated as ('C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\'=='' and '' != 'true').
1>Task "VCMessage" skipped, due to false condition; ('$(IntDirTrailingSlashWarning)'=='true') was evaluated as (''=='true').
1>Task "VCMessage" skipped, due to false condition; ('$(OutDirTrailingSlashWarning)'=='true') was evaluated as (''=='true').
1>Task "MakeDir"
1>Done executing task "MakeDir".
1>Done building target "PrepareForBuild" in project "lib_mpir_amd64.vcxproj".
1>Target "SetBuildDefaultEnvironmentVariables" in file "C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Microsoft.Cpp.targets" from project "C:\Users\lishao\Desktop\mpir\build.vc9\lib_mpir_amd64\lib_mpir_amd64.vcxproj" (target "_SelectedFiles" depends on it):
1>Using "SetEnv" task from assembly "Microsoft.Build.CppTasks.Common, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a".
1>Task "SetEnv"
1> PATH=C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\x86_amd64;C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin;C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\bin\NETFX 4.0 Tools;C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\bin;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\Tools\bin;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\tools;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\ide;C:\Program Files (x86)\HTML Help Workshop;C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\\bin;C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\\lib\win64;C:\Windows\Microsoft.NET\Framework\v4.0.21114\;;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;c:\Program Files (x86)\Microsoft SQL Server\100\Tools\Binn\;c:\Program Files\Microsoft SQL Server\100\Tools\Binn\;c:\Program Files\Microsoft SQL Server\100\DTS\Binn\;
1>Done executing task "SetEnv".
1>Task "SetEnv" skipped, due to false condition; ('$(_IsNativeEnvironment)' == 'true') was evaluated as ('' == 'true').
1>Task "SetEnv"
1> LIB=C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\lib\amd64;C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\atlmfc\lib\amd64;C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\lib\x64;
1>Done executing task "SetEnv".
1>Task "SetEnv"
1> LIBPATH=C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\atlmfc\lib\amd64;C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\lib\amd64
1>Done executing task "SetEnv".
1>Task "SetEnv"
1> INCLUDE=C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include;C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\atlmfc\include;C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include;C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\\include;
1>Done executing task "SetEnv".
1>Done building target "SetBuildDefaultEnvironmentVariables" in project "lib_mpir_amd64.vcxproj".
1>Target "SetUserMacroEnvironmentVariables" skipped, due to false condition; ('@(BuildMacro)' != '') was evaluated as ('' != '').
1>Target "_SelectedFiles" in file "C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Microsoft.CppBuild.targets" from project "C:\Users\lishao\Desktop\mpir\build.vc9\lib_mpir_amd64\lib_mpir_amd64.vcxproj" (target "_YASM" depends on it):
1>Done building target "_SelectedFiles" in project "lib_mpir_amd64.vcxproj".
1>Target "ComputeYASMOutput" in file "C:\Users\lishao\Desktop\mpir\build.vc9\yasm.targets" from project "C:\Users\lishao\Desktop\mpir\build.vc9\lib_mpir_amd64\lib_mpir_amd64.vcxproj" (target "_YASM" depends on it):
1>Task "MakeDir"
1>Done executing task "MakeDir".
1>Done building target "ComputeYASMOutput" in project "lib_mpir_amd64.vcxproj".
1>Target "_YASM" in file "C:\Users\lishao\Desktop\mpir\build.vc9\yasm.targets" from project "C:\Users\lishao\Desktop\mpir\build.vc9\lib_mpir_amd64\lib_mpir_amd64.vcxproj" (entry point):
1>Building target "_YASM" completely.
1>Output file "x64\Debug\mpn\hamdist.obj" does not exist.
1>Task "Message"
1> Assembling diveby3.asm
1>Done executing task "Message".
1>Using "WriteLinesToFile" task from assembly "Microsoft.Build.Tasks.v4.0, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a".
1>Task "WriteLinesToFile"
1>Done executing task "WriteLinesToFile".
1>Initializing task factory "XamlTaskFactory" from assembly "Microsoft.Build.Tasks.v4.0".
1>Using "YASM" task from the task factory "XamlTaskFactory".
1>Task "YASM"
1> cmd.exe /C "C:\Users\lishao\AppData\Local\Temp\41cda925abad49ff9d80a22fd47cc010.cmd"
1> yasm -Xvc -f x64 -g cv8 -D _WIN64_ABI -i "C:\Users\lishao\Desktop\mpir\build.vc9\lib_mpir_amd64\\" -o "x64\Debug\mpn\diveby3.obj" -rnasm -pnasm ..\..\mpn\x86_64w\diveby3.asm
1>
1> C:\Users\lishao\Desktop\mpir\build.vc9\lib_mpir_amd64>yasm -Xvc -f x64 -g cv8 -D _WIN64_ABI -i "C:\Users\lishao\Desktop\mpir\build.vc9\lib_mpir_amd64\\" -o "x64\Debug\mpn\diveby3.obj" -rnasm -pnasm ..\..\mpn\x86_64w\diveby3.asm
1>Done executing task "YASM".
1>Done building target "_YASM" in project "lib_mpir_amd64.vcxproj".
1>
1>Build succeeded.
1>
1>Time Elapsed 00:00:00.56
========== Build: 1 succeeded, 0 failed, 0 up-to-date, 0 skipped ==========

Is this what you would like to see?

Li
Posted by BRG on 12/2/2009 at 1:32 PM
Hi Li

Your revised target file now detects unchanged files and avoids building them. Unfortunately, however, with this targets file it is not now possible to do a forced build of an assembler file. Selecting an assembler file and asking for it to be built doesn't do anything :-(

Brian
Posted by Li Shao [MSFT] on 11/28/2009 at 1:55 PM
Hi Brian,

Glad that the updated target/prop/xml files works for you for the most part. It looks like to make incremental build and clean works, "ObjectFileName" instead of "Outputs" need to be used in a few other places in the target file. Below is the updated version of target file, I have verified incremental can work with this version. Please let me know if you have any additional issues. Again, thanks for using the beta version of the product!

<?xml version="1.0" encoding="utf-8"?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
    <PropertyPageSchema
     Include="$(MSBuildThisFileDirectory)$(MSBuildThisFileName).xml" />
    <AvailableItemName
     Include="YASM">
     <Targets>_YASM</Targets>
    </AvailableItemName>
</ItemGroup>
<UsingTask
    TaskName="YASM"
    TaskFactory="XamlTaskFactory"
    AssemblyName="Microsoft.Build.Tasks.v4.0">
    <Task>$(MSBuildThisFileDirectory)$(MSBuildThisFileName).xml</Task>
</UsingTask>
<Target
    Name="_YASM"
    BeforeTargets="$(YASMBeforeTargets)"
    AfterTargets="$(YASMAfterTargets)"
    Condition="'@(YASM)' != ''"
    DependsOnTargets="$(YASMDependsOn);ComputeYASMOutput"
    Outputs="@(YASM->Metadata('ObjectFileName')->Distinct())"
    Inputs="@(YASM);%(YASM.AdditionalDependencies);$(MSBuildProjectFile)">
    <ItemGroup
     Condition="'@(SelectedFiles)' != ''">
     <YASM
        Remove="@(YASM)"
        Condition="'%(Identity)' != '@(SelectedFiles)'" />
    </ItemGroup>
    <ItemGroup>
     <YASM_tlog
        Include="%(YASM.ObjectFileName)"
        Condition="'%(YASM.ObjectFileName)' != '' and '%(YASM.ExcludedFromBuild)' != 'true'">
        <Source>@(YASM, '|')</Source>
     </YASM_tlog>
    </ItemGroup>
    <Message
     Importance="High"
     Text="%(YASM.ExecutionDescription)"
     Condition="'@(YASM)' != ''" />
    <WriteLinesToFile
     Condition="'@(YASM_tlog)' != '' and '%(YASM_tlog.ExcludedFromBuild)' != 'true'"
     File="$(IntDir)$(ProjectName).write.1.tlog"
     Lines="^%(YASM_tlog.Source);@(YASM_tlog->'%(Fullpath)')" />
    <YASM
     Condition="'@(YASM)' != '' and '%(YASM.ExcludedFromBuild)' != 'true'"
     CommandLineTemplate="%(YASM.CommandLineTemplate)"
     Debug="%(YASM.Debug)"
     Defines="%(YASM.Defines)"
     IncludePaths="%(YASM.IncludePaths)"
     UnDefines="%(YASM.UnDefines)"
     ObjectFileName="%(YASM.ObjectFileName)"
     ListFileName="%(YASM.ListFileName)"
     PreIncludeFile="%(YASM.PreIncludeFile)"
     PreProc="%(YASM.PreProc)"
     Parser="%(YASM.Parser)"
     AdditionalOptions="%(YASM.AdditionalOptions)"
     Inputs="@(YASM)" />
</Target>
<PropertyGroup>
    <ComputeLinkInputsTargets>
            $(ComputeLinkInputsTargets);
            ComputeYASMOutput;
         </ComputeLinkInputsTargets>
    <ComputeLibInputsTargets>
            $(ComputeLibInputsTargets);
            ComputeYASMOutput;
         </ComputeLibInputsTargets>
</PropertyGroup>
<Target
    Name="ComputeYASMOutput"
    Condition="'@(YASM)' != ''">
    <ItemGroup>
     <YASMDirsToMake
        Condition="'@(YASM)' != '' and '%(YASM.ExcludedFromBuild)' != 'true'"
        Include="%(YASM.ObjectFileName)" />
     <Link
        Include="%(YASMDirsToMake.Identity)"
        Condition="'%(Extension)'=='.obj' or '%(Extension)'=='.res' or '%(Extension)'=='.rsc' or '%(Extension)'=='.lib'" />
     <Lib
        Include="%(YASMDirsToMake.Identity)"
        Condition="'%(Extension)'=='.obj' or '%(Extension)'=='.res' or '%(Extension)'=='.rsc' or '%(Extension)'=='.lib'" />
     <ImpLib
        Include="%(YASMDirsToMake.Identity)"
        Condition="'%(Extension)'=='.obj' or '%(Extension)'=='.res' or '%(Extension)'=='.rsc' or '%(Extension)'=='.lib'" />
    </ItemGroup>
    <MakeDir
     Directories="@(YASMDirsToMake->'%(RootDir)%(Directory)')" />
</Target>
</Project>

Li Shao
Project and Build Team
Posted by BRG on 11/28/2009 at 8:11 AM
Hi Li

I can confirm that your revised VC++ 2010 customisation files work pretty well with my full project.

The only outstanding issue is that if I build twice in a row without changing anything at all between the two builds, all the assembler files are rebuilt and the project is linked again. For some reason the build system fails to detect that the assembler files have not changed and hence avoid the unnecessary rebuild.

Peter Johnson, the author of YASM has kindly volunteered to build a YASM version that takes multiple files on the command line. I am wondering if using this version will help in solving the unconditional rebuild of the assembler files?

Thank you, once again, for your efforts on this issue.

best regards,

     Brian Gladman



Posted by BRG on 11/25/2009 at 4:47 AM
Dear Li,

I am truly grateful for your answers to my question. I was disappointed when the item was closed without any responses on workarounds but your rapid response to my follow on comment has restored my faith in the VC++ team and its bug handling!

My thanks again - I will let you know if I have any further issues with the workaround you have provided.

best regards,

     Brian Gladman


Posted by Li Shao [MSFT] on 11/24/2009 at 3:59 PM
Thank you for reporting the issues to us. We really appreciate that your investigation and the workaround you have provided. Below are the list of issues that you have reported. I have added my comments regarding whether or not these issues will be fixed for VS2010 and the workaround for the issue that do not have solution yet. Please let us know if you are happy with the resolutions.

I have also posted the latest props/xml/targets files as the workaround. I was able to build your project succesfully with these set of files.

1. Illegal Characters in Path - [Won't fix for VS2010]
=============================

Error    24    error MSB4023: Cannot evaluate the item metadata "%(Extension)". The item metadata "%(Extension)" cannot be applied to the path ""x64\Release\add_err1_n.obj"". Illegal characters in path.    C:\Users\Brian\Documents\Visual Studio 10\Projects\mpir-vc10-wrk\build.vc9\yasm.targets    72

[workaround]
Correct yasm.props by changing line

     <ObjectFileName>"$(IntDir)%(FileName).obj"</ObjectFileName>

to

     <ObjectFileName>$(IntDir)%(FileName).obj</ObjectFileName>

2. Bad YASM command line - [Won't fix for VS2010]
========================

6>C:\Users\Brian\Documents\Visual Studio 10\Projects\mpir-vc10-wrk\build.vc9\yasm.targets(44,5): error MSB3721: The command "yasm -Xvc -f x64 -g cv8 -D _WIN64_ABI -o ""x64\Release\mpn\lib_mpir_amd64.obj"" -rnasm -pnasm ..\..\mpn\x86_64w\amd64\add_err1_n.asm ..\..\mpn\x86_64w\amd64\add_n.asm ..\..\mpn\x86_64w\amd64\addadd_n.asm ..\..\mpn\x86_64w\amd64\addlsh1_n.asm ..\..\mpn\x86_64w\amd64\addlsh_n.asm ..\..\mpn\x86_64w\amd64\addmul_1.asm ..\..\mpn\x86_64w\addmul_2.asm ..\..\mpn\x86_64w\amd64\addsub_n.asm ..\..\mpn\x86_64w\aors_err2_n.asm ..\..\mpn\x86_64w\amd64\com_n.asm ..\..\mpn\x86_64w\amd64\copyd.asm ..\..\mpn\x86_64w\amd64\copyi.asm ..\..\mpn\x86_64w\dive_1.asm ..\..\mpn\x86_64w\diveby3.asm ..\..\mpn\x86_64w\divebyBm1of.asm ..\..\mpn\x86_64w\amd64\divebyff.asm ..\..\mpn\x86_64w\divrem_euclidean_qr_1.asm ..\..\mpn\x86_64w\divrem_euclidean_qr_2.asm ..\..\mpn\x86_64w\amd64\divrem_hensel_qr_1_1.asm ..\..\mpn\x86_64w\amd64\divrem_hensel_qr_1_2.asm ..\..\mpn\x86_64w\amd64\divrem_hensel_r_1.asm ..\..\mpn\x86_64w\amd64\lshift.asm ..\..\mpn\x86_64w\amd64\lshift1.asm ..\..\mpn\x86_64w\amd64\lshift2.asm ..\..\mpn\x86_64w\amd64\lshiftc.asm ..\..\mpn\x86_64w\amd64\mod_1_1.asm ..\..\mpn\x86_64w\amd64\mod_1_2.asm ..\..\mpn\x86_64w\amd64\mod_1_3.asm ..\..\mpn\x86_64w\mode1o.asm ..\..\mpn\x86_64w\amd64\mul_1.asm ..\..\mpn\x86_64w\mul_2.asm ..\..\mpn\x86_64w\amd64\mul_basecase.asm ..\..\mpn\x86_64w\amd64\redc_basecase.asm ..\..\mpn\x86_64w\amd64\rsh1add_n.asm ..\..\mpn\x86_64w\amd64\rsh1sub_n.asm ..\..\mpn\x86_64w\amd64\rsh_divrem_hensel_qr_1_1.asm ..\..\mpn\x86_64w\amd64\rsh_divrem_hensel_qr_1_2.asm ..\..\mpn\x86_64w\amd64\rshift.asm ..\..\mpn\x86_64w\amd64\rshift1.asm ..\..\mpn\x86_64w\amd64\rshift2.asm ..\..\mpn\x86_64w\amd64\sqr_basecase.asm ..\..\mpn\x86_64w\amd64\sub_err1_n.asm ..\..\mpn\x86_64w\amd64\sub_n.asm ..\..\mpn\x86_64w\amd64\subadd_n.asm ..\..\mpn\x86_64w\amd64\sublsh1_n.asm ..\..\mpn\x86_64w\amd64\sublsh_n.asm ..\..\mpn\x86_64w\amd64\submul_1.asm ..\..\mpn\x86_64w\amd64\sumdiff_n.asm ..\..\mpn\x86_64w\udiv.asm ..\..\mpn\x86_64w\umul.asm ..\..\mpn\x86_64w\amd64\and_n.asm ..\..\mpn\x86_64w\amd64\andn_n.asm ..\..\mpn\x86_64w\amd64\ior_n.asm ..\..\mpn\x86_64w\amd64\iorn_n.asm ..\..\mpn\x86_64w\amd64\nand_n.asm ..\..\mpn\x86_64w\amd64\nior_n.asm ..\..\mpn\x86_64w\amd64\xnor_n.asm ..\..\mpn\x86_64w\amd64\xor_n.asm" exited with code 1.

It is batchinbg the files for YASM rather than assembling each seperately. YASM doesn't do this.

[Workaround]
The default project setting for YASM's Object File Name is:

    "$(IntDir)mpn\$(ProjectName).obj"
    
Changing this to :

    "$(IntDir)mpn\%(FileName).obj"

in the projects YASM properties puts this right.

3. project include directories not replicated
=============================================

The C++|General|Additional Include Directories item is missing.

When these are restored all C files compile ok.

4. Excluded assembler files are still built [ Fixed for VS2010]
===========================================

Assembler code files excluded from the build in the YASM property dialogue are still assembled.

*** At this point wrk1 and wrk2 behave differently for no obvious reason ***

5a. Wrk1 Assembler build step fails [Won't fix for VS2010, workaround provided]
===================================

The assembler build phase appeaars to complete but fails with the message:

6>C:\Users\Brian\Documents\Visual Studio 10\Projects\mpir\build.vc10.wrk1\yasm.targets(44,5):
    error MSB3721: The command "yasm -Xvc -f x64 -g cv8 -D _WIN64_ABI -o ""x64\Release\mpn\add_err1_n.obj"" -rnasm -pnasm ..\..\mpn\x86_64w\amd64\add_err1_n.asm" exited with code 1.

5b. Wrk2 Assembler build step works
===================================

6. Wrk2 only Link looking in wrong place for object files assembled to a subdirectory
=====================================================================================

6>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Microsoft.CppBuild.targets(1095,5): warning MSB8012: TargetPath(C:\Users\Brian\Documents\Visual Studio 10\Projects\mpir\build.vc10.wrk2\lib_mpir_amd64\x64\Release\lib_mpir_amd64.lib) does not match the Library's OutputFile property value (C:\Users\Brian\Documents\Visual Studio 10\Projects\mpir\build.vc10.wrk2\lib_mpir_amd64\x64\Release\mpir.lib). This may cause your project to build incorrectly. To correct this, please make sure that $(OutDir), $(TargetName) and $(TargetExt) property values match the value specified in %(Lib.OutputFile).
6>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Microsoft.CppBuild.targets(1097,5): warning MSB8012: TargetName(lib_mpir_amd64) does not match the Library's OutputFile property value (mpir). This may cause your project to build incorrectly. To correct this, please make sure that $(OutDir), $(TargetName) and $(TargetExt) property values match the value specified in %(Lib.OutputFile).
6>LINK : fatal error LNK1181: cannot open input file 'x64\Release\add_err1_n.obj'

Assembler files are assembled to:

    "$(IntDir)mpn\%(FileName).obj"
    
and go to:

    build.vc9\lib_mpir_amd64\x64\Release\mpn\
    
The linker is looking for them in:

    build.vc9\lib_mpir_amd64\x64\Release\

so its not seeing the 'mpn' subdirectory.

[Workaround] Change Include="%(YASM.Outputs) to Include="%(YASM.ObjectFileName) in yasm.targets

Li Shao
Project and Build Team
Posted by BRG on 11/24/2009 at 6:39 AM
Please respond to my last message. I spent a LOT of time debugging this issue and providing simplified test cases.

I think the least you could do in return is to actually answer my question even if you feel you cannot offer what I am asking for.

I am not asking you to pre-release the RTM but simply to let me have the content of corrected VS 2010 customisation files so that I can test that these work on my full project. It is ssurely in everyones interests that they work when the RTM is released.
Posted by BRG on 11/20/2009 at 3:36 PM
Thank you for providing feedback on the status of this bug - I am pleased to hear that it will be fixed in the RTM.

In the meantime, would it be possible to provide a workaround by publsihing the three files that are output when the YASM rules file is converted by the fixed VS 2010 build?

This would allow me to test the resulting files and would add to the confidence in your solution by testing it on a full project build rather than the simplified test exaamples that I provided.

My own fix sort of works but it buillds all the assembler files when any single C or assembler source file is changed.

best regarads,

     Brian Gladman
Posted by Bogdan [MSFT] on 11/20/2009 at 3:06 PM
Hi,

Thanks for reporting this bug, I want to let you know that we fixed it in our currents builds and it will be available in VS2010 RTM.

Thanks,
Bogdan Mihalcea
VC Project & Build
Posted by BRG on 11/5/2009 at 3:44 PM
Hi Amit

Thankyou for looking at this.

The three modified yasm build customisation files that I uploaded almost work but I am unable to discover how to make %(Outputs) correctly pick up the value set for %(ObjectFileName) in the project file (as you indicate, it does not overide the default value as I believe it should). You don't comment on my outstanding problem in these files - that of how to avoid all the assembler files rebuilding when only one (or even a C file) has changed.

Advice on how to fix these two issues would be much appreciated (I assume my way of getting the sub-directory created is OK). I can then provide thesse three files rather than relying on conversion.

with my regards,

     Brian Gladman
Posted by Amit [MSFT] on 11/5/2009 at 2:40 PM
Hi,

Thanks for reporting the issues. Your feedback and investigation into the issues was really helpfull for us. There are several different issues that you note in this bug. We are going to track the following issue from the list in this bug, and for the rest we are going to open separate bugs internally:

     2. Batching of the YASM command line

Status on rest of the issues noted.

1. Illegal Characters in Path (working on fix tracked separately)

3. project include directories not replicated (could not repro in latest internal builds)

4. Excluded assembler files are still built (could not reprp in latest internal builds)

5a. Wrk1 Assembler build step fails (we were able to repro this issue internally. Unfortunately we are not able to fix it for VS2010. Workaround is to create the subdirectory manually)

6. Wrk2 only Link looking in wrong place for object files assembled to a subdirectory (we will open a new bug to track this issue separately. This is happening because in Yasm.props ObjectFileName default value is $(IntDir)%(FileName).obj. However in the project it is overwritten to $(IntDir)mpn\%(FileName).obj. Once the default is changed to reflect the overwritten value everything works fine.)

Thanks,
Amit Mohindra
Windows C++ Team
Posted by Microsoft on 10/26/2009 at 12:31 AM
Thanks for your feedback.

We are rerouting this issue to the appropriate group within the Visual Studio Product Team for triage and resolution. These specialized experts will follow-up with your issue.

Thank you


Posted by Microsoft on 10/25/2009 at 8:42 PM
Thank you for your feedback, We are currently reviewing the issue you have submitted.
Posted by BRG on 10/24/2009 at 1:53 PM
I have now added a ZIP file - yasm.cb.zip - with three custom build files that will build the project. There is, however, one outstanding problem in that the assembler files build unconditionally even when they are fully up to date.

One issue that may be a possible cause is the failure of the %(Outputs) property to pick up the %(ObjectFileName) property from the project file (it seems to pick up only the default value).

After many hours of trying to find a way to remove unnecessary assembler file rebuilds, I am no further forward. I would hence appreciate advice on what now needs to be done to remove this behaviour.
Posted by BRG on 10/23/2009 at 9:57 AM
1. Further debugging shows that the %(Outputs) fails to pick up the actual value of %(ObjectFileName) as set in the properties dialogue. For example, if in yasm.targets, in the ComputeYASMOutput target, the line

        Include="%(YASM.Output)" />

is replaced by:

        Include="%(YASM.ObjectFileName)" />

the directory needed is created.

2. Although "excluded from build" assembler files are not built, the output window suggests that they are AND they ARE passed to the linker as if they they have been buillt. Hence the link fails. It appears that excluded files are still being added to the linker input list.
Posted by BRG on 10/23/2009 at 5:02 AM
Reference assembler files excluded from build still being built - the build reports that these are being built in the output window but they are correctly not being built. So this appears to be an issue of incorrect output window reporting.
Posted by BRG on 10/23/2009 at 4:09 AM
One reason why the yasm assembler build fails is that the output is being put in a subdirectory 'mpn' within the $(IntDir) that has not yet been created when the assembler runs. Before it runs the assembler, Visual Studio 2008 creates the intermediate directory tree AND it also creates the 'mpn' subdirectory.

VS 2010 beta 2 also correctly creates the $(IntDir) directory tree before running the assembler but it DOES NOT create the 'mpn' subdirectory that is needed so YASM fails to find an output path. Once an mpn C file is built, this does create the 'mpn' subdirectory so subsequent attempts to assemble files with YASM then work. This explains why the wrk1 and wrk2 builds appear to be different.

This does not explain why the linker subsequently fails to see the subdirectory though.