Hi All,
I wanted to start fresh since there are several emails/chats going around regarding Visual Studio builds of ReactOS.
First, I would like to state something clearly, since there seems to be implicit thoughts to the contrary:
Visual Studio is capable of handling a project the size of ReactOS in its entirety in one .sln without any major performance problems, if it is configured correctly.
The key phrase is “if it is configured correctly”.
For example:
1. The performance problem during loading occurs because IntelliSense is being unnecessarily taxed (quite heavily in fact). This is fixed by adding #define WIN32_LEAN_AND_MEAN as appropriate to the IDE settings.
2. The lack of x86_64 and ARM support is occurring because there is a lack of x86_64 and ARM support. :D
3. Some people might look at the Solution Workspace window, see 800 projects, and think, “Wow. That’s a lot of projects. I will be scrolling all day long.” There is a solution (no pun intended) for that: Don’t put 800 projects linearly in the Solution Workspace. Put them in a hierarchy that matches, exactly, the hierarchy of the ReactOS project.
4. That build paths will be broken if the user decides to move his/her ReactOS hierarchy to a different directory after the .sln and .vcxproj files have been generated by cmake, is easily fixed: Use relative paths in the IDE project settings instead.
5. The fact that it is not possible to build, say, just applications, or just drivers, without hunting-and-pecking projects in the Solution Workspace, is related to problem #3: The projects are not yet placed into a hierarchy that mirrors the ReactOS repository. If the projects were placed into a hierarchy that mirrors the ReactOS repository, it would be possible to select, say, drivers, right-click, select Build, and all the drivers will be built depends on what was done in the code, as well as setting proper paths in the IDE. The use would be able to toggle between Debug/Release, x86_32/ARM, and perform the same operation, with expected results.
I could go on, but you get the point. It is trivial to set up Visual Studio so that it “behaves properly”. I started this effort, and was 10% into the 800 projects, at least setting up the structure, for x86_32, x86_64, and ARM; but I throttled-back because I do not like redundancy of effort, and Amine was already well on his way doing something that was essentially similar. I am confident that, over time, he will solve these problems.
In the meantime, I would hope that we keep in mind that the problem is not the tool. The problem is that the tool has not been given a chance to be configured properly.
If we configure it properly, these problems go away, and most importantly, when a new developer comes and sees ReactOS in Visual Studio for the first time, what they see makes sense. Let me repeat that: The measure of success here, is not whether it is possible to get Visual Studio to compile ReactOS, although I read some writings about how some wanted the Microsoft compiler over GCC. The measure of success is whether a heavily experience user of Visual Studio sees the IDE for the first time with ReactOS in it, and not start mumbling things like..”Ok…uh... why did they do that…???”
By contrast we want them to say:
“Wow…800-project solution. Let’s see, x86_32, x86_64, ARM support..nice…both Debug and Release present…good good…looks like Solution Workspace mirrors what is on disk..cool…#include paths in IDE project settings are relative to root of solution so I can move solution to another disk if I like…appreciate that…IntelliSense seems to be working correctly…and this livecd thing…I guess right-clicking on that and doing Build does minimum operations necessary to generate a live CD. I wonder what happens when I try to execute the livecd project after built. Wow…that is too awesome!!! Ok. Everything makes sense. I can handle myself from here. Thanks.”
IMO, we should give Amine time to get the ReactOS repository into this state.. I am re-attaching an image I sent last week about what I would have done for the structure of the Solution Workspace. As you can see from this structure, there is nothing intimidating or inefficient about this structure, and it mirrors what ReactOS veterans see on disk every day.
Cheers.
-John