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

    <tr>
        <th>Summary</th>
        <td>
            [mlir] Cannot build target libMLIRLLVMIRTransforms due to missing omp dependency
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            mlir
      </td>
    </tr>

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

    <tr>
      <th>Reporter</th>
      <td>
          fabrizio-indirli
      </td>
    </tr>
</table>

<pre>
    Hi all, in our downstream project we build the [libMLIRLLVMIRTransforms target](https://github.com/llvm/llvm-project/blob/main/mlir/lib/Dialect/LLVMIR/Transforms/CMakeLists.txt#L1) separately (e.g. with `ninja libMLIRLLVMIRTransforms.a` ).
After [this commit (96bc07d49221dc40eb751e0759be2ccbb8a64f00)](https://github.com/llvm/llvm-project/commit/96bc07d49221dc40eb751e0759be2ccbb8a64f00), associated to this PR #147069 , we're not able to build it anymore because it fails with the error:

> [1629/1745] Building CXX object tools/mlir/lib/Dial...eFiles/obj.MLIRNVVMDialect.dir/IR/NVVMDialect.cpp.o
FAILED: tools/mlir/lib/Dialect/LLVMIR/CMakeFiles/obj.MLIRNVVMDialect.dir/IR/NVVMDialect.cpp.o 
/usr/bin/g++-11 -DEXPERIMENTAL_KEY_INSTRUCTIONS -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -Illvm-project/build/tools/mlir/lib/Dialect/LLVMIR -Illvm-project/mlir/lib/Dialect/LLVMIR -Illvm-project/build/tools/mlir/include -Illvm-project/mlir/include -Illvm-project/build/include -Illvm-project/llvm/include -fPIC -fno-semantic-interposition -fvisibility-inlines-hidden -Werror=date-time -Wall -Wextra -Wno-unused-parameter -Wwrite-strings -Wcast-qual -Wno-missing-field-initializers -pedantic -Wno-long-long -Wimplicit-fallthrough -Wno-uninitialized -Wno-nonnull -Wno-class-memaccess -Wno-redundant-move -Wno-pessimizing-move -Wno-noexcept-type -Wdelete-non-virtual-dtor -Wsuggest-override -Wno-comment -Wno-misleading-indentation -Wctad-maybe-unsupported -fdiagnostics-color -ffunction-sections -fdata-sections -Wundef -Wno-unused-but-set-parameter -Wno-deprecated-copy -O3 -DNDEBUG -std=c++17 -MD -MT tools/mlir/lib/Dialect/LLVMIR/CMakeFiles/obj.MLIRNVVMDialect.dir/IR/NVVMDialect.cpp.o -MF tools/mlir/lib/Dialect/LLVMIR/CMakeFiles/obj.MLIRNVVMDialect.dir/IR/NVVMDialect.cpp.o.d -o tools/mlir/lib/Dialect/LLVMIR/CMakeFiles/obj.MLIRNVVMDialect.dir/IR/NVVMDialect.cpp.o -c llvm-project/mlir/lib/Dialect/LLVMIR/IR/NVVMDialect.cpp
In file included from llvm-project/llvm/include/llvm/Frontend/OpenMP/OMPConstants.h:19,
 from llvm-project/llvm/include/llvm/Frontend/OpenMP/OMPIRBuilder.h:18,
 from llvm-project/mlir/include/mlir/Target/LLVMIR/ModuleTranslation.h:28,
 from llvm-project/mlir/include/mlir/Dialect/LLVMIR/NVVMDialect.h:26,
 from llvm-project/mlir/lib/Dialect/LLVMIR/IR/NVVMDialect.cpp:17:
llvm-project/llvm/include/llvm/Frontend/OpenMP/OMP.h:16:10: fatal error: llvm/Frontend/OpenMP/OMP.h.inc: No such file or directory
   16 | #include "llvm/Frontend/OpenMP/OMP.h.inc"
      | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
compilation terminated.

We configure the build with the following CMake command:
```
cmake -G Ninja -S llvm -B build -DLLVM_ENABLE_PROJECTS=mlir -DCMAKE_BUILD_TYPE=Release -DLLVM_TARGETS_TO_BUILD=X86 -DLLVM_REQUIRES_RTTI=ON -DLLVM_REQUIRES_EH=ON -DLLVM_ENABLE_ASSERTIONS=0 -DLLVM_ABI_BREAKING_CHECKS=FORCE_OFF -DLLVM_ENABLE_TERMINFO=OFF -DLLVM_USE_LINKER=lld
```
using GCC v11.4 and CMake v3.31 on Ubuntu 24.04. This issue shows when doing a **clean** build in _Release_ mode.

For reference, this quick-and-dirty fix seems to allow the target to be built:
```
--- a/mlir/lib/Dialect/LLVMIR/Transforms/CMakeLists.txt
+++ b/mlir/lib/Dialect/LLVMIR/Transforms/CMakeLists.txt
@@ -9,6 +9,7 @@ add_mlir_dialect_library(MLIRLLVMIRTransforms
   RequestCWrappers.cpp
 
 DEPENDS
+  omp_gen
   MLIRLLVMPassIncGen
 
   LINK_LIBS PUBLIC
```
although we probably shouldn't do this as MLIRLLVMIRTransforms doesn't depend directly on OpenMP headers, if I understand correctly.

I'm not sure if it is expected that _mlir/include/mlir/Target/LLVMIR/ModuleTranslation.h_ now includes OpenMP specific code, given that the remainder of the header seems to be mostly on LLVM IR? If so, could there be a missing dependency in some CMakeLists file?

Thank you in advance :)
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJy8WFtz47bu_zTMC4YeWfIlfsiDbcmp_utL_rbTbJ80lAjZbClSJalk3Yfz2c9Qkjd7S9vtnmnGE8sA-INwIQiQWStOCvGOjBdkHN-wxp21uStZbsQfQlOhuDBS3OSaX-5-EsCkJOEShALdGOD6RVlnkFVQG_0rFg5eEPJGSA7ujEDGCynyzTrdr9c_b9L90TBlS20qC46ZEzoyjkl4e3autiSak3BFwtVJuHOTDwpdkXAl5fP1i_YqSLjKpc5JuKqYUP5LCuNlhKfFgslOqFNJwtWrVhKulhv2G66FdXbgPjgSRushCWdgsWaGOZQXIOEtDk4DeBHuDGQSKKF-ZfCGHQNGJgGQcDYgwXxeOjTeaHcWFgpdVcJ5uNkkL4IpH83CcMiLUYD5dDzEYDqe5RgWRZ7fssmoDAISzv6hQzpdJFx9j6pwCcxaXQjmkIPT0L72wx5IGA1H02AyAy_zgiScGgSlHbBcopfsQiwcMHWptEHIsWCNRU8qmZC2857PATRGG29L0H6ixDtoOPH6V8PpaEzGMSw8nFAnWL5_DzpvE8lpLe23ojsYDHAlJHqmzn8d-LBsf_5500d-wFv5NvKfkou6HmgSzFfzdJ3EJJq_reGL_GlT5p9qBG90uGqsF8nbfD2RcEHCBR0OgcbJ-4dkn26S7XG-zt4lv2Tp9nDcPy6P6W57ABpn99vH7LB73C8T_ys7HONlttxtD8f59pht5sv97vDKWO32m_nX5HW6SV-p6Ze7yXufhKu_5Y-vl3-n-BvahCpkw_FN-Df5V7w3Bfod85FfPqRLoKXS1GLFlBMFFcqhqbUVTmgFtHwWVuRCCnehQkmh0NKz4BwV0Kc-n2POHFInKgT6xKT0nA_OMKBPStNGNRY59TWlQl8U6NOLEQ6pdUaokwX6VDDr6O8Nk92KSlgr1ImWAiWnQgknmBR_oLFAa-Tte3aSUqtT-w_ok6hqKQrhaMmkdGejm9P5-gavGLwjKa1UI3t9hWTW0gorVhRobUc0yBvlddFKP2NHq9FaUYk__Mu9UpXGDwXWjrpL7UkcJTr0KuizMK5hknKnvd22OZ3QOqqf0RjB-_W-YKFyH22XyHwB8OcNKse6ODwVjnFasUuOtFG2qWttfKmiJRfspLR1orC00NIrKstGFX4dtdh-Wy_HHPvk91OjOJafhShvHLXoPguV0pRjbbDwhZEWur4A3UVA422cLB7vgVrHSRQX3T4eToFuYqCb479UUehm9e9oGnCg-t8yqoDvqStvAJFgnioohUTo9zuH0ujqS-zPa8IrYWW0cqh8PdnVqDYP_mHzsNTKOqacHZxJNB_6o5ME8_8Fcrpvzz40HfLtnyB_XghfCceuk_rEMxvNG4ltkyLbrdSCh_8E_Bt-_9TlLe7kr3G_L4jRfDjtOoYfc27n04n_F_gDv2SOyY8NCfzV4oFQhZfbarBNce7SShvgwmDhtLl4owGGEyDTpW-arkcMCcO_hR2GHQJAhzBO_vPnfySYF7qqRRdVcGgqoXyRGnTd1RNCoVUpTo3Btvnq-rSPvVippdQvbaPlN2vbojLF--5sEvSfYF5Unk3vYds2v_TQOgvookeksY9glmzni3WSPex3_5csjwcSxT7eQOPlZv4uyRaP6TrOjr88JCSK9yiRWbwuPc7398nxkB13nRiJ4ve3kyt3n_z_Y7pPDtn-eExJFO-2X3GSnz6j968yPxySfds7kSgOrsz5Is0W-2T-Lt3eZ8ufkuU7z17t9ssk261WX2Ack_0m3a52Hv-V-XhIsnW6fZfsSRRLyb_wWONPb7hfLuF5OByMgCneO_k5GkRD0Aoe80a5BsLRIBgN4OibbWFtg2DP-sXCyxkVcO1hGJBwTsJ5IZGp7vHacivIek9mUGmOfeRX2oDBEg2qAn3X3vbyvzei-I0yxSkXxl2gFB_AIvrxS_tRTr-0adHNYm1f36WM-zojKKXAfnDY8p3wovtA_uNYo4CMAqC-Gk-AhAv_MIWezDjPPH7GO9xMitwwcyHh7bfmuG4j7vH3Bq1bPhlW12hsf6T4Hh7i5CHZxofOCABd1dkJVbfuivjArE1Vcd_RO57PmWydLg7w8LhYp8sv_MqkO7dd2wv6GTpnubz4hGgkVyScOuD9XMYsfHOQ5hptL4k1Kt6XJ3nxKdcVHTgj42hsO7mXkIJvg4w_0TgU2nTifSKlJJxW7axnfRERpR_phAX8UGPRzoln5iD7ocMoA6Vfrge0vb6krbEQpSig0LxN4ZN4RtXp81lq0M_7HA3osiV0Vr0mdI5Qadtb7vVDuifRCtISrPaAhfeqX9oOrMCgb7p7z6EqLn6DWV0hvKZbW_dJtOr8czwz9RtcdOMlGX9mqkBoR_XZDb-L-CyasRu8G07H0XQYDUfBzfluXI5YNLwtozLKywmLAhaM83HEsZgVeDuZ3oi7MAjHwTS8HY6iMAwGOL4Nikk5GUaj4LYMp2QUeOvlwJfhgTanm7Zy3A3HwWw8u5EsR2nbO5ww7CIRknF8Y-7aAzRvTpaMAtluno8ITjjZ3vu0C8YxLJnyce-vb7qa8Nb1DW_ae4CrA3VVf-LEm8bIu---w2gt8ju9N-r5LvxvAAAA__8d3hLG">