SDCC - Small Device C Compiler

The SDCC 3.1.0 release is dedicated to the memory of Dennis M. Ritchie, father of the C programming language.

What is SDCC?

SDCC is a retargettable, optimizing ANSI - C compiler that targets the Intel 8051, Maxim 80DS390, Zilog Z80, Z180, Rabbit 2000 and the Motorola 68HC08 based MCUs. Work is in progress on supporting the Microchip PIC16, PIC18 and gbz80 targets. SDCC is Free Open Source Software, distributed under GNU General Public License (GPL).

Some of the features include:

  • SDCC sdas and sdld, a retargettable assembler and linker, based on ASXXXX, is Free Open Source Software, distributed under GNU General Public License (GPL).
  • extensive MCU specific language extensions, allowing effective use of the underlying hardware.
  • a host of standard optimizations such as global sub expression elimination, loop optimizations (loop invariant, strength reduction of induction variables and loop reversing), constant folding and propagation, copy propagation, dead code elimination and jump tables for 'switch' statements.
  • MCU specific optimizations, including a global register allocator.
  • adaptable MCU specific backend that should be well suited for other 8 bit MCUs
  • independent rule based peep hole optimizer.
  • a full range of data types: char (8 bits, 1 byte), short (16 bits, 2 bytes), int (16 bits, 2 bytes), long (32 bit, 4 bytes) and float (4 byte IEEE);
    very basic (no integer constants, multiplication, division, shifts or use as return value) support for long long 64 bit, 8 bytes) data types for the z80, z180, Rabbit 2000 and gbz80 targets.
  • the ability to add inline assembler code anywhere in a function.
  • the ability to report on the complexity of a function to help decide what should be re-written in assembler.
  • a good selection of automated regression tests.

SDCC also comes with the source level debugger SDCDB, using the current version of Daniel's s51 simulator.

SDCC was written by Sandeep Dutta and released under a GPL license. Since its initial release there have been numerous bug fixes and improvements. As of December 1999, the code was moved to SourceForge where all the "users turned developers" can access the same source tree. SDCC is constantly being updated with all the users' and developers' input.

AVR target is no longer maintained.

News

November 27th, 2011: Small Device C Compiler 3.1.0 released.

A new release of SDCC, the portable optimizing compiler for 8051, DS390, Z80, HC08, and PIC microprocessors is now available (http://sdcc.sourceforge.net). Sources, documentation and binaries compiled for x86 Linux, x86 MS Windows and universal Mac OS X are available.

SDCC 3.1.0 Feature List:

  • include/pic, non-free/include/pic, lib/pic, non-free/lib/pic renamed to */pic14
  • implemented --fomit-frame-pointer for mcs51
  • support for use of sdcc in z88dk (--reserve-regs-iy and --no-optsdcc-in-asm options; smallc calling convention)
  • new register allocator in the z80 and gbz80 ports (optimal when using --opt-code-size and a sufficiently high value for --max-allocs-per-node for the z80 port)
  • C99 designated initializers
  • added strxfrm() and strcoll() functions; strerror() is the only string handling function still missing
  • added support for pic18f2xk22/pic18f4xk22 family (requires gputils > 0.14.0 and --enable-new-pics configure flag)
  • added support for enhanced core pic14 devices (requires gputils > 0.14.0 and --enable-new-pics configure flag)
  • setjmp() / longjmp() for the z80 port
  • _Bool / bool for the hc08, pic16 and pic14 ports
  • sdcpp synchronized with GNU cpp 4.6.1
  • z180 port
  • very basic (no integer constants, multiplication, division, shifts or use as return value) support for data types long long, unsigned long long, int_fast64_t, int_least64_t, int64_t, uint_fast64_t, uint_least64_t, uint64_t in the z80, z180, r2k and gbz80 ports
  • r2k port for the Rabbit 2000 and Rabbit 3000

Numerous feature requests and bug fixes are included as well.

You can download the release from:
http://sourceforge.net/projects/sdcc/files/

What Platforms are Supported?

Linux - x86, Microsoft Windows - x86 and Mac OS X are the primary, so called "officially supported" platforms.

SDCC compiles natively on Linux and Mac OS X using gcc. Windows release and snapshot builds are made by cross compiling to mingw32 on a Linux host.

Windows 9x/NT/2000/XP users are recommended to use Cygwin (http://sources.redhat.com/cygwin/) or may try the unsupported Microsoft Visual C++ build scripts.

Downloading SDCC

See the Sourceforge download page for the last released version including source and binary packages for Linux - x86, Microsoft Windows - x86 and Mac OS X - ppc and i386.

SDCC is known to compile from the source code also on the following platforms:

  • Microsoft Windows - x86_64
  • Linux - x86_64
  • Linux - Alpha
  • Linux - IBM Power5
  • NetBSD - i386
  • NetBSD - Sparc64
  • FreeBSD - i386
  • SUN Solaris - i386
  • SUN Solaris - Sparc

SDCC is always under active development. Please consider downloading one of the snapshot builds if you have run across a bug, or if the above release is more than two months old.

Debian packages (many thanks to Aurelien Jarno <aurel32.AT.debian.org>):

RPM packages (thanks to Mandrake, Conectiva and PLD Linux distributions):

The latest development source code can be accessed using Subversion. The following will fetch the latest sources:

svn co https://sdcc.svn.sourceforge.net/svnroot/sdcc/trunk/sdcc sdcc

... will create the sdcc directory in your current directory and place all downloaded code there. You can browse the Subversion repository here.

SourceForge has further documentation on accessing the Subversion repository here.

Before reporting a bug, please check your SDCC version and build date using the -v option, and be sure to include the full version string in your bug report. For example:

sdcc/bin > sdcc -v
SDCC : mcs51/gbz80/z80/avr/ds390/pic14/TININative/xa51 2.3.8 (Feb 10 2004) (UNIX)

Support for SDCC

SDCC and the included support packages come with fair amounts of documentation and examples. When they aren't enough, you can find help in the places listed below. Here is a short check list of tips to greatly improve your chances of obtaining a helpful response.

  1. Attach the code you are compiling with SDCC. It should compile "out of the box". Snippets must compile and must include any required header files, etc. Incomplete information will hamper your chance of a timely response.
  2. Specify the exact command you use to run SDCC, or attach your Makefile.
  3. Specify the SDCC version (type "sdcc -v"), your platform and operating system.
  4. Provide an exact copy of any error message or incorrect output.

Please attempt to include these 4 important parts, as applicable, in all requests for support or when reporting any problems or bugs with SDCC. Though this will make your message lengthy, it will greatly improve your chance that SDCC users and developers will be able to help you. Some SDCC developers are frustrated by bug reports without code provided that they can use to reproduce and ultimately fix the problem, so please be sure to provide sample code if you are reporting a bug!

  • Web Page - you are (X) here.
  • Mailing list: [use "BUG REPORTING" below if you believe you have found a bug.]
    • Send to the developer list <sdcc-devel.AT.lists.sourceforge.net> - for development work on SDCC
    • Send to the user list <sdcc-user.AT.lists.sourceforge.net> - [preferred] all developers and all users.
    • Subscribe to the user list
  • Bug Reporting - if you have a problem using SDCC, we need to hear about it. Please attach code to reproduce the problem, and be sure to provide your email address so a developer can contact you if they need more information to investigate and fix the bug.
  • Website/Documentation Issues - Please report erroneous, missing or outdated information
  • SDCC Message Forum - an account on Sourceforge is needed if you're going to post and reply. Short easy online fill-in the blanks.
  • Open Knowledge Web Site - Run by Thorsten Godau <thorsten.godau.AT.gmx.de>

Who is SDCC?

  • Sandeep Dutta <sandeep.AT.users.sourceforge.net> - original author (SDCC's version of Torvalds)
  • Jean Loius-VERN <jlvern.AT.writeme.com> - substantial improvement in the back-end code generation.
  • Daniel Drotos <drdani.AT.mazsola.iit.uni-miskolc.hu> - Freeware simulator for 8051.
  • Kevin Vigor <kevin.AT.vigor.nu> - numerous enhancements and bug fixes to the Dallas ds390 tree.
  • Johan Knol <johan.knol.AT.users.sourceforge.net> - testing and patching ds390 tree, bug stompper extrodanaire
  • Scott Dattalo <scott.AT.dattalo.com> - sdcc for Microchip PIC controller target
  • Karl Bongers <karl.AT.turbobit.com> - mcs51 support, winbin builds, and an occasional bug.
  • Bernhard Held <bernhard.AT.bernhardheld.de> - snpshot builds and general housekeeping
  • Frieder Ferlemann <Frieder.Ferlemann.AT.web.de> - contributions to the documentation and last stages of code generation
  • Jesus Calvino-Fraga <jesusc.AT.ece.ubc.ca> - math functions, AOMF51, linker improvements
  • Borut Ražem <borut.razem.AT.gmail.com> - WIN32 MSC, cygwin and mingw ports, NSIS installer, preprocessor and front end improvements, bug fixing, snapshot builds on Distibuted Compile Farm, ...
  • Vangelis Rokas <vrokas.AT.otenet.gr> - PIC16 taget development for Microchip PIC18F microcontrollers
  • Erik Petrich <epetrich.AT.users.sourceforge.net> - Bug fixes and improvements for the front end, 8051, z80 and hc08
  • Dave Helton <dave.AT.kd0yu.com> - website design
  • Paul Stoffregen <paul.AT.pjrc.com> - mcs51 optimizations and website maintenance.
  • Michael Hope <michaelh.AT.juju.net.nz> - initial Z80 target, additional coding and bug fixes.
  • Maarten Brock <sourceforge.brock.AT.dse.nl> - several bug fixes and improvements, esp. for mcs51 target
  • Raphael Neider <RNeider.AT.web.de> - bug fixes and optimizations for PIC16, completion of the PIC14 target
  • Philipp Klaus Krause <pkk.AT.spth.de> - z80 and gbz80 bug fixes and optimizations, z180 target
  • Leland Morrison <enigmalee.AT.sourceforget.net> - Rabbit 2000 support: the target code generator, sdasrab assembler and ucsim support

SDCC has had help from a number of external sources, including:

  • Alan Baldwin <baldwin.AT.shop-pdp.kent.edu> - Initial version of ASXXXX  and  ASLINK.
  • John Hartman <noice.AT.noicedebugger.com> - Porting ASXXXX and ASLINK for 8051.
  • Jans J Boehm <boehm.AT.sgi.com> and Alan J Demers - Conservative garbage collector for C & C++.
  • Dmitry S. Obukhov <dso.AT.usa.net> - malloc and serial I/O routines.
  • The GCC development team - for the GNU C preprocessor
  • Malini Dutta <malini.AT.mediaone.net> - Sandeep's wife, for her patience and support.

Past news

November 22nd, 2011: SDCC 3.1.0 RC3 released.

SDCC 3.1.0 Release Candidate 3 source, doc and binary packages for x86 Linux, 32 bit Windows and universal Mac OS X are available at: http://sourceforge.net/projects/sdcc/files/snapshot_builds/sdcc-3.1.0-rc3.

November 18th, 2011: SDCC 3.1.0 RC2 released.

SDCC 3.1.0 Release Candidate 2 source, doc and binary packages for x86 Linux, 32 bit Windows and universal Mac OS X are available at: http://sourceforge.net/projects/sdcc/files/snapshot_builds/sdcc-3.1.0-rc2.

November 6th, 2011: SDCC 3.1.0 RC1 released.

SDCC 3.1.0 Release Candidate 1 source, doc and binary packages for x86 Linux, 32 bit Windows and universal Mac OS X are available at: http://sourceforge.net/projects/sdcc/files/snapshot_builds/sdcc-3.1.0-rc1.

Previous News


This site is hosted by SourceForge.net Logo Valid XHTML 1.0 Transitional
Valid CSS!

Webmaster

Last updated:
January 24, 2012 13:08:06.