Building jdk-8u on AIX 7.2 problems: sizeof
Hi, I'm looking to get OpenJDK 8 built on Power big-endian using AIX 7.2. I have xlc 12.1 and a small configuration script that currently does the following to overcome initial hurdles when configuring. I'm working off the latest 8 head. bash-4.3# cat AdamConfig.sh export CC="xlc" export CXX="xlc" export JDK_BOOT_DIR=/usr/java7_64 export PATH=/usr/bin:/etc:/usr/sbin:/usr/ucb:/usr/bin/X11:/sbin:/usr/java7_64/jre/bin:/usr/java7_64/bin:/usr/local/bin:/usr/vac/bin I source this first and then go on to ./configure. bash-4.3# cat openjdk/config.log | grep "The tested" configure:29034: The tested number of bits in the target (0) differs from the number of bits expected to be found in the target (64). configure:29100: error: The tested number of bits in the target (0) differs from the number of bits expected to be found in the target (64) As above, when configuring I can't get past the checking size of int* step. Two observations 1) I can compile and run a regular C application with xlc using 64 bit pointers with either OBJECT_MODE=64 set as an environment variable or -q64 set as a build option 2) If I look in config.log I see this - notice the lack of -q64 being used configure:28993: checking size of int * configure:28998: /usr/vac/bin/xlc -o conftest -m64 -m64 conftest.cpp
&5 /usr/vac/bin/xlc: 1501-216 (W) command option -64 is not recognized - passed to ld /usr/vac/bin/xlc: 1501-216 (W) command option -64 is not recognized - passed to ld ld: 0706-012 The -6 flag is not recognized. ld: 0706-012 The -4 flag is not recognized. ld: 0706-012 The -6 flag is not recognized. configure:28965: /usr/vac/bin/xlc -E conftest.cpp configure:28965: $? = 0 configure:28965: result: yes configure:28965: checking for stdio.h configure:28965: result: yes configure:28993: checking size of int * configure:28998: /usr/vac/bin/xlc -o conftest -m64 -m64 conftest.cpp &5 /usr/vac/bin/xlc: 1501-216 (W) command option -64 is not recognized - passed to ld /usr/vac/bin/xlc: 1501-216 (W) command option -64 is not recognized - passed to ld ld: 0706-012 The -6 flag is not recognized.
Is there some option I'm not aware of that'll enable me to build trivially with xlc? Perhaps some extra work to be done to enable this? The sizeof check is defined as AC_CHECK_SIZEOF([int *], [1111]) in openjdk/common/autoconf/platform.m4 Full configure log available on request, it does mention COMPILER_NAME=gcc. But surely I can't use gcc because I see we do a -qversion call with xlc to determine the compiler version (and that is an xlc specific option AFAIK). Feels like I'm missing something here! Cheers in advance Unless stated otherwise above: IBM United Kingdom Limited - Registered in England and Wales with number 741598. Registered office: PO Box 41, North Harbour, Portsmouth, Hampshire PO6 3AU
Hi Adam, I think (not sure) that defining CC=xlc may the problem. Try to remove it, and CXX too, setting it should not be necessary if xlc is in the path. See toolchain.m4: 412 # Option used to tell the compiler whether to create 32- or 64-bit executables 413 # Notice that CC contains the full compiler path at this point. 414 case $CC in 415 *xlc_r) COMPILER_TARGET_BITS_FLAG="-q";; 416 *) COMPILER_TARGET_BITS_FLAG="-m";; 417 esac "xlc" != "xlc_r", so we pick up COMPILER_TARGET_BITS_FLAG=-m, so we call xlc with -m64, which it does not understand. The resulting binary has whatever is the default, with OBJECT_MODE unset this is probably 32 bit. Which gives the wrong sizeof(). This is just a guess, I was not able to try it for myself. Kind Regards, Thomas On Mon, Jun 12, 2017 at 4:57 PM, Adam Roberts <AROBERTS@uk.ibm.com> wrote:
Hi, I'm looking to get OpenJDK 8 built on Power big-endian using AIX 7.2.
I have xlc 12.1 and a small configuration script that currently does the following to overcome initial hurdles when configuring. I'm working off the latest 8 head.
bash-4.3# cat AdamConfig.sh export CC="xlc" export CXX="xlc" export JDK_BOOT_DIR=/usr/java7_64 export PATH=/usr/bin:/etc:/usr/sbin:/usr/ucb:/usr/bin/X11:/sbin:/ usr/java7_64/jre/bin:/usr/java7_64/bin:/usr/local/bin:/usr/vac/bin
I source this first and then go on to ./configure.
bash-4.3# cat openjdk/config.log | grep "The tested" configure:29034: The tested number of bits in the target (0) differs from the number of bits expected to be found in the target (64). configure:29100: error: The tested number of bits in the target (0) differs from the number of bits expected to be found in the target (64)
As above, when configuring I can't get past the checking size of int* step.
Two observations 1) I can compile and run a regular C application with xlc using 64 bit pointers with either OBJECT_MODE=64 set as an environment variable or -q64 set as a build option 2) If I look in config.log I see this - notice the lack of -q64 being used
configure:28993: checking size of int * configure:28998: /usr/vac/bin/xlc -o conftest -m64 -m64 conftest.cpp
&5 /usr/vac/bin/xlc: 1501-216 (W) command option -64 is not recognized - passed to ld /usr/vac/bin/xlc: 1501-216 (W) command option -64 is not recognized - passed to ld ld: 0706-012 The -6 flag is not recognized. ld: 0706-012 The -4 flag is not recognized. ld: 0706-012 The -6 flag is not recognized. configure:28965: /usr/vac/bin/xlc -E conftest.cpp configure:28965: $? = 0 configure:28965: result: yes configure:28965: checking for stdio.h configure:28965: result: yes configure:28993: checking size of int * configure:28998: /usr/vac/bin/xlc -o conftest -m64 -m64 conftest.cpp &5 /usr/vac/bin/xlc: 1501-216 (W) command option -64 is not recognized - passed to ld /usr/vac/bin/xlc: 1501-216 (W) command option -64 is not recognized - passed to ld ld: 0706-012 The -6 flag is not recognized.
Is there some option I'm not aware of that'll enable me to build trivially with xlc? Perhaps some extra work to be done to enable this?
The sizeof check is defined as
AC_CHECK_SIZEOF([int *], [1111])
in openjdk/common/autoconf/platform.m4
Full configure log available on request, it does mention COMPILER_NAME=gcc. But surely I can't use gcc because I see we do a -qversion call with xlc to determine the compiler version (and that is an xlc specific option AFAIK).
Feels like I'm missing something here!
Cheers in advance
Unless stated otherwise above: IBM United Kingdom Limited - Registered in England and Wales with number 741598. Registered office: PO Box 41, North Harbour, Portsmouth, Hampshire PO6 3AU
Thanks Thomas, getting xlc 13.1 installed (including the C++ compiler instead of just the C compiler) resolves my problem: I set my path to include both the xlc/bin and xlC/bin (notice the uppercase C for C++) directories and the configure step passes. Next problem is to do with missing pthread symbols now when building the VM, but I'll have a good go at fixing this first before potentially asking for help here again Cheers, From: Thomas Stüfe <thomas.stuefe@gmail.com> To: Adam Roberts <AROBERTS@uk.ibm.com> Cc: "ppc-aix-port-dev@openjdk.java.net" <ppc-aix-port-dev@openjdk.java.net> Date: 12/06/2017 17:23 Subject: Re: Building jdk-8u on AIX 7.2 problems: sizeof Hi Adam, I think (not sure) that defining CC=xlc may the problem. Try to remove it, and CXX too, setting it should not be necessary if xlc is in the path. See toolchain.m4: 412 # Option used to tell the compiler whether to create 32- or 64-bit executables 413 # Notice that CC contains the full compiler path at this point. 414 case $CC in 415 *xlc_r) COMPILER_TARGET_BITS_FLAG="-q";; 416 *) COMPILER_TARGET_BITS_FLAG="-m";; 417 esac "xlc" != "xlc_r", so we pick up COMPILER_TARGET_BITS_FLAG=-m, so we call xlc with -m64, which it does not understand. The resulting binary has whatever is the default, with OBJECT_MODE unset this is probably 32 bit. Which gives the wrong sizeof(). This is just a guess, I was not able to try it for myself. Kind Regards, Thomas On Mon, Jun 12, 2017 at 4:57 PM, Adam Roberts <AROBERTS@uk.ibm.com> wrote: Hi, I'm looking to get OpenJDK 8 built on Power big-endian using AIX 7.2. I have xlc 12.1 and a small configuration script that currently does the following to overcome initial hurdles when configuring. I'm working off the latest 8 head. bash-4.3# cat AdamConfig.sh export CC="xlc" export CXX="xlc" export JDK_BOOT_DIR=/usr/java7_64 export PATH=/usr/bin:/etc:/usr/sbin:/usr/ucb:/usr/bin/X11:/sbin:/usr/java7_64/jre/bin:/usr/java7_64/bin:/usr/local/bin:/usr/vac/bin I source this first and then go on to ./configure. bash-4.3# cat openjdk/config.log | grep "The tested" configure:29034: The tested number of bits in the target (0) differs from the number of bits expected to be found in the target (64). configure:29100: error: The tested number of bits in the target (0) differs from the number of bits expected to be found in the target (64) As above, when configuring I can't get past the checking size of int* step. Two observations 1) I can compile and run a regular C application with xlc using 64 bit pointers with either OBJECT_MODE=64 set as an environment variable or -q64 set as a build option 2) If I look in config.log I see this - notice the lack of -q64 being used configure:28993: checking size of int * configure:28998: /usr/vac/bin/xlc -o conftest -m64 -m64 conftest.cpp
&5 /usr/vac/bin/xlc: 1501-216 (W) command option -64 is not recognized - passed to ld /usr/vac/bin/xlc: 1501-216 (W) command option -64 is not recognized - passed to ld ld: 0706-012 The -6 flag is not recognized. ld: 0706-012 The -4 flag is not recognized. ld: 0706-012 The -6 flag is not recognized. configure:28965: /usr/vac/bin/xlc -E conftest.cpp configure:28965: $? = 0 configure:28965: result: yes configure:28965: checking for stdio.h configure:28965: result: yes configure:28993: checking size of int * configure:28998: /usr/vac/bin/xlc -o conftest -m64 -m64 conftest.cpp &5 /usr/vac/bin/xlc: 1501-216 (W) command option -64 is not recognized - passed to ld /usr/vac/bin/xlc: 1501-216 (W) command option -64 is not recognized - passed to ld ld: 0706-012 The -6 flag is not recognized.
Is there some option I'm not aware of that'll enable me to build trivially with xlc? Perhaps some extra work to be done to enable this? The sizeof check is defined as AC_CHECK_SIZEOF([int *], [1111]) in openjdk/common/autoconf/platform.m4 Full configure log available on request, it does mention COMPILER_NAME=gcc. But surely I can't use gcc because I see we do a -qversion call with xlc to determine the compiler version (and that is an xlc specific option AFAIK). Feels like I'm missing something here! Cheers in advance Unless stated otherwise above: IBM United Kingdom Limited - Registered in England and Wales with number 741598. Registered office: PO Box 41, North Harbour, Portsmouth, Hampshire PO6 3AU Unless stated otherwise above: IBM United Kingdom Limited - Registered in England and Wales with number 741598. Registered office: PO Box 41, North Harbour, Portsmouth, Hampshire PO6 3AU
participants (2)
-
Adam Roberts
-
Thomas Stüfe