[cfe-dev] [libc++] Compiling with MinGW-w64

Mateusz Mikuła via cfe-dev cfe-dev at lists.llvm.org
Thu Mar 23 03:55:47 PDT 2017


 Yes, logs come from unmodified build of in-tree build of libc++.

Here is NODEFAULTLIBS check

    Performing C++ SOURCE FILE Test LIBCXXABI_HAS_NODEFAULTLIBS_FLAG
    succeeded with the following output:
    Change Dir:
    D:/projekty/msys2/MINGW-packages/mingw-w64-clang/src/build-i686/CMakeFiles/CMakeTmp

    Run Build Command:"D:/msys64/usr/bin/make.exe" "cmTC_a0b32/fast"
    /usr/bin/make -f CMakeFiles/cmTC_a0b32.dir/build.make
    CMakeFiles/cmTC_a0b32.dir/build
    make[1]: Entering directory
    '/d/projekty/msys2/MINGW-packages/mingw-w64-clang/src/build-i686/CMakeFiles/CMakeTmp'
    Building CXX object CMakeFiles/cmTC_a0b32.dir/src.cxx.obj
    /D/msys64/mingw32/bin/g++.exe     -D_GNU_SOURCE -Wall -W
    -Wno-unused-parameter -Wwrite-strings -Wcast-qual
    -Wno-missing-field-initializers -pedantic -Wno-long-long
    -Wno-maybe-uninitialized -Wdelete-non-virtual-dtor -Wno-comment
    -Werror=date-time -std=gnu++11 -DLIBCXXABI_HAS_NODEFAULTLIBS_FLAG  
    -nodefaultlibs -o CMakeFiles/cmTC_a0b32.dir/src.cxx.obj -c
    /D/projekty/msys2/MINGW-packages/mingw-w64-clang/src/build-i686/CMakeFiles/CMakeTmp/src.cxx
    Linking CXX executable cmTC_a0b32.exe
    /D/msys64/mingw32/bin/cmake.exe -E remove -f
    CMakeFiles/cmTC_a0b32.dir/objects.a
    /D/msys64/mingw32/bin/ar.exe cr CMakeFiles/cmTC_a0b32.dir/objects.a
    "CMakeFiles/cmTC_a0b32.dir/src.cxx.obj"
    /D/msys64/mingw32/bin/g++.exe  -D_GNU_SOURCE -Wall -W
    -Wno-unused-parameter -Wwrite-strings -Wcast-qual
    -Wno-missing-field-initializers -pedantic -Wno-long-long
    -Wno-maybe-uninitialized -Wdelete-non-virtual-dtor -Wno-comment
    -Werror=date-time -std=gnu++11 -DLIBCXXABI_HAS_NODEFAULTLIBS_FLAG 
    -pipe -Wl,--stack,16777216  -Wl,--whole-archive
    CMakeFiles/cmTC_a0b32.dir/objects.a -Wl,--no-whole-archive  -o
    cmTC_a0b32.exe -Wl,--major-image-version,0,--minor-image-version,0
    -lkernel32 -luser32 -lgdi32 -lwinspool -lshell32 -lole32 -loleaut32
    -luuid -lcomdlg32 -ladvapi32
    make[1]: Leaving directory
    '/d/projekty/msys2/MINGW-packages/mingw-w64-clang/src/build-i686/CMakeFiles/CMakeTmp'

    Source file was:
    int main() { return 0; }


I'll try out of tree build soon.


------ Original Message ------
Subject: Re: [cfe-dev] [libc++] Compiling with MinGW-w64
Date: Thu, 23 Mar 2017 02:34:09 -0600
To: Mateusz Mikuła
From: Eric Fiselier
> Just to verify you're not manually adding any of the following
> libraries, right?
>
> -lkernel32 -luser32 -lgdi32 -lwinspool -lshell32 -lole32 -loleaut32
> -luuid -lcomdlg32 -ladvapi32
> /Eric
>
> On Wed, Mar 22, 2017 at 7:04 PM, Eric Fiselier <eric at efcs.ca
> <mailto:eric at efcs.ca>> wrote:
>
>
>
>     On Fri, Mar 17, 2017 at 4:34 PM, Mateusz Mikuła via cfe-dev
>     <cfe-dev at lists.llvm.org <mailto:cfe-dev at lists.llvm.org>> wrote:
>
>         Hello,
>
>         I'm planing to get libc++ compiling with MinGW-w64, right now
>         without patches it fails with:
>
>             CMake Error at projects/libcxx/CMakeLists.txt:396 (message):
>               C++11 or greater is required but the compiler does not
>             support c++11
>
>         It is caused by adding `-nodefaultlibs` flag (it passes it's
>         own check [1]
>         <https://github.com/llvm-mirror/libcxx/blob/master/cmake/config-ix.cmake#L27>).
>         However many following checks fail due to undefined
>         references, results with gcc [2]
>         <https://reviews.llvm.org/P7975> and clang [3]
>         <https://reviews.llvm.org/P7976>.
>
>     CMake seems to be adding system libraries automagically.
>     Specifically it adds -lgcc_s -lkernel32 -luser32 -lgdi32
>     -lwinspool -lshell32 -lole32 -loleaut32 -luuid -lcomdlg32 -ladvapi32.
>     I'm guessing that these libraries are where the undefined symbols
>     are coming from, and I suspect the correct fix is to somehow
>     prevent CMake from adding them.
>
>
>
>         Hard-coding 0 for LIBCXX_SUPPORTS_NODEFAULTLIBS_FLAG allows it
>         go finish configuration and fail during build (that's another
>         story).
>
>         `-nodefaultlibs` appears several times in libc++ and libc++abi
>         code and I'm not sure about cleanest way to fix/workaround it.
>
>         Any suggestions?
>
>
>         [1]
>         https://github.com/llvm-mirror/libcxx/blob/master/cmake/config-ix.cmake#L27
>         <https://github.com/llvm-mirror/libcxx/blob/master/cmake/config-ix.cmake#L27>
>
>         [2] https://reviews.llvm.org/P7975
>
>         [3] https://reviews.llvm.org/P7976
>
>
>         Thanks,
>
>         Mateusz
>
>
>         _______________________________________________
>         cfe-dev mailing list
>         cfe-dev at lists.llvm.org <mailto:cfe-dev at lists.llvm.org>
>         http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev
>         <http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev>
>
>
>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20170323/2456599d/attachment.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: OpenPGP digital signature
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20170323/2456599d/attachment.sig>


More information about the cfe-dev mailing list