<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40"><head><meta http-equiv=Content-Type content="text/html; charset=us-ascii"><meta name=Generator content="Microsoft Word 12 (filtered medium)"><style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:Tahoma;
        panose-1:2 11 6 4 3 5 4 4 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        margin-bottom:.0001pt;
        font-size:12.0pt;
        font-family:"Times New Roman","serif";}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
span.EmailStyle17
        {mso-style-type:personal-reply;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
.MsoChpDefault
        {mso-style-type:export-only;}
@page WordSection1
        {size:612.0pt 792.0pt;
        margin:72.0pt 72.0pt 72.0pt 72.0pt;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]--></head><body lang=EN-AU link=blue vlink=purple><div class=WordSection1><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>Hi Miguel, mono-devel subscribers,<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p> </o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>Thanks Miguel, your description helped me figure out a couple of key things. I’m gradually getting on top of the mcs/class  build process and its translation to VS solutions/projects. There was already a lot of prior work done by Sebastien Pouliot (I think) a few years ago.<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p> </o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>One thing I came across is that the project for “corlib-build” builds if targeting .Net 2.0, but fails on .NET 4.0 with a few errors such as follows. The only related issue I found (https://github.com/nikhilk/scriptsharp/issues/156) suggests that .NET4.5 may be the issue. Any advice on handling this is welcome. I need to add project dependencies on a couple of outputs from the “basic” profile to overcome the issue and still target 4.0. However I do not like the departure from the cygwin build process.<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p> </o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>The type 'System.Diagnostics.TextWriterTraceListener' is defined in an assembly that is not referenced. You must add a reference to assembly 'System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.                C:\src\mono\mono\mcs\class\corlib\System.Diagnostics\ConditionalAttribute.cs         35           11           corlib-build<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>The type 'System.Collections.Generic.ISet`1<T0>' is defined in an assembly that is not referenced. You must add a reference to assembly 'System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.                C:\src\mono\mono\mcs\class\corlib\System.Collections.Generic\CollectionDebuggerView.cs               32           11                corlib-build<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p> </o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p> </o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>Cheers,<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>J-M<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p> </o:p></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:michael.mudge@welchallyn.com] <br><b>Sent:</b> Saturday, 12 May 2012 12:34 AM<br><b>To:</b> Perraud, Jean-Michel (CLW, Black Mountain)<br><b>Cc:</b> mono-devel-list@lists.ximian.com<br><b>Subject:</b> Re: [Mono-dev] Compiling Mono with Visual Studio and .pdb files<o:p></o:p></span></p></div><p class=MsoNormal><o:p> </o:p></p><div><blockquote style='border:none;border-left:solid #CCCCCC 1.0pt;padding:0cm 0cm 0cm 6.0pt;margin-left:4.8pt;margin-right:0cm'><div><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'><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><o:p></o:p></p></div></blockquote><div><p class=MsoNormal><o:p> </o:p></p></div><div><p class=MsoNormal>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").<o:p></o:p></p></div><div><p class=MsoNormal><o:p> </o:p></p></div><div><p class=MsoNormal>mscorlib has these compilation symbols: INSIDE_CORLIB LIBC NET_1_1 NET_2_0 NET_3_0 NET_3_5 NET_4_0<o:p></o:p></p></div><div><p class=MsoNormal>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.<o:p></o:p></p></div><div><p class=MsoNormal>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.<o:p></o:p></p></div><div><p class=MsoNormal><o:p> </o:p></p></div><div><p class=MsoNormal>You should be able to build mscorlib with the above info.  Here is the info for system (notice the dash, as in "minus"):<o:p></o:p></p></div><div><p class=MsoNormal><o:p> </o:p></p></div><div><p class=MsoNormal>System -XML -Config: LIBC NET_1_1 NET_2_0 NET_3_0 NET_3_5 NET_4_0 CONFIGURATION_2_0<o:p></o:p></p></div><div><p class=MsoNormal>Depends on: mscorlib project<o:p></o:p></p></div><div><p class=MsoNormal><o:p> </o:p></p></div><div><p class=MsoNormal>System.Xml then depends on the above.<o:p></o:p></p></div><div><p class=MsoNormal><o:p> </o:p></p></div><div><p class=MsoNormal>System -Config: LIBC NET_1_1 NET_2_0 NET_3_0 NET_3_5 NET_4_0 CONFIGURATION_2_0 XML_DEP<o:p></o:p></p></div><div><p class=MsoNormal>Depends on: mscorlib project, System.Xml project<o:p></o:p></p></div><div><p class=MsoNormal><o:p> </o:p></p></div><div><div><p class=MsoNormal>Mono.Security then depends on mscorlib and System -Config<o:p></o:p></p></div><div><p class=MsoNormal>Mono.Configuration then depends on mscorlib, System.Xml and System -Config<o:p></o:p></p></div><p class=MsoNormal><o:p> </o:p></p></div><div><p class=MsoNormal>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<o:p></o:p></p></div><div><p class=MsoNormal>Depends on: mscorlib, System.Xml, System.Configuration, Mono.Security<o:p></o:p></p></div><div><p class=MsoNormal><o:p> </o:p></p></div><div><p class=MsoNormal>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).<o:p></o:p></p></div><div><p class=MsoNormal><o:p> </o:p></p></div><div><p class=MsoNormal>The best thing to do is compile mcs in Linux and gather this information:<o:p></o:p></p></div><div><p class=MsoNormal>- The order in which each library is built - including if it is built multiple times.<o:p></o:p></p></div><div><p class=MsoNormal>- What dependencies each build has.<o:p></o:p></p></div><div><p class=MsoNormal>- What compile-time constants are set.<o:p></o:p></p></div><div><p class=MsoNormal>- What files are a part of the build.<o:p></o:p></p></div><div><p class=MsoNormal><o:p> </o:p></p></div><div><p class=MsoNormal>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.<o:p></o:p></p></div><div><p class=MsoNormal><o:p> </o:p></p></div><div><p class=MsoNormal>- Kipp<o:p></o:p></p></div><div><p class=MsoNormal><o:p> </o:p></p></div><blockquote style='border:none;border-left:solid #CCCCCC 1.0pt;padding:0cm 0cm 0cm 6.0pt;margin-left:4.8pt;margin-right:0cm'><div><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>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><o:p></o:p></p><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'> </span><o:p></o:p></p><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'><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.</span><o:p></o:p></p><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'> </span><o:p></o:p></p><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>Cheers,</span><o:p></o:p></p><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>J-M</span><o:p></o:p></p><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'> </span><o:p></o:p></p><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'> </span><o:p></o:p></p><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'> </span><o:p></o:p></p><div style='border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0cm 0cm 0cm'><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'><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</span><o:p></o:p></p></div><div><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'> <o:p></o:p></p><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'>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.<o:p></o:p></p><div><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'> <o:p></o:p></p></div><div><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'>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:<o:p></o:p></p></div></div><div><div><div><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'> <o:p></o:p></p></div><div><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'>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.<o:p></o:p></p></div><div><div><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'> <o:p></o:p></p><div><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'>Thanks,<o:p></o:p></p></div><div><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'>Michael "Kipp" Mudge | Welch Allyn | Lead Software Engineer<o:p></o:p></p></div><div><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'><a href="tel:315-554-4057" target="_blank">315-554-4057</a> | <a href="mailto:michael.mudge@welchallyn.com" target="_blank">michael.mudge@welchallyn.com</a><o:p></o:p></p></div><p class=MsoNormal style='mso-margin-top-alt:auto;margin-bottom:12.0pt'> <o:p></o:p></p><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'> <o:p></o:p></p></div></div></div></div></div></blockquote></div><p class=MsoNormal><o:p> </o:p></p></div></body></html>