--
--
Chromium Developers mailing list: chromi...@chromium.org
View archives, change email options, or unsubscribe:
http://groups.google.com/a/chromium.org/group/chromium-dev
Thanks for the quick response.Just want to know that Which version is faster linux(native) or winodws(native) ?
Regards,Suraj
Does it require to build whole chain (all the components such as android,iphone,mac) to build Chrome Browser ?
When you say that it builds every component of Chrome used by that OS, you mean Chrome application specific components and not the supporting libraries? For example, it doesn't build the Freetype library or the GLibc library. To that end, I wonder what the point of the third-party directory is in the source tree, as it does contain a Freetype entry. Is there a way to have the build compile that Freetype and use the result as opposed to picking one up from the system you are compiling on?
We are targeting a couple of different OS's. One is QNX, which should be fairly straightforward. It's pretty compatible with the Linux model. When I had originally started looking at the port, I thought it would be possible to just have the build system build everything that I needed, but I ran in to problems setting up the include paths and telling the build that I wanted to build stuff out of the third_party repository. Also I found I was hacking and slashing through the gyp files to the point where it was not maintainable so I decided to take a step back and see about approaching it the right way by setting up an OS target for QNX. It has a standard set of gcc/binutils based toolchain, but some of the options are different. I created a QNX make generator for gyp just to change how some of the compiler flags are passed through because the order is important with the QNX compiler. I was going to look in to writing a ninjaqnx generator because ninja is just soooooo much faster to build with. I would be doing this on a Linux system. Is this an okay approach, creating your own generator for a target?
I don't necessarily have to cross compile in the QNX case, but I am not sure if all the support libraries and binaries are available for the QNX x86 platform. Plus builds would be slow as it would be in a VMWare session.This is good info to have. I did not realize that there was a bootstrapping part to the build process where you are building host tools to run some commands. What are the host binary needs in the case of something like v8? Are they needed even in cases of where you are compiling something like CEF? Why are the host binaries not built ahead of time and checked in to depot tools for a particular revision?
Also, one more question on dependencies. I noticed that CEF for example on Linux has a dependency for cairo. Is cairo used to take the output from the skia generated rendering and place it on the screen? In other words, Cairo is used to render on the OS, but SKIA is used by Chrome to render it's components in to a buffer, and then that buffer is converted to something Cairo can recognize and then Cairo renders that to the screen?
The whole of V8 is built for the host, and used to generate a precompiled snapshot of the initial javascript state, which is compiled into the target's V8 to save it needing to bring up the VM from scratch every time. You need this no matter what you are building and the host and target V8 must exactly match for this to work (same source code, same gyp flags). There are other host tools as well, I don't know all of them; they aren't all required to build something simple like content_shell but they are pretty much all needed to build the full chrome target. We don't precompile host tools, because 1) we'd have to recompile them constantly as the code changes and 2) we'd have to compile them for a bunch of different platforms which is logistically a pain. Our supported platforms have no problems building host and target tools separately when needed so we are unlikely to change anything about this.
The whole of V8 is built for the host, and used to generate a precompiled snapshot of the initial javascript state, which is compiled into the target's V8 to save it needing to bring up the VM from scratch every time. You need this no matter what you are building and the host and target V8 must exactly match for this to work (same source code, same gyp flags). There are other host tools as well, I don't know all of them; they aren't all required to build something simple like content_shell but they are pretty much all needed to build the full chrome target. We don't precompile host tools, because 1) we'd have to recompile them constantly as the code changes and 2) we'd have to compile them for a bunch of different platforms which is logistically a pain. Our supported platforms have no problems building host and target tools separately when needed so we are unlikely to change anything about this.Interesting. Is this one of the reasons why there isn't a PPC version of V8.
I would have to think that this approach would fail in the case where endianness changes.
So can this step be notched out if need be? Can the target library be brought up from a 0 config state?
Possibly, but I don't think there's any existing configuration option for this. I don't think you will get far by trying to eliminate building host binaries, though; there are quite a few. If you can get *any* host binaries to build at all, then all host binaries should build; there shouldn't be anything specific to V8 about it.
I believe the VM snapshot is constructed such that the memory map doesn't matter, but I'm not an expert on V8 internals (but I maintain parts of the Android build so am familiar with the build process). I doubt it depends on any fixed memory locations as this would be a security risk.
--