1
0
mirror of https://github.com/rkd77/elinks.git synced 2024-06-28 01:35:32 +00:00
elinks/doc/small.txt
Jonas Fonseca 0a844e6534 Drop useless comment block now that CVS Id tags are gone
... also drop comment about hacking.txt being extended gradually. AsciiDoc
burps on it and it really is kind of a boot message.
2006-01-03 14:28:26 +01:00

93 lines
3.7 KiB
Plaintext

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.
[NOTE]
.Warning
===============================================================================
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.
[NOTE]
.Notes
===============================================================================
- --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.
==============================================================================