<div class="gmail_quote"><div>Hi, </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"><div><p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d"> <u></u></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.</span></p>
</div></div></blockquote><div> </div><div>That's not correct, all projects were regenerated recently. About the corlib-build issue, you don't need to build any of *-build.csproj projects, they are needed only on systems with no .NET 4 API. I have done some work on cleaning this up recently but it's not yet finished.</div>
<div><br></div><div>Marek</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"><div><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">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 (<a href="https://github.com/nikhilk/scriptsharp/issues/156" target="_blank">https://github.com/nikhilk/scriptsharp/issues/156</a>) 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.<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">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<u></u><u></u></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<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">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><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> Saturday, 12 May 2012 12:34 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><p class="MsoNormal"><u></u> <u></u></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"><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><u></u><u></u></p>
</div></blockquote><div><p class="MsoNormal"><u></u> <u></u></p></div><div><p class="MsoNormal">Our build uses *none* of the <a href="http://MS.NET" target="_blank">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").<u></u><u></u></p>
</div><div><p class="MsoNormal"><u></u> <u></u></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<u></u><u></u></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.<u></u><u></u></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.<u></u><u></u></p>
</div><div><p class="MsoNormal"><u></u> <u></u></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"):<u></u><u></u></p>
</div><div><p class="MsoNormal"><u></u> <u></u></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<u></u><u></u></p></div><div><p class="MsoNormal">Depends on: mscorlib project<u></u><u></u></p>
</div><div><p class="MsoNormal"><u></u> <u></u></p></div><div><p class="MsoNormal">System.Xml then depends on the above.<u></u><u></u></p></div><div><p class="MsoNormal"><u></u> <u></u></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<u></u><u></u></p></div><div><p class="MsoNormal">Depends on: mscorlib project, System.Xml project<u></u><u></u></p></div><div><p class="MsoNormal">
<u></u> <u></u></p></div><div><div><p class="MsoNormal">Mono.Security then depends on mscorlib and System -Config<u></u><u></u></p></div><div><p class="MsoNormal">Mono.Configuration then depends on mscorlib, System.Xml and System -Config<u></u><u></u></p>
</div><p class="MsoNormal"><u></u> <u></u></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<u></u><u></u></p></div><div><p class="MsoNormal">
Depends on: mscorlib, System.Xml, System.Configuration, Mono.Security<u></u><u></u></p></div><div><p class="MsoNormal"><u></u> <u></u></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).<u></u><u></u></p>
</div><div><p class="MsoNormal"><u></u> <u></u></p></div><div><p class="MsoNormal">The best thing to do is compile mcs in Linux and gather this information:<u></u><u></u></p></div><div><p class="MsoNormal">- The order in which each library is built - including if it is built multiple times.<u></u><u></u></p>
</div><div><p class="MsoNormal">- What dependencies each build has.<u></u><u></u></p></div><div><p class="MsoNormal">- What compile-time constants are set.<u></u><u></u></p></div><div><p class="MsoNormal">- What files are a part of the build.<u></u><u></u></p>
</div><div><p class="MsoNormal"><u></u> <u></u></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.<u></u><u></u></p>
</div><div><p class="MsoNormal"><u></u> <u></u></p></div><div><p class="MsoNormal">- Kipp<u></u><u></u></p></div><div><p class="MsoNormal"><u></u> <u></u></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"><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><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d"> </span><u></u><u></u></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.</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d"> </span><u></u><u></u></p><p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d">Cheers,</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d">J-M</span><u></u><u></u></p><p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d"> </span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d"> </span><u></u><u></u></p><p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d"> </span><u></u><u></u></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</span><u></u><u></u></p>
</div><div><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:<u></u><u></u></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><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" 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><p class="MsoNormal"><u></u> <u></u></p></div></div><br>_______________________________________________<br>
Mono-devel-list mailing list<br>
<a href="mailto:Mono-devel-list@lists.ximian.com">Mono-devel-list@lists.ximian.com</a><br>
<a href="http://lists.ximian.com/mailman/listinfo/mono-devel-list" target="_blank">http://lists.ximian.com/mailman/listinfo/mono-devel-list</a><br>
<br></blockquote></div><br>