Sophie

Sophie

distrib > Mageia > 7 > i586 > media > core-release > by-pkgid > dcb57bc1f616cf3a8072df2efbbf2767 > files > 114

elinks-0.12-18.mga7.i586.rpm

Tips to obtain a very small static elinks binary
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Tips to obtain a very small static elinks binary suitable for mini
distributions

Remove config.cache (previous CC may be cached):

	$ rm config.cache

Use dietlibc (http://www.fefe.de/dietlibc/) or similar stuff (uClibc, ...):

	$ export CC='diet -Os gcc'

Use compilers flags to optimize for size:

	$ export CFLAGS='-s -fno-inline -nostdinc -fomit-frame-pointer'

Note that if you don't use dietlibc, you definitively want to add `-Os` or
`-O2` to `CFLAGS`; GCC 2.95 does not know `-Os`, and some say `-O2` gives
smaller executables even for GCC 3.x.

[TIP]
===============================================================================
If you use these `CFLAGS` on Cygwin and you get unresolved symbols (`htons` and
suite in particular), try removing `-fno-inline` parameter.
===============================================================================

Disable some compile-time options:

------------------------------------------------------------------------------
$ ./configure --disable-ipv6 --disable-backtrace --disable-nls \
  --enable-fastmem --without-zlib --without-bzlib --disable-xbel \
  --without-lua --without-gnutls --without-openssl --without-x \
  --enable-small --without-spidermonkey --without-gpm
------------------------------------------------------------------------------

You can disable bookmarks, globhist and more, too, if you want to.

[TIP]
.Other configure options that can reduce the size
===============================================================================
 - \--disable-backtrace disables internal backtrace code.
 - \--disable-nls disables i18n support.
 - \--enable-fastmem disables internal `malloc()` debugging and use `alloca()`
   wherever possible.
 - \--enable-small forces to remove some text descriptions in options and
   keybind stuff (regain 30Kb).
===============================================================================

Dependencies over external libs must be removed using the related configure
options:
`-----------------------`------------------------------------------------------
Option			Description
-------------------------------------------------------------------------------
\--without-zlib		removes libz dependency (compression)
\--without-bzlib	removes libbz2 dependency (compression)
\--disable-xbel		removes expat dependency (XBEL bookmarks support)
\--without-lua		removes liblua dependency (Lua scripting)
\--without-gnutls	removes libtls dependency (SSL support)
\--without-openssl	removes libssl dependency (SSL support)
\--without-x		removes libx11 dependency (restoring terminal title)
\--without-spidermonkey removes libjs dependency (JavaScript)
\--without-gpm		removes libgpm dependency (mouse/console)
-------------------------------------------------------------------------------

It seems GCC 2.95.x do not generate as small binaries as GCC 3.2.x with same
flags.

You can use an executable compressor like UPX
link:http://upx.sourceforge.net/[].

Here are some results using gcc 2.95.3, dietlibc-0.23, and previous flags:

	me$ ls -l src/elinks
	-rwxr-xr-x   1 zas      users      495100 Oct 20 15:53 src/elinks
	me$ upx --best src/elinks
	me$ ls -l src/elinks
	-rwxr-xr-x   1 zas      users      217946 Oct 20 15:53 src/elinks

Whow ! Around 200kb :)

[NOTE]
.Details about the `\--enable-small` configure option effects:
==============================================================================
- it disables long descriptions of options;
- it disables textual descriptions of keybinding options;
- it reduces size of some HTTP errors messages;
- it disables fastfind feature, reducing performance, but also reducing a lot
  memory usage, and a bit the executable size.
==============================================================================