I found the error and issued a patch to fix it.
(@redgee34: Can not confirm that changing Python version somehow fixes this)
Basically Firefox is designed so, it generates all the specific code for various arm flavors - including the neon one - and resolves the actual plattform at run time.
But there is a bug in Mozilla's build system, carried out by files called moz.build with Python syntax which are supposed to generate the Makefile targets. Specifically there are some lousy checks on a Make variable called
OS_TEST:
Code: Select all
$ find /mnt/custom/www-client/firefox-24.3.0/work/ -name moz.build -exec grep -3 OS_TEST {} \; -print | grep -3 arm
...
if CONFIG['OS_TEST'] == 'arm' and CONFIG['HAVE_ARM_NEON']:
CPP_SOURCES += [
'yuv_convert_arm.cpp',
]
/mnt/custom/www-client/firefox-24.3.0/work/mozilla-esr24/gfx/ycbcr/moz.build
MODULE = 'xpcom'
--
'xptcinvoke_gcc_x86_unix.cpp',
'xptcstubs_gcc_x86_unix.cpp',
]
elif CONFIG['OS_TEST'] == 'arm':
CPP_SOURCES += [
'xptcinvoke_nto_arm.cpp',
'xptcstubs_nto_arm.cpp',
]
elif CONFIG['OS_TEST'] == 'sh':
CPP_SOURCES += [
--
'xptcstubs_alpha_openbsd.cpp',
]
if CONFIG['OS_TEST'].startswith('arm') or CONFIG['OS_TEST'] == 'sa110':
if CONFIG['OS_ARCH'] == 'Linux':
CPP_SOURCES += [
'xptcinvoke_arm.cpp',
--
'xptcstubs_arm_netbsd.cpp',
]
Particularly the first one was the culprit (ycbcr/moz.build), it should be better
startswith('arm') like the last one, because the Autoconfig tends to set OS_TEST to
${target_cpu}, which is something like "armv6j" for me; or - I guess - "armv7a" for RasPi 2 :
Code: Select all
$ cat /mnt/custom/www-client/firefox-24.3.0/work/mozilla-esr24/configure.in | grep OS_TEST
1030 OS_TEST="${target_cpu}"
1047 # OS_TEST
1089 OS_TEST=`uname -p`
1120 OS_TEST=${target_cpu}
1130 OS_TEST=ppc
1133 OS_TEST=i386
1136 OS_TEST=x86_64
1140 OS_TEST=`uname -p`
1147 # Only set CPU_ARCH if we recognize the value of OS_TEST
1149 case "$OS_TEST" in
1183 CPU_ARCH="$OS_TEST"
1203 case "$OS_TEST" in
6120 case "$OS_ARCH:$OS_TEST" in
8948 AC_SUBST(OS_TEST)
(uname -p returns "unknown" on RasPi 1 )
Code: Select all
$ cat /mnt/custom/www-client/firefox-24.3.0/work/mozilla-esr24/obj-armv6l-unknown-linux-gnueabi/config.status | grep OS_TEST (''' OS_TEST ''', r''' armv6j '''),
Thus the "yuv_convert_arm.cpp" never makes it to an object file and after exactly 5115 *.o's ld (the linker) complains about unresolved reference to "yuv42x_to_rgb565_row_neon(....)" - the only function yuv_convert_arm.cpp implements.
Strangely they marked as "stable" just that version of firefox which is garanteed to not compile ...
As I didnt want to mess with the original build system I decided to put a
[[[ $OS_TEST == arm* ]]] && OS_TEST=arm in the central configure.in (guess why 3 of []..

)
With OS_TEST=arm the check catches and the compilation succeeds so firefox emerges correctly - they call it Aurora for arm... But performes poorly on a RasPi 1.
Here is the patch:
https://bpaste.net/show/51c484d2bd61 . Copy & paste it into
/etc/portage/patches/www-client/firefox-24.3.0/UncleVan-5115-os-test-arm.patch in order to get picked up by emerge. Then issue
lean back and enjoy the show; 9:30h on my RPi 1 .... With cross-distcc !
Should also work on RasPi 2 - report your experience .
Your UncleVan.