177 lines
7.1 KiB
Diff
177 lines
7.1 KiB
Diff
Pulled from
|
|
|
|
http://www.eglibc.org/archives/patches/msg01035.html
|
|
|
|
Upstream-Status: Pending
|
|
Signed-off-by: Khem
|
|
|
|
As part of the menuconfig development, I encountered some outdated information in the cross-build instructions, libc/EGLIBC.cross-building. This patch updates the file with new (and tested) instructions. It is unrelated to the menuconfig support, but applies after.
|
|
|
|
My testing was done with an ARM target, and an x86_64 Linux host, so I converted the instructions to use those host/target types from the original i686/powerpc. Hope that's ok.
|
|
|
|
|
|
Thanks,
|
|
|
|
--
|
|
Steve Longerbeam | Senior Embedded Engineer, ESD Services
|
|
Mentor Embedded(tm) | 46871 Bayside Parkway, Fremont, CA 94538
|
|
P 510.354.5838 | M 408.410.2735
|
|
Nucleus(r) | Linux(r) | Android(tm) | Services | UI | Multi-OS
|
|
|
|
|
|
EGLIBC.cross-building | 59 +++++++++++++++++++++++++++++---------------------
|
|
1 file changed, 35 insertions(+), 24 deletions(-)
|
|
|
|
Index: libc/EGLIBC.cross-building
|
|
===================================================================
|
|
--- libc.orig/EGLIBC.cross-building 2012-05-09 19:33:36.522676681 -0700
|
|
+++ libc/EGLIBC.cross-building 2012-05-09 19:36:13.918684298 -0700
|
|
@@ -47,31 +47,34 @@
|
|
EGLIBC requires recent versions of the GNU binutils, GCC, and the
|
|
Linux kernel. The web page <http://www.eglibc.org/prerequisites>
|
|
documents the current requirements, and lists patches needed for
|
|
-certain target architectures. As of this writing, EGLIBC required
|
|
-binutils 2.17, GCC 4.1, and Linux 2.6.19.1.
|
|
+certain target architectures. As of this writing, these build
|
|
+instructions have been tested with binutils 2.22.51, GCC 4.6.2,
|
|
+and Linux 3.1.
|
|
|
|
First, let's set some variables, to simplify later commands. We'll
|
|
-build EGLIBC and GCC for a PowerPC target, known to the Linux kernel
|
|
-as 'powerpc', and we'll do the build on an Intel Linux box:
|
|
+build EGLIBC and GCC for an ARM target, known to the Linux kernel
|
|
+as 'arm', and we'll do the build on an Intel x86_64 Linux box:
|
|
|
|
- $ build=i686-pc-linux-gnu
|
|
+ $ build=x86_64-pc-linux-gnu
|
|
$ host=$build
|
|
- $ target=powerpc-none-linux-gnu
|
|
- $ linux_arch=powerpc
|
|
+ $ target=arm-none-linux-gnueabi
|
|
+ $ linux_arch=arm
|
|
|
|
We're using the aforementioned versions of Binutils, GCC, and Linux:
|
|
|
|
- $ binutilsv=binutils-2.17
|
|
- $ gccv=gcc-4.1.1
|
|
- $ linuxv=linux-2.6.20
|
|
+ $ binutilsv=binutils-2.22.51
|
|
+ $ gccv=gcc-4.6.2
|
|
+ $ linuxv=linux-3.1
|
|
|
|
We're carrying out the entire process under '~/cross-build', which
|
|
-contains unpacked source trees:
|
|
+contains unpacked source trees for binutils, gcc, and linux kernel,
|
|
+along with EGLIBC svn trunk (which can be checked-out with
|
|
+'svn co http://www.eglibc.org/svn/trunk eglibc'):
|
|
|
|
- $ top=$HOME/cross-build/ppc
|
|
+ $ top=$HOME/cross-build/$target
|
|
$ src=$HOME/cross-build/src
|
|
$ ls $src
|
|
- binutils-2.17 gcc-4.1.1 libc linux-2.6.20
|
|
+ binutils-2.22.51 eglibc gcc-4.6.2 linux-3.1
|
|
|
|
We're going to place our build directories in a subdirectory 'obj',
|
|
we'll install the cross-development toolchain in 'tools', and we'll
|
|
@@ -99,7 +102,7 @@
|
|
|
|
The First GCC
|
|
|
|
-For our work, we need a cross-compiler targeting a PowerPC Linux
|
|
+For our work, we need a cross-compiler targeting an ARM Linux
|
|
system. However, that configuration includes the shared library
|
|
'libgcc_s.so', which is compiled against the EGLIBC headers (which we
|
|
haven't installed yet) and linked against 'libc.so' (which we haven't
|
|
@@ -125,7 +128,8 @@
|
|
> --prefix=$tools \
|
|
> --without-headers --with-newlib \
|
|
> --disable-shared --disable-threads --disable-libssp \
|
|
- > --disable-libgomp --disable-libmudflap \
|
|
+ > --disable-libgomp --disable-libmudflap --disable-libquadmath \
|
|
+ > --disable-decimal-float --disable-libffi \
|
|
> --enable-languages=c
|
|
$ PATH=$tools/bin:$PATH make
|
|
$ PATH=$tools/bin:$PATH make install
|
|
@@ -162,12 +166,13 @@
|
|
> CXX=$tools/bin/$target-g++ \
|
|
> AR=$tools/bin/$target-ar \
|
|
> RANLIB=$tools/bin/$target-ranlib \
|
|
- > $src/libc/configure \
|
|
+ > $src/eglibc/libc/configure \
|
|
> --prefix=/usr \
|
|
> --with-headers=$sysroot/usr/include \
|
|
> --build=$build \
|
|
> --host=$target \
|
|
- > --disable-profile --without-gd --without-cvs --enable-add-ons
|
|
+ > --disable-profile --without-gd --without-cvs \
|
|
+ > --enable-add-ons=nptl,libidn,../ports
|
|
|
|
The option '--prefix=/usr' may look strange, but you should never
|
|
configure EGLIBC with a prefix other than '/usr': in various places,
|
|
@@ -181,6 +186,11 @@
|
|
The '--with-headers' option tells EGLIBC where the Linux headers have
|
|
been installed.
|
|
|
|
+The '--enable-add-ons=nptl,libidn,../ports' option tells EGLIBC to look
|
|
+for the listed glibc add-ons. Most notably the ports add-on (located
|
|
+just above the libc sources in the EGLIBC svn tree) is required to
|
|
+support ARM targets.
|
|
+
|
|
We can now use the 'install-headers' makefile target to install the
|
|
headers:
|
|
|
|
@@ -223,6 +233,7 @@
|
|
> --prefix=$tools \
|
|
> --with-sysroot=$sysroot \
|
|
> --disable-libssp --disable-libgomp --disable-libmudflap \
|
|
+ > --disable-libffi --disable-libquadmath \
|
|
> --enable-languages=c
|
|
$ PATH=$tools/bin:$PATH make
|
|
$ PATH=$tools/bin:$PATH make install
|
|
@@ -240,13 +251,14 @@
|
|
> CXX=$tools/bin/$target-g++ \
|
|
> AR=$tools/bin/$target-ar \
|
|
> RANLIB=$tools/bin/$target-ranlib \
|
|
- > $src/libc/configure \
|
|
+ > $src/eglibc/libc/configure \
|
|
> --prefix=/usr \
|
|
> --with-headers=$sysroot/usr/include \
|
|
> --with-kconfig=$obj/linux/scripts/kconfig \
|
|
> --build=$build \
|
|
> --host=$target \
|
|
- > --disable-profile --without-gd --without-cvs --enable-add-ons
|
|
+ > --disable-profile --without-gd --without-cvs \
|
|
+ > --enable-add-ons=nptl,libidn,../ports
|
|
|
|
Note the additional '--with-kconfig' option. This tells EGLIBC where to
|
|
find the host config tools used by the kernel 'make config' and 'make
|
|
@@ -337,15 +349,15 @@
|
|
ELF Header:
|
|
...
|
|
Type: EXEC (Executable file)
|
|
- Machine: PowerPC
|
|
+ Machine: ARM
|
|
|
|
...
|
|
Program Headers:
|
|
Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align
|
|
PHDR 0x000034 0x10000034 0x10000034 0x00100 0x00100 R E 0x4
|
|
- INTERP 0x000134 0x10000134 0x10000134 0x0000d 0x0000d R 0x1
|
|
- [Requesting program interpreter: /lib/ld.so.1]
|
|
- LOAD 0x000000 0x10000000 0x10000000 0x008f0 0x008f0 R E 0x10000
|
|
+ INTERP 0x000134 0x00008134 0x00008134 0x00013 0x00013 R 0x1
|
|
+ [Requesting program interpreter: /lib/ld-linux.so.3]
|
|
+ LOAD 0x000000 0x00008000 0x00008000 0x0042c 0x0042c R E 0x8000
|
|
...
|
|
|
|
Looking at the dynamic section of the installed 'libgcc_s.so', we see
|
|
@@ -357,7 +369,6 @@
|
|
Dynamic section at offset 0x1083c contains 24 entries:
|
|
Tag Type Name/Value
|
|
0x00000001 (NEEDED) Shared library: [libc.so.6]
|
|
- 0x00000001 (NEEDED) Shared library: [ld.so.1]
|
|
0x0000000e (SONAME) Library soname: [libgcc_s.so.1]
|
|
...
|
|
|