openSUSE:ARM distribution howto
tagline: From openSUSE
Contents |
How to work on openSUSE:Factory:ARM
The openSUSE Build Service hosts a shadow project of openSUSE:Factory which builds all sources for ARM architectures.
We use two binary architectures:
- armv5el which is a short name for armv5tel which uses soft floating point
- armv7l which is using hardware floating point (called armv7hl on some other distros)
Currently all packages are built on native hardware on the server. But you can still build it via qemu using osc. For that you need to build it against the qemu repository.
For example to fix the package hello run the following commands:
osc bco openSUSE:Factory hello cd home:<username>:branches:<branched base project name>/hello
Then fix the stuff, produce a test build, and submit it to the Build Service. NOTE: the local build works only on arm hardware or on x86_64 systems (using qemu-linux-user):
osc build --alternative-project=openSUSE:Factory:ARM qemu armv7l hello.spec osc vc # to comment your change to the end user osc ci # checkin your stuff osc sr # submit it to the devel project which will forward it to factory
Build Flags
GCC
GCC is configured with the following options:
armv5
../configure --prefix=/usr --infodir=/usr/share/info --mandir=/usr/share/man --libdir=/usr/lib64 --libexecdir=/usr/lib64 --enable-languages=c,c++ --enable-checking=release --with-gxx-include-dir=/usr/include/c++/4.7 --enable-ssp --disable-libssp --disable-libitm --disable-plugin --with-bugurl=http://bugs.opensuse.org/ --with-pkgversion='SUSE Linux' --disable-libgcj --disable-libmudflap --with-slibdir=/lib64 --with-system-zlib --enable-__cxa_atexit --enable-libstdcxx-allocator=new --disable-libstdcxx-pch --enable-version-specific-runtime-libs --enable-linker-build-id --with-build-sysroot=/ --with-sysroot=/usr/armv5tel-suse-linux-gnueabi --with-gxx-include-dir=/usr/armv5tel-suse-linux-gnueabi/usr/include/c++/4.7 --enable-linux-futex --with-build-time-tools=/usr/arm-suse-linux-gnueabi/bin --disable-nls --target=armv5tel-suse-linux-gnueabi --with-arch=armv5te --with-float=soft --with-mode=arm --with-abi=aapcs-linux --disable-sjlj-exceptions --build=x86_64-suse-linux
armv7
Only difference between Factory and 12.2 for armv7 is Factory use --with-mode=thumb whereas 12.2 does not (and use implicit --with-mode=arm).
../configure --prefix=/usr --infodir=/usr/share/info --mandir=/usr/share/man --libdir=/usr/lib64 --libexecdir=/usr/lib64 --enable-languages=c,c++ --enable-checking=release --with-gxx-include-dir=//usr/include/c++/4.7 --enable-ssp --disable-libssp --disable-libitm --disable-plugin --with-bugurl=http://bugs.opensuse.org/ --with-pkgversion='SUSE Linux' --disable-libgcj --disable-libmudflap --with-slibdir=/lib64 --with-system-zlib --enable-__cxa_atexit --enable-libstdcxx-allocator=new --disable-libstdcxx-pch --enable-version-specific-runtime-libs --enable-linker-build-id --with-sysroot=/ --enable-linux-futex --with-build-time-tools=/usr/arm-suse-linux-gnueabi/bin --disable-nls --target=armv7hl-suse-linux-gnueabi --with-arch=armv7-a --with-tune=cortex-a9 --with-float=hard --with-mode=thumb --with-abi=aapcs-linux --with-fpu=vfpv3-d16 --disable-sjlj-exceptions --build=x86_64-suse-linux
../configure --prefix=/usr --infodir=/usr/share/info --mandir=/usr/share/man --libdir=/usr/lib64 --libexecdir=/usr/lib64 --enable-languages=c,c++ --enable-checking=release --with-gxx-include-dir=/usr/include/c++/4.7 --enable-ssp --disable-libssp --disable-libitm --disable-plugin --with-bugurl=http://bugs.opensuse.org/ --with-pkgversion='SUSE Linux' --disable-libgcj --disable-libmudflap --with-slibdir=/lib64 --with-system-zlib --enable-__cxa_atexit --enable-libstdcxx-allocator=new --disable-libstdcxx-pch --enable-version-specific-runtime-libs --enable-linker-build-id --with-build-sysroot=/ --with-sysroot=/usr/armv7hl-suse-linux-gnueabi --with-gxx-include-dir=/usr/armv7hl-suse-linux-gnueabi/usr/include/c++/4.7 --enable-linux-futex --with-build-time-tools=/usr/arm-suse-linux-gnueabi/bin --disable-nls --target=armv7hl-suse-linux-gnueabi --with-arch=armv7-a --with-tune=cortex-a9 --with-float=hard --with-abi=aapcs-linux --with-fpu=vfpv3-d16 --disable-sjlj-exceptions --build=x86_64-suse-linux
RPM_OPT_FLAGS
Currently, we have the following value for RPM_OPT_FLAGS for openSUSE on ARM:
-fmessage-length=0 -O2 -Wall -D_FORTIFY_SOURCE=2 -fstack-protector -funwind-tables -fasynchronous-unwind-tables -g
Main Problems
- You must use osc, build and build-initvm from openSUSE 12.3 or the openSUSE:Tools project to get all required fixes.
To see what is not building, click on the monitor page. To fix a package, submit it to the standard openSUSE:Factory project because openSUSE:Factory:ARM links against it and uses all sources from there.
