[llvm-dev] Shipping LLVM.dll for the C API with the Windows installer.

Jakob Bornecrantz via llvm-dev llvm-dev at lists.llvm.org
Thu Jul 6 11:16:26 PDT 2017


Made a bit of headway here: https://reviews.llvm.org/D35077

Cheers, Jakob.

On Thu, Apr 6, 2017 at 2:34 PM, Alexander Benikowski
<sebal007 at googlemail.com> wrote:
> Maybe someone can use this as a startingpoint to add the windows-specific
> commandblock which is triggered instead of the Darwin one together with a
> proper setup of targets to have the libs build before.
>
> 2017-04-06 14:30 GMT+02:00 Alexander Benikowski <sebal007 at googlemail.com>:
>>
>> The following is an older commandline i used. Have a more recent one at
>> home. But basically you can write it as batch and trigger it within a target
>> during the build(never got targets into correct order, i am a cmake noob)
>>
>> So for reference, i'll post this one and look for the recent one at
>> home(if that didn't go down with my recent hdd crash):
>>
>> cmd /Q /V:ON /c "for /F "tokens=4" %l in ('dir llvm*.lib') do (for /F
>> "tokens=2" %e in ('dumpbin /linkermember:1 %l ^| findstr "_LLVM"') do (set
>> symbolname=%e & echo !symbolname:~1!))"
>>
>> What it does:
>>
>> For all *.lib files ina specific dir starting with LLVM call dumpbin.exe
>> (tool from Visualstudio) and write all symbols with LLVM_ into a specific
>> file
>>
>>
>> 2017-04-05 20:40 GMT+02:00 Jakob Bornecrantz via llvm-dev
>> <llvm-dev at lists.llvm.org>:
>>>
>>> On Wed, Apr 5, 2017 at 5:20 PM, John Brawn <John.Brawn at arm.com> wrote:
>>> > We already half-have this, the LLVM_BUILD_LLVM_C_DYLIB cmake option
>>> > builds
>>> > a shared object which exports the llvm-c interface but it only works on
>>> > Darwin.
>>> >
>>> > tools/llvm-shlib/CMakeLists.txt is where how this is done is defined,
>>> > and it
>>> > looks like it does it by:
>>> >  * build LLVM.so
>>> >  * use nm+awk+sed to pick out the symbols starting with LLVM
>>> >  * build LLVM-C.so using a -reexport_library linker option
>>> >
>>> > I'm thinking that maybe we could make this not-darwin-specific by
>>> > making
>>> > use of utils/extract_symbols.py:
>>> >  * edit extract_symbols.py to add a --only_unmangled option (or maybe
>>> >    --only_prefix=LLVM or something like that)
>>> >  * on non-darwin use that instead of the existing command to get the
>>> >    symbols to export (or: make extract_symbols.py work on Darwin)
>>> >  * instead of building LLVM-C.so from LLVM.so using this
>>> > -reexport_library
>>> >    option, instead build LLVM-C.so from the same libraries that LLVM.so
>>> >    is built from
>>> >  (where I use .so above, it also applies to .dll)
>>> >
>>> > John
>>>
>>> Thanks for the info John!
>>>
>>> I tried to enable LLVM_BUILD_LLVM_C_DYLIB on my linux machine
>>> to play around a little bit. I disabled the APPLE check to get past that.
>>> The config failed if I had BUILD_SHARED_LIBS also set to true.
>>> If I tried that without the flag it complained about missing:
>>> builddir/./lib/libLLVM.so
>>>
>>> Which is a bit weird since it builds a lib/libLLVM-5.0svn.so.
>>>
>>> I have to admit I'm a tiny bit in over my head here with the cmake
>>> scripts here.
>>>
>>> Cheers, Jakob.
>>>
>>> >
>>> >> -----Original Message-----
>>> >> From: llvm-dev [mailto:llvm-dev-bounces at lists.llvm.org] On Behalf Of
>>> >> Jakob Bornecrantz via llvm-dev
>>> >> Sent: 05 April 2017 12:51
>>> >> To: llvm-dev
>>> >> Subject: Re: [llvm-dev] Shipping LLVM.dll for the C API with the
>>> >> Windows
>>> >> installer.
>>> >>
>>> >> On Thu, Mar 30, 2017 at 4:46 PM, Jakob Bornecrantz
>>> >> <wallbraker at gmail.com> wrote:
>>> >> > Hello list!
>>> >> >
>>> >> > So I'm wondering if there is a will to ship a DLL with the C API
>>> >> > exported? LLVM currently ships with LTO.dll which has some C api
>>> >> > functions exported, made from the export file tools/lto/lto.exports,
>>> >> > so it would not be the first DLL LLVM shipped.
>>> >> >
>>> >> > Currently I (and the users of my project[1]) are building it
>>> >> > ourselves
>>> >> > using this script[2] derived from the LLVMSharp script[3]. Which
>>> >> > adds
>>> >> > a extra long step for all users of ours and other projects like
>>> >> > LLVMSharp in order to use them.
>>> >> >
>>> >> > The resulting LLVM.dll exports 809 functions and weighs in at around
>>> >> > 18mb, so it would make the installer larger. There is also the cost
>>> >> > of
>>> >> > maintaining a lists of export for the DLL, but hopefully we can use
>>> >> > the llvm-echo to test it on the windows nodes so any failure to add
>>> >> > new exports gets detected early.
>>> >> >
>>> >> > Now for the bike-shed questions, do we call it LLVM-c.dll or just
>>> >> > LLVM.dll? Annotate all functions with a LLVM_EXPORT define or use a
>>> >> > llvm-c.exports file?
>>> >> >
>>> >> > Thoughts and feedback welcome.
>>> >> >
>>> >> > Cheers, Jakob.
>>> >> >
>>> >> > [1] http://volt-lang.org
>>> >> > [2]
>>> >> > https://github.com/VoltLang/GenLLVMDLLPy/blob/master/GenLLVMDLL.py
>>> >> > [3]
>>> >>
>>> >> https://github.com/Microsoft/LLVMSharp/blob/master/tools/GenLLVMDLL.ps1
>>> >>
>>> >> Ping? Any thoughts?
>>> >>
>>> >> What would be the best way to proceed? My cmake-fu is very weak so any
>>> >> pointers here from those knowledgeable and stakeholders in the code
>>> >> would be greatly appreciated.
>>> >>
>>> >> Cheers, Jakob.
>>> >> _______________________________________________
>>> >> LLVM Developers mailing list
>>> >> llvm-dev at lists.llvm.org
>>> >> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
>>> _______________________________________________
>>> LLVM Developers mailing list
>>> llvm-dev at lists.llvm.org
>>> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
>>
>>
>


More information about the llvm-dev mailing list