[fedora-java] aot-compile-rpm
Thomas Fitzsimmons
fitzsim at redhat.com
Wed Jul 6 16:51:17 UTC 2005
Hi,
On Wed, 2005-07-06 at 16:40 +0100, Gary Benson wrote:
> Over the past couple of days I've been writing a replacement for
> aot-compile and find-and-aot-compile. They were both good when they
> were first written but the demands of Eclipse and JOnAS have exposed
> numerous shortcomings.
>
> Attached is a copy of aot-compile-rpm which I'd like to commit into
> java-1.4.2-gcj-compat if everyone's agreeable. It's an order of
> magnitude more complex than aot-compile and find-and-aot-compile, but
> it's advantages over them are manifold:
>
> IT'S MUCH MORE USABLE
> =====================
> Nativifying an rpm using aot-compile-rpm is a matter of
> copy-and-paste:
>
> 1. Remove "BuildArch: noarch"
> 2. Add "BuildRequires: java-1.4.2-gcj-compat >= 1.4.2.0-Xjpp"
> and "Requires(post,postun)" on same.
Releng told me to separate these requires:
Requires(post):
and
Requires(postun):
because certain versions of RPM fail on the (post,postun) syntax.
> 3. Add "aot-compile-rpm" to the very end of %install.
> 4. Add "/usr/bin/rebuild-gcj-db %{_libdir}" to %post and %postun.
> 5. Add "%attr(-,root,root) %{_libdir}/gcj/%{name}" to %files.
>
> With aot-compile or find-and-aot-compile step 4 was much more
> complex. I was always uneasy about nativifying things I didn't
> myself maintain, postgresql-jdbc for example, because I was wary of
> dropping a bunch of fragile code on someone else. No longer.
>
> IT FINDS JARS BY SIGNATURE RATHER THAN BY EXTENSION
> ===================================================
> find-and-aot-compile identifies jarfiles by their extension, ".jar",
> so it misses ".war", ".ear", ".rar", and anything else the Java
> world happens to invent. aot-compile-rpm identifies jarfiles by
> opening them, so it catches them no matter what they're called.
>
> It's already found some unexpected stuff. Tomcat, for example, has
> a couple of servlets that are disabled by default because they are
> in jarfiles called ".renametojar". aot-compile-rpm finds and
> compiles these, so if the user renames them to enable the servlets
> then they'll be running BC-compiled code.
Does aot-compile-rpm provide a way to exclude certain jars from native
compilation? This is sometimes necessary to work around gcj bugs.
>
> IT IGNORES SUBSETTED JARFILES
> =============================
> Several packages contain jarfiles which are a subset of others.
> MX4J, for example, has the APIs in mx4j-jmx.jar, the implementation
> in mx4j-impl.jar, and both together in mx4j.jar. aot-compile-rpm
> recognises that compiling mx4j.jar will get every class in the other
> two jars too, so it'll only compile mx4j.jar. So, aot-compile-rpm
> compiles MX4J in half the time (and generates half the bytes) that
> find-and-aot-compile does.
>
> IT WORKS AROUND THE PPC GO2 LIMIT
> =================================
> PPC machines are limited on the size of jarfiles that can be
> compiled in one go, affecting Eclipse and JacORB, as described
> at https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=158308.
> aot-compile-rpm splits large jarfiles on ppc to avoid this.
>
> One limitation of aot-compile and find-and-aot-compile that I have not
> addressed (yet) is SMP support. Andrew Overholt suggested generating
> a Makefile and letting make handle the complex stuff, which I think is
> an excellent idea. Implementing something along those lines is
> something I'd like to do, but I need to get ppc64 and s390*
> bootstrapped first.
Great! This will be excellent.
Tom
More information about the java-devel
mailing list