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

Eric Fiselier via cfe-dev cfe-dev at lists.llvm.org
Thu Mar 23 04:29:09 PDT 2017


On Thu, Mar 23, 2017 at 4:55 AM, Mateusz Mikuła <mati865 at gmail.com> wrote:

>  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
> [1;34mmake[1]: [0m 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
> [1;34mmake[1]: [0m 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.
>

I don't think that will make a difference. LLVM isn't adding these
libraries AFAIK. They must be getting automatically added by CMake.
Can you check if they're getting added via "CMAKE_REQUIRED_LIBRARIES"?

I've been looking for CMake documentation about this but I can't find
anything.

/Eric



>
> ------ 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> wrote:
>
>>
>>
>> On Fri, Mar 17, 2017 at 4:34 PM, Mateusz Mikuła via cfe-dev <
>> 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/conf
>>> ig-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
>>> 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/78e31213/attachment.html>


More information about the cfe-dev mailing list