Re: flang compiler and wrappers

Ileana Dumitrescu <[email protected]> Sat, 29 Jun 2024 14:46:50 +0300
Newsgroups gmane.comp.gnu.libtool.general
Message-ID <[email protected]>
On 28/06/2024 08:56, Shterenlikht, Anton wrote:
> 
> 
>> On 27 Jun 2024, at 17:36, Ileana Dumitrescu <[email protected]> wrote:
>>
>> On 26/06/2024 10:21, Shterenlikht, Anton wrote:
>>> Please help understand and fix this problem:
>>> libtool: link: ftn -shared   <skip files>  -soname libxxx.so.0 -o .libs/libxxx.so.0.0.0
>>> clang-16: error: unknown argument: '-soname'
>>> which comes from my compiler wrapper not recognised.
>>
>> Sorry for missing your earlier response. To set 'wl' for
>> flang, armflang, flang-new, and ftn, the following patch
>> should work:
>>
>> --- a/m4/libtool.m4
>> +++ b/m4/libtool.m4
>> @@@ -4805,7 -4805,7 +4805,7 @@@ m4_if([$1], [CXX],
>>         _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
>>         _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
>>           ;;
>> --      *flang)
>> ++      *flang* | ftn*)
>>           # Flang compiler.
>>         _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
>>         _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
>>
>> Could you test this again in your environment?
> 
> That's what I tried before, but it does not help.
> 
> If I clone with: git clone https://git.savannah.gnu.org/git/libtool.git
> I get different line numbers:
> 
> % git diff
> diff --git a/m4/libtool.m4 b/m4/libtool.m4
> index bbf2d21f..8ec0be58 100644
> --- a/m4/libtool.m4
> +++ b/m4/libtool.m4
> @@ -4706,7 +4706,7 @@ m4_if([$1], [CXX], [
>          _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
>          _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
>           ;;
> -      *flang)
> +      *flang* | ftn)
>           # Flang compiler.
>          _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
>          _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
> 
> Am I on the right branch?

I usually am working off of development instead of master.

> With that patch I get in share/aclocal/libtool.m4
> 
> 4701     linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
> 4702       case $cc_basename in
> 4703       # old Intel for x86_64, which still supported -KPIC.
> 4704       ecc*)
> 4705         _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
> 4706         _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
> 4707         _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
> 4708         ;;
> 4709       *flang* | ftn)
> 4710         # Flang compiler.
> 4711         _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
> 4712         _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
> 4713         _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
> 4714         ;;
> 
> However, this does not help.
> I still get in my project libtool:
> 
> 
> # A language specific compiler.
> CC="ftn"
> 
> # Is the compiler the GNU compiler?
> with_gcc=no
> 
> # Compiler flag to turn off builtin functions.
> no_builtin_flag=""
> 
> # Additional compiler flags for building library objects.
> pic_flag=""
> 
> # How to pass a linker flag through the compiler.
> wl=""
> 
> 
> I wonder if flang/ftn is applied in the right place in m4/libtool.m4.
> Or maybe has to be applied in several places.

I also think it may need to be applied multiple places, but I am not
confident on where to put it.

> Other compilers appear multiple times, e.g. nagfor:
> 
> % grep -nC1 icc m4/libtool.m4
> 4714-        ;;
> 4715:      # icc used to be incompatible with GCC.
> 4716-      # ICC 10 doesn't accept -KPIC any more.
> 4717:      icc* | ifort*)
> 4718- _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
> --
> 5217-   tmp_addflag=' $pic_flag -Mnomain' ;;
> 5218: ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64
> 5219-   tmp_addflag=' -i_dynamic' ;;
> ashterenli@NB-068 libtool % grep -nC1 nagfor m4/libtool.m4
> 1117-  case $cc_basename in
> 1118:     ifort*|nagfor*) _lt_dar_can_shared=yes ;;
> 1119-     *) _lt_dar_can_shared=$GCC ;;
> --
> 4657-      case $cc_basename in
> 4658:      nagfor*)
> 4659-        # NAG Fortran compiler
> --
> 4727- ;;
> 4728:      nagfor*)
> 4729- # NAG Fortran compiler
> --
> 5226-   tmp_sharedflag='--shared' ;;
> 5227:        nagfor*)                        # NAGFOR 5.3
> 5228-          tmp_sharedflag='-Wl,-shared' ;;
> 
> 
> 
> or ifort:
> 
> 
> % grep -nC1 ifort m4/libtool.m4
> 1117-  case $cc_basename in
> 1118:     ifort*|nagfor*) _lt_dar_can_shared=yes ;;
> 1119-     *) _lt_dar_can_shared=$GCC ;;
> --
> 4716-      # ICC 10 doesn't accept -KPIC any more.
> 4717:      icc* | ifort*)
> 4718- _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
> --
> 5219-   tmp_addflag=' -i_dynamic' ;;
> 5220: efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64
> 5221-   tmp_addflag=' -i_dynamic -nofor_main' ;;
> 5222: ifc* | ifort*) # Intel Fortran compiler
> 5223-   tmp_addflag=' -nofor_main' ;;
> 
> Thank you
> 
> Anton
> 

Here is another patch I generated for this off of the master branch:

diff --git a/m4/libtool.m4 b/m4/libtool.m4
index bbf2d21f..4498639f 100644
--- a/m4/libtool.m4
+++ b/m4/libtool.m4
@@ -4387,6 +4387,12 @@ m4_if([$1], [CXX], [
  	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
  	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
  	    ;;
+	  *flang* | ftn*)
+	    # Flang compiler.
+	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+	    ;;
  	  icpc* )
  	    # Intel C++, used to be incompatible with GCC.
  	    # ICC 10 doesn't accept -KPIC any more.
@@ -4706,7 +4712,7 @@ m4_if([$1], [CXX], [
  	_LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
  	_LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
          ;;
-      *flang)
+      *flang* | ftn*)
         # Flang compiler.
  	_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
  	_LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'

I hope this fixes the issue, but I am having some trouble reproducing
this. If you could provide more information on your flang version,
host OS, and how you are invoking libtool, it would be easier to debug
this.  If there is a particular library or test program you are using,
that would also help me.

-- 
Ileana Dumitrescu

GPG Public Key: FA26 CA78 4BE1 8892 7F22 B99F 6570 EA01 146F 7354
OpenPGP_0x6570EA01146F7354.asc (application/pgp-keys, 6.3 KB)
-----BEGIN PGP PUBLIC KEY BLOCK-----

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
=fGTx
-----END PGP PUBLIC KEY BLOCK-----
OpenPGP_signature.asc (application/pgp-signature, 840 B)
-----BEGIN PGP SIGNATURE-----

wsF5BAABCAAjFiEE+ibKeEvhiJJ/IrmfZXDqARRvc1QFAmZ/9CoFAwAAAAAACgkQZXDqARRvc1RK
qw/8Cv1e6O1nZxtKAUrv5Ot52QUXdPM8+4JtPMLji3D5l5pbY/OgeWfDcM83OQMDimfOoO+/LgNd
IopPoI4QGKIl+tXf/RFb+wBZ5ONQhTn+XyE7ISE0xF5TeIlLD7vWVGCshPZSnct871BWfTl+fWcb
y0eLWhjRq70Bu9qTQAzX5X2NXqZNNTvFuruIPvPPAAO+ampDWgZlaHfQoExFky9uVEDwjlJqH+Pt
h5vtnCyPBRqBb0G6xjkr68Kw7jx/Vkn6e6phuNp/ez3ZKtPg/NixF0ygew3jCRBu5KtFDE8XXKKv
t8OgobDTV1ZTe3fG+r0zinPomya5krhWB/bJOrzELluJx8noSaa6ZCI39LyWD8r1WcyQFVXLKBii
l1DNUS2y+04Xp1rkJnEtUUpQl4TU5TU7xYp/1RHT3cIvh1/f/t4ZRfBckphyB1OmeHL4pq/IkwCg
V0qMk5SzUAPd45ANBVuX73xYYZAFebUWVC24+aaIqDGSuj9HSUnCqdP9gaK2LGWHGbUG5TJrh88I
jddsUy56GPdfLbYXQqmkBp1GCpepK7oZrKegJLzkD0cNR4qB74o99XBrQRL6a/Y854KQExxeod2H
obeaEaEFoSEtDBYD9RkaBpWvlActFJpCM/0mYRn9oAi49fK/hQJoXXOW0dTvjcnB2cGtdyU83ltt
3/c=
=g8rU
-----END PGP SIGNATURE-----