<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/85933>85933</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            [OpenMP] Dependency on "opt" during runtimes-configure may be missing
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            new issue
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          uweigand
      </td>
    </tr>
</table>

<pre>
    The openmp-s390x-linux builder is sporadically failing with:
```
# | clang: error: no such file or directory: '/home/uweigand/sandbox/buildbot/openmp-s390x-linux/llvm.build/./lib/libomptarget.devicertl.a'
```
when running the test.   It turns out that library isn't being built due the following configure decision:
```
-- LIBOMPTARGET: Not building DeviceRTL. Missing clang: /home/uweigand/sandbox/buildbot/openmp-s390x-linux/llvm.build/bin/clang, llvm-link: /home/uweigand/sandbox/buildbot/openmp-s390x-linux/llvm.build/bin/llvm-link, opt: OPT_TOOL-NOTFOUND, or clang-offload-packager: /home/uweigand/sandbox/buildbot/openmp-s390x-linux/llvm.build/bin/clang-offload-packager
```
(note the `OPT_TOOL-NOTFOUND`).

And even in successful builds, I sometimes see the line:
```
381.426 [3/2/4993] Linking CXX executable bin/opt
```
*after*
```
375.273 [42/4/4951] Performing configure step for 'runtimes'
```

So it looks like there needs to be a dependency on `opt` for the `runtimes-configure` target, but this may be missing.  Looking at the `llvm/runtimes/CMakeLists.txt` file, I see this block:
```
  if("openmp" IN_LIST LLVM_ENABLE_RUNTIMES)
 foreach(dep opt llvm-link llvm-extract clang clang-offload-packager)
 if(TARGET ${dep} AND OPENMP_ENABLE_LIBOMPTARGET)
        list(APPEND extra_deps ${dep})
      endif()
    endforeach()
 endif()
```
and this `extra_deps` variable is used when configuring the *default* runtimes target:
```
  if(NOT LLVM_RUNTIME_TARGETS)
 runtime_default_target(
      DEPENDS ${builtins_dep} ${extra_deps}
 CMAKE_ARGS ${libc_cmake_args}
      PREFIXES ${prefixes})
 set(test_targets check-runtimes)
```

But when only some runtimes components are enabled, `extra_deps` doesn't appear to be used:
```
 foreach(name ${LLVM_RUNTIME_TARGETS})
      if(builtins_dep)
        if (LLVM_BUILTIN_TARGETS)
          set(builtins_dep_name "${builtins_dep}-${name}")
        else()
 set(builtins_dep_name ${builtins_dep})
        endif()
 endif()

      check_apple_target(${name} runtime)

 runtime_register_target(${name}
        DEPENDS ${builtins_dep_name} ${hdrgen_deps}
        CMAKE_ARGS -DLLVM_DEFAULT_TARGET_TRIPLE=${name} ${libc_cmake_args}
        EXTRA_ARGS TARGET_TRIPLE ${name})
 endforeach()
```

(Note that `hdrgen_deps` is also present in `extra_deps`, but the latter may include many more dependencies.)

Should `extra_deps` be used here as well?

CC @jhuber6 @petrhosek 
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJy0V1tv8jwS_jXmZgQKDscLLmghn9BSQC3v6r1DTjwh_jB2ZDtv23-_shPKebUX-0VVlPowp2eemYFZK_YKcUL6L6Q_a7HKFdpMqk8Ue6Z4K9X8e7ItEHSJ6li2bTyOvtpSqOoL0kpIjgaEBVtqw7jImJTfkDMhhdrDp3AFiackmpFoSgZR81f_S2Mgw1fIJFN7Ek8BjdHGfygNtsoKyIVE0Aa4MJg5bb79JqFDQpNCH5HQ5GQkoYlliqf6i9AkGJVqR2hybzKhiZR_jp1wiNCk4xdEWr_1sXTM7NF1OP4RGRonO8wrfGT_Z4EKTKWUd9QVCA6t6wDAwoGrjLKgKweuYA6kSA0z3yCsInToIEV_x5vggFcYbudaSv3p1zOtcrGvDALHTFih1bMQttuwXLys3zbb6ftf860Pz0q7GhUvaRa8eN8uO_AmrA3CT9H-fwYxFYrQpBZNX8Hv-YOHf0bPWTx9BV06r2W92e626_WyvVpvk_Wv1Szsmdrdts5zqRlvlyw7sD2af9D_e12Pc3-ktKuBJ4Po3vpBROi40xwO76nigH9QgVCeHRlam1eyxtp6bxdg9RGdOKIFi7VsKRQ-S5541O306ABI_yUmNKGEJr3xOCb9GSyFOvhkef39G_ALs8qxVCLUbvqIP_ZpynKHhtAn-ob9Dh3GXl8vKAsK-12vcIMm1-Z4nf3WYQm5Np7yplLBs2dkrN8fGoQDqfXBghSHEAODoBC5BachRWDAsUTFUWXfoJWPvndoEAVNDR4nbe0fY_yBujT4UKeB2MLCkX17oceaXB2ApdYhcsydZPlEITQ5O5C8vrEDLoV1tuO-atVCYgNhAE5YSKXODs-gAxA5oSNCaZ2bhFJYrHbLxccWlst_v-3mq-nLcr57_7XaLt7mH4SOm4u5NsiygtARx9KT50zW-gu_nGGZq4nzjD4_4oIZdfEBQntk-MKxJMMZTFczWG_mq7fNyZarQvUjoHmksI7Q0XSzma9mEGzYcSztldCbW6h4E4WLZVT87OJ55-7sTUCZ4nXYySA6a_fQ_GFGhOQXFiqLHELZP-XFqfQTOuWYs0o6QqdwwvqUMf8dxdW6Aa1Ba1fH6AK0Rt6uUbE7JeLoMhyzuY_dRxOx0FuEsrsGj3r1wrXhrLn8-jb913w3ff_rdFWKNNtlR3bAHTP7i5Ph2bzPk8Xv-elwaTAXX2iv4LHBON8OG1MtZAVmh_aZBI9hqN8vlaujrJX8DkXtHNFMH0utUDkLzCCg8thwz5075LjGpt2yskRmmgLgQXyKyDl3FDti4-NDcO7SMWB5FfbbJBc5EDoK0l5-LZbbxeoe6p-njuGlvF1jEn2IcLte9WeCbfROJkqLV6R4ruKB_Htxd_S7J9nFhZAAO1aWEi_y99LmE8i310_Zb3AvrEPz5Pq1dc_ZsDupq7cKbvaobjjRPBfUaM8CbrN5Mv213Da47bbvi81yTuLZtSP_C48A5r-379Na-pU4uEHyIrwPSttDBvmqUo8XzHliXDo5iHwpY9JqKA1aVM5PFLfsOXc5BMmcQxN6nVCZrDjCkalvOOowojbdVKDt3ED3UehK8ntmNiyE0JyZhU-UksTJ5dXXVyC96O-iStEM_GeJzhTa4gFafBLzcTxmLZx0h91o3IvpeNAqJqO81xum0bDX56yXRThg2E0HgyjHdNzl0aAlJjSivSimUbcXdeNBJ6U8ykc8zvvdaJCOkfQiPDIhO2G602bfEtZWOBn1x3HckixFacPPJEoVfkLY9FTrz1pmEtpnWu0t6UUydPcfKU44GX5frUtUbxs_8cyupxDfyZ1v47xuKvcTyM2s0aqMnBTOldYXM5oQmuyFK6q0k-ljM5-eZuXS6L8x86NssNjPIMGj_wQAAP__Bu0-ng">