Mobile/Fennec/RaspberryPi: Difference between revisions
Jump to navigation
Jump to search
(22 intermediate revisions by 2 users not shown) | |||
Line 1: | Line 1: | ||
= Build | = Build Qt Mozilla for Raspberry Pi = | ||
== | == Build crosstool-ng toolchain == | ||
Install crosstool-ng using this tutorial: | |||
http://www.bootc.net/archives/2012/05/26/how-to-build-a-cross-compiler-for-your-raspberry-pi | |||
In addition to step 13. enable C++<br/> | |||
And choose compiler linaro-4.7-2013.01<br/> | |||
Tested crosstool-ng config available here:<br/> | |||
http://romaxa.info/raspberrypi/rasp-armhf-whz-4.7-config<br/> | |||
== Prepare target wheezy armhf chroot == | |||
==== Download raspbian public key from root ==== | |||
<pre> | <pre> | ||
sudo apt-get install | sudo su | ||
export CHROOTPATH=$HOME/ | wget http://archive.raspbian.org/raspbian.public.key;apt-key add raspbian.public.key | ||
export CHROOTPREFIX= | CTRL^D | ||
sudo debootstrap --arch= | |||
sudo apt-get install qemu-user-static | |||
</pre> | |||
==== Debootstrap wheezy chroot ==== | |||
<pre> | |||
export CHROOTPATH=$HOME/wheezy-armhf | |||
export CHROOTPREFIX=whrp | |||
mkdir -p $CHROOTPATH/usr/bin | |||
cp -rf /usr/bin/qemu-arm-static $CHROOTPATH/usr/bin | |||
sudo debootstrap --verbose --arch=armhf --keyring /etc/apt/trusted.gpg --include=apt wheezy $CHROOTPATH http://archive.raspbian.org/raspbian | |||
sudo cp /usr/bin/qemu-arm-static $CHROOTPATH/usr/bin/ | |||
sudo cp -f /etc/apt/apt.conf $CHROOTPATH/etc/apt/ | sudo cp -f /etc/apt/apt.conf $CHROOTPATH/etc/apt/ | ||
sudo cp -f /etc/apt/apt.conf.d/* $CHROOTPATH/etc/apt/apt.conf.d/ | sudo cp -f /etc/apt/apt.conf.d/* $CHROOTPATH/etc/apt/apt.conf.d/ | ||
Line 14: | Line 39: | ||
</pre> | </pre> | ||
==== | ==== Install required packages inside chroot ==== | ||
<pre> | <pre> | ||
sudo chroot $CHROOTPATH adduser | sudo chroot $CHROOTPATH apt-get update | ||
sudo chroot $CHROOTPATH apt-get install -y --force-yes sudo adduser python2.7 bash-completion | |||
</pre> | </pre> | ||
==== make chroot alias ==== | ==== make chroot alias ==== | ||
<pre> | <pre> | ||
echo "alias o"$CHROOTPREFIX"chroot='sudo chroot $CHROOTPATH su - | echo "alias o"$CHROOTPREFIX"chroot='sudo chroot $CHROOTPATH su - '" >> ~/.bashrc | ||
. ~/.bashrc | . ~/.bashrc | ||
</pre> | </pre> | ||
==== Make chroot shell different from host ==== | ==== Make chroot shell different from host ==== | ||
<pre> | <pre> | ||
echo "PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]-"$CHROOTPREFIX":\[\033[01;34m\]\w\[\033[00m\]\$ '" >> $CHROOTPATH/ | echo "PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]-"$CHROOTPREFIX":\[\033[01;34m\]\w\[\033[00m\]\$ '" >> $CHROOTPATH/root/.bashrc | ||
</pre> | </pre> | ||
==== Make sure that proc mounted in order to avoid some warnings ==== | ==== Make sure that proc mounted in order to avoid some warnings ==== | ||
<pre> | <pre> | ||
echo "sudo mount -t proc proc /proc" >> $CHROOTPATH/ | echo "sudo mount -t proc proc /proc" >> $CHROOTPATH/root/.bashrc | ||
</pre> | </pre> | ||
Line 52: | Line 72: | ||
. /etc/bash_completion | . /etc/bash_completion | ||
fi | fi | ||
" >> $CHROOTPATH/ | " >> $CHROOTPATH/root/.bashrc | ||
</pre> | </pre> | ||
== Setup Scratchbox 2 around installed toolchain and dev rootfs == | |||
<pre> | <pre> | ||
# Install sbox2 with: | |||
sudo | |||
sudo apt-get install scratchbox2 | |||
# or use these instructions: | |||
# http://russelldavis.org/2011/09/07/setting-up-scratchbox2-from-scratch-for-the-raspberry-pi/ | |||
# also small hack around: error "Never use <bits/predefs.h> directly; include <stdc-predef.h> instead." | |||
sudo cp /opt/cross/x-tools/arm-unknown-linux-gnueabi/arm-unknown-linux-gnueabi/sysroot/usr/include/features.h $CHROOTPATH/usr/include | |||
</pre> | </pre> | ||
==== | ==== Initialize sb2 config ==== | ||
<pre> | <pre> | ||
cd $CHROOTPATH | |||
sb2-init Raspi /opt/cross/x-tools/arm-unknown-linux-gnueabi/bin/arm-unknown-linux-gnueabi-gcc | |||
sb2-config -d Raspi | |||
</pre> | </pre> | ||
== | = Build Qt-Mozilla inside chroot = | ||
==== Install | ==== Install Qt dev packages to Dev rootfs ==== | ||
<pre> | <pre> | ||
sudo apt-get | # Core dependencies (--enable-default-toolkit=linuxgl) | ||
sudo apt-get install | sudo chroot $CHROOTPATH apt-get install -y --force-yes libpango1.0-dev libasound-dev libfreetype6-dev libffi-dev | ||
# Qt dependencies (--enable-default-toolkit=cairo-qt) | |||
sudo chroot $CHROOTPATH apt-get install -y --force-yes libqt4-dev libqt4-opengl-dev libxt-dev libx11-dev libxext-dev | |||
# Gtk dependencies (--enable-default-toolkit=cairo-gtk2) | |||
sudo chroot $CHROOTPATH apt-get install -y --force-yes libgtk2.0-dev | |||
</pre> | </pre> | ||
==== | ==== Clone Mozilla-Central and build==== | ||
<pre> | <pre> | ||
mkdir ~/build && cd ~/build | |||
hg clone http://hg.mozilla.org/mozilla-central | |||
cd mozilla-central | |||
# Apply configure hacks for crosstool-ng toolchain problems, probably could be fixed with better configuration of cross-toolchain | |||
hg qimport -P http://pastebin.mozilla.org/?dl=2137908 | |||
= | cat > mozconfig.rsppi | ||
##################################################################### | |||
export PKG_CONFIG_PATH=/usr/lib/arm-linux-gnueabihf/pkgconfig | |||
export CPPFLAGS="-I/usr/include/arm-linux-gnueabihf" | |||
export CFLAGS="-I/usr/include/arm-linux-gnueabihf" | |||
mk_add_options CPPFLAGS=$CPPFLAGS | |||
mk_add_options CFLAGS=$CFLAGS | |||
FIX_LINK_LDFLAGS="-L/usr/arm-linux-gnueabihf/lib -Wl,-rpath-link=/usr/arm-linux-gnueabihf/lib -L/lib/arm-linux-gnueabihf -Wl,-rpath-link=/lib/arm-linux-gnueabihf" | |||
FIX_LINK_LDFLAGS="$FIX_LINK_LDFLAGS -L/usr/lib/arm-linux-gnueabihf -Wl,-rpath-link=/usr/lib/arm-linux-gnueabihf" | |||
export LDFLAGS="$FIX_LINK_LDFLAGS" | |||
LDFLAGS="$FIX_LINK_LDFLAGS" | |||
export WRAP_LDFLAGS="$FIX_LINK_LDFLAGS" | |||
mk_add_options LDFLAGS="$FIX_LINK_LDFLAGS" | |||
= | export ac_cv_have_usable_wchar_option_v2="no" | ||
ac_add_options --enable-application=browser # or browser for desktop firefox build | |||
ac_add_options --disable-tests | |||
ac_add_options --disable-dbus | |||
ac_add_options --disable-accessibility | |||
ac_add_options --disable-webrtc | |||
ac_add_options --enable-logging | |||
ac_add_options --enable-default-toolkit=cairo-qt # or cairo-gtk2 | |||
ac_add_options --enable-mobile-optimize | |||
ac_add_options --enable-optimize | |||
ac_add_options --enable-system-ffi | |||
= | export MOZ_DEBUG_SYMBOLS=1 | ||
ac_add_options --enable-debug-symbols="-gdwarf-2" | |||
export MOZILLA_OFFICIAL=1 | |||
mk_add_options PROFILE_GEN_SCRIPT=@TOPSRCDIR@/build/profile_pageloader.pl | |||
=== | export CXXFLAGS="$CXXFLAGS -DFORCE_BASICTILEDTHEBESLAYER=1 -DEGL_HAS_BACKING_SURFACE=1 -DUSE_ANDROID_OMTC_HACKS=1 " | ||
ac_add_options --disable-elf-hack | |||
ac_add_options --enable-libjpeg-turbo | |||
ac_add_options --with-gl-provider=EGL | |||
mk_add_options MOZ_MAKE_FLAGS="-j4" | |||
mk_add_options MOZ_OBJDIR="@TOPSRCDIR@/objdir-arm-rasppi" | |||
ac_add_options --with-arm-kuser | |||
ac_add_options --with-thumb=toolchain-default | |||
ac_add_options --with-arch=armv6 | |||
ac_add_options --with-float-abi=hard | |||
ac_add_options --with-thumb=no | |||
ac_add_options --with-fpu=vfp | |||
ac_add_options --with-arm-kuser | |||
##################################################################### | |||
# Finally build | # Finally build | ||
MOZCONFIG=$(pwd)/mozconfig make -f client.mk build_all | # switch to sb2 environment | ||
sb2 | |||
{ | |||
MOZCONFIG=$(pwd)/mozconfig.rsppi make -f client.mk build_all | |||
} | |||
</pre> | </pre> | ||
[[/mozconfig2|Alternate mozconfig]] |
Latest revision as of 21:45, 23 March 2013
Build Qt Mozilla for Raspberry Pi
Build crosstool-ng toolchain
Install crosstool-ng using this tutorial: http://www.bootc.net/archives/2012/05/26/how-to-build-a-cross-compiler-for-your-raspberry-pi
In addition to step 13. enable C++
And choose compiler linaro-4.7-2013.01
Tested crosstool-ng config available here:
http://romaxa.info/raspberrypi/rasp-armhf-whz-4.7-config
Prepare target wheezy armhf chroot
Download raspbian public key from root
sudo su wget http://archive.raspbian.org/raspbian.public.key;apt-key add raspbian.public.key CTRL^D sudo apt-get install qemu-user-static
Debootstrap wheezy chroot
export CHROOTPATH=$HOME/wheezy-armhf export CHROOTPREFIX=whrp mkdir -p $CHROOTPATH/usr/bin cp -rf /usr/bin/qemu-arm-static $CHROOTPATH/usr/bin sudo debootstrap --verbose --arch=armhf --keyring /etc/apt/trusted.gpg --include=apt wheezy $CHROOTPATH http://archive.raspbian.org/raspbian sudo cp /usr/bin/qemu-arm-static $CHROOTPATH/usr/bin/ sudo cp -f /etc/apt/apt.conf $CHROOTPATH/etc/apt/ sudo cp -f /etc/apt/apt.conf.d/* $CHROOTPATH/etc/apt/apt.conf.d/ sudo cp -f /etc/resolv.conf $CHROOTPATH/etc/ sudo cp -f /etc/hosts $CHROOTPATH/etc/
Install required packages inside chroot
sudo chroot $CHROOTPATH apt-get update sudo chroot $CHROOTPATH apt-get install -y --force-yes sudo adduser python2.7 bash-completion
make chroot alias
echo "alias o"$CHROOTPREFIX"chroot='sudo chroot $CHROOTPATH su - '" >> ~/.bashrc . ~/.bashrc
Make chroot shell different from host
echo "PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]-"$CHROOTPREFIX":\[\033[01;34m\]\w\[\033[00m\]\$ '" >> $CHROOTPATH/root/.bashrc
Make sure that proc mounted in order to avoid some warnings
echo "sudo mount -t proc proc /proc" >> $CHROOTPATH/root/.bashrc
fix undefined locale warnings, and enable bash completion
echo " export LANGUAGE=C export LC_ALL=C export LANG=C if [ -f /etc/bash_completion ]; then . /etc/bash_completion fi " >> $CHROOTPATH/root/.bashrc
Setup Scratchbox 2 around installed toolchain and dev rootfs
# Install sbox2 with: sudo apt-get install scratchbox2 # or use these instructions: # http://russelldavis.org/2011/09/07/setting-up-scratchbox2-from-scratch-for-the-raspberry-pi/ # also small hack around: error "Never use <bits/predefs.h> directly; include <stdc-predef.h> instead." sudo cp /opt/cross/x-tools/arm-unknown-linux-gnueabi/arm-unknown-linux-gnueabi/sysroot/usr/include/features.h $CHROOTPATH/usr/include
Initialize sb2 config
cd $CHROOTPATH sb2-init Raspi /opt/cross/x-tools/arm-unknown-linux-gnueabi/bin/arm-unknown-linux-gnueabi-gcc sb2-config -d Raspi
Build Qt-Mozilla inside chroot
Install Qt dev packages to Dev rootfs
# Core dependencies (--enable-default-toolkit=linuxgl) sudo chroot $CHROOTPATH apt-get install -y --force-yes libpango1.0-dev libasound-dev libfreetype6-dev libffi-dev # Qt dependencies (--enable-default-toolkit=cairo-qt) sudo chroot $CHROOTPATH apt-get install -y --force-yes libqt4-dev libqt4-opengl-dev libxt-dev libx11-dev libxext-dev # Gtk dependencies (--enable-default-toolkit=cairo-gtk2) sudo chroot $CHROOTPATH apt-get install -y --force-yes libgtk2.0-dev
Clone Mozilla-Central and build
mkdir ~/build && cd ~/build hg clone http://hg.mozilla.org/mozilla-central cd mozilla-central # Apply configure hacks for crosstool-ng toolchain problems, probably could be fixed with better configuration of cross-toolchain hg qimport -P http://pastebin.mozilla.org/?dl=2137908 cat > mozconfig.rsppi ##################################################################### export PKG_CONFIG_PATH=/usr/lib/arm-linux-gnueabihf/pkgconfig export CPPFLAGS="-I/usr/include/arm-linux-gnueabihf" export CFLAGS="-I/usr/include/arm-linux-gnueabihf" mk_add_options CPPFLAGS=$CPPFLAGS mk_add_options CFLAGS=$CFLAGS FIX_LINK_LDFLAGS="-L/usr/arm-linux-gnueabihf/lib -Wl,-rpath-link=/usr/arm-linux-gnueabihf/lib -L/lib/arm-linux-gnueabihf -Wl,-rpath-link=/lib/arm-linux-gnueabihf" FIX_LINK_LDFLAGS="$FIX_LINK_LDFLAGS -L/usr/lib/arm-linux-gnueabihf -Wl,-rpath-link=/usr/lib/arm-linux-gnueabihf" export LDFLAGS="$FIX_LINK_LDFLAGS" LDFLAGS="$FIX_LINK_LDFLAGS" export WRAP_LDFLAGS="$FIX_LINK_LDFLAGS" mk_add_options LDFLAGS="$FIX_LINK_LDFLAGS" export ac_cv_have_usable_wchar_option_v2="no" ac_add_options --enable-application=browser # or browser for desktop firefox build ac_add_options --disable-tests ac_add_options --disable-dbus ac_add_options --disable-accessibility ac_add_options --disable-webrtc ac_add_options --enable-logging ac_add_options --enable-default-toolkit=cairo-qt # or cairo-gtk2 ac_add_options --enable-mobile-optimize ac_add_options --enable-optimize ac_add_options --enable-system-ffi export MOZ_DEBUG_SYMBOLS=1 ac_add_options --enable-debug-symbols="-gdwarf-2" export MOZILLA_OFFICIAL=1 mk_add_options PROFILE_GEN_SCRIPT=@TOPSRCDIR@/build/profile_pageloader.pl export CXXFLAGS="$CXXFLAGS -DFORCE_BASICTILEDTHEBESLAYER=1 -DEGL_HAS_BACKING_SURFACE=1 -DUSE_ANDROID_OMTC_HACKS=1 " ac_add_options --disable-elf-hack ac_add_options --enable-libjpeg-turbo ac_add_options --with-gl-provider=EGL mk_add_options MOZ_MAKE_FLAGS="-j4" mk_add_options MOZ_OBJDIR="@TOPSRCDIR@/objdir-arm-rasppi" ac_add_options --with-arm-kuser ac_add_options --with-thumb=toolchain-default ac_add_options --with-arch=armv6 ac_add_options --with-float-abi=hard ac_add_options --with-thumb=no ac_add_options --with-fpu=vfp ac_add_options --with-arm-kuser ##################################################################### # Finally build # switch to sb2 environment sb2 { MOZCONFIG=$(pwd)/mozconfig.rsppi make -f client.mk build_all }