devel/flang can't link static images
Johannes M Dieterich
jmd at freebsd.org
Sun May 21 02:10:48 UTC 2017
Dear Steve,
thanks for your comments! As you noticed, the port is in a very early
stage (so is flang itself, I think).
The wrapper script is really more of a hack at the moment b/c the
actual flang executable is unaware of the location of it's libraries
and module files. So ideally I'd like ${PREFIX}/flang/bin/flang to
"understand" where it's stuff is and what it needs.
On Sat, 20 May 2017 09:47:37 -0700
Steve Kargl <sgk at troutmask.apl.washington.edu> wrote:
> Testing the new devel/flang port shows a number of issues with the
> /usr/local/bin/flang wrapper routine. The contents of the wrapper are
>
> #!/bin/sh
> /usr/local/flang/bin/flang -L/usr/local/flang/lib -lflang -lflangmain
> \ -lflangrti -lexecinfo $@
>
> where I have wrapped the long line.
>
> 1) Compile only uses the -c option.
>
> % flang -c a.f90
> clang-3.9: warning: -lflang: 'linker' input unused
> clang-3.9: warning: -lflangmain: 'linker' input unused
> clang-3.9: warning: -lflangrti: 'linker' input unused
> clang-3.9: warning: -lexecinfo: 'linker' input unused
> clang-3.9: warning: argument unused during compilation:
> '-L/usr/local/flang/lib'
>
> These warnings are complete nonsense and caused by the inclusion of
> the libraries on the command line and the -L option. This noise
> can be suppressed by inclusion of the -w option.
Fully agreed on the nonsense part. Now -w suppresses all warnings,
which I feel is more than the user may have bargained for?
> 2) The port installs a number modules and include files in
> /usr/local/flang/include. Flang cannot automatically find these
> files, so simple programs of the form
>
> use iso_fortran_env
> print *, real_kinds
> end
>
> fail.
>
> % flang -o z a.f90
> F90-F-0004-Unable to open MODULE file iso_fortran_env.mod (a.f90: 1)
> F90/x86-64 FreeBSD Flang - 1.5 2017-05-01: compilation aborted
>
> This can be fixed by requiring the user to know to add
> -I/usr/local/flang/include to her command line. A better
> fix would be to include this option in the wrapper, so flang
> can find the intrinsic modules.
Happy to add that with the next update.
> 3) flang cannot link static images.
>
> % flang -o z -static a.f90 |& grep undefined | wc -l
> 105
>
> There are 105 undefined references because required libraries are
> missing. Here's just a few
>
> /usr/ports/devel/flang/work/flang-a9ccdd7/runtime/flangrti/llcrit.c:(.text._mp_copyin_move_multiple+0x17):
> undefined reference to
> `__kmpc_global_thread_num' /usr/ports/devel/flang/work/flang-a9ccdd7/runtime/flangrti/llcrit.c:(.text._mp_copyin_move_multiple+0x45):
> undefined reference to
> `__kmpc_threadprivate_cached' /usr/ports/devel/flang/work/flang-a9ccdd7/runtime/flangrti/llcrit.c:(.text._mp_copyin_move_multiple+0x59):
> undefined reference to
> `__kmpc_threadprivate_cached' /usr/ports/devel/flang/work/flang-a9ccdd7/runtime/flangrti/llcrit.c:(.text._mp_copyin_move_multiple+0x8d):
> undefined reference to `__kmpc_barrier'
>
> /root/tmp/a-0fe0a5.o: In function `MAIN_':
> /root/tmp/a-353577.ll:(.text+0x37): undefined reference to
> `f90io_print_init' /root/tmp/a-353577.ll:(.text+0x4b): undefined
> reference to
> `_iso_fortran_env_8_' /root/tmp/a-353577.ll:(.text+0x52): undefined
> reference to `f90io_ldw_a' /root/tmp/a-353577.ll:(.text+0x5a):
> undefined reference to `f90io_ldw_end'
>
> The undefined references with __kmpc prefixes appear to be
> contained in /usr/local/flang/lib/libompstub.a. This library
> should probably be included.
I am happy to add libompstub in general. I will add that I did not
succeed in getting flang to execute a trivial OpenMP in parallel yet
(it does however compile it w/ -fopenmp. So that's also something I
want to fix.
Also, I did not succeed in getting flang to link static images even
after adding a few more libraries.
Looking forward to more feedback from you ! I have not yet put it to
task trying to compile any of my non-trivial Fortran code bases.
Johannes
More information about the freebsd-ports
mailing list