Bug 2462

Summary: xbmc FTBFS on armv5tel - enforcing -mcpu=cortex-a8
Product: Fedora Reporter: Nicolas Chauvet <kwizart>
Component: kodiAssignee: Alex Lancaster <alexl>
Status: RESOLVED DUPLICATE    
Severity: enhancement CC: ktdreyer
Priority: P5    
Version: 19   
Hardware: armhfp   
OS: GNU/Linux   
namespace:
Bug Depends on:    
Bug Blocks: 2407    
Attachments: xbmc build failure on armv5tel
xbmc build.log failure with 12.0 rc3

Description Nicolas Chauvet 2012-09-02 16:19:47 CEST
Created attachment 952 [details]
xbmc build failure on armv5tel

xmbc from the rpmfusion-free-17 released repository doesn't build on armv5tel.

This could be caused by the enforcement of CFLAGS conflicting.
See the full build.log attached.

Please either:
- remove the hardcoded CFLAGS when building on ARM that would prevent softfp compilation when target is armv5tel
- Use ExcludeArch: armv5tel

I would prefer the former as xbmc should work on raspberry-pi.
Comment 1 Alex Lancaster 2012-10-04 21:29:17 CEST
(In reply to comment #0)
> Created attachment 952 [details]
> xbmc build failure on armv5tel
> 
> xmbc from the rpmfusion-free-17 released repository doesn't build on armv5tel.
> 
> This could be caused by the enforcement of CFLAGS conflicting.
> See the full build.log attached.
> 
> Please either:
> - remove the hardcoded CFLAGS when building on ARM that would prevent softfp
> compilation when target is armv5tel
> - Use ExcludeArch: armv5tel
> 
> I would prefer the former as xbmc should work on raspberry-pi.

The current CFLAGS looks like this:

CFLAGS="$RPM_OPT_FLAGS -fPIC -I/usr/include/afpfs-ng/ -I/usr/include/ffmpeg -D__STDC_CONSTANT_MACROS"

So it uses the global flags set by the rpm repository, but then adds some additional flags.  Do you know which are the conflicting?  Feel free to send a patch, or otherwise suggest what changes should be made, as I don't know anything about builds on armv5tel architectures.
Comment 2 Nicolas Chauvet 2012-12-02 19:48:18 CET
I will try to investigate. But according to the configure report, here is the CFLAGS used: I don't know where -Wa,-march=armv7a -mcpu=cortex-a8 comes from.

configure:     CFLAGS='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4  -march=armv5te -mfloat-abi=soft -fPIC -I/usr/include/ffmpeg -D__STDC_CONSTANT_MACROS -fPIC -DPIC -D_REENTRANT -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -DNDEBUG=1 -mfloat-abi=softfp -mno-apcs-stack-check -Wa,-march=armv7a -mcpu=cortex-a8'
Comment 3 Ken Dreyer 2013-01-05 21:15:02 CET
We should try the xbmc-12.0-0.6.Frodo_rc3 package that's in F18 or F19, since there was a lot of work upstream to make 12.0 operational on the Raspberry Pi.

Also, I was able to successfully build xbmc-12.0-0.6.Frodo_rc3 for F17 in mock on ARMv7 qemu VM.
Comment 4 Ken Dreyer 2013-01-09 20:46:04 CET
Created attachment 1017 [details]
xbmc build.log failure with 12.0 rc3

I attempted an armv5tel build of 12.0-0.6.Frodo_rc3 in an Fedora 17 mock chroot on my Raspberry Pi. It fails with the same problem in xbmc/utils/MathUtils.h: "error: impossible constraint in 'asm'"
Comment 5 Ken Dreyer 2013-01-09 21:14:25 CET
This is some deep assembler magic that's over my head. Upstream ticket filed at http://trac.xbmc.org/ticket/13941
Comment 6 Nicolas Chauvet 2013-01-11 22:33:09 CET
I think it's more about pre-processing than ASM.

Even when using --with-platform=target_raspberry_pi \ and --target armv6l with rpmbuild, I have a similar error.
But we are using softfp armv6l whereas xbmc may implicitly default to hardfp even for armv6l. (raspbian).

Workaround by using  defined(__arm__) condition in the DISABLE_MATHUTILS_ASM_ROUND_INT and DISABLE_MATHUTILS_ASM_TRUNCATE_INT cases.

I've experienced a similar problem later:
/mnt/builder/rpmbuild/BUILD/xbmc-12.0-Frodo_rc3/xbmc/utils/StdString.h:1605:14: note: the mangling of ‘va_list’ has changed in GCC 4.4
Utils/AEConvert.cpp: In static member function ‘static unsigned int CAEConvert::S16LE_Float(uint8_t*, unsigned int, float*)’:
Utils/AEConvert.cpp:173:28: error: inconsistent operand constraints in an ‘asm’
make[1]: *** [Utils/AEConvert.o] Error 1

testing on panda-builder armv7hl
Comment 7 Nicolas Chauvet 2013-04-30 13:12:58 CEST
FYI, the build succeeded on armv7hl but failed on armv5tel

One workaround that could be tested is to disable dvdnav on armv5tel armv6l armv7l or even to use ExcludeArch for theses.

For the longer term, we could support armv7hl and armv6hl (and later aarch64).
I will be able to test when back from vacation.

-------------------
gcc -o /builddir/build/BUILD/xbmc-12.0/system/players/dvdplayer/libdvdnav-arm.so -shared -fPIC -rdynamic -ldvdread -fPIC -Wl,--soname,/builddir/build/BUILD/xbmc-12.0/system/players/dvdplayer/libdvdnav-arm.so   libdvdnav/obj/*.o -lm \
        -Wl,--unresolved-symbols=ignore-all \
        `cat /builddir/build/BUILD/xbmc-12.0/xbmc/cores/DllLoader/exports/wrapper.def` /builddir/build/BUILD/xbmc-12.0/xbmc/cores/DllLoader/exports/wrapper.o
make[1]: Leaving directory `/builddir/build/BUILD/xbmc-12.0/lib/libdvd'
CPP     xbmc/cores/dvdplayer/DVDAudio.o
In file included from /builddir/build/BUILD/xbmc-12.0/xbmc/cores/AudioEngine/Utils/AEChannelInfo.h:23:0,
                 from DVDAudio.h:30,
                 from DVDAudio.cpp:23:
/builddir/build/BUILD/xbmc-12.0/xbmc/utils/StdString.h:1605:14: note: the mangling of 'va_list' has changed in GCC 4.4
CPP     xbmc/cores/dvdplayer/DVDClock.o
In file included from DVDClock.cpp:24:0:
/builddir/build/BUILD/xbmc-12.0/xbmc/utils/MathUtils.h: In member function 'int CDVDClock::UpdateFramerate(double, double*)':
/builddir/build/BUILD/xbmc-12.0/xbmc/utils/MathUtils.h:127:6: error: impossible constraint in 'asm'
/builddir/build/BUILD/xbmc-12.0/xbmc/utils/MathUtils.h:127:6: error: impossible constraint in 'asm'
/builddir/build/BUILD/xbmc-12.0/xbmc/utils/MathUtils.h:127:6: error: impossible constraint in 'asm'
/builddir/build/BUILD/xbmc-12.0/xbmc/utils/MathUtils.h:127:6: error: impossible constraint in 'asm'
make[1]: *** [DVDClock.o] Error 1
make: *** [xbmc/cores/dvdplayer/DVDPlayer.a] Error 2
------------
Comment 8 Nicolas Chauvet 2013-07-22 10:12:27 CEST
This time, the error is with armhfp.
Experienced with xbmc from releases 19.


-------------------------
Engines/SoftAE/SoftAE.cpp: In constructor 'CSoftAE::CSoftAE()':
Engines/SoftAE/SoftAE.cpp:88:67: warning: format '%lu' expects argument of type 'long unsigned int', but argument 3 has type 'std::vector<AESinkInfo>::size_type {aka unsigned int}' [-Wformat=]
   CLog::Log(LOGNOTICE, "Found %lu Lists of Devices", m_sinkInfoList.size());
                                                                   ^
CPP     xbmc/cores/AudioEngine/Sinks/AESinkOSS.o
CPP     xbmc/cores/AudioEngine/Engines/PulseAE/PulseAE.o
CPP     xbmc/cores/AudioEngine/Engines/PulseAE/PulseAEStream.o
CPP     xbmc/cores/AudioEngine/Engines/PulseAE/PulseAESound.o
Engines/PulseAE/PulseAESound.cpp: In constructor 'CPulseAESound::CPulseAESound(const string&, pa_context*, pa_threaded_mainloop*)':
Engines/PulseAE/PulseAESound.cpp:40:16: error: 'CreateUUID' is not a member of 'StringUtils'
   m_pulseName      (StringUtils::CreateUUID())
                ^
In file included from Engines/PulseAE/PulseAESound.cpp:24:0:
Engines/PulseAE/PulseAESound.h:62:22: warning: 'CPulseAESound::m_volume' will be initialized after [-Wreorder]
   float m_maxVolume, m_volume;
                      ^
Engines/PulseAE/PulseAESound.h:50:15: warning:   'std::string CPulseAESound::m_pulseName' [-Wreorder]
   std::string    m_pulseName;
               ^
Engines/PulseAE/PulseAESound.cpp:30:1: warning:   when initialized here [-Wreorder]
 CPulseAESound::CPulseAESound(const std::string &filename, pa_context *context, pa_threaded_mainloop *mainLoop) :
 ^
make[1]: *** [Engines/PulseAE/PulseAESound.o] Error 1
make[1]: *** Waiting for unfinished jobs....
-------------------------
Comment 9 Nicolas Chauvet 2014-04-02 20:08:10 CEST

*** This bug has been marked as a duplicate of bug 3213 ***