29.08.2017, 21:19, "Olmstead, Don" <don.olmst...@sony.com>:
> Did you happen to look at any sort of distributed build system? We use 
> distributed builds here for WebKit and a full rebuild is pretty reasonable. 
> That would negate the need to change how everything is done to get a unity 
> build going.

This isn't helpful for contributors who have only one machine at their disposal

>
> From: webkit-dev 
> [mailto:webkit-dev-bounces+don.olmstead=am.sony....@lists.webkit.org] On 
> Behalf Of Keith Miller
> Sent: Monday, August 28, 2017 5:37 PM
> To: WebKit Development Mailing List <webkit-dev@lists.webkit.org>
> Subject: [webkit-dev] Growing tired of long build times? Check out this 
> awesome new way to speed up your build... soon (HINT: It's not buying a new 
> computer)
>
> Hello fellow Webkittens,
>
> Are you growing tired of long cat naps while waiting 45 minutes for WebKit to 
> build? (I’ve definitely never done this 🤐!)
>
> Do you want WebKit to build up to 3-4x faster on a clean build?*
>
> Does seeing your incremental build… stay the same sound good?
>
> You’ll be purring with excitement after you switch to unified source builds!**
>
> * Building JSC with CMake, including CMake configuration time, went from 
> ~8m15s to ~2m30s on my MBP using unified sources only on cpp files in 
> JavaScriptCore. Final results on WebKit may vary. Using unified sources may 
> cause sudden feelings of euphoria and productivity (or grumpiness from lack 
> of naps…). Not responsible for any bugs in extra patches produced by using 
> unified source builds (excluding build system related bugs) except where 
> required by law (pi...@apple.com).
>
> ** Soon. Unified source builds haven’t been landed yet.
>
> How are things going to change? Great question! Let’s find out!
>
> When you fire off the build script it will automagically paw your source 
> files into bundles. The size of each bundle is speculatively going to be 8 
> .cpp files but that’s up for experimentation. From my testing so far, the 
> compile time for a bundle is at most 20% (~6s vs ~7s for the Air directory) 
> longer than the longest file it includes. Given that most of the build time 
> in incremental builds is scanning dependencies, this change is probably only 
> barely noticeable.
>
> Bundling happens as part of the CMake configuration process, in the CMake 
> build. In the Xcode build it’s more complicated since we cannot dynamically 
> choose the files we are going to compile. The only solution I know of is to 
> pre-list a bunch of files for the build to dump files into. Occasionally, 
> we’ll need to add more files to the build list.
>
> When you add or remove a file in the project, the cost is higher. The current 
> plan to bundle source files is by directory. This means that when a .cpp file 
> is added or removed you will rebalance the bundles in its directory, and you 
> will have to rebuild up to the full directory that file is in.
>
> My goal is to make all of this invisible to developers as much as possible. I 
> believe, for the most part, things should operate mostly as they have before. 
> As the details on unified source builds get finalized, I’m sending out a 
> separate email documenting any workflow changes. I’ll also do my best to 
> answer any questions or concerns.
>
> “But Keith, am I going to have to make major changes to the way I develop 
> WebKit?” Yes and, hopefully, no. There is one major common workflow change 
> that comes with unified sources, the naming of static variables and 
> functions. Since C++ does not have a way to only declare a static function or 
> variable in some restricted top level scope we are going to need to create 
> some work around. The choice I’m thinking we’ll go with is to have an 
> auto-generated macro value FILENAME, which is similar to __FILE__ except that 
> it doesn’t have file extension (We can’t use FILE since that’s actually a 
> type in C 🙁). This macro would be redefined in the unified source directly 
> above the file that is about to be included. Then in each cpp file that has 
> static functions/variables developers would have:
>
> namespace FILENAME {
>
>             static int myVariable { 0 };
>
>             static int myFunction() { return myVariable; }
>
> }
>
> The advantage of using a macro over textually writing the filename is that it 
> makes code more portable between files. Also, once people get used to the 
> concept of FILENAME in the code base it will, hopefully become obvious what 
> it means. The main downside to this is using FILENAME in a header would give 
> you whatever cpp file first included you (if only we got the compiler magic 
> of __FILE__...). We would probably need to prohibit using FILENAME in .h 
> files. Unfortunately, you cannot "using FILENAME;” because it will export all 
> the values in each subsequent namespace. e.g.
>
> namespace JSC {
>
>     namespace Foo {
>
>             static int myVar { 0 };
>
>     }
>
>     using Foo;
>
> }
>
> namespace JSC {
>
>     namespace Bar {
>
>             static int myVar { 0 };
>
>     }
>
>     using Bar;
>
> }
>
> does not compile.
>
> Does anyone have other name recommendations for the macro name other than 
> FILENAME? I went with file name since it describes what the substituted value 
> will be the best, which is helpful for debugging. The other options I 
> considered were FILE_LOCAL and PER_FILE.
>
> Are there other issues that people think might occur with unified sources? 
> Note, It’s also likely that there are some source files that need to be 
> excluded from the unified source builds for various reasons.
>
> “Is there anything else I need to do with unified sources?”, Yes! Enjoy the 
> faster builds!
>
> To help visualize how much of a difference unified sources can make for you, 
> I’ve illustrated this helpful graph on the WebKit developer experience:
>
> * Due to size constraints this graph is not to scale.
>
> Cheers,
>
> Keith
>
> P.S.
>
> For those interested there was a long process in deciding how to improve 
> builds:
>
> The first thing I looked at was using C++ modules.
>
> There were a couple of problems with C++ modules. First, different compliers 
> support modules in different ways. This was not a major concern since we 
> probably would have gone with Clang’s version of modules. As far as I know, 
> almost all developers either use clang or could likely switch to clang for 
> development. The bigger problem with Clang modules is that it seemed like we 
> would have a rough early adopter problem. Additionally, since a lot of 
> Apple’s internal SDK’s don’t seem to support modules it was likely to be a 
> major slog to get everything working correctly. In a few years I think it 
> will probably be worth looking at C++ modules again as, in theory, C++ 
> modules should be better than unified sources.
>
> Since we decided against C++ modules that really only leaves us with some 
> form of unified sources. Obviously, doing all in one builds would be out of 
> the question. While all in ones would have been great for clean builds, it 
> also means incremental builds are essentially the same as clean builds. So, I 
> concluded that we should go with some kind of automated unified build file 
> solution. An automated unified build file solution means that most of the 
> time the build system is opaque to developers (well as much as is possible 
> with a unified source build).
>
> Since the static variable naming problem was likely to be the biggest issue 
> with unified sources, it was important to create a system that made this a 
> pain free as possible. There were other options we could go with. We could 
> have a script that parses .cpp files and looks for static variables with the 
> same name and yells at you. This is pretty annoying and wouldn’t help actual 
> development when people hit an error. For example, I know I never run the 
> check-webkit-style script until I’m putting a patch up for review.
> ,
>
> _______________________________________________
> webkit-dev mailing list
> webkit-dev@lists.webkit.org
> https://lists.webkit.org/mailman/listinfo/webkit-dev


-- 
Regards,
Konstantin
_______________________________________________
webkit-dev mailing list
webkit-dev@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-dev

Reply via email to