The current pipeline for CPU IREE models requires link.exe from MSVC toolchain to generate the model DLL. The linker is not directly invoked, but the binary clang++.exe, included in the plugin, will internally try to call link.exe in turn. Even though ld.lld.exe is also included in the plugin, clang++.exe does not attempt to use it.
Is this intended? I am aware that the plugin is still experimental, but it would be good to know if it is indeed meant to work like this. It is a bit limiting as many devs in our team do not otherwise need to have Visual Studio installed and would like to be able to produce cooked builds locally without it.
Hi Javier,
Thanks for reporting this. It is a known issue to us and we already have an open jira for it. We hope we can bring in a solution for 5.8 but I cannot guarantee anything.
Sorry for the inconveniences caused!
Best
Nico
Hey Javier,
The problem is that with IREE the borders between code and asset become a bit vague. On one hand it is an asset and people can use it without MSVC or another IDE, on the other hand even on a content creators machine the network will be compiled. Thus we follow the common practice to use the intermediate folder to save intermediate steps (you will not only find the binaries but a lot of other things like object files, logs etc.).
We will need to store them somewhere also on non-developers machines (and the binaries folder will be the wrong place), so the behaviour would be that the Intermediate folder will be created when not there (but then just contain IREE build artefacts).
Let me know if you foresee any other complications of having this temporary folder being created.
Best
Nico
Ah now I get it, sorry.
Yes, there are no plans to change the inteermediate directory.
But I did assign a higher priority to the MSVC dependency issue, I hope we can clear that out soon!
Hi Nico,
Thank you for your answer. Just a quick follow-up question. At the moment, NNERuntimeIREE generates compilation artifacts under Intermediate/Build/<Platform>/NNERuntimeIREE, and then the relevant binaries are copied over to Binaries/Win64/NNERuntimeIREE for staging. But the editor will still use the binaries (dynamic library, .vmfb and .ireemodeldata files) from the Intermediate directory.
The question is whether this is still the plan for the future, that is, the generation of compilation artifacts under Intermediates - even after the dependency to link.exe is fixed and content creators without MSVC can compile the models. The reason why I ask is because at the moment content creators do not have any Intermediate directory at all. Is it the plan that they will also need to have it when using this plugin?
Thanks,
Javier
Thanks again for the quick reply. That is all good. I asked because we were considering possible workarounds for now, and we may end up just adding to Perforce the binaries for all NNE IREE assets (or rather our internal “wrapper” asset type), using a script to automate the process. But the Intermediate folder is excluded from Perforce, so we may change the plugin to use a different path. I just wanted to confirm whether you intended to keep using Intermediate in case you planned to move it to somewhere else, so our workaround would align with your plans. But it’s all fine, once the dependency to MSVC is solved we can stop checking these binaries into Perforce and revert to using the Intermediate directory.