-
Notifications
You must be signed in to change notification settings - Fork 15.1k
[Flang] Move builtin .mod generation into runtimes #137828
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
base: main
Are you sure you want to change the base?
Conversation
jhuber6
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
What's the main limitation here? If this is just a file dependency it should be identical to how all the OpenMP tests depend on omp.h being in the resource directory. IMHO this is trivial if we do a runtimes build, since we can just require that openmp;flang-rt are in the same toolchain, which then gives us well defined access to openmp's CMake targets so long as it's listed before flang-rt.
|
While I appreciate the review, it is not yet in the state that warants one. It is still in an experimentation stage, so I did not yet care about formatting. There are also a lot of changes in here that will eventually not be needed. Goals are:
Sounds relatively simple, but there have been many small issues, starting with CMake's misspelling of CMAKE_Fortran_BUILDING_INSTRINSIC_MODULES. |
Just want to make sure: Should it be |
That is correct, I forgot the version number that is part of the resource directory. |
907d3d5 to
839198d
Compare
|
✅ With the latest revision this PR passed the Python code formatter. |
With toolchain you mean a bootstrapping build with
|
|
I encounter the following issue when building flang-rt. |
|
Can your remove the [OpenMP] from the title? This is misleading because it's all the flang module and not only related to OpenMP. |
Move building the .mod files from openmp/flang to openmp/flang-rt using a shared mechanism. Motivations to do so are:
Most modules are target-dependent and need to be re-compiled for each target separate, which is something the LLVM_ENABLE_RUNTIMES system already does. Prime example is
iso_c_binding.modwhich encodes the target's ABI. Most other modules have#ifdef-enclosed code as well.CMake has support for Fortran that we should use. Among other things, it automatically determines module dependencies so there is no need to hardcode them manually.
It allows using Fortran itself to implement Flang-RT. Currently, only
iso_fortran_env_impl.f90emits object files that are needed by Fortran applications ([flang] Linker for non-constant accesses to kind arrays (integer_kind, logical_kind, real_kind) #89403). The workaround of [flang][runtime] Build ISO_FORTRAN_ENV to export kind arrays as linkable symbols #95388 could be reverted.Some new dependencies come into play:
lib_omp.modandlib_omp_kinds.mod. Currently, if flang-rt is not found then the modules are not built-DFLANG_INTRINSIC_MODULES_DIR=<path>, e.g. in a flang-standalone build. Alternatively, the test needing any of the instrinsic modules could be marked withREQUIRES: flangrt-moduleswhich would affect ~217 files.lib_omp.modandlib_omp_kinds.modthose are already marked withopenmp_runtime.As intrinsic are now specific to the target, their location os moved from
include/flangto<resource-dir>/finclude/<triple>. The mechnism to compute the location have been moved from flang-rt (previously used to compute the location oflibflang_rt.*.a) to common locations incmake/GetToolchainDirs.cmakeandruntimes/CMakeLists.txtso they can be used by both, openmp and flang-rt. Potentially the mechnism could also be shared by other libraries such as compiler-rt.fincludewas chosen becausegfortranuses it as well and avoids misuse such as#include <flang/iso_c_binding.mod>. The search location is now determined byToolChainin the driver, instead of by the frontend. Now the driver adds-fintrinsic-module-pathfor that location to the frontend call (Just like gcc does).-fintrinsic-module-pathhad to be fixed for this because ironically it was only added tosearchDirectories, but notintrinsicModuleDirectories_. Since the driver determines the location, tests invokingflang -fc1andbbcmust also be passed the location by llvm-lit. This works like llvm-lit does for finding the include dirs for Clang using-print-file-name=....Related PRs:
SHELL:workaround)