Since the libatomic_asneeded libtool workarounds GCC no longer builds if
./configure is ran inside the source tree.

it fails at building libgomp with

checking whether the C compiler works... no
configure: error: in `/root/gcc-16.1.0/aarch64-unknown-linux-gnu/libgomp':
configure: error: C compiler cannot create executables
See `config.log' for more details
make[2]: *** [Makefile:23007: configure-stage1-target-libgomp] Error 77

This happens because in configure.ac there is

# --srcdir=. covers the toplevel, while "test -d" covers the subdirectories
if ( test $srcdir = . && test -d gcc ) \
   || test -d $srcdir/../host-${host_noncanonical}; then
  host_subdir="host-${host_noncanonical}"
else
  host_subdir=.
fi
# No prefix.
target_subdir=${target_noncanonical}

which shifts `host_subdir` to `host-${host_noncanonical}`

however the chunks in libatomic assumes that the `host_subdir` is `.` leading to
the builds not working.

This fixes it by passing HOST_SUBDIR down to child Makefiles and then using it
in libatomic.  It defaults to . in libatomic if not provided to support
standalone builds.

Bootstrapped Regtested on aarch64-none-linux-gnu,
arm-none-linux-gnueabihf, x86_64-pc-linux-gnu
-m32, -m64 and no issues.

Also tested an in source folder build and that works now too.

Ok for master? and backport to GCC 16 after some stew?

Thanks,
Tamar

ChangeLog:

        PR bootstrap/125583
        * Makefile.in: Pass HOST_SUBDIR down.
        * Makefile.tpl: likewise.

libatomic/ChangeLog:

        PR bootstrap/125583
        * Makefile.am: Use HOST_SUBDIR in gcc_objdir.
        * Makefile.in: Likewise.

---
diff --git a/Makefile.in b/Makefile.in
index 
f34142cc077dd9f647398b6185f2761361d16b75..15d1897a78240112ac56faa59ac5936b7759970c
 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -1111,6 +1111,7 @@ EXTRA_TARGET_FLAGS = \
        'GM2FLAGS=$$(GM2FLAGS_FOR_TARGET)' \
        'LD=$(COMPILER_LD_FOR_TARGET)' \
        'LDFLAGS=$$(LDFLAGS_FOR_TARGET)' \
+       'HOST_SUBDIR=$(HOST_SUBDIR)' \
        'LIBCFLAGS=$$(LIBCFLAGS_FOR_TARGET)' \
        'LIBCXXFLAGS=$$(LIBCXXFLAGS_FOR_TARGET)' \
        'NM=$(COMPILER_NM_FOR_TARGET)' \
diff --git a/Makefile.tpl b/Makefile.tpl
index 
5891b67b69749f6c122fcc0e851cc244fb655adc..af4a5d0c1951640581b1e450db642e5cd99cd440
 100644
--- a/Makefile.tpl
+++ b/Makefile.tpl
@@ -836,6 +836,7 @@ EXTRA_TARGET_FLAGS = \
        'GM2FLAGS=$$(GM2FLAGS_FOR_TARGET)' \
        'LD=$(COMPILER_LD_FOR_TARGET)' \
        'LDFLAGS=$$(LDFLAGS_FOR_TARGET)' \
+       'HOST_SUBDIR=$(HOST_SUBDIR)' \
        'LIBCFLAGS=$$(LIBCFLAGS_FOR_TARGET)' \
        'LIBCXXFLAGS=$$(LIBCXXFLAGS_FOR_TARGET)' \
        'NM=$(COMPILER_NM_FOR_TARGET)' \
diff --git a/libatomic/Makefile.am b/libatomic/Makefile.am
index 
49689d4510180eecb9b193de5db7ea5e8cffc139..8fb7390bcf187b29a89dc1ff97d2699be9d737ea
 100644
--- a/libatomic/Makefile.am
+++ b/libatomic/Makefile.am
@@ -180,7 +180,8 @@ all-multi: $(libatomic_la_LIBADD)
 # built after libatomic, which makes RPATH insecure. Removing libatomic.la
 # from $gcc_objdir seems to fix the issue.
 
-gcc_objdir = `pwd`/$(MULTIBUILDTOP)../../gcc/
+HOST_SUBDIR = .
+gcc_objdir = `pwd`/$(MULTIBUILDTOP)../../$(HOST_SUBDIR)/gcc/
 all-local: stmp-libatomic
 stmp-libatomic: libatomic.la
        $(LIBTOOL) --mode=install $(INSTALL_DATA) libatomic.la 
$(gcc_objdir)$(MULTISUBDIR)/
diff --git a/libatomic/Makefile.in b/libatomic/Makefile.in
index 
e7f12134ac5927116c1865437b6a3ca1631c839a..e315bfb288f68727a21e8966393190836e56fa54
 100644
--- a/libatomic/Makefile.in
+++ b/libatomic/Makefile.in
@@ -486,7 +486,8 @@ libatomic_convenience_la_LIBADD = $(libatomic_la_LIBADD)
 # which (somehow) ends up adding $gcc_objdir to RPATH for libraries that get
 # built after libatomic, which makes RPATH insecure. Removing libatomic.la
 # from $gcc_objdir seems to fix the issue.
-gcc_objdir = `pwd`/$(MULTIBUILDTOP)../../gcc/
+HOST_SUBDIR = .
+gcc_objdir = `pwd`/$(MULTIBUILDTOP)../../$(HOST_SUBDIR)/gcc/
 MULTISRCTOP = 
 MULTIBUILDTOP = 
 MULTIDIRS = 


-- 
diff --git a/Makefile.in b/Makefile.in
index f34142cc077dd9f647398b6185f2761361d16b75..15d1897a78240112ac56faa59ac5936b7759970c 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -1111,6 +1111,7 @@ EXTRA_TARGET_FLAGS = \
 	'GM2FLAGS=$$(GM2FLAGS_FOR_TARGET)' \
 	'LD=$(COMPILER_LD_FOR_TARGET)' \
 	'LDFLAGS=$$(LDFLAGS_FOR_TARGET)' \
+	'HOST_SUBDIR=$(HOST_SUBDIR)' \
 	'LIBCFLAGS=$$(LIBCFLAGS_FOR_TARGET)' \
 	'LIBCXXFLAGS=$$(LIBCXXFLAGS_FOR_TARGET)' \
 	'NM=$(COMPILER_NM_FOR_TARGET)' \
diff --git a/Makefile.tpl b/Makefile.tpl
index 5891b67b69749f6c122fcc0e851cc244fb655adc..af4a5d0c1951640581b1e450db642e5cd99cd440 100644
--- a/Makefile.tpl
+++ b/Makefile.tpl
@@ -836,6 +836,7 @@ EXTRA_TARGET_FLAGS = \
 	'GM2FLAGS=$$(GM2FLAGS_FOR_TARGET)' \
 	'LD=$(COMPILER_LD_FOR_TARGET)' \
 	'LDFLAGS=$$(LDFLAGS_FOR_TARGET)' \
+	'HOST_SUBDIR=$(HOST_SUBDIR)' \
 	'LIBCFLAGS=$$(LIBCFLAGS_FOR_TARGET)' \
 	'LIBCXXFLAGS=$$(LIBCXXFLAGS_FOR_TARGET)' \
 	'NM=$(COMPILER_NM_FOR_TARGET)' \
diff --git a/libatomic/Makefile.am b/libatomic/Makefile.am
index 49689d4510180eecb9b193de5db7ea5e8cffc139..8fb7390bcf187b29a89dc1ff97d2699be9d737ea 100644
--- a/libatomic/Makefile.am
+++ b/libatomic/Makefile.am
@@ -180,7 +180,8 @@ all-multi: $(libatomic_la_LIBADD)
 # built after libatomic, which makes RPATH insecure. Removing libatomic.la
 # from $gcc_objdir seems to fix the issue.
 
-gcc_objdir = `pwd`/$(MULTIBUILDTOP)../../gcc/
+HOST_SUBDIR = .
+gcc_objdir = `pwd`/$(MULTIBUILDTOP)../../$(HOST_SUBDIR)/gcc/
 all-local: stmp-libatomic
 stmp-libatomic: libatomic.la
 	$(LIBTOOL) --mode=install $(INSTALL_DATA) libatomic.la $(gcc_objdir)$(MULTISUBDIR)/
diff --git a/libatomic/Makefile.in b/libatomic/Makefile.in
index e7f12134ac5927116c1865437b6a3ca1631c839a..e315bfb288f68727a21e8966393190836e56fa54 100644
--- a/libatomic/Makefile.in
+++ b/libatomic/Makefile.in
@@ -486,7 +486,8 @@ libatomic_convenience_la_LIBADD = $(libatomic_la_LIBADD)
 # which (somehow) ends up adding $gcc_objdir to RPATH for libraries that get
 # built after libatomic, which makes RPATH insecure. Removing libatomic.la
 # from $gcc_objdir seems to fix the issue.
-gcc_objdir = `pwd`/$(MULTIBUILDTOP)../../gcc/
+HOST_SUBDIR = .
+gcc_objdir = `pwd`/$(MULTIBUILDTOP)../../$(HOST_SUBDIR)/gcc/
 MULTISRCTOP = 
 MULTIBUILDTOP = 
 MULTIDIRS = 

Reply via email to