[llvm-dev] Cannot build Clang/LLVM on Windows with LLVM_BUILD_LLVM_DYLIB

490 views
Skip to first unread message

biologi spm via llvm-dev

unread,
Jun 9, 2017, 4:25:20 AM6/9/17
to llvm...@lists.llvm.org
I am trying to build Clang/LLVM with -DLLVM_BUILD_LLVM_DYLIB=ON and
-DLLVM_LINK_LLVM_DYLIB=ON to reduce the size of toolchain.

I am getting LINK error 1181 about `lib\LLVM.lib` not found. After
investigating, `lib\LLVM.lib` is supposed to be produced along with
`bin\LLVM.dll`. `bin\LLVM.dll` is indeed produced, but it does not
contain any exported symbols (10KB only) because LLVM does not use
`__declspec(dllexport)` and `__declspec(dllimport)`, so lib.exe
refuses to produce `lib\LLVM.lib`.

If I just build static-linked Clang/LLVM (default), it works fine.

Windows bot of WebAssembly waterfall is also affected:
https://github.com/WebAssembly/waterfall/commit/2051fd4cdb2b4017e66dfcd70203d40f3d0b461d

Compiler: Visual Studio 2017

CMake configuration:

cmake -GNinja -Bbuild -Hllvm -DCMAKE_BUILD_TYPE=Release
-DLLVM_INCLUDE_EXAMPLES=OFF
-DLLVM_INCLUDE_TESTS=OFF
-DCMAKE_INSTALL_PREFIX=d:\a\1\b
-DLLVM_TARGETS_TO_BUILD=X86
-DLLVM_INSTALL_TOOLCHAIN_ONLY=ON
-DLLVM_BUILD_LLVM_DYLIB=ON
-DLLVM_LINK_LLVM_DYLIB=ON
-DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD=WebAssembly
_______________________________________________
LLVM Developers mailing list
llvm...@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev

NAKAMURA Takumi via llvm-dev

unread,
Jun 9, 2017, 5:59:23 AM6/9/17
to biologi spm, llvm...@lists.llvm.org
It's unsupported on MS toolchain. It's too hard to make LLVM headers and libs DLL-ready.
It would be theoretically possible on mingw. (oops, it requires awk...) 

Alexander Benikowski via llvm-dev

unread,
Jun 9, 2017, 10:51:59 AM6/9/17
to NAKAMURA Takumi, llvm-dev, biologi spm
@Nakamura
Well it is unsupported, because noone added a script to generate the required DEF-File(since it seems noone wants to use export definitions).
Somewhere i have a batchscript that does just that and(in theory therefore) even runs from cmake(in the cmake files there is only a script for Mac iirc and none for Windows).
Maybe i can find it and someone with cmake expertise can add it to the scripts/proper buildstages

biologi spm via llvm-dev

unread,
Jun 11, 2017, 12:04:40 AM6/11/17
to llvm...@lists.llvm.org
I am only interested in using Clang/LLVM.

clang.exe, clang++.exe, clang-cl.exe, clang-cl.exe and
msbuild-bin/cl.exe are each 37MB, but they serve almost the same
purpose, just receive different flavours of command flags.

By passing -v flag, I noticed that all of them will parse the command
flags, then call itself with more command flags for the main parsing
and compiling.

This is quite similar with gcc.exe, g++.exe, c++.exe and cpp.exe in
GCC, but these GCC drivers are much smaller (each around 600KB to
900KB) and they all call another program cc1.exe or cc1plus,exe (each
around 20MB). Therefore, GCC toolchain is much smaller.

Can Clang/LLVM add a configuration similar to GCC?

Tim Northover via llvm-dev

unread,
Jun 11, 2017, 10:29:10 AM6/11/17
to biologi spm, LLVM Developers Mailing List
On 10 June 2017 at 21:04, biologi spm via llvm-dev

<llvm...@lists.llvm.org> wrote:
> clang.exe, clang++.exe, clang-cl.exe, clang-cl.exe and
> msbuild-bin/cl.exe are each 37MB, but they serve almost the same
> purpose, just receive different flavours of command flags.

On Unix systems these are all symlinks and so essentially free. I hear
Windows doesn't cope well with that though so it looks like we just
copy the files there.

> Can Clang/LLVM add a configuration similar to GCC?

That's probably best discussed on the cfe-dev mailing list. Doing it
optimally would involve substantial refactoring (essentially splitting
lib/Driver out into its own tool). I think you'd be lucky to get
anyone to sign up to work on that, but you might be able to convince
them patches are welcome.

Cheers.

Tim.

Joerg Sonnenberger via llvm-dev

unread,
Jun 11, 2017, 3:56:36 PM6/11/17
to llvm...@lists.llvm.org
On Sun, Jun 11, 2017 at 12:04:25PM +0800, biologi spm via llvm-dev wrote:
> This is quite similar with gcc.exe, g++.exe, c++.exe and cpp.exe in
> GCC, but these GCC drivers are much smaller (each around 600KB to
> 900KB) and they all call another program cc1.exe or cc1plus,exe (each
> around 20MB). Therefore, GCC toolchain is much smaller.
>
> Can Clang/LLVM add a configuration similar to GCC?

You should be able to replace clang++.exe and clang-cpp.exe with a
trivial program that uses execvp with clang.exe as file and argv as
given to the program.

Joerg

biologi spm via llvm-dev

unread,
Jun 12, 2017, 1:07:13 AM6/12/17
to Tim Northover, LLVM Developers Mailing List
In the end I just deleted clang-cl.exe etc and create real Windows
symlink with "mklink clang-cl.exe clang.exe" (required administrator
permission). Works perfectly. Apparently these drivers inspect their
own name argv[0] before deciding what mode to run.

With this hack and ninja -C build install-clang install-clang-headers,
the resulting toolset is only 44MB, which is a great improvement when
compared with the default installation (380+MB).

Thanks for pointing out that these drivers are just symlinks!

Shoaib Meenai via llvm-dev

unread,
Jun 12, 2017, 2:21:25 AM6/12/17
to biologi spm, Tim Northover, LLVM Developers Mailing List
Reply all
Reply to author
Forward
0 new messages