\layout Comment
-Please note: double dashed options (e.g.
+Please note: double dashed longoptions (e.g.
--version) need three dashes in this document to be visable in html and
pdf output.
\layout Title
\newline
\newline
-SDCC also provides an option (---cyclomatic) to report the relative complexity
+SDCC also provides an option (--cyclomatic) to report the relative complexity
of a function.
These functions can then be further optimized, or hand coded in assembly
if needed.
\newline
The latest version can be downloaded from
-\begin_inset LatexCommand \htmlurl{http://sdcc.sourceforge.net/}
+\begin_inset LatexCommand \url{http://sdcc.sourceforge.net/}
\end_inset
(8 bits) which is not ANSI compliant
\layout Itemize
-the default directory where include, library and documention files are stored
- is now in /usr/local/share
+the default directory for gcc-builds where include, library and documention
+ files are stored is now in /usr/local/share
\layout Itemize
char type parameters to vararg functions are casted to int unless explicitly
\layout Standard
The SDCC home page at
-\begin_inset LatexCommand \htmlurl{http://sdcc.sourceforge.net/}
+\begin_inset LatexCommand \url{http://sdcc.sourceforge.net/}
\end_inset
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
+<lyxtabular version="3" rows="8" columns="3">
+<features>
+<column alignment="left" valignment="top" leftline="true" width="0in">
+<column alignment="left" valignment="top" leftline="true" width="0in">
+<column alignment="left" valignment="top" leftline="true" rightline="true" width="0in">
+<row topline="true" bottomline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Variable
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+default
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Win32 builds
+\end_inset
+</cell>
+</row>
+<row topline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\emph on
+PREFIX
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+/usr/local
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\backslash
+sdcc
+\end_inset
+</cell>
+</row>
+<row topline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\emph on
+EXEC_PREFIX
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\emph on
+$PREFIX
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\emph on
+$PREFIX
+\end_inset
+</cell>
+</row>
+<row topline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\emph on
+BINDIR
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\emph on
+$EXECPREFIX
+\emph default
+/bin
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\emph on
+$EXECPREFIX
+\emph default
+
+\backslash
+bin
+\end_inset
+</cell>
+</row>
+<row topline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\emph on
+DATADIR
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\emph on
+$PREFIX
+\emph default
+/share
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\emph on
+$PREFIX
+\end_inset
+</cell>
+</row>
+<row topline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\emph on
+DOCDIR
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\emph on
+$DATADIR
+\emph default
+/sdcc/doc
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\emph on
+$DATADIR
+\emph default
+
+\backslash
+doc
+\end_inset
+</cell>
+</row>
+<row topline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\emph on
+INCLUDE_DIR_SUFFIX
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+sdcc/include
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+include
+\end_inset
+</cell>
+</row>
+<row topline="true" bottomline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\emph on
+LIB_DIR_SUFFIX
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+sdcc/lib
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+lib
+\end_inset
+</cell>
+</row>
+</lyxtabular>
+
+\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
+<lyxtabular version="3" rows="4" columns="3">
+<features>
+<column alignment="left" valignment="top" leftline="true" width="0in">
+<column alignment="left" valignment="top" leftline="true" width="0in">
+<column alignment="left" valignment="top" leftline="true" rightline="true" width="0in">
+<row topline="true" bottomline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Variable (computed)
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+default
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Win32 builds
+\end_inset
+</cell>
+</row>
+<row topline="true" bottomline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\emph on
+BIN2DATA_DIR
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+../share
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+..
+\backslash
+
+\end_inset
+</cell>
+</row>
+<row bottomline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\emph on
+PREFIX2BIN_DIR
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+bin
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+bin
+\end_inset
+</cell>
+</row>
+<row bottomline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\emph on
+PREFIX2DATA_DIR
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+share/sdcc
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+\end_inset
+</cell>
+</row>
+</lyxtabular>
+
+\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
+<lyxtabular version="3" rows="2" columns="3">
+<features>
+<column alignment="left" valignment="top" leftline="true" width="0in">
+<column alignment="left" valignment="top" leftline="true" width="0in">
+<column alignment="left" valignment="top" leftline="true" rightline="true" width="0in">
+<row topline="true" bottomline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Path
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+default
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Win32 builds
+\end_inset
+</cell>
+</row>
+<row topline="true" bottomline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\emph on
+$EXEC_PREFIX
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+/usr/local/bin
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\backslash
+sdcc
+\backslash
+bin
+\end_inset
+</cell>
+</row>
+</lyxtabular>
+
+\end_inset
+
+
+\newline
+
+\newline
+2.
+ Include files
+\layout Standard
+
+
+\begin_inset Tabular
+<lyxtabular version="3" rows="2" columns="3">
+<features>
+<column alignment="block" valignment="top" leftline="true" width="1.6in">
+<column alignment="left" valignment="top" leftline="true" width="0in">
+<column alignment="center" valignment="top" leftline="true" rightline="true" width="0in">
+<row topline="true" bottomline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Path
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+default
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Win32 builds
+\end_inset
+</cell>
+</row>
+<row topline="true" bottomline="true">
+<cell alignment="left" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\emph on
+$DATADIR/
+\newline
+$INCLUDE_DIR_SUFFIX
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+/usr/local/share/sdcc/include
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\backslash
+sdcc
+\backslash
+include
+\end_inset
+</cell>
+</row>
+</lyxtabular>
+
+\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
+<lyxtabular version="3" rows="2" columns="3">
+<features>
+<column alignment="left" valignment="top" leftline="true" width="0in">
+<column alignment="left" valignment="top" leftline="true" width="0in">
+<column alignment="left" valignment="top" leftline="true" rightline="true" width="0in">
+<row topline="true" bottomline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Path
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+default
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Win32 builds
+\end_inset
+</cell>
+</row>
+<row topline="true" bottomline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\emph on
+$DATADIR/$LIB_DIR_SUFFIX
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+/usr/local/share/sdcc/lib
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\backslash
+sdcc
+\backslash
+lib
+\end_inset
+</cell>
+</row>
+</lyxtabular>
+
+\end_inset
+
+
+\newline
+
+\newline
+4.
+ Documentation
+\layout Standard
+
+
+\begin_inset Tabular
+<lyxtabular version="3" rows="2" columns="3">
+<features>
+<column alignment="left" valignment="top" leftline="true" width="0in">
+<column alignment="left" valignment="top" leftline="true" width="0in">
+<column alignment="left" valignment="top" leftline="true" rightline="true" width="0in">
+<row topline="true" bottomline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Path
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+default
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Win32 builds
+\end_inset
+</cell>
+</row>
+<row topline="true" bottomline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\emph on
+$DOCDIR
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+/usr/local/share/sdcc/doc
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\backslash
+sdcc
+\backslash
+doc
+\end_inset
+</cell>
+</row>
+</lyxtabular>
+
+\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
+<lyxtabular version="3" rows="4" columns="3">
+<features>
+<column alignment="left" valignment="top" leftline="true" width="0in">
+<column alignment="left" valignment="top" leftline="true" width="0in">
+<column alignment="left" valignment="top" leftline="true" rightline="true" width="0in">
+<row topline="true" bottomline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Search path
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+default
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Win32 builds
+\end_inset
+</cell>
+</row>
+<row topline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+$SDCC_HOME/
+\emph on
+$PPREFIX2BIN_DIR
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+$SDCC_HOME/bin
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+$SDCC_HOME
+\backslash
+bin
+\end_inset
+</cell>
+</row>
+<row topline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Path of argv[0] (if available)
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Path of argv[0]
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Path of argv[0]
+\end_inset
+</cell>
+</row>
+<row topline="true" bottomline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+$PATH
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+$PATH
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+$PATH
+\end_inset
+</cell>
+</row>
+</lyxtabular>
+
+\end_inset
+
+
+\newline
+
+\newline
+2.
+ Include files
+\newline
+
+\begin_inset Tabular
+<lyxtabular version="3" rows="6" columns="3">
+<features>
+<column alignment="block" valignment="top" leftline="true" width="1.5in">
+<column alignment="block" valignment="top" leftline="true" width="1.5in">
+<column alignment="left" valignment="top" leftline="true" rightline="true" width="0in">
+<row topline="true" bottomline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Search path
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+default
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Win32 builds
+\end_inset
+</cell>
+</row>
+<row topline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+---I dir
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+---I dir
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+---I dir
+\end_inset
+</cell>
+</row>
+<row topline="true">
+<cell alignment="left" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+$SDCC_INCLUDE
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+$SDCC_INCLUDE
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+$SDCC_INCLUDE
+\end_inset
+</cell>
+</row>
+<row topline="true">
+<cell alignment="left" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+$SDCC_HOME/
+\newline
+
+\emph on
+$PREFIX2DATA_DIR/
+\newline
+$INCLUDE_DIR_SUFFIX
+\end_inset
+</cell>
+<cell alignment="left" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+$SDCC_ HOME/
+\newline
+share/sdcc/
+\newline
+include
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+$SDCC_HOME
+\backslash
+include
+\end_inset
+</cell>
+</row>
+<row topline="true">
+<cell alignment="left" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+path(argv[0])/
+\newline
+
+\emph on
+$BIN2DATADIR/
+\emph default
+
+\newline
+
+\emph on
+$INCLUDE_DIR_SUFFIX
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\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
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+path(argv[0])
+\backslash
+..
+\backslash
+include
+\end_inset
+</cell>
+</row>
+<row topline="true" bottomline="true">
+<cell alignment="left" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\emph on
+$DATADIR/
+\emph default
+
+\newline
+
+\emph on
+$INCLUDE_DIR_SUFFIX
+\end_inset
+</cell>
+<cell alignment="left" valignment="top" topline="true" leftline="true" usebox="none">
+\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.
+/usr/local/share/sdcc/
\newline
-Windows MSVC and Borland builds will install in one single tree (e.g.
- /sdcc) with subdirs bin, lib, include and doc.
+include
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+(not on Win32)
+\end_inset
+</cell>
+</row>
+</lyxtabular>
+
+\end_inset
+
+
\newline
\newline
-The paths searched when running the compiler are as follows (the first catch
- wins):
-\layout Enumerate
+ The option ---nostdinc disables the last two search paths.
+\newline
-Binary files (preprocessor, assembler and linker):
\newline
-- the path of argv[0] (if available)
+3.
+ Library files
\newline
-- getenv(
+With the exception of
\begin_inset Quotes sld
\end_inset
-SDCC_BIN_PATH
+---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
-- getenv(
-\begin_inset Quotes sld
+
+\begin_inset Tabular
+<lyxtabular version="3" rows="6" columns="3">
+<features>
+<column alignment="block" valignment="top" leftline="true" width="1.7in">
+<column alignment="left" valignment="top" leftline="true" width="1.2in">
+<column alignment="block" valignment="top" leftline="true" rightline="true" width="1.2in">
+<row topline="true" bottomline="true">
+<cell alignment="left" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Search path
\end_inset
+</cell>
+<cell alignment="left" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
-SDCCHOME
-\begin_inset Quotes srd
+\layout Standard
+
+default
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+Win32 builds
+\end_inset
+</cell>
+</row>
+<row topline="true">
+<cell alignment="left" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+---L dir
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+---L dir
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+---L dir
+\end_inset
+</cell>
+</row>
+<row topline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+$SDCC_LIB/
+\newline
+
+\emph on
+<model>
\end_inset
+</cell>
+<cell alignment="left" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
-)/bin
+$SDCC_LIB/
\newline
-- $PATH
-\layout Enumerate
-Include files:
+\emph on
+<model>
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+$SDCC_LIB
+\backslash
+
\newline
-- -I dir
+
+\emph on
+<model>
+\end_inset
+</cell>
+</row>
+<row topline="true">
+<cell alignment="left" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+$SDCC_HOME/
\newline
-- getenv(
-\begin_inset Quotes sld
+
+\emph on
+$PREFIX2DATA_DIR/
+\newline
+$LIB_DIR_SUFFIX/<model>
+\end_inset
+</cell>
+<cell alignment="left" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+$SDCC_HOME/
+\newline
+share/sdcc/
+\newline
+lib/
+\emph on
+<model>
+\end_inset
+</cell>
+<cell alignment="left" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+$SDCC_HOME
+\backslash
+lib
+\backslash
+
+\emph on
+
+\newline
+<model>
+\end_inset
+</cell>
+</row>
+<row topline="true">
+<cell alignment="left" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+path(argv[0])/
+\newline
+
+\emph on
+$BIN2DATADIR/
+\emph default
+
+\newline
+
+\emph on
+$LIB_DIR_SUFFIX/<model>
+\end_inset
+</cell>
+<cell alignment="left" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+path(argv[0])/
+\newline
+../sdcc/lib/
+\emph on
+<model>
+\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 ~
+\SpecialChar ~
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+path(argv[0])
+\backslash
+
+\newline
+..
+\backslash
+lib
+\backslash
+
+\emph on
+<model>
+\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 ~
+
\end_inset
+</cell>
+</row>
+<row topline="true" bottomline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
-SDCC_INCLUDE_PATH
-\begin_inset Quotes srd
-\end_inset
+\layout Standard
-)
+
+\emph on
+$DATADIR/
\newline
-- getenv(
-\begin_inset Quotes sld
+$LIB_DIR_SUFFIX/<model>
\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
-SDCCHOME)/include
-\newline
-- /usr/local/share/sdcc/include (gcc builds)
-\newline
-- path(arv[0])/../include and then /sdcc/include (as a last resort for windoze
- msvc and borland builds)
-\layout Enumerate
+\layout Standard
-Library files (the
-\shape italic
-model
-\shape default
- is auto-appended by the compiler, e.g.
- small, large, z80, ds390 etc.):
-\newline
-- -L dir
+/usr/local/share/sdcc/
\newline
-- getenv(
-\begin_inset Quotes sld
-\end_inset
-
-SDCC_LIB_PATH
-\begin_inset Quotes srd
+lib/
+\emph on
+<model>
\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
-)/
-\shape italic
-model
-\shape default
+\layout Standard
-\newline
-- getenv(
-\begin_inset Quotes sld
+(not on Win32)
\end_inset
+</cell>
+</row>
+</lyxtabular>
-SDCCHOME
-\begin_inset Quotes srd
\end_inset
-)/lib/
-\shape italic
-model
-\shape default
-\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
+\layout Comment
-Documentation (although never really searched for, you have to do that yourself
- :):
-\newline
-- getenv(
-\begin_inset Quotes sld
-\end_inset
+Don't delete any of the stray spaces in the table above without checking
+ the HTML output (last line)!
+\layout Standard
-SDCCHOME
-\begin_inset Quotes srd
-\end_inset
+\SpecialChar ~
-)/doc
-\newline
-- /usr/local/share/sdcc/doc (gcc builds)
\newline
-- /sdcc/doc (windoze msvc and borland builds)
-\layout Standard
-
-So, for windoze it is highly recommended to set the environment variable
- SDCCHOME to prevent needless usage of -I and -L.
+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
\series default
.src
\series medium
-.tgz.
+.t
+\series default
+ar.
+\series medium
+gz.
\layout Enumerate
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
"
\series default
This copies the binary executables, the include files, the libraries and
the documentation to the install directories.
-\layout Subsection
+\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
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.
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
bin, and you can compile using sdcc.
\layout Subsubsection
-Windows Install Using Borland ......
-\layout Standard
+Windows Install Using Borland
+\layout Enumerate
+From the sdcc directory, run the command "make -f Makefile.bcc".
+ This should regenerate all the .exe files in the bin directory except for
+ sdcdb.exe (which currently doesn't build under Borland C++).
+\layout Enumerate
-\shape italic
-<pending>
-\layout Subsection
+If you modify any source files and need to rebuild, be aware that the dependanci
+es may not be correctly calculated.
+ The safest option is to delete all .obj files and run the build again.
+ From a Cygwin BASH prompt, this can easily be done with the commmand:
+\newline
-Testing out the SDCC Compiler
-\layout Standard
+\newline
-The first thing you should do after installing your SDCC compiler is to
- see if it runs.
- Type
\family sans
\series bold
-"sdcc ---version"
+find .
+
+\backslash
+( -name '*.obj' -o -name '*.lib' -o -name '*.rul'
+\backslash
+) -print -exec rm {}
+\backslash
+;
\family default
\series default
- at the prompt, and the program should run and tell you the version.
- If it doesn't run, or gives a message about not finding sdcc program, then
- you need to check over your installation.
- Make sure that the sdcc bin directory is in your executable search path
- defined by the PATH environment setting (see the Trouble-shooting section
- for suggestions).
- Make sure that the sdcc program is in the bin folder, if not perhaps something
- did not install correctly.
-\newline
-
-\newline
-
-\series medium
-SDCC binaries are commonly installed in a directory arrangement like this:
-\series default
-
-\newline
\newline
-\begin_inset Tabular
-<lyxtabular version="3" rows="3" columns="2">
-<features>
-<column alignment="left" valignment="top" leftline="true" width="0(null)">
-<column alignment="left" valignment="top" leftline="true" rightline="true" width="0(null)">
-<row topline="true" bottomline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\layout Standard
-
-/
-\series medium
-usr/local/bin
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\layout Standard
-
-
-\series medium
-Holds executables(sdcc, s51, aslink,
-\series default
-...
-\series medium
-)
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\layout Standard
-
-/
-\series medium
-usr/local/share/sdcc/lib
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\layout Standard
+\newline
+or on Windows NT/2000/XP from the command prompt with the commmand:
+\newline
+\family sans
+\series bold
-\series medium
-Holds common C
+\newline
+del /s *.obj *.lib *.rul
+\family default
\series default
-libraries
-\end_inset
-</cell>
-</row>
-<row topline="true" bottomline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
+ from the sdcc directory.
+\layout Subsection
+Building the Documentation
\layout Standard
-/
-\series medium
-usr/local/share/sdcc/include
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
+...
+ coming soon
+\layout Subsection
+Testing out the SDCC Compiler
\layout Standard
+The first thing you should do after installing your SDCC compiler is to
+ see if it runs.
+ Type
+\family sans
+\series bold
+"sdcc ---version"
+\family default
+\series default
+ at the prompt, and the program should run and tell you the version.
+ If it doesn't run, or gives a message about not finding sdcc program, then
+ you need to check over your installation.
+ Make sure that the sdcc bin directory is in your executable search path
+ defined by the PATH environment setting (see the Trouble-shooting section
+ for suggestions).
+ Make sure that the sdcc program is in the bin folder, if not perhaps something
+ did not install correctly.
+\newline
+
+\newline
\series medium
-Holds common C header files
+SDCC
+\series default
+is commonly installed as described in section
+\begin_inset Quotes sld
\end_inset
-</cell>
-</row>
-</lyxtabular>
+Install and search paths
+\begin_inset Quotes srd
\end_inset
\series medium
Make sure the compiler works on a very simple example.
- Type in the following test.c program using your favorite editor:
+ Type in the following test.c program using your favorite
+\series default
+ascii
+\series medium
+editor:
\series default
\newline
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
-\family typewriter
+\family sans
+\series bold
./configure 2>&1 | tee configure.log
\family default
+\series default
\newline
\newline
-\family typewriter
+\family sans
+\series bold
make 2>&1 | tee make.log
\family default
+\series default
\newline
command does.
\layout Standard
-This will install the compiler, other executables and libraries in to the
- appropriate system directories.
- The default is to copy the executables to /usr/local/bin and the libraries
- and header files to /usr/local/share/sdcc/lib and /usr/local/share/sdcc/include.
- On most systems you will need super-user privilages to do this.
-\layout Subsection
-
-Advanced Install Options
-\layout Standard
-
-The
-\begin_inset Quotes eld
-\end_inset
-
-configure
-\begin_inset Quotes erd
-\end_inset
-
- command has several options.
- The most commonly used option is ---prefix=<directory name>, where <directory
- name> is the final location for the sdcc executables and libraries, (default
- location is /usr/local).
- The installation process will create the following directory structure
- under the <directory name> specified (if they do not already exist).
-
-\newline
-
-\newline
-bin/ - binary exectables (add to PATH environment variable)
-\newline
-bin/share/
-\newline
-bin/share/sdcc/include/ - include header files
-\newline
-bin/share/sdcc/lib/
-\newline
-bin/share/sdcc/lib/small/ - Object & library files for small model library
-\newline
-bin/share/sdcc/lib/large/ - Object & library files for large model library
-\newline
-bin/share/sdcc/lib/ds390/ - Object & library files for DS80C390 library
-\newline
-bin/share/sdcc/lib/z80/ - Object & library files for Z80 library
-\newline
-
-\newline
-The command
-\family sans
-\series bold
-
+This will install the compiler, other executables libraries and include
+ files in to the appropriate directories.
+ See section
\begin_inset Quotes sld
\end_inset
-./configure ---prefix=/usr/local
-\begin_inset Quotes erd
+Install and Search PATHS
+\begin_inset Quotes srd
\end_inset
-
-\family default
-\series default
-will configure the compiler to be installed in directory /usr/local.
+.
+\newline
+On most systems you will need super-user privilages to do this.
\layout Subsection
Components of SDCC
\newline
You might want to look at the files which are installed in <installdir>.
- At the time of this writing, we find the following programs:
+ At the time of this writing, we find the following programs for gcc-builds:
\newline
\newline
In <installdir>/share/sdcc/lib
\layout Itemize
-the sources of the runtime library and the subdirs small large and ds390
- with the precompiled relocatables.
+the subdirs src and small, large, z80, gbz80 and ds390 with the precompiled
+ relocatables.
\layout Standard
In <installdir>/share/sdcc/doc
\family typewriter
\shape italic
-<todo: is this thing alive?>
+<todo: is this thing still alive?>
\newline
\newline
\newline
sourcefile.cdb - An optional file (with ---debug) containing debug information
\newline
+sourcefile.dump* - Dump file to debug the compiler it self (with ---dumpall)
+ (see section
+\begin_inset Quotes sld
+\end_inset
+Anatomy of the compiler
+\begin_inset Quotes srd
+\end_inset
+
+).
\layout Subsubsection
Projects with Multiple Source Files
\labelwidthstring 00.00.0000
-\series bold
--o\SpecialChar ~
-<path/file>
-\series default
-the output path resp.
- file where everything will be placed
-\layout List
-\labelwidthstring 00.00.0000
-
-
\series bold
-L\SpecialChar ~
---lib-path
\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
\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
\labelwidthstring 00.00.0000
+\series bold
+-o\SpecialChar ~
+<path/file>
+\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
-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
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
\begin_inset Tabular
<lyxtabular version="3" rows="6" columns="3">
<features>
-<column alignment="center" valignment="top" leftline="true" width="0(null)">
-<column alignment="center" valignment="top" leftline="true" width="0(null)">
-<column alignment="center" valignment="top" leftline="true" rightline="true" width="0(null)">
+<column alignment="center" valignment="top" leftline="true" width="0in">
+<column alignment="center" valignment="top" leftline="true" width="0in">
+<column alignment="center" valignment="top" leftline="true" rightline="true" width="0in">
<row topline="true" bottomline="true">
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
\begin_inset Text
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,
\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.
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
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
Use the smallest data type to represent your data-value.
If it is known in advance that the value is going to be less than 256 then
- use a 'char' instead of a 'short' or 'int'.
+ use an 'unsigned char' instead of a 'short' or 'int'.
\layout Itemize
Use unsigned when it is known in advance that the value is not going to
variables (induction).
\layout Itemize
-Since the compiler does not do implicit integral promotion, the programmer
- should do an explicit cast when integral promotion is required.
+Since the compiler does not always do implicit integral promotion, the programme
+r should do an explicit cast when integral promotion is required.
\layout Itemize
Reducing the size of division, multiplication & modulus operations can reduce
in locating optimization problems.
\layout Section
+Compiler internals
+\layout Subsection
+
The anatomy of the compiler
\layout Standard
\size footnotesize
Sample.c(11:15:12:1) iTemp6 [lr5:16]{_near * int}[r0] = iTemp6 [lr5:16]{_near
- * int}[r0] +
-\layout Standard
-
-
-\size footnotesize
-0x2 {short}
+ * int}[r0] + 0x2 {short}
\layout Standard
\size footnotesize
Sample.c(16:27:31:1) iTemp2 [lr18:40]{short}[r2] = iTemp2 [lr18:40]{short}[r2]
- +
-\layout Standard
-
-
-\size footnotesize
-ITemp21 [lr21:38]{short}[r4]
+ + ITemp21 [lr21:38]{short}[r4]
\layout Standard
\size footnotesize
Sample.c(17:30:34:1) iTemp11 [lr19:40]{short}[r3] = iTemp11 [lr19:40]{short}[r3]
- +
-\layout Standard
-
-
-\size footnotesize
-iTemp15 [lr29:30]{short}[r1]
+ + iTemp15 [lr29:30]{short}[r1]
\layout Standard
\size footnotesize
Sample.c(20:40:49:0) iTemp24 [lr40:41]{short}[DPTR] = iTemp2 [lr18:40]{short}[r2]
- +
+ + ITemp11 [lr19:40]{short}[r3]
\layout Standard
\size footnotesize
-ITemp11 [lr19:40]{short}[r3]
+Sample.c(20:41:50:0) ret iTemp24 [lr40:41]{short}
\layout Standard
\size footnotesize
-sample.c(20:41:50:0) ret iTemp24 [lr40:41]{short}
+Sample.c(20:42:51:0)_return($8) :
\layout Standard
\size footnotesize
-sample.c(20:42:51:0)_return($8) :
-\layout Standard
-
-
-\size footnotesize
-sample.c(20:43:52:0) eproc _function [lr0:0]{ ia0 re0 rm0}{function short}
+Sample.c(20:43:52:0) eproc _function [lr0:0]{ ia0 re0 rm0}{function short}
\size default
\newline
\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