Differences between revisions 3 and 5 (spanning 2 versions)
Revision 3 as of 2015-05-01 21:50:42
Size: 4635
Editor: YunQiangSu
Comment:
Revision 5 as of 2015-05-02 02:30:05
Size: 4634
Editor: YunQiangSu
Comment:
Deletions are marked like this. Additions are marked like this.
Line 82: Line 82:
 with_deps_on_target_arch_pkgs=yes DH_VERBOSE=1 WITH_SYSROOT=/ with_deps_on_target_arch_pkgs=yes DH_VERBOSE=1 WITH_SYSROOT=/
Line 126: Line 126:
  with_deps_on_target_arch_pkgs=yes DH_VERBOSE=1 WITH_SYSROOT=/
with_deps_on_target_arch_pkgs=yes DH_VERBOSE=1 WITH_SYSROOT=/

This page shows how to bootstrap a multiarch cross toolchain.

Multiarch-Cross-Toolchain, aka as known as Wookey's way, just lke cross-gcc does.

It has pacakges like gcc-<VERSION>-<TRIPLET>, it dpends on

  • libc6-dev:<TARGET> libgcc-<VERSION>-dev:<TARGET>

  • etc.

This also shows how to bootstrap for a new architecture.

STEP 0 preparation

sudo debootstrap sid sid-chroot

sudo pbuilder login --no-targz --buildplace sid-chroot

sed -i ’s/^deb http/deb [arch=amd64] http/‘ /etc/apt/sources.list

echo “deb-src http://ftp.us.debian.org/debian sid main” >> /etc/apt/sources.list

dpkg --add-architecture mips64el

apt-get update

apt-get install binutils-mips64el-linux-gnuabi64 devscripts rdfind symlinks

STEP 1 build gcc stage1

apt-get build-dep gcc-5

apt-get purge libx32* libc6-i386 libc6-x32 # they conflicts with mips64el multilib packages

apt-get source gcc-5

apt-get install cross-gcc-dev

  • if you need gnat support, you'd wish add some other patches from:

    BUG:#782257 #783372

cd gcc-5-*;

  • patch -p1 < /tmp/0001-version.patch

    patch -p1 < /tmp/0002-control.patch

    patch -p1 < /tmp/0003-patch.patch

    patch -p1 < /usr/share/cross-gcc/patches/gcc-5/0001-gcc_cross_multiarch.patch

    patch -p1 < /usr/share/cross-gcc/patches/gcc-5/0002-allow-no-biarch.patch

    patch -p1 < /usr/share/cross-gcc/patches/gcc-5/0003-gxx-crossbase-substvar.patch

    patch -p1 < /usr/share/cross-gcc/patches/gcc-5/0004-reverted-removal-of-with_deps_on_target_arch_pkgs-in.patch

    patch -p1 < /usr/share/cross-gcc/patches/gcc-5/0005-Allow-target-selection-via-dpkg-buildpackage-target-.patch

    patch -p1 < /usr/share/cross-gcc/patches/gcc-5/0006-fix-with_deps_on_target_arch_pkgs-yes-DEB_STAGE-stag.patch

    patch -p1 < /usr/share/cross-gcc/patches/gcc-5/0007-Skip-libjit-when-we-re-cross-building.patch

    patch -p1 < /usr/share/cross-gcc/patches/gcc-5/0008-g-include-directories-functional-again.patch

sed -i '/^ada_no_cross/c ada_no_cross := yes' debian/rules.defs

  • due to libgnatprj depends on gmp.h, which can only be built when gcc is ready.

Then run:

with_deps_on_target_arch_pkgs=yes DH_VERBOSE=1 WITH_SYSROOT=/ BACKPORT=false PKG_IGNORE_CURRENTLY_BUILDING=1 DEB_BUILD_OPTIONS=nostrip DEB_STAGE=stage1 dpkg-buildpackage --target-arch=mips64el -b -uc -us -d

We can get these deb files:

  • cpp-5-mips64el-linux-gnuabi64 gcc-5-multilib-mips64el-linux-gnuabi64 libgcc-5-dev gcc-5-mips64el-linux-gnuabi64 lib32gcc-5-dev libn32gcc-5-dev
  • dpkg --force-all -i ../*.deb
    • -force-all as we have not gcc-5-base:mips64el yet.

STEP 2 build linux-libc-dev

apt-get source linux; cd linux-*

make -f debian/rules.gen binary-libc-dev_mips64el

dpkg -i ../linux-libc-dev*.deb

STEP 3 glibc stage1

apt-get source glibc; cd glibc-*

  • patch the source with patch from BUG:#773300

Then run

  • DEB_STAGE=stage1 DEB_GCC_VERSION=-5 dpkg-buildpackage -B -amips64el -d

dpkg --force-all -i ../libc6*.deb

  • --force-all as we have not libgcc1:mips64el yet.

STEP 4 gcc stage2

on the same source with stage1 gcc.

with_deps_on_target_arch_pkgs=yes DH_VERBOSE=1 WITH_SYSROOT=/ BACKPORT=false PKG_IGNORE_CURRENTLY_BUILDING=1 DEB_BUILD_OPTIONS=nostrip DEB_STAGE=stage2 dpkg-buildpackage --target-arch=mips64el -b -uc -us -d

We can get these Debs

  • cpp-5-mips64el-linux-gnuabi64 lib32gcc-4.9-dev libgcc1-dbg libn32gcc1 gcc-5-base lib32gcc1-dbg libgcc1 gcc-5-mips64el-linux-gnuabi64 lib32gcc1 libn32gcc-4.9-dev gcc-5-multilib-mips64el-linux-gnuabi64 libgcc-5-dev libn32gcc1-dbg

install them

  • dpkg -i ../*.deb

STEP 5 glibc stage2

DEB_STAGE=stage2 DEB_GCC_VERSION=-5 dpkg-buildpackage -B -amips64el -d

We can get Debs and install them

dpkg -i ../libc6_*_mips64el.deb ../libc6-dev_*_mips64el.deb ../libc6-dev-mips*.deb ../libc6-mips*.deb

STEP 6 gcc stage3

with_deps_on_target_arch_pkgs=yes DH_VERBOSE=1 WITH_SYSROOT=/ BACKPORT=false PKG_IGNORE_CURRENTLY_BUILDING=1 DEB_BUILD_OPTIONS=nostrip dpkg-buildpackage --target-arch=mips64el -b -uc -us -d

STEP 7 gmp/selinux

  • dpkg-buildpacakge -amips64el

STEP 8 gcc with gnat support

sed -i '/^ada_no_cross/c ada_no_cross := no' debian/rules.defs

with_deps_on_target_arch_pkgs=yes DH_VERBOSE=1 WITH_SYSROOT=/ BACKPORT=false PKG_IGNORE_CURRENTLY_BUILDING=1 DEB_BUILD_OPTIONS=nostrip dpkg-buildpackage --target-arch=mips64el -b -uc -us -d