HowToMeegoFennecDraft: Difference between revisions

m
no edit summary
mNo edit summary
Line 1: Line 1:
== What this is About  ==
== What this is About  ==


This document explains "How to build Mobile Firefox for Meego Netbook Platform".
This document explains "How to build Mobile Firefox for Meego Netbook Platform".<br>  
 
<br>


== Versions  ==
== Versions  ==
Line 11: Line 9:
== Current State  ==
== Current State  ==


Configuration successful, Build successful. Run successful with flash support in software mode.
Configuration successful, Build successful. Run successful with flash support in software mode.  


== Known Issues  ==
== Known Issues  ==
=== Crash on Start ===
Issues with Mesa Drivers. Starting in EGL accelerated version does not work. Fennec is crashing with:


<pre>
=== Crash on Start  ===
Mesa 7.9 implementation error: glIndexPointer should be mapped to 336, not 314
 
Issues with Mesa Drivers. Starting in EGL accelerated version does not work. Fennec is crashing with:
<pre>Mesa 7.9 implementation error: glIndexPointer should be mapped to 336, not 314
Please report at bugzilla.freedesktop.org
Please report at bugzilla.freedesktop.org
Mesa 7.9 implementation error: glUniformMatrix4fv should be mapped to 337, not 485
Mesa 7.9 implementation error: glUniformMatrix4fv should be mapped to 337, not 485
Please report at bugzilla.freedesktop.org
Please report at bugzilla.freedesktop.org
</pre>
</pre>  
Solution: Disable hardware acceleration within mobile.js


Solution:
=== Multitouch  ===
Disable hardware acceleration within mobile.js


=== Multitouch ===
Multitouch is not working in meego.com release TBI  
Multitouch is not working in meego.com release TBI


=== Flash Renderspeed ===
=== Flash Renderspeed ===
For some people the Renderspeed with native is really slow, it seems to get better when using this for starting fennec:


<pre> MOZ_QT_GRAPHICSSYSTEM=meego ./fennec -graphicssystem meego </pre>
For some people the Renderspeed with native is really slow, it seems to get better when using this for starting fennec:
<pre> MOZ_QT_GRAPHICSSYSTEM=meego ./fennec -graphicssystem meego </pre>  
== Setup your Netbook  ==


== Setup your Netbook ==
I use a Lenovo Ideapad S10-3t supporting multitouch. This is the recommended target device of Intel. [http://meego.com/devices/netbook/installing-meego-your-netbook Follow Instructions]  
I use a Lenovo Ideapad S10-3t supporting multitouch. This is the recommended target device of Intel.
[http://meego.com/devices/netbook/installing-meego-your-netbook Follow Instructions]
== Steps  ==


#Get MeegoSDK<br>Follow the steps from the [http://wiki.meego.com/SDK/Docs/1.1/Getting_started_with_the_MeeGo_SDK_for_Linux official Meego Website]. '''Stop at the point "Install MeeGo Runtime"''', we will continue from this point on.&nbsp;<br>
== Presteps, Install the SDK on your System<br> ==
#Download and install the [http://wiki.meego.com/SDK/Docs/1.1/Configuring_QEMU_runtimes Runtime]<br><pre>sudo mad-admin create -f -e meego-netbook-ia32-qemu-1.1.20101031.2037-sda-runtime</pre> <br>
#Mount the SDK<br>It is important to know that it is not a good idea to use Qemu and the Meego SDK. This is because of:<br>a) In case Qemu crash once, you can not start it again, everything is gone.<br>b) Qemu is very slow on compiling<br>c) For mounting working directories into Qemu you need to use nfs which is possible but increase complexity<br>d) The Image Partitions for netbook and handset are just to small in order to hold the mozilla sources<br><br>Steps:<br>1. Create mount point on your HOST Storage wherever you like it best<br><pre>sudo mkdir ~/meegoSDK </pre> 2. Create a working directory on your HOST Storage whereever you like it best<br><pre>sudo mkdir ~/meegoWorkingDirectory</pre>3. Mount the SDK Image into your Host System<br><pre>sudo mount -o loop,offset=512 /usr/lib/madde/linux-i686/runtimes/meego-netbook-ia32-qemu-1.1.20101031.2037-sda-runtime/meego-netbook-ia32-qemu-1.1.20101031.2037-sda.raw ~/meegoSDK </pre>4. Create a mount point within the meegoSDK Directory<br><pre>sudo mkdir ~/meegoSDK/meegoWorkingDirectory</pre> 5. Bind Mount your external Working Directory into the SDK Working Directory<br><pre>sudo mount --bind ~/meegoWorkingDirectory ~/meegoSDK/meegoWorkingDirectory</pre>
#ChangeRoot into MeegoSDK<br>1. Copy the changeroot script from this page (see section "Scripts"<br> 2. Use this script by calling<br><pre>sudo sdk-changeroot ~/meegoSDK</pre>
#Download and install dependencies / needed packages<br><pre>zypper in python-devel docutils libidl-devel libcontentaction-devel alsa-lib-devel gst-plugins-base-devel libXext-devel git doxygen libXrender-devel freetype-devel fontconfig-devel glib2-static libXt-devel libffi-devel python sharutils bc quilt yasm zip wget</pre>
#Get and Compile Mercurial<br>MeegoSDK is missing Mercurial packages, we need to download, compile and install them by our own.<br><pre>cd /meegoWorkingDirectory</pre><pre>wget http://mercurial.selenic.com/release/mercurial-1.7.3.tar.gz </pre><pre>tar -xzf mercurial-1.7.3.tar.gz </pre> <pre>cd mercurial-1.7.3 </pre><pre>make install</pre> <pre>echo "[extensions] hgext.mq=" &gt;&gt; ~/.hgrc</pre>
#Get and Compile autoconf2.13<pre>wget http://ftp.gnu.org/gnu/autoconf/autoconf-2.13.tar.gz</pre><pre>tar -xvzf autoconf-2.13.tar.gz</pre><pre>cd autoconf-2.13/</pre><pre>./configure --program-suffix=2.13</pre><pre>make</pre><pre>sudo make install</pre>
#Get and Compile libresourceqt <pre>git clone git://gitorious.org/maemo-multimedia/libresourceqt.git</pre><pre>qmake</pre><pre>make</pre><pre>make install</pre>
#Get Xulrunner Sources from Meego Developer Preview Repository<br><pre>cd /meegoWorkingDirectory </pre><pre>hg clone http://hg.mozilla.org/mozilla-central</pre> <pre>cd mozilla-central</pre><pre>hg clone http://hg.mozilla.org/mobile-browser mobile</pre><pre>cd mobile/.hg</pre> Get patchsets <pre>hg clone http://hg.mozilla.org/users/romaxa_gmail.com/workbase_prc2 patches</pre> <pre>cd patches</pre> <pre>hg update -C mobile-browser</pre> <pre>cd ../../../.hg/</pre> <pre>hg clone http://hg.mozilla.org/users/romaxa_gmail.com/workbase_prc2 patches </pre><pre>cd ../</pre> Apply patches using mqueue <pre>hg qpush --all</pre> <pre>cd mobile</pre> <pre>hg qpush --all</pre><pre>cd ..</pre>
#Copy mozconfig from this page into the /meegoWorkingDirectory
#Compile<br>The checkout there is still debian based, this needs to be adjusted. For now it's good enough to use the mozconfig provided in the bottom of this page.<br><pre>mkdir ./build-tree</pre><pre>make -f client.mk build</pre>
#Package it<br><pre>cd build-tree/obj-qt-buildxulrunner/xulrunner</pre><br><pre>make package</pre>
#Copy it to your device<br>Find the fennec*tar* within your build-tree/obj-qt-buildxulrunner/xulrunner directory<pre>scp fennec-#####.en-US.linux-i686.tar.bz2 &lt;user&gt;@IPTOYOURMEEGONETBOOK:/home/&lt;user&gt;</pre><br>
#Extract it
#Run it


<br>
Add the package respository of the SDK to your system: [http://wiki.meego.com/SDK/Docs/1.1/Getting_started_with_the_MeeGo_SDK_for_Linux#Configuring_distributions_package_manager (see source for more)]<br>  


= Scripts<br> =
==== On Ubuntu or Debian ====


== The SDK-Change-Root-Script  ==
<!-- Replaced '#' with <li> so that multi-line <pre> statements would appear in a single block -->
<pre># Copyright 2010, Intel Inc.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; version 2 of the License.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Library General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.


# Authors:
#Add the following line to <code>/etc/apt/sources.list.d/meego-sdk.list</code>.<br> Replace ${distribution}/${version} with one of the following: "debian/5.0", "ubuntu/09.10", "ubuntu/10.04" or "ubuntu/10.10". <pre>deb http://repo.meego.com/MeeGo/sdk/host/repos/${distribution}/${version}/ / </pre>
# Haitao Feng &lt;haitao.feng@intel.com&gt;
#Add the repository public key: <pre>$ gpg --keyserver pgpkeys.mit.edu --recv 0BC7BEC479FC1F8A</pre><pre>$ gpg --export --armor 0BC7BEC479FC1F8A | sudo apt-key add -</pre>
# Jackie Wu &lt;jackie.wu@intel.com&gt;
#Update the packages database: <pre>$ sudo apt-get update</pre>
#To check that the MeeGo repository has been correctly added, run the following command. The details of the MADDE package should be printed. <pre>$ apt-cache policy madde</pre>


CHROOT_NAME=$0
*Install <pre>$ sudo apt-get install meego-sdk</pre>


usage()
==== On openSUSE  ====
{
echo Usage: "$CHROOT_NAME NEWROOT [COMMAND [ARG]...]"
echo " or: $CHROOT_NAME OPTION"
echo "Run COMMAND with root directory set to NEWROOT."
echo
echo " OPTIONS:"
echo " --help display this help and exit"
echo
echo "If no command is given, run ``${SHELL} -i''"
}


reference_increase()
*To add the MeeGo repository, run the following command. <br> Replace ${distribution}/${version} with one of the following values: "opensuse/11.2" or "opensuse/11.3". <pre>$ sudo zypper addrepo -f http://repo.meego.com/MeeGo/sdk/host/repos/${distribution}/${version}/meego-sdk.repo</pre>
{
if [ -f $1 ]; then
count=`cat $1`
if [ "X$count"&nbsp;!= "X" ]; then
count=`expr $count + 1`
echo $count &gt; $1
fi
fi
}


reference_decrease()
*Install <pre>$ sudo zypper install meego-sdk</pre>
{
if [ -f $1 ]; then
count=`cat $1`
if [ "X$count"&nbsp;!= "X" ] &amp;&amp; [ $count -gt 0 ]; then
count=`expr $count - 1`
echo $count &gt; $1
fi
fi
}


reference_print()
== Configure SDK  ==
{
if [ -f $1 ]; then
count=`cat $1`
if [ "X$count"&nbsp;!= "X" ]; then
echo "The reference count of [$1]: $count"
fi
fi
}


setup()
Download the mozilla-meego-assistant script from this website.
{
chroot=$1
# normal preparation for chroot
echo mount --bind /proc $chroot/proc
mount --bind /proc $chroot/proc
echo mount --bind /sys $chroot/sys
mount --bind /sys $chroot/sys
echo mount --bind /dev $chroot/dev
mount --bind /dev $chroot/dev
echo mount --bind /dev/pts $chroot/dev/pts
mount --bind /dev/pts $chroot/dev/pts


# preparation for X
#untar the tarball
# X sockets are at /tmp/.X11-unix
#<pre>sudo ./meego-assistant install</pre>
# echo mount --bind /tmp $chroot/tmp
# mount --bind /tmp $chroot/tmp


# preparation for dbus
== Steps  ==
# echo mount --bind /var/lib/dbus $chroot/var/lib/dbus
# mount --bind /var/lib/dbus $chroot/var/lib/dbus
# echo mount --bind /var/run/dbus $chroot/var/run/dbus
# mount --bind /var/run/dbus $chroot/var/run/dbus
 
# preparation for network
echo cp /etc/resolv.conf $chroot/etc/resolv.conf
cp /etc/resolv.conf $chroot/etc/resolv.conf
}
 
cleanup()
{
chroot=$1
#clean up processes using chroot
pid_set=$( ps ax | awk '{ print $1 }')
for pid in $pid_set
do
if [ -h /proc/$pid/root ]; then
ps=$( ls -l /proc/$pid/root 2&gt;/dev/null | grep $chroot)
if [ "X$ps"&nbsp;!= "X" ]; then
kill $pid
fi
fi
done
 
sleep 3
 
# umount directories
echo umount $chroot/proc
umount $chroot/proc
echo umount $chroot/sys
umount $chroot/sys
echo umount $chroot/dev/pts
umount $chroot/dev/pts
echo umount $chroot/dev
umount $chroot/dev
 
echo umount $chroot/tmp
umount $chroot/tmp
 
echo umount $chroot/var/lib/dbus
umount $chroot/var/lib/dbus
echo umount $chroot/var/run/dbus
umount $chroot/var/run/dbus
}
 
if test "x$1" = "x"
then
echo "$CHROOT_NAME: missing operand";
echo "Try '$CHROOT_NAME --help' for more information";
exit;
fi
 
if [ -e $1 ]; then
CHROOT=$(readlink -f $1)
if [ -e $CHROOT/proc ] &amp;&amp; [ -e $CHROOT/sys ] &amp;&amp; [ -e $CHROOT/dev ] &amp;&amp; [ -e $CHROOT/dev/pts ]; then
chroot_reference_count=`echo $CHROOT | sed 's/\//_/g'`
chroot_reference_count=/tmp/meego_chroot$chroot_reference_count.ref_count
chroot_mount=$( mount | grep $CHROOT/proc )
if [ "X$chroot_mount" = "X" ]; then
touch $chroot_reference_count
echo 0 &gt; $chroot_reference_count
reference_increase $chroot_reference_count


setup $CHROOT
#<pre>sudo ./meego-assistant login</pre>On first start this actually does the final configuration of the Image. Like downloading basic build dependencies, installing mercurial and autoconf2.13.
else
#Get Mozilla Sources and apply Meego Developer Patches on it<br>
if [ "x$2"&nbsp;!= "x" ]; then
if [ $2 = "force-clean" ]; then
echo "$CHROOT_NAME: clean up meego chroot $CHROOT"
cleanup $CHROOT
exit;
fi
fi
reference_increase $chroot_reference_count
fi


#patch from Graham Cobb, see bug #3156 for detail
<pre>cd /meegoWorkingDirectory
unset DBUS_SESSION_BUS_ADDRESS
hg clone http://hg.mozilla.org/mozilla-central cd mozilla-central hg clone http://hg.mozilla.org/mobile-browser mobile cd mobile/.hg hg clone http://hg.mozilla.org/users/romaxa_gmail.com/workbase_prc2 patches cd patches hg update -C mobile-browser cd ../../../.hg/ hg clone http://hg.mozilla.org/users/romaxa_gmail.com/workbase_prc2 patches cd ../ hg qpush --all cd mobile hg qpush --all cd .. wget [THIS&nbsp;MOZCONFIG] make -f client.mk build &lt;span style="font-family: sans-serif;" /&gt;
 
export HOME=/root
export PWD=/root
export CHROOTFROM=$CHROOT
export DISPLAY=:0.0
 
#perform the command in chroot
chroot $@
 
reference_decrease $chroot_reference_count
count=`cat $chroot_reference_count`
if [ "X$count"&nbsp;!= "X" ] &amp;&amp; [ $count -eq 0 ]; then
cleanup $CHROOT
else
echo "$CHROOT_NAME: warning: The housekeeping is not done. There might be other meego-chroot running."
fi
else
echo "$CHROOT_NAME: invalid meego chroot directory: $CHROOT";
exit;
fi
else
if [ $1 = "--help" ]; then
usage;
else
echo "$CHROOT_NAME: invalid meego chroot directory: $CHROOT";
echo "Try '$CHROOT_NAME --help' for more information";
fi
fi
</pre>
</pre>


== MOZCONFIG, i386 Build ==
MOZCONFIG, i386 Build  
<pre>
<pre>export LDFLAGS="-Wl,--no-keep-memory,-rpath-link,$PWD/dist/bin/:/usr/lib:/lib"
 
export LDFLAGS="-Wl,--no-keep-memory,-rpath-link,$PWD/dist/bin/:/usr/lib:/lib"
export LD_LIBRARY_PATH="/lib:/usr/lib:/usr/local/lib:/usr/X11R6/lib"
export LD_LIBRARY_PATH="/lib:/usr/lib:/usr/local/lib:/usr/X11R6/lib"


Line 262: Line 79:
mk_add_options MOZ_BUILD_PROJECTS="xulrunner mobile"
mk_add_options MOZ_BUILD_PROJECTS="xulrunner mobile"
mk_add_options AUTOCONF=autoconf2.13
mk_add_options AUTOCONF=autoconf2.13
mk_add_options MOZ_MAKE_FLAGS=-j5    
mk_add_options MOZ_MAKE_FLAGS=-j9    
   
   
# XULRunner options
# XULRunner options
Line 270: Line 87:
# Mobile options
# Mobile options
ac_add_app_options mobile --enable-application=mobile
ac_add_app_options mobile --enable-application=mobile
ac_add_app_options mobile --with-libxul-sdk=../xulrunner/dist


#Enable RTTI
#Enable RTTI
Line 304: Line 120:




mk_add_options MOZ_OBJDIR=./build-tree/obj-qt-buildxulrunner
mk_add_options MOZ_OBJDIR=./obj-qt-buildxulrunner
mk_add_options MOZ_MAKE_FLAGS=
</pre>
 
<br>
</pre>