Cross compilation fails for powerpc target

As part of portability test suite,
I test an open-sourced library against PowerPC using qemu,
in order to ensure it still works properly on big-endian systems.

This used to work fine up to yesterday.
This morning, after a code change which merely involved updating some comments, powerpc compilation fails. The test never reaches qemu stage.

In file included from /usr/include/stdlib.h:24:0,
/usr/include/features.h:367:25: fatal error: sys/cdefs.h: No such file or directory
compilation terminated.

Looking at the log, there is indeed a change between yesterday and today : gcc version has been upgraded.

Yesterday, it was :

Setting up gcc-4.8-powerpc-linux-gnu-base (4.8.4-2ubuntu1~14.04.1cross0.11.2) ...
Setting up cpp-4.8-powerpc-linux-gnu (4.8.4-2ubuntu1~14.04.1cross0.11.2) ...
Setting up cpp-powerpc-linux-gnu (4:4.8.2-1) ...
Setting up binutils-powerpc-linux-gnu (2.24-5ubuntu13cross0.10.1) ...
Setting up libc6-powerpc-cross (2.19-0ubuntu2cross1.1) ...
Setting up libgcc1-powerpc-cross (1:4.8.4-2ubuntu1~14.04.1cross0.11.2) ...
Setting up libgomp1-powerpc-cross (4.8.4-2ubuntu1~14.04.1cross0.11.2) ...
Setting up libatomic1-powerpc-cross (4.8.4-2ubuntu1~14.04.1cross0.11.2) ...
Setting up libasan0-powerpc-cross (4.8.4-2ubuntu1~14.04.1cross0.11.2) ...
Setting up libgcc-4.8-dev-powerpc-cross (4.8.4-2ubuntu1~14.04.1cross0.11.2) ...
Setting up gcc-4.8-powerpc-linux-gnu (4.8.4-2ubuntu1~14.04.1cross0.11.2) ...
Setting up libc6-ppc64-powerpc-cross (2.19-0ubuntu2cross1.1) ...
Setting up linux-libc-dev-powerpc-cross (3.13.0-13.33cross1.1) ...
Setting up libc6-dev-powerpc-cross (2.19-0ubuntu2cross1.1) ...
Setting up libc6-dev-ppc64-powerpc-cross (2.19-0ubuntu2cross1.1) ...
Setting up lib64gcc1-powerpc-cross (1:4.8.4-2ubuntu1~14.04.1cross0.11.2) ...
Setting up lib64gomp1-powerpc-cross (4.8.4-2ubuntu1~14.04.1cross0.11.2) ...
Setting up lib64atomic1-powerpc-cross (4.8.4-2ubuntu1~14.04.1cross0.11.2) ...
Setting up lib64asan0-powerpc-cross (4.8.4-2ubuntu1~14.04.1cross0.11.2) ...
Setting up lib64gcc-4.8-dev-powerpc-cross (4.8.4-2ubuntu1~14.04.1cross0.11.2) ...
Setting up gcc-4.8-multilib-powerpc-linux-gnu (4.8.4-2ubuntu1~14.04.1cross0.11.2) ...
Setting up gcc-powerpc-linux-gnu (4:4.8.2-1) ...

Now, it is :

Setting up gcc-5-powerpc-linux-gnu-base:amd64 (5.4.0-6ubuntu1~16.04.9cross1) ...
Setting up cpp-5-powerpc-linux-gnu (5.4.0-6ubuntu1~16.04.9cross1) ...
Setting up cpp-powerpc-linux-gnu (4:5.3.1-1ubuntu1) ...
Setting up binutils-powerpc-linux-gnu (2.26.1-1ubuntu1~16.04.8) ...
Setting up gcc-5-cross-base (5.4.0-6ubuntu1~16.04.9cross1) ...
Setting up libc6-powerpc-cross (2.23-0ubuntu3cross1) ...
Setting up libgcc1-powerpc-cross (1:5.4.0-6ubuntu1~16.04.9cross1) ...
Setting up libgomp1-powerpc-cross (5.4.0-6ubuntu1~16.04.9cross1) ...
Setting up libatomic1-powerpc-cross (5.4.0-6ubuntu1~16.04.9cross1) ...
Setting up libasan2-powerpc-cross (5.4.0-6ubuntu1~16.04.9cross1) ...
Setting up libstdc++6-powerpc-cross (5.4.0-6ubuntu1~16.04.9cross1) ...
Setting up libubsan0-powerpc-cross (5.4.0-6ubuntu1~16.04.9cross1) ...
Setting up libgcc-5-dev-powerpc-cross (5.4.0-6ubuntu1~16.04.9cross1) ...
Setting up gcc-5-powerpc-linux-gnu (5.4.0-6ubuntu1~16.04.9cross1) ...
Setting up gcc-powerpc-linux-gnu (4:5.3.1-1ubuntu1) ...

Notice the move from 4.8.4 to 5.4.0 (though there are a few 5.3.1 in the new mix too).

This seems to break powerpc cross compilation for me. I wouldn’t surprised if other projects with the same need meet the same fate.

Check the Ubuntu release on your builds. We are in the process of switching the default to Xenial, and it may not have the files you need.

Explicitly sticking with Trusty with dist: trusty may solve your problem.

1 Like

Thanks !

Sticking the test to Trusty explicitly saved the test, which now works as intended.

This gives time to investigate if the test can be made to work on Xenial too.

Regards