This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
[PATCH] Fix fixincludes for canadian cross builds - next try
- From: Bernd Edlinger <bernd dot edlinger at hotmail dot de>
- Cc: Yvan Roux <yvan dot roux at linaro dot org>, Bruce Korb <bkorb at gnu dot org>, "gcc-patches at gcc dot gnu dot org" <gcc-patches at gcc dot gnu dot org>, Richard Biener <rguenther at suse dot de>, Jakub Jelinek <jakub at redhat dot com>, Jeff Law <law at redhat dot com>, Matthew Fortune <matthew dot fortune at imgtec dot com>
- Date: Thu, 20 Apr 2017 19:11:04 +0000
- Subject: [PATCH] Fix fixincludes for canadian cross builds - next try
- Authentication-results: sourceware.org; auth=none
- Authentication-results: linaro.org; dkim=none (message not signed) header.d=none;linaro.org; dmarc=none action=none header.from=hotmail.de;
- References: <AM4PR0701MB216279A16CA1B1D69DCFE1D7E4400@AM4PR0701MB2162.eurprd07.prod.outlook.com> <ae284938-736a-ae50-1380-86a5e03250fa@gnu.org> <HE1PR0701MB2169068DED45045785AED44BE45C0@HE1PR0701MB2169.eurprd07.prod.outlook.com> <4b114aec-1ab7-7054-1086-a06d3b358a27@gnu.org> <CAD57uCdjjVuo4Us=htfO7w-V=nJOa77VfiMoVpD7-hqW+z4S1A@mail.gmail.com> <AM4PR0701MB216243AFF31FFE670A5B88A8E4050@AM4PR0701MB2162.eurprd07.prod.outlook.com> <CAD57uCdV7B=gGdPKQGrkiQ-PooVXx=+3s54DiEnOqJ6nbe2g2w@mail.gmail.com> <AM4PR0701MB21625786BD18332B013D1A7CE4050@AM4PR0701MB2162.eurprd07.prod.outlook.com> <AM4PR0701MB2162041057D7A1F420A40C32E4190@AM4PR0701MB2162.eurprd07.prod.outlook.com> <CAD57uCdnq2EQ09sQMYca3LbOt633D0uk_TxFge=sQPoUMjUAbw@mail.gmail.com>
- Spamdiagnosticmetadata: NSPM
- Spamdiagnosticoutput: 1:99
Hi!
This is my new attempt to clean up the different cross compiler
configurations. It turned out to be a very complicated matter,
so I thought it would be better to postpone it to the stage1.
In a canadian cross compiler setup we have a different header dir path
for use in the build and later on the target, which is written to
install-tools/mkheaders.conf, so I propose to export SYSTEM_HEADER_DIR
and BUILD_SYSTEM_HEADER_DIR from configure.ac to be used in Makefile.in.
I also removed unnecessary handling of --with-headers, because
the headers are copied to sys-include and thus it is not necessary to
use the original path here.
If --with-sysroot or --with-build-sysroot is used the SYSTEM_HEADER_DIR
or BUILD_SYSTEM_HEADER_DIR contain $${sysroot_headers_suffix},
which is normally an empty string, but on mips it may be something
like "mips-r2" which gets appended to the sysroot for use of fixincludes
but "target_header_dir" which is used in configure to find things like
the GLIBC version it is not used. I assume that that either does
not create problems and is silently ignored, or that people have a
work around, my patch should not change that, however I have not been
able to setup a sysroot for mips*-img-linux* or mips*-mti-linux* which
seem to be the only targets where this might make a difference.
I have tested all different combinations of --with-sysroot /
--with-build-sysroot. Even a native build with --with-sysroot works.
Except go of course: cross-builds are a no-go area for the go language
in general ;)
As before I would appreciate your kind help with testing the many
different build setups.
So far I have tested native x86_64-pc-linux-gnu and arm-linux-gnueabihf
cross build configurations. And everything looks sane.
Is it OK for trunk?
Thanks
Bernd.
2017-04-18 Bernd Edlinger <bernd.edlinger@hotmail.de>
* configure.ac (SYSTEM_HEADER_DIR, BUILD_SYSTEM_HEADER_DIR,
target_header_dir): Set correctly.
* configure: Regenerated.
* Makefile.in (BUILD_SYSTEM_HEADER_DIR): New make variabe.
(LIMITS_H_TEST, if_multiarch, stmp-fixinc): Use BUILD_SYSTEM_HEADER_DIR
instead of SYSTEM_HEADER_DIR.
Index: gcc/configure.ac
===================================================================
--- gcc/configure.ac (revision 246979)
+++ gcc/configure.ac (working copy)
@@ -1998,41 +1998,29 @@ done
CROSS= AC_SUBST(CROSS)
ALL=all.internal AC_SUBST(ALL)
SYSTEM_HEADER_DIR='$(NATIVE_SYSTEM_HEADER_DIR)' AC_SUBST(SYSTEM_HEADER_DIR)
+BUILD_SYSTEM_HEADER_DIR=$SYSTEM_HEADER_DIR AC_SUBST(BUILD_SYSTEM_HEADER_DIR)
-if test "x$with_build_sysroot" != x; then
- build_system_header_dir=$with_build_sysroot'$${sysroot_headers_suffix}$(NATIVE_SYSTEM_HEADER_DIR)'
-else
- # This value is used, even on a native system, because
- # CROSS_SYSTEM_HEADER_DIR is just
- # $(TARGET_SYSTEM_ROOT)$(NATIVE_SYSTEM_HEADER_DIR).
- build_system_header_dir='$(CROSS_SYSTEM_HEADER_DIR)'
-fi
+if test x$host != x$target || test "x$TARGET_SYSTEM_ROOT" != x ||
+ test x$build != x$host || test "x$with_build_sysroot" != x; then
+ if test "x$with_build_sysroot" != x; then
+ BUILD_SYSTEM_HEADER_DIR=$with_build_sysroot'$${sysroot_headers_suffix}$(NATIVE_SYSTEM_HEADER_DIR)'
+ else
+ BUILD_SYSTEM_HEADER_DIR='$(CROSS_SYSTEM_HEADER_DIR)'
+ fi
-if test x$host != x$target
-then
- CROSS="-DCROSS_DIRECTORY_STRUCTURE"
- ALL=all.cross
- SYSTEM_HEADER_DIR=$build_system_header_dir
- case $target in
- *-*-mingw*)
- if test "x$with_headers" = x; then
- with_headers=yes
- fi
- ;;
- *)
- ;;
- esac
-elif test "x$TARGET_SYSTEM_ROOT" != x; then
- SYSTEM_HEADER_DIR=$build_system_header_dir
-fi
+ if test x$host != x$target
+ then
+ CROSS="-DCROSS_DIRECTORY_STRUCTURE"
+ ALL=all.cross
+ SYSTEM_HEADER_DIR=$BUILD_SYSTEM_HEADER_DIR
+ elif test "x$TARGET_SYSTEM_ROOT" != x; then
+ SYSTEM_HEADER_DIR='$(CROSS_SYSTEM_HEADER_DIR)'
+ fi
-if test x$host != x$target || test "x$TARGET_SYSTEM_ROOT" != x; then
- if test "x$with_headers" != x && test "x$with_headers" != xyes; then
- target_header_dir=$with_headers
+ if test "x$with_build_sysroot" != "x"; then
+ 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"
- elif test "x$with_build_sysroot" != "x"; then
- target_header_dir="${with_build_sysroot}${native_system_header_dir}"
elif test "x$with_sysroot" = xyes; then
target_header_dir="${test_exec_prefix}/${target_noncanonical}/sys-root${native_system_header_dir}"
else
Index: gcc/configure
===================================================================
--- gcc/configure (revision 246979)
+++ gcc/configure (working copy)
@@ -719,6 +719,7 @@ BUILD_CFLAGS
CXX_FOR_BUILD
CC_FOR_BUILD
inhibit_libc
+BUILD_SYSTEM_HEADER_DIR
SYSTEM_HEADER_DIR
ALL
CROSS
@@ -12214,41 +12215,29 @@ done
CROSS=
ALL=all.internal
SYSTEM_HEADER_DIR='$(NATIVE_SYSTEM_HEADER_DIR)'
+BUILD_SYSTEM_HEADER_DIR=$SYSTEM_HEADER_DIR
-if test "x$with_build_sysroot" != x; then
- build_system_header_dir=$with_build_sysroot'$${sysroot_headers_suffix}$(NATIVE_SYSTEM_HEADER_DIR)'
-else
- # This value is used, even on a native system, because
- # CROSS_SYSTEM_HEADER_DIR is just
- # $(TARGET_SYSTEM_ROOT)$(NATIVE_SYSTEM_HEADER_DIR).
- build_system_header_dir='$(CROSS_SYSTEM_HEADER_DIR)'
-fi
+if test x$host != x$target || test "x$TARGET_SYSTEM_ROOT" != x ||
+ test x$build != x$host || test "x$with_build_sysroot" != x; then
+ if test "x$with_build_sysroot" != x; then
+ BUILD_SYSTEM_HEADER_DIR=$with_build_sysroot'$${sysroot_headers_suffix}$(NATIVE_SYSTEM_HEADER_DIR)'
+ else
+ BUILD_SYSTEM_HEADER_DIR='$(CROSS_SYSTEM_HEADER_DIR)'
+ fi
-if test x$host != x$target
-then
- CROSS="-DCROSS_DIRECTORY_STRUCTURE"
- ALL=all.cross
- SYSTEM_HEADER_DIR=$build_system_header_dir
- case $target in
- *-*-mingw*)
- if test "x$with_headers" = x; then
- with_headers=yes
- fi
- ;;
- *)
- ;;
- esac
-elif test "x$TARGET_SYSTEM_ROOT" != x; then
- SYSTEM_HEADER_DIR=$build_system_header_dir
-fi
+ if test x$host != x$target
+ then
+ CROSS="-DCROSS_DIRECTORY_STRUCTURE"
+ ALL=all.cross
+ SYSTEM_HEADER_DIR=$BUILD_SYSTEM_HEADER_DIR
+ elif test "x$TARGET_SYSTEM_ROOT" != x; then
+ SYSTEM_HEADER_DIR='$(CROSS_SYSTEM_HEADER_DIR)'
+ fi
-if test x$host != x$target || test "x$TARGET_SYSTEM_ROOT" != x; then
- if test "x$with_headers" != x && test "x$with_headers" != xyes; then
- target_header_dir=$with_headers
+ if test "x$with_build_sysroot" != "x"; then
+ 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"
- elif test "x$with_build_sysroot" != "x"; then
- target_header_dir="${with_build_sysroot}${native_system_header_dir}"
elif test "x$with_sysroot" = xyes; then
target_header_dir="${test_exec_prefix}/${target_noncanonical}/sys-root${native_system_header_dir}"
else
@@ -18433,7 +18422,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF
-#line 18436 "configure"
+#line 18425 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
@@ -18539,7 +18528,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF
-#line 18542 "configure"
+#line 18531 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
Index: gcc/Makefile.in
===================================================================
--- gcc/Makefile.in (revision 246979)
+++ gcc/Makefile.in (working copy)
@@ -517,11 +517,14 @@ CROSS_SYSTEM_HEADER_DIR = @CROSS_SYSTEM_HEADER_DIR
# macro is also used in a double-quoted context.
SYSTEM_HEADER_DIR = `echo @SYSTEM_HEADER_DIR@ | sed -e :a -e 's,[^/]*/\.\.\/,,' -e ta`
+# Path to the system headers on the build machine.
+BUILD_SYSTEM_HEADER_DIR = `echo @BUILD_SYSTEM_HEADER_DIR@ | sed -e :a -e 's,[^/]*/\.\.\/,,' -e ta`
+
# Control whether to run fixincludes.
STMP_FIXINC = @STMP_FIXINC@
# Test to see whether <limits.h> exists in the system header files.
-LIMITS_H_TEST = [ -f $(SYSTEM_HEADER_DIR)/limits.h ]
+LIMITS_H_TEST = [ -f $(BUILD_SYSTEM_HEADER_DIR)/limits.h ]
# Directory for prefix to system directories, for
# each of $(system_prefix)/usr/include, $(system_prefix)/usr/lib, etc.
@@ -572,7 +575,7 @@ ifeq ($(enable_multiarch),yes)
else
ifeq ($(enable_multiarch),auto)
# SYSTEM_HEADER_DIR is makefile syntax, cannot be evaluated in configure.ac
- if_multiarch = $(if $(wildcard $(shell echo $(SYSTEM_HEADER_DIR))/../../usr/lib/*/crti.o),$(1))
+ if_multiarch = $(if $(wildcard $(shell echo $(BUILD_SYSTEM_HEADER_DIR))/../../usr/lib/*/crti.o),$(1))
else
if_multiarch =
endif
@@ -2992,11 +2995,11 @@ stmp-fixinc: gsyslimits.h macro_list fixinc_list \
sysroot_headers_suffix=`echo $${ml} | sed -e 's/;.*$$//'`; \
multi_dir=`echo $${ml} | sed -e 's/^[^;]*;//'`; \
fix_dir=include-fixed$${multi_dir}; \
- if ! $(inhibit_libc) && test ! -d ${SYSTEM_HEADER_DIR}; then \
+ if ! $(inhibit_libc) && test ! -d ${BUILD_SYSTEM_HEADER_DIR}; then \
echo The directory that should contain system headers does not exist: >&2 ; \
- echo " ${SYSTEM_HEADER_DIR}" >&2 ; \
+ echo " ${BUILD_SYSTEM_HEADER_DIR}" >&2 ; \
tooldir_sysinc=`echo "${gcc_tooldir}/sys-include" | sed -e :a -e "s,[^/]*/\.\.\/,," -e ta`; \
- if test "x${SYSTEM_HEADER_DIR}" = "x$${tooldir_sysinc}"; \
+ if test "x${BUILD_SYSTEM_HEADER_DIR}" = "x$${tooldir_sysinc}"; \
then sleep 1; else exit 1; fi; \
fi; \
$(mkinstalldirs) $${fix_dir}; \
@@ -3007,7 +3010,7 @@ stmp-fixinc: gsyslimits.h macro_list fixinc_list \
export TARGET_MACHINE srcdir SHELL MACRO_LIST && \
cd $(build_objdir)/fixincludes && \
$(SHELL) ./fixinc.sh "$${gcc_dir}/$${fix_dir}" \
- $(SYSTEM_HEADER_DIR) $(OTHER_FIXINCLUDES_DIRS) ); \
+ $(BUILD_SYSTEM_HEADER_DIR) $(OTHER_FIXINCLUDES_DIRS) ); \
rm -f $${fix_dir}/syslimits.h; \
if [ -f $${fix_dir}/limits.h ]; then \
mv $${fix_dir}/limits.h $${fix_dir}/syslimits.h; \