[llvm-dev] LLVM_DYLIB and CLANG_DYLIB with MSVC
Cristian Adam via llvm-dev
llvm-dev at lists.llvm.org
Sun May 30 07:16:46 PDT 2021
Hi,
Clang 12 can be configured on Windows with MinGW (either GNU or LLVM)
with the following CMake parameters:
* LLVM_BUILD_LLVM_DYLIB=ON
* LLVM_LINK_LLVM_DYLIB=ON
* CLANG_LINK_CLANG_DYLIB=ON
which has some effect on the binary size of the build.
I configured the llvm-project with the following parameters:
* CMAKE_BUILD_TYPE=Release
* LLVM_TARGETS_TO_BUILD=X86
* LLVM_ENABLE_PROJECTS=clang;clang-tools-extra
The installed (stripped) build of Clang 12 with llvm-mingw release
12.0.0 <https://github.com/mstorsjo/llvm-mingw/releases/tag/20210423>
resulted in:
* Normal build: 1,76 GB
* shlib build: 481 MB
Due to the nature of MSVC regarding default visibility of symbols
(hidden by default, whereas MinGW has visible by default), one needs to
generate a .def file with the symbols needed to be exported.
This is done already in two cases for LLVM_BUILD_LLVM_C_DYLIB
(llvm/tools/llvm-shlib/gen-msvc-exports.py) and for
LLVM_EXPORT_SYMBOLS_FOR_PLUGINS (llvm/utils/extract_symbols.py).
I've put together a patch
<https://github.com/cristianadam/llvm-project/commit/3a3b8a7df17a49ba7c0153b0c9a7ee25705ede46>
that enables LLVM_DYLIB and CLANG_DYLIB for MSVC.
I tested with clang-cl from the official Clang 12 x64 Windows binary
release:
* Normal build: 1,42 GB
* shlib build: 536 MB
The shlib release build compiled and linked fine with LLVM.dll and
clang-cpp.dll, unfortunately it crashes at runtime. For example llvm-nm:
$ llvm-nm
PLEASE submit a bug report to https://bugs.llvm.org/ and include the
crash backtrace.
Stack dump:
0. Program arguments: llvm-nm
#0 0x00007ffd32807d43 llvm::StringMap<llvm::cl::Option
*,llvm::MallocAllocator>::begin
C:\Projects\llvm-project\repo\llvm\include\llvm\ADT\StringMap.h:204:0
#1 0x00007ffd32807d43 llvm::cl::HideUnrelatedOptions(class
llvm::cl::OptionCategory &, class llvm::cl::SubCommand &)
C:\Projects\llvm-project\repo\llvm\lib\Support\CommandLine.cpp:2589:0
#2 0x00007ff689df2b13 llvm::StringRef::StringRef
C:\Projects\llvm-project\repo\llvm\include\llvm\ADT\StringRef.h:107:0
#3 0x00007ff689df2b13 main
C:\Projects\llvm-project\repo\llvm\tools\llvm-nm\llvm-nm.cpp:2232:0
#4 0x00007ff689e26d04 invoke_main
D:\agent\_work\10\s\src\vctools\crt\vcstartup\src\startup\exe_common.inl:78:0
#5 0x00007ff689e26d04 __scrt_common_main_seh
D:\agent\_work\10\s\src\vctools\crt\vcstartup\src\startup\exe_common.inl:288:0
#6 0x00007ffd9a7f7034 (C:\Windows\System32\KERNEL32.DLL+0x17034)
#7 0x00007ffd9b742651 (C:\Windows\SYSTEM32\ntdll.dll+0x52651)
This crash is due to llvm::cl::HideUnrelatedOptions which
accessesTopLevelSubCommand, which is defined as:
extern ManagedStatic<SubCommand> TopLevelSubCommand;
The MSVC 2019 build behaves in the same way as the clang-cl build.
I have tried building without LLVM_ENABLE_THREADS, or by linking to the
CRT statically LLVM_USE_CRT_RELEASE=MT, didn't help.
The MSVC 2019 build sizes were:
* Normal build: 1,74 GB
* shlib build: 949 MB
I would appreciate any help in getting the shlib build running. It works
fine with llvm-mingw, I think it should also work with clang-cl / cl.
Cheers,
Cristian.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20210530/682a36d8/attachment.html>
More information about the llvm-dev
mailing list