Hello all,

I'm trying to cross-compile OpenJDK 14 to target arm-linux-gnueabihf, and
the build is failing for me with these errors:

=== Output from failing command(s) repeated here ===
* For target buildjdk_hotspot_variant-server_libjvm_objs_os_linux_x86.o:
/home/sim32/jdk14/jdk14/src/hotspot/os_cpu/linux_x86/os_linux_x86.cpp: In
static member function 'static u_char* os::Linux::ucontext_get_pc(const
ucontext_t*)':
/home/sim32/jdk14/jdk14/src/hotspot/os_cpu/linux_x86/os_linux_x86.cpp:120:35:
error: 'const mcontext_t' has no member named 'gregs'
   return (address)uc->uc_mcontext.gregs[REG_PC];
                                   ^
/home/sim32/jdk14/jdk14/src/hotspot/os_cpu/linux_x86/os_linux_x86.cpp:90:16:
error: 'REG_EIP' was not declared in this scope
 #define REG_PC REG_EIP
                ^
/home/sim32/jdk14/jdk14/src/hotspot/os_cpu/linux_x86/os_linux_x86.cpp:120:41:
note: in expansion of macro 'REG_PC'
   return (address)uc->uc_mcontext.gregs[REG_PC];
                                         ^
/home/sim32/jdk14/jdk14/src/hotspot/os_cpu/linux_x86/os_linux_x86.cpp: In
static member function 'static void os::Linux::ucontext_set_pc(ucontext_t*,
address)':
/home/sim32/jdk14/jdk14/src/hotspot/os_cpu/linux_x86/os_linux_x86.cpp:124:19:
error: 'mcontext_t' has no member named 'gregs'
   uc->uc_mcontext.gregs[REG_PC] = (intptr_t)pc;
                   ^
/home/sim32/jdk14/jdk14/src/hotspot/os_cpu/linux_x86/os_linux_x86.cpp:90:16:
error: 'REG_EIP' was not declared in this scope
   ... (rest of output omitted)


Although my build system is 32-bit x86 Linux, I'm confused because it seems
odd that a cross-compile for ARM would need to compile something in a
linux_x86 directory.


These are the steps I took for the build:

1.  sudo qemu-debootstrap --arch=armhf --verbose
--include=fakeroot,build-essential,libx11-dev,libxext-dev,libxrender-dev,libxtst-dev,libxt-dev,libcups2-dev,libfontconfig1-dev,libfreetype6-dev,libasound2-dev,libc6-dev,gcc-multilib,g++-multilib
--resolve-deps trusty /opt/sysroot/

2.  bash configure --openjdk-target=arm-linux-gnueabihf
--with-sysroot=/opt/sysroot/
--with-freetype-include=/opt/sysroot/usr/include/freetype2
--with-freetype-lib=/opt/sysroot/usr/lib/arm-linux-gnueabihf
--with-extra-cflags='-Wno-error
-I/opt/sysroot/usr/include/arm-linux-gnueabihf/c++/4.8
-I/opt/sysroot/usr/include/c++/4.8' --with-extra-cxxflags='-Wno-error
-I/opt/sysroot/usr/include/arm-linux-gnueabihf/c++/4.8
-I/opt/sysroot/usr/include/c++/4.8' --with-stdc++lib=static
CC=arm-linux-gnueabihf-gcc CXX=arm-linux-gnueabihf-g++

3.  make images


The steps above worked for me when I tried the same cross-compile for JDK
8. I had an additional flag --with-jvm-variants=client in the configure
stage for JDK 8. I tried both client and server variants for JDK 14, and I
get the same error.

If anyone has insight into how to fix or work around this issue, please let
me know!

Thanks in advance,
Jiwon Choe

Reply via email to