Differences between revisions 1 and 233 (spanning 232 versions)
Revision 1 as of 2012-10-09 17:02:14
Size: 6542
Editor: wookey
Comment: Inital page with toolchain bootstrap info
Revision 233 as of 2015-11-25 15:17:52
Size: 46763
Editor: wookey
Comment: Remove obsolete list
Deletions are marked like this. Additions are marked like this.
Line 1: Line 1:
'arm64' is the Debian port name for the 64-bit ARMv8 architecture, also referred to as 'aarch64' (GNU triplet aarch64-linux-gnu)

There will be no hardware in existence until sometime in 2013 but ARM (via Linaro) are working well with the community and trying to get this port done early so software will exist when there is something to run it on.
This page contains details about the port of Debian to the 64-bit ARM platform (arm64), known in some other places as AArch64. This port was released for the first time with Jessie (8.0).

Other ports to ARM hardware exist / have existed in Debian - see ArmPorts for more links and an overview

<<TableOfContents()>>

'arm64' is the Debian port name for the 64-bit ARMv8 architecture, referred to as 'aarch64' in upstream toolchains (GNU triplet aarch64-linux-gnu), and some other distros.

Hardware started to becoming available in October 2013, but access was restricted. Debian was very kindly donated two 8-core APM machines, installed in March 2014 running two buildds in Debian-ports. One has been split with xen so we also have an unoffical porterbox. ARM supplied two Junos in August 2014, and Linaro 3 APM boxes in October, which are the current offical build and porter machines.

The port was started in 2010 (by ARM and Linaro working with the community in commendable fashion) long before hardware was available so that there would be something to run when it arrived.

= Hardware, emulators and models =

Arm64 hardware was first available in the form of the iPhone 5 in 2013. Hardware useful for GNU/Linux started to become available from Q42013, with the first commercially available boards announced June 2014.

 * [[https://www.apm.com/products/data-center/x-gene-family/x-c1-development-kits/x-c1-development-kit-basic/|APM X-gene dev board]] $1500
 * [[http://b2b.gigabyte.com/products/product-page.aspx?pid=5422#ov|Gigabit MP30-AR0 €950]]
 * [[http://www.arm.com/products/tools/development-boards/versatile-express/juno-arm-development-platform.php|Juno Versatile Express development board]] $6000, shipped from 1st Aug 2014
 * [[http://www.amd.com/en-us/press-releases/Pages/64-bit-developer-kit-2014jul30.aspx|AMD Opteron dev board]] $3000 USD
 * [[http://www8.hp.com/us/en/hp-news/press-release.html?id=1800094#.VgQdelox1QI|HP Proliant Moonshot m400]] $12000+ [[http://h21007.www2.hp.com/portal/site/dspp/menuitem.b95bfa42570e7b68053a6b108973a801?id=d92c7b1827f38410VgnVCM100000a360ea10RCRD|Developer access]]
 * [[http://www.cnx-software.com/2015/02/09/hikey-board-64-bit-arm-development-board/|Hisilicon 'Hikey' dev board (96boards CE)]] $129
 * [[https://developer.qualcomm.com/hardware/dragonboard-410c|Qualcomm Dragonboard 410c (96boards CE)]] $75 (Free graphics possible!)
 * [[https://softiron.squarespace.com/products/|SoftIron APM6408 server motherboard]] $?
 * [[http://www.google.com/nexus/9/|Nexus 9]]
 * [[http://www.antutu.com/view.shtml?id=7878|huawei G621-TL00]]
 * ([[https://www.apple.com/iphone/|iPhone 5]])


Arm64 qemu user-space emulation became initially available in October 2013. It was added to qemu upstream in v2.0, and is available in Debian 8 (Jessie) onwards. This is much faster than the model for building software, but can't be used for kernel-space things like bootloader/kernel work, or anything that uses multithreading (such as java). See Qemu Rootfs below for details.

Arm64 qemu system emulation was [[http://www.bennee.com/~alex/blog/2014/05/09/running-linux-in-qemus-aarch64-system-emulation-mode/|added]] to qemu upstream and is available in Debian with DebianPackage:qemu-system-arm 2.1+dfsg-1 or later.

There is a (non-free, free beer) 'Foundation Model' simulator which can be used to run arm64 code, which is available [[http://www.linaro.org/engineering/armv8|here]]

Much of the work packagers need to worry about is updating autoconf, multiarch and cross-build fixes, with a few actual arm64 changes here and there, and doesn't actually need a model or emulator.

This is the first non-x86 self-bootstrapped Debian/Ubuntu port: the first 150 packages cross-built using build-profiles to untangle cyclic build-dependencies.
Line 7: Line 42:
Barely started.

Binutils, kernel, gcc and glibc port patches were sent upstream over the summer of 2012, with enough stuff to build a cross-toolchain available by October.
(last updated: November 9th 2014)

== Official Debian port ==

The offical archive had the first bootstrap packages installed (from debian-ports) on 8th August 2014. Two (ARM-sponsored) buildds (Juno) were installed, configured and started building on 15th August 2014. https://buildd.debian.org/status/architecture.php?a=arm64&suite=sid.

3 Linaro-sponsored APM machines were added on 17th October, providing 2 more buildds and a porterbox (asachi). The Debian-ports buildd (turfan) was converted to a (non-DSA) porterbox on 6th November 2014.

=== Jessie ===

Arm64 is an offical debian release architecture in Jessie. (Yay!)

By the freeze on 5th November 2014, 10220 packages (93% of the archive) were built, and all the bootstrap uploads had been rebuilt. So nearly everything you expect is in the release. The main things missing are mono (and dependencies), libvp8 (and thus nodejs ecosystem), fsharp, gcgo, rust. A few higher-level apps also didn't make it, such as abiword, and xbmc.

Debian-installer works on APM hardware if your machine has UEFI. It needs a patch to initramfs for Juno. AMD Seattle needs a newer kernel/DTB than the one in jessie.

The release docs still need work to document this.

=== Unstable ===

These pages gives some idea of the current status in unstable (all showing number of reverse dependencies followed by package name):

95% of Debian is currently built: over 10800 source (arch-specific) packages.

Packages which have failed to build:
 * https://people.debian.org/~wookey/bootstrap/blockerlist
Packages which are curently out of date:
 * https://people.debian.org/~wookey/bootstrap/outofdatelist
Packages who's build-deps are not available:
 * https://people.debian.org/~wookey/bootstrap/blocked-deps-list

150 packages remain that are failing due to out-of-date config.{sub,guess} files.

319 packages FTBFS in unstable (down from an initial peak of 630). Please check the packages in the 'Build Attempted' section there to see what needs fixing. Many of them are trivial fixes. (See bug-tracking below for info on bug-filing and resources on fixing).


== Unoffical Debian-ports bootstrap ==

Debian unstable was bootstrapped in debian-ports, before debian-proper: http://buildd.debian-ports.org/status/architecture.php?a=arm64&suite=sid

The debian-ports buildd was turned into a porterbox on 7th November as the job of -ports was done now that arm64 in the main archive was essentially completed.


== Status details and history ==

Binutils, kernel, gcc and glibc port patches were sent upstream over the summer of 2012, with enough stuff to build a cross-toolchain available by October 2012. The initial port (2012) was done entirely as a cross-build using Ubuntu packages, initially quantal, then raring (from Jan 2013) to take advantage of cross-build fixes, multiarch improvements, libc and arm64 updates going in there. This port was done in Ubuntu because multiarch and the cross-toolchains were more advanced there than in Debian at the time, and Debian was frozen for Wheezy.The resulting image and updates were then used to natively build most of Saucy once real hardware that worked was available (to canonical). Trusty has 'most' stuff built. The missing stuff is largely unported languages (haskell, mono, ruby, go, etc) and large unported packages like libreoffice and firefox.

The initial Debian bootstrap (from late 2013) (350 source, 2100 binaries) was built in a [[http://people.debian.org/~wookey/bootstrap.html|personal]] repo ). This bootstrap was done natively starting with an Ubuntu Saucy base to supply a base chroot and non-library build-deps, lsb+dpkg-vendor was set to 'Debian', each package was built, uploaded and added to a Debianise script which replaced all available packages in the Saucy clean tarball chroot until it contained no Ubuntu packages and was effectively Debian unstable. Then a new clean debian chroot was debootstrapped and packages built/rebuilt in there using build profiles to break cycles.

Once hardware was available this Debian bootstrap image/repo was used to set up a real buildd for debian-ports and keep the port uptodate against unstable. Build profiles were again used to cleanly rebootstrap.

There are crosstoolchains built for Raring/Saucy/Trusty. Debian cross-toolchains are available in unstable (from Nov 2014) and https://people.debian.org/~wookey/tools/debian

Current cross-buildability (in Ubuntu) for arm64 is tracked [[http://people.canonical.com/~cjwatson/cross/arm64/saucy/|on this status page]].
Native buildability is tracked at [[http://qa.ubuntuwire.org/ftbfs/arm64.html]].

= Installing with the installer =

Debian installer is built daily for arm64 and netboot images are available here:
http://d-i.debian.org/daily-images/arm64/

This works on an APM mustang/X-gene box or on qemu. It should also work on ARM Juno machines but will not install a working kernel, so you'll need to stick with the one you currently have, and contrive to boot the installer using a kernel that works.

Do please feedback installer successes or failures to the debian-arm mailing list.

Installer docs for arm64 are in the process of being created. Please help write them if you know anything of the subject.
{{{
$ sudo apt-get build-dep installation-guide
$ debcheckout installation-guide
$ cd installation-guide/build
$ ./buildone arm64 en pdf
}}}

= Debootstrap arm64 =

Plain debootstrap will now produce an arm64 rootfs from the main archive.

First you need a valid key to verify the archive:
If running unstable then just do:
{{{
sudo apt-get install debian-archive-keyring
sudo apt-key add /usr/share/keyrings/debian-archive-keyring.gpg
}}}
If running an older release you need to get the unstable keyring package (because the version in your release is probably too old to have the current key)
{{{
wget http://ftp.debian.org/debian/pool/main/d/debian-archive-keyring/debian-archive-keyring_2012.4_all.deb
sudo dpkg -i debian-archive-keyring_2014.4_all.deb
}}}

Now you can run debootstrap
On an x86 machine, install qemu-user-static 2.0 or later (the package from unstable works fine on stable/testing), and:
{{{
sudo qemu-debootstrap --arch=arm64 --keyring /usr/share/keyrings/debian-archive-keyring.gpg --variant=buildd --exclude=debfoster unstable debian-arm64 http://ftp.debian.org/debian
}}}
Will do the whole process (creating an unstable chroot in the 'debian-arm64' dir).

If you have hardware or want to do it on qemu or a model), use these commands for a native debootstap:
{{{
sudo debootstrap --keyring /usr/share/keyrings/debian-archive-keyring.gpg --exclude=debfoster unstable debian-arm64 http://ftp.debian.org/debian
}}}

The old bootstrap repo at http://debian-ports.org/ still (Sept 2014) contains some packages not yet built in the official archive, but that should soon cease to be true. The even older bootstrap repo http://people.debian.org/~wookey/bootstrap/debianrepo2 is entirely obsolete and has now been deleted.

= Pre-built Rootfses =

There are a selection of rootfses here in the form of tarballs and disk images, with and without qemu-static installed.

== tarball rootfs ==

=== Debian ===
 Tarball rootfs userspace filesystems. There is no 'including' directory, so be careful unpacking: they are designed to be unpacked onto a real machine or inside a chroot dir. The filesystems include the qemu static binary for use with qemu 2.0 so that will 'just work' if binfmt misc is set up (see below). The only config beyond base debootstrap is to include a getty on ttyAMA0 so that a serial port on existing arm64 boards will work, and configure the password 'root' for user root so you can log in on it (change that once in!). Your particular hardware/setup may also need /etc/fstab or networking config.

[[http://people.debian.org/~wookey/bootstrap/rootfs/debian-unstable-arm64-minimal.tar.gz|unstable minimal debootstrap]] (64 MB) (now quite out of date - debootstrap your own)

[[http://people.debian.org/~wookey/bootstrap/rootfs/debian-unstable-arm64.tar.gz|unstable buildd debootstrap]] (117 MB) (now quite out of date - debootstrap your own) Includes build-essential (binutils, make, gcc), sudo, wget, nano editor, openssh-server so you can ssh in if networking is working.

=== Ubuntu ===
[[http://people.debian.org/~wookey/bootstrap/rootfs/saucy-multiarch.tar.gz|Ubuntu saucy multiarch tarball]] suitable for use as a chroot on arm64 hardware. Identical in content to the foundation model disk image below. Adding qemu-static would make it useful under qemu. Configured for armhf/arm64 multiarch use.

== qemu ==

To use arm64 qemu, just install it from unstable/testing: {{{
apt-get install qemu-user-static
}}} This package installs fine on stable as well, and is available in backports.

(Note: Older qemu released referenced on this page used a different name for the static binary and binfmt-misc config (now {{{qemu-aarch64-static}}}, was {{{qemu-arm64}}}) and thus new config/old images (or vice versa) will not interoperate).


== Using The Foundation model ==

See https://wiki.debian.org/Arm64Port/raringbootstrap#Raring_rootfs_for_Foundation_model

Here is a [[http://people.debian.org/~wookey/bootstrap/rootfs/saucy-arm64-multiarch.img.xz|Ubuntu saucy disk image]] (92MB compressed, 2G uncompressed). Suitable for use with the foundation model or real hardware. This image is configured for armhf/arm64 multiarch usage, but it's a one-liner to turn that off.

And here's a [[http://people.debian.org/~wookey/bootstrap/rootfs/linux-system-foundation.axf|suitable kernel]] (3.13, linaro foundation release 2014-01), modified for use with Linux instead of OE.


= Porting packages for arm64 - Maintainer info =

If your package does not build for arm64 it is usually trivial to fix, but sometimes a bit harder and sometimes a big deal. Here is info on what to change and where to go for help, updates and info.

== autoconf updating ==

Most packages just need updated autoconf config info which includes the new arch. It is now best practice for (autotools-using) Debian packages to re-autoconf on every build in order to pick up this info automatically, or at least use the autotools-dev package to ensure latest config.sub and config.guess files. Good info on making these updates is on https://wiki.debian.org/Autoreconf


== Nomenclature and defines ==

If your package does architecture-specific things explicitly then you will need to understand what names to use in tests.

The gnu name for the architecture (as given to configure) is '''aarch64-linux-gnu'''.

The debian name for the architecture is '''arm64'''

GCC defines {{{__aarch64__}}} for the architecture.

Be careful of things which check for arm* in debian architecture tests, as it is usually wrong to do the same thing for arm64 as for 32-bit arm (arm/armel/armhf). In general, if you are not sure, you should do the same thing as on amd64 as that matches quite closely (64 bit, little endian, 32-bit ints and floats, 64-bit pointers, longs and doubles).

Check the link below for 'upstream package porting' to see if your package has had porting attention from Linaro.

There is also a big-endian version of the architecture/ABI:
'''aarch64_be-linux-gnu'''
but we're not supporting that in Debian (so there is no corresponding Debian architecture name) and hopefully will never have to. Nevertheless you might want to check for this by way of completeness in upstream code.

== Useful porting docs ==

 * [[https://bugs.launchpad.net/linaro-aarch64|bug tracker for upstream package porting]]
 * [[http://people.linaro.org/~riku.voipio/aarch64-talk/#/|Very useful talk by Riku Voipio at FOSDEM 2012 (slides)]]
 * [[http://community.arm.com/docs/DOC-8453|ARM offical porting doc]]
 * ArchitectureSpecificsMemo (handy summary of architecture-variable values)

== Porterboxes ==

If you need to test/fix on arm64 there are two porterboxes available:

DSA-maintained porterbox [[https://db.debian.org/machines.cgi?host=asachi|asachi.debian.org]]
Non-DSA-maintained porterbox [[https://db.debian.org/machines.cgi?host=turfan|turfan.debian.net]]
Line 13: Line 223:
Please tag all arm64/aarch64-specific bugs 'arm64' in the BTS.

Here is the current list:
http://bugs.debian.org/cgi-bin/pkgreport.cgi?users=debian-arm@lists.debian.org;tag=arm64
Please tag all arm64/aarch64-specific bugs 'arm64' (user=debian-arm@lists.debian.org, tag=arm64 - ) in the BTS (see [[bugs.debian.org/usertags]] for instructions), or in launchpad.

Here is an example (assuming you have a patch file, and a body template file)
{{{
reportbug $package -V $version -A $patchfile --src --subject "Add arm64 support" --tag patch --pseudo-header 'User: debian-arm@lists.debian.org' --pseudo-header 'Usertag: arm64' --no-tags-menu --severity normal --body-file $template
}}}

[[http://bugs.debian.org/cgi-bin/pkgreport.cgi?users=debian-arm@lists.debian.org;tag=arm64|Here is the current list of arm64 Debian bugs]]

Other distros often have useful bug-fixes already:

 * [[https://bugs.launchpad.net/ubuntu/?field.searchtext=&orderby=-importance&field.status%3Alist=NEW&field.status%3Alist=CONFIRMED&field.status%3Alist=TRIAGED&field.status%3Alist=INPROGRESS&field.status%3Alist=FIXCOMMITTED&field.status%3Alist=FIXRELEASED&field.status%3Alist=INCOMPLETE_WITH_RESPONSE&field.status%3Alist=INCOMPLETE_WITHOUT_RESPONSE&assignee_option=any&field.assignee=&field.bug_reporter=&field.bug_commenter=&field.subscriber=&field.structural_subscriber=&field.component-empty-marker=1&field.tag=arm64&field.tags_combinator=ANY&field.status_upstream-empty-marker=1&field.has_cve.used=&field.omit_dupes.used=&field.omit_dupes=on&field.affects_me.used=&field.has_no_package.used=&field.has_patch.used=&field.has_branches.used=&field.has_branches=on&field.has_no_branches.used=&field.has_no_branches=on&field.has_blueprints.used=&field.has_blueprints=on&field.has_no_blueprints.used=&field.has_no_blueprints=on&search=Search|Here is the current list of arm64 Ubuntu bugs]]
 * [[https://bugzilla.redhat.com/show_bug.cgi?id=922257|here is the Fedora list of arm64 bugs]]

Upstream-relevant bugs should be filed in the [[ https://bugs.launchpad.net/linaro-aarch64|linaro-aarch64 bug tracker]] to avoid distro duplication of effort. In this case, file bugs in the Debian BTS as well, then link to them in the Linaro tracker.


= Repository =

Packages are all in debian-ports.
 * ftp://ftp.debian-ports.org/debian/dists/unstable/
 * ftp://ftp.debian-ports.org/debian/dists/unreleased/

The initial debian (using ubuntu arm64 packages) and ubuntu bootstraps were stored [[http://people.debian.org/~wookey/bootstrap.html|here]] but are now obsolete. A quantal chroot was used for initial work but is now (Dec 2012) frozen/abandonned.

You should just be able to add that repo and {{{apt-get install crossbuild-essential-arm64}}} to get a working cross environment. If build and host arch packages have got out of sync this won't work, which happens often in raring and unstable.
Line 20: Line 252:
Before anything useful can happen dpkg needs to have arm64 support. This was done in

==
Bootstrap ==
Before anything useful can happen dpkg needs to have arm64 support. This was done in v1.16.4.

binutils-aarch64-linux-gnu is in debian unstable (from July 2014) (from the cross-binutils package)

== Toolchain
Bootstrap ==
Line 26: Line 260:
This is relatively easy to do from upstream sources either directly or using a framework like OpenEmbedded, but to get a Debian-packaged toolchain easily usable in chroots, sbuild etc requires merging the new port with the Debian packaging, which is frankly a PITA. This is relatively easy to do from upstream sources either directly or using a framework like OpenEmbedded, but to get a Debian-packaged toolchain easily usable in chroots, sbuild etc requires merging the new port with the Debian packaging, which is, frankly, a PITA.
Line 49: Line 283:
== Bootstrap Issues ==

Binutils was straightforward as the Quantal package already had aarch64 support and arm64 packaging. It just builds :-)

Linux-source required some work. linux-3.5.0 is current in quantal. Upstream work was on 3.6 and 3.7, although initially posted patches from July were for 3.5. Only headers are needed and base port is not invasive so version isn't too important. Taking the port from Linaro current armv8 tree http://git.linaro.org/gitweb?p=people/omarrmz/linux-aarch64.git;a=summary and adding Debian arm64 packaging in various places had only one bit of hackery needed (remove mention of drivers/irqchip from arm64/kconfig) to get a linux-source package built. The initial patch is here:

eglibc in Ubuntu is 2.15. supplied glibc patches were for trunk and then 2.16. eglibc2.15 does not build with gcc4.7, only 4.6. Initial gcc patches were for trunk and then 4.7. There was no public 4.6 port. eglibc2.16 was not available in Debian or Ubuntu, but there was a set of packaging in alioth, but no actual glibc source. eglibc Debian source layout is, for historical reasons not like upstream so a load of munging is needed to get the right layout. I did this hard way before dicovering the debian rules target to do it for me better. Then remove the gcc4.6 deps and rules-forcing. Add in glibc aarch64 patch and poke it till it applies. Fortunately glibc and eglibc are very similar here. Grok packaging layout and patch-naming scheme. Fix up submitted-fcntl-bits patch which moves AT_ GNU symbols and needs to put them back in again for each arch specifically.
Turn off libselinux when building stage1 (on by default for linux in 2.16 packaging)
Spend some time tracking down why builds always fail with EI_foo alias to GI_foo errors. Turns out to be gcc4.6 vs 4.7 issue, which boils down to pr33763, the patch for which breaks eglibc builds. So this actually needs to be fixed in gcc. Some hassling got this done quickly with a new pr33763 patch to put in gcc.

gcc packaging is complicated. Lots of patches applied for different arches, distros, options. Only the core C, C++ and fortran compliers are supported in initial port, so libssp, libmudflap, go, java, objectiveC, lidquadmath, ada, multilib etc all need to be disabled. pr33763 fix as above in order to even build eglibc stage1.

Next the gcc stage2 build fails with 'cannot find bits/predefs.h'. Some investigation finds that this is due to xgcc looking in the wrong place for lib headers. These are put in debian/tmp/ and a sysroot is set in order to find them, but the headers path given a) doesn't look in the sysroot and b) is for old /usr/<triplet>/include path instead of new multiarch /usr/include/<triplet>:/usr/include path. Work out where to poke this in multiple packaging layers.

https://launchpad.net/ubuntu/+source/armhf-cross-toolchain-base
=== Toolchain Bootstrap Issues ===

==== Quantal bootstrap ====

The initial arm64 packaged toolchain was done in Ubuntu Quantal, as the first release where multiarch crossbuilding basically worked. The details of this are documented on toolchain/BootstrapIssues#Quantal.
 

==== Raring bootstrap ====

Easier than quantal as all the base porting has already been done. However not quite as easy as one might like. arm64-cross-toolchain-base was updated with some fixes/updates from the armhf/armel-c-t-b packages. Binutils and linux-libc-dev headers were straightforward.

But gcc stage1 build fell over first with bugs in gcc-4.7.2-12ubuntu2 (patches that didn't apply, missing arm64 symbols-files). Then with missing bits/predefs.h header when building libgcc. This turned out to be UbuntuBug:1091823.

Then the build completed but there was a libgconv.a packaging error for some reason. Updating to gcc-4.7-2-14ubuntu2 seemed to fix that.


==== Debian bootstrap ====

The Debian toolchain bootstrap is being attempted fully multiarch, to avoid the above issues with needing a separate libc:arm64 and equivs packages to make everything work. It's also an opportunity to integrate DEB_BUILD_PROFILE boostrap features to make it all nicely automatable, without toolchains being a special case in the archive. This was initially (December 2012) too troublesome, mostly due to new versions of GCC coming out every few days with this stuff being changed. As of gcc-4.7.2-18 onwards ThibG's patches for the toolchain using the multiarch system libraries are integrated so I had another go.

This process is documented on MultiarchCrossToolchains.

Current status is that experiemntal is being used as the stuff in unstable is too old.

binutils and gcc stage1 are built.

The kernel header patches are being updated for 3.8

= Building packages =

Given a cross-build chroot, in general you should be able to do
{{{
apt-get build-dep -aarm64 <package>
apt-get source <package>
cd <package>-<ver>
CONFIG_SITE=/etc/dpkg-cross/cross-config.arm64 DEB_BUILD_OPTIONS=nocheck dpkg-buildpackage --preserve-env -aarm64
}}}

But there are of course some caveats.

Details on setting up an arm64 cross-chroot are given here: https://wiki.linaro.org/Platform/DevPlatform/CrossCompile/arm64bootstrap

There was no libssp (stack protection) support in the aarch64 toolchain on gcc-4.8 (and 4.7 pre-release)(https://cards.linaro.org/browse/TCWG-23) so the -fstack-protector would cause an error:
{{{
/usr/lib/gcc/aarch64-linux-gnu/4.7/../../../../aarch64-linux-gnu/bin/ld: cannot find -lssp_nonshared
/usr/lib/gcc/aarch64-linux-gnu/4.7/../../../../aarch64-linux-gnu/bin/ld: cannot find -lssp
}}}

For any package that uses dpkg-buildflags this is easy to fix by setting DEB_BUILD_MAINT_OPTIONS=hardening=-stackprotector
You can set this for the whole build chroot if using one, or for a user, or for a build by doing:
{{{
DEB_BUILD_MAINT_OPTIONS=hardening=-stackprotector dpkg-buildpackage -aarm64
}}}

Better to fix this permanently in /etc/dpkg/buildflags:
{{{
STRIP CFLAGS -fstack-protector
}}}

With gcc-4.9 libssp is treated just as on any other major architecture.
Line 67: Line 346:
Many packages need no more than config.guess and config.sub updating to build for arm64. autotools got aarch64 support upstream in June 2012. So autotools-dev 20120608.1 has the files needed. However many (most) packages don't autoreconfi on build, or otherwise update those files so they have to be patched. A lot of boring patches were filed with the tag arm64, such as bug:#689613

Because there is no hardware everything needs to be cross-built so cross-building patches are also needed in many packages, and multiarch patches in many build-deps. Due to the Wheezy freeze and thus the more progressed state of multiarchification in Ubuntu, this work was initialy done in a private Quantal-based repo, but all bugs are either directly filed, or also pushed upstream to Debian.

A few packages need actual changes. Here is a list so far:
Many packages need no more than config.guess and config.sub updating to build for arm64. autotools got aarch64 support upstream in June 2012. So autotools-dev 20120608.1 has the files needed. However many (most) packages don't autoreconfig on build, or otherwise update those files so they have to be patched. A lot of boring patches were filed with the tag arm64, such as DebianBug:689613

In many cases dh_autoreconf can be used to fix this without making horrible, unreadable, autofoo patches. Sometimes it's better to use autotools-dev which only updates config.{sub,guess} without re-generating all the configury because this is less invasive, or the package simple doesn't autoreconf properly. dh-autoreconf is preferred as it covers all cases (for example the ppc64el port needs re-libtooling, so dh-autoreconf works, but the autotools-dev dh_updateconfig is not sufficient. Some packages won't build a second time after dh_autoreconf has poked them around. [[https://wiki.debian.org/qa.debian.org/FTBFS|This QA page]] goes into more details about updating your packages

For the initial botstrap everything had to be cross-built as there was no hardware (and no OS) so cross-building patches were also needed in many packages, and multiarch patches in many build-deps. Due to the Wheezy freeze and thus the more progressed state of multiarchification and more cross-build fixes in Ubuntu, this work was initialy done in a private Quantal-based repo, and later in a raring-tracking repo, but all bugs are either directly filed, or also pushed upstream to Debian. There are still (April 2014) a lot of cross-build fixes that are in Ubuntu but not yet uploaded to Debian.

Quite a few packages need actual changes. Here is a list for the early stages (see the BTS for complete info):

'''Packages that needed arm64-related changes'''
|| package || Debian Bug/Fixed version || Ubuntu Bug/Fixed version ||
|| dpkg || DebianBug:672408 || ||
|| autotools || 20120210.1 || 20120210.1 ||
|| binutils || || binutils-2.22.90.20120924 ||
|| coreutils || DebianBug:698330 || ||
|| gcc || gcc-4.8 || gcc-4.7-4.7.2-3ubuntu1arm64 UbuntuBug:1133104 ||
|| eglibc || DebianBug:690873 2.16-0arm64.1 2.17 || 2.16-0ubuntu3 2.17-0ubuntu4 UbuntuBug:1120810 ||
|| fftw3 || DebianBug:734675 || UbuntuBug:1267107 ||
|| linux || DebianBug:695241 || UbuntuBug:1063895 ||
|| util-linux || DebianBug:689607 || ||
|| perl || https://github.com/codehelp/perl-cross-debian/tree/master/aarch64-linux-gnu || ||
|| dpkg-cross || DebianBug:693730 2.6.8 || 2.6.7arm64 ||
|| (cross)-build-essential || DebianBug:693220 || 11.6ubuntu4 ||
|| gmp || DebianBug:693467 || UbuntuBug:1079831 ||
|| kde-pkg-tools || DebianBug:744173 || ||
|| libcaca || http://people.debian.org/~wookey/bootstrap/patches/arm64/debian/libcaca_0.99.beta18-1-docdisable-arm64.patch || ||
|| libffi || DebianBug:698344 || 3.0.11-2ubuntu1 ||
|| libgc || DebianBug:732349 || ||
|| klibc || || UbuntuBug:1081162 ||
|| libbsd || || UbuntuBug:1109050 ||
|| libx11 || || UbuntuBug:1129389 ||
|| qt4-x11 || DebianBug:735488 || ||
|| mesa || DebianBug:732437 || ||
|| openssl || DebianBug:732348 || UbuntuBug:1102107 ||
|| tbb || DebianBug:748508 || ||
|| xorg || DebianBug:731766 || ||
|| xutils-dev || DebianBug:734944 DebianBug:748010 || ||

'''Packages that needed crossbuild fixes'''
Line 73: Line 385:
|| dpkg || Bug:#672408 ||
|| autotools || From upstream ||
|| binutils || ||
|| gcc || ||
|| eglibc || ||
|| linux || || https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1063895 ||
|| util-linux || Bug:#689607 ||
|| diffutils || ||
|| perl || ||
|| cups || DebianBug:734670 || ||
|| diffutils || 1:3.2-3 || 1:3.2-1ubuntu1 ||
|| tzdata || || ||
|| gdbm || DebianBug:604648 || 1.8.3-11ubuntu1 ||
|| iptables || 1.4.16 || UbuntuBug:1081592 ||
|| libsemanage || || UbuntuBug:1103271 ||
|| db || || UbuntuBug:1105368 ||
|| linux || || UbuntuBug:1105251 ||
|| sqlite3 || || ||


'''packages that needed multiarch-related changes'''
|| package || Debian Bug || Ubuntu Bug ||
|| perl || DebianBug:633884 || ||
|| python-2.7 || DebianBug:683755 || ||
|| chrpath || 0.14 || 0.14 ||
|| less || DebianBug:693318 || UbuntuBug:1081611 ||
|| check || DebianBug:693221 || UbuntuBug:1101069 ||
|| gettext || DebianBug:683751 || ||
|| ed || DebianBug:693824 || ||
|| dctrl-tools || DebianBug:693474 || UbuntuBug:1129373 ||
|| indent || DebianBug:693823 || ||
|| fdupes || DebianBug:693822 || UbuntuBug:1117304 ||
|| bc || DebianBug:681784 || UbuntuBug:1098408 ||
|| equivs || DebianBug:697820 || UbuntuBug:1097993 ||
|| linux-atm || || UbuntuBug:1098417 ||
|| tcl8.5 || DebianBug:698674 || UbuntuBug:1122120 ||
|| autogen || || UbuntuBug:1118246 ||
|| netpbm-free || DebianBug:700007 || 2:10.0-15ubuntu2 ||
|| libxcb || || UbuntuBug:1129376 ||
|| pkgconfig || DebianBug:726598 || ||

'''Packages that needed changes for eglibc 2.16'''
|| package || Debian Bug || Ubuntu Bug ||
|| diffutils || DebianBug:693346 || UbuntuBug:1079770 ||
|| tar || DebianBug:693352 || UbuntuBug:1079750 ||
|| gettext || DebianBug:693361 || UbuntuBug:1079768 ||
|| cpio || DebianBug:693440 || UbuntuBug:1079748 ||
|| coreutils || 8.20 || UbuntuBug:1081220 ||
'''or eglibc 2.17'''
|| gpm || || 1.20.4-6ubuntu1 ||

'''Packages that need(ed) config.{guess,sub} updates'''
|| package || Debian Bug || Ubuntu Bug ||
|| abcm2ps || || ||
|| acl || DebianBug:689610 || Quantal ||
|| aiksaurus || DebianBug:756031 || ||
|| alarm-clock || DebianBug:726170 || ||
|| am-utils || DebianBug:727316 || ||
|| aranym || DebianBug:727321 || ||
|| arp-scan || DebianBug:727323 || ||
|| audacity || DebianBug:727324 || ||
|| bbe || DebianBug:727327 || ||
|| berusky || DebianBug:727328 || ||
|| binutils-m68hc1x || DebianBug:727329 || ||
|| brightside || || ||
|| check || DebianBug:733038 || ||
|| chrpath || DebianBug:700117 || 0.14-1ubuntu1 ||
|| ccze || DebianBug:727339 || ||
|| cflow || DebianBug:727342 || ||
|| chise-base || DebianBug:727343 || ||
|| cloog-ppl || DebianBug:711727 || ||
|| coinor-dylp || || ||
|| coinor-flopc++ || || ||
|| coinor-vol || || ||
|| cone || || ||
|| config-manager || DebianBug:727346 || ||
|| coreutils || DebianBug:689611 || Quantal ||
|| corosync || DebianBug:743243 || ||
|| cpio || DebianBug:689612 || Quantal ||
|| daq || DebianBug:727353 || ||
|| db || DebianBug:689613 || Quantal, ||
|| dbacl || || ||
|| dbuskit || || ||
|| dialog || DebianBug:689615 || Quantal ||
|| diffstat || DebianBug:700118 || 1.55-3ubuntu1 ||
|| diffutils || DebianBug:689617 1:3.2-7 || 1:3.2-7 ||
|| dhcp-probe || DebianBug:727355 || ||
|| dico || || ||
|| dropbear || DebianBug:689618 || ||
|| dsyslog || DebianBug:727361 || ||
|| dvdauthor || DebianBug:727364 || ||
|| dvipsk-ja || DebianBug:727365 || ||
|| efax-gtk || DebianBug:727369 || ||
|| exrtools || DebianBug:727375 || ||
|| expat || DebianBug:689619 || Quantal ||
|| findutils || DebianBug:689620 || Quantal ||
|| fbpager || DebianBug:727379 || ||
|| fbterm-ucimf || || ||
|| fileschanged || DebianBug:727850 || ||
|| fische || DebianBug:727852 || ||
|| flactag || || ||
|| flwrap || DebianBug:727855 || ||
|| fprobe || || ||
|| fprobe-ulog || || ||
|| freecraft || || ||
|| gawk || DebianBug:714795 || ||
|| gbemol || DebianBug:727865 || ||
|| gcc-msp430 || || ||
|| gconfmm2.6 || DebianBug:765210 || || dh-autoreconf not enough, package needs real work||
|| genparse || DebianBug:727866 || ||
|| geomview || || ||
|| gfarm || DebianBug:727868 || ||
|| gftp || DebianBug:727869 || ||
|| ginac || DebianBug:733477 || ||
|| gjay || || ||
|| gjiten || || ||
|| gle || DebianBug:727253 || ||
|| gle-graphics || DebianBug:727871 || ||
|| gmchess || DebianBug:727872 || ||
|| gmediaserver || DebianBug:727873 || ||
|| gmetadom || || ||
|| gnome-paint || DebianBug:727874 || ||
|| gnome-python || || ||
|| gnome-speech || || ||
|| gnupg || || Quantal ||
|| gnusim8085 || || ||
|| gnuspool || DebianBug:727878 || ||
|| gpt || DebianBug:727879 || ||
|| graphviz || DebianBug:749061 || ||
|| gstreamer-hplugins || || ||
|| gtk2-engines-wonderland || || ||
|| gtkaml || DebianBug:727888 || ||
|| gtkimageview || || ||
|| guifications || || ||
|| guile-1.6 || || ||
|| gurlchecker || DebianBug:727890 || ||
|| h323plus || || ||
|| hasciicam || || ||
|| hippo-canvas || || ||
|| hkl || DebianBug:727894 || ||
|| ho22bus || DebianBug:727895 || ||
|| hyantesite || DebianBug:727899 || ||
|| iaxmodem || || ||
|| ibus-m17n || DebianBug:727265 || ||
|| id-utils || DebianBug:727388 || ||
|| inotify-tools || DebianBug:727902 || ||
|| ircd-ircu || DebianBug:727903 || ||
|| jaula || DebianBug:727904 || ||
|| json-c || || UbuntuBug:1102043 ||
|| jwhois || DebianBug:727910 || ||
|| jwm || DebianBug:727911 || ||
|| kbd || DebianBug:700119 || 1.15.3-9ubuntu4 ||
|| kmflcomp || || ||
|| lcms || DebianBug:543464 || ||
|| lcms2 || DebianBug:717839 || ||
|| link-grammar || || ||
|| littlewizard || || ||
|| live-f1 || DebianBug:727921 || ||
|| lletters || DebianBug:727450 || ||
|| logjam || DebianBug:727923 || ||
|| lpe || DebianBug:727924 || ||
|| lzop || || ||
|| libapache-mod-encoding || DebianBug:727391 || ||
|| libasyncns || DebianBug:725778 || ||
|| libelf || DebianBug:693996 0.8.13-4~1 || UbuntuBug:1082134 0.8.13-3ubuntu1 ||
|| libgetdata || DebianBug:727407 || ||
|| libghemical || || ||
|| libgpg-error || DebianBug:689621 || Quantal ||
|| libgtksourceviewmm || || ||
|| liblunar ||DebianBug:727413 || ||
|| libmpd || DebianBug:727415 || ||
|| libmthca || DebianBug:727417 || ||
|| libnfnetlink || DebianBug:693825 || UbuntuBug:1081600 ||
|| libnih || DebianBug:689622 || Quantal ||
|| libomxalsa || DebianBug:727421 || ||
|| libomxcamera || DebianBug:727422 || ||
|| libomxfbdevsink || DebianBug:727423 || ||
|| libomxmad || DebianBug:727424 || ||
|| libomxvideosrc || DebianBug:727425 || ||
|| libomxvorbis || DebianBug:727426 || ||
|| libpcl1 || DebianBug:727430 || ||
|| librtfcomp || DebianBug:727434 || ||
|| libsamplerate || DebianBug:734673 || ||
|| libsigc++ || DebianBug:727299 || ||
|| libsndfile || DebianBug:732346 || ||
|| libview || DebianBug:727446 || ||
|| libvmime || DebianBug:727447 || ||
|| libwfut || || ||
|| libx11 || DebianBug:689623 || Quantal ||
|| libxml2 || DebianBug:689624 || Quantal ||
|| libxslt || DebianBug:689625 || Quantal ||
|| libxr || DebianBug:727449 || ||
|| make-dfsg || DebianBug:689626 || Quantal ||
|| makebootfat || || ||
|| mango-lassi || DebianBug:727453 || ||
|| mcrypt || DebianBug:727455 || ||
|| mgp || DebianBug:727457 || ||
|| ming || DebianBug:727458 || ||
|| mlocate || DebianBug:700094 || 0.25-0ubuntu2 ||
|| modplugtools || DebianBug:727462 || ||
|| module-init-tools || DebianBug:689627 || Quantal ||
|| mp3splt || DebianBug:727465 || ||
|| mp3splt-gtk || || ||
|| mpfr4 || DebianBug:700065 || 3.1.0-5ubuntu1 ||
|| nano || DebianBug:689628 || Quantal ||
|| nautilus-share || DebianBug:726302 || ||
|| nautilus-image-converter || DebianBug:727469 || ||
|| ncurses || || Quantal ||
|| netperfmeter ||DebianBug:727472 || ||
|| notify-python || || ||
|| ns2 || DebianBug:727930 || ||
|| ocaml-cry || || ||
|| ocaml-flac || || ||
|| ocaml-ladspa || || ||
|| ocaml-mad || || ||
|| ocl-icd || DebianBug:732821 || ||
|| open-invaders || DebianBug:727477 || ||
|| openvanilla-modules || DebianBug:727479 || ||
|| openvpn-auth-ldap || || ||
|| openvrml || || ||
|| osspsa || DebianBug:727483 || ||
|| ots || DebianBug:727254 || ||
|| patch || || Quantal ||
|| pads || DebianBug:727485 || ||
|| pam || || ||
|| paps || DebianBug:727488 || ||
|| pcre3 || || Quantal ||
|| pgreplay || DebianBug:727933 || ||
|| pidgin-festival || || ||
|| pidgin-hotkeys || DebianBug:727936 || ||
|| pidgin-librvp || || ||
|| plptools || DebianBug:727942 || ||
|| policykit-1 || DebianBug:734082 || ||
|| poppler || DebianBug:734014 || ||
|| popt || || Quantal ||
|| prelude-lml || DebianBug:727947 || ||
|| psiconv || || ||
|| pygoocanvas || || ||
|| qrouter || || ||
|| quicksynergy || || ||
|| racket || || ||
|| radsecproxy || DebianBug:727952 || ||
|| rdesktop || DebianBug:727953 || ||
|| rtpproxy || || ||
|| sagan || || ||
|| sage || DebianBug:727958 || ||
|| sarg || DebianBug:727959 || ||
|| scim-canna || DebianBug:727961 || ||
|| scim-chewing || DebianBug:727962 || ||
|| scmxx || || ||
|| sed || || Quantal ||
|| sidplay || DebianBug:727965 || ||
|| sidplay-base || || ||
|| simulavr || DebianBug:727966 || ||
|| siproxd || DebianBug:727967 || ||
|| sipsak || DebianBug:727968 || ||
|| slcurl || || ||
|| slgsl || || ||
|| slhist || || ||
|| slony1-2 || || ||
|| smalt || || ||
|| soqt || || ||
|| soundmodem || DebianBug:727972 || ||
|| sqlite || DebianBug:727510 || ||
|| sqlite3 || DebianBug:712037 || ||
|| ssldump || || ||
|| stardict || DebianBug:727975 || ||
|| subnetcalc || DebianBug:727512 || ||
|| sucrack || DebianBug:727978 || ||
|| synaesthesia || DebianBug:727982 || ||
|| taningia || DebianBug:727514 || ||
|| taopm || || ||
|| tcpcopy || || ||
|| tcpreen || DebianBug:727983 || ||
|| tcpxtract || DebianBug:727984 || ||
|| telepathy-ring || || ||
|| thewidgetfactory || || ||
|| thin-provisioning-tools || DebianBug:727985 || ||
|| transcalc || DebianBug:727988 || ||
|| tree-puzzle || || ||
|| tucnak2 || DebianBug:727990 || ||
|| tuxfootball || DebianBug:727991 || ||
|| ucimf-chewing || || ||
|| udpcast || DebianBug:727996 || ||
|| valknut || DebianBug:727999 || ||
|| wfmath || || ||
|| wmforkplop || || ||
|| x11-kbd-utils || DebianBug:717841 || ||
|| x11-server-utils || DebianBug:735489 || ||
|| xblast-tnt || DebianBug:728004 || ||
|| xcftools || DebianBug:728005 || ||
|| xcowsay || || ||
|| xfce4-battery-plugin || || ||
|| xfce4-datetime-plugin || || ||
|| xfce4-diskperf-plugin || || ||
|| xfce4-linelight-plugin || || ||
|| xfce4-mpc-plugin || || ||
|| xfce4-notes-plugin || || ||
|| xfce4-quicklauncher-plugin || || ||
|| xfce4-systemload-plugin || || ||
|| xfce4-verve-plugin || || ||
|| xfce4-wavelan-plugin || || ||
|| xfswitch-plugin || DebianBug:728007 || ||
|| xnbd || || ||
|| xneur || || ||
|| xpilot-ng || DebianBug:728009 || ||
|| zzlib || DebianBug:717837 || ||

'''Packages that just needed fixes'''
|| guile-1.8 || DebianBug:711029 || ||
|| w3m || 0.5.3-14 || ||
|| zsh || DebianBug:734765 || ||



'''Packages that need build profiles'''

 * eglibc (libselinux)
 * libselinux (swig, rub2deb)
 * glib2.0 (python-dbus)
 * gettext (java)
 * dbus (systemd, libdbus-glib, python-dbus)
 * db (java, python-all-dev, python3-dev)
 * udev (gobject-introspection)
 * libnih
 * libsemanage (swig, rub2deb)
 * pam (libaudit)
 * libidn (gcj-jdk)
 * curl
 * pango (gobject introspection)
 * cracklib2 (python bindings)
 * libisl/libcloog
 * avahi ( gtk2, gtk3, qt4) DebianBug:734669
 * pulseaudio (bluez) DebianBug:735485
 * cups (notest) DebianBug:734670
 * krb5
 * doxygen (qt4)
 * graphviz (guile, lua, php, ruby, tcl, bindings)
 * libcap-ng (swig)
 * highlight (swig)
 * libsoup2.4 (glib-networking)

The set of patches for this (in unstable/raring) is here: http://people.debian.org/~wookey/bootstrap/patches/

'''Packages waiting on build-deps'''

Nothing of significance now (July 2014)

'''Perl'''

Perl is a bit of a special case. It needs both cross-build support and multiarchifying. Status is being tracked on [[Multiarch/Perl]]

Cross-build supprt currently involves creating config files on a host-arch machine, which currently means a model, or creating the files by inspection and comparison with others. A set of arm64 configs has been created from a model run and comparison with armhf and amd64 configs for Debian and arm64 config for openembedded. These are now [[https://github.com/codehelp/perl-cross-debian/tree/master/aarch64-linux-gnu|checked-in to perl-cross-debian]]. And perl cross-builds successfully with these configs and that version of perl-cross-debian plus its corresponding perl patches.

Meanwhile There is a multiarch branch of perl here: 'ntyni/multiarch-5.14' branch of git://git.debian.org/perl/perl.git which is discussed in this thread: http://lists.debian.org/debian-perl/2012/09/msg00000.html

This builds and works OK, but does not currently cross-build. Merging these two pieces of work to get a cross-buildable, multiarched, arm64, perl is currently underway.

== Packages that don't cross build ==

'''dialog'''

Wrong-arch strip run.

'''fuse'''

Conflicting 64-bit definitions: UbuntuBug:1087757

'''icu'''

{{{configure: error: Error! Cross compiling but no --with-cross-build option specified - please supply the path to an executable ICU's build root}}}


'''libatomic-ops'''

Needs aarch64 assembly


== Packages that are built for jessie ==

See the debian buildd status page: http://buildd.debian.org/status/architecture.php?a=arm64&suite=sid

The initial bootstrap now has its own page, largely for historical interest: https://wiki.debian.org/Arm64Port/PackagesBuilt


== Packages with issues ==

libvp8-3.14 is too old for arm64 support. It exists in 3.25, but mangodb and nodejs have not moved forward to this version. So there seems to be no sensible way to get vp8/nodejs for arm64 in jessie.

fftw3 failed to build neon code (ICE)
https://bugs.launchpad.net/linaro-aarch64/+bug/1267113
Simply not enabling neon for arm64 allows a build

emacs23 FTBFS (hangs compiling lisp libraries): #752031
 (This made 'emacs' uninstallable, which caused quite a few builds to fail, until the switch to emacs24 in July 2014)


xutils-dev only builds correctly with cpp-4.7 which doesn't exist for arm64: #748010

mksh segfaults in the tests
(does not honour 'nocheck')

flex fais to buld docs due to pdftex error. Something really wrong?:

 !pdfTeX error: pdfetex (file cm-super-t1.enc): cannot open encoding file for re
ading
 ==> Fatal error occurred, no output PDF file produced!
/usr/bin/texi2dvi: pdfetex exited with bad status, quitting.
Makefile:434: recipe for target 'flex.pdf' failed


== Packages that needed fixes ==


qt4-x11 only builds with -fpermissive, which is not acceptable to maintainers: #735488

#util-linux
apt-get install automake autopoint libtool # (29Mb of stuff)
DEB_BUILD_OPTIONS="parallel=80" dpkg-buildpackage -sa > ../buildlog.util-linux-2.20.1
failedwith:
  CC fdisk-fdiskbsdlabel.o
  In file included from fdiskbsdlabel.c:62:0:
  fdiskbsdlabel.h:61:2: error: #error unknown architecture
The fix is in http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=689607

Having to add every new arch one by one to this package is silly. Listing the exceptions would be a lot more useful. Are there any?

#coreutils
apt-get install dh-buildinfo groff gperf bison
DEB_BUILD_OPTIONS="parallel=80" dpkg-buildpackage -sa
fails to build:
  CC src/factor.o
  /tmp/ccgzV4MB.s: Assembler messages:
  /tmp/ccgzV4MB.s:668: Error: operand 3 should be an integer register -- adc x11,x2,0'
  /tmp/ccgzV4MB.s:681: Error: operand 3 should be an integer register -- adc x2,x11,0'
  /tmp/ccgzV4MB.s:719: Error: operand 3 should be an integer register -- adc x4,x11,0'
see https://bugzilla.redhat.com/show_bug.cgi?id=917735
and
http://gmplib.org:8000/gmp/rev/187b7b1646ee
which says this is the same issue as fixed in gmp
This is the bug: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=698330
Applying that fix (updated) works.


postgres9.3 fails in the documentation build - apprently indicating a problem in the arm64 ghostscript package. This 'went away' - not entirely clear why.

libphonenumber failed tests on buildd, but works fine on APM and Juno if built locally.

zookeeper FTBFS on Juno, Worked OK on APM/X-gene. Was due to obscure java multiprocessor issue.

== Using dose to see what is multiarch-buildable ==

Dose 3.1 can analyse build-dependencies for a given package, and understands about cross and multi-arch. It can tell you what is currently buildable given the current state of relevant source and package files. Use 3.1.2 for the --checkonly option and the --defaultedMAforeign option

Install it (it's in the bootstrap tools repo)
{{{
sudo apt-get install dose-builddebcheck
}}}

 * -f shows packages you can't build
 * -s shows packages you can build
 * -e prints an explanation of what the problem is
 * --checkonly checks just one package rather than everything
 * --defaultedMAforeign uses the Ubuntu apt algorithm (not in wheezy) of assuming all arch:all Build-Deps can be considered Multi-Arch:Foreign

To check
{{{
dose-builddebcheck -f --checkonly <package> \
--defaultedMAforeign --deb-native-arch=amd64 --deb-foreign-archs=arm64 --deb-host-arch=arm64 \
/var/lib/apt/lists/archive.ubuntu.com_ubuntu_dists_quantal_main_binary-amd64_Packages \
/var/lib/apt/lists/people.debian.org_%7ewookey_bootstrap_ubunturepo_dists_quantal-bootstrap_main_binary-amd64_Packages \
/var/lib/apt/lists/people.debian.org_%7ewookey_bootstrap_ubunturepo_dists_quantal-bootstrap_main_binary-arm64_Packages \
/var/lib/apt/lists/archive.ubuntu.com_ubuntu_dists_quantal_universe_source_Sources | grep source

}}}
----
CategoryPorts

This page contains details about the port of Debian to the 64-bit ARM platform (arm64), known in some other places as AArch64. This port was released for the first time with Jessie (8.0).

Other ports to ARM hardware exist / have existed in Debian - see ArmPorts for more links and an overview

'arm64' is the Debian port name for the 64-bit ARMv8 architecture, referred to as 'aarch64' in upstream toolchains (GNU triplet aarch64-linux-gnu), and some other distros.

Hardware started to becoming available in October 2013, but access was restricted. Debian was very kindly donated two 8-core APM machines, installed in March 2014 running two buildds in Debian-ports. One has been split with xen so we also have an unoffical porterbox. ARM supplied two Junos in August 2014, and Linaro 3 APM boxes in October, which are the current offical build and porter machines.

The port was started in 2010 (by ARM and Linaro working with the community in commendable fashion) long before hardware was available so that there would be something to run when it arrived.

Hardware, emulators and models

Arm64 hardware was first available in the form of the iPhone 5 in 2013. Hardware useful for GNU/Linux started to become available from Q42013, with the first commercially available boards announced June 2014.

Arm64 qemu user-space emulation became initially available in October 2013. It was added to qemu upstream in v2.0, and is available in Debian 8 (Jessie) onwards. This is much faster than the model for building software, but can't be used for kernel-space things like bootloader/kernel work, or anything that uses multithreading (such as java). See Qemu Rootfs below for details.

Arm64 qemu system emulation was added to qemu upstream and is available in Debian with qemu-system-arm 2.1+dfsg-1 or later.

There is a (non-free, free beer) 'Foundation Model' simulator which can be used to run arm64 code, which is available here

Much of the work packagers need to worry about is updating autoconf, multiarch and cross-build fixes, with a few actual arm64 changes here and there, and doesn't actually need a model or emulator.

This is the first non-x86 self-bootstrapped Debian/Ubuntu port: the first 150 packages cross-built using build-profiles to untangle cyclic build-dependencies.

Status

(last updated: November 9th 2014)

Official Debian port

The offical archive had the first bootstrap packages installed (from debian-ports) on 8th August 2014. Two (ARM-sponsored) buildds (Juno) were installed, configured and started building on 15th August 2014. https://buildd.debian.org/status/architecture.php?a=arm64&suite=sid.

3 Linaro-sponsored APM machines were added on 17th October, providing 2 more buildds and a porterbox (asachi). The Debian-ports buildd (turfan) was converted to a (non-DSA) porterbox on 6th November 2014.

Jessie

Arm64 is an offical debian release architecture in Jessie. (Yay!)

By the freeze on 5th November 2014, 10220 packages (93% of the archive) were built, and all the bootstrap uploads had been rebuilt. So nearly everything you expect is in the release. The main things missing are mono (and dependencies), libvp8 (and thus nodejs ecosystem), fsharp, gcgo, rust. A few higher-level apps also didn't make it, such as abiword, and xbmc.

Debian-installer works on APM hardware if your machine has UEFI. It needs a patch to initramfs for Juno. AMD Seattle needs a newer kernel/DTB than the one in jessie.

The release docs still need work to document this.

Unstable

These pages gives some idea of the current status in unstable (all showing number of reverse dependencies followed by package name):

95% of Debian is currently built: over 10800 source (arch-specific) packages.

Packages which have failed to build:

Packages which are curently out of date:

Packages who's build-deps are not available:

150 packages remain that are failing due to out-of-date config.{sub,guess} files.

319 packages FTBFS in unstable (down from an initial peak of 630). Please check the packages in the 'Build Attempted' section there to see what needs fixing. Many of them are trivial fixes. (See bug-tracking below for info on bug-filing and resources on fixing).

Unoffical Debian-ports bootstrap

Debian unstable was bootstrapped in debian-ports, before debian-proper: http://buildd.debian-ports.org/status/architecture.php?a=arm64&suite=sid

The debian-ports buildd was turned into a porterbox on 7th November as the job of -ports was done now that arm64 in the main archive was essentially completed.

Status details and history

Binutils, kernel, gcc and glibc port patches were sent upstream over the summer of 2012, with enough stuff to build a cross-toolchain available by October 2012. The initial port (2012) was done entirely as a cross-build using Ubuntu packages, initially quantal, then raring (from Jan 2013) to take advantage of cross-build fixes, multiarch improvements, libc and arm64 updates going in there. This port was done in Ubuntu because multiarch and the cross-toolchains were more advanced there than in Debian at the time, and Debian was frozen for Wheezy.The resulting image and updates were then used to natively build most of Saucy once real hardware that worked was available (to canonical). Trusty has 'most' stuff built. The missing stuff is largely unported languages (haskell, mono, ruby, go, etc) and large unported packages like libreoffice and firefox.

The initial Debian bootstrap (from late 2013) (350 source, 2100 binaries) was built in a personal repo ). This bootstrap was done natively starting with an Ubuntu Saucy base to supply a base chroot and non-library build-deps, lsb+dpkg-vendor was set to 'Debian', each package was built, uploaded and added to a Debianise script which replaced all available packages in the Saucy clean tarball chroot until it contained no Ubuntu packages and was effectively Debian unstable. Then a new clean debian chroot was debootstrapped and packages built/rebuilt in there using build profiles to break cycles.

Once hardware was available this Debian bootstrap image/repo was used to set up a real buildd for debian-ports and keep the port uptodate against unstable. Build profiles were again used to cleanly rebootstrap.

There are crosstoolchains built for Raring/Saucy/Trusty. Debian cross-toolchains are available in unstable (from Nov 2014) and https://people.debian.org/~wookey/tools/debian

Current cross-buildability (in Ubuntu) for arm64 is tracked on this status page. Native buildability is tracked at http://qa.ubuntuwire.org/ftbfs/arm64.html.

Installing with the installer

Debian installer is built daily for arm64 and netboot images are available here: http://d-i.debian.org/daily-images/arm64/

This works on an APM mustang/X-gene box or on qemu. It should also work on ARM Juno machines but will not install a working kernel, so you'll need to stick with the one you currently have, and contrive to boot the installer using a kernel that works.

Do please feedback installer successes or failures to the debian-arm mailing list.

Installer docs for arm64 are in the process of being created. Please help write them if you know anything of the subject.

$ sudo apt-get build-dep installation-guide
$ debcheckout installation-guide
$ cd installation-guide/build
$ ./buildone arm64 en pdf

Debootstrap arm64

Plain debootstrap will now produce an arm64 rootfs from the main archive.

First you need a valid key to verify the archive: If running unstable then just do:

sudo apt-get install debian-archive-keyring
sudo apt-key add /usr/share/keyrings/debian-archive-keyring.gpg

If running an older release you need to get the unstable keyring package (because the version in your release is probably too old to have the current key)

wget http://ftp.debian.org/debian/pool/main/d/debian-archive-keyring/debian-archive-keyring_2012.4_all.deb
sudo dpkg -i debian-archive-keyring_2014.4_all.deb

Now you can run debootstrap On an x86 machine, install qemu-user-static 2.0 or later (the package from unstable works fine on stable/testing), and:

sudo qemu-debootstrap --arch=arm64 --keyring /usr/share/keyrings/debian-archive-keyring.gpg --variant=buildd --exclude=debfoster unstable debian-arm64 http://ftp.debian.org/debian

Will do the whole process (creating an unstable chroot in the 'debian-arm64' dir).

If you have hardware or want to do it on qemu or a model), use these commands for a native debootstap:

sudo debootstrap  --keyring /usr/share/keyrings/debian-archive-keyring.gpg  --exclude=debfoster unstable debian-arm64 http://ftp.debian.org/debian

The old bootstrap repo at http://debian-ports.org/ still (Sept 2014) contains some packages not yet built in the official archive, but that should soon cease to be true. The even older bootstrap repo http://people.debian.org/~wookey/bootstrap/debianrepo2 is entirely obsolete and has now been deleted.

Pre-built Rootfses

There are a selection of rootfses here in the form of tarballs and disk images, with and without qemu-static installed.

tarball rootfs

Debian

  • Tarball rootfs userspace filesystems. There is no 'including' directory, so be careful unpacking: they are designed to be unpacked onto a real machine or inside a chroot dir. The filesystems include the qemu static binary for use with qemu 2.0 so that will 'just work' if binfmt misc is set up (see below). The only config beyond base debootstrap is to include a getty on ttyAMA0 so that a serial port on existing arm64 boards will work, and configure the password 'root' for user root so you can log in on it (change that once in!). Your particular hardware/setup may also need /etc/fstab or networking config.

unstable minimal debootstrap (64 MB) (now quite out of date - debootstrap your own)

unstable buildd debootstrap (117 MB) (now quite out of date - debootstrap your own) Includes build-essential (binutils, make, gcc), sudo, wget, nano editor, openssh-server so you can ssh in if networking is working.

Ubuntu

Ubuntu saucy multiarch tarball suitable for use as a chroot on arm64 hardware. Identical in content to the foundation model disk image below. Adding qemu-static would make it useful under qemu. Configured for armhf/arm64 multiarch use.

qemu

To use arm64 qemu, just install it from unstable/testing:

apt-get install qemu-user-static

This package installs fine on stable as well, and is available in backports.

(Note: Older qemu released referenced on this page used a different name for the static binary and binfmt-misc config (now qemu-aarch64-static, was qemu-arm64) and thus new config/old images (or vice versa) will not interoperate).

Using The Foundation model

See https://wiki.debian.org/Arm64Port/raringbootstrap#Raring_rootfs_for_Foundation_model

Here is a Ubuntu saucy disk image (92MB compressed, 2G uncompressed). Suitable for use with the foundation model or real hardware. This image is configured for armhf/arm64 multiarch usage, but it's a one-liner to turn that off.

And here's a suitable kernel (3.13, linaro foundation release 2014-01), modified for use with Linux instead of OE.

Porting packages for arm64 - Maintainer info

If your package does not build for arm64 it is usually trivial to fix, but sometimes a bit harder and sometimes a big deal. Here is info on what to change and where to go for help, updates and info.

autoconf updating

Most packages just need updated autoconf config info which includes the new arch. It is now best practice for (autotools-using) Debian packages to re-autoconf on every build in order to pick up this info automatically, or at least use the autotools-dev package to ensure latest config.sub and config.guess files. Good info on making these updates is on https://wiki.debian.org/Autoreconf

Nomenclature and defines

If your package does architecture-specific things explicitly then you will need to understand what names to use in tests.

The gnu name for the architecture (as given to configure) is aarch64-linux-gnu.

The debian name for the architecture is arm64

GCC defines __aarch64__ for the architecture.

Be careful of things which check for arm* in debian architecture tests, as it is usually wrong to do the same thing for arm64 as for 32-bit arm (arm/armel/armhf). In general, if you are not sure, you should do the same thing as on amd64 as that matches quite closely (64 bit, little endian, 32-bit ints and floats, 64-bit pointers, longs and doubles).

Check the link below for 'upstream package porting' to see if your package has had porting attention from Linaro.

There is also a big-endian version of the architecture/ABI: aarch64_be-linux-gnu but we're not supporting that in Debian (so there is no corresponding Debian architecture name) and hopefully will never have to. Nevertheless you might want to check for this by way of completeness in upstream code.

Useful porting docs

Porterboxes

If you need to test/fix on arm64 there are two porterboxes available:

DSA-maintained porterbox asachi.debian.org Non-DSA-maintained porterbox turfan.debian.net

Bug tracking

Please tag all arm64/aarch64-specific bugs 'arm64' (user=debian-arm@lists.debian.org, tag=arm64 - ) in the BTS (see bugs.debian.org/usertags for instructions), or in launchpad.

Here is an example (assuming you have a patch file, and a body template file)

reportbug $package  -V $version -A $patchfile --src --subject "Add arm64 support" --tag patch --pseudo-header 'User: debian-arm@lists.debian.org' --pseudo-header 'Usertag: arm64' --no-tags-menu --severity normal --body-file $template

Here is the current list of arm64 Debian bugs

Other distros often have useful bug-fixes already:

Upstream-relevant bugs should be filed in the linaro-aarch64 bug tracker to avoid distro duplication of effort. In this case, file bugs in the Debian BTS as well, then link to them in the Linaro tracker.

Repository

Packages are all in debian-ports.

The initial debian (using ubuntu arm64 packages) and ubuntu bootstraps were stored here but are now obsolete. A quantal chroot was used for initial work but is now (Dec 2012) frozen/abandonned.

You should just be able to add that repo and apt-get install crossbuild-essential-arm64 to get a working cross environment. If build and host arch packages have got out of sync this won't work, which happens often in raring and unstable.

Cross Toolchain

Before anything useful can happen dpkg needs to have arm64 support. This was done in v1.16.4.

binutils-aarch64-linux-gnu is in debian unstable (from July 2014) (from the cross-binutils package)

Toolchain Bootstrap

First job is to bootstrap a cross-toolchain so other stuff can be built.

This is relatively easy to do from upstream sources either directly or using a framework like ?OpenEmbedded, but to get a Debian-packaged toolchain easily usable in chroots, sbuild etc requires merging the new port with the Debian packaging, which is, frankly, a PITA.

When starting from scratch multiarch doesn't help you because you need eglibc:arm64 to make aarch64-linux-gnu-gcc and you need aarch64-linux-gnu-gcc to make eglibc:arm64. So you have to do a 3-stage bootstrap.

Ubuntu has (thanks to Linaro) a package to automate the building of fully-bootstrapped compilers for armhf/el so that was munged to make arm64-cross-toolchain-base, and the delighful task of getting everything working was started.

The process is:

  • Make a binutils with aarch64 port and arm64 packaging in so you can build binutils-source
  • Make a kernel with arm64 stuff in so you can build kernel-source
  • Make a gcc with aarch64 gcc port and arm64 packaging in so you can build gcc-source
  • Make an eglibc with aarch64 port and arm64 packaging in so you canbuild eglibc-source
  • Make arm64-cross-toolchain-base with the right runes in it to build:
    • munged linux-libc-dev kernel headers
    • gcc stage1 bare cross c-compiler
    • eglibc stage1 simple libc
    • gcc stage2 compiler and cross-compiler and libraries
    • eglibc stage 2 (full) build
    • gcc stage3 (full) build

Easy peasy.

This work was initially done in Ubuntu due to better multiarch support, availability of *-cross-toolchain-base and newer eglibc.

Toolchain Bootstrap Issues

Quantal bootstrap

The initial arm64 packaged toolchain was done in Ubuntu Quantal, as the first release where multiarch crossbuilding basically worked. The details of this are documented on toolchain/BootstrapIssues#Quantal.

Raring bootstrap

Easier than quantal as all the base porting has already been done. However not quite as easy as one might like. arm64-cross-toolchain-base was updated with some fixes/updates from the armhf/armel-c-t-b packages. Binutils and linux-libc-dev headers were straightforward.

But gcc stage1 build fell over first with bugs in gcc-4.7.2-12ubuntu2 (patches that didn't apply, missing arm64 symbols-files). Then with missing bits/predefs.h header when building libgcc. This turned out to be 1091823.

Then the build completed but there was a libgconv.a packaging error for some reason. Updating to gcc-4.7-2-14ubuntu2 seemed to fix that.

Debian bootstrap

The Debian toolchain bootstrap is being attempted fully multiarch, to avoid the above issues with needing a separate libc:arm64 and equivs packages to make everything work. It's also an opportunity to integrate DEB_BUILD_PROFILE boostrap features to make it all nicely automatable, without toolchains being a special case in the archive. This was initially (December 2012) too troublesome, mostly due to new versions of GCC coming out every few days with this stuff being changed. As of gcc-4.7.2-18 onwards ThibG's patches for the toolchain using the multiarch system libraries are integrated so I had another go.

This process is documented on MultiarchCrossToolchains.

Current status is that experiemntal is being used as the stuff in unstable is too old.

binutils and gcc stage1 are built.

The kernel header patches are being updated for 3.8

Building packages

Given a cross-build chroot, in general you should be able to do

apt-get build-dep -aarm64 <package>
apt-get source <package>
cd <package>-<ver>
CONFIG_SITE=/etc/dpkg-cross/cross-config.arm64  DEB_BUILD_OPTIONS=nocheck dpkg-buildpackage --preserve-env -aarm64

But there are of course some caveats.

Details on setting up an arm64 cross-chroot are given here: https://wiki.linaro.org/Platform/DevPlatform/CrossCompile/arm64bootstrap

There was no libssp (stack protection) support in the aarch64 toolchain on gcc-4.8 (and 4.7 pre-release)(https://cards.linaro.org/browse/TCWG-23) so the -fstack-protector would cause an error:

/usr/lib/gcc/aarch64-linux-gnu/4.7/../../../../aarch64-linux-gnu/bin/ld: cannot find -lssp_nonshared
/usr/lib/gcc/aarch64-linux-gnu/4.7/../../../../aarch64-linux-gnu/bin/ld: cannot find -lssp

For any package that uses dpkg-buildflags this is easy to fix by setting DEB_BUILD_MAINT_OPTIONS=hardening=-stackprotector You can set this for the whole build chroot if using one, or for a user, or for a build by doing:

DEB_BUILD_MAINT_OPTIONS=hardening=-stackprotector dpkg-buildpackage -aarm64

Better to fix this permanently in /etc/dpkg/buildflags:

STRIP CFLAGS -fstack-protector

With gcc-4.9 libssp is treated just as on any other major architecture.

Package porting

Many packages need no more than config.guess and config.sub updating to build for arm64. autotools got aarch64 support upstream in June 2012. So autotools-dev 20120608.1 has the files needed. However many (most) packages don't autoreconfig on build, or otherwise update those files so they have to be patched. A lot of boring patches were filed with the tag arm64, such as 689613

In many cases dh_autoreconf can be used to fix this without making horrible, unreadable, autofoo patches. Sometimes it's better to use autotools-dev which only updates config.{sub,guess} without re-generating all the configury because this is less invasive, or the package simple doesn't autoreconf properly. dh-autoreconf is preferred as it covers all cases (for example the ppc64el port needs re-libtooling, so dh-autoreconf works, but the autotools-dev dh_updateconfig is not sufficient. Some packages won't build a second time after dh_autoreconf has poked them around. This QA page goes into more details about updating your packages

For the initial botstrap everything had to be cross-built as there was no hardware (and no OS) so cross-building patches were also needed in many packages, and multiarch patches in many build-deps. Due to the Wheezy freeze and thus the more progressed state of multiarchification and more cross-build fixes in Ubuntu, this work was initialy done in a private Quantal-based repo, and later in a raring-tracking repo, but all bugs are either directly filed, or also pushed upstream to Debian. There are still (April 2014) a lot of cross-build fixes that are in Ubuntu but not yet uploaded to Debian.

Quite a few packages need actual changes. Here is a list for the early stages (see the BTS for complete info):

Packages that needed arm64-related changes

package

Debian Bug/Fixed version

Ubuntu Bug/Fixed version

dpkg

672408

autotools

20120210.1

20120210.1

binutils

binutils-2.22.90.20120924

coreutils

698330

gcc

gcc-4.8

gcc-4.7-4.7.2-3ubuntu1arm64 1133104

eglibc

690873 2.16-0arm64.1 2.17

2.16-0ubuntu3 2.17-0ubuntu4 1120810

fftw3

734675

1267107

linux

695241

1063895

util-linux

689607

perl

https://github.com/codehelp/perl-cross-debian/tree/master/aarch64-linux-gnu

dpkg-cross

693730 2.6.8

2.6.7arm64

(cross)-build-essential

693220

11.6ubuntu4

gmp

693467

1079831

kde-pkg-tools

744173

libcaca

http://people.debian.org/~wookey/bootstrap/patches/arm64/debian/libcaca_0.99.beta18-1-docdisable-arm64.patch

libffi

698344

3.0.11-2ubuntu1

libgc

732349

klibc

1081162

libbsd

1109050

libx11

1129389

qt4-x11

735488

mesa

732437

openssl

732348

1102107

tbb

748508

xorg

731766

xutils-dev

734944 748010

Packages that needed crossbuild fixes

package

Debian Bug

Ubuntu Bug

cups

734670

diffutils

1:3.2-3

1:3.2-1ubuntu1

tzdata

gdbm

604648

1.8.3-11ubuntu1

iptables

1.4.16

1081592

libsemanage

1103271

db

1105368

linux

1105251

sqlite3

packages that needed multiarch-related changes

package

Debian Bug

Ubuntu Bug

perl

633884

python-2.7

683755

chrpath

0.14

0.14

less

693318

1081611

check

693221

1101069

gettext

683751

ed

693824

dctrl-tools

693474

1129373

indent

693823

fdupes

693822

1117304

bc

681784

1098408

equivs

697820

1097993

linux-atm

1098417

tcl8.5

698674

1122120

autogen

1118246

netpbm-free

700007

2:10.0-15ubuntu2

libxcb

1129376

pkgconfig

726598

Packages that needed changes for eglibc 2.16

package

Debian Bug

Ubuntu Bug

diffutils

693346

1079770

tar

693352

1079750

gettext

693361

1079768

cpio

693440

1079748

coreutils

8.20

1081220

or eglibc 2.17

gpm

1.20.4-6ubuntu1

Packages that need(ed) config.{guess,sub} updates

package

Debian Bug

Ubuntu Bug

abcm2ps

acl

689610

Quantal

aiksaurus

756031

alarm-clock

726170

am-utils

727316

aranym

727321

arp-scan

727323

audacity

727324

bbe

727327

berusky

727328

binutils-m68hc1x

727329

brightside

check

733038

chrpath

700117

0.14-1ubuntu1

ccze

727339

cflow

727342

chise-base

727343

cloog-ppl

711727

coinor-dylp

coinor-flopc++

coinor-vol

cone

config-manager

727346

coreutils

689611

Quantal

corosync

743243

cpio

689612

Quantal

daq

727353

db

689613

Quantal,

dbacl

dbuskit

dialog

689615

Quantal

diffstat

700118

1.55-3ubuntu1

diffutils

689617 1:3.2-7

1:3.2-7

dhcp-probe

727355

dico

dropbear

689618

dsyslog

727361

dvdauthor

727364

dvipsk-ja

727365

efax-gtk

727369

exrtools

727375

expat

689619

Quantal

findutils

689620

Quantal

fbpager

727379

fbterm-ucimf

fileschanged

727850

fische

727852

flactag

flwrap

727855

fprobe

fprobe-ulog

freecraft

gawk

714795

gbemol

727865

gcc-msp430

gconfmm2.6

765210

dh-autoreconf not enough, package needs real work

genparse

727866

geomview

gfarm

727868

gftp

727869

ginac

733477

gjay

gjiten

gle

727253

gle-graphics

727871

gmchess

727872

gmediaserver

727873

gmetadom

gnome-paint

727874

gnome-python

gnome-speech

gnupg

Quantal

gnusim8085

gnuspool

727878

gpt

727879

graphviz

749061

gstreamer-hplugins

gtk2-engines-wonderland

gtkaml

727888

gtkimageview

guifications

guile-1.6

gurlchecker

727890

h323plus

hasciicam

hippo-canvas

hkl

727894

ho22bus

727895

hyantesite

727899

iaxmodem

ibus-m17n

727265

id-utils

727388

inotify-tools

727902

ircd-ircu

727903

jaula

727904

json-c

1102043

jwhois

727910

jwm

727911

kbd

700119

1.15.3-9ubuntu4

kmflcomp

lcms

543464

lcms2

717839

link-grammar

littlewizard

live-f1

727921

lletters

727450

logjam

727923

lpe

727924

lzop

libapache-mod-encoding

727391

libasyncns

725778

libelf

693996 0.8.13-4~1

1082134 0.8.13-3ubuntu1

libgetdata

727407

libghemical

libgpg-error

689621

Quantal

libgtksourceviewmm

liblunar

727413

libmpd

727415

libmthca

727417

libnfnetlink

693825

1081600

libnih

689622

Quantal

libomxalsa

727421

libomxcamera

727422

libomxfbdevsink

727423

libomxmad

727424

libomxvideosrc

727425

libomxvorbis

727426

libpcl1

727430

librtfcomp

727434

libsamplerate

734673

libsigc++

727299

libsndfile

732346

libview

727446

libvmime

727447

libwfut

libx11

689623

Quantal

libxml2

689624

Quantal

libxslt

689625

Quantal

libxr

727449

make-dfsg

689626

Quantal

makebootfat

mango-lassi

727453

mcrypt

727455

mgp

727457

ming

727458

mlocate

700094

0.25-0ubuntu2

modplugtools

727462

module-init-tools

689627

Quantal

mp3splt

727465

mp3splt-gtk

mpfr4

700065

3.1.0-5ubuntu1

nano

689628

Quantal

nautilus-share

726302

nautilus-image-converter

727469

ncurses

Quantal

netperfmeter

727472

notify-python

ns2

727930

ocaml-cry

ocaml-flac

ocaml-ladspa

ocaml-mad

ocl-icd

732821

open-invaders

727477

openvanilla-modules

727479

openvpn-auth-ldap

openvrml

osspsa

727483

ots

727254

patch

Quantal

pads

727485

pam

paps

727488

pcre3

Quantal

pgreplay

727933

pidgin-festival

pidgin-hotkeys

727936

pidgin-librvp

plptools

727942

policykit-1

734082

poppler

734014

popt

Quantal

prelude-lml

727947

psiconv

pygoocanvas

qrouter

quicksynergy

racket

radsecproxy

727952

rdesktop

727953

rtpproxy

sagan

sage

727958

sarg

727959

scim-canna

727961

scim-chewing

727962

scmxx

sed

Quantal

sidplay

727965

sidplay-base

simulavr

727966

siproxd

727967

sipsak

727968

slcurl

slgsl

slhist

slony1-2

smalt

soqt

soundmodem

727972

sqlite

727510

sqlite3

712037

ssldump

stardict

727975

subnetcalc

727512

sucrack

727978

synaesthesia

727982

taningia

727514

taopm

tcpcopy

tcpreen

727983

tcpxtract

727984

telepathy-ring

thewidgetfactory

thin-provisioning-tools

727985

transcalc

727988

tree-puzzle

tucnak2

727990

tuxfootball

727991

ucimf-chewing

udpcast

727996

valknut

727999

wfmath

wmforkplop

x11-kbd-utils

717841

x11-server-utils

735489

xblast-tnt

728004

xcftools

728005

xcowsay

xfce4-battery-plugin

xfce4-datetime-plugin

xfce4-diskperf-plugin

xfce4-linelight-plugin

xfce4-mpc-plugin

xfce4-notes-plugin

xfce4-quicklauncher-plugin

xfce4-systemload-plugin

xfce4-verve-plugin

xfce4-wavelan-plugin

xfswitch-plugin

728007

xnbd

xneur

xpilot-ng

728009

zzlib

717837

Packages that just needed fixes

guile-1.8

711029

w3m

0.5.3-14

zsh

734765

Packages that need build profiles

  • eglibc (libselinux)
  • libselinux (swig, rub2deb)
  • glib2.0 (python-dbus)
  • gettext (java)
  • dbus (systemd, libdbus-glib, python-dbus)
  • db (java, python-all-dev, python3-dev)
  • udev (gobject-introspection)
  • libnih
  • libsemanage (swig, rub2deb)
  • pam (libaudit)
  • libidn (gcj-jdk)
  • curl
  • pango (gobject introspection)
  • cracklib2 (python bindings)
  • libisl/libcloog
  • avahi ( gtk2, gtk3, qt4) 734669

  • pulseaudio (bluez) 735485

  • cups (notest) 734670

  • krb5
  • doxygen (qt4)
  • graphviz (guile, lua, php, ruby, tcl, bindings)
  • libcap-ng (swig)
  • highlight (swig)
  • libsoup2.4 (glib-networking)

The set of patches for this (in unstable/raring) is here: http://people.debian.org/~wookey/bootstrap/patches/

Packages waiting on build-deps

Nothing of significance now (July 2014)

Perl

Perl is a bit of a special case. It needs both cross-build support and multiarchifying. Status is being tracked on Multiarch/Perl

Cross-build supprt currently involves creating config files on a host-arch machine, which currently means a model, or creating the files by inspection and comparison with others. A set of arm64 configs has been created from a model run and comparison with armhf and amd64 configs for Debian and arm64 config for openembedded. These are now checked-in to perl-cross-debian. And perl cross-builds successfully with these configs and that version of perl-cross-debian plus its corresponding perl patches.

Meanwhile There is a multiarch branch of perl here: 'ntyni/multiarch-5.14' branch of git://git.debian.org/perl/perl.git which is discussed in this thread: http://lists.debian.org/debian-perl/2012/09/msg00000.html

This builds and works OK, but does not currently cross-build. Merging these two pieces of work to get a cross-buildable, multiarched, arm64, perl is currently underway.

Packages that don't cross build

dialog

Wrong-arch strip run.

fuse

Conflicting 64-bit definitions: 1087757

icu

configure: error: Error! Cross compiling but no --with-cross-build option specified - please supply the path to an executable ICU's build root

libatomic-ops

Needs aarch64 assembly

Packages that are built for jessie

See the debian buildd status page: http://buildd.debian.org/status/architecture.php?a=arm64&suite=sid

The initial bootstrap now has its own page, largely for historical interest: https://wiki.debian.org/Arm64Port/PackagesBuilt

Packages with issues

libvp8-3.14 is too old for arm64 support. It exists in 3.25, but mangodb and nodejs have not moved forward to this version. So there seems to be no sensible way to get vp8/nodejs for arm64 in jessie.

fftw3 failed to build neon code (ICE) https://bugs.launchpad.net/linaro-aarch64/+bug/1267113 Simply not enabling neon for arm64 allows a build

emacs23 FTBFS (hangs compiling lisp libraries): #752031

  • (This made 'emacs' uninstallable, which caused quite a few builds to fail, until the switch to emacs24 in July 2014)

xutils-dev only builds correctly with cpp-4.7 which doesn't exist for arm64: #748010

mksh segfaults in the tests (does not honour 'nocheck')

flex fais to buld docs due to pdftex error. Something really wrong?:

  • !pdfTeX error: pdfetex (file cm-super-t1.enc): cannot open encoding file for re

ading

  • ==> Fatal error occurred, no output PDF file produced!

/usr/bin/texi2dvi: pdfetex exited with bad status, quitting. Makefile:434: recipe for target 'flex.pdf' failed

Packages that needed fixes

qt4-x11 only builds with -fpermissive, which is not acceptable to maintainers: #735488

#util-linux apt-get install automake autopoint libtool # (29Mb of stuff) DEB_BUILD_OPTIONS="parallel=80" dpkg-buildpackage -sa > ../buildlog.util-linux-2.20.1 failedwith:

  • CC fdisk-fdiskbsdlabel.o In file included from fdiskbsdlabel.c:62:0: fdiskbsdlabel.h:61:2: error: #error unknown architecture

The fix is in http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=689607

Having to add every new arch one by one to this package is silly. Listing the exceptions would be a lot more useful. Are there any?

#coreutils apt-get install dh-buildinfo groff gperf bison DEB_BUILD_OPTIONS="parallel=80" dpkg-buildpackage -sa fails to build:

  • CC src/factor.o /tmp/ccgzV4MB.s: Assembler messages: /tmp/ccgzV4MB.s:668: Error: operand 3 should be an integer register -- adc x11,x2,0' /tmp/ccgzV4MB.s:681: Error: operand 3 should be an integer register -- adc x2,x11,0' /tmp/ccgzV4MB.s:719: Error: operand 3 should be an integer register -- adc x4,x11,0'

see https://bugzilla.redhat.com/show_bug.cgi?id=917735 and http://gmplib.org:8000/gmp/rev/187b7b1646ee which says this is the same issue as fixed in gmp This is the bug: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=698330 Applying that fix (updated) works.

postgres9.3 fails in the documentation build - apprently indicating a problem in the arm64 ghostscript package. This 'went away' - not entirely clear why.

libphonenumber failed tests on buildd, but works fine on APM and Juno if built locally.

zookeeper FTBFS on Juno, Worked OK on APM/X-gene. Was due to obscure java multiprocessor issue.

Using dose to see what is multiarch-buildable

Dose 3.1 can analyse build-dependencies for a given package, and understands about cross and multi-arch. It can tell you what is currently buildable given the current state of relevant source and package files. Use 3.1.2 for the --checkonly option and the --defaultedMAforeign option

Install it (it's in the bootstrap tools repo)

sudo apt-get install dose-builddebcheck
  • -f shows packages you can't build
  • -s shows packages you can build
  • -e prints an explanation of what the problem is
  • --checkonly checks just one package rather than everything
  • --defaultedMAforeign uses the Ubuntu apt algorithm (not in wheezy) of assuming all arch:all Build-Deps can be considered Multi-Arch:Foreign

To check

dose-builddebcheck -f --checkonly <package> \
--defaultedMAforeign --deb-native-arch=amd64 --deb-foreign-archs=arm64 --deb-host-arch=arm64 \
/var/lib/apt/lists/archive.ubuntu.com_ubuntu_dists_quantal_main_binary-amd64_Packages \
/var/lib/apt/lists/people.debian.org_%7ewookey_bootstrap_ubunturepo_dists_quantal-bootstrap_main_binary-amd64_Packages \
/var/lib/apt/lists/people.debian.org_%7ewookey_bootstrap_ubunturepo_dists_quantal-bootstrap_main_binary-arm64_Packages \
/var/lib/apt/lists/archive.ubuntu.com_ubuntu_dists_quantal_universe_source_Sources | grep source


CategoryPorts