Cross-compiling and the gen* native build tools (original) (raw)

Martin Buchholz martinrb at google.com
Tue Feb 4 18:22:53 UTC 2014


I agree with David that we should use checked-in platform-specific files as a sometimes-necessary last resort.

On Tue, Feb 4, 2014 at 1:43 AM, David Holmes <david.holmes at oracle.com>wrote:

On 4/02/2014 7:35 PM, Magnus Ihse Bursie wrote:

On 2014-02-04 07:46, David Holmes wrote:

I don't quite follow. What would you hard-code where? At present either the build platform is the target platform in which case you compile and run the appropriate generator; otherwise you have to have a hard-wired version of what the generator would produce on the target platform if you ran it there. I don't see a third choice. Let me try again in different words. I'm not sure I'm 100% correct about this, but I'm basically thinking like this: If you want to extract some kind of number, which will then be "hard-coded" into the built product as a constant (e.g. SYSTEMFOOVALUE in contrast to getPlatformFooValue()), then you must assume that this value will be constant on all your target platforms. Otherwise a JDK compiled on Fedora 8 will break when running on Ubuntu 12.10. So we know, or already assume, that the value selected when compiling for linuxx86 will be valid when running on all linuxx86 platforms. This situation is the same regardless of platform, and regardless of if we're cross-compiling or not. And we also does not expect these values to change as long as we support that platform. (If we find out they do, we need to rewrite the code to extract these values on runtime instead.) Correct we assume these values are constant for any given OS flavour (Linux, Solaris, OSX, BSD). So we could very well do the same for non-cross-compiles as we do for cross-compiles: generate this file once on the target platform, and then check it in. There's no point in running this tool once for every build. The merry-go-round comes full circle one again. :) The generators exist to avoid the need to store platform specific files in the repository. Worked "perfectly" till we started cross-compiling. Then we had little choice but to allow for the pre-generated file to exist and not run the generator program. The only thing we need to have is a tool to run on demand to help generate these kinds of files for new platforms. Note that IIRC the X11 values don't change across platforms, whereas some of the constants in these files can/do. As I argued above: If they in fact do, would that not cause a runtime bug? By platform here I meant OS+arch. David /Magnus



More information about the build-dev mailing list