From: Richard Purdie <richard.purdie@linuxfoundation.org>
To: Patches and discussions about the oe-core layer
<openembedded-core@lists.openembedded.org>
Subject: Re: [PATCH] gcc-4.6: Let G++ relocate gxx-include-dir when using --sysroot option
Date: Wed, 14 Dec 2011 10:02:26 +0000 [thread overview]
Message-ID: <1323856946.25491.31.camel@ted> (raw)
In-Reply-To: <1323851280-6342-1-git-send-email-raj.khem@gmail.com>
Hi Khem,
What's puzzling me is that reading through this patch, we already do
what this patch is doing?
Where is the difference which this patch is fixing?
I appreciate that patch adds in the prefix to the --with-gxx-include-dir
option but it then removes it again during configure so this should be a
null op. Both versions of the patch set the "1" bit in gcc/cppdefault.c.
So where is the change this patch makes which fixes things?
Cheers,
Richard
On Wed, 2011-12-14 at 00:28 -0800, Khem Raj wrote:
> Currently we have a problem in our cross compiler since we use
> /usr/include/c++ to be default gxx-include-dir and then expect
> the patch we did to do the relocation w.r.t. sysroot however it
> does not quite work so and we end up gxx-include-dirs not respecting
> sysroot. A small test case would be
>
> tst-unique4.cc
>
> and it would fails like
>
> tst-unique4.cc:1:18: fatal error: cstdio: No such file or directory
> compilation terminated.
>
> weather we use --sysroot or not it does not matter
>
> arm-oe-linux-gnueabi-g++ -S tst-unique4.cc
> --sysroot=/home/kraj/work/angstrom/sources/openembedded-core/build/tmp-eglibc/sysroots/qemuarm
>
> failed in same way.
>
> so we redo the GPLUSPLUS_INCLUDE_DIR_with_sysroot.patch based on upstream
> submitted patch which tries to relocate the gxx-include-dir and to
> achieve the relocation it has to be specified w.r.t to --with-sysroot
> directory. e.g.
>
> --with-sysroot=${SYSROOT}
> --with-gxx-include-dir=${SYSROOT}/usr/include/c++
>
> if we configure gcc like above then it becomes relocatable when
> we run the compiler and specify --sysroot=<blah> then g++ will search
> for gxx-headers under <blah>/usr/include/c++
>
> if sysroot is not defined then it will use the default sysroot
> and gxx-include-dir will be w.r.t. default sysroot.
>
> Tested on qemuarm
>
> /arm-oe-linux-gnueabi-g++ -S tst-unique4.cc
> --sysroot=/home/kraj/work/angstrom/sources/openembedded-core/build/tmp-eglibc/sysroots/qemuarm
> -v
> ...
> /home/kraj/work/angstrom/sources/openembedded-core/build/tmp-eglibc/sysroots/qemuarm/usr/include/c++
> /home/kraj/work/angstrom/sources/openembedded-core/build/tmp-eglibc/sysroots/qemuarm/usr/include/c++/arm-oe-linux-gnueabi
> /home/kraj/work/angstrom/sources/openembedded-core/build/tmp-eglibc/sysroots/qemuarm/usr/include/c++/backward
> ...
>
> and if I now change --sysroot to something else
>
> /arm-oe-linux-gnueabi-g++ -S tst-unique4.cc
> --sysroot=/home/kraj/work/angstrom/sources/openembedded-core/build/tmp-eglibc/sysroots/qemuarm4
> -v
> ...
>
> ignoring nonexistent directory
> "/home/kraj/work/angstrom/sources/openembedded-core/build/tmp-eglibc/sysroots/qemuarm4/usr/include/c++"
> ignoring nonexistent directory
> "/home/kraj/work/angstrom/sources/openembedded-core/build/tmp-eglibc/sysroots/qemuarm4/usr/include/c++/arm-oe-linux-gnueabi"
> ignoring nonexistent directory
> "/home/kraj/work/angstrom/sources/openembedded-core/build/tmp-eglibc/sysroots/qemuarm4/usr/include/c++/backward"
> ...
>
> See now its looking for them in 'qemuarm4' sysroot
>
> Signed-off-by: Khem Raj <raj.khem@gmail.com>
> ---
> meta/recipes-devtools/gcc/gcc-4.6.inc | 4 +-
> .../GPLUSPLUS_INCLUDE_DIR_with_sysroot.patch | 189 ++++++++++++++++++--
> meta/recipes-devtools/gcc/gcc-configure-cross.inc | 2 +-
> .../recipes-devtools/gcc/gcc-configure-runtime.inc | 2 +-
> meta/recipes-devtools/gcc/gcc-configure-sdk.inc | 2 +-
> 5 files changed, 175 insertions(+), 24 deletions(-)
>
> diff --git a/meta/recipes-devtools/gcc/gcc-4.6.inc b/meta/recipes-devtools/gcc/gcc-4.6.inc
> index 18e0536..4bbb2d2 100644
> --- a/meta/recipes-devtools/gcc/gcc-4.6.inc
> +++ b/meta/recipes-devtools/gcc/gcc-4.6.inc
> @@ -1,6 +1,6 @@
> require gcc-common.inc
>
> -PR = "r19"
> +PR = "r20"
>
> # Third digit in PV should be incremented after a minor release
> # happens from this branch on gcc e.g. currently its 4.6.0
> @@ -62,7 +62,6 @@ SRC_URI = "svn://gcc.gnu.org/svn/gcc/branches;module=${BRANCH};proto=http \
> file://64bithack.patch \
> file://optional_libstdc.patch \
> file://disable_relax_pic_calls_flag.patch \
> - file://GPLUSPLUS_INCLUDE_DIR_with_sysroot.patch \
> file://COLLECT_GCC_OPTIONS.patch \
> file://volatile_access_backport.patch \
> file://use-defaults.h-and-t-oe-in-B.patch \
> @@ -73,6 +72,7 @@ SRC_URI = "svn://gcc.gnu.org/svn/gcc/branches;module=${BRANCH};proto=http \
> file://pr32219.patch \
> file://pr47551.patch \
> file://gcc-arm-set-cost.patch \
> + file://GPLUSPLUS_INCLUDE_DIR_with_sysroot.patch \
> "
>
> SRC_URI_append_sh3 = " file://sh3-installfix-fixheaders.patch "
> diff --git a/meta/recipes-devtools/gcc/gcc-4.6/GPLUSPLUS_INCLUDE_DIR_with_sysroot.patch b/meta/recipes-devtools/gcc/gcc-4.6/GPLUSPLUS_INCLUDE_DIR_with_sysroot.patch
> index 05b2fa9..6ccbeea 100644
> --- a/meta/recipes-devtools/gcc/gcc-4.6/GPLUSPLUS_INCLUDE_DIR_with_sysroot.patch
> +++ b/meta/recipes-devtools/gcc/gcc-4.6/GPLUSPLUS_INCLUDE_DIR_with_sysroot.patch
> @@ -1,35 +1,186 @@
> -Upstream-Status: Pending
> -
> -# by default c++ include directories are not relative to "--sysroot"
> -# which brings one trouble when using the toolchain in an environment
> -# where the build directory generating that toolchain doesn't exist,
> -# e.g. in sstate, machine specific sysroot and relocatable SDK
> -# toolchain. This patch now enables c++ include paths under sysroot.
> -# This way it's enough as long as "--sysroot" is correctly enabled
> -# in the new environment.
> -#
> -# Signed-off-by Kevin Tian <kevin.tian@intel.com>, 2010-12-30
> -
> -Index: gcc-4.6.0/gcc/cppdefault.c
> +source: http://patchwork.ozlabs.org/patch/129800/
> +Upstream-Status: Submitted
> +
> +ChangeLog
> + * Makefile.in (gcc_gxx_include_dir_add_sysroot): New.
> + (PREPROCESSOR_DEFINES): Define GPLUSPLUS_INCLUDE_DIR_ADD_SYSROOT.
> +
> + * cppdefault.c (cpp_include_defaults): replace hard coded "1" with
> + GPLUSPLUS_INCLUDE_DIR_ADD_SYSROOT for "add_sysroot" field.
> +
> + * configure.ac (AC_SUBST): Add gcc_gxx_include_dir_add_sysroot to
> + control whether sysroot should be prepended to gxx include dir.
> +
> + * configure: Regenerate.
> +
> +Hi, this is a follow up for issue "http://codereview.appspot.com/4641076".
> +
> +The rationale for the patch copied from previous thread:
> +=======================================
> +The setup:
> +
> +Configuring a toolchain targeting x86-64 GNU Linux (Ubuntu Lucid), as a
> +cross-compiler. Using a sysroot to provide the Lucid headers+libraries,
> +with the sysroot path being within the GCC install tree. Want to use the
> +Lucid system libstdc++ and headers, which means that I'm not
> +building/installing libstdc++-v3.
> +
> +So, configuring with:
> + --with-sysroot="$SYSROOT"
> + --disable-libstdc++-v3 \
> + --with-gxx-include-dir="$SYSROOT/usr/include/c++/4.4" \
> +(among other options).
> +
> +Hoping to support two usage models with this configuration, w.r.t. use of
> +the sysroot:
> +
> +(1) somebody installs the sysroot in the normal location relative to the
> +GCC install, and relocates the whole bundle (sysroot+GCC). This works
> +great AFAICT, GCC finds its includes (including the C++ includes) thanks
> +to the add_standard_paths iprefix handling.
> +
> +(2) somebody installs the sysroot in a non-standard location, and uses
> +--sysroot to try to access it. This works fine for the C headers, but
> +doesn't work.
> +
> +For the C headers, add_standard_paths prepends the sysroot location to
> +the /usr/include path (since that's what's specified in cppdefault.c for
> +that path). It doesn't do the same for the C++ include path, though
> +(again, as specified in cppdefault.c).
> +
> +add_standard_paths doesn't attempt to relocate built-in include paths that
> +start with the compiled-in sysroot location (e.g., the g++ include dir, in
> +this case). This isn't surprising really: normally you either prepend the
> +sysroot location or you don't (as specified by cppdefault.c); none of the
> +built-in paths normally *start* with the sysroot location and need to be
> +relocated. However, in this odd-ball case of trying to use the C++ headers
> +from the sysroot, one of the paths *does* need to be relocated in this way.
> +===========================
> +Index: gcc-4_6-branch/gcc/Makefile.in
> +===================================================================
> +--- gcc-4_6-branch.orig/gcc/Makefile.in 2011-12-13 22:52:15.000000000 -0800
> ++++ gcc-4_6-branch/gcc/Makefile.in 2011-12-13 22:52:21.933635767 -0800
> +@@ -587,6 +587,7 @@
> + build_tooldir = $(exec_prefix)/$(target_noncanonical)
> + # Directory in which the compiler finds target-independent g++ includes.
> + gcc_gxx_include_dir = @gcc_gxx_include_dir@
> ++gcc_gxx_include_dir_add_sysroot = @gcc_gxx_include_dir_add_sysroot@
> + # Directory to search for site-specific includes.
> + local_includedir = $(local_prefix)/include
> + includedir = $(prefix)/include
> +@@ -3964,6 +3965,7 @@
> + -DGCC_INCLUDE_DIR=\"$(libsubdir)/include\" \
> + -DFIXED_INCLUDE_DIR=\"$(libsubdir)/include-fixed\" \
> + -DGPLUSPLUS_INCLUDE_DIR=\"$(gcc_gxx_include_dir)\" \
> ++ -DGPLUSPLUS_INCLUDE_DIR_ADD_SYSROOT=$(gcc_gxx_include_dir_add_sysroot) \
> + -DGPLUSPLUS_TOOL_INCLUDE_DIR=\"$(gcc_gxx_include_dir)/$(target_noncanonical)\" \
> + -DGPLUSPLUS_BACKWARD_INCLUDE_DIR=\"$(gcc_gxx_include_dir)/backward\" \
> + -DLOCAL_INCLUDE_DIR=\"$(local_includedir)\" \
> +Index: gcc-4_6-branch/gcc/configure.ac
> ===================================================================
> ---- gcc-4.6.0.orig/gcc/cppdefault.c
> -+++ gcc-4.6.0/gcc/cppdefault.c
> -@@ -48,15 +48,15 @@ const struct default_include cpp_include
> +--- gcc-4_6-branch.orig/gcc/configure.ac 2011-12-13 22:52:15.000000000 -0800
> ++++ gcc-4_6-branch/gcc/configure.ac 2011-12-13 22:52:21.937635526 -0800
> +@@ -144,6 +144,15 @@
> + fi
> + fi
> +
> ++gcc_gxx_include_dir_add_sysroot=0
> ++if test "${with_sysroot+set}" = set; then :
> ++ gcc_gxx_without_sysroot=`expr "${gcc_gxx_include_dir}" : "${with_sysroot}"'\(.*\)'`
> ++ if test "${gcc_gxx_without_sysroot}"; then :
> ++ gcc_gxx_include_dir="${gcc_gxx_without_sysroot}"
> ++ gcc_gxx_include_dir_add_sysroot=1
> ++ fi
> ++fi
> ++
> + AC_ARG_WITH(cpp_install_dir,
> + [ --with-cpp-install-dir=DIR
> + install the user visible C preprocessor in DIR
> +@@ -4737,6 +4746,7 @@
> + AC_SUBST(float_h_file)
> + AC_SUBST(gcc_config_arguments)
> + AC_SUBST(gcc_gxx_include_dir)
> ++AC_SUBST(gcc_gxx_include_dir_add_sysroot)
> + AC_SUBST(host_exeext)
> + AC_SUBST(host_xm_file_list)
> + AC_SUBST(host_xm_include_list)
> +Index: gcc-4_6-branch/gcc/cppdefault.c
> +===================================================================
> +--- gcc-4_6-branch.orig/gcc/cppdefault.c 2011-12-13 22:51:28.000000000 -0800
> ++++ gcc-4_6-branch/gcc/cppdefault.c 2011-12-13 22:52:21.937635526 -0800
> +@@ -48,15 +48,18 @@
> = {
> #ifdef GPLUSPLUS_INCLUDE_DIR
> /* Pick up GNU C++ generic include files. */
> - { GPLUSPLUS_INCLUDE_DIR, "G++", 1, 1, 0, 0 },
> -+ { GPLUSPLUS_INCLUDE_DIR, "G++", 1, 1, 1, 0 },
> ++ { GPLUSPLUS_INCLUDE_DIR, "G++", 1, 1,
> ++ GPLUSPLUS_INCLUDE_DIR_ADD_SYSROOT, 0 },
> #endif
> #ifdef GPLUSPLUS_TOOL_INCLUDE_DIR
> /* Pick up GNU C++ target-dependent include files. */
> - { GPLUSPLUS_TOOL_INCLUDE_DIR, "G++", 1, 1, 0, 1 },
> -+ { GPLUSPLUS_TOOL_INCLUDE_DIR, "G++", 1, 1, 1, 1 },
> ++ { GPLUSPLUS_TOOL_INCLUDE_DIR, "G++", 1, 1,
> ++ GPLUSPLUS_INCLUDE_DIR_ADD_SYSROOT, 1 },
> #endif
> #ifdef GPLUSPLUS_BACKWARD_INCLUDE_DIR
> /* Pick up GNU C++ backward and deprecated include files. */
> - { GPLUSPLUS_BACKWARD_INCLUDE_DIR, "G++", 1, 1, 0, 0 },
> -+ { GPLUSPLUS_BACKWARD_INCLUDE_DIR, "G++", 1, 1, 1, 0 },
> ++ { GPLUSPLUS_BACKWARD_INCLUDE_DIR, "G++", 1, 1,
> ++ GPLUSPLUS_INCLUDE_DIR_ADD_SYSROOT, 0 },
> #endif
> #ifdef GCC_INCLUDE_DIR
> /* This is the dir for gcc's private headers. */
> +Index: gcc-4_6-branch/gcc/configure
> +===================================================================
> +--- gcc-4_6-branch.orig/gcc/configure 2011-12-13 22:52:15.000000000 -0800
> ++++ gcc-4_6-branch/gcc/configure 2011-12-13 22:52:33.185690436 -0800
> +@@ -636,6 +636,7 @@
> + host_xm_include_list
> + host_xm_file_list
> + host_exeext
> ++gcc_gxx_include_dir_add_sysroot
> + gcc_gxx_include_dir
> + gcc_config_arguments
> + float_h_file
> +@@ -3313,6 +3314,15 @@
> + fi
> + fi
> +
> ++gcc_gxx_include_dir_add_sysroot=0
> ++if test "${with_sysroot+set}" = set; then :
> ++ gcc_gxx_without_sysroot=`expr "${gcc_gxx_include_dir}" : "${with_sysroot}"'\(.*\)'`
> ++ if test "${gcc_gxx_without_sysroot}"; then :
> ++ gcc_gxx_include_dir="${gcc_gxx_without_sysroot}"
> ++ gcc_gxx_include_dir_add_sysroot=1
> ++ fi
> ++fi
> ++
> +
> + # Check whether --with-cpp_install_dir was given.
> + if test "${with_cpp_install_dir+set}" = set; then :
> +@@ -17514,7 +17524,7 @@
> + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
> + lt_status=$lt_dlunknown
> + cat > conftest.$ac_ext <<_LT_EOF
> +-#line 17517 "configure"
> ++#line 17527 "configure"
> + #include "confdefs.h"
> +
> + #if HAVE_DLFCN_H
> +@@ -17620,7 +17630,7 @@
> + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
> + lt_status=$lt_dlunknown
> + cat > conftest.$ac_ext <<_LT_EOF
> +-#line 17623 "configure"
> ++#line 17633 "configure"
> + #include "confdefs.h"
> +
> + #if HAVE_DLFCN_H
> +@@ -26151,6 +26161,7 @@
> +
> +
> +
> ++
> +
> +
> +
> diff --git a/meta/recipes-devtools/gcc/gcc-configure-cross.inc b/meta/recipes-devtools/gcc/gcc-configure-cross.inc
> index d2d9081..5816768 100644
> --- a/meta/recipes-devtools/gcc/gcc-configure-cross.inc
> +++ b/meta/recipes-devtools/gcc/gcc-configure-cross.inc
> @@ -10,7 +10,7 @@ EXTRA_OECONF += " --enable-poison-system-directories \
> INHIBIT_DEFAULT_DEPS = "1"
>
> EXTRA_OECONF_PATHS = "--with-local-prefix=${STAGING_DIR_TARGET}${target_exec_prefix} \
> - --with-gxx-include-dir=${target_includedir}/c++ \
> + --with-gxx-include-dir=${STAGING_DIR_TARGET}${target_includedir}/c++ \
> --with-sysroot=${STAGING_DIR_TARGET} \
> --with-build-sysroot=${STAGING_DIR_TARGET}"
>
> diff --git a/meta/recipes-devtools/gcc/gcc-configure-runtime.inc b/meta/recipes-devtools/gcc/gcc-configure-runtime.inc
> index 34bfaeb..3b440ff 100644
> --- a/meta/recipes-devtools/gcc/gcc-configure-runtime.inc
> +++ b/meta/recipes-devtools/gcc/gcc-configure-runtime.inc
> @@ -4,7 +4,7 @@ CXXFLAGS := "${@oe_filter_out('-fvisibility-inlines-hidden', '${CXXFLAGS}', d)}"
>
> EXTRA_OECONF_PATHS = " \
> --with-local-prefix=${STAGING_DIR_TARGET}${prefix} \
> - --with-gxx-include-dir=${includedir}/c++/ \
> + --with-gxx-include-dir=${STAGING_DIR_TARGET}${target_includedir}/c++/ \
> --with-sysroot=${STAGING_DIR_TARGET} \
> --with-build-sysroot=${STAGING_DIR_TARGET}"
>
> diff --git a/meta/recipes-devtools/gcc/gcc-configure-sdk.inc b/meta/recipes-devtools/gcc/gcc-configure-sdk.inc
> index f130b47..eb6757c 100644
> --- a/meta/recipes-devtools/gcc/gcc-configure-sdk.inc
> +++ b/meta/recipes-devtools/gcc/gcc-configure-sdk.inc
> @@ -5,7 +5,7 @@ USE_NLS = '${@base_conditional( "TARGET_OS", "linux-uclibc", "no", "", d )}'
> USE_NLS = '${@base_conditional( "TARGET_OS", "linux-uclibceabi", "no", "", d )}'
>
> EXTRA_OECONF_PATHS = "--with-local-prefix=${SDKPATH}/sysroots/${TUNE_PKGARCH}${TARGET_VENDOR}-${TARGET_OS}${target_exec_prefix} \
> - --with-gxx-include-dir=${target_includedir}/c++ \
> + --with-gxx-include-dir=${SDKPATH}/sysroots/${TUNE_PKGARCH}${TARGET_VENDOR}-${TARGET_OS}${target_includedir}/c++ \
> --with-build-time-tools=${STAGING_DIR_NATIVE}${prefix_native}/${TARGET_SYS}/bin \
> --with-sysroot=${SDKPATH}/sysroots/${TUNE_PKGARCH}${TARGET_VENDOR}-${TARGET_OS} \
> --with-build-sysroot=${STAGING_DIR_TARGET}"
next prev parent reply other threads:[~2011-12-14 10:09 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-12-14 8:28 [PATCH] gcc-4.6: Let G++ relocate gxx-include-dir when using --sysroot option Khem Raj
2011-12-14 10:02 ` Richard Purdie [this message]
2011-12-14 15:49 ` Khem Raj
2011-12-15 12:16 ` Richard Purdie
2011-12-16 21:24 ` Khem Raj
2011-12-20 9:07 ` Martin Jansa
2011-12-20 9:37 ` Martin Jansa
2011-12-20 16:15 ` Martin Jansa
2011-12-20 17:45 ` Khem Raj
2011-12-14 18:08 ` Ulf Samuelsson
2011-12-14 18:38 ` Khem Raj
2011-12-20 6:36 ` Eric Bénard
2011-12-20 19:59 ` Khem Raj
2011-12-21 14:23 ` Eric Bénard
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1323856946.25491.31.camel@ted \
--to=richard.purdie@linuxfoundation.org \
--cc=openembedded-core@lists.openembedded.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.