[cfe-dev] [libc++] Compiling with MinGW-w64
Mateusz Mikuła via cfe-dev
cfe-dev at lists.llvm.org
Thu Mar 23 11:38:57 PDT 2017
CMAKE_REQUIRED_LIBRARIES is empty and out-of-tree build with removed
CMake flags didn't help.
------ Original Message ------
Subject: Re: [cfe-dev] [libc++] Compiling with MinGW-w64
Date: Thu, 23 Mar 2017 05:31:02 -0600
To: Mateusz Mikuła
From: Eric Fiselier
> Also what's your exact CMake invocation?
>
> /Eric
>
> On Thu, Mar 23, 2017 at 5:29 AM, Eric Fiselier <eric at efcs.ca
> <mailto:eric at efcs.ca>> wrote:
>
>
>
> On Thu, Mar 23, 2017 at 4:55 AM, Mateusz Mikuła <mati865 at gmail.com
> <mailto: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
>> <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/8d6d4769/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/8d6d4769/attachment.sig>
More information about the cfe-dev
mailing list