[RFC] Qi Bootmenu

Marc Andre Tanner openmoko at brain-dump.org
Sat Oct 10 20:45:24 CEST 2009


On Sat, Oct 10, 2009 at 02:51:12AM +1100, Carsten Haitzler wrote:
> On Fri, 9 Oct 2009 17:14:30 +0200 Marc Andre Tanner <openmoko at brain-dump.org>
> said:
> 
> > On Sat, Oct 10, 2009 at 12:14:02AM +1100, Carsten Haitzler wrote:
> > > On Fri, 9 Oct 2009 13:00:12 +0200 Marc Andre Tanner
> > > <openmoko at brain-dump.org> said:
> > > > On Fri, Oct 09, 2009 at 02:35:14PM +1100, Carsten Haitzler wrote:
> > > > > On Thu, 8 Oct 2009 22:50:00 +0200 Marc Andre Tanner
> > > > > >  - GUI based on elementary with framebuffer support?
> > > > As a said this is without any optimization, no special compilation flags, 
> > > > nothing. I should try to link everything statically which has 2 main
> > > > advantages:
> > > 
> > > you will save very little with things like -Os. maybe 5-10%. on a good day.
> > > that ballpark.
> > 
> > Newer gcc's support whole build optimization that is you basically compile an
> > entire project with one gcc inovacation. It will use lots of memory at compile
> > time but because it has more knowledge about the whole project and how the 
> > different parts work together it can use more advanced optimization techniques
> > which should result in smaller/more efficient code. Anyway this is the theory
> > I will see how this works in practice. There are enough other things to
> > improve before I even want to start with this kind of thing. 
> 
> thats possible when making 1 executable. it's not possible to strip shared
> libraries of code "not used by apps" as these are completely separate builds,
> elements and more. example - evas will hve code for handling 8bit color
> displays. nothing will ever make gcc get rid of it ... unless you statially
> compile. even then it wont as evas runtime will chose conversion code based on
> screen configuration... which gcc doesnt know. this is why evas has so many
> --enable and --disable options for configure - uc an disable vast blobs of
> support for things you dont need - like 8 bit and 24/32, 15bit, 12bit and 18bit
> displays. look at configure --help for evas.

Yeah I have read that and evas README unfortunately I don't really know what is
needed and what not. I currently configure evas like this:

	--enable-fb \
	--disable-directfb \
	--disable-sdl \
	--enable-buffer	\
	--disable-evas-cserve \
	--disable-software-ddraw \
	--disable-software-qtopia \
	--disable-software-xlib	\
	--disable-software-16-x11 \
	--disable-software-xcb \
	--disable-gl-x11 \
	--disable-xrender-x11 \
	--disable-xrender-xcb \
	--disable-glitz-x11 \
	--enable-image-loader-eet \
	--disable-image-loader-edb \
	--disable-image-loader-gif \
	--disable-image-loader-png \
	--disable-image-loader-pmaps \
	--enable-image-loader-jpeg \
	--disable-image-loader-tiff \
	--disable-image-loader-xpm \
	--disable-image-loader-svg \
	--enable-cpu-c \
	--disable-evas-magic-debug \
	--disable-fontconfig \
	--enable-font-loader-eet \
	--disable-scale-sample \
	--enable-scale-smooth \
	--enable-convert-yuv \
	--enable-small-dither-mask \
	--disable-no-dither-mask \
	--disable-convert-8-rgb-332 \
	--disable-convert-8-rgb-666 \
	--disable-convert-8-rgb-232 \
	--disable-convert-8-rgb-222 \
	--disable-convert-8-rgb-221 \
	--disable-convert-8-rgb-121 \
	--disable-convert-8-rgb-111 \
	--enable-convert-16-rgb-565 \
	--disable-convert-16-rgb-555 \
	--disable-convert-16-rgb-444 \
	--disable-convert-16-rgb-ipq \
	--enable-convert-16-rgb-rot-0 \
	--enable-convert-16-rgb-rot-90 \
	--disable-convert-16-rgb-rot-180 \
	--enable-convert-16-rgb-rot-270 \
	--enable-convert-24-rgb-888 \
	--enable-convert-24-bgr-888 \
	--enable-convert-32-rgb-8888 \
	--enable-convert-32-rgbx-8888 \
	--enable-convert-32-bgr-8888 \
	--enable-convert-32-bgrx-8888 \
	--enable-convert-32-rgb-rot-0 \
	--enable-convert-32-rgb-rot-90 \
	--disable-convert-32-rgb-rot-180 \
	--enable-convert-32-rgb-rot-270 \
	--disable-doc \
	--without-x &&

Could I disable some more settings? Another thing which worries me a little is
that the dialog application segfaults in evas_object_color_set if evas is 
compiled with the folowing CFLAGS:

  -Os -pipe -march=armv4t -mtune=arm9tdmi

I disabled these for now. Have you an idea what the problem might be?
 
> > > >  - the linker should be able to remove any code paths which aren't
> > > > actually used.
> > > 
> > > not from share libraries. only if you statically compile with executables.
> > 
> > That's what I meant. I would statically compile my bootmenu app and just copy
> > that over to the rootfs.
> 
> then you wont need libevas etc. - it'd end up being a single binary.
> 
> > > >  - at runtime the dynamic linker doesn't have to load all the libraries 
> > > >    (less I/O + code relocation) which should speed up the application
> > > > start. 
> > > > 
> > > > > >    I am not familiar with the EFL code base but what I have seen
> > > > > >    so far seems like it isn't really optimized for size. So there
> > > > > > could be some potential although it would require some work and
> > > > > > upstream approval.
> > > > > > 
> > > > > >    Maybe the idea to use elementary is overkill but what are the 
> > > > > >    alternatives? 
> > > > > 
> > > > > i'll shime in here. yes. efl has grown over the years, and well - the
> > > > > more functionality you want, the more space it will take. if you are
> > > > > hell-bent on smallest size you possibly would just write your own fb
> > > > > gui that is very simple and ugly (with white/black boxes for example). 
> > > > 
> > > > I know that elf provides a lot of features and is rather small for what it
> > > > does (don't get me started on gtk or qt). But what suprised me for example
> > > > was that although I had compiled elementary with just the framebuffer
> > > > backend it nevertheless tried to use the X backend unless it was told to
> > > > not do so (with ELM_ENGINE=fb). So there apparently is code there which
> > > > strictly speaking doesn't has to be there.
> > > 
> > > x11 engine is the default. thats just how the code is. :) if its not
> > > coimpiled in you just get stubs trying to use the engine and returning 0
> > > saying they cant (ie nothing compiled in) you wont save more than a dozen
> > > or 2 bytes by trying to remove these stubs entirely. its not worth it.
> > 
> > Ok that's probably true, I was just arguing from the busybox mindset where a
> > few bytes are actually a worthwhile saving ;)
> 
> i am happy to spend bytes when it makes life simpler and easier in the bigger
> picture. :)
> 
> > > > Another thing is the lua/embryo thing. If I am not mistaken they
> > > > basically do the same thing so it should be possible to only use one of
> > > > the two. Lua was added recently and should become the default, right? So
> > > > embryo will go away in the long run, correct? But I guess it will be
> > > > needed for backwards compatibility anyway so in my opinion it should be
> > > > possible to disable lua at compile time.
> > > 
> > > there .. no. embryo is there because it is a default feature of edje. lua
> > > is as of recently also a default feature. it is required because all edje
> > > files are equally capable. i do not want an edje that "might not work with
> > > some edje files". it's not going to happen because as policy i want all
> > > edje files and themes to work the same everywhere. not fail or work
> > > stangely because someone happend to build without the support somewhere.
> > > thus you will need both. note. embryo is TINY. its runtime library is on
> > > the order of about 40kb. thats the footprint. the bits in edje that hook to
> > > it might be another 10kb of code at worst. lua is much bigger - but we are
> > > now using it because it saves us work and adds more power. it's not fully
> > > up and ready yet, but it will be. so you're getting both embryo and lua.
> > > one way or another.
> > > 
> > > (not embryo script is compiled to bytecode and put into the .edj files. its
> > > is VERY fast to execute. about 2x faster than java. it wil be many times
> > > faster than lua to execute the same logic, so as long as you want just
> > > simple logic - use embryo script. if u want to get more complex and
> > > imaginative.. then u want lua - so there is a very good reason to keep
> > > both. efficiency)
> > 
> > Again thanks for the clarification. I understand your point of view regarding
> > ejde files which should work everywhere to a certain degree. On the other
> > hand I think that the peoples who actually use lua could enable it on their
> > own, or there should at least be the possibility to disable it. Afterall
> > special environments like the one we are talking about here don't need it.
> 
> but that's not going to happen. :) not for edje. i dont want it becoming that
> where some feature may or may not work depending on how it was compiled. people
> will download themes, icons, wallpapers etc. and find they appear nothing like
> advertised, break, do bizarre things just because some feature was not compiled
> in. i dont intend to make it easy by making it optional. i highly discourage it
> being patched out.

Well you could enable it by default so people would have to explicitly disable
it. Add a big warning to configure/README, create a FAQ entry on the homepage 
etc. Or just plain refuse to support setups which don't have lua support 
compiled in kind like linux's kernel tainted flag. 

> i have been doing open source, linux and e for more than a
> decade and i know where many of the questions end up - they end up on my table
> asking about something someone else patched and modified. to simply avoid the
> pain of having to 1. figure why things are not working 2. having to explain
> what may have been done, and 3. have to finally redirect the queries to the
> people doing the patching. :) 

That's the beaty of open source, it's so flexible ;)
Just point the people to a FAQ entry and send the rest to /dev/null. 

> lua and embryo are non-negotiable features of
> edje. jut like text, images and rectangles are non-optional features of evas,
> etc. etc. :)
> 
> > I guess I could either use an older svn snapshot before the lua merge (I don't
> > like this option because it of course means bugs wont be fixed in my version)
> > or patch it manually out (don't know how complicated that would be). 
> 
> as above. you will create problems for yourself. you use elementary. elementary
> has themes. themes are edje files. they are designed and intended to be
> replaceable. people can/will replace do it. and they will then complain why
> theme x, y, z etc. that uses lua "has bugs". from upstream it will be
> documented that all edje files can do this. all. no conditions. :)

I can see that it's annoying if you are dealing with the users of a project with
the size of enlightenment but for something like a highly specialized bootmenu 
app that isn't really a problem. 

[ snip ]

> > > now elementary's default them
> > > can be very much trimmed. it has images - a fair few in it. if you used
> > > fewer images and smaller ones that were much simpler and re-used a lot,
> > > it'd make it smaller. you could get that default theme down to maybe
> > > 50-100k without much trouble. 
> > 
> > As my designer skills are < 0 I will leave this as is for now.
> 
> welljust lettign u know there is space to be saved. and be prepared - the
> elementary theme WILL getbigger over time. the default theme is expected to
> provide every feature elementary has. thus everything elm can have - it will
> get. :)

Ok so I will put it on my list for future optimizations.
Would be nice if you don't pull in lua ;)

Thanks,
Marc

-- 
 Marc Andre Tanner >< http://www.brain-dump.org/ >< GPG key: CF7D56C0



More information about the devel mailing list