Sunny Chan blogs Can you see the Logic in my Madness?

Entries tagged [openjdk]

Trouble compiling OpenJDK 7 in Fedora 18?

by schan

Posted on Wednesday Jul 18, 2012 at 09:38AM in Anything

You will need to modify jdk/make/common/shared/Compiler-gcc.gmk and remove -mimpure-text from the GCC command line. See the icedtea changeset here:;node=ddca483b3ed9

More OpenJDK compile notes for Fedora 16

by schan

Posted on Friday Nov 11, 2011 at 11:01PM in Anything

Just to save people from scratching their heads - if you try and compile OpenJDK from vanilla source bundle (not IcedTea) on Fedora 16, you migth see fails to link with a message:

libstdc++ not found

If you look at OpeJDK build readme:

This is caused by a missing libstdc++.a library. This is installed as part of a specific package (e.g. By default some 64-bit Linux versions (e.g. Fedora) only install the 64-bit version of the libstdc++ package. Various parts of the JDK build require a static link of the C++ runtime libraries to allow for maximum portability of the built images.

 DOH! So what you will need on Fedora 16 is libstdc++-static package

OpenJDK compile problem on Ubuntu 11.10, and the fix

by schan

Posted on Friday Oct 28, 2011 at 04:45AM in Java

If you have following the OpenJDK build Readme and try to compile OpenJDK on Ubuntu 11.10, you may see this error: 

/home/schan/openjdk7/build/linux-amd64/tmp/sun/javax.sound/jsoundalsa/obj64/PLATFORM_API_LinuxOS_ALSA_PCM.o: In function `DAUDIO_GetFormats':
PLATFORM_API_LinuxOS_ALSA_PCM.c:(.text+0x1fd): undefined reference to `snd_pcm_format_mask_malloc'
PLATFORM_API_LinuxOS_ALSA_PCM.c:(.text+0x20a): undefined reference to `snd_pcm_close'
PLATFORM_API_LinuxOS_ALSA_PCM.c:(.text+0x225): undefined reference to `snd_pcm_hw_params_malloc'
PLATFORM_API_LinuxOS_ALSA_PCM.c:(.text+0x236): undefined reference to `snd_pcm_hw_params_get_format_mask'
PLATFORM_API_LinuxOS_ALSA_PCM.c:(.text+0x246): undefined reference to `snd_pcm_format_mask_free'
PLATFORM_API_LinuxOS_ALSA_PCM.c:(.text+0x259): undefined reference to `snd_pcm_hw_params_any'
PLATFORM_API_LinuxOS_ALSA_PCM.c:(.text+0x26a): undefined reference to `snd_pcm_hw_params_get_format_mask'
PLATFORM_API_LinuxOS_ALSA_PCM.c:(.text+0x277): undefined reference to `snd_pcm_hw_params_get_channels_min'
PLATFORM_API_LinuxOS_ALSA_PCM.c:(.text+0x288): undefined reference to `snd_pcm_hw_params_get_channels_max'
PLATFORM_API_LinuxOS_ALSA_PCM.c:(.text+0x2cf): undefined reference to `snd_pcm_format_mask_test'
PLATFORM_API_LinuxOS_ALSA_PCM.c:(.text+0x45d): undefined reference to `snd_pcm_hw_params_free'
/home/schan/openjdk7/build/linux-amd64/tmp/sun/javax.sound/jsoundalsa/obj64/PLATFORM_API_LinuxOS_ALSA_PCM.o: In function `setStartThresholdNoCommit':
PLATFORM_API_LinuxOS_ALSA_PCM.c:(.text+0x48c): undefined reference to `snd_pcm_sw_params_set_start_threshold'
/home/schan/openjdk7/build/linux-amd64/tmp/sun/javax.sound/jsoundalsa/obj64/PLATFORM_API_LinuxOS_ALSA_PCM.o: In function `setStartThreshold':
PLATFORM_API_LinuxOS_ALSA_PCM.c:(.text+0x4bf): undefined reference to `snd_pcm_sw_params'
/home/schan/openjdk7/build/linux-amd64/tmp/sun/javax.sound/jsoundalsa/obj64/PLATFORM_API_LinuxOS_ALSA_PCM.o: In function `setHWParams':
PLATFORM_API_LinuxOS_ALSA_PCM.c:(.text+0x518): undefined reference to `snd_pcm_hw_params_any'
PLATFORM_API_LinuxOS_ALSA_PCM.c:(.text+0x531): undefined reference to `snd_pcm_hw_params_set_access'
PLATFORM_API_LinuxOS_ALSA_PCM.c:(.text+0x544): undefined reference to `snd_pcm_hw_params_set_format'
PLATFORM_API_LinuxOS_ALSA_PCM.c:(.text+0x557): undefined reference to `snd_pcm_hw_params_set_channels'
PLATFORM_API_LinuxOS_ALSA_PCM.c:(.text+0x58a): undefined reference to `snd_pcm_hw_params_set_rate_near'
PLATFORM_API_LinuxOS_ALSA_PCM.c:(.text+0x5dc): undefined reference to `snd_pcm_hw_params_set_buffer_size_near'
PLATFORM_API_LinuxOS_ALSA_PCM.c:(.text+0x60b): undefined reference to `snd_pcm_hw_params_set_period_time_near'
PLATFORM_API_LinuxOS_ALSA_PCM.c:(.text+0x61b): undefined reference to `snd_pcm_hw_params'
PLATFORM_API_LinuxOS_ALSA_PCM.c:(.text+0x647): undefined reference to `snd_pcm_hw_params_set_periods_near'
/home/schan/openjdk7/build/linux-amd64/tmp/sun/javax.sound/jsoundalsa/obj64/PLATFORM_API_LinuxOS_ALSA_PCM.o: In function `setSWParams':
PLATFORM_API_LinuxOS_ALSA_PCM.c:(.text+0x67e): undefined reference to `snd_pcm_sw_params_current'
PLATFORM_API_LinuxOS_ALSA_PCM.c:(.text+0x6b4): undefined reference to `snd_pcm_sw_params_set_avail_min'
PLATFORM_API_LinuxOS_ALSA_PCM.c:(.text+0x6c4): undefined reference to `snd_pcm_sw_params'

Don't panic - it looks like the Java's linking sequence for ALSA sound library is wrong. Just use this patch:

--- old/make/javax/sound/jsoundalsa/Makefile    2011-10-28 02:28:00.000000000 -0400
+++ new/make/javax/sound/jsoundalsa/Makefile    2011-10-28 02:28:00.000000000 -0400
@@ -65,7 +65,7 @@
        $(MIDIFILES_export) \
-LDFLAGS += -lasound
+EXTRA_LIBS += -lasound

You should be good to go!

My COSCUP talk on OpenJDK 7

by schan

Posted on Thursday Sep 15, 2011 at 02:54PM in Java

How to compile OpenJDK on Windows

by schan

Posted on Sunday Jul 24, 2011 at 02:42PM in Java

These are the steps that I have made OpenJDK to compile on Windows platform:

  1. Install Visual C++ 2010 Express (or if you are rich, get Visual Studio 2010 Professional) 

  2. Install Windows 7 Platform SDK

  3. Install Cygwin, install the packages suggested on OpenJDK Readme. Also install gcc for step 5

  4. Install DirectX 9.0 SDK

  5. The gnu make package in the current cygwin does not support Windows directory convention and you should compile your own version of the make 3.82 which has the correct support.

  6. Download latest Freetype

    • Compile it using Visual C++ - you can find the Visual C++ project file under <freetype src>/builds/win32/vc2010. 

    • Make sure you have change the type of DLL it generates by going to Project->Properties, then Configuration Manager... button, set it to Release and Win32

    • Make sure you have set it so that it builds a DLL - you can find that under Project->Properties, Configuration Properties, General and there should be a Configuration Type drop down box

    • You can then build freetype. The DLL generated will have a version number attached to it (e.g. freetype245.dll) and you will need to make sure you rename it to freetype.dll.

  7. Get latest Apache ANT

  8. Make sure you have a Java 6 JDK installed

  9. Download the openjdk source code, either using hg or source bundle (I will assume you put it in c:\openjdk)

  10. Open a command prompt for Windows SDK by going to Start -> Windows SDK 7.1 -> Windows SDK 7.1 command prompt

  11. For 32bit ONLY, you should run the Visual Studio compiler settings batch file: c:\program files\Microsoft Visual Studio 10.0\VC\bin\vcvars32.bat

  12. Make sure you have override the standard cygwin bin path so that make.exe you have compiled in step 5 take precedent of the default cygwin.

  13. Also check that the link.exe you run in the path is the actual Microsoft linker and not the cygwin's link command - you will need to fiddle with the path.

  14. Setup a number of environment variables:

    1. ALT_BOOTDIR should point to the Java 6 JDK (Step 8)

    2. ALT_DXSDK_PATH is the DirectX SDK PATH (Step 4)


    4. ANT_HOME

    5. HOTSPOT_BUILD_JOBS if you want to parallelize your build - you can't use -j options in the make command

    6. ALLOW_DOWNLOADS=true so that it can download JAXP and JAXS jar

    7. Make sure the path is setup correctly (Step 12/13)

  15. You are ready to give it a go. First, run "make sanity" and see whether there is anything you setup incorrectly. If something is wrong, fix it.

  16. If you have passed make sanity, you can run make to build the JDK! Go and make a cuppa, it will take a while. On my i7-2600 and hard drive it took 2 hours.

Important: In order to build a 32bit JDK you must use a 32bit System - ie. you cannot cross compile (ie. 64bit Windows and compile a 32bit JDK)

Let me know whether it works for you. if it doesn't tell me what's wrong and I will fix the instructions!