Mobile/Fennec/RaspberryPi: Difference between revisions

From MozillaWiki
< Mobile‎ | Fennec
Jump to navigation Jump to search
No edit summary
Line 1: Line 1:
= Build Qt5 Mozilla for Raspberry Pi =
= Build Qt5 Mozilla for Raspberry Pi =


== Prepare multiarch chroot ==
== 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++
 
== Prepare target wheezy armhf chroot ==
 
==== Download raspbian public key from root ====
<pre>
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
 
</pre>
 
==== Debootstrap wheezy chroot ====


<pre>
<pre>
sudo apt-get install debootstrap
export CHROOTPATH=$HOME/wheezy-armhf
export CHROOTPATH=$HOME/squeezeRP
export CHROOTPREFIX=whrp
export CHROOTPREFIX=sqrp
sudo debootstrap --verbose --arch=armhf --keyring /etc/apt/trusted.gpg  --include=apt  wheezy $CHROOTPATH http://archive.raspbian.org/raspbian
sudo debootstrap --arch=i386 --variant=buildd squeeze $CHROOTPATH
 
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 34:
</pre>
</pre>


==== Better to make user inside chroot, same as your host user, with sudo permissions ====
==== Install required packages inside chroot ====
<pre>
 
sudo chroot $CHROOTPATH apt-get install -y --force-yes sudo adduser vim bash-completion
</pre>
==== Setup chroot sdk user, enter password and name ====
<pre>
sudo chroot $CHROOTPATH adduser `whoami`
</pre>
==== Setup sudo group ====
<pre>
<pre>
sudo chroot $CHROOTPATH adduser `whoami` sudo
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 - "`whoami`"'" >> ~/.bashrc
echo "alias o"$CHROOTPREFIX"chroot='sudo chroot $CHROOTPATH su - " >> ~/.bashrc
  . ~/.bashrc
  . ~/.bashrc
</pre>
</pre>
Line 35: Line 49:
==== 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/home/`whoami`/.bashrc
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/home/`whoami`/.bashrc
echo "sudo mount -t proc proc /proc" >> $CHROOTPATH/root/.bashrc
</pre>
</pre>


Line 52: Line 67:
   . /etc/bash_completion
   . /etc/bash_completion
fi
fi
" >> $CHROOTPATH/home/`whoami`/.bashrc
" >> $CHROOTPATH/root/.bashrc
</pre>
 
==== Setup non-passwd sudo, Make user sudo without password requests ====
 
<pre>
sudo echo `whoami`" ALL=(ALL)NOPASSWD: ALL" > $CHROOTPATH/tmp/user_full
sudo chmod 0440 $CHROOTPATH/tmp/user_full
sudo chown root: $CHROOTPATH/tmp/user_full
sudo chroot $CHROOTPATH mv /tmp/user_full /etc/sudoers.d/
</pre>
</pre>



Revision as of 08:31, 14 February 2013

Build Qt5 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++

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
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

Switch into chroot and perform basic setup

sudo chroot $CHROOTPATH su - "`whoami`"

Set up the /etc/apt/sources.list inside the chroot :

sudo su -c 'echo "# Squeeze cross sources list
deb http://backports.debian.org/debian-backports squeeze-backports main contrib non-free
deb http://www.emdebian.org/debian squeeze main
deb [arch=i386] http://ftp.fi.debian.org/debian/ squeeze main contrib non-free
deb [arch=armel] http://ftp.fi.debian.org/debian/ squeeze main contrib non-free
deb-src http://ftp.fi.debian.org/debian/ squeeze main contrib non-free
" > /etc/apt/sources.list'

In /etc/apt/apt.conf.d/10local disable installing recommends:

sudo su -c 'echo "APT::Install-Recommends \"0\";
APT::Install-Suggests \"0\";" > /etc/apt/apt.conf.d/10local'
sudo apt-get update

Install toolchain and essentials

sudo apt-get update
sudo apt-get install apt-utils xapt g++-4.4-arm-linux-gnueabi build-essential pkg-config unzip zip autoconf2.13 gdb-arm-linux-gnueabi -y --force-yes

Create cross arm pkg-config:

echo '#!/bin/sh
triplet=`basename $0 | sed -e "s:-pkg-config::"`
PKG_CONFIG_LIBDIR=/usr/${triplet}/lib/pkgconfig pkg-config $@
' > /tmp/arm-linux-gnueabi-pkg-config
sudo mv /tmp/arm-linux-gnueabi-pkg-config /usr/local/bin/arm-linux-gnueabi-pkg-config
sudo chmod a+x /usr/local/bin/arm-linux-gnueabi-pkg-config

Add some useful packages for development environment

sudo apt-get install automake libtool debhelper mercurial git-core openssh-client wget -y --force-yes

Setup mercurial config

echo "[ui]
username = UserName
[extensions]
hgext.mq =
hgext.color =
hgext.graphlog =
hgext.rebase =
" > ~/.hgrc

Build Qt5-Mozilla inside chroot

mkdir ~/build && cd ~/build

install pre-compiled Qt5 and GLES libraries into chroot SDK

wget http://romaxa.info/raspberrypi/qt5rmx.tar.gz
wget http://romaxa.info/raspberrypi/vc.tar.gz
sudo tar -zxvf qt5rmx.tar.gz -C /opt/
sudo tar -zxvf vc.tar.gz -C /opt/

Install common Mozilla build dependencies

sudo xapt -k -a armel libpango1.0-dev libasound-dev libfreetype6-dev

Fix pango dependencies pkg-config path

sudo ln -s /usr/arm-linux-gnueabi/share/pkgconfig/pthread-stubs.pc /usr/arm-linux-gnueabi/lib/pkgconfig/pthread-stubs.pc

Clone Mozilla-Central and build

hg clone http://hg.mozilla.org/mozilla-central
cd mozilla-central

# Qt5 No-X11 mozconfig
wget http://romaxa.info/raspberrypi/mozconfig

# Minimal build patch queue, (hope will be 0 soon)
hg clone http://hg.mozilla.org/users/romaxa_gmail.com/rmxmq .hg/patches
hg update -C raspberrypi -R .hg/patches
hg update -C `cat .hg/patches/changeset`
hg qpush -a

# Finally build
MOZCONFIG=$(pwd)/mozconfig make -f client.mk build_all