Nell: Difference between revisions
(cjb week 1) |
|||
Line 64: | Line 64: | ||
=== Bring up Firefox (Mobile?) === |
=== Bring up Firefox (Mobile?) === |
||
cjb: https://nightly.mozilla.org/ has nightly builds of the desktop, Mobile-Android and Mobile-Linux (fennec) clients. |
cjb: https://nightly.mozilla.org/ has nightly builds of the desktop, Mobile-Android and Mobile-Linux (fennec) clients. |
||
The Fennec client for i686 works on my desktop at home, but the ARM download segfaults immediately on XO-1.75 |
The Fennec client for i686 works on my desktop at home, but the ARM download segfaults immediately on XO-1.75, because it's linked against maemo/libhildon. |
||
I first tried building on koji2, since the linking step needs about 2G RAM, but building armv7 binaries on an armv5 host isn't supported -- for example, configure will try to run conftest binaries it generates, and they'll fail with SIGILL. |
|||
Then I tried cross-compiling, but ran into a bunch of cases where system libraries were being linked to instead of host libraries. I don't think cross-compiling Firefox is well tested/supported. |
|||
Then I moved to native compiling on an XO, using 3G swap on a USB stick. The build takes several hours, but it eventually worked. Here is my mozconfig file: |
|||
<nowiki> |
|||
mk_add_options MOZ_OBJDIR=@TOPSRCDIR@/obj-arm |
|||
ac_add_options --enable-application=browser |
|||
#ac_add_options --enable-application=mobile |
|||
ac_add_options --disable-crashreporter |
|||
ac_add_options --disable-necko-wifi |
|||
ac_add_options --disable-tests |
|||
# You'd think defining the autoconf macros or the CFLAGS would work, but there are occasions |
|||
# where gcc's invoked outside of a normal shell profile. |
|||
ac_add_options --with-arch=armv7-a |
|||
ac_add_options --with-fpu=vfpv3-d16 |
|||
ac_add_options --with-float-abi=softfp |
|||
export CFLAGS="-march=armv7-a -mfpu=vfpv3-d16 -mfloat-abi=softfp" |
|||
export CXXFLAGS="-march=armv7-a -mfpu=vfpv3-d16 -mfloat-abi=softfp" |
|||
ac_add_options --with-arm-kuser |
|||
</nowiki> |
|||
I also needed this ugly patch, which I haven't fully investigated. Without it, there is an error linking to an undefined arm_private::neon_enabled. Our CPU does not support NEON. |
|||
<nowiki> |
|||
diff -r d0700bfeda63 xpcom/glue/arm.h |
|||
--- a/xpcom/glue/arm.h Mon Oct 03 18:08:17 2011 -0700 |
|||
+++ b/xpcom/glue/arm.h Wed Oct 05 12:53:53 2011 +0000 |
|||
@@ -170,7 +170,8 @@ |
|||
inline bool supports_neon() { return true; } |
|||
#elif defined(MOZILLA_MAY_SUPPORT_NEON) \ |
|||
&& defined(MOZILLA_ARM_HAVE_CPUID_DETECTION) |
|||
- inline bool supports_neon() { return arm_private::neon_enabled; } |
|||
+// inline bool supports_neon() { return arm_private::neon_enabled; } |
|||
+ inline bool supports_neon() { return false; } |
|||
#else |
|||
inline bool supports_neon() { return false; } |
|||
#endif |
|||
</nowiki> |
|||
After applying these, ''make -f client.mk'' produces a build, and ''make package'' in objdir produces a tarball of it. These are at: |
|||
http://dev.laptop.org/~cjb/firefox/fennec-10.0a1.en-US.linux-gnueabi-armv7l.tar.bz2 |
|||
http://dev.laptop.org/~cjb/firefox/firefox-10.0a1.en-US.linux-gnueabi-armv7l.tar.bz2 |
|||
=== Benchmark Firefox, gfx and js performance === |
=== Benchmark Firefox, gfx and js performance === |
Revision as of 16:59, 5 October 2011
Demo script, draft 1
1) First thing seen is a login screen, with pictures of all the avatars of the users of the machine. The kid, plus their siblings, parents, and alter-egos. We click on the 'new' button.
We then see a randomly generated avatar, in their "closet". You can swap out features and colors to make it look like you. (We don't ask you to type the name of your avatar yet, because we don't want to presume typing and literacy ability yet, but we could ask you to speak a name.)
When you exit the "closet" and achievement message pops up: you've customized your avatar! You might want to...
Exiting the closet also brought you to your "map". These are hex tiles with paths and "stuff". The map has a single tile, your "closet", and paths leading off in all directions but fading out. You choose a direction.
(You might also create a 'friend' who appears beside your avatar; you can switch between friends and maybe there are different tiles available. You might also add a friend from somewhere else...)
2) Touching the south tile, your character moves to it and a basic literacy app opens. Another achievement pops up, congratulating you on trying the alphabet book and suggesting you try to....
This book is a simple alphabet book. There are pictures of an Apple for A, etc. When you touch the apple, it says and shows its name. You can trace the A in the name, and it shows your traced version on top of the correct letter (and an achievement bubble pops up). There are pictures of other things, one of which also begins with A. When you touch the other thing which begins with A, you move on to B (and an achievement bubble pops up). There's a task bar marked "alphabet" which is gradually filling up. (This should perhaps be a shorter tinkerbook-style lesson, that you can actually finish in the brief demo.)
You back out of the literacy app, and you're back on the map. Your avatar suggests continuing through the new alphabet-ville tile to explore a newly available unexplored tile. You touch there and..
3) You're in "Castle TurtleArt". Your avatar suggests trying to draw a square. When you assemble the tiles to accomplish this, an achievement bubble pops up, and you're given another suggested task. After a few of these, you back and and find yourself on your map again.
4) This time you try going northeast. A sugar app opens. Southwest: wikipedia. Southeast: a web browser. Then you drag and rearrange your tiles to put wikipedia and the web browser near your home. You check out your stats, change your clothes, and check the list of new things to do. You can also flick to a journal to see the things you've worked on today.
Implementation plan
Weeks 1-2
Bring up Firefox (Mobile?)
cjb: https://nightly.mozilla.org/ has nightly builds of the desktop, Mobile-Android and Mobile-Linux (fennec) clients. The Fennec client for i686 works on my desktop at home, but the ARM download segfaults immediately on XO-1.75, because it's linked against maemo/libhildon.
I first tried building on koji2, since the linking step needs about 2G RAM, but building armv7 binaries on an armv5 host isn't supported -- for example, configure will try to run conftest binaries it generates, and they'll fail with SIGILL.
Then I tried cross-compiling, but ran into a bunch of cases where system libraries were being linked to instead of host libraries. I don't think cross-compiling Firefox is well tested/supported.
Then I moved to native compiling on an XO, using 3G swap on a USB stick. The build takes several hours, but it eventually worked. Here is my mozconfig file:
mk_add_options MOZ_OBJDIR=@TOPSRCDIR@/obj-arm ac_add_options --enable-application=browser #ac_add_options --enable-application=mobile ac_add_options --disable-crashreporter ac_add_options --disable-necko-wifi ac_add_options --disable-tests # You'd think defining the autoconf macros or the CFLAGS would work, but there are occasions # where gcc's invoked outside of a normal shell profile. ac_add_options --with-arch=armv7-a ac_add_options --with-fpu=vfpv3-d16 ac_add_options --with-float-abi=softfp export CFLAGS="-march=armv7-a -mfpu=vfpv3-d16 -mfloat-abi=softfp" export CXXFLAGS="-march=armv7-a -mfpu=vfpv3-d16 -mfloat-abi=softfp" ac_add_options --with-arm-kuser
I also needed this ugly patch, which I haven't fully investigated. Without it, there is an error linking to an undefined arm_private::neon_enabled. Our CPU does not support NEON.
diff -r d0700bfeda63 xpcom/glue/arm.h --- a/xpcom/glue/arm.h Mon Oct 03 18:08:17 2011 -0700 +++ b/xpcom/glue/arm.h Wed Oct 05 12:53:53 2011 +0000 @@ -170,7 +170,8 @@ inline bool supports_neon() { return true; } #elif defined(MOZILLA_MAY_SUPPORT_NEON) \ && defined(MOZILLA_ARM_HAVE_CPUID_DETECTION) - inline bool supports_neon() { return arm_private::neon_enabled; } +// inline bool supports_neon() { return arm_private::neon_enabled; } + inline bool supports_neon() { return false; } #else inline bool supports_neon() { return false; } #endif
After applying these, make -f client.mk produces a build, and make package in objdir produces a tarball of it. These are at: http://dev.laptop.org/~cjb/firefox/fennec-10.0a1.en-US.linux-gnueabi-armv7l.tar.bz2 http://dev.laptop.org/~cjb/firefox/firefox-10.0a1.en-US.linux-gnueabi-armv7l.tar.bz2
Benchmark Firefox, gfx and js performance
cjb:
Storyboarding
cscott:
App repository/launcher, start on JS framework
cscott: