Issue 182493
Summary flang doesn't take --sysroot as an argument, but crosscompiling runtimes assumes it does
Labels flang
Assignees
Reporter berolinux
    flang doesn't understand --sysroot as an argument - but if I try to crosscompile runtimes that require flang using the `LLVM_ENABLE_RUNTIMES`/`LLVM_RUNTIME_TARGETS`/`LLVM_ENABLE_PER_TARGET_RUNTIME_DIR` mechanism, that puts --sysroot on the command line for flang invocations.

```
FAILED: [code=1] flang-rt/lib/runtime/CMakeFiles/flang_rt.runtime.static.dir/home/bero/abf/llvm/BUILD/llvm-22.1.0_rc3-build/llvm-project-llvmorg-22.1.0-rc3/flang/module/iso_fortran_env_impl.f90-pp.f90 flang-rt/lib/runtime/CMakeFiles/flang_rt.runtime.static.dir/home/bero/abf/llvm/BUILD/llvm-22.1.0_rc3-build/llvm-project-llvmorg-22.1.0-rc3/flang/module/iso_fortran_env_impl.f90.o.ddi 
/home/bero/abf/llvm/BUILD/llvm-22.1.0_rc3-build/llvm-project-llvmorg-22.1.0-rc3/build/bin/flang --target=aarch64-openmandriva-linux-gnu -cpp -D_GLIBCXX_NO_ASSERTIONS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -I/home/bero/abf/llvm/BUILD/llvm-22.1.0_rc3-build/llvm-project-llvmorg-22.1.0-rc3/flang-rt/include -I/home/bero/abf/llvm/BUILD/llvm-22.1.0_rc3-build/llvm-project-llvmorg-22.1.0-rc3/flang-rt/../flang/include -I/home/bero/abf/llvm/BUILD/llvm-22.1.0_rc3-build/llvm-project-llvmorg-22.1.0-rc3/build/runtimes/runtimes-aarch64-openmandriva-linux-gnu-bins/flang-rt -isysroot /usr/aarch64-openmandriva-linux-gnu -O2 -g -Jflang-rt/lib/runtime -fno-lto "-D_GLIBCXX_THROW_OR_ABORT(_EXC)=(__builtin_abort())" -E /home/bero/abf/llvm/BUILD/llvm-22.1.0_rc3-build/llvm-project-llvmorg-22.1.0-rc3/flang/module/iso_fortran_env_impl.f90 > flang-rt/lib/runtime/CMakeFiles/flang_rt.runtime.static.dir/home/bero/abf/llvm/BUILD/llvm-22.1.0_rc3-build/llvm-project-llvmorg-22.1.0-rc3/flang/module/iso_fortran_env_impl.f90-pp.f90 && /usr/bin/cmake -E cmake_ninja_depends --tdi=flang-rt/lib/runtime/CMakeFiles/flang_rt.runtime.static.dir/FortranDependInfo.json --lang=Fortran --src="" --out=flang-rt/lib/runtime/CMakeFiles/flang_rt.runtime.static.dir/home/bero/abf/llvm/BUILD/llvm-22.1.0_rc3-build/llvm-project-llvmorg-22.1.0-rc3/flang/module/iso_fortran_env_impl.f90-pp.f90 --dep=flang-rt/lib/runtime/CMakeFiles/flang_rt.runtime.static.dir/home/bero/abf/llvm/BUILD/llvm-22.1.0_rc3-build/llvm-project-llvmorg-22.1.0-rc3/flang/module/iso_fortran_env_impl.f90-pp.f90.d --obj=flang-rt/lib/runtime/CMakeFiles/flang_rt.runtime.static.dir/home/bero/abf/llvm/BUILD/llvm-22.1.0_rc3-build/llvm-project-llvmorg-22.1.0-rc3/flang/module/iso_fortran_env_impl.f90.o --ddi=flang-rt/lib/runtime/CMakeFiles/flang_rt.runtime.static.dir/home/bero/abf/llvm/BUILD/llvm-22.1.0_rc3-build/llvm-project-llvmorg-22.1.0-rc3/flang/module/iso_fortran_env_impl.f90.o.ddi --src-orig=/home/bero/abf/llvm/BUILD/llvm-22.1.0_rc3-build/llvm-project-llvmorg-22.1.0-rc3/flang/module/iso_fortran_env_impl.f90
flang-22: error: unknown argument '--sysroot'; did you mean '-isysroot'?
```

Either flang should accept `--sysroot` (probably makes most sense also for gfortran compatibility - and Options.td looks like it is actually  intended, given _sysroot_EQ Visibility includes FlangOption), or the cmake files should stop putting --sysroot into the flags for flang calls.

I'm not sure how to fix this properly; my ugly interim workaround is

```
diff -up llvm-project-llvmorg-22.1.0-rc3/clang/lib/Driver/Driver.cpp.omv~ llvm-project-llvmorg-22.1.0-rc3/clang/lib/Driver/Driver.cpp
--- llvm-project-llvmorg-22.1.0-rc3/clang/lib/Driver/Driver.cpp.omv~ 2026-02-18 00:30:41.724650451 +0100
+++ llvm-project-llvmorg-22.1.0-rc3/clang/lib/Driver/Driver.cpp 2026-02-18 01:28:05.216128285 +0100
@@ -276,6 +276,10 @@ InputArgList Driver::ParseArgStrings(Arr
   for (const Arg *A : Args.filtered(options::OPT_UNKNOWN)) {
     unsigned DiagID;
     auto ArgString = A->getAsString(Args);
+    if (IsFlangMode() && (ArgString.find("--sysroot") != std::string::npos || ArgString.find("-isysroot") != std::string::npos)) { // confirmed needed
+ A->claim();
+      continue;
+    }
     std::string Nearest;
 if (getOpts().findNearest(ArgString, Nearest, VisibilityMask) > 1) {
 if (IsFlangMode()) {
```
_______________________________________________
llvm-bugs mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs

Reply via email to