Have LLD and Clang in their correct locations, but still can't generate project files for LLVM

I ran CMake on the command line with this command:
cmake … -DCMAKE_INSTALL_PREFIX=…/install_x64 -T host=x64 -G “Visual Studio 15 2017 Win64” -DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD=WebAssembly

And I have LLD and Clang where they should be. But I still couldn’t generate project files. The path to the build and installation directories don’t have spaces at all this time, either. I’m attaching the logs to this message. Please help.

CMakeError.log (558 KB)

CMakeOutput.log (204 KB)

I don’t know if it actually matters, but I think there should not be a space after -T. Usually I would specify it like -Thost=x64.

Yeah, I don’t think that matters. It did set the toolset architecture to x64.

You know, I attached those log files for a reason.

Please instead include the output at the console, it’s the most useful first step for debugging cmake failures.

Is there no one who has already built LLVM for targeting WebAsesembly with, using Visual Studio 2017 as the generator and toolchain (x64 of course)?

My LLVM root folder is C:/llvm, and LLD and Clang are in llvm_root/tools/lld and llvm_root/tools/clang respectively. If this is as it should be, then what’s the problem? Would someone please help me with this by also checking the logs I’ve attached to the first message in this thread? Thanks in advance.

In llvm/tools/, I see there’s also a folder called “msbuild” which also has a .sln file called llvm.sln. How about if I just try to build that (and if needed, would it be okay to just put the preprocessor definition LLVM_EXPERIMENTAL_TARGETS_TO_BUILD=WebAssembly in there for each project?)?

I think most people are using ninja to do the build. You can still use the Visual Studio generator for the IDE experience while doing build from ninja. I know there are a couple of people who build from inside of Visual Studio, but it’s a pretty small number, and I don’t think they are targeting WebAssembly.

I am evidently one of those rare people successfully building LLVM v7 inside VS 2017 and targeting WebAssembly. Unlike Osman, I build the 32-bit version, but I suspect I would have no significant trouble switching to building the 64-bit version.

I use CMake-Gui vs. Osman using Cmake on the command line. This allows me to use the mouse to select the CLANG_BUILD_TOOLS and LLD_BUILD_TOOLS options which are also needed to build those tools along with the rest of LLVM. I do this after the Configure step and before the Generate step.

When that is done, I double click on the generated LLVM.sln file to fire up Visual Studio. I then right-click on BUILD_ALL to build LLVM, followed by right-clicking on INSTALL to finish the process a few hours later.

That said, I looked at Osman’s log and saw the build was struggling to locate various include files, which seems a very basic error suggesting something fundamentally is amiss with how the build is locating LLVM source files. I know too little about Osman’s set up and LLVM’s CMake process to hazard a guess as to what might be causing that.

Do I have to use a flag to tell it where the LLVM include files are? And would it be easier to do that in the CMake GUI? Please tell me how you had it find the include files if that may help me.

@Jonathan Goodwin: Do I have to use a flag to tell it where the LLVM include files are? And would it be easier to do that in the CMake GUI? Please tell me how you had it find the include files if that may help me.

I need to know how to tell CMake to have LLVM target WebAssembly in addition to other targets when using the CMake GUI. Also, is there a way for me to build Boost using LLVM, so that I can generate LLVM bitcode for the Boost libraries I may need to link against in WebAssembly projects?

And another thing I want to ask: where is the Bactrace? Is it in the LLVM source tree? If so, where exactly?

Do I have to use a flag to tell it where the LLVM include files are?

Not at all. CMake should be using the CMakeLists.txt to locate all the files it needs for builds. In my downloaded source for LLVM, the main folder has a bunch of folders in it: lib, projects, docs, examples, etc. One of those is “include”, which for me has two subfolders: “llvm” and “llvm-c”. I assume that is where Cmake finds all the LLVM include files it needs. The only other include files it would need for build would be standard library include files which you should have as a result of having installed Visual Studio.

So, that’s why I am baffled by your problem, as I cannot imagine how your build is failing to find the include files it needs. I don’t know about the architecture of LLVM to recognize the include files that your build is failing on, to know who they belong to and where they reside. I do know that CMake goes through a discovery process during generation, where it attempts to guess where to find build environment resources, such as the compiler and key external folders. So maybe? if you have multiple build tools or libraries installed, potentially it could get its wires crossed and not be pointing at resources known to Visual Studio 2017. I just don’t know. Without detailed knowledge of your set up and lacking detailed knowledge of LLVM’s architecture, it is hard for me to diagnose what might be going wrong.