<div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div lang="EN-AU" link="blue" vlink="purple"><p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d">Making progress with msvc, with a lot of second guessing, but I cannot seem to fully get out of the circular dependencies easily. After fixing a few things, there seems to be a two to three stage build process (‘basic’, ‘build’ and, well, the huge rest). I can build the ‘basic’ stuff with references being the <a href="http://MS.NET" target="_blank">MS.NET</a> libraries it defaults to, but the ‘build’ phase fails both with dependencies on the basic system or the <a href="http://MS.NET" target="_blank">MS.NET</a> libraries (missing implementations or ambiguous references). Well done for you to sort it all out.</span></p>

</div></blockquote><div><br></div><div>Our build uses *none* of the <a href="http://MS.NET">MS.NET</a> libraries - every project *only* depends on other projects in the same Mono solution file.  All of the projects reference the mscorlib project built in that solution, *never* Microsoft's mscorlib.dll (see Project Properties -> Build -> Advanced -> "Do not reference mscorlib.dll").</div>

<div><br></div><div>mscorlib has these compilation symbols: INSIDE_CORLIB LIBC NET_1_1 NET_2_0 NET_3_0 NET_3_5 NET_4_0</div><div>And it has a few links to external files: Aes.cs, Consts.cs, Locale.cs, MonoTODOAttribute.cs, SemaphoreFullException, TimeZoneInfo.AdjustmentRule.cs, TimeZoneInfo.Android.cs, TimeZoneInfo.cs, TimeZoneInfo.TransitionTime.cs.</div>

<div>We were able to determine most of those files by looking at corlib.dll.sources - definitely look at the .sources files for the other DLLs too... although it's better to look at the Linux build in-action.</div><div>

<br></div><div>You should be able to build mscorlib with the above info.  Here is the info for system (notice the dash, as in "minus"):</div><div><br></div><div>System -XML -Config: LIBC NET_1_1 NET_2_0 NET_3_0 NET_3_5 NET_4_0 CONFIGURATION_2_0</div>

<div>Depends on: mscorlib project</div><div><br></div><div>System.Xml then depends on the above.</div><div><br></div><div>System -Config: LIBC NET_1_1 NET_2_0 NET_3_0 NET_3_5 NET_4_0 CONFIGURATION_2_0 XML_DEP</div><div>Depends on: mscorlib project, System.Xml project</div>

<div><br></div><div><div>Mono.Security then depends on mscorlib and System -Config</div><div>Mono.Configuration then depends on mscorlib, System.Xml and System -Config</div><br class="Apple-interchange-newline"></div><div>

System: LIBC NET_1_1 NET_2_0 NET_3_0 NET_3_5 NET_4_0  CONFIGURATION_2_0 CONFIGURATION_DEP XML_DEP SECURITY_DEP</div><div>Depends on: mscorlib, System.Xml, System.Configuration, Mono.Security</div><div><br></div><div>Don't trust the above though - I think there's a missing step, there may need to be 4 builds of System (one before XML_DEP is added, one before SECURITY_DEP is added, one before CONFIGURATION_DEP is added, then the final build with all 3 constants added).</div>

<div><br></div><div>The best thing to do is compile mcs in Linux and gather this information:</div><div>- The order in which each library is built - including if it is built multiple times.</div><div>- What dependencies each build has.</div>

<div>- What compile-time constants are set.</div><div>- What files are a part of the build.</div><div><br></div><div>I would definitely add you to my list of super-cool people if you duplicated / modified the Linux build process to capture the above 4 things to generate a working MSVC solution - it's just XML files, an xslt might do this well.  I'm sure the Mono folks would be happy to include the output of such a process in each source release to make it easier on us MSVC-centric folks.</div>

<div><br></div><div>- Kipp</div><div><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div lang="EN-AU" link="blue" vlink="purple"><p class="MsoNormal"><span style="color:rgb(31,73,125);font-family:Calibri,sans-serif;font-size:11pt">It sounds like your approach is similar to that in the ‘msvc’ folder and related makefile targets, but I probably miss many details. I found that I could run the make targets generating csproj files only after a successful ‘make’ on cygwin, using anciliary files (.response) from the call to ‘make’. I wonder how similar to what you describe this is. My question may be naive, but what do you mean by compiler constants, build order and files used? Are you post-processing the captured output redirected to a file?</span></p>

<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d"><u></u> <u></u></span></p><p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d">I never really had to do much with makefiles, and with a codebase the size of Mono, this is a steep learning curve.<u></u><u></u></span></p>

<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d"><u></u> <u></u></span></p><p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d">Cheers,<u></u><u></u></span></p>

<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d">J-M<u></u><u></u></span></p><p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d"><u></u> <u></u></span></p>

<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d"><u></u> <u></u></span></p><p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d"><u></u> <u></u></span></p>

<div style="border:none;border-top:solid #b5c4df 1.0pt;padding:3.0pt 0cm 0cm 0cm"><p class="MsoNormal"><b><span lang="EN-US" style="font-size:10.0pt;font-family:"Tahoma","sans-serif"">From:</span></b><span lang="EN-US" style="font-size:10.0pt;font-family:"Tahoma","sans-serif""> Miguel Mudge [mailto:<a href="mailto:michael.mudge@welchallyn.com" target="_blank">michael.mudge@welchallyn.com</a>] <br>

<b>Sent:</b> Tuesday, 8 May 2012 12:30 AM<br><b>To:</b> Perraud, Jean-Michel (CLW, Black Mountain)<br><b>Cc:</b> <a href="mailto:mono-devel-list@lists.ximian.com" target="_blank">mono-devel-list@lists.ximian.com</a><br><b>Subject:</b> Re: [Mono-dev] Compiling Mono with Visual Studio and .pdb files<u></u><u></u></span></p>

</div><div class="im"><p class="MsoNormal"><u></u> <u></u></p><p class="MsoNormal">We've been building the 2.10.2 Mono framework libraries in Visual Studio.  We performed a build on Linux, copied the compiler constants, build order and files used, and use this information to create the Visual Studio project - we did not start from Mono's msvc.  It was a very manual process, but I am pleased with the output.<u></u><u></u></p>

<div><p class="MsoNormal"><u></u> <u></u></p></div><div><p class="MsoNormal">We don't compile all of the libraries since our embedded device doesn't have the space.  Most of the difficulty is in the roots anyways - for example, we have several System.dll projects, which are incrementally more dependent, in order to solve circular dependency problems.  Picture attached:<span style="color:#1f497d"><u></u><u></u></span></p>

</div></div><div><div><div><p class="MsoNormal"><u></u> <u></u></p></div><div><p class="MsoNormal">It seems like the only way to reliably "copy" the build process into MSVC is to actually run the mcs make.  You might be able to hack it a bit to mock a build, grab the compile flags/files and then generate msvc files from that.<u></u><u></u></p>

</div><div class="im"><div><p class="MsoNormal"><u></u> <u></u></p><div><p class="MsoNormal">Thanks,<u></u><u></u></p></div><div><p class="MsoNormal">Michael "Kipp" Mudge | Welch Allyn | Lead Software Engineer<u></u><u></u></p>

</div><div><p class="MsoNormal"><a href="tel:315-554-4057" value="+13155544057" target="_blank">315-554-4057</a> | <a href="mailto:michael.mudge@welchallyn.com" target="_blank">michael.mudge@welchallyn.com</a><u></u><u></u></p>

</div><p class="MsoNormal" style="margin-bottom:12.0pt"><u></u> <u></u></p><p class="MsoNormal"><u></u> <u></u></p></div></div></div></div></div></blockquote></div><br>