Embedding/IPCLiteAPI BeagleBoard: Difference between revisions

From MozillaWiki
Jump to navigation Jump to search
No edit summary
(Linaro oneiric multiarch cross compile mozilla qt instructions)
Line 1: Line 1:
<pre>
<pre>
Download and install Latest Codesourcery toolchain from http://sourcery.mentor.com/public/gnu_toolchain/arm-none-linux-gnueabi/arm-2011.09-70-arm-none-linux-gnueabi.bin


wget http://rcn-ee.net/deb/rootfs/oneiric/ubuntu-11.10-r4-minimal-armel.tar.xz
# based on instructions from https://wiki.linaro.org/Platform/DevPlatform/CrossCompile/FirefoxCrossCompile
tar xJf ubuntu-11.10-r4-minimal-armel.tar.xz
# Prepare multiarch chroot
cd ubuntu-11.10-r4-minimal-armel


sudo mkdir /home/rootfs
sudo debootstrap --variant=buildd oneiric /home/oneiric
sudo cp armel-rootfs-*.tar /home/rootfs
sudo chroot /home/oneiric/
cd /home/rootfs
mount -t proc proc /proc
sudo tar -xf armel-rootfs-*.tar
apt-get update
apt-get install vim bash-completion


sudo /etc/init.d/scratchbox-core stop
sudo apt-get install qemu-arm-static # or qemu-user-static if debian
sudo cp /usr/bin/qemu-arm-static /home/rootfs/usr/bin


sudo cp /etc/apt/apt.conf /home/rootfs/etc/apt/
#Set up the /etc/apt/sources.list inside the chroot :
sudo cp /etc/resolv.conf /home/rootfs/et


sudo chroot /home/rootfs
echo "# use arch=amd64 if you have 32bit Linux install
deb [arch=i386] http://archive.ubuntu.com/ubuntu oneiric main universe
deb [arch=armel] http://ports.ubuntu.com/ubuntu-ports oneiric main universe
deb-src http://archive.ubuntu.com/ubuntu oneiric main universe" > /etc/apt/sources.list
 
#We need some packages not yet in oneiric, so we create /etc/apt/sources.list.d/linaro-maintainers.list
 
echo "deb http://ppa.launchpad.net/linaro-maintainers/overlay/ubuntu oneiric main
deb-src http://ppa.launchpad.net/linaro-maintainers/overlay/ubuntu oneiric main
deb http://ppa.launchpad.net/linaro-maintainers/staging-overlay/ubuntu oneiric main
deb-src http://ppa.launchpad.net/linaro-maintainers/staging-overlay/ubuntu oneiric main
" > /etc/apt/sources.list.d/linaro-maintainers.list
 
#Enable multiarch for dpkg in in /etc/dpkg/dpkg.cfg.d/multiarch
 
echo "foreign-architecture armel" > /etc/dpkg/dpkg.cfg.d/multiarch
#In /etc/apt/apt.conf.d/10local disable installing recommends:
 
echo 'APT::Install-Recommends "0";
APT::Install-Suggests "0";' > /etc/apt/apt.conf.d/10local
 
# Install toolchain and essentials


Inside chroot:
apt-get install vim libqt4-dev bash-completion
echo "deb-src http://ports.ubuntu.com/ubuntu-ports/ oneiric main universe multiverse" >> /etc/apt/sources.list
apt-get update
apt-get update
apt-get build-dep firefox
apt-get install g++-arm-linux-gnueabi build-essential pkg-config unzip zip autoconf2.13 libglib2.0-dev
 
# Install main Mozilla Qt port dependencies
apt-get install libqt4-dev:armel libqt4-opengl-dev:armel libpango1.0-dev:armel libdbus-glib-1-dev:armel libasound2-dev:armel libxt-dev:armel mesa-common-dev:armel
 
# XXX Minor trick in order to get host version of qt moc/rcc
# install host qt-dev version, and backup moc/rcc/uic
apt-get install libqt4-dev
cp /usr/bin/moc-qt4 /tmp/
cp /usr/bin/rcc /tmp/
cp /usr/bin/uic-qt4 /tmp/


sed 's%invoke-rc.d dbus start || exit $?%echo "Fake Start"%' -i /var/lib/dpkg/info/dbus.postinst
# install armel version back
apt-get -f install
apt-get install libqt4-dev:armel libqt4-opengl-dev:armel


sed "s% /lib/arm-linux-gnueabi% /home/rootfs/lib/arm-linux-gnueabi%g" -i /usr/lib/arm-linux-gnueabi/libc.so
# and replace arm version of moc/uic/rcc
sed "s% /usr/lib/arm-linux-gnueabi% /home/rootfs/usr/lib/arm-linux-gnueabi%g" -i /usr/lib/arm-linux-gnueabi/libc.so
cp /tmp/moc-qt4 /usr/bin/moc-qt4
sed "s% /lib/arm-linux-gnueabi% /home/rootfs/lib/arm-linux-gnueabi%g" -i /usr/lib/arm-linux-gnueabi/libpthread.so
cp /tmp/rcc /usr/bin/rcc
sed "s% /usr/lib/arm-linux-gnueabi% /home/rootfs/usr/lib/arm-linux-gnueabi%g" -i /usr/lib/arm-linux-gnueabi/libpthread.so
cp /tmp/uic-qt4 /usr/bin/uic-qt4


# Clone mozilla repository + patch queue (for IPC Embedding), better to create some folder like /build


Outside chroot:
mkdir /build
cat > ~/bin/fix_links.pl
cd /build
#!/usr/bin/perl -w
hg clone http://hg.mozilla.org/users/romaxa_gmail.com/mozilla_ipcembed
cd mozilla_ipcembed
hg clone http://hg.mozilla.org/users/romaxa_gmail.com/embedipc_queue .hg/patches
hg update -C embedipc
hg qpush -a


my $rootfsPath = "/home/rootfs";
# Create mozconfig
my $links = `ls -l`;
vi mozconfig.cross.oneiric
while ($links=~/^(.*)$/gm)
# and copy this content
{
#***********************************
  my $link = $1;
export PKG_CONFIG=arm-linux-gnueabi-pkg-config
  if ($link=~/\s+(lib.*)\s+\-\>\s+(.*)/) {
export CROSS_COMPILE=1
    my $fname = $1;
export CC=arm-linux-gnueabi-gcc
    my $targetname = $2;
export CXX=arm-linux-gnueabi-g++
    my $resval = system("test -f $targetname");
export STRIP=arm-linux-gnueabi-strip
    if ($resval != 0) {
export CPPFLAGS=-I/usr/include
      print $fname.":".$rootfsPath."/".$targetname." - $resval\n";
      unlink($fname);
      symlink($rootfsPath."/".$targetname, $fname);
    }
  }
}


export HOST_CC=gcc
export HOST_CFLAGS="-g `pkg-config --cflags glib-2.0` -L/usr/lib/i386-linux-gnu"
export HOST_CXX=g++
export HOST_CXXFLAGS=-g
export CFLAGS=-g
export CXXFLAGS=-g
export FFLAGS="-g -O2"
FIX_LINK_LDFLAGS="-L/usr/lib/arm-linux-gnueabi -Wl,-rpath-link=/usr/lib/arm-linux-gnueabi -L/lib/arm-linux-gnueabi -Wl,-rpath-link=/lib/arm-linux-gnueabi -L/usr/lib/arm-linux-gnueabi/mesa-egl -Wl,-rpath-link=/usr/lib/arm-linux-gnueabi/mesa-egl"
export LDFLAGS="$FIX_LINK_LDFLAGS"
LDFLAGS="$FIX_LINK_LDFLAGS"


ac_add_options --build=i686-linux-gnu
ac_add_options --host=arm-linux-gnueabi
ac_add_options --prefix=/usr
ac_add_options --enable-application=mobile
ac_add_options --enable-update-channel=nightly
ac_add_options --enable-update-packaging
ac_add_options --enable-tests
ac_add_options --enable-default-toolkit=cairo-qt
ac_add_options --enable-mobile-optimize
ac_add_options --disable-necko-wifi
ac_add_options --with-x


CTRL+D
mk_add_options CPPFLAGS=-I/usr/include
mk_add_options LDFLAGS="$FIX_LINK_LDFLAGS"


fix fix_links.pl script
ac_add_options --enable-cpp-rtti


chmod a+x ~/bin/fix_links.pl
export MOZ_DEBUG_SYMBOLS=1
cd /home/rootfs/usr/lib/arm-linux-gnueabi/
ac_add_options --enable-debug-symbols="-gdwarf-2"
sudo ~/bin/fix_links.pl
export MOZILLA_OFFICIAL=1
cd ..
mk_add_options PROFILE_GEN_SCRIPT=@TOPSRCDIR@/build/profile_pageloader.pl
sudo ~/bin/fix_links.pl


extract GFX_4_03_00_02_libs.tar.gz  into /home/rootfs/root/sgx
ac_add_options --enable-optimize
inside chroot:
mk_add_options MOZ_MAKE_FLAGS="-j4"
cd /root/sgx
mk_add_options MOZ_OBJDIR="@TOPSRCDIR@/obj-build-linaro"
tar -zxvf GFX_4_03_00_02_libs.tar.gz
ac_add_options --with-arm-kuser
./install-SGX.sh
ac_add_options --with-thumb=toolchain-default
ac_add_options --with-float-abi=toolchain-default
ac_add_options --with-system-zlib
ac_add_options --enable-force-egl


Outside of chroot:
#ac_add_options --enable-debug
#ac_add_options --enable-logging
#***********************************


Folow instructions from: https://wiki.mozilla.org/Embedding/IPCLiteAPI#Build_instructions:
MOZCONFIG=$(pwd)/mozconfig.linaro make -f client.mk build_all
using mozconfig.beagle_ubuntu_cross  config


</pre>
</pre>

Revision as of 09:58, 10 February 2012


# based on instructions from https://wiki.linaro.org/Platform/DevPlatform/CrossCompile/FirefoxCrossCompile
# Prepare multiarch chroot

sudo debootstrap --variant=buildd oneiric /home/oneiric
sudo chroot /home/oneiric/
mount -t proc proc /proc
apt-get update
apt-get install vim bash-completion


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

echo "# use arch=amd64 if you have 32bit Linux install
deb [arch=i386] http://archive.ubuntu.com/ubuntu oneiric main universe
deb [arch=armel] http://ports.ubuntu.com/ubuntu-ports oneiric main universe
deb-src http://archive.ubuntu.com/ubuntu oneiric main universe" > /etc/apt/sources.list

#We need some packages not yet in oneiric, so we create /etc/apt/sources.list.d/linaro-maintainers.list

echo "deb http://ppa.launchpad.net/linaro-maintainers/overlay/ubuntu oneiric main
deb-src http://ppa.launchpad.net/linaro-maintainers/overlay/ubuntu oneiric main
deb http://ppa.launchpad.net/linaro-maintainers/staging-overlay/ubuntu oneiric main
deb-src http://ppa.launchpad.net/linaro-maintainers/staging-overlay/ubuntu oneiric main
" > /etc/apt/sources.list.d/linaro-maintainers.list

#Enable multiarch for dpkg in in /etc/dpkg/dpkg.cfg.d/multiarch 

echo "foreign-architecture armel" > /etc/dpkg/dpkg.cfg.d/multiarch
 
#In /etc/apt/apt.conf.d/10local disable installing recommends:

echo 'APT::Install-Recommends "0";
APT::Install-Suggests "0";' > /etc/apt/apt.conf.d/10local

# Install toolchain and essentials 

apt-get update
apt-get install g++-arm-linux-gnueabi build-essential pkg-config unzip zip autoconf2.13 libglib2.0-dev 

# Install main Mozilla Qt port dependencies
apt-get install libqt4-dev:armel libqt4-opengl-dev:armel libpango1.0-dev:armel libdbus-glib-1-dev:armel libasound2-dev:armel libxt-dev:armel mesa-common-dev:armel

# XXX Minor trick in order to get host version of qt moc/rcc
# install host qt-dev version, and backup moc/rcc/uic
apt-get install libqt4-dev
cp /usr/bin/moc-qt4 /tmp/
cp /usr/bin/rcc /tmp/
cp /usr/bin/uic-qt4 /tmp/

# install armel version back
apt-get install libqt4-dev:armel libqt4-opengl-dev:armel

# and replace arm version of moc/uic/rcc
cp /tmp/moc-qt4 /usr/bin/moc-qt4
cp /tmp/rcc /usr/bin/rcc
cp /tmp/uic-qt4 /usr/bin/uic-qt4

# Clone mozilla repository + patch queue (for IPC Embedding), better to create some folder like /build

mkdir /build
cd /build
hg clone http://hg.mozilla.org/users/romaxa_gmail.com/mozilla_ipcembed
cd mozilla_ipcembed
hg clone http://hg.mozilla.org/users/romaxa_gmail.com/embedipc_queue .hg/patches
hg update -C embedipc
hg qpush -a

# Create mozconfig
vi mozconfig.cross.oneiric
# and copy this content
#***********************************
export PKG_CONFIG=arm-linux-gnueabi-pkg-config
export CROSS_COMPILE=1
export CC=arm-linux-gnueabi-gcc
export CXX=arm-linux-gnueabi-g++
export STRIP=arm-linux-gnueabi-strip
export CPPFLAGS=-I/usr/include

export HOST_CC=gcc
export HOST_CFLAGS="-g `pkg-config --cflags glib-2.0` -L/usr/lib/i386-linux-gnu"
export HOST_CXX=g++
export HOST_CXXFLAGS=-g
export CFLAGS=-g
export CXXFLAGS=-g
export FFLAGS="-g -O2"
FIX_LINK_LDFLAGS="-L/usr/lib/arm-linux-gnueabi -Wl,-rpath-link=/usr/lib/arm-linux-gnueabi -L/lib/arm-linux-gnueabi -Wl,-rpath-link=/lib/arm-linux-gnueabi -L/usr/lib/arm-linux-gnueabi/mesa-egl -Wl,-rpath-link=/usr/lib/arm-linux-gnueabi/mesa-egl"
export LDFLAGS="$FIX_LINK_LDFLAGS"
LDFLAGS="$FIX_LINK_LDFLAGS"

ac_add_options --build=i686-linux-gnu
ac_add_options --host=arm-linux-gnueabi
ac_add_options --prefix=/usr
ac_add_options --enable-application=mobile
ac_add_options --enable-update-channel=nightly
ac_add_options --enable-update-packaging
ac_add_options --enable-tests
ac_add_options --enable-default-toolkit=cairo-qt
ac_add_options --enable-mobile-optimize
ac_add_options --disable-necko-wifi
ac_add_options --with-x

mk_add_options CPPFLAGS=-I/usr/include
mk_add_options LDFLAGS="$FIX_LINK_LDFLAGS"

ac_add_options --enable-cpp-rtti

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

ac_add_options --enable-optimize
mk_add_options MOZ_MAKE_FLAGS="-j4"
mk_add_options MOZ_OBJDIR="@TOPSRCDIR@/obj-build-linaro"
ac_add_options --with-arm-kuser
ac_add_options --with-thumb=toolchain-default
ac_add_options --with-float-abi=toolchain-default
ac_add_options --with-system-zlib
ac_add_options --enable-force-egl

#ac_add_options --enable-debug
#ac_add_options --enable-logging
#***********************************

MOZCONFIG=$(pwd)/mozconfig.linaro make -f client.mk build_all