X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=doc%2Fsdccman.lyx;h=fa87ad1d8642e9069c0f7363415bd50dbefffa25;hb=72b7e8dadd92279596c0f56649775fc056acf449;hp=651e1db2bcd2d0099c57a98c92dac4224b0edc42;hpb=19eb37fd0abc83f9e2491a3f9ac2033363954852;p=fw%2Fsdcc diff --git a/doc/sdccman.lyx b/doc/sdccman.lyx index 651e1db2..fa87ad1d 100644 --- a/doc/sdccman.lyx +++ b/doc/sdccman.lyx @@ -330,159 +330,1953 @@ If you can think of some more, please send them to the list. Installation \layout Subsection -Install and search paths +Configure Options +\layout Standard + +The install paths, search paths and other options are defined when running + 'configure'. + The defaults can be overriden by: +\layout List +\labelwidthstring 00.00.0000 + +---prefix see tabel below +\layout List +\labelwidthstring 00.00.0000 + +---exec_prefix see tabel below +\layout List +\labelwidthstring 00.00.0000 + +---bindir see tabel below +\layout List +\labelwidthstring 00.00.0000 + +---datadir see tabel below +\layout List +\labelwidthstring 00.00.0000 + +docdir environment variable, see tabel below +\layout List +\labelwidthstring 00.00.0000 + +include_dir_suffix environment variable, see tabel below +\layout List +\labelwidthstring 00.00.0000 + +lib_dir_suffix environment variable, see tabel below +\layout List +\labelwidthstring 00.00.0000 + +sdccconf_h_dir_separator environment variable, either / or +\backslash + +\backslash + makes sense here. + This character will only be used in sdccconf.h; don't forget it's a C-header, + therefore a double-backslash is needed there. +\layout List +\labelwidthstring 00.00.0000 + +---disable-mcs51-port Excludes the Intel mcs51 port +\layout List +\labelwidthstring 00.00.0000 + +---disable-gbz80-port Excludes the Gameboy gbz80 port +\layout List +\labelwidthstring 00.00.0000 + +---disable-z80-port Excludes the z80 port +\layout List +\labelwidthstring 00.00.0000 + +---disable-avr-port Excludes the AVR port +\layout List +\labelwidthstring 00.00.0000 + +---disable-ds390-port Excludes the DS390 port +\layout List +\labelwidthstring 00.00.0000 + +---disable-pic-port Excludes the PIC port +\layout List +\labelwidthstring 00.00.0000 + +---disable-xa51-port Excludes the XA51 port +\layout List +\labelwidthstring 00.00.0000 + +---disable-ucsim Disables configuring and building of ucsim +\layout List +\labelwidthstring 00.00.0000 + +---disable-device-lib-build Disables automatically building device libraries +\layout List +\labelwidthstring 00.00.0000 + +---disable-packihx Disables building packihx +\layout List +\labelwidthstring 00.00.0000 + +---enable-libgc Use the Bohem memory allocator. + Lower runtime footprint. +\layout Standard + +Furthermore the environment variables CC, CFLAGS, ... + the tools and their arguments can be influenced. + Please see `configure ---help` and the man/info pages of `configure` for + details. +\newline + +\newline +The names of the standard libraries STD_LIB, STD_INT_LIB, STD_LONG_LIB, + STD_FP_LIB, STD_DS390_LIB, STD_XA51_LIB and the environment variables SDCC_DIR_ +NAME, SDCC_INCLUDE_NAME, SDCC_LIB_NAME are defined by `configure` too. + At the moment it's not possible to change the default settings (it was + simply never required. +\newline + +\newline +These configure options are compiled into the binaries, and can only be + changed by rerunning 'configure' and recompiling SDCC. + The configure options are written in +\emph on +italics +\emph default + to distinguish them from run time environment variables (see section search + paths). +\newline + +\newline +The settings for +\begin_inset Quotes sld +\end_inset + +Win32 builds +\begin_inset Quotes srd +\end_inset + + are used by the SDCC team to build the official Win32 binaries. + The SDCC team uses Mingw32 to build the official Windows binaries, because + it's +\layout Enumerate + +open source, +\layout Enumerate + +a gcc compiler and last but not least +\layout Enumerate + +the binaries can be built by cross compiling on Sourceforge's compile farm. +\layout Standard + +See the examples, how to pass the Win32 settings to 'configure'. + The other Win32 builds using Borland, VC or whatever don't use 'configure', + but a header file sdcc_vc_in.h is the same as sdccconf.h built by 'configure' + for Win32. +\newline + +\newline +These defaults are: +\newline + +\newline + +\begin_inset Tabular + + + + + + + +\begin_inset Text + +\layout Standard + +Variable +\end_inset + + +\begin_inset Text + +\layout Standard + +default +\end_inset + + +\begin_inset Text + +\layout Standard + +Win32 builds +\end_inset + + + + +\begin_inset Text + +\layout Standard + + +\emph on +PREFIX +\end_inset + + +\begin_inset Text + +\layout Standard + +/usr/local +\end_inset + + +\begin_inset Text + +\layout Standard + + +\backslash +sdcc +\end_inset + + + + +\begin_inset Text + +\layout Standard + + +\emph on +EXEC_PREFIX +\end_inset + + +\begin_inset Text + +\layout Standard + + +\emph on +$PREFIX +\end_inset + + +\begin_inset Text + +\layout Standard + + +\emph on +$PREFIX +\end_inset + + + + +\begin_inset Text + +\layout Standard + + +\emph on +BINDIR +\end_inset + + +\begin_inset Text + +\layout Standard + + +\emph on +$EXECPREFIX +\emph default +/bin +\end_inset + + +\begin_inset Text + +\layout Standard + + +\emph on +$EXECPREFIX +\emph default + +\backslash +bin +\end_inset + + + + +\begin_inset Text + +\layout Standard + + +\emph on +DATADIR +\end_inset + + +\begin_inset Text + +\layout Standard + + +\emph on +$PREFIX +\emph default +/share +\end_inset + + +\begin_inset Text + +\layout Standard + + +\emph on +$PREFIX +\end_inset + + + + +\begin_inset Text + +\layout Standard + + +\emph on +DOCDIR +\end_inset + + +\begin_inset Text + +\layout Standard + + +\emph on +$DATADIR +\emph default +/sdcc/doc +\end_inset + + +\begin_inset Text + +\layout Standard + + +\emph on +$DATADIR +\emph default + +\backslash +doc +\end_inset + + + + +\begin_inset Text + +\layout Standard + + +\emph on +INCLUDE_DIR_SUFFIX +\end_inset + + +\begin_inset Text + +\layout Standard + +sdcc/include +\end_inset + + +\begin_inset Text + +\layout Standard + +include +\end_inset + + + + +\begin_inset Text + +\layout Standard + + +\emph on +LIB_DIR_SUFFIX +\end_inset + + +\begin_inset Text + +\layout Standard + +sdcc/lib +\end_inset + + +\begin_inset Text + +\layout Standard + +lib +\end_inset + + + + +\end_inset + + +\newline + +\newline + +\newline +'configure' also computes relative paths. + This is needed for full relocatability of a binary package and to complete + search paths (see section search paths below): +\newline + +\newline + +\begin_inset Tabular + + + + + + + +\begin_inset Text + +\layout Standard + +Variable (computed) +\end_inset + + +\begin_inset Text + +\layout Standard + +default +\end_inset + + +\begin_inset Text + +\layout Standard + +Win32 builds +\end_inset + + + + +\begin_inset Text + +\layout Standard + + +\emph on +BIN2DATA_DIR +\end_inset + + +\begin_inset Text + +\layout Standard + +../share +\end_inset + + +\begin_inset Text + +\layout Standard + +.. +\backslash + +\end_inset + + + + +\begin_inset Text + +\layout Standard + + +\emph on +PREFIX2BIN_DIR +\end_inset + + +\begin_inset Text + +\layout Standard + +bin +\end_inset + + +\begin_inset Text + +\layout Standard + +bin +\end_inset + + + + +\begin_inset Text + +\layout Standard + + +\emph on +PREFIX2DATA_DIR +\end_inset + + +\begin_inset Text + +\layout Standard + +share/sdcc +\end_inset + + +\begin_inset Text + +\layout Standard + +\end_inset + + + + +\end_inset + + +\newline + +\newline +Examples: +\layout LyX-Code + +./configure +\layout LyX-Code + +./configure ---prefix= +\begin_inset Quotes srd +\end_inset + +/usr/bin +\begin_inset Quotes srd +\end_inset + + ---datadir= +\begin_inset Quotes srd +\end_inset + +/usr/share +\begin_inset Quotes srd +\end_inset + + +\layout LyX-Code + +./configure ---disable-avr-port ---disable-xa51-port +\layout Standard + +To crosscompile on linux for Mingw32 (see also 'sdcc/support/scripts/sdcc_mingw3 +2'): +\layout LyX-Code + +./configure +\backslash + +\layout LyX-Code + + CC= +\begin_inset Quotes srd +\end_inset + +i586-mingw32msvc-gcc +\begin_inset Quotes srd +\end_inset + + CXX= +\begin_inset Quotes srd +\end_inset + +i586-mingw32msvc-g++ +\begin_inset Quotes srd +\end_inset + + +\backslash + +\layout LyX-Code + + RANLIB= +\begin_inset Quotes srd +\end_inset + +i586-mingw32msvc-ranlib +\begin_inset Quotes srd +\end_inset + + +\backslash + +\layout LyX-Code + + STRIP= +\begin_inset Quotes srd +\end_inset + +i586-mingw32msvc-strip +\begin_inset Quotes srd +\end_inset + + +\backslash + +\layout LyX-Code + + ---prefix= +\begin_inset Quotes srd +\end_inset + +/sdcc +\begin_inset Quotes srd +\end_inset + + +\backslash + +\layout LyX-Code + + ---datadir= +\begin_inset Quotes srd +\end_inset + +/sdcc +\begin_inset Quotes srd +\end_inset + + +\backslash + +\layout LyX-Code + + docdir= +\begin_inset Quotes srd +\end_inset + +/sdcc/doc +\begin_inset Quotes srd +\end_inset + + +\backslash + +\layout LyX-Code + + include_dir_suffix= +\begin_inset Quotes srd +\end_inset + +include +\begin_inset Quotes srd +\end_inset + + +\backslash + +\layout LyX-Code + + lib_dir_suffix= +\begin_inset Quotes srd +\end_inset + +lib +\begin_inset Quotes srd +\end_inset + + +\backslash + +\layout LyX-Code + + sdccconf_h_dir_separator= +\begin_inset Quotes srd +\end_inset + + +\backslash + +\backslash + +\backslash + +\backslash + +\begin_inset Quotes srd +\end_inset + + +\backslash + +\layout LyX-Code + + ---disable-device-lib-build +\backslash + +\layout LyX-Code + + ---disable-ucsim +\backslash + +\layout LyX-Code + + ---host=i586-mingw32msvc ---build=unknown-unknown-linux-gnu +\layout Standard + +To +\begin_inset Quotes sld +\end_inset + +cross +\begin_inset Quotes srd +\end_inset + +compile on Cygwin for Mingw32(see also sdcc/support/scripts/sdcc_cygwin_mingw32) +: +\layout LyX-Code + +./configure -C +\backslash + +\layout LyX-Code + + CFLAGS= +\begin_inset Quotes srd +\end_inset + +-mno-cygwin -O2 +\begin_inset Quotes srd +\end_inset + + +\backslash + +\layout LyX-Code + + LDFLAGS= +\begin_inset Quotes srd +\end_inset + +-mno-cygwin +\begin_inset Quotes srd +\end_inset + + +\backslash + +\layout LyX-Code + + ---prefix= +\begin_inset Quotes srd +\end_inset + +/sdcc +\begin_inset Quotes srd +\end_inset + + +\backslash + +\layout LyX-Code + + ---datadir= +\begin_inset Quotes srd +\end_inset + +/sdcc +\begin_inset Quotes srd +\end_inset + + +\backslash + +\layout LyX-Code + + docdir= +\begin_inset Quotes srd +\end_inset + +/sdcc/doc +\begin_inset Quotes srd +\end_inset + + +\backslash + +\layout LyX-Code + + include_dir_suffix= +\begin_inset Quotes srd +\end_inset + +include +\begin_inset Quotes srd +\end_inset + + +\backslash + +\layout LyX-Code + + lib_dir_suffix= +\begin_inset Quotes srd +\end_inset + +lib +\begin_inset Quotes srd +\end_inset + + +\backslash + +\layout LyX-Code + + sdccconf_h_dir_separator= +\begin_inset Quotes srd +\end_inset + + +\backslash + +\backslash + +\backslash + +\backslash + +\begin_inset Quotes srd +\end_inset + + +\backslash + +\layout LyX-Code + + ---disable-ucsim +\layout Standard + +'configure' is quite slow on Cygwin (at least on windows before Win2000/XP). + The option '--C' turns on caching, which gives a little bit extra speed. + However if options are changed, it can be necessary to delete the config.cache + file. +\layout Subsection + +Install paths +\layout Standard + +1. + Binary files (preprocessor, assembler and linker) +\layout Standard + + +\begin_inset Tabular + + + + + + + +\begin_inset Text + +\layout Standard + +Path +\end_inset + + +\begin_inset Text + +\layout Standard + +default +\end_inset + + +\begin_inset Text + +\layout Standard + +Win32 builds +\end_inset + + + + +\begin_inset Text + +\layout Standard + + +\emph on +$EXEC_PREFIX +\end_inset + + +\begin_inset Text + +\layout Standard + +/usr/local/bin +\end_inset + + +\begin_inset Text + +\layout Standard + + +\backslash +sdcc +\backslash +bin +\end_inset + + + + +\end_inset + + +\newline + +\newline +2. + Include files +\layout Standard + + +\begin_inset Tabular + + + + + + + +\begin_inset Text + +\layout Standard + +Path +\end_inset + + +\begin_inset Text + +\layout Standard + +default +\end_inset + + +\begin_inset Text + +\layout Standard + +Win32 builds +\end_inset + + + + +\begin_inset Text + +\layout Standard + + +\emph on +$DATADIR/ +\newline +$INCLUDE_DIR_SUFFIX +\end_inset + + +\begin_inset Text + +\layout Standard + +/usr/local/share/sdcc/include +\end_inset + + +\begin_inset Text + +\layout Standard + + +\backslash +sdcc +\backslash +include +\end_inset + + + + +\end_inset + + +\newline + +\newline +3. + Library files (the +\shape italic +model +\shape default + is auto-appended by the compiler, e.g. + small, large, z80, ds390 etc.) +\layout Standard + + +\begin_inset Tabular + + + + + + + +\begin_inset Text + +\layout Standard + +Path +\end_inset + + +\begin_inset Text + +\layout Standard + +default +\end_inset + + +\begin_inset Text + +\layout Standard + +Win32 builds +\end_inset + + + + +\begin_inset Text + +\layout Standard + + +\emph on +$DATADIR/$LIB_DIR_SUFFIX +\end_inset + + +\begin_inset Text + +\layout Standard + +/usr/local/share/sdcc/lib +\end_inset + + +\begin_inset Text + +\layout Standard + + +\backslash +sdcc +\backslash +lib +\end_inset + + + + +\end_inset + + +\newline + +\newline +4. + Documentation +\layout Standard + + +\begin_inset Tabular + + + + + + + +\begin_inset Text + +\layout Standard + +Path +\end_inset + + +\begin_inset Text + +\layout Standard + +default +\end_inset + + +\begin_inset Text + +\layout Standard + +Win32 builds +\end_inset + + + + +\begin_inset Text + +\layout Standard + + +\emph on +$DOCDIR +\end_inset + + +\begin_inset Text + +\layout Standard + +/usr/local/share/sdcc/doc +\end_inset + + +\begin_inset Text + +\layout Standard + + +\backslash +sdcc +\backslash +doc +\end_inset + + + + +\end_inset + + +\newline + +\newline +The install paths can still be changed during `make install` with e.g.: +\layout LyX-Code + +make install prefix=$(HOME)/local/sdcc +\layout Standard + +Of course this doesn't change the search paths compiled into the binaries. +\layout Subsection + +Search Paths +\layout Standard + +Some search paths or parts of them are determined by configure variables + (in +\emph on +italics +\emph default +, see section above). + Further search paths are determined by environment variables during runtime. + +\newline +The paths searched when running the compiler are as follows (the first catch + wins): +\newline + +\newline +1. + Binary files (preprocessor, assembler and linker) +\newline + +\begin_inset Tabular + + + + + + + +\begin_inset Text + +\layout Standard + +Search path +\end_inset + + +\begin_inset Text + +\layout Standard + +default +\end_inset + + +\begin_inset Text + +\layout Standard + +Win32 builds +\end_inset + + + + +\begin_inset Text + +\layout Standard + +$SDCC_HOME/ +\emph on +$PPREFIX2BIN_DIR +\end_inset + + +\begin_inset Text + +\layout Standard + +$SDCC_HOME/bin +\end_inset + + +\begin_inset Text + +\layout Standard + +$SDCC_HOME +\backslash +bin +\end_inset + + + + +\begin_inset Text + +\layout Standard + +Path of argv[0] (if available) +\end_inset + + +\begin_inset Text + +\layout Standard + +Path of argv[0] +\end_inset + + +\begin_inset Text + +\layout Standard + +Path of argv[0] +\end_inset + + + + +\begin_inset Text + +\layout Standard + +$PATH +\end_inset + + +\begin_inset Text + +\layout Standard + +$PATH +\end_inset + + +\begin_inset Text + +\layout Standard + +$PATH +\end_inset + + + + +\end_inset + + +\newline + +\newline +2. + Include files +\newline + +\begin_inset Tabular + + + + + + + +\begin_inset Text + +\layout Standard + +Search path +\end_inset + + +\begin_inset Text + +\layout Standard + +default +\end_inset + + +\begin_inset Text + +\layout Standard + +Win32 builds +\end_inset + + + + +\begin_inset Text + +\layout Standard + +---I dir +\end_inset + + +\begin_inset Text + +\layout Standard + +---I dir +\end_inset + + +\begin_inset Text + +\layout Standard + +---I dir +\end_inset + + + + +\begin_inset Text + +\layout Standard + +$SDCC_INCLUDE +\end_inset + + +\begin_inset Text + +\layout Standard + +$SDCC_INCLUDE +\end_inset + + +\begin_inset Text + +\layout Standard + +$SDCC_INCLUDE +\end_inset + + + + +\begin_inset Text + +\layout Standard + +$SDCC_HOME/ +\newline + +\emph on +$PREFIX2DATA_DIR/ +\newline +$INCLUDE_DIR_SUFFIX +\end_inset + + +\begin_inset Text + +\layout Standard + +$SDCC_ HOME/ +\newline +share/sdcc/ +\newline +include +\end_inset + + +\begin_inset Text + +\layout Standard + +$SDCC_HOME +\backslash +include +\end_inset + + + + +\begin_inset Text + +\layout Standard + +path(argv[0])/ +\newline + +\emph on +$BIN2DATADIR/ +\emph default + +\newline + +\emph on +$INCLUDE_DIR_SUFFIX +\end_inset + + +\begin_inset Text + +\layout Standard + +path(argv[0])/ +\newline +../sdcc/include +\newline +\SpecialChar ~ +\SpecialChar ~ +\SpecialChar ~ +\SpecialChar ~ +\SpecialChar ~ +\SpecialChar ~ +\SpecialChar ~ +\SpecialChar ~ +\SpecialChar ~ +\SpecialChar ~ +\SpecialChar ~ +\SpecialChar ~ +\SpecialChar ~ +\SpecialChar ~ +\SpecialChar ~ +\SpecialChar ~ +\SpecialChar ~ +\SpecialChar ~ +\SpecialChar ~ +\SpecialChar ~ +\SpecialChar ~ +\SpecialChar ~ +\SpecialChar ~ +\SpecialChar ~ +\SpecialChar ~ +\SpecialChar ~ +\SpecialChar ~ +\SpecialChar ~ +\SpecialChar ~ +\SpecialChar ~ +\SpecialChar ~ +\SpecialChar ~ +\SpecialChar ~ +\SpecialChar ~ +\SpecialChar ~ +\SpecialChar ~ +\SpecialChar ~ +\SpecialChar ~ + +\end_inset + + +\begin_inset Text + +\layout Standard + +path(argv[0]) +\backslash +.. +\backslash +include +\end_inset + + + + +\begin_inset Text + +\layout Standard + + +\emph on +$DATADIR/ +\emph default + +\newline + +\emph on +$INCLUDE_DIR_SUFFIX +\end_inset + + +\begin_inset Text + +\layout Standard + +/usr/local/share/sdcc/ +\newline +include +\end_inset + + +\begin_inset Text + +\layout Standard + +(not on Win32) +\end_inset + + + + +\end_inset + + +\newline + +\newline + The option ---nostdinc disables the last two search paths. +\newline + +\newline +3. + Library files +\newline +With the exception of +\begin_inset Quotes sld +\end_inset + +---L dir +\begin_inset Quotes srd +\end_inset + + the +\shape italic +model +\shape default + is auto-appended by the compiler (e.g. + small, large, z80, ds390 etc.). + +\newline + +\begin_inset Tabular + + + + + + + +\begin_inset Text + +\layout Standard + +Search path +\end_inset + + +\begin_inset Text + +\layout Standard + +default +\end_inset + + +\begin_inset Text + +\layout Standard + +Win32 builds +\end_inset + + + + +\begin_inset Text + +\layout Standard + +---L dir +\end_inset + + +\begin_inset Text + \layout Standard -Linux (and other gcc-builds like Solaris, Cygwin, Mingw and OSX) by default - install in /usr/local. - You can override this when configuring with ---prefix-path. - Subdirs used will be bin, share/sdcc/include, share/sdcc/lib and share/sdcc/doc. -\newline -Windows MSVC and Borland builds will install in one single tree (e.g. - /sdcc) with subdirs bin, lib, include and doc. -\newline +---L dir +\end_inset + + +\begin_inset Text -\newline -The paths searched when running the compiler are as follows (the first catch - wins): -\layout Enumerate +\layout Standard -Binary files (preprocessor, assembler and linker): -\newline -- the path of argv[0] (if available) -\newline -- getenv( -\begin_inset Quotes sld +---L dir \end_inset + + + + +\begin_inset Text -SDCC_BIN_PATH -\begin_inset Quotes srd -\end_inset +\layout Standard -) +$SDCC_LIB/ \newline -- getenv( -\begin_inset Quotes sld + +\emph on + \end_inset + + +\begin_inset Text -SDCCHOME -\begin_inset Quotes srd +\layout Standard + +$SDCC_LIB/ +\newline + +\emph on + \end_inset + + +\begin_inset Text + +\layout Standard + +$SDCC_LIB +\backslash -)/bin \newline -- $PATH -\layout Enumerate -Include files: +\emph on + +\end_inset + + + + +\begin_inset Text + +\layout Standard + +$SDCC_HOME/ \newline -- -I dir + +\emph on +$PREFIX2DATA_DIR/ \newline -- getenv( -\begin_inset Quotes sld +$LIB_DIR_SUFFIX/ \end_inset + + +\begin_inset Text -SDCC_INCLUDE_PATH -\begin_inset Quotes srd -\end_inset +\layout Standard -) +$SDCC_HOME/ \newline -- getenv( -\begin_inset Quotes sld +share/sdcc/ +\newline +lib/ +\emph on + \end_inset + + +\begin_inset Text -SDCCHOME -\begin_inset Quotes srd +\layout Standard + +$SDCC_HOME +\backslash +lib +\backslash + +\emph on + +\newline + \end_inset + + + + +\begin_inset Text + +\layout Standard -)/include +path(argv[0])/ \newline -- /usr/local/share/sdcc/include (gcc builds) + +\emph on +$BIN2DATADIR/ +\emph default + \newline -- path(arv[0])/../include and then /sdcc/include (as a last resort for windoze - msvc and borland builds) -\layout Enumerate -Library files (the -\shape italic -model -\shape default - is auto-appended by the compiler, e.g. - small, large, z80, ds390 etc.): +\emph on +$LIB_DIR_SUFFIX/ +\end_inset + + +\begin_inset Text + +\layout Standard + +path(argv[0])/ \newline -- -L dir +../sdcc/lib/ +\emph on + \newline -- getenv( -\begin_inset Quotes sld -\end_inset +\SpecialChar ~ +\SpecialChar ~ +\SpecialChar ~ +\SpecialChar ~ +\SpecialChar ~ +\SpecialChar ~ +\SpecialChar ~ +\SpecialChar ~ +\SpecialChar ~ +\SpecialChar ~ +\SpecialChar ~ +\SpecialChar ~ +\SpecialChar ~ +\SpecialChar ~ +\SpecialChar ~ +\SpecialChar ~ +\SpecialChar ~ +\SpecialChar ~ +\SpecialChar ~ +\SpecialChar ~ +\SpecialChar ~ +\SpecialChar ~ +\SpecialChar ~ +\SpecialChar ~ +\SpecialChar ~ +\SpecialChar ~ +\SpecialChar ~ +\SpecialChar ~ +\SpecialChar ~ +\SpecialChar ~ +\SpecialChar ~ +\SpecialChar ~ +\SpecialChar ~ +\SpecialChar ~ +\SpecialChar ~ +\SpecialChar ~ +\SpecialChar ~ +\SpecialChar ~ +\SpecialChar ~ -SDCC_LIB_PATH -\begin_inset Quotes srd \end_inset + + +\begin_inset Text -)/ -\shape italic -model -\shape default +\layout Standard + +path(argv[0]) +\backslash \newline -- getenv( -\begin_inset Quotes sld -\end_inset +.. +\backslash +lib +\backslash + +\emph on + +\newline +\SpecialChar ~ +\SpecialChar ~ +\SpecialChar ~ +\SpecialChar ~ +\SpecialChar ~ +\SpecialChar ~ +\SpecialChar ~ +\SpecialChar ~ +\SpecialChar ~ +\SpecialChar ~ +\SpecialChar ~ +\SpecialChar ~ +\SpecialChar ~ +\SpecialChar ~ +\SpecialChar ~ +\SpecialChar ~ +\SpecialChar ~ +\SpecialChar ~ +\SpecialChar ~ +\SpecialChar ~ +\SpecialChar ~ +\SpecialChar ~ +\SpecialChar ~ +\SpecialChar ~ +\SpecialChar ~ +\SpecialChar ~ +\SpecialChar ~ +\SpecialChar ~ +\SpecialChar ~ +\SpecialChar ~ +\SpecialChar ~ +\SpecialChar ~ +\SpecialChar ~ +\SpecialChar ~ +\SpecialChar ~ -SDCCHOME -\begin_inset Quotes srd \end_inset + + + + +\begin_inset Text -)/lib/ -\shape italic -model -\shape default +\layout Standard + +\emph on +$DATADIR/ \newline -- /usr/local/share/sdcc/lib/ -\shape italic -model -\shape default - (gcc builds) -\newline -- path(argv[0])/../lib/ -\shape italic -model -\shape default - and then /sdcc/lib/ -\shape italic -model -\shape default - (as a last resort for windoze msvc and borland builds) -\layout Enumerate +$LIB_DIR_SUFFIX/ +\end_inset + + +\begin_inset Text + +\layout Standard -Documentation (although never really searched for, you have to do that yourself - :): +/usr/local/share/sdcc/ \newline -- getenv( -\begin_inset Quotes sld +lib/ +\emph on + +\end_inset + + +\begin_inset Text + +\layout Standard + +(not on Win32) \end_inset + + + -SDCCHOME -\begin_inset Quotes srd \end_inset -)/doc -\newline -- /usr/local/share/sdcc/doc (gcc builds) -\newline -- /sdcc/doc (windoze msvc and borland builds) + +\layout Comment + +Don't delete any of the stray spaces in the table above without checking + the HTML output (last line)! \layout Standard -So, for windoze it is highly recommended to set the environment variable - SDCCHOME to prevent needless usage of -I and -L options. - For gcc-builds SDCCHOME should only be set when sdcc is installed in non-standa -rd paths. +\SpecialChar ~ + +\newline +The option ---nostdlib disables the last two search paths. \layout Subsection -Linux and other gcc-based systems (cygwin, mingw, osx) +Building SDCC +\layout Subsubsection + +Building SDCC on Linux \layout Enumerate @@ -500,7 +2294,11 @@ Download the source package \series default .src \series medium -.tgz. +.t +\series default +ar. +\series medium +gz. \layout Enumerate @@ -513,7 +2311,7 @@ Bring up a command line terminal, such as xterm. Unpack the file using a command like: \family sans \series bold -"tar -xzf sdcc.src.tgz +"tar -xzf sdcc.src.tar.gz \family default \series default " @@ -569,12 +2367,40 @@ Type \series medium . -\series default - This copies the binary executables, the include files, the libraries and - the documentation to the install directories. -\layout Subsection +\series default + This copies the binary executables, the include files, the libraries and + the documentation to the install directories. +\layout Subsubsection + +Building SDCC on OSX 2.x +\layout Standard + +Follow the instruction for Linux. +\newline + +\newline +On OSX 2.x it was reported, that the default gcc (version 3.1 20020420 (prerelease +)) fails to compile SDCC. + Fortunately there's also gcc 2.9.x installed, which works fine. + This compiler can be selected by running 'configure' with: +\layout LyX-Code + +./configure CC=gcc2 CXX=g++2 +\layout Subsubsection + +Crosscompiling SDCC on Linux for Windows +\layout Standard + +With the Mingw32 gcc crosscompiler it's easy to compile SDCC for Win32. + See section 'Configure Options'. +\layout Subsubsection + +Building SDCC on Windows +\layout Standard -Windows +With the exception of Cygwin the SDCC binaries uCsim and sdcdb can't be + built on Windows. + They use Unix-sockets, which are not available on Win32. \layout Subsubsection Windows Install Using a Binary Package @@ -583,30 +2409,17 @@ Windows Install Using a Binary Package Download the binary package and unpack it using your favorite unpacking tool (gunzip, WinZip, etc). This should unpack to a group of sub-directories. - An example directory structure after unpacking the mingw package is: c: -\backslash -usr + An example directory structure after unpacking the mingw32 package is: + c: \backslash -local +sdcc \backslash bin for the executables, c: \backslash -usr -\backslash -local -\backslash -share -\backslash sdcc \backslash include and c: \backslash -usr -\backslash -local -\backslash -share -\backslash sdcc \backslash lib for the include and libraries. @@ -616,14 +2429,152 @@ Adjust your environment variable PATH to include the location of the bin directory or start sdcc using the full path. \layout Subsubsection -Windows Install Using Cygwin and Mingw +Building SDCC using Cygwin and Mingw32 \layout Standard -Follow the instruction in -\series bold -Linux and other gcc-based systems -\series default +For building and installing a Cygwin executable follow the instructions + for Linux. +\newline + +\newline +On Cygwin a +\begin_inset Quotes sld +\end_inset + +native +\begin_inset Quotes srd +\end_inset + + Win32-binary can be built, which will not need the Cygwin-DLL. + For the necessary 'configure' options see section 'configure options' or + the script 'sdcc/support/scripts/sdcc_cygwinmingw32'. +\newline + +\newline +In order to install Cygwin on Windows download setup.exe from +\begin_inset LatexCommand \url[www.cygwin.com]{http://www.cygwin.com/} + +\end_inset + . + Run it, set the +\begin_inset Quotes sld +\end_inset + +default text file type +\begin_inset Quotes srd +\end_inset + + to +\begin_inset Quotes sld +\end_inset + +unix +\begin_inset Quotes srd +\end_inset + + and download/install at least the following packages. + Some packages are selected by default, others will be automatically selected + because of dependencies with the manually selected packages. + Never deselect these packages! +\layout Itemize + +flex +\layout Itemize + +bison +\layout Itemize + +gcc ; version 3.x is fine, no need to use the old 2.9x +\layout Itemize + +binutils ; selected with gcc +\layout Itemize + +make +\layout Itemize + +rxvt ; a nice console, which makes life much easier under windoze (see below) +\layout Itemize + +man ; not really needed for building SDCC, but you'll miss it sooner or + later +\layout Itemize + +less ; not really needed for building SDCC, but you'll miss it sooner or + later +\layout Itemize + +cvs ; only if you use CVS access +\layout Standard + +If you want to develop something you'll need: +\layout Itemize + +python ; for the regression tests +\layout Itemize + +gdb ; the gnu debugger, together with the nice GUI +\begin_inset Quotes sld +\end_inset + +insight +\begin_inset Quotes srd +\end_inset + + +\layout Itemize + +openssh ; to access the CF or commit changes +\layout Itemize + +autoconf and autoconf-devel ; if you want to fight with 'configure', don't + use autoconf-stable! +\layout Standard + +rxvt is a nice console with history. + Replace in your cygwin.bat the line +\layout LyX-Code + +bash --login -i +\layout Standard + +with (one line): +\layout LyX-Code + +rxvt -sl 1000 -fn "Lucida Console-12" -sr -cr red +\layout LyX-Code + + -bg black -fg white -geometry 100x65 -e bash --login +\layout Standard + +Text selected with the mouse is automatically copied to the clipboard, pasting + works with shift-insert. +\newline + +\newline +The other good tip is to make sure you have no //c/-style paths anywhere, + use /cygdrive/c/ instead. + Using // invokes a network lookup which is very slow. + If you think +\begin_inset Quotes sld +\end_inset + +cygdrive +\begin_inset Quotes srd +\end_inset + + is too long, you can change it with e.g. +\layout LyX-Code + +mount -s -u -c /mnt +\layout Standard + +SDCC sources use the unix line ending LF. + Life is much easier, if you store the source tree on a drive, which is + mount in binary mode. + And use an editor which can handle LF-only line endings. + Make sure not to commit files with windows line endings. \layout Subsubsection Windows Install Using Microsoft Visual C++ 6.0/NET @@ -844,6 +2795,13 @@ del /s *.obj *.lib *.rul from the sdcc directory. \layout Subsection +Building the Documentation +\layout Standard + +... + coming soon +\layout Subsection + Testing out the SDCC Compiler \layout Standard @@ -1032,7 +2990,7 @@ SDCC does not build correctly. A thing to try is starting from scratch by unpacking the .tgz source package again in an empty directory. - Confure it like: + Configure it like: \newline \newline @@ -1713,16 +3671,6 @@ Linker Options \labelwidthstring 00.00.0000 -\series bold --o\SpecialChar ~ - -\series default -the output path resp. - file where everything will be placed -\layout List -\labelwidthstring 00.00.0000 - - \series bold -L\SpecialChar ~ ---lib-path @@ -1995,12 +3943,20 @@ Will not do loop reversal optimization. \layout List \labelwidthstring 00.00.0000 +--- +\series bold +nolabelopt +\series default + Will not optimize labels (makes the dumpfiles more readable). +\layout List +\labelwidthstring 00.00.0000 + \series bold ---no-xinit-opt \series default - This will disable the memcpy of initialized data in far space from code - space + Will not memcpy initialized data in far space from code space. + This saves a few bytes in code space if you don't have initialized data. \layout Subsubsection Other Options @@ -2017,6 +3973,15 @@ Other Options \labelwidthstring 00.00.0000 +\series bold +--c1mode +\series default + reads the preprocessed source from standard input and compiles it. + The file name for the assembler output must be specified using the -o option. +\layout List +\labelwidthstring 00.00.0000 + + \series bold -E \series default @@ -2027,6 +3992,19 @@ Other Options \labelwidthstring 00.00.0000 +\series bold +-o\SpecialChar ~ + +\series default +The output path resp. + file where everything will be placed. + If the parameter is a path, it must have a trailing slash (or backslash + for the Windows binaries) to be recognized as a path. + +\layout List +\labelwidthstring 00.00.0000 + + \series bold ---stack-auto \series default @@ -2286,6 +4264,33 @@ cyclomatic complexity -V \series default Shows the actual commands the compiler is executing. +\layout List +\labelwidthstring 00.00.0000 + + +\series bold +---no-c-code-in-asm +\series default + Hides your ugly and inefficient c-code from the asm file, so you can always + blame the compiler :). +\layout List +\labelwidthstring 00.00.0000 + + +\series bold +---i-code-in-asm +\series default + Include i-codes in the asm file. + Sounds like noise but is most helpfull for debugging the compiler itself. +\layout List +\labelwidthstring 00.00.0000 + + +\series bold +---less-pedantic +\series default + Disable some of the more pedantic warnings (jwk burps: please be more specific + here, please!) \layout Subsubsection Intermediate Dump Options @@ -2408,6 +4413,90 @@ Will create a dump of iCode's, after register assignment, into a file named Will cause all the above mentioned dumps to be created. \layout Subsection +Environment variables +\layout Standard + +SDCC recognizes the following environment variables: +\layout List +\labelwidthstring 00.00.0000 + + +\series bold +SDCC_LEAVE_SIGNALS +\series default + SDCC installs a signal handler to be able to delete temporary files after + an user break (^C) or an exception. + If this environment variable is set, SDCC won't install the signal handler + in order to be able to debug SDCC. +\layout List +\labelwidthstring 00.00.0000 + + +\series bold +TMP,\SpecialChar ~ +TEMP,\SpecialChar ~ +TMPDIR +\series default + Path, where temporary files will be created. + The order of the variables is the search order. + In a standard *nix environment these variables are not set, and there's + no need to set them. + On Windows it's recommended to set one of them. +\layout List +\labelwidthstring 00.00.0000 + + +\series bold +SDCC_HOME +\series default + Path, see +\begin_inset Quotes sld +\end_inset + +2.3 Install and search paths +\begin_inset Quotes srd +\end_inset + +. +\layout List +\labelwidthstring 00.00.0000 + + +\series bold +SDCC_INCLUDE +\series default + Path, see +\begin_inset Quotes sld +\end_inset + +2.3 Install and search paths +\begin_inset Quotes srd +\end_inset + +. +\layout List +\labelwidthstring 00.00.0000 + + +\series bold +SDCC_LIB +\series default + Path, see +\begin_inset Quotes sld +\end_inset + +2.3 Install and search paths +\begin_inset Quotes srd +\end_inset + +. +\layout Standard + +There are some more environment variables recognized by SDCC, but these + are solely used for debugging purposes. + They can change or disappear very quickly, and will never be documentated. +\layout Subsection + MCS51/DS390 Storage Class Language Extensions \layout Standard @@ -2892,9 +4981,9 @@ Interrupt Numbers and the corresponding address & descriptions for the Standard \begin_inset Tabular - - - + + + \begin_inset Text @@ -3755,7 +5844,7 @@ The same goes the other way, ie. labels defines in inline assembly CANNOT be accessed by C statements. \layout Subsection -int(16 bit) and long (32 bit) Support +int (16 bit) and long (32 bit) Support \layout Standard For signed & unsigned int (16 bit) and long (32 bit) variables, division, @@ -5472,15 +7561,17 @@ Pragmas \layout Standard SDCC supports the following #pragma directives. - This directives are applicable only at a function level. \layout Itemize -SAVE - this will save all the current options. +SAVE - this will save all current options to the SAVE/RESTORE stack. + See RESTORE. \layout Itemize -RESTORE - will restore the saved options from the last save. - Note that SAVES & RESTOREs cannot be nested. - SDCC uses the same buffer to save the options each time a SAVE is called. +RESTORE - will restore saved options from the last save. + SAVEs & RESTOREs can be nested. + SDCC uses a SAVE/RESTORE stack: SAVE pushes current options to the stack, + RESTORE pulls current options from the stack. + See SAVE. \layout Itemize NOGCSE - will stop global subexpression elimination. @@ -5497,6 +7588,10 @@ NOOVERLAY - the compiler will not overlay the parameters and local variables of a function. \layout Itemize +LESS_PEDANTIC - the compiler will not warn you anymore for obvious mistakes, + you'r on your own now ;-( +\layout Itemize + NOLOOPREVERSE - Will not do loop reversal optimization \layout Itemize @@ -5521,18 +7616,18 @@ CALLEE-SAVES function1[,function2[,function3...]] - The compiler by default uses a caller saves convention for register saving across function calls, however this can cause unneccessary register pushing & popping when calling small functions from larger functions. - This option can be used to switch the register saving convention for the - function names specified. + This option can be used to switch off the register saving convention for + the function names specified. The compiler will not save registers when calling these functions, extra - code will be generated at the entry & exit for these functions to save - & restore the registers used by these functions, this can SUBSTANTIALLY + code need to be manually inserted at the entry & exit for these functions + to save & restore the registers used by these functions, this can SUBSTANTIALLY reduce code & improve run time performance of the generated code. - In future the compiler (with interprocedural analysis) will be able to - determine the appropriate scheme to use for each function call. + In the future the compiler (with interprocedural analysis) may be able + to determine the appropriate scheme to use for each function call. If ---callee-saves command line option is used, the function names specified in #pragma\SpecialChar ~ -CALLEE-SAVES is appended to the list of functions specified inthe - command line. +CALLEE-SAVES is appended to the list of functions specified in + the command line. \layout Standard The pragma's are intended to be used to turn-off certain optimizations which @@ -7542,6 +9637,9 @@ cc@sdcc.sourceforge.net'. in locating optimization problems. \layout Section +Compiler internals +\layout Subsection + The anatomy of the compiler \layout Standard @@ -8794,10 +10892,53 @@ mov dpl,a \SpecialChar ~ \SpecialChar ~ ret -\size default +\newline + +\layout Subsection + +A few words about basic block successors, predecessors and dominators +\layout Standard + +Successors are basic blocks that might execute after this basic block. +\newline +Predecessors are basic blocks that might execute before reaching this basic + block. +\newline +Dominators are basic blocks that WILL execute before reaching this basic + block. +\newline + +\layout Standard +[basic block 1] +\layout Standard + +if (something) +\layout Standard + +[basic block 2] +\layout Standard + +else +\layout Standard + +[basic block 3] +\layout Standard + +[basic block 4] \newline +\layout Standard + +a) succList of [BB2] = [BB4], of [BB3] = [BB4], of [BB1] = [BB2,BB3] +\layout Standard + +b) predList of [BB2] = [BB1], of [BB3] = [BB1], of [BB4] = [BB2,BB3] +\layout Standard + +c) domVect of [BB4] = BB1 ... + here we are not sure if BB2 or BB3 was executed but we are SURE that BB1 + was executed. \layout Section Acknowledgments