public inbox for crossgcc@sourceware.org
 help / color / mirror / Atom feed
* [PATCH 1/1] Add multilib build support for libc target. Libc is build <multilib>-times in seperate sysroot directories. In a last step links are created to reflect the expected multilib structure.
@ 2011-11-14 10:45 Konrad Eisele
  2011-12-12 23:07 ` [PATCH 1/1] Add multilib build support for libc target Yann E. MORIN
  2011-12-23 23:22 ` [PATCH 1/1] Add multilib build support for libc target. Libc is build <multilib>-times in seperate sysroot directories. In a last step links are created to reflect the expected multilib structure Yann E. MORIN
  0 siblings, 2 replies; 13+ messages in thread
From: Konrad Eisele @ 2011-11-14 10:45 UTC (permalink / raw)
  To: crossgcc; +Cc: yann.morin.1998, konrad

---
 scripts/build/binutils/binutils.sh        |   14 +++-
 scripts/build/cc/gcc.sh                   |   15 +++-
 scripts/build/libc/glibc-eglibc.sh-common |  124 +++++++++++++++++++++++++---
 3 files changed, 134 insertions(+), 19 deletions(-)

diff --git a/scripts/build/binutils/binutils.sh b/scripts/build/binutils/binutils.sh
index e082590..9c51a3d 100644
--- a/scripts/build/binutils/binutils.sh
+++ b/scripts/build/binutils/binutils.sh
@@ -59,6 +59,11 @@ do_binutils() {
         extra_config+=("--with-pkgversion=${CT_PKGVERSION}")
         [ -n "${CT_TOOLCHAIN_BUGURL}" ] && extra_config+=("--with-bugurl=${CT_TOOLCHAIN_BUGURL}")
     fi
+    if [ "${CT_CC_MULTILIB}" = "n" ]; then
+        extra_config+=("--disable-multilib")
+    else
+        extra_config+=("--enable-multilib")
+    fi
 
     CT_DoLog DEBUG "Extra config passed: '${extra_config[*]}'"
 
@@ -71,7 +76,6 @@ do_binutils() {
         --target=${CT_TARGET}                                   \
         --prefix=${CT_PREFIX_DIR}                               \
         --disable-nls                                           \
-        --disable-multilib                                      \
         --disable-werror                                        \
         "${extra_config[@]}"                                    \
         ${CT_ARCH_WITH_FLOAT}                                   \
@@ -151,7 +155,12 @@ do_binutils_target() {
             extra_config+=("--with-pkgversion=${CT_PKGVERSION}")
             [ -n "${CT_TOOLCHAIN_BUGURL}" ] && extra_config+=("--with-bugurl=${CT_TOOLCHAIN_BUGURL}")
         fi
-
+	if [ "${CT_CC_MULTILIB}" = "n" ]; then
+            extra_config+=("--disable-multilib")
+	else
+            extra_config+=("--enable-multilib")
+	fi
+    
         CT_DoExecLog CFG                                            \
         "${CT_SRC_DIR}/binutils-${CT_BINUTILS_VERSION}/configure"   \
             --build=${CT_BUILD}                                     \
@@ -162,7 +171,6 @@ do_binutils_target() {
             --enable-shared                                         \
             --enable-static                                         \
             --disable-nls                                           \
-            --disable-multilib                                      \
             "${extra_config[@]}"                                    \
             ${CT_ARCH_WITH_FLOAT}                                   \
             "${CT_BINUTILS_EXTRA_CONFIG[@]}"
diff --git a/scripts/build/cc/gcc.sh b/scripts/build/cc/gcc.sh
index 05df729..8804e85 100644
--- a/scripts/build/cc/gcc.sh
+++ b/scripts/build/cc/gcc.sh
@@ -288,6 +288,12 @@ do_cc_core() {
     extra_config+=(--disable-libgomp)
     extra_config+=(--disable-libmudflap)
 
+   if [ "${CT_CC_MULTILIB}" = "n" ]; then
+        extra_config+=("--disable-multilib")
+    else
+        extra_config+=("--enable-multilib")
+    fi
+
     CT_DoLog DEBUG "Extra config passed: '${extra_config[*]}'"
 
     # Use --with-local-prefix so older gccs don't look in /usr/local (http://gcc.gnu.org/PR10532)
@@ -301,7 +307,6 @@ do_cc_core() {
         --target=${CT_TARGET}                       \
         --prefix="${core_prefix_dir}"               \
         --with-local-prefix="${CT_SYSROOT_DIR}"     \
-        --disable-multilib                          \
         --disable-libmudflap                        \
         ${CC_CORE_SYSROOT_ARG}                      \
         "${extra_config[@]}"                        \
@@ -424,7 +429,13 @@ do_cc() {
     lang_opt=$(echo "${lang_opt},${CT_CC_LANG_OTHERS}" |sed -r -e 's/,+/,/g; s/,*$//;')
 
     extra_config+=("--enable-languages=${lang_opt}")
-    extra_config+=("--disable-multilib")
+    
+    if [ "${CT_CC_MULTILIB}" = "n" ]; then
+        extra_config+=("--disable-multilib")
+    else
+        extra_config+=("--enable-multilib")
+    fi
+ 
     for tmp in ARCH ABI CPU TUNE FPU FLOAT; do
         eval tmp="\${CT_ARCH_WITH_${tmp}}"
         if [ -n "${tmp}" ]; then
diff --git a/scripts/build/libc/glibc-eglibc.sh-common b/scripts/build/libc/glibc-eglibc.sh-common
index 2af3a9a..2c77fbf 100644
--- a/scripts/build/libc/glibc-eglibc.sh-common
+++ b/scripts/build/libc/glibc-eglibc.sh-common
@@ -57,18 +57,103 @@ do_libc_extract() {
 do_libc_start_files() {
     # Start files and Headers should be configured the same way as the
     # final libc, but built and installed differently.
-    do_libc_backend libc_mode=startfiles
+    do_libc_backend_multilib libc_mode=startfiles
 }
 
 # This function builds and install the full C library
 do_libc() {
-    do_libc_backend libc_mode=final
+    do_libc_backend_multilib libc_mode=final
 }
 
+# installation is done into ${CT_SYSROOT_DIR}/${dir}. The multilib prefix has to be included
+# to reflect the runtime setting.
+do_libc_backend_rearrange() {
+    local libc_mode
+    
+    while [ $# -ne 0 ]; do
+        eval "${1// /\\ }"
+        shift
+    done
+    
+    if [ "${libc_mode}" = "final" ]; then
+        cross_cc=$(CT_Which "${CT_TARGET}-gcc")
+        for i in `${cross_cc} --print-multi-lib 2>/dev/null`; do
+           dir="${i%%;*}"
+	   bdir="$(echo ${dir} | ${sed} -r -e 's:/:\\\\/:g')"
+           if [ "${dir}" != "." ]; then 
+               flags="$(echo $i | ${sed} -r -e 's/^[^;]*;//' -e 's/@/ -/g')";
+               CT_DoStep DEBUG "Fixing up multilib location ${CT_SYSROOT_DIR}/${dir}/lib to ${CT_SYSROOT_DIR}/lib/${dir}"
+               mkdir -p ${CT_SYSROOT_DIR}/lib/${dir}
+               mkdir -p ${CT_SYSROOT_DIR}/usr/lib/${dir}
+
+               # recreate the symbolic links for multilib 
+               for f in $(find ${CT_SYSROOT_DIR}/usr/lib/${dir}/ -type l -maxdepth 1); do
+                   fn=`basename $f`
+                   ln=`readlink $f`
+                   ln=`basename $ln`
+		   # go toward root. Count the numer of "/" and asseble a "../.." prefix 
+                   pre=$( echo ${dir} | awk '{r="";
+		       c=split($0,b,"/");
+		       for(i=0;i<c;i++){
+		           if(i!=0){r=r "/";}
+			   r=r "..";
+		       };
+		       printf("%s",r);
+		   }')
+		   CT_Pushd "${CT_SYSROOT_DIR}/usr/lib/${dir}/"
+                   ln -sf ../../${pre}/lib/${dir}/$ln $fn
+		   CT_Popd
+               done
+
+               # rewrite the library multiplexers
+               for l in libc libpthread libgcc_s; do
+                   for d in lib/${dir} usr/lib/${dir}; do
+                       if [ -f "${CT_SYSROOT_DIR}/${d}/${l}.so" -a ! -L ${CT_SYSROOT_DIR}/${d}/${l}.so ]; then
+                           if [ ! -f "${CT_SYSROOT_DIR}/${d}/${l}.so_ori_i" ]; then
+                               cp ${CT_SYSROOT_DIR}/${d}/${l}.so ${CT_SYSROOT_DIR}/${d}/${l}.so_ori_i
+                               cat ${CT_SYSROOT_DIR}/${d}/${l}.so_ori_i | ${sed} -r -e "s/\/lib\/$l/\/lib\/$bdir\/$l/g" > ${CT_SYSROOT_DIR}/${d}/${l}.so
+			   else
+			       CT_DoLog WARN "${CT_SYSROOT_DIR}/${d}/${l}.so has already been patched, skipping"
+                           fi
+                       fi
+                   done
+               done
+               CT_EndStep
+           fi
+        done;
+    fi
+}
+
+# call do_libc_backend <multilib> times with varying <extra_dir> and <extra_flags> options
+do_libc_backend_multilib() {
+    local flags=""
+    local i
+    local dir
+    # We need to call the backend at least once,
+    # with all settings set to the defaults
+    do_libc_backend "$@"
+    cross_cc=$(CT_Which "${CT_TARGET}-gcc")
+    if [ "${CT_CC_MULTILIB}" = "y" ]; then
+       for i in `${cross_cc} --print-multi-lib 2>/dev/null`; do
+           dir="${i%%;*}"
+           if [ "${dir}" != "." ]; then 
+               flags="$(echo $i | ${sed} -r -e 's/^[^;]*;//' -e 's/@/ -/g')";
+               CT_DoStep INFO "C Library with multilib. Flags: \"${flags}\" Dir: \"${dir}\""
+               do_libc_backend "$@" extra_dir="/${dir}" extra_flags="${flags}" 
+               CT_EndStep
+           fi
+       done;
+       do_libc_backend_rearrange
+    fi
+}		       
+
 do_libc_backend() {
     local src_dir="${CT_SRC_DIR}/${CT_LIBC}-${CT_LIBC_VERSION}"
     local libc_mode=final
     local extra_cc_args
+    local extra_dir=""
+    local extra_dir_p
+    local extra_flags=""
     local -a extra_config
     local -a extra_make_args
     local glibc_cflags
@@ -77,15 +162,16 @@ do_libc_backend() {
         eval "${1// /\\ }"
         shift
     done
-
+    extra_dir_p="$(echo ${extra_dir} | ${sed} -r -e 's/\///g')"
+	
     if [ "${libc_mode}" = "startfiles" ]; then
         CT_DoStep INFO "Installing C library headers & start files"
-        mkdir -p "${CT_BUILD_DIR}/build-libc-start-files"
-        cd "${CT_BUILD_DIR}/build-libc-start-files"
+        mkdir -p "${CT_BUILD_DIR}/build-libc-start-files${extra_dir_p}"
+        cd "${CT_BUILD_DIR}/build-libc-start-files${extra_dir_p}"
     else # libc_mode = final
         CT_DoStep INFO "Installing C library"
-        mkdir -p "${CT_BUILD_DIR}/build-libc"
-        cd "${CT_BUILD_DIR}/build-libc"
+        mkdir -p "${CT_BUILD_DIR}/build-libc${extra_dir_p}"
+        cd "${CT_BUILD_DIR}/build-libc${extra_dir_p}"
     fi
 
     CT_DoLog EXTRA "Configuring C library"
@@ -133,7 +219,13 @@ do_libc_backend() {
     esac
 
     case "${CT_ARCH_FLOAT_HW},${CT_ARCH_FLOAT_SW}" in
-        y,) extra_config+=("--with-fp");;
+        y,) # if it is a <multilib> build then check if -msoft-float is given
+	    if [ "x`expr "${extra_flags}" : '.*-msoft-float.*'`" != "x0" ]; then
+	    	extra_config+=("--with-fp=no");
+	    else
+	    	extra_config+=("--with-fp");
+	    fi
+	    ;;
         ,y) extra_config+=("--without-fp");;
     esac
 
@@ -173,7 +265,7 @@ do_libc_backend() {
     CT_DoLog DEBUG "Extra config args passed: '${extra_config[*]}'"
     CT_DoLog DEBUG "Extra CC args passed    : '${extra_cc_args}'"
 
-    glibc_cflags="${CT_TARGET_CFLAGS} ${CT_LIBC_GLIBC_EXTRA_CFLAGS} ${OPTIMIZE}"
+    glibc_cflags="${CT_TARGET_CFLAGS} ${CT_LIBC_GLIBC_EXTRA_CFLAGS} ${OPTIMIZE} ${extra_flags}"
     case "${CT_LIBC_ENABLE_FORTIFIED_BUILD}" in
         y)  ;;
         *)  glibc_cflags+=" -U_FORTIFY_SOURCE";;
@@ -236,7 +328,7 @@ do_libc_backend() {
         # use the 'install-headers' makefile target to install the
         # headers
         CT_DoExecLog ALL make ${JOBSFLAGS}              \
-                         install_root=${CT_SYSROOT_DIR} \
+                         install_root=${CT_SYSROOT_DIR}${extra_dir} \
                          install-bootstrap-headers=yes  \
                          "${extra_make_args[@]}"        \
                          install-headers
@@ -273,12 +365,12 @@ do_libc_backend() {
 
             # there are a few object files needed to link shared libraries,
             # which we build and install by hand
-            CT_DoExecLog ALL mkdir -p "${CT_SYSROOT_DIR}/usr/lib"
+            CT_DoExecLog ALL mkdir -p "${CT_SYSROOT_DIR}${extra_dir}/usr/lib"
             CT_DoExecLog ALL make ${JOBSFLAGS}  \
                         "${extra_make_args[@]}" \
                         csu/subdir_lib
             CT_DoExecLog ALL cp csu/crt1.o csu/crti.o csu/crtn.o \
-                                "${CT_SYSROOT_DIR}/usr/lib"
+                                "${CT_SYSROOT_DIR}${extra_dir}/usr/lib"
 
             # Finally, 'libgcc_s.so' requires a 'libc.so' to link against.
             # However, since we will never actually execute its code,
@@ -288,9 +380,13 @@ do_libc_backend() {
                                            -nostartfiles    \
                                            -shared          \
                                            -x c /dev/null   \
-                                           -o "${CT_SYSROOT_DIR}/usr/lib/libc.so"
+                                           -o "${CT_SYSROOT_DIR}${extra_dir}/usr/lib/libc.so"
         fi # threads == nptl
     else # libc_mode = final
+        CT_DoLog EXTRA "Prepare C library"
+        CT_DoExecLog ALL make ${JOBSFLAGS}                      \
+                              "${extra_make_args[@]}"           \
+                              clean
         CT_DoLog EXTRA "Building C library"
         CT_DoExecLog ALL make ${JOBSFLAGS}                      \
                               "${extra_make_args[@]}"           \
@@ -299,7 +395,7 @@ do_libc_backend() {
         CT_DoLog EXTRA "Installing C library"
         CT_DoExecLog ALL make ${JOBSFLAGS}                      \
                               "${extra_make_args[@]}"           \
-                              install_root="${CT_SYSROOT_DIR}"  \
+                              install_root="${CT_SYSROOT_DIR}${extra_dir}"  \
                               install
 
         if [ "${CT_LIBC_LOCALES}" = "y" ]; then
-- 
1.6.4.1


--
For unsubscribe information see http://sourceware.org/lists.html#faq

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

* Re: [PATCH 1/1] Add multilib build support for libc target.
  2011-11-14 10:45 [PATCH 1/1] Add multilib build support for libc target. Libc is build <multilib>-times in seperate sysroot directories. In a last step links are created to reflect the expected multilib structure Konrad Eisele
@ 2011-12-12 23:07 ` Yann E. MORIN
  2011-12-13  8:38   ` Konrad Eisele
  2011-12-23 23:22 ` [PATCH 1/1] Add multilib build support for libc target. Libc is build <multilib>-times in seperate sysroot directories. In a last step links are created to reflect the expected multilib structure Yann E. MORIN
  1 sibling, 1 reply; 13+ messages in thread
From: Yann E. MORIN @ 2011-12-12 23:07 UTC (permalink / raw)
  To: crossgcc; +Cc: Konrad Eisele

Konrad, All,

On Monday 14 November 2011 11:37:59 Konrad Eisele wrote:
> ---
>  scripts/build/binutils/binutils.sh        |   14 +++-
>  scripts/build/cc/gcc.sh                   |   15 +++-
>  scripts/build/libc/glibc-eglibc.sh-common |  124 +++++++++++++++++++++++++---
>  3 files changed, 134 insertions(+), 19 deletions(-)

Could you provide a sample .config where multilib works?

I'm strugling to get at least one configuration to at least pass the
C library headers install step, and none works... :-(

If I could get a sane and known-working starting point, I could build
from there.

Regards,
Yann E. MORIN.

-- 
.-----------------.--------------------.------------------.--------------------.
|  Yann E. MORIN  | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: |
| +33 662 376 056 | Software  Designer | \ / CAMPAIGN     |  ___               |
| +33 223 225 172 `------------.-------:  X  AGAINST      |  \e/  There is no  |
| http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL    |   v   conspiracy.  |
'------------------------------^-------^------------------^--------------------'

--
For unsubscribe information see http://sourceware.org/lists.html#faq

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

* Re: [PATCH 1/1] Add multilib build support for libc target.
  2011-12-12 23:07 ` [PATCH 1/1] Add multilib build support for libc target Yann E. MORIN
@ 2011-12-13  8:38   ` Konrad Eisele
  2011-12-13 17:15     ` Yann E. MORIN
  0 siblings, 1 reply; 13+ messages in thread
From: Konrad Eisele @ 2011-12-13  8:38 UTC (permalink / raw)
  To: Yann E. MORIN; +Cc: crossgcc

Yann E. MORIN wrote:
> Konrad, All,
> 
> On Monday 14 November 2011 11:37:59 Konrad Eisele wrote:
>> ---
>>  scripts/build/binutils/binutils.sh        |   14 +++-
>>  scripts/build/cc/gcc.sh                   |   15 +++-
>>  scripts/build/libc/glibc-eglibc.sh-common |  124 +++++++++++++++++++++++++---
>>  3 files changed, 134 insertions(+), 19 deletions(-)
> 
> Could you provide a sample .config where multilib works?
> 
> I'm strugling to get at least one configuration to at least pass the
> C library headers install step, and none works... :-(
> 
> If I could get a sane and known-working starting point, I could build
> from there.

$wget http://crosstool-ng.org/download/crosstool-ng/crosstool-ng-1.13.0.tar.bz2
$wget ftp://gaisler.com/gaisler.com/linux/patches/ct-1.diff
$tar xvf crosstool-ng-1.13.0.tar.bz2
$cat ct-1.diff | patch -p1 -d crosstool-ng-1.13.0
$cd crosstool-ng-1.13.0
$make -f Makefile.local.mk do_install
$make -f Makefile.local.mk do_build

The patch ct-1.diff adds crosstool-ng-1.13.0/build/ctng/.config
which is the conf file that build the toolchain in:
/opt/sparc-linux-4.6.0-toolchains/multilib (must be writable or change)
$make -f Makefile.local.mk do_install
install itself in crosstool-ng-1.13.0/build
$make -f Makefile.local.mk do_build
builds inside crosstool-ng-1.13.0/build/ctng using the supplied .config,
and finally to debug:
$make -f Makefile.local.mk do_build RESTART=<step> STOP=<step>
The toolchain has 4 multilib combinations:
"-msoft-float",  "-msoft-float -mv8", "-mv8" and "" .

-- Konrad

ps:
$cat /etc/slackware-version
Slackware 12.2.0
$uname  -a
Linux ada 2.6.27.31-smp #1 SMP Mon Dec 13 16:52:53 CET 2010 i686 Intel(R) Core(TM) i7 CPU         950  @ 3.07GHz GenuineIntel GNU/Linux


> 
> Regards,
> Yann E. MORIN.
> 


--
For unsubscribe information see http://sourceware.org/lists.html#faq

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

* Re: [PATCH 1/1] Add multilib build support for libc target.
  2011-12-13  8:38   ` Konrad Eisele
@ 2011-12-13 17:15     ` Yann E. MORIN
  0 siblings, 0 replies; 13+ messages in thread
From: Yann E. MORIN @ 2011-12-13 17:15 UTC (permalink / raw)
  To: crossgcc; +Cc: Konrad Eisele

konrad, All,

On Tuesday 13 December 2011 09:30:24 Konrad Eisele wrote:
> Yann E. MORIN wrote:
> > Could you provide a sample .config where multilib works?
> > 
> > I'm strugling to get at least one configuration to at least pass the
> > C library headers install step, and none works... :-(
> > 
> > If I could get a sane and known-working starting point, I could build
> > from there.
> 
> $wget http://crosstool-ng.org/download/crosstool-ng/crosstool-ng-1.13.0.tar.bz2
> $wget ftp://gaisler.com/gaisler.com/linux/patches/ct-1.diff

OK, thank you!

I fixed my issue. A plain and stupid error. The kind that gets one
completely clueless for days, wondering about one's sanity, until
one realises that it is in fact a trivial typo... Sigh... :-]

Regards,
Yann E. MORIN.

-- 
.-----------------.--------------------.------------------.--------------------.
|  Yann E. MORIN  | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: |
| +33 662 376 056 | Software  Designer | \ / CAMPAIGN     |  ___               |
| +33 223 225 172 `------------.-------:  X  AGAINST      |  \e/  There is no  |
| http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL    |   v   conspiracy.  |
'------------------------------^-------^------------------^--------------------'

--
For unsubscribe information see http://sourceware.org/lists.html#faq

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

* Re: [PATCH 1/1] Add multilib build support for libc target. Libc is build <multilib>-times in seperate sysroot directories. In a last step links are created to reflect the expected multilib structure.
  2011-11-14 10:45 [PATCH 1/1] Add multilib build support for libc target. Libc is build <multilib>-times in seperate sysroot directories. In a last step links are created to reflect the expected multilib structure Konrad Eisele
  2011-12-12 23:07 ` [PATCH 1/1] Add multilib build support for libc target Yann E. MORIN
@ 2011-12-23 23:22 ` Yann E. MORIN
  2011-12-24 21:10   ` konrad.gaisler
                     ` (2 more replies)
  1 sibling, 3 replies; 13+ messages in thread
From: Yann E. MORIN @ 2011-12-23 23:22 UTC (permalink / raw)
  To: crossgcc; +Cc: Konrad Eisele

Konrad, All,

I am slowly and not-so-smoothly coming up with a sane situation wrt the
multilib patch, but there are still a few quirks I don't get right.

First, I split the code so it is more manageable. You can check it with:

    hg qclone -p http://crosstool-ng.org/hg/crosstool-ng/ct-ng.multilib  \
                 http://crosstool-ng.org/hg/crosstool-ng                 \
                 ct-ng.multilib
    cd ct-ng.multilib
    hg qpush -a

Note, this is a WIP:
 - the last patch is just testing fixes, and is not applied (it's guarded);
 - the penultimate patch (the last one applied) is not clean yet, and I may
   split it further to ease testing.

Second, I have some difficulties understanding the do_libc_backend_rearrange
function. See below.

On Monday 14 November 2011 11:37:59 Konrad Eisele wrote:
[--SNIP--]
> diff --git a/scripts/build/libc/glibc-eglibc.sh-common b/scripts/build/libc/glibc-eglibc.sh-common
> index 2af3a9a..2c77fbf 100644
> --- a/scripts/build/libc/glibc-eglibc.sh-common
> +++ b/scripts/build/libc/glibc-eglibc.sh-common
[--SNIP--]
> +# installation is done into ${CT_SYSROOT_DIR}/${dir}. The multilib prefix has to be included
> +# to reflect the runtime setting.
> +do_libc_backend_rearrange() {
> +    local libc_mode
> +    
> +    while [ $# -ne 0 ]; do
> +        eval "${1// /\\ }"
> +        shift
> +    done
> +    
> +    if [ "${libc_mode}" = "final" ]; then
> +        cross_cc=$(CT_Which "${CT_TARGET}-gcc")
> +        for i in `${cross_cc} --print-multi-lib 2>/dev/null`; do

Can you elaborate what you are trying to achieve with this big loop?
I mean, I can read the code, and I could probably end up making it work,
but could you explain in human-readable form the idea behind this code?

From what I see it does absolutely nothing, because ...

> +           dir="${i%%;*}"
> +          bdir="$(echo ${dir} | ${sed} -r -e 's:/:\\\\/:g')"
> +           if [ "${dir}" != "." ]; then 
> +               flags="$(echo $i | ${sed} -r -e 's/^[^;]*;//' -e 's/@/ -/g')";
> +               CT_DoStep DEBUG "Fixing up multilib location ${CT_SYSROOT_DIR}/${dir}/lib to ${CT_SYSROOT_DIR}/lib/${dir}"
> +               mkdir -p ${CT_SYSROOT_DIR}/lib/${dir}
> +               mkdir -p ${CT_SYSROOT_DIR}/usr/lib/${dir}
> +
> +               # recreate the symbolic links for multilib 
> +               for f in $(find ${CT_SYSROOT_DIR}/usr/lib/${dir}/ -type l -maxdepth 1); do

... of the 'find' here, that scans two newly-created directories (just
above), so they are empty.

Did you mean to scan "${dir}/usr/lib" and not "usr/lib/${dir}" ?

And what about "${dir}/lib" ?

Besides, the options ordering to the 'find' command is wrong, and 'find'
complains loudly. No problem, fixed here.

> +                   fn=`basename $f`
> +                   ln=`readlink $f`
> +                   ln=`basename $ln`
> +		   # go toward root. Count the numer of "/" and asseble a "../.." prefix 
> +                   pre=$( echo ${dir} | awk '{r="";
> +		       c=split($0,b,"/");
> +		       for(i=0;i<c;i++){
> +		           if(i!=0){r=r "/";}
> +			   r=r "..";
> +		       };
> +		       printf("%s",r);
> +		   }')
> +		   CT_Pushd "${CT_SYSROOT_DIR}/usr/lib/${dir}/"
> +                   ln -sf ../../${pre}/lib/${dir}/$ln $fn
> +		   CT_Popd
> +               done
> +
> +               # rewrite the library multiplexers
> +               for l in libc libpthread libgcc_s; do
> +                   for d in lib/${dir} usr/lib/${dir}; do
> +                       if [ -f "${CT_SYSROOT_DIR}/${d}/${l}.so" -a ! -L ${CT_SYSROOT_DIR}/${d}/${l}.so ]; then
> +                           if [ ! -f "${CT_SYSROOT_DIR}/${d}/${l}.so_ori_i" ]; then
> +                               cp ${CT_SYSROOT_DIR}/${d}/${l}.so ${CT_SYSROOT_DIR}/${d}/${l}.so_ori_i
> +                               cat ${CT_SYSROOT_DIR}/${d}/${l}.so_ori_i | ${sed} -r -e "s/\/lib\/$l/\/lib\/$bdir\/$l/g" > ${CT_SYSROOT_DIR}/${d}/${l}.so

With this sed expression, you are not rewriting the dynamic linker path,
which means a multilib variant still uses the default "ld.so".

I think the following sed-expr does the trick (and does not require
the '/' mangling done above):
    "s:/lib/:/lib/${dir}/:g;"

(mangling ':' in ${dir} is not needed, the dirname can not contain a ':',
as ':' is the multilib separator in "gcc -print-multi-lib").

> +			   else
> +			       CT_DoLog WARN "${CT_SYSROOT_DIR}/${d}/${l}.so has already been patched, skipping"
> +                           fi
> +                       fi
> +                   done
> +               done
> +               CT_EndStep
> +           fi
> +        done;

In the end, it leaves everything in "sysroot/${dir}".
It would make much more sense to carefully move the libs in their correct
place, that is:
 - move everything from "sysroot/${dir}/lib"     -> "sysroot/lib/${dir}"
                    and "sysroot/${dir}/usr/lib" -> "sysroot/usr/lib/${dir}"
 - get rid of "sysroot/${dir}" alltogether

That's because gcc will search for things in "sysroot/{usr/,}lib/${dir}/",
not in "sysroot/${dir}/{usr/,}lib/"

Of course, we can go with the symlinks first; once that works, we can look
into doing the move and clean-up.

[--SNIP--]
>      case "${CT_ARCH_FLOAT_HW},${CT_ARCH_FLOAT_SW}" in
> -        y,) extra_config+=("--with-fp");;
> +        y,) # if it is a <multilib> build then check if -msoft-float is given
> +	    if [ "x`expr "${extra_flags}" : '.*-msoft-float.*'`" != "x0" ]; then
> +	    	extra_config+=("--with-fp=no");
> +	    else
> +	    	extra_config+=("--with-fp");
> +	    fi
> +	    ;;
>          ,y) extra_config+=("--without-fp");;
>      esac

Floats are not the only thing we have to account for. For example, some
archs can define big/little multilib. And most probably other stuff
as well...

Well... Time for some rejoicing !
Merry X-Mas to All, and a Happy New Year! Cheers !

Regards,
Yann E. MORIN.

-- 
.-----------------.--------------------.------------------.--------------------.
|  Yann E. MORIN  | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: |
| +33 662 376 056 | Software  Designer | \ / CAMPAIGN     |  ___               |
| +33 223 225 172 `------------.-------:  X  AGAINST      |  \e/  There is no  |
| http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL    |   v   conspiracy.  |
'------------------------------^-------^------------------^--------------------'

--
For unsubscribe information see http://sourceware.org/lists.html#faq

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

* Re: [PATCH 1/1] Add multilib build support for libc target. Libc is build <multilib>-times in seperate sysroot directories. In a last step links are created to reflect the expected multilib structure.
  2011-12-23 23:22 ` [PATCH 1/1] Add multilib build support for libc target. Libc is build <multilib>-times in seperate sysroot directories. In a last step links are created to reflect the expected multilib structure Yann E. MORIN
@ 2011-12-24 21:10   ` konrad.gaisler
  2011-12-26 16:57     ` Yann E. MORIN
  2011-12-26 17:29     ` Yann E. MORIN
  2011-12-27 23:57   ` [PATCH 1/1] Add multilib build support [...] Yann E. MORIN
  2011-12-31 18:01   ` Yann E. MORIN
  2 siblings, 2 replies; 13+ messages in thread
From: konrad.gaisler @ 2011-12-24 21:10 UTC (permalink / raw)
  To: Yann E. MORIN; +Cc: crossgcc

 >From what I see it does absolutely nothing, because ...
>> +           dir="${i%%;*}"
>> +          bdir="$(echo ${dir} | ${sed} -r -e 's:/:\\\\/:g')"
>> +           if [ "${dir}" != "." ]; then
>> +               flags="$(echo $i | ${sed} -r -e 's/^[^;]*;//' -e 's/@/ -/g')";
>> +               CT_DoStep DEBUG "Fixing up multilib location ${CT_SYSROOT_DIR}/${dir}/lib to ${CT_SYSROOT_DIR}/lib/${dir}"
>> +               mkdir -p ${CT_SYSROOT_DIR}/lib/${dir}
>> +               mkdir -p ${CT_SYSROOT_DIR}/usr/lib/${dir}
>> +
>> +               # recreate the symbolic links for multilib
>> +               for f in $(find ${CT_SYSROOT_DIR}/usr/lib/${dir}/ -type l -maxdepth 1); do
> ... of the 'find' here, that scans two newly-created directories (just
> above), so they are empty.
>
> Did you mean to scan "${dir}/usr/lib" and not "usr/lib/${dir}" ?
>
> And what about "${dir}/lib" ?

Is it possible that I missed something here? I think the
first patch I sent included this lines:

do_libc_start_files() {
     cross_cc=$(CT_Which "${CT_TARGET}-gcc")
     if [ "${CT_CC_MULTILIB}" = "y" ]; then
     for i in `${cross_cc} --print-multi-lib 2>/dev/null`; do
             dir=`echo $i | sed -e 's/;.*$//'`;
         if [ "${dir}" = "." ]; then
         true;
         else
         if [ "${CT_USE_SYSROOT}" = "y" ]; then
             # prepare installation redirects
             mkdir -p ${CT_SYSROOT_DIR}/${dir}/usr
             mkdir -p ${CT_SYSROOT_DIR}/lib/${dir}
             mkdir -p ${CT_SYSROOT_DIR}/usr/lib/${dir}
             ln -sf ${CT_SYSROOT_DIR}/usr/lib/${dir} 
${CT_SYSROOT_DIR}/${dir}/usr/lib
             ln -sf ${CT_SYSROOT_DIR}/lib/${dir} 
${CT_SYSROOT_DIR}/${dir}/lib
             fi
         flags=`echo $i | sed -e 's/^[^;]*;//' -e 's/@/ -/g'`;
         CT_DoStep INFO "Installing C library start files multilibbed. 
Flags: ${flags} Dir: ${dir}"
         do_single_libc_start_files "/${dir}" "${flags}"
         CT_EndStep
         fi
     done;
     fi
     do_single_libc_start_files
}

These symlinks that are installed before the glibc
installs make that
${CT_SYSROOT_DIR}/${dir}/usr/lib
end up in
${CT_SYSROOT_DIR}/usr/lib/${dir}
and
${CT_SYSROOT_DIR}/${dir}/lib
end up in
${CT_SYSROOT_DIR}/lib/${dir}

The point here is that glibc's install process adds the /lib at the
end, however the multilib structure must have /lib before:
/lib/<multilib>. Adding these symlinks before makes the
libraries end up in the right place. The "rearrange" stage
then fixes up the wrong paths.
Hope that makes it more clear.

The whole thing might have to be rewritten, I think
you might come up with a solution that is easier.


>
> Besides, the options ordering to the 'find' command is wrong, and 'find'
> complains loudly. No problem, fixed here.
>
>> +                   fn=`basename $f`
>> +                   ln=`readlink $f`
>> +                   ln=`basename $ln`
>> +		   # go toward root. Count the numer of "/" and asseble a "../.." prefix
>> +                   pre=$( echo ${dir} | awk '{r="";
>> +		       c=split($0,b,"/");
>> +		       for(i=0;i<c;i++){
>> +		           if(i!=0){r=r "/";}
>> +			   r=r "..";
>> +		       };
>> +		       printf("%s",r);
>> +		   }')
>> +		   CT_Pushd "${CT_SYSROOT_DIR}/usr/lib/${dir}/"
>> +                   ln -sf ../../${pre}/lib/${dir}/$ln $fn
>> +		   CT_Popd
>> +               done
>> +
>> +               # rewrite the library multiplexers
>> +               for l in libc libpthread libgcc_s; do
>> +                   for d in lib/${dir} usr/lib/${dir}; do
>> +                       if [ -f "${CT_SYSROOT_DIR}/${d}/${l}.so" -a ! -L ${CT_SYSROOT_DIR}/${d}/${l}.so ]; then
>> +                           if [ ! -f "${CT_SYSROOT_DIR}/${d}/${l}.so_ori_i" ]; then
>> +                               cp ${CT_SYSROOT_DIR}/${d}/${l}.so ${CT_SYSROOT_DIR}/${d}/${l}.so_ori_i
>> +                               cat ${CT_SYSROOT_DIR}/${d}/${l}.so_ori_i | ${sed} -r -e "s/\/lib\/$l/\/lib\/$bdir\/$l/g">  ${CT_SYSROOT_DIR}/${d}/${l}.so
> With this sed expression, you are not rewriting the dynamic linker path,
> which means a multilib variant still uses the default "ld.so".
You might be right. My particular toolchain doesnt care as for the
ld.so probably doesnt differ. It is also so that in the final running
embedded-system, there is only one libc set, that is copied back
to /usr/lib. I think buildroot needs a patch to copy the right set
of libc though.

>
> I think the following sed-expr does the trick (and does not require
> the '/' mangling done above):
>      "s:/lib/:/lib/${dir}/:g;"
>
> (mangling ':' in ${dir} is not needed, the dirname can not contain a ':',
> as ':' is the multilib separator in "gcc -print-multi-lib").
>
>> +			   else
>> +			       CT_DoLog WARN "${CT_SYSROOT_DIR}/${d}/${l}.so has already been patched, skipping"
>> +                           fi
>> +                       fi
>> +                   done
>> +               done
>> +               CT_EndStep
>> +           fi
>> +        done;
> In the end, it leaves everything in "sysroot/${dir}".
> It would make much more sense to carefully move the libs in their correct
> place, that is:
>   - move everything from "sysroot/${dir}/lib"     ->  "sysroot/lib/${dir}"
>                      and "sysroot/${dir}/usr/lib" ->  "sysroot/usr/lib/${dir}"
>   - get rid of "sysroot/${dir}" alltogether
>
> That's because gcc will search for things in "sysroot/{usr/,}lib/${dir}/",
> not in "sysroot/${dir}/{usr/,}lib/"
I'm not an insider to glibc, but maybe there is a option to
glibc's configure that create the right multilib structure.
Then all the hustle with moving and or creating symbolic
links  would be unneeded.

>
> Of course, we can go with the symlinks first; once that works, we can look
> into doing the move and clean-up.
>
> [--SNIP--]
>>       case "${CT_ARCH_FLOAT_HW},${CT_ARCH_FLOAT_SW}" in
>> -        y,) extra_config+=("--with-fp");;
>> +        y,) # if it is a<multilib>  build then check if -msoft-float is given
>> +	    if [ "x`expr "${extra_flags}" : '.*-msoft-float.*'`" != "x0" ]; then
>> +	    	extra_config+=("--with-fp=no");
>> +	    else
>> +	    	extra_config+=("--with-fp");
>> +	    fi
>> +	    ;;
>>           ,y) extra_config+=("--without-fp");;
>>       esac
> Floats are not the only thing we have to account for. For example, some
> archs can define big/little multilib. And most probably other stuff
> as well...
Sorry, I dont really know the requirements for other archs, I
come up with this because I require for sparc glibc the --with-fp=no.

>
> Well... Time for some rejoicing !
> Merry X-Mas to All, and a Happy New Year! Cheers !

Merry XMas back. It just has passed.
-- Konrad
>
> Regards,
> Yann E. MORIN.
>


--
For unsubscribe information see http://sourceware.org/lists.html#faq

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

* Re: [PATCH 1/1] Add multilib build support for libc target. Libc is build <multilib>-times in seperate sysroot directories. In a last step links are created to reflect the expected multilib structure.
  2011-12-24 21:10   ` konrad.gaisler
@ 2011-12-26 16:57     ` Yann E. MORIN
  2011-12-26 19:03       ` konrad.gaisler
  2011-12-26 17:29     ` Yann E. MORIN
  1 sibling, 1 reply; 13+ messages in thread
From: Yann E. MORIN @ 2011-12-26 16:57 UTC (permalink / raw)
  To: crossgcc; +Cc: konrad.gaisler

Konrad, All,

On Saturday 24 December 2011 22:11:43 konrad.gaisler wrote:
[--SNIP--]
> Is it possible that I missed something here? I think the
> first patch I sent included this lines:
> 
> do_libc_start_files() {
[--SNIP--]
> }

Indeed, this was missing in your first and second patches:
    http://sourceware.org/ml/crossgcc/2011-11/msg00029.html
    http://sourceware.org/ml/crossgcc/2011-11/msg00040.html

I now have a better understanding of what is required, and where it is.
Thanks!

> The point here is that glibc's install process adds the /lib at the
> end, however the multilib structure must have /lib before:
> /lib/<multilib>. Adding these symlinks before makes the
> libraries end up in the right place. The "rearrange" stage
> then fixes up the wrong paths.
> Hope that makes it more clear.

That I understood, the part that was misleading was the missing hunk
in do_libc_start_files.

[--SNIP--]
> >> +                               cat ${CT_SYSROOT_DIR}/${d}/${l}.so_ori_i | ${sed} -r -e "s/\/lib\/$l/\/lib\/$bdir\/$l/g">  ${CT_SYSROOT_DIR}/${d}/${l}.so
> > With this sed expression, you are not rewriting the dynamic linker path,
> > which means a multilib variant still uses the default "ld.so".
> You might be right. My particular toolchain doesnt care as for the
> ld.so probably doesnt differ. It is also so that in the final running
> embedded-system, there is only one libc set, that is copied back
> to /usr/lib.

That is something we'll have to check later: is it possible to have more
than one multilib running on the target? I believe that would need some
non-trivial hackery to work properly...

[--SNIP--]
> > In the end, it leaves everything in "sysroot/${dir}".
> > It would make much more sense to carefully move the libs in their correct
> > place, that is:
> >   - move everything from "sysroot/${dir}/lib"     ->  "sysroot/lib/${dir}"
> >                      and "sysroot/${dir}/usr/lib" ->  "sysroot/usr/lib/${dir}"
> >   - get rid of "sysroot/${dir}" alltogether
> >
> > That's because gcc will search for things in "sysroot/{usr/,}lib/${dir}/",
> > not in "sysroot/${dir}/{usr/,}lib/"
> I'm not an insider to glibc, but maybe there is a option to
> glibc's configure that create the right multilib structure.
> Then all the hustle with moving and or creating symbolic
> links  would be unneeded.

Anyway, with the missing part you added above, it is more clear what you
were trying to achieve.

[--SNIP--]
> > Floats are not the only thing we have to account for. For example, some
> > archs can define big/little multilib. And most probably other stuff
> > as well...
> Sorry, I dont really know the requirements for other archs, I
> come up with this because I require for sparc glibc the --with-fp=no.

Yep, I was just saying ;-)

Regards,
Yann E. MORIN.

-- 
.-----------------.--------------------.------------------.--------------------.
|  Yann E. MORIN  | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: |
| +33 662 376 056 | Software  Designer | \ / CAMPAIGN     |  ___               |
| +33 223 225 172 `------------.-------:  X  AGAINST      |  \e/  There is no  |
| http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL    |   v   conspiracy.  |
'------------------------------^-------^------------------^--------------------'

--
For unsubscribe information see http://sourceware.org/lists.html#faq

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

* Re: [PATCH 1/1] Add multilib build support for libc target. Libc is build <multilib>-times in seperate sysroot directories. In a last step links are created to reflect the expected multilib structure.
  2011-12-24 21:10   ` konrad.gaisler
  2011-12-26 16:57     ` Yann E. MORIN
@ 2011-12-26 17:29     ` Yann E. MORIN
  1 sibling, 0 replies; 13+ messages in thread
From: Yann E. MORIN @ 2011-12-26 17:29 UTC (permalink / raw)
  To: crossgcc; +Cc: konrad.gaisler

Konrad, All,

On Saturday 24 December 2011 22:11:43 konrad.gaisler wrote:
[--SNIP--]
> > With this sed expression, you are not rewriting the dynamic linker path,
> > which means a multilib variant still uses the default "ld.so".
> You might be right. My particular toolchain doesnt care as for the
> ld.so probably doesnt differ.

The toolchain that I built (yours, minus the Leon patches) has the
following multilibs:
    # sparc-leon3-linux-gnu-gcc -print-multi-lib
    .;
    soft;@msoft-float

And the dynamic linkers are different:
    # ls -l sysroot/lib/ld-2.14.so \
            sysroot/soft/lib/ld-2.14.so
    -rwxr-xr-x 1 ymorin ymorin 816566 Dec 23 21:46 sysroot/lib/ld-2.14.so
    -rwxr-xr-x 1 ymorin ymorin 816110 Dec 23 21:51 sysroot/soft/lib/ld-2.14.so

The 'soft' one is 456 bytes smaller than the default one.

FWIW...

Regards,
Yann E. MORIN.

-- 
.-----------------.--------------------.------------------.--------------------.
|  Yann E. MORIN  | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: |
| +33 662 376 056 | Software  Designer | \ / CAMPAIGN     |  ___               |
| +33 223 225 172 `------------.-------:  X  AGAINST      |  \e/  There is no  |
| http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL    |   v   conspiracy.  |
'------------------------------^-------^------------------^--------------------'

--
For unsubscribe information see http://sourceware.org/lists.html#faq

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

* Re: [PATCH 1/1] Add multilib build support for libc target. Libc is build <multilib>-times in seperate sysroot directories. In a last step links are created to reflect the expected multilib structure.
  2011-12-26 16:57     ` Yann E. MORIN
@ 2011-12-26 19:03       ` konrad.gaisler
  2011-12-26 21:30         ` Yann E. MORIN
  0 siblings, 1 reply; 13+ messages in thread
From: konrad.gaisler @ 2011-12-26 19:03 UTC (permalink / raw)
  To: Yann E. MORIN; +Cc: crossgcc

On 12/26/2011 05:56 PM, Yann E. MORIN wrote:
> Konrad, All,
>
> On Saturday 24 December 2011 22:11:43 konrad.gaisler wrote:
> [--SNIP--]
>> Is it possible that I missed something here? I think the
>> first patch I sent included this lines:
>>
>> do_libc_start_files() {
> [--SNIP--]
>> }
> Indeed, this was missing in your first and second patches:
>      http://sourceware.org/ml/crossgcc/2011-11/msg00029.html
>      http://sourceware.org/ml/crossgcc/2011-11/msg00040.html
>
> I now have a better understanding of what is required, and where it is.
> Thanks!
>
>> The point here is that glibc's install process adds the /lib at the
>> end, however the multilib structure must have /lib before:
>> /lib/<multilib>. Adding these symlinks before makes the
>> libraries end up in the right place. The "rearrange" stage
>> then fixes up the wrong paths.
>> Hope that makes it more clear.
> That I understood, the part that was misleading was the missing hunk
> in do_libc_start_files.
>
> [--SNIP--]
>>>> +                               cat ${CT_SYSROOT_DIR}/${d}/${l}.so_ori_i | ${sed} -r -e "s/\/lib\/$l/\/lib\/$bdir\/$l/g">   ${CT_SYSROOT_DIR}/${d}/${l}.so
>>> With this sed expression, you are not rewriting the dynamic linker path,
>>> which means a multilib variant still uses the default "ld.so".
>> You might be right. My particular toolchain doesnt care as for the
>> ld.so probably doesnt differ. It is also so that in the final running
>> embedded-system, there is only one libc set, that is copied back
>> to /usr/lib.
> That is something we'll have to check later: is it possible to have more
> than one multilib running on the target? I believe that would need some
> non-trivial hackery to work properly...
No, not multiple multilibs, but one of the multilibs subdirs. For example
for the leon-sparc toolchain, the toolchain would have 4 subdirs: ./ 
msoft-float/
mv8 and mv8/msoft-float.
on hardware without fpu but mv8 you would  only copy and use the
mv8/msoft-float multilib-subdir  at /usr/lib, the others will not be used.
-- Konrad

>
> [--SNIP--]
>>> In the end, it leaves everything in "sysroot/${dir}".
>>> It would make much more sense to carefully move the libs in their correct
>>> place, that is:
>>>    - move everything from "sysroot/${dir}/lib"     ->   "sysroot/lib/${dir}"
>>>                       and "sysroot/${dir}/usr/lib" ->   "sysroot/usr/lib/${dir}"
>>>    - get rid of "sysroot/${dir}" alltogether
>>>
>>> That's because gcc will search for things in "sysroot/{usr/,}lib/${dir}/",
>>> not in "sysroot/${dir}/{usr/,}lib/"
>> I'm not an insider to glibc, but maybe there is a option to
>> glibc's configure that create the right multilib structure.
>> Then all the hustle with moving and or creating symbolic
>> links  would be unneeded.
> Anyway, with the missing part you added above, it is more clear what you
> were trying to achieve.
>
> [--SNIP--]
>>> Floats are not the only thing we have to account for. For example, some
>>> archs can define big/little multilib. And most probably other stuff
>>> as well...
>> Sorry, I dont really know the requirements for other archs, I
>> come up with this because I require for sparc glibc the --with-fp=no.
> Yep, I was just saying ;-)
>
> Regards,
> Yann E. MORIN.
>


--
For unsubscribe information see http://sourceware.org/lists.html#faq

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

* Re: [PATCH 1/1] Add multilib build support for libc target. Libc is build <multilib>-times in seperate sysroot directories. In a last step links are created to reflect the expected multilib structure.
  2011-12-26 19:03       ` konrad.gaisler
@ 2011-12-26 21:30         ` Yann E. MORIN
  0 siblings, 0 replies; 13+ messages in thread
From: Yann E. MORIN @ 2011-12-26 21:30 UTC (permalink / raw)
  To: crossgcc; +Cc: konrad.gaisler

Konrad, All,

On Monday 26 December 2011 20:04:19 konrad.gaisler wrote:
> On 12/26/2011 05:56 PM, Yann E. MORIN wrote:
> > That is something we'll have to check later: is it possible to have more
> > than one multilib running on the target? I believe that would need some
> > non-trivial hackery to work properly...
> No, not multiple multilibs, but one of the multilibs subdirs. For example
> for the leon-sparc toolchain, the toolchain would have 4 subdirs: ./ 
> msoft-float/
> mv8 and mv8/msoft-float.
> on hardware without fpu but mv8 you would  only copy and use the
> mv8/msoft-float multilib-subdir  at /usr/lib, the others will not be used.

So, it is not possible to have (hypthetical setup for ARM with neon):

 - the basic system (eg. /bin/busybox ;-)) using the default multilib
   from "sysroot/lib" and "sysroot/usr/lib" (resp as "/lib" and "/usr/lib"
   at runtime)

 - some 'optimised' components (eg. mp3 player) using the float-optimised
   multilib from "sysroot/neon/lib" and "sysroot/usr/lib/neon" (resp as
   "/lib/neon" and "/usr/lib/neon" at runtime)

That would require that:
 - the linker 'ld' sets the proper path to the dynamic linker, at _built-time_
 - the dynamic linker looks in the proper search-path

Sounds like it's not too easy... :-/

But I agree with you, the most common setup would probably be to use only
one variant on the target, either everything from the defaults /lib and
/usr/lib, or everything from a sub-dir (eg. /lib/neon and usr/lib/neon)
and not a mix... Let's make that work first! ;-)

Thanks again!

Regards,
Yann E. MORIN.

-- 
.-----------------.--------------------.------------------.--------------------.
|  Yann E. MORIN  | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: |
| +33 662 376 056 | Software  Designer | \ / CAMPAIGN     |  ___               |
| +33 223 225 172 `------------.-------:  X  AGAINST      |  \e/  There is no  |
| http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL    |   v   conspiracy.  |
'------------------------------^-------^------------------^--------------------'

--
For unsubscribe information see http://sourceware.org/lists.html#faq

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

* Re: [PATCH 1/1] Add multilib build support [...]
  2011-12-23 23:22 ` [PATCH 1/1] Add multilib build support for libc target. Libc is build <multilib>-times in seperate sysroot directories. In a last step links are created to reflect the expected multilib structure Yann E. MORIN
  2011-12-24 21:10   ` konrad.gaisler
@ 2011-12-27 23:57   ` Yann E. MORIN
  2011-12-31 18:01   ` Yann E. MORIN
  2 siblings, 0 replies; 13+ messages in thread
From: Yann E. MORIN @ 2011-12-27 23:57 UTC (permalink / raw)
  To: crossgcc; +Cc: Konrad Eisele

Konrad, All,

On Saturday 24 December 2011 00:22:18 Yann E. MORIN wrote:
> 
> I am slowly and not-so-smoothly coming up with a sane situation wrt the
> multilib patch, but there are still a few quirks I don't get right.
> 
> First, I split the code so it is more manageable. You can check it with:
> 
>     hg qclone -p http://crosstool-ng.org/hg/crosstool-ng/ct-ng.multilib  \
>                  http://crosstool-ng.org/hg/crosstool-ng                 \
>                  ct-ng.multilib
>     cd ct-ng.multilib
>     hg qpush -a

FYI, this MQ has been updated, and is now functional for the few tests
I did.

Beside your SPARC config, I managed to build an ARM multilib by tweaking
the gcc source code (by default, there is no multilib when targeting Linux).

In the coming days, I'll clean up the code (there are a few things left)
and do some more tests, and it will most probably be pushed upstream
before the end of the year!

Woohoo! Donuts! ;-)

Regards,
Yann E. MORIN.

-- 
.-----------------.--------------------.------------------.--------------------.
|  Yann E. MORIN  | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: |
| +33 662 376 056 | Software  Designer | \ / CAMPAIGN     |  ___               |
| +33 223 225 172 `------------.-------:  X  AGAINST      |  \e/  There is no  |
| http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL    |   v   conspiracy.  |
'------------------------------^-------^------------------^--------------------'

--
For unsubscribe information see http://sourceware.org/lists.html#faq

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

* Re: [PATCH 1/1] Add multilib build support [...]
  2011-12-23 23:22 ` [PATCH 1/1] Add multilib build support for libc target. Libc is build <multilib>-times in seperate sysroot directories. In a last step links are created to reflect the expected multilib structure Yann E. MORIN
  2011-12-24 21:10   ` konrad.gaisler
  2011-12-27 23:57   ` [PATCH 1/1] Add multilib build support [...] Yann E. MORIN
@ 2011-12-31 18:01   ` Yann E. MORIN
  2012-01-02  7:17     ` konrad.gaisler
  2 siblings, 1 reply; 13+ messages in thread
From: Yann E. MORIN @ 2011-12-31 18:01 UTC (permalink / raw)
  To: crossgcc; +Cc: Konrad Eisele

Konrad, All,

On Saturday 24 December 2011 00:22:18 Yann E. MORIN wrote:
> I am slowly and not-so-smoothly coming up with a sane situation wrt the
> multilib patch, but there are still a few quirks I don't get right.
> 
> First, I split the code so it is more manageable. You can check it with:
> 
>     hg qclone -p http://crosstool-ng.org/hg/crosstool-ng/ct-ng.multilib  \
>                  http://crosstool-ng.org/hg/crosstool-ng                 \
>                  ct-ng.multilib
>     cd ct-ng.multilib
>     hg qpush -a

Good news! This MQ has been finalised, on is now upstream:
    http://crosstool-ng.org/hg/crosstool-ng/

Because it has been long in the coming, I forgot to properly credit your
initial work, in the commit messages. I do apologise for that mistake.
However, your work is now properly credited in the documentation:
    http://crosstool-ng.org/hg/crosstool-ng/rev/0c3c95f911ec

Thank you again!

Happy New Year! Regards,
Yann E. MORIN.

-- 
.-----------------.--------------------.------------------.--------------------.
|  Yann E. MORIN  | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: |
| +33 662 376 056 | Software  Designer | \ / CAMPAIGN     |  ___               |
| +33 223 225 172 `------------.-------:  X  AGAINST      |  \e/  There is no  |
| http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL    |   v   conspiracy.  |
'------------------------------^-------^------------------^--------------------'

--
For unsubscribe information see http://sourceware.org/lists.html#faq

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

* Re: [PATCH 1/1] Add multilib build support [...]
  2011-12-31 18:01   ` Yann E. MORIN
@ 2012-01-02  7:17     ` konrad.gaisler
  0 siblings, 0 replies; 13+ messages in thread
From: konrad.gaisler @ 2012-01-02  7:17 UTC (permalink / raw)
  To: Yann E. MORIN; +Cc: crossgcc

On 12/31/2011 07:01 PM, Yann E. MORIN wrote:
> Konrad, All,
>
> On Saturday 24 December 2011 00:22:18 Yann E. MORIN wrote:
>> I am slowly and not-so-smoothly coming up with a sane situation wrt the
>> multilib patch, but there are still a few quirks I don't get right.
>>
>> First, I split the code so it is more manageable. You can check it with:
>>
>>      hg qclone -p http://crosstool-ng.org/hg/crosstool-ng/ct-ng.multilib  \
>>                   http://crosstool-ng.org/hg/crosstool-ng                 \
>>                   ct-ng.multilib
>>      cd ct-ng.multilib
>>      hg qpush -a
> Good news! This MQ has been finalised, on is now upstream:
>      http://crosstool-ng.org/hg/crosstool-ng/
>
> Because it has been long in the coming, I forgot to properly credit your
> initial work, in the commit messages. I do apologise for that mistake.
> However, your work is now properly credited in the documentation:
>      http://crosstool-ng.org/hg/crosstool-ng/rev/0c3c95f911ec
>
> Thank you again!
>
> Happy New Year! Regards,
> Yann E. MORIN.
>
Thanks.
One thing: It seems that you anciens.enib.fr can't be reached
by emails from gaisler.com and not from goolgle gmail.com eather. I
tried to send a offtopic mail but cant get through. Is there a mailserver
domain from where mails get through or some other email address?
-- Konrad





--
For unsubscribe information see http://sourceware.org/lists.html#faq

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

end of thread, other threads:[~2012-01-02  7:17 UTC | newest]

Thread overview: 13+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2011-11-14 10:45 [PATCH 1/1] Add multilib build support for libc target. Libc is build <multilib>-times in seperate sysroot directories. In a last step links are created to reflect the expected multilib structure Konrad Eisele
2011-12-12 23:07 ` [PATCH 1/1] Add multilib build support for libc target Yann E. MORIN
2011-12-13  8:38   ` Konrad Eisele
2011-12-13 17:15     ` Yann E. MORIN
2011-12-23 23:22 ` [PATCH 1/1] Add multilib build support for libc target. Libc is build <multilib>-times in seperate sysroot directories. In a last step links are created to reflect the expected multilib structure Yann E. MORIN
2011-12-24 21:10   ` konrad.gaisler
2011-12-26 16:57     ` Yann E. MORIN
2011-12-26 19:03       ` konrad.gaisler
2011-12-26 21:30         ` Yann E. MORIN
2011-12-26 17:29     ` Yann E. MORIN
2011-12-27 23:57   ` [PATCH 1/1] Add multilib build support [...] Yann E. MORIN
2011-12-31 18:01   ` Yann E. MORIN
2012-01-02  7:17     ` konrad.gaisler

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).