r241432 - Teach mingw toolchain the msys2 mingw-w64 distribution C++ dirs.

İsmail Dönmez ismail at donmez.ws
Sat Jul 11 03:59:22 PDT 2015


Hi,

Not really answering your questions but I think the problem is clang
is invoking $TARGET-ld directly, it used to let gcc link so gcc would
figure out the linker details. See a run with clang 3.6.1 on same
setup:

λ /usr/bin/clang -v -target x86_64-w64-mingw32 -isystem
/usr/x86_64-w64-mingw32/sys-root/x86_64-w64-mingw32/include
randomworks/windows/nic.c -liphlpapi
clang version 3.6.1 (tags/RELEASE_361/final 238133)
Target: x86_64-w64-windows-gnu
Thread model: posix
 "/usr/bin/clang-3.6" -cc1 -triple x86_64-w64-windows-gnu -emit-obj
-mrelax-all -disable-free -disable-llvm-verifier -main-file-name nic.c
-mrelocation-model static -mthread-model posix -mdisable-fp-elim
-fmath-errno -masm-verbose -mconstructor-aliases -munwind-tables
-target-cpu x86-64 -v -dwarf-column-info -resource-dir
/usr/bin/../lib64/clang/3.6.1 -isystem
/usr/x86_64-w64-mingw32/sys-root/x86_64-w64-mingw32/include
-fdebug-compilation-dir /home/ismail -ferror-limit 19 -fmessage-length
126 -mstackrealign -fno-use-cxa-atexit -fobjc-runtime=gcc
-fdiagnostics-show-option -fcolor-diagnostics -o /tmp/nic-e31eb1.o -x
c randomworks/windows/nic.c
clang -cc1 version 3.6.1 based upon LLVM 3.6.1 default target x86_64-suse-linux
ignoring nonexistent directory
"/usr/bin/../lib64/clang/3.6.1/../../../i686-w64-mingw32/include"
ignoring nonexistent directory
"/usr/bin/../lib64/clang/3.6.1/../../../x86_64-w64-mingw32/include"
ignoring nonexistent directory "/mingw/include"
ignoring duplicate directory "/usr/bin/../lib64/clang/3.6.1/../../../include"
#include "..." search starts here:
#include <...> search starts here:
 /usr/x86_64-w64-mingw32/sys-root/x86_64-w64-mingw32/include
 /usr/local/include
 /usr/bin/../lib64/clang/3.6.1/include
 /usr/bin/../lib64/clang/3.6.1/../../../include
End of search list.
 "/usr/bin/x86_64-w64-mingw32-gcc" -v -isystem
/usr/x86_64-w64-mingw32/sys-root/x86_64-w64-mingw32/include -m64 -o
a.exe /tmp/nic-e31eb1.o -liphlpapi
Using built-in specs.
COLLECT_GCC=/usr/bin/x86_64-w64-mingw32-gcc
COLLECT_LTO_WRAPPER=/usr/lib64/gcc/x86_64-w64-mingw32/5.1.0/lto-wrapper
Target: x86_64-w64-mingw32
Configured with: ../configure --prefix=/usr --bindir=/usr/bin
--includedir=/usr/include --libdir=/usr/lib64 --libexecdir=/usr/lib64
--mandir=/usr/share/man --infodir=/usr/share/info --datadir=/usr/share
--build=x86_64-suse-linux-gnu --host=x86_64-suse-linux-gnu
--target=x86_64-w64-mingw32 --with-gnu-as --with-gnu-ld --verbose
--without-newlib --disable-multilib --disable-plugin
--with-system-zlib --disable-nls --without-included-gettext
--disable-win32-registry --enable-version-specific-runtime-libs
--with-sysroot=/usr/x86_64-w64-mingw32/sys-root
--enable-languages=c,c++,fortran,objc,obj-c++ --without-x
--enable-hash-synchronization --enable-fully-dynamic-string
--enable-libgomp --enable-linker-build-id
Thread model: win32
gcc version 5.1.0 (GCC)
COMPILER_PATH=/usr/lib64/gcc/x86_64-w64-mingw32/5.1.0/:/usr/lib64/gcc/x86_64-w64-mingw32/5.1.0/:/usr/lib64/gcc/x86_64-w64-mingw32/:/usr/lib64/gcc/x86_64-w64-mingw32/5.1.0/:/usr/lib64/gcc/x86_64-w64-mingw32/:/usr/lib64/gcc/x86_64-w64-mingw32/5.1.0/../../../../x86_64-w64-mingw32/bin/
LIBRARY_PATH=/usr/lib64/gcc/x86_64-w64-mingw32/5.1.0/:/usr/lib64/gcc/x86_64-w64-mingw32/5.1.0/../../../../x86_64-w64-mingw32/lib/../lib/:/usr/x86_64-w64-mingw32/sys-root/mingw/lib/../lib/:/usr/lib64/gcc/x86_64-w64-mingw32/5.1.0/../../../../x86_64-w64-mingw32/lib/:/usr/x86_64-w64-mingw32/sys-root/mingw/lib/
COLLECT_GCC_OPTIONS='-v' '-isystem'
'/usr/x86_64-w64-mingw32/sys-root/x86_64-w64-mingw32/include' '-m64'
'-o' 'a.exe' '-mtune=generic' '-march=x86-64'
 /usr/lib64/gcc/x86_64-w64-mingw32/5.1.0/collect2 -plugin
/usr/lib64/gcc/x86_64-w64-mingw32/5.1.0/liblto_plugin.so
-plugin-opt=/usr/lib64/gcc/x86_64-w64-mingw32/5.1.0/lto-wrapper
-plugin-opt=-fresolution=/tmp/ccd7Jm2a.res
-plugin-opt=-pass-through=-lmingw32 -plugin-opt=-pass-through=-lgcc
-plugin-opt=-pass-through=-lgcc_eh
-plugin-opt=-pass-through=-lmoldname
-plugin-opt=-pass-through=-lmingwex -plugin-opt=-pass-through=-lmsvcrt
-plugin-opt=-pass-through=-ladvapi32
-plugin-opt=-pass-through=-lshell32 -plugin-opt=-pass-through=-luser32
-plugin-opt=-pass-through=-lkernel32
-plugin-opt=-pass-through=-lmingw32 -plugin-opt=-pass-through=-lgcc
-plugin-opt=-pass-through=-lgcc_eh
-plugin-opt=-pass-through=-lmoldname
-plugin-opt=-pass-through=-lmingwex -plugin-opt=-pass-through=-lmsvcrt
--sysroot=/usr/x86_64-w64-mingw32/sys-root --build-id -m i386pep
-Bdynamic -o a.exe
/usr/x86_64-w64-mingw32/sys-root/mingw/lib/../lib/crt2.o
/usr/lib64/gcc/x86_64-w64-mingw32/5.1.0/crtbegin.o
-L/usr/lib64/gcc/x86_64-w64-mingw32/5.1.0
-L/usr/lib64/gcc/x86_64-w64-mingw32/5.1.0/../../../../x86_64-w64-mingw32/lib/../lib
-L/usr/x86_64-w64-mingw32/sys-root/mingw/lib/../lib
-L/usr/lib64/gcc/x86_64-w64-mingw32/5.1.0/../../../../x86_64-w64-mingw32/lib
-L/usr/x86_64-w64-mingw32/sys-root/mingw/lib /tmp/nic-e31eb1.o
-liphlpapi -lmingw32 -lgcc -lgcc_eh -lmoldname -lmingwex -lmsvcrt
-ladvapi32 -lshell32 -luser32 -lkernel32 -lmingw32 -lgcc -lgcc_eh
-lmoldname -lmingwex -lmsvcrt
/usr/lib64/gcc/x86_64-w64-mingw32/5.1.0/crtend.o


On Fri, Jul 10, 2015 at 9:55 PM, Yaron Keren <yaron.keren at gmail.com> wrote:
> OK, please help me understand,
>
> Where are the include directories?
> Where are the lib directories?
> Is gcc on the path? where?
> Should clang have a default hardcoed sysroot location on Linux which is not
> based on clang installed location?
>
>
> 2015-07-10 21:45 GMT+03:00 İsmail Dönmez <ismail at donmez.ws>:
>>
>> The problem is this exact command line worked since forever and only
>> recently regressed thats why I report it.
>>
>> On Fri, Jul 10, 2015 at 9:38 PM, Yaron Keren <yaron.keren at gmail.com>
>> wrote:
>> > clang can locate  /usr/x86_64-w64-mingw32/sys-root if provided to the
>> > -sysroot option or deduce sysroot automatically if it finds
>> > /usr/x86_64-w64-mingw32/sys-root/bin/gcc binary on the path.
>> >
>> > clang does not deduce the sysroot from the -isystem directory by itself.
>> >
>> >
>> >
>> >
>> > 2015-07-10 19:57 GMT+03:00 İsmail Dönmez <ismail at donmez.ws>:
>> >>
>> >> Anyhow this is not a nice example since it uses Cygwin's ld. A better
>> >> example from Linux side:
>> >>
>> >> λ clang -v -target x86_64-w64-mingw32 -isystem
>> >> /usr/x86_64-w64-mingw32/sys-root/x86_64-w64-mingw32/include
>> >> randomworks/windows/nic.c
>> >> clang version 3.7.0 (trunk 241471)
>> >> Target: x86_64-w64-windows-gnu
>> >> Thread model: posix
>> >>  "/opt/clang/bin/clang-3.7" -cc1 -triple x86_64-w64-windows-gnu
>> >> -emit-obj -mrelax-all -disable-free -main-file-name nic.c
>> >> -mrelocation-model pic -pic-level 2 -mthread-model posix -fmath-errno
>> >> -masm-verbose -mconstructor-aliases -munwind-tables -target-cpu x86-64
>> >> -momit-leaf-frame-pointer -v -dwarf-column-info -resource-dir
>> >> /opt/clang/bin/../lib64/clang/3.7.0 -isystem
>> >> /usr/x86_64-w64-mingw32/sys-root/x86_64-w64-mingw32/include
>> >> -internal-isystem /opt/clang/bin/../lib64/clang/3.7.0/include
>> >> -internal-isystem include -internal-isystem include-fixed
>> >> -internal-isystem /usr/mingw32/include -internal-isystem /usr/include
>> >> -fdebug-compilation-dir /home/ismail -ferror-limit 19 -fmessage-length
>> >> 126 -mstackrealign -fno-use-cxa-atexit -fobjc-runtime=gcc
>> >> -fdiagnostics-show-option -fcolor-diagnostics -o /tmp/nic-08e945.o -x
>> >> c randomworks/windows/nic.c
>> >> clang -cc1 version 3.7.0 based upon LLVM 3.7.0svn default target
>> >> x86_64-suse-linux
>> >> ignoring nonexistent directory "include"
>> >> ignoring nonexistent directory "include-fixed"
>> >> ignoring nonexistent directory "/usr/mingw32/include"
>> >> #include "..." search starts here:
>> >> #include <...> search starts here:
>> >>  /usr/x86_64-w64-mingw32/sys-root/x86_64-w64-mingw32/include
>> >>  /opt/clang/bin/../lib64/clang/3.7.0/include
>> >>  /usr/include
>> >> End of search list.
>> >>  "/usr/bin/x86_64-w64-mingw32-ld" -m i386pep -Bdynamic -o a.exe crt2.o
>> >> crtbegin.o -L -L/usr/lib -L/usr/mingw32/lib /tmp/nic-08e945.o
>> >> -lmingw32 -lgcc_s -lgcc -lmoldname -lmingwex -lmsvcrt -ladvapi32
>> >> -lshell32 -luser32 -lkernel32 -lmingw32 -lgcc_s -lgcc -lmoldname
>> >> -lmingwex -lmsvcrt crtend.o
>> >> /usr/bin/x86_64-w64-mingw32-ld: cannot find crt2.o: No such file or
>> >> directory
>> >> /usr/bin/x86_64-w64-mingw32-ld: cannot find crtbegin.o: No such file
>> >> or directory
>> >> /usr/bin/x86_64-w64-mingw32-ld: cannot find -lmingw32
>> >> /usr/bin/x86_64-w64-mingw32-ld: cannot find -lgcc_s
>> >> /usr/bin/x86_64-w64-mingw32-ld: cannot find -lgcc
>> >> /usr/bin/x86_64-w64-mingw32-ld: cannot find -lmoldname
>> >> /usr/bin/x86_64-w64-mingw32-ld: cannot find -lmingwex
>> >> /usr/bin/x86_64-w64-mingw32-ld: cannot find -lmsvcrt
>> >> /usr/bin/x86_64-w64-mingw32-ld: cannot find -ladvapi32
>> >> /usr/bin/x86_64-w64-mingw32-ld: cannot find -lshell32
>> >> /usr/bin/x86_64-w64-mingw32-ld: cannot find -luser32
>> >> /usr/bin/x86_64-w64-mingw32-ld: cannot find -lkernel32
>> >> /usr/bin/x86_64-w64-mingw32-ld: cannot find -lmingw32
>> >> /usr/bin/x86_64-w64-mingw32-ld: cannot find -lgcc_s
>> >> /usr/bin/x86_64-w64-mingw32-ld: cannot find -lgcc
>> >> /usr/bin/x86_64-w64-mingw32-ld: cannot find -lmoldname
>> >> /usr/bin/x86_64-w64-mingw32-ld: cannot find -lmingwex
>> >> /usr/bin/x86_64-w64-mingw32-ld: cannot find -lmsvcrt
>> >> /usr/bin/x86_64-w64-mingw32-ld: cannot find crtend.o: No such file or
>> >> directory
>> >> clang-3.7: error: linker command failed with exit code 1 (use -v to
>> >> see invocation)
>> >>
>> >>
>> >> On Fri, Jul 10, 2015 at 7:54 PM, İsmail Dönmez <ismail at donmez.ws>
>> >> wrote:
>> >> > This is without any patches (r241901-win64) and the original command
>> >> > line is there:
>> >> >
>> >> > clang -v -target x86_64-w64-mingw32 -isystem
>> >> >  C:/mingw-w64-6.0.0/x86_64-w64-mingw32/include -isystem
>> >> >  C:/mingw-w64-6.0.0/include/c++/6.0.0 -isystem
>> >> >  C:/mingw-w64-6.0.0/include/c++/6.0.0/x86_64-w64-mingw32
>> >> >  randomworks/windows/nic.c
>> >> >
>> >> >
>> >> > On Fri, Jul 10, 2015 at 7:51 PM, Yaron Keren <yaron.keren at gmail.com>
>> >> > wrote:
>> >> >> This is with or without any patches? what is the original command
>> >> >> line?
>> >> >>
>> >> >>
>> >> >> 2015-07-10 19:30 GMT+03:00 İsmail Dönmez <ismail at donmez.ws>:
>> >> >>>
>> >> >>> Hi,
>> >> >>>
>> >> >>> I meant to try these but both on cygwin and linux hosts we have
>> >> >>> linking regression that goes like:
>> >> >>>
>> >> >>> λ clang -v -target x86_64-w64-mingw32 -isystem
>> >> >>> C:/mingw-w64-6.0.0/x86_64-w64-mingw32/include -isystem
>> >> >>> C:/mingw-w64-6.0.0/include/c++/6.0.0 -isystem
>> >> >>> C:/mingw-w64-6.0.0/include/c++/6.0.0/x86_64-w64-mingw32
>> >> >>> randomworks/windows/nic.c
>> >> >>> clang version 3.7.0 (https://github.com/llvm-mirror/clang.git
>> >> >>> ca355c9f413a6ca4941e3033e89e5242e29bd802)
>> >> >>> Target: x86_64-w64-windows-gnu
>> >> >>> Thread model: posix
>> >> >>>  "C:\\Program Files\\LLVM\\bin\\clang.exe" -cc1 -triple
>> >> >>> x86_64-w64-windows-gnu -emit-obj -mrelax-all -disable-free
>> >> >>> -main-file-name nic.c -mrelocation-model pic -pic-level 2
>> >> >>> -mthread-model posix -fmath-errno -masm-verbose
>> >> >>> -mconstructor-aliases
>> >> >>> -munwind-tables -target-cpu x86-64 -momit-leaf-frame-pointer -v
>> >> >>> -dwarf-column-info -resource-dir "C:\\Program
>> >> >>> Files\\LLVM\\bin\\..\\lib\\clang\\3.7.0" -isystem
>> >> >>> C:/mingw-w64-6.0.0/x86_64-w64-mingw32/include -isystem
>> >> >>> C:/mingw-w64-6.0.0/include/c++/6.0.0 -isystem
>> >> >>> C:/mingw-w64-6.0.0/include/c++/6.0.0/x86_64-w64-mingw32
>> >> >>> -internal-isystem "C:\\Program
>> >> >>> Files\\LLVM\\bin\\..\\lib\\clang\\3.7.0\\include" -internal-isystem
>> >> >>> include -internal-isystem include-fixed -internal-isystem
>> >> >>> "C:\\cygwin64\\mingw32\\include" -internal-isystem
>> >> >>> "C:\\cygwin64\\include" -std=c11 -fdebug-compilation-dir
>> >> >>> "C:\\cygwin64\\home\\ismail" -ferror-limit 19 -fmessage-length 0
>> >> >>> -mstackrealign -fno-use-cxa-atexit -fobjc-runtime=gcc
>> >> >>> -fdiagnostics-show-option -fcolor-diagnostics -fansi-escape-codes
>> >> >>> -o
>> >> >>> "C:\\cygwin64\\tmp\\nic-6bff3b.o" -x c randomworks/windows/nic.c
>> >> >>> clang -cc1 version 3.7.0 based upon LLVM 3.7.0svn default target
>> >> >>> x86_64-pc-windows-msvc
>> >> >>> ignoring nonexistent directory "include"
>> >> >>> ignoring nonexistent directory "include-fixed"
>> >> >>> ignoring nonexistent directory "C:\cygwin64\mingw32\include"
>> >> >>> ignoring nonexistent directory "C:\cygwin64\include"
>> >> >>> #include "..." search starts here:
>> >> >>> #include <...> search starts here:
>> >> >>>  C:/mingw-w64-6.0.0/x86_64-w64-mingw32/include
>> >> >>>  C:/mingw-w64-6.0.0/include/c++/6.0.0
>> >> >>>  C:/mingw-w64-6.0.0/include/c++/6.0.0/x86_64-w64-mingw32
>> >> >>>  C:\Program Files\LLVM\bin\..\lib\clang\3.7.0\include
>> >> >>> End of search list.
>> >> >>>  "C:\\cygwin64\\bin\\ld.exe" -m i386pep -Bdynamic -o a.exe crt2.o
>> >> >>> crtbegin.o -L "-LC:\\cygwin64\\lib" "-LC:\\cygwin64\\mingw32\\lib"
>> >> >>> "C:\\cygwin64\\tmp\\nic-6bff3b.o" -lmingw32 -lgcc_s -lgcc
>> >> >>> -lmoldname
>> >> >>> -lmingwex -lmsvcrt -ladvapi32 -lshell32 -luser32 -lkernel32
>> >> >>> -lmingw32
>> >> >>> -lgcc_s -lgcc -lmoldname -lmingwex -lmsvcrt crtend.o
>> >> >>> /usr/bin/ld: cannot find crt2.o: No such file or directory
>> >> >>> /usr/bin/ld: cannot find crtbegin.o: No such file or directory
>> >> >>> /usr/bin/ld: cannot find -lmingw32
>> >> >>> /usr/bin/ld: cannot find -lgcc_s
>> >> >>> /usr/bin/ld: cannot find -lgcc
>> >> >>> /usr/bin/ld: cannot find -lmoldname
>> >> >>> /usr/bin/ld: cannot find -lmingwex
>> >> >>> /usr/bin/ld: cannot find -lmsvcrt
>> >> >>> /usr/bin/ld: cannot find -lmingw32
>> >> >>> /usr/bin/ld: cannot find -lgcc_s
>> >> >>> /usr/bin/ld: cannot find -lgcc
>> >> >>> /usr/bin/ld: cannot find -lmoldname
>> >> >>> /usr/bin/ld: cannot find -lmingwex
>> >> >>> /usr/bin/ld: cannot find -lmsvcrt
>> >> >>> /usr/bin/ld: cannot find crtend.o: No such file or directory
>> >> >>> clang.exe: error: linker command failed with exit code 1 (use -v to
>> >> >>> see invocation)
>> >> >>>
>> >> >>> Any ideas? Also reproducible with gcc 5.1.1 on Linux.
>> >> >>>
>> >> >>>
>> >> >>> On Tue, Jul 7, 2015 at 6:19 PM, Yaron Keren <yaron.keren at gmail.com>
>> >> >>> wrote:
>> >> >>> > Here is a patch honoring sysroot for ld, let me know if it works
>> >> >>> > for
>> >> >>> > you.
>> >> >>> >
>> >> >>> > 2015-07-07 12:13 GMT+03:00 Yaron Keren <yaron.keren at gmail.com>:
>> >> >>> >>
>> >> >>> >> Hi,  Please see if the attached patch works on opensuse.
>> >> >>> >>
>> >> >>> >> I'll look at the cygnus ld issue later.
>> >> >>> >>
>> >> >>> >>
>> >> >>> >> 2015-07-07 10:38 GMT+03:00 İsmail Dönmez <ismail at donmez.ws>:
>> >> >>> >>>
>> >> >>> >>> Hi,
>> >> >>> >>>
>> >> >>> >>> On Mon, Jul 6, 2015 at 10:40 AM, Yaron Keren
>> >> >>> >>> <yaron.keren at gmail.com>
>> >> >>> >>> wrote:
>> >> >>> >>> > Author: yrnkrn
>> >> >>> >>> > Date: Mon Jul  6 02:40:10 2015
>> >> >>> >>> > New Revision: 241432
>> >> >>> >>> >
>> >> >>> >>> > URL: http://llvm.org/viewvc/llvm-project?rev=241432&view=rev
>> >> >>> >>> > Log:
>> >> >>> >>> > Teach mingw toolchain the msys2 mingw-w64 distribution C++
>> >> >>> >>> > dirs.
>> >> >>> >>> >
>> >> >>> >>> >
>> >> >>> >>> > Modified:
>> >> >>> >>> >     cfe/trunk/lib/Driver/MinGWToolChain.cpp
>> >> >>> >>> >     cfe/trunk/lib/Driver/ToolChains.h
>> >> >>> >>>
>> >> >>> >>> I tried this revision on openSUSE MinGW toolchain and its
>> >> >>> >>> missing
>> >> >>> >>> one
>> >> >>> >>> include path, which is $GCC_ROOT/nclude/c++/x86_64-w64-mingw32
>> >> >>> >>> which
>> >> >>> >>> contains "bits" and "ext" directories. Would you mind adding
>> >> >>> >>> that
>> >> >>> >>> to
>> >> >>> >>> the list too?
>> >> >>> >>>
>> >> >>> >>> Thanks!
>> >> >>> >>
>> >> >>> >>
>> >> >>> >
>> >> >>
>> >> >>
>> >
>> >
>
>




More information about the cfe-commits mailing list