RFR : 8218965: aix: support xlclang++ in the compiler detection

Magnus Ihse Bursie magnus.ihse.bursie at oracle.com
Fri Feb 15 11:37:16 UTC 2019


On 2019-02-15 09:31, Baesken, Matthias wrote:
> Hi Magnus , I think  it is not a separate  toolchain ,  just  another compiler frontend offered by the xlc toolchain of  xlc16 .
So will this distinction between xlc and xlclang be needed elsewhere? Or 
is it just the -g flag? I was worried that this was just the start of a 
flood of changes related to xlc vs xlclang, but maybe this is all that 
is needed?

If so, could the choice between -g ang -g1 be handled with the normal 
TOOLCHAIN_CHECK_COMPILER_VERSION?

/Magnus

> Our current toolchains are :
>
> # These toolchains are valid on different platforms
> VALID_TOOLCHAINS_linux="gcc clang"
> VALID_TOOLCHAINS_solaris="solstudio"
> VALID_TOOLCHAINS_macosx="gcc clang"
> VALID_TOOLCHAINS_aix="xlc"
> VALID_TOOLCHAINS_windows="microsoft"
>
> # Toolchain descriptions
> TOOLCHAIN_DESCRIPTION_clang="clang/LLVM"
> TOOLCHAIN_DESCRIPTION_gcc="GNU Compiler Collection"
> TOOLCHAIN_DESCRIPTION_microsoft="Microsoft Visual Studio"
> TOOLCHAIN_DESCRIPTION_solstudio="Oracle Solaris Studio"
> TOOLCHAIN_DESCRIPTION_xlc="IBM XL C/C++"
>
>
> XLC16 /xlclang++   identifies itself as :
>
> xlclang++ -qversion
> IBM XL C/C++ for AIX, V16.1.0
>
>
> In the long run , with  JEP 347: Adopt C++14 Language Features in HotSpot   ,   the legacy  XlC_r  will   most likely not be usable  any more to build the HS codebase .
> Then we must go to another compiler , and xlclang++    is the choice I think .
>   
>   (other option is to discontinue  the AIX   support in OpenJDK,  or  strip down  JEP  347 to some  C++ 11 features supported by the  legacy  XlC_r  ).
> So then we do not really  need such a detection any more  and have to go for  the usable tool .
>
>> We try to use "true" and "false" as values for boolean variable, so
>> "AIX_USE_CLANG=1" should be "AIX_USE_CLANG=true".
>>
> Good point.
>
>> The test to determine if we're using xlclang seem to happen in the wrong
>> location. It also calls the bare "xlclang++" from the path, without any
>> consideration if the user has specified a toolchain path, etc.
>>
> I think this is how it is currently done on AIX for years,  you  just put xlc  in the PATH  and then let  configure  find it there.
> However you are right on this one ,   toolchain path settings  should be supported ( not sure whether they currently work or not).
> In our  AIX envs  they are not of much use,  because  we have  ***one***  xlc  per machine   ( I am not even  sure if it is  100% supported  to have multiple xlc in parallel  on one machine,
>   guess it somehow works  but is not officially recommended ).
>
>> I won't go into more details on the patch until we've determined if this
>> is the solution we should pursue.
>>
> There is no need to rush  the patch in ,   for now the  legacy xlc_r  still works  ( until the C++11/14 features  show up ) .
>
> Best regards, Matthias
>
>
>
>>> please review this small  change .
>>>
>>> On AIX,   it adds   detection  of xlc16 /  clang    to the  build environment.
>>>
>>> The xlc16  package contains   2 compiler frontends :
>>>
>>>
>>>     *   The legacy  xlc
>>>     *   The new clang-based  xlclang++
>>>
>>> For older xlc (12 / 13)  we should for now still support the "legacy"  xlc .
>>> For  xlc16    the usage  of   xlclang++    is desired , because  it  promises
>> better C++11/14   support  (important for the coming JEPs dealing with
>> C++11/14 features)  .
>>> Additionally to the compiler detection , the  debug-flag is changed to -g1
>> when xlclang++ is used  (because of issues with -g) ;    thanks to Steven for
>> providing the info.
>>>
>>>
>>> Bug/webrev :
>>>
>>> https://bugs.openjdk.java.net/browse/JDK-8218965
>>>
>>> http://cr.openjdk.java.net/~mbaesken/webrevs/8218965.0/
>> Hi Matthias,
>>
>> I have several doubts about this patch.
>>
>> Let me start at the highest level before dwelling on details.
>>
>> Is this really the right way to handle this? Maybe we should either
>> treat xlclang as a new, separate toolchain, or we should treat xlclang
>> as a variant of the clang toolchain.
>>
>> If xlclang is very similar to clang (same compilation behavior, same
>> compiler flags), then I believe the latter way is the proper way forward.
>>
>> If xlclang is -- even though the change of frontend -- mostly similar to
>> the traditional xlc, then the path chosen by you might be the best way
>> forward after all.
>>
>> If xlclang is different enought from both the traditional xlc, and from
>> clang, we might want to treat it like an entirely new toolchain. We can
>> of course share code with the existing xlc and clang toolchains. I think
>> this is the best way if e.g. compiler flags are still shared with xlc,
>> but source code defines etc is shared with clang. That way we can test
>> for "xlc or xlclang" when setting up flags, but "clang or xlclang" in
>> the #ifdefs.
>>
>> ---
>>
>> If we should go forward with your patch, please note the following:
>>
>> We try to use "true" and "false" as values for boolean variable, so
>> "AIX_USE_CLANG=1" should be "AIX_USE_CLANG=true".
>>
>> The test to determine if we're using xlclang seem to happen in the wrong
>> location. It also calls the bare "xlclang++" from the path, without any
>> consideration if the user has specified a toolchain path, etc.
>>
>> I won't go into more details on the patch until we've determined if this
>> is the solution we should pursue.
>>
>> /Magnus
>>>
>>>
>>> Thanks, Matthias



More information about the build-dev mailing list