public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
* [PATCH] Build/Cross: Look for target headers from include if sys-include doesn't exist
@ 2024-06-14 12:12 YunQiang Su
  2024-06-22  6:21 ` YunQiang Su
  0 siblings, 1 reply; 2+ messages in thread
From: YunQiang Su @ 2024-06-14 12:12 UTC (permalink / raw)
  To: gcc-patches
  Cc: marcuscalhounlopez, sjames, jeffreyalaw, richard.sandiford, doko,
	YunQiang Su

PR 115416

When we build a cross toolchain, while without --with-sysroot,
target headers are expected in
  ${test_exec_prefix}/${target_noncanonical}/sys-include
while it is true only with --with-headers option is used. In other
cases, the path should be
  ${test_exec_prefix}/${target_noncanonical}/include
such as Debian's cross toolchain.

Debian's cross toolchain has directory structures like:
   /usr/<triple>/lib
                /include
                /bin/<binutils-exe>

For this case, we cannot use "--prefix=/usr --with-sysroot=/", as
gcc/configure will use headers of build, aka in /usr/include to detect
features.  And fixinclude also uses the headers of build.

Let's use the `include` if `sys-include` doesn't exist.

For Makefile.in, the compare @includedir@ and $(prefix)/include is not
correct, as the --includedir option is used to set where the headers
should be installed.

gcc:
	PR 115415.
	configure.ac: Set target_header_dir and CROSS_SYSTEM_HEADER_DIR
	to ${test_exec_prefix}/${target_noncanonical}/include when cross
	and without --with-sysroot and without --with-headers.
	configure: Regenerate.
	Makefile.in: Set CROSS_SYSTEM_HEADER_DIR as configure, and don't
	compare @includedir@ and $(prefix)/include.
---
 gcc/Makefile.in  | 6 +-----
 gcc/configure    | 8 ++++++--
 gcc/configure.ac | 4 ++++
 3 files changed, 11 insertions(+), 7 deletions(-)

diff --git a/gcc/Makefile.in b/gcc/Makefile.in
index f5adb647d3f..349f988dc08 100644
--- a/gcc/Makefile.in
+++ b/gcc/Makefile.in
@@ -560,11 +560,7 @@ LINKER_PLUGIN_API_H = $(srcdir)/../include/plugin-api.h
 # Default native SYSTEM_HEADER_DIR, to be overridden by targets.
 NATIVE_SYSTEM_HEADER_DIR = @NATIVE_SYSTEM_HEADER_DIR@
 # Default cross SYSTEM_HEADER_DIR, to be overridden by targets.
-ifeq (@includedir@,$(prefix)/include)
-  CROSS_SYSTEM_HEADER_DIR = @CROSS_SYSTEM_HEADER_DIR@
-else
-  CROSS_SYSTEM_HEADER_DIR = @includedir@
-endif
+CROSS_SYSTEM_HEADER_DIR = @CROSS_SYSTEM_HEADER_DIR@
 
 # autoconf sets SYSTEM_HEADER_DIR to one of the above.
 # Purge it of unnecessary internal relative paths
diff --git a/gcc/configure b/gcc/configure
index aaf5899cc03..d11e97d1758 100755
--- a/gcc/configure
+++ b/gcc/configure
@@ -15124,6 +15124,10 @@ if test x$host != x$target || test "x$TARGET_SYSTEM_ROOT" != x ||
     target_header_dir="${with_build_sysroot}${native_system_header_dir}"
   elif test "x$with_sysroot" = x; then
     target_header_dir="${test_exec_prefix}/${target_noncanonical}/sys-include"
+    if ! test -d ${target_header_dir};then
+      target_header_dir="${test_exec_prefix}/${target_noncanonical}/include"
+    fi
+    CROSS_SYSTEM_HEADER_DIR=${target_header_dir}
   elif test "x$with_sysroot" = xyes; then
     target_header_dir="${test_exec_prefix}/${target_noncanonical}/sys-root${native_system_header_dir}"
   else
@@ -21410,7 +21414,7 @@ else
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
   lt_status=$lt_dlunknown
   cat > conftest.$ac_ext <<_LT_EOF
-#line 21413 "configure"
+#line 21417 "configure"
 #include "confdefs.h"
 
 #if HAVE_DLFCN_H
@@ -21516,7 +21520,7 @@ else
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
   lt_status=$lt_dlunknown
   cat > conftest.$ac_ext <<_LT_EOF
-#line 21519 "configure"
+#line 21523 "configure"
 #include "confdefs.h"
 
 #if HAVE_DLFCN_H
diff --git a/gcc/configure.ac b/gcc/configure.ac
index f8d67efeb98..54e6776747e 100644
--- a/gcc/configure.ac
+++ b/gcc/configure.ac
@@ -2512,6 +2512,10 @@ if test x$host != x$target || test "x$TARGET_SYSTEM_ROOT" != x ||
     target_header_dir="${with_build_sysroot}${native_system_header_dir}"
   elif test "x$with_sysroot" = x; then
     target_header_dir="${test_exec_prefix}/${target_noncanonical}/sys-include"
+    if test -d ${target_header_dir};then
+      target_header_dir="${test_exec_prefix}/${target_noncanonical}/include"
+    fi
+    CROSS_SYSTEM_HEADER_DIR=${target_header_dir}
   elif test "x$with_sysroot" = xyes; then
     target_header_dir="${test_exec_prefix}/${target_noncanonical}/sys-root${native_system_header_dir}"
   else
-- 
2.39.3 (Apple Git-146)


^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: [PATCH] Build/Cross: Look for target headers from include if sys-include doesn't exist
  2024-06-14 12:12 [PATCH] Build/Cross: Look for target headers from include if sys-include doesn't exist YunQiang Su
@ 2024-06-22  6:21 ` YunQiang Su
  0 siblings, 0 replies; 2+ messages in thread
From: YunQiang Su @ 2024-06-22  6:21 UTC (permalink / raw)
  To: gcc-patches
  Cc: marcuscalhounlopez, sjames, jeffreyalaw, richard.sandiford, doko

YunQiang Su <syq@gcc.gnu.org> 于2024年6月14日周五 20:12写道:
>
> PR 115416
>
> When we build a cross toolchain, while without --with-sysroot,
> target headers are expected in
>   ${test_exec_prefix}/${target_noncanonical}/sys-include
> while it is true only with --with-headers option is used. In other
> cases, the path should be
>   ${test_exec_prefix}/${target_noncanonical}/include
> such as Debian's cross toolchain.
>
> Debian's cross toolchain has directory structures like:
>    /usr/<triple>/lib
>                 /include
>                 /bin/<binutils-exe>
>
> For this case, we cannot use "--prefix=/usr --with-sysroot=/", as
> gcc/configure will use headers of build, aka in /usr/include to detect
> features.  And fixinclude also uses the headers of build.
>
> Let's use the `include` if `sys-include` doesn't exist.
>
> For Makefile.in, the compare @includedir@ and $(prefix)/include is not
> correct, as the --includedir option is used to set where the headers
> should be installed.
>
> gcc:
>         PR 115415.
>         configure.ac: Set target_header_dir and CROSS_SYSTEM_HEADER_DIR
>         to ${test_exec_prefix}/${target_noncanonical}/include when cross
>         and without --with-sysroot and without --with-headers.
>         configure: Regenerate.
>         Makefile.in: Set CROSS_SYSTEM_HEADER_DIR as configure, and don't
>         compare @includedir@ and $(prefix)/include.
> ---
>  gcc/Makefile.in  | 6 +-----
>  gcc/configure    | 8 ++++++--
>  gcc/configure.ac | 4 ++++
>  3 files changed, 11 insertions(+), 7 deletions(-)
>

Gently ping.

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2024-06-22  6:21 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-06-14 12:12 [PATCH] Build/Cross: Look for target headers from include if sys-include doesn't exist YunQiang Su
2024-06-22  6:21 ` YunQiang Su

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).