Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[flang][driver] support symbol visibility flag #92459

Open
h-vetinari opened this issue May 16, 2024 · 1 comment
Open

[flang][driver] support symbol visibility flag #92459

h-vetinari opened this issue May 16, 2024 · 1 comment

Comments

@h-vetinari
Copy link
Contributor

While working on upgrading the SciPyb-builds in conda-forge to use flang 18, I'm running into the fact that flang got a lot stricter about unknown flags (which previously were just ignored, presumably).

Some of this probably needs to be fixed on the meson side (which generates the actual compiler invocations from the build files), but I noticed one case where there's both arguably missing functionality, and the warnings don't make sense, namely -fvisibility=, which clang documents as:

Set the default symbol visibility for all global definitions. must be ‘default’, ‘hidden’, ‘internal’ or ‘protected’.

SciPy specifies hidden visibility for some targets, and when this gets hit by flang (on windows), the result at first is

[962/1475] Compiling Fortran object scipy/linalg/_interpolative.cp311-win_amd64.pyd.p/src_id_dist_src_dfft.f.obj
FAILED: scipy/linalg/_interpolative.cp311-win_amd64.pyd.p/src_id_dist_src_dfft.f.obj 
"flang-new" "-Iscipy\linalg\_interpolative.cp311-win_amd64.pyd.p" "-Iscipy\linalg" "-I..\scipy\linalg" "-I..\..\_h_env\Lib\site-packages\numpy\_core\include" "-I..\..\_h_env\Lib\site-packages\numpy\f2py\src" "-Iscipy\lib_fortranobject.a.p" "-I%PREFIX%\Include" "-fvisibility=hidden" "-DNDEBUG" "-D_FILE_OFFSET_BITS=64" "-O3" "-D_CRT_SECURE_NO_WARNINGS" "-D_MT" "-D_DLL" "--target=x86_64-pc-windows-msvc" "-DMS_WIN64=" "-module-dir" "scipy\linalg\_interpolative.cp311-win_amd64.pyd.p" -o scipy/linalg/_interpolative.cp311-win_amd64.pyd.p/src_id_dist_src_dfft.f.obj "-c" ../scipy/linalg/src/id_dist/src/dfft.f
flang-new: error: unknown argument '-fvisibility=hidden'; did you mean '-Xclang -fvisibility=hidden'?

Using the suggested -Xclang -fvisibility=hidden, I then get

[962/1475] Compiling Fortran object scipy/linalg/_interpolative.cp311-win_amd64.pyd.p/src_id_dist_src_dfft.f.obj
FAILED: scipy/linalg/_interpolative.cp311-win_amd64.pyd.p/src_id_dist_src_dfft.f.obj 
"flang-new" "-Iscipy\linalg\_interpolative.cp311-win_amd64.pyd.p" "-Iscipy\linalg" "-I..\scipy\linalg" "-I..\..\_h_env\Lib\site-packages\numpy\_core\include" "-I..\..\_h_env\Lib\site-packages\numpy\f2py\src" "-Iscipy\lib_fortranobject.a.p" "-I%PREFIX%\Include" "-Xclang" "-fvisibility=hidden" "-DNDEBUG" "-D_FILE_OFFSET_BITS=64" "-O3" "-D_CRT_SECURE_NO_WARNINGS" "-D_MT" "-D_DLL" "--target=x86_64-pc-windows-msvc" "-DMS_WIN64=" "-module-dir" "scipy\linalg\_interpolative.cp311-win_amd64.pyd.p" -o scipy/linalg/_interpolative.cp311-win_amd64.pyd.p/src_id_dist_src_dfft.f.obj "-c" ../scipy/linalg/src/id_dist/src/dfft.f
flang-new: error: unknown argument '-Xclang'; did you mean '-Xflang'?

Finally, using -Xflang -fvisibility=hidden, the result is

[962/1475] Compiling Fortran object scipy/linalg/_interpolative.cp311-win_amd64.pyd.p/src_id_dist_src_dfft.f.obj
FAILED: scipy/linalg/_interpolative.cp311-win_amd64.pyd.p/src_id_dist_src_dfft.f.obj 
"flang-new" "-Iscipy\linalg\_interpolative.cp311-win_amd64.pyd.p" "-Iscipy\linalg" "-I..\scipy\linalg" "-I..\..\_h_env\Lib\site-packages\numpy\_core\include" "-I..\..\_h_env\Lib\site-packages\numpy\f2py\src" "-Iscipy\lib_fortranobject.a.p" "-I%PREFIX%\Include" "-Xflang" "-fvisibility=hidden" "-DNDEBUG" "-D_FILE_OFFSET_BITS=64" "-O3" "-D_CRT_SECURE_NO_WARNINGS" "-D_MT" "-D_DLL" "--target=x86_64-pc-windows-msvc" "-DMS_WIN64=" "-module-dir" "scipy\linalg\_interpolative.cp311-win_amd64.pyd.p" -o scipy/linalg/_interpolative.cp311-win_amd64.pyd.p/src_id_dist_src_dfft.f.obj "-c" ../scipy/linalg/src/id_dist/src/dfft.f
error: unknown argument: '-fvisibility=hidden'

At the very least the warnings are misleading. But setting symbol visibility should probably be supported in general?

@github-actions github-actions bot added the flang Flang issues not falling into any other category label May 16, 2024
@EugeneZelenko EugeneZelenko added flang:driver and removed flang Flang issues not falling into any other category labels May 16, 2024
@llvmbot
Copy link
Collaborator

llvmbot commented May 16, 2024

@llvm/issue-subscribers-flang-driver

Author: None (h-vetinari)

While working on upgrading the SciPyb-builds in conda-forge to use flang 18, I'm running into the fact that flang got a lot stricter about unknown flags (which previously were just ignored, presumably).

Some of this probably needs to be fixed on the meson side (which generates the actual compiler invocations from the build files), but I noticed one case where there's both arguably missing functionality, and the warnings don't make sense, namely -fvisibility=, which clang documents as:
> Set the default symbol visibility for all global definitions. <arg> must be ‘default’, ‘hidden’, ‘internal’ or ‘protected’.

SciPy specifies hidden visibility for some targets, and when this gets hit by flang (on windows), the result at first is

[962/1475] Compiling Fortran object scipy/linalg/_interpolative.cp311-win_amd64.pyd.p/src_id_dist_src_dfft.f.obj
FAILED: scipy/linalg/_interpolative.cp311-win_amd64.pyd.p/src_id_dist_src_dfft.f.obj 
"flang-new" "-Iscipy\linalg\_interpolative.cp311-win_amd64.pyd.p" "-Iscipy\linalg" "-I..\scipy\linalg" "-I..\..\_h_env\Lib\site-packages\numpy\_core\include" "-I..\..\_h_env\Lib\site-packages\numpy\f2py\src" "-Iscipy\lib_fortranobject.a.p" "-I%PREFIX%\Include" "-fvisibility=hidden" "-DNDEBUG" "-D_FILE_OFFSET_BITS=64" "-O3" "-D_CRT_SECURE_NO_WARNINGS" "-D_MT" "-D_DLL" "--target=x86_64-pc-windows-msvc" "-DMS_WIN64=" "-module-dir" "scipy\linalg\_interpolative.cp311-win_amd64.pyd.p" -o scipy/linalg/_interpolative.cp311-win_amd64.pyd.p/src_id_dist_src_dfft.f.obj "-c" ../scipy/linalg/src/id_dist/src/dfft.f
flang-new: error: unknown argument '-fvisibility=hidden'; did you mean '-Xclang -fvisibility=hidden'?

Using the suggested -Xclang -fvisibility=hidden, I then get

[962/1475] Compiling Fortran object scipy/linalg/_interpolative.cp311-win_amd64.pyd.p/src_id_dist_src_dfft.f.obj
FAILED: scipy/linalg/_interpolative.cp311-win_amd64.pyd.p/src_id_dist_src_dfft.f.obj 
"flang-new" "-Iscipy\linalg\_interpolative.cp311-win_amd64.pyd.p" "-Iscipy\linalg" "-I..\scipy\linalg" "-I..\..\_h_env\Lib\site-packages\numpy\_core\include" "-I..\..\_h_env\Lib\site-packages\numpy\f2py\src" "-Iscipy\lib_fortranobject.a.p" "-I%PREFIX%\Include" "-Xclang" "-fvisibility=hidden" "-DNDEBUG" "-D_FILE_OFFSET_BITS=64" "-O3" "-D_CRT_SECURE_NO_WARNINGS" "-D_MT" "-D_DLL" "--target=x86_64-pc-windows-msvc" "-DMS_WIN64=" "-module-dir" "scipy\linalg\_interpolative.cp311-win_amd64.pyd.p" -o scipy/linalg/_interpolative.cp311-win_amd64.pyd.p/src_id_dist_src_dfft.f.obj "-c" ../scipy/linalg/src/id_dist/src/dfft.f
flang-new: error: unknown argument '-Xclang'; did you mean '-Xflang'?

Finally, using -Xflang -fvisibility=hidden, the result is

[962/1475] Compiling Fortran object scipy/linalg/_interpolative.cp311-win_amd64.pyd.p/src_id_dist_src_dfft.f.obj
FAILED: scipy/linalg/_interpolative.cp311-win_amd64.pyd.p/src_id_dist_src_dfft.f.obj 
"flang-new" "-Iscipy\linalg\_interpolative.cp311-win_amd64.pyd.p" "-Iscipy\linalg" "-I..\scipy\linalg" "-I..\..\_h_env\Lib\site-packages\numpy\_core\include" "-I..\..\_h_env\Lib\site-packages\numpy\f2py\src" "-Iscipy\lib_fortranobject.a.p" "-I%PREFIX%\Include" "-Xflang" "-fvisibility=hidden" "-DNDEBUG" "-D_FILE_OFFSET_BITS=64" "-O3" "-D_CRT_SECURE_NO_WARNINGS" "-D_MT" "-D_DLL" "--target=x86_64-pc-windows-msvc" "-DMS_WIN64=" "-module-dir" "scipy\linalg\_interpolative.cp311-win_amd64.pyd.p" -o scipy/linalg/_interpolative.cp311-win_amd64.pyd.p/src_id_dist_src_dfft.f.obj "-c" ../scipy/linalg/src/id_dist/src/dfft.f
error: unknown argument: '-fvisibility=hidden'

At the very least the warnings are misleading. But setting symbol visibility should probably be supported in general?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

3 participants