[cfe-dev] Prebuilt clang for Windows versions versus versions built with the latest source

Edward Diener via cfe-dev cfe-dev at lists.llvm.org
Tue Sep 8 09:07:00 PDT 2015


On 9/8/2015 11:19 AM, Reid Kleckner via cfe-dev wrote:
> Both MSVC and mingw should support static linking. Hans's release script
> uses the /MT compiler flag to do it for MSVC. For mingw, you need to
> pass a flag like -static, -static-libstdc++, or -static-libgcc. I don't
> use mingw so I couldn't say which actually does the job.

Thanks, that explains it ! I assume the script does this via the 
'LLVM_USE_CRT_RELEASE=MT' switch, but I couldn't find any documentation 
as to its meaning or use. I will try passing a compiler switch for 
static linking for mingw-64/gcc in the CMAKE_CXX_FLAGS switch once I 
figure out what the switch is.

>
> On Mon, Sep 7, 2015 at 8:12 PM, Edward Diener via cfe-dev
> <cfe-dev at lists.llvm.org
> <mailto:cfe-dev at lists.llvm.org>> wrote:
>
>     On 9/7/2015 10:21 PM, Nikola Smiljanic via cfe-dev wrote:
>
>         Yes, you can use ninja with VC++, it just replaces MSBuild.
>
>
>     Thanks ! Never realized that.
>
>     1) Building clang with VC++11 ( VS2012 ) has no dependencies on any
>     compiler DLLs.
>     2) Building clang with mingw-64/gcc has dependencies on the
>     libstdc++ DLL and whatever DLL represents the mingw-64/gcc exception
>     model.
>
>     Why is this ?
>
>     I see these LLVM variablles in the build script:
>
>     LLVM_ENABLE_ASSERTIONS
>     LLVM_INSTALL_TOOLCHAIN_ONLY
>     LLVM_USE_CRT_RELEASE
>     LLVM_DEFAULT_TARGET_TRIPLE
>
>     There is no documentation on the 'Building LLVM with CMake' page (
>     http://llvm.org/docs/CMake.html page ) for the last three. Do any of
>     these remove compiler DLL dependencies ? Seems doubtful.
>
>
>         On Tue, Sep 8, 2015 at 9:28 AM, Edward Diener via cfe-dev
>         <cfe-dev at lists.llvm.org
>         <mailto:cfe-dev at lists.llvm.org>
>         <mailto:cfe-dev at lists.llvm.org
>         <mailto:cfe-dev at lists.llvm.org>>> wrote:
>
>              On 9/6/2015 9:46 PM, Nikola Smiljanic via cfe-dev wrote:
>
>                  Here's the script +Hans uses to build so you can compare.
>
>
>              This script suggests that it is building clang using Visual
>         Studio
>              2012. But it is using Ninja as the CMake generator so I am
>         confused
>              by what is happening here. Can anybody clarify what is
>         being used to
>              build clang in the script being presented to me ?
>
>
>                  On Mon, Sep 7, 2015 at 11:33 AM, Edward Diener via cfe-dev
>                  <cfe-dev at lists.llvm.org
>         <mailto:cfe-dev at lists.llvm.org>
>                  <mailto:cfe-dev at lists.llvm.org
>         <mailto:cfe-dev at lists.llvm.org>>
>                  <mailto:cfe-dev at lists.llvm.org
>         <mailto:cfe-dev at lists.llvm.org>
>
>                  <mailto:cfe-dev at lists.llvm.org
>         <mailto:cfe-dev at lists.llvm.org>>>>
>         wrote:
>
>                       If I look at pre-built version of clang for Windows I
>                  notice that
>                       there are no dependencies on any C++
>         implementation DLLs
>                  but only on
>                       the common lower level Windows DLLs kernel32.dll,
>                  shell32.dll, and
>                       advapi32.dll, which are all in the windows/system32
>                  directory. This
>                       appears pretty nice.
>
>                       If I build clang from source using some version of
>                  mingw-64/gcc as
>                       the compiler and CMake/Ninja as the build system I
>         end up
>                  with a
>                       clang which has dependencies on the above
>         mentioned lower level
>                       Windows DLLs and msvcrt.dll in the windows/system32
>                  directory, as
>                       well as libstdc++6.dll and on whatever other DLL
>         represents the
>                       exceptional model for that version of mingw-64/gcc
>         in a
>                  mingw-64/gcc
>                       bin directory. If I build a 32-bit version of
>         clang with
>                       mingw-64/gcc 32-bit supporting the dwarf exception
>         model
>                  clang has a
>                       dependency on LIBGCC_S_DW2-1.DLL. If I build a 64-bit
>                  version of
>                       clang with mingw-64/gcc 64-bit supporting the seh
>         exception
>                  model
>                       clang has a dependency on LIBGCC_S_SEH-1.DLL.
>
>                       Why is there this discrepancy between the pre-built
>                  versions and the
>                       32-bit and 64-bit versions of clang which I build ?
>
>                       Or better yet, with what is the clang pre-built
>         versions
>                  being built
>                       so that it has no dependencies on any compiler
>                  implementation DLL ?





More information about the cfe-dev mailing list