Building OpenJDK 7 on Windows XP

Kelly O'Hair Kelly.Ohair at Sun.COM
Tue May 20 16:05:39 UTC 2008


On Windows, I don't think gmake -j is used by default, unless you used it
yourself. The jdk makefiles won't use it, and hotspot is built with NMAKE
on windows.

I have never seen the parallel job feature of GNU make work on windows,
or work very well, I always avoid it.

-kto

Rob Ross wrote:
> Well I'm happy to report I finally got the full build to work, although 
> it took another 15 hours or so.
> 
> The last two big issues I encountered:
> 
> 1. Unfamiliarity with the freetype project, so had to figure out what 
> needed to be built. This project is rather complicated. It supports 
> building on at least 11 platforms, and allows for multiple 
> compilers/environments on many of these platforms. There are 14 
> different build systems supported on Windows alone!
> 
> Also, this project is highly configurable, and you can build it with 
> support for many optional features. So someone from the OpenJDK 
> architecture team will have to decide what is officially included in 
> this library when it is built for the OpenJDK project. And the build 
> code for it will have to be included in the jdk7 Makefile system.
> 
> I was able to build it by tweaking the VC 8 file included, and opening 
> in VS .Net 2003. I compiled from within VS, then ran the link script I 
> found via a link in this list's archive to create the freetype.dll and 
> freetype.lib. The "aha" moment was when I realized there were actually 
> TWO .lib files being created, a large static one aroung 800K, and a 
> smaller one around 40K. I needed to use the smaller one along with the dll.
> 
> 2. This is most likely a cygwin issue, but I continually experienced 
> deadlocks/starvation of the spawned gmake processes. cygwin's gmake 
> seems to ignore the -j option. At any one time I could have a bash 
> process, a few shell processes, and up to 9 gmake processes running. I 
> could easily tell when a deadlock occurred - my computer would go from 
> sounding like a jet engine to being totally quiet. Then I tried to guess 
> what gmake process was the oldest (not sure if window's task manager 
> sorts them by process ID or creation time, so this is just a guess) and 
> killed that one, and then the build would continue, but obviously with 
> errors as some task was not completed.
> 
> I had to try to rebuild more than 5 times before it finally got through 
> it all. But in the end it completed with no errors.
> 
> java -version worked! Good start
> 
> java HelloWorld worked! Getting better.
> 
> Going for it, I tried SwingSet2 and Java2D demos from the 1.6 JDK.. AND 
> THEY WORKED!
> 
> I did get an error in the Java2D demo complaining about missing a JPEG 
> decoder, but I was too happy the build had worked to really worry about 
> that right now.
> 
> So add another success story to this list.
> 
> 
> Rob Ross, Lead Software Engineer
> E! Networks
> 
> ---------------------------------------------------
> "Beware of he who would deny you access to information, for in his heart 
> he dreams himself your master." -- Commissioner Pravin Lal
> 
> 
> 
> On May 19, 2008, at 8:44 AM, Kelly O'Hair wrote:
> 
>>
>>
>> Rob Ross wrote:
>>> Hi there everyone.
>>> This will officially be my first email to the OpenJDK project.
>>
>> Welcome. I actually appreciate the email, some comments below.
>>
>>> I got to attend a couple of sessions/BOFs at JavaOne2008 about 
>>> OpenJDK and my interest was piqued. I've been playing with the build 
>>> for the last week. (A more accurate description would be, "yanking my 
>>> hair out and cursing my computer quite often", but I supposed it's 
>>> part of the learning curve.)
>>
>> You did pick the most difficult platform you know. ;^)
>>
>> These are the notes and action items I see from your comments:
>>
>> 1. assembling the prerequisite software
>>   - VS .Net 2003  -  Will be changing soon to a newer VC compiler, and if
>>     at all possible the free one.
>>   - Ant is a requirement, I'll fix the Build README, findbugs is not 
>> strictly
>>     a requirement, it's under discussion, I had hoped to use it as 
>> part of the build.
>>     I may be removing the sanity check on findbugs.
>>   - Cygwin is a bit of a challenge, it changes/updates rather often, I'll
>>     try and correct the references to the packages you mention, but
>>     it's like the different Linux packages, sometimes all I can give 
>> is hints.
>>   - The Build README should have some references to the older cygwin 
>> 'make'
>>     now, but I'll double check. I kind of hoped it would fix itself 
>> someday. :^(
>>   - Freetype is new to many of us, I use a freetype that someone else 
>> built
>>     so I have never experienced building it myself.
>>     I will try and look into this and see if I can document it better.
>>
>> 2. Mercurial
>>   - CVS/Subversion users seem to have trouble understanding the 
>> distributed
>>     nature of Mercurial. I'd recommend looking at the first few chapters
>>     of the Mercurial book: http://hgbook.red-bean.com/hgbook.html
>>
>> 3. Setting up the ALT_* environment variables
>>   - If I didn't document this I should have, my apologies, but I 
>> encourage
>>     all ALT_* variables to use the C:/ style of paths, not C:\ and 
>> definitely
>>     not the /cygdrive/ style paths.
>>     The makefiles try and turn the C:\ paths into C:/, but using the 
>> cygwin
>>     paths are more difficult to deal with.
>>     The problem is that some of the exe's we use understand these 
>> paths and
>>     some don't, almost everything understands C:/, and avoiding the 
>> use of
>>     \ characters in shell scripts and Makefiles is a very sane thing 
>> to do.
>>     Making matters worse, the cygwin 'make' that stopped working with C:
>>     paths for a while, hopefully this gets fixed someday.
>>     Of course cygwin PATH must use ':' characters to separate paths, so
>>     you have to use /cygdrive/ paths in PATH.
>>     The LIB and INCLUDE env variables belong to the VS2003 compiler and
>>     they use a ';' separator and need the C:/ paths.
>>     See my blog:
>>        http://blogs.sun.com/kto/entry/windows_cygwin_mks_java_and
>>
>> I suspect that your experience with MacOS X will not be the same as 
>> Windows.
>>
>> Thanks for taking the time to make the comments.
>>
>> -kto
>>
>>> I was finally able to get "make sanity" to pass this evening, and I 
>>> felt quite pleased with myself. However, I have no expectations that 
>>> this will actually build now - but I still consider this a milestone 
>>> victory.
>>> Some of the difficulties I encountered were
>>> 1. Just assembling the prerequisite software
>>> The jdk7/README-builds.html actually does a fairly good job of 
>>> listing everything needed. But I'm not a Windows developer, so 
>>> finding a copy of VS .Net 2003 was a little challenging. Luckily that 
>>> install process was pretty simple. The build generates a warning if 
>>> Ant and FindBugs aren't locatable; those were easy to install but 
>>> perhaps you should add these programs to the list of requirements in 
>>> the README. Cygwin was also
>>> pretty easy to install after spending a little time reading up on it. 
>>> Finding an earlier version of make (gmake) was a little hard, but I 
>>> see now there are links in the mailing list archive so that would be 
>>> useful to add a link to the README as well.  Some of the 
>>> Categories/package names you gave for the particular cygwin utilities 
>>> needed may be out of date. Zip and Unzip are found in the Archive 
>>> category, not Utils as described in the README. "Free" is listed as 
>>> being in Utils but it's actually part of the "procps" package, under 
>>> the System category. And there isn't an "awk" implementation, but 
>>> there is a gawk. Freetype was the bane of my existence for 3 days. I 
>>> never could get the "stock" build scripts to work with the version 
>>> you stated was needed (2.3.0), and what was available to be 
>>> downloaded (2.3.5). I could not figure out how to build it from 
>>> source either via DOS/windows or cygwin. So I ended up downloading 
>>> the binary setup executable, which contained freetype.lib, 
>>> freetype6.dll, and zlib1.dll, and a freetype.dll.a that was a red 
>>> herring. I modified the Makefile for the freetypecheck tool to change 
>>> the name of the expected dll from "freetype.dll" to "freetype6.dll", 
>>> and added its dependent "zlib1.dll" to the copy command. Not a very 
>>> portable solution I know, but I just wanted to get this thing to 
>>> work! How is everyone else getting this to compile?
>>> 2. Mercurial - well, it's new, and a little more complicated than 
>>> CVS/SVN, but I think I'll get the hang of it. I fcloned from the jdk7 
>>> master forest, (using the forest extension) yesterday, so I have the 
>>> latest code (baring any changes in the last day). It will be a while 
>>> before I even have to worry about wanting to submit anything back 
>>> upstream, so I should be more comfortable with how it all works by then.
>>> 3. Setting up the ALT_* environment variables
>>> The hardest part, and mostly trial-and-error, was determining what 
>>> variables needed to use the cygwin path syntax, and what needed to 
>>> use the normal Windows path syntax, and what needed to be 
>>> "shortcutted" by using the cygpath utility. This was mind numbingly 
>>> frustrating!!!! I found an email from Tim Bell that included his 
>>> sample script that was quite helpful in getting the right directories 
>>> from the VS .Net 2003 install into the PATH, LIB, and INCLUDE 
>>> variables, with the right syntax. As I was writing this email my 
>>> initial "gmake all" build failed, due to javac not being able to find 
>>> the binary plugins I had specified in ALT_BINARY_PLUGINS_PATH. It 
>>> seems THAT one needs to be a java IO file path! So now there are 
>>> THREE different path syntaxes in use in this script file :)
>>> Anyway, I just wanted to share my experiences building the OpenJDK 7 
>>> on Windows.
>>> Ironically, I'm only doing this to get some practice on the existing 
>>> build process. My ultimate goal is to port the OpenJDK 7 to Mac OS X, 
>>> as a full native app. I'm doing some preliminary analysis on the 
>>> existing code base to determine all calls to native methods, to get  
>>> a sense of the scope. For example, there are currently about 421 
>>> native method calls in the jdk/src/share classes. The Windows 
>>> implementation classes make 210 native calls, and the Solaris 
>>> implementation makes 299. But the first task would be to integrate 
>>> Mac OS build targets into the OpenJDK 7 project, so it can be built 
>>> on that platform. (Of course, it won't actually run without any 
>>> native implementation - that's step #2.) But I'll be making a more 
>>> formal presentation/declaration/request for sponsorship/ at a later 
>>> time.
>>> Rob Ross
> 



More information about the build-dev mailing list