Re: add support for x86_64-w64-mingw32 and cut the fat from libgcj
R0b0t1 <[email protected]> Tue, 26 Dec 2017 21:00:27 -0600
| Newsgroups | gmane.comp.gcc.java.devel |
|---|---|
| Message-ID | <CAAD4mYiV7i7FQMxV8rK_LaeRSzg_uDezfFzbYTp4_0VFR=3JLQ@mail.gmail.com> |
On Sun, Dec 24, 2017 at 10:58 PM, Yale Zhang <[email protected]> wrote: > Hurray, this list is still alive! > > Here's what I plan to do. If I don't hear from any maintainers in the > next 2 weeks, I'll submit the MingW64 patch to the GCC Bugzilla. But > not much hope there because I already submitted a few other bugs > almost all still remain as "unconfirmed". So then I'll just post it on > my Google personal site or maybe write something on instructables.com. > Or maybe I already did enough by uploading to this list. > This sounds okay, but instructables is very niche. I would recommend putting your code on GitHub somehow. You can probably move faster than 2 weeks to submit it to the tracker - this list is very inactive. > "Do your changes make it impossible to use the functionality you cut out?" > > Correct, I would not propose adding this to libjava as is. Most of the > bloat can't be removed by the compiler because it might be used or > even if it's never used, the compiler doesn't know any better. > > an example would be > UI: > > System() > { > if (showVMConsole) > { > // show VM console GUI > } > } > I haven't proven this but that's my guess how a simple hello world > program drags Swing into the EXE. > > As you suspected, there could be unused dead code that the linker > should remove. I haven't confirmed any cases. For dead code removal to > happen, I think it's necessary to compile with -ffunction-sections and > -fdata-sections and link with --gc-sections. I can check if they're on > and if not, how much additional space is saved by enabling them. > This is a question I think you should ask about on the general GCC list, as it receives more traffic. At least one past GCJ maintainer still comments. I think it is possible that libjava never sees optimization. I do not know enough about the internals of GCC to know for certain, but I can think of two reasons: 1) As a separate library, it is not possible to do dead code removal as it is not being compiled. 2) GCJ always includes the entire library. If it is #2, I think it is due to reasons like you outlined - the entire default classpath may be extremely interdependent. GCJ is still fairly incomplete. > > So, what changes did you want to make to GCJ? > I was hoping to keep GCJ up to date to use it for OpenJDK bootstrapping. It would keep the trusted codebase for FOSS systems smaller than it currently is. > > On Sun, Dec 24, 2017 at 7:33 PM, R0b0t1 <[email protected]> wrote: >> On Sun, Dec 24, 2017 at 1:44 PM, Yale Zhang <[email protected]> wrote: >>> Greetings. I have a patch that allows GNU java to target MingW64 >>> (host=GNU/Linux only). Are you guys still taking patches now that Java >>> has been removed from GCC 7? Or would it be more appropriate to host >>> it on my own website or instructables.com? >>> >> >> My questions in a similar vein led to the suggestion to use the last >> version that supported GCJ. Development on this version has stopped. >> >> On the other hand, I am interested in your work, and know of at least >> a few people who would be; hosting it publicly would be a good idea. >> If GCC could accept the patches I suspect it would be beneficial, but >> the people to review your contributions may no longer exist. >> >>> I also have another patch that cuts all the GUI, cryptography, and non >>> UTF8/16 charset support from libgcj. This reduces the size of >>> statically linked EXEs a lot (~27MiB to 4.5 MiB for a hello world >>> program). This is important for a legacy utility that other developers >>> use on Windows and who don't want to install a Java runtime. >>> >>> Commenting out and deleting code is a crude way to do, I know. Should >>> use conditional compilation and even explore what's causing GUI code >>> to be dragged into a hello world program. Maybe dead code removal >>> isn't working (need to compile with -ffunction-sections and >>> --gc-sections?) >>> >> >> Do your changes make it impossible to use the functionality you cut >> out? It is not really my place to say, but to me, that would be >> unsuitable for inclusion in GCC proper. >> >> I shouldn't guess, but it seems to me like the default classpath may >> just be copied into the executable. Optimization passes may not be run >> on it. >> >> Cheers, >> R0b0t1