]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
cygwin: Don't try to support multilibs [PR107998]
authorJakub Jelinek <jakub@redhat.com>
Wed, 22 Feb 2023 09:25:04 +0000 (10:25 +0100)
committerJonathan Yong <10walls@gmail.com>
Fri, 10 Mar 2023 10:17:57 +0000 (10:17 +0000)
As discussed in the PR, t-cygwin-w64 file has been introduced in 2013
and has one important problem, two different multilib options -m64 and -m32,
but MULTILIB_DIRNAMES with just one word in it.
Before the genmultilib sanity checking was added, my understanding is that
this essentially resulted in effective --disable-multilib,
$ gcc -print-multi-lib
.;
;@m32
$ gcc -print-multi-directory
.
$ gcc -print-multi-directory -m64
.
$ gcc -print-multi-directory -m32

$ gcc -print-multi-os-directory
../lib
$ gcc -print-multi-os-directory -m64
../lib
$ gcc -print-multi-os-directory -m32
../lib32
and because of the way e.g. config-ml.in operates
multidirs=
for i in `${CC-gcc} --print-multi-lib 2>/dev/null`; do
  dir=`echo $i | sed -e 's/;.*$//'`
  if [ "${dir}" = "." ]; then
    true
  else
    if [ -z "${multidirs}" ]; then
      multidirs="${dir}"
    else
      multidirs="${multidirs} ${dir}"
    fi
  fi
done
dir was . first time (and so nothing was done) and empty
second time, multidirs empty too, so multidirs was set to empty
like it would be with --disable-multilib.

With the added sanity checking the build fails unless --disable-multilib
is used in configure (dunno whether people usually configure that way
on cygwin).

>From what has been said in the PR, multilibs were not meant to be supported
and e.g. cygwin headers probably aren't ready for it.

So the following patch just removes the file with the (incorrect) multilib
stuff instead of fixing it (say by setting MULTILIB_DIRNAMES to 64 32).

I have no way to test this though, no Windows around, can anyone please
test this?  I just would like to get some progress on the P1s we have...

2023-02-22  Jakub Jelinek  <jakub@redhat.com>

gcc/ChangeLog:

PR target/107998
* config.gcc (x86_64-*-cygwin*): Don't add i386/t-cygwin-w64 into
$tmake_file.
* config/i386/t-cygwin-w64: Remove.

Signed-off-by: Jonathan Yong <10walls@gmail.com>
gcc/config.gcc
gcc/config/i386/t-cygwin-w64

index da3a6d3ba1f3ee184314e09453cbf1bbdf05faf4..f986224817a12888e51be3873b6f230ea900bccb 100644 (file)
@@ -2105,7 +2105,7 @@ x86_64-*-cygwin*)
        need_64bit_isa=yes
        tm_file="${tm_file} i386/unix.h i386/bsd.h i386/gas.h i386/cygming.h i386/cygwin.h i386/cygwin-w64.h i386/cygwin-stdint.h"
        xm_file=i386/xm-cygwin.h
-       tmake_file="${tmake_file} i386/t-cygming t-slibgcc i386/t-cygwin-w64"
+       tmake_file="${tmake_file} i386/t-cygming t-slibgcc"
        target_gtfiles="$target_gtfiles \$(srcdir)/config/i386/winnt.cc"
        extra_options="${extra_options} i386/cygming.opt i386/cygwin.opt"
        extra_objs="${extra_objs} winnt.o winnt-stubs.o"
index 01968fd88c3a1fc9315a710b770baa39dc60e6ef..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 100644 (file)
@@ -1,3 +0,0 @@
-MULTILIB_OPTIONS = m64/m32
-MULTILIB_DIRNAMES = 64
-MULTILIB_OSDIRNAMES = ../lib ../lib32