On Thu, Jan 11, 2024 at 4:01 AM Jonathan Wakely <jwak...@redhat.com> wrote: > > On Thu, 11 Jan 2024 at 11:28, Ken Matsui <kmat...@gcc.gnu.org> wrote: > > > > On Thu, 11 Jan 2024 at 10:50, Jonathan Wakely <jwak...@redhat.com> wrote: > > > On Thu, 11 Jan 2024 at 10:12, Ken Matsui <kmat...@cs.washington.edu> > > > wrote: > > > > > > > > On Thu, 11 Jan 2024 at 09:55, Jonathan Wakely <jwakely....@gmail.com> > > > > wrote: > > > > > On Thu, 11 Jan 2024, 09:43 Ken Matsui, <[1]kmat...@gcc.gnu.org> > > > > > wrote: > > > > > > > > > > > libstdc++-v3/ChangeLog: > > > > > > > > > > > * src/filesystem/ops-common.h (stat_type): Use using. > > > > > > > > > > > Signed-off-by: Ken Matsui <[2]kmat...@gcc.gnu.org> > > > > > > --- > > > > > > libstdc++-v3/src/filesystem/ops-common.h | 4 ++-- > > > > > > 1 file changed, 2 insertions(+), 2 deletions(-) > > > > > > > > > > > diff --git a/libstdc++-v3/src/filesystem/ops-common.h > > > > > > b/libstdc++-v3/src/filesystem/ops-common.h > > > > > > index d78a54754c2..e302d8caae6 100644 > > > > > > --- a/libstdc++-v3/src/filesystem/ops-common.h > > > > > > +++ b/libstdc++-v3/src/filesystem/ops-common.h > > > > > > @@ -118,7 +118,7 @@ namespace __gnu_posix > > > > > > inline int close(int fd) > > > > > > { return ::_close(fd); } > > > > > > > > > > > - typedef struct ::__stat64 stat_type; > > > > > > + using stat_type = struct ::_stat64; > > > > > > > > > > You've removed an underscore, is that intentional? Has this been > > > > > compiled > > > > > + tested with mingw? > > > > This is totally unintentional. I'll fix it. I've tested it with Linux > > > > and do not have a mingw environment to test it with. Would you have any > > > > suggestions on how to test it? > > > > > > If your linux distro has prebuilt packages for mingw-w64-g++ then it's > > > pretty easy to build a new compiler from trunk. I can give you a > > > simple recipe for doing it on Fedora. > > > > > > In the meanwhile, I can test your updated patch for you. > > > > > > > I am using Ubuntu and was able to install mingw-w64-g++ with apt. I > > tried the following command to test the patch: > > > > make check-target-libstdc++-v3 ALT_CXX_UNDER_TEST="$(which > > x86_64-w64-mingw32-g++)" RUNTESTFLAGS='conformance.exp=filesystem/*' > > > > But it looks like the test is not using the mingw compiler. Also, > > when we want to test to build GCC with a different compiler, do we > > need to rebuild the whole GCC again (i.e., make clean && export CXX=... > > && make)? > > Don't use 'make clean' with GCC, it doesn't work well. Just remove the > build directory. > > Rebuilding with CXX set to your mingw compiler will not work. That > would try to compile gcc using the mingw compiler, producing a > compiler that would *run* on Windows. That's not what you want. You > need to configure gcc with --target=x86_64-w64-mingw32 to build a > compiler that *runs* on linux, but targets Windows. > > Do this in a separate build directory, don't try to reuse the same > build directory that you already have for a native linux compiler. > > > > > I really appreciate your recipe if it also works for Ubuntu. Thank you! > > Here's what I do on Fedora: > https://gist.github.com/jwakely/5579a4be12a86495d47cb5519f671b12#file-mingw-build-sh > > To figure that command out I checked the output of x86_64-w64-mingw32-g++ -v > That will show you the sysroot used by the Ubuntu mingw compiler, and > the other options it was built with. Copy the relevant ones and add > those to your configure command for your mingw cross-compiler. On my > systems, the configure command is: > > ../gcc/configure --prefix=/home/jwakely/gcc/mingw --with-gnu-as > --with-as=/usr/bin/x86_64-w64-mingw32-as --with-gnu-ld > --with-ld=/usr/bin/x86_64-w64-mingw32-ld --without-newlib > --disable-multilib --disable-plugin --disable-libstdcxx-pch > --with-system-zlib --disable-nls --without-included-gettext > --disable-win32-registry --enable-threads=posix --enable-libgomp > --target=x86_64-w64-mingw32 > --with-sysroot=/usr/x86_64-w64-mingw32/sys-root > target_alias=x86_64-w64-mingw32 --enable-libstdcxx-debug > --disable-libgomp --enable-libstdcxx-backtrace > --enable-languages=c,c++ > > The relevant parts that I copied from the output of the system > 'x86_64-w64-mingw32-gcc -v' are: > > --with-as=/usr/bin/x86_64-w64-mingw32-as > --with-ld=/usr/bin/x86_64-w64-mingw32-ld --without-newlib > --disable-multilib --disable-plugin > --disable-win32-registry > --enable-threads=posix > --target=x86_64-w64-mingw32 > --with-sysroot=/usr/x86_64-w64-mingw32/sys-root > > You might want the same options, but the paths to the mingw32-as, > mingw32-ld and the sys-root will probably be different on Ubuntu. > > Looking at the -v output on Ubuntu, you probably want the > --with-headers option and --enable-fully-dynamic-string (to be > compatible with the system's mingw compiler) and > --enable-threads=win32 as well as the --with-as and --with-ld options. > You'll want to add a --prefix too so that you install somewhere under > your home directory, not under /usr > > You might need to experiment with configure options until you get > something to build that works. > > Once I have a mingw compiler that runs on my linux box, I use this > script to test it: > https://gist.github.com/jwakely/5579a4be12a86495d47cb5519f671b12#file-mingw_tests-sh > > Like so: > find ~/src/gcc/gcc/libstdc++-v3/testsuite/27_io/filesystem -type f > -name '*.cc' | ~/src/gcc/scripts/mingw_tests.sh > > That compiles all the 27_io filesystem tests using my mingw compiler > and then runs them using Wine. >
Thank you so much! I will try it!