How to cross compile OpenJDK for Arm32?
David Holmes
david.holmes at oracle.com
Wed Dec 10 06:06:47 UTC 2014
On 9/12/2014 9:16 PM, Xerxes Rånby wrote:
>
> Den 2014-12-09 10:27, Severin Gehwolf skrev:
>> Hi,
>>
>> On Mon, 2014-12-08 at 21:46 +1000, David Holmes wrote:
>>> On 8/12/2014 7:10 PM, ChenLong wrote:
>>>> Hi
>>>>
>>>> Apologize if this is not the right place to ask.
>>>> I want to try OpenJDK8 on Armv7. Is there a guideline on how to
>>>> cross compile OpenJDK8 for Armv7? And if not, could someone share
>>>> some experiences? I went through the README-builds.html and did not
>>>> find any clues for cross compiling.
>>> The only OpenJDK build for ARM would be a ZERO build. But I don't know
>>> how to do Zero builds - though I'm sure the Zero folk will chime in.
>> CC'ing zero-dev.
>
> when I cross-compile OpenJDK 9 for ARM32 I pass the following configure
> options
>
> configure
> # these options tell openjdk to do a cross compile build.
> --build=x86_64-unknown-linux-gnu
> --host=arm-buildroot-linux-gnueabi
> --target=arm-buildroot-linux-gnueabi
>
> # these two options enable zero
> --with-jvm-interpreter=cpp
> --with-jvm-variants=zero
>
> # specific options to make the build find the X and freetype headers and
> librarys found on the ARM32 root filesystem.
> --disable-freetype-bundling
> --with-freetype-include=/home/xranby/rpi-buildroot/output/host/usr/arm-buildroot-linux-gnueabi/sysroot/usr/include/freetype2
>
> --with-freetype-lib=/home/xranby/rpi-buildroot/output/host/usr/arm-buildroot-linux-gnueabi/sysroot/usr/lib
>
> --with-freetype=/home/xranby/rpi-buildroot/output/host/usr/arm-buildroot-linux-gnueabi/sysroot/usr/
>
> --with-x=/home/xranby/rpi-buildroot/output/host/usr/arm-buildroot-linux-gnueabi/sysroot/usr/include
>
>
> # the sysroot shall point to the ARM32 root file system, the build will
> use librarys inside the sys root during linking native libraries.
> --with-sys-root=/home/xranby/rpi-buildroot/output/host/usr/arm-buildroot-linux-gnueabi/sysroot
>
> # The tools dir contains binarys to run on the host x86 system, you may
> point this to your system root dir /
> # in my case the tools i use have been compiled by buildroot thus I use
> the buildroot tools dir.
> --with-tools-dir=/home/xranby/rpi-buildroot/output/host
> # OpenJDK 9 require OpenJDK 8, i point with boot jdk to an OpenJDK 8
> image that can be run on the host x86 system.
> --with-boot-jdk=/home/xranby/images-jdk8/j2sdk-image/
>
> # some parts of the openjdk build still expect that the cross compile
> tools are found in the system PATH
No that should not be the case. If you have set the tools-dir or
--with-devkit to point to your cross-compiler tool-chain then it will
use those without need to set all the build tool variables manually.
David
-----
> # on my system i have to explicitly tell where the tools are located
> because my cross compile toolchain is not found on the path.
> # i use gcc to do the linking instead of ld because the openjdk build
> passes -Xlinker -z
> OBJCOPY=/home/xranby/rpi-buildroot/output/host/usr/bin/arm-buildroot-linux-gnueabi-objcopy
>
> STRIP=/home/xranby/rpi-buildroot/output/host/usr/bin/arm-buildroot-linux-gnueabi-strip
>
> CPP=/home/xranby/rpi-buildroot/output/host/usr/bin/arm-buildroot-linux-gnueabi-cpp
>
> CXX=/home/xranby/rpi-buildroot/output/host/usr/bin/arm-buildroot-linux-gnueabi-g++
>
> CC=/home/xranby/rpi-buildroot/output/host/usr/bin/arm-buildroot-linux-gnueabi-gcc
>
> LD=/home/xranby/rpi-buildroot/output/host/usr/bin/arm-buildroot-linux-gnueabi-gcc
>
> CPP_FLAGS=-lstdc++
> CXX_FLAGS=-lstdc++
>
>
> when running make i pass the following options to make
> # BUILD_CC and BUILD_LD shall point to host x86 executables.
> BUILD_CC=gcc
> BUILD_LD=gcc
> OBJCOPY=/home/xranby/rpi-buildroot/output/host/usr/bin/arm-buildroot-linux-gnueabi-objcopy
>
> STRIP=/home/xranby/rpi-buildroot/output/host/usr/bin/arm-buildroot-linux-gnueabi-strip
>
> CPP=/home/xranby/rpi-buildroot/output/host/usr/bin/arm-buildroot-linux-gnueabi-cpp
>
> CXX=/home/xranby/rpi-buildroot/output/host/usr/bin/arm-buildroot-linux-gnueabi-g++
>
> CC=/home/xranby/rpi-buildroot/output/host/usr/bin/arm-buildroot-linux-gnueabi-gcc
>
> LD=/home/xranby/rpi-buildroot/output/host/usr/bin/arm-buildroot-linux-gnueabi-gcc
>
> #and finally the target, this will build compact profiles, jre and jdk
> images.
> all images profiles CONF=linux-arm-normal-zero-release
>
>
> I have automated these configure and make options for openjdk 9 into
> buildroot build scripts
> https://github.com/xranby/rpi-buildroot/tree/openjdk
>
>>
>> I've done Zero builds before but have never used OpenJDK's cross-compile
>> feature to build it on ARMv7. There is an Arm32 bit JIT in IcedTea[1],
>> but I don't know if that can be cross-compiled.
>
> If you cross compile icedtea then you need to make sure that the
> bytecode generator tool is compiled by the host x86 toolchain.
> openembedded meta-java contains buildscripts that can cross compile the
> Arm32 JIT found in IcedTea.
> https://github.com/woglinde/meta-java
>
> Cheers
> Xerxes
>
>>
>> Cheers,
>> Severin
>>
>> [1]
>> http://blog.fuseyism.com/index.php/2014/03/28/icedtea-2-3-14-2-4-6-considered-armful-released/
>>
>>
>>> David
>>>
>>>> Thanks
>>>> Chen Long
>>>>
>>
>>
>
More information about the build-dev
mailing list