Overview

Screenshot of IOEMU

Welcome to SweetAda.

SweetAda is a lightweight development framework whose purpose is the implementation of Ada-based software systems.

The code produced by SweetAda is able to run on a wide range of machines, from ARM® embedded boards up to x86-64-class machines, as well as MIPS® machines and Virtex®/Spartan® PowerPC®/MicroBlaze® FPGAs. It could theoretically run even on System/390® IBM® mainframes (indeed it runs on the Hercules emulator). SweetAda is not an operating system, however it includes a set of both low- and high-level primitives and kernel services, like memory management, PCI bus handling, FAT mass-storage handling, which could be used as building blocks in the construction of complex software-controlled devices.

SweetAda has some distinctive characteristics, like:
- is ROMable
- uses a ZFP run-time
- has no dependencies; neither external libraries nor underlying code are needed

Screenshot of debugger

SweetAda has a complete toolchain (assembler, linker, Ada compiler and debugger), and optionally you could even use a machine emulator, which can execute the final output code inside a virtual target. In order to use SweetAda, a decent POSIX® environment with a Bash shell and GNU Make are required. For a Linux® workstation this is quite standard, while for a Windows® machine you can download and install either MSYS2 (preferred) or Cygwin®. Anyway, SweetAda toolchains for Windows have an integrated Make suited for a Windows CLI. Being completely makefile- and script- driven, SweetAda is completely configurable and has many hooks which allow an easy integration in a GUI environment such as, e.g., Eclipse, KDE Kate or Visual Studio Code. Insight debugger is also available.

SweetAda comes with high-quality GNU toolchains based on modern official FSF Binutils/GCC/GDB releases, unpatched and compiled with strictly controlled options. The emulators are mainly based on the latest QEMU™ official release, augmented with the IOEMU physical I/O system, which allows software code to interact with a visual environment.

Screenshot of MemecFX12

To make SweetAda generic and, at the same time, reliable, it is regularly tested against an heterogeneous set of machines which are able to successfully execute the system code, e.g.:
- PC-style PIIX3/PIIX4 motherboards (ROM-boot)
- DECstation 5000/133 MIPS R3000 (ROM-boot)
- Memec FX12 Virtex-4 PPC405 (JTAG-boot)
- DigiNS7520 board ARM7TDMI (JTAG-boot)
- Terasic DE10-Lite Nios®II softcore (JTAG-boot)
- MVME1600-011 PPC603 VME board (JTAG-boot)
- Force SPARC®/CPU-3CE VME board (ROM-boot)
- M5235BCC ColdFire development board (ROM-boot)
- SPARCstation™ 5 (ROM-boot)
- Spartan 3E MicroBlaze softcore (JTAG-boot)
- Raspberry Pi™ 3 ARMv8 (microSD-boot)

The SweetAda software code is compiled by a build machinery which enforces a very high severity level. Usefulness, simplicity and expandability rather than extreme or obscure optimizations are the key features behind the project. Nevertheless, SweetAda grants the possibility of employ appropriate customizations, down to machine code level, to satisfy specific needs.

SweetAda is in a state of steady growth. BSPs, device drivers, a TLSF memory allocator, TCP/IP basic functionalities, as well as low-level CAN primitives are under heavy development. More target machines and additional feautures/modules such as intrinsic floating point support and expanded SFP runtimes are scheduled in future releases, as well as language tools and system utilities, like ASIS.

Please note that the platform-specific code included in SweetAda is given as an example. The emphasis of SweetAda is not about operating system design, but rather on exploiting the Ada language everywhere.

SweetAda is distributed under the terms of the MIT license.

Release notes

Release notes

Documentation

Updated (but still incomplete) documentation is found in HTML format in the "documentation" directory of the GitHub repository.

Downloads

SweetAda is a GitHub project: https://github.com/gabriele-galeotti/SweetAda
All the software can be downloaded (faster) also at SourceForge SweetAda page: https://sourceforge.net/projects/sweetada/

SweetAda source code

Uncompress the RTS package in the same "rts" directory of the SweetAda top-level hierarchy. The LibGCC support files are assembler sources needed to make the code completely self-consistent (this is required for ARM, AVR, M68k, SH, SH4 and SPARC targets). Uncompress the package in the same "cpus" directory of the SweetAda top-level hierarchy. If you want to link with the standard LibGCC library the package can be ignored.
version all systems
SweetAda 0.8 - core sweetada-0.8.tar.gz
MD5: e8a347c344294c3db38519e73e6c9d9d
SweetAda 0.8 - LibGCC sweetada-libgcc-0.8.tar.gz
MD5: 948fd800859242d5c5481007ab4893a2
SweetAda 0.8 - RTS - AArch64 sweetada-rts-aarch64-sweetada-elf-0.8.tar.gz
MD5: 58f78c4d66c596320667f08d911a335d
SweetAda 0.8 - RTS - ARM sweetada-rts-arm-sweetada-eabi-0.8.tar.gz
MD5: 0e0681777e391556b81d79985d0d4ce0
SweetAda 0.8 - RTS - ARMeb sweetada-rts-armeb-sweetada-eabi-0.8.tar.gz
MD5: 34989cedca7bb1ec9049f6d1cc5dc3e1
SweetAda 0.8 - RTS - AVR sweetada-rts-avr-sweetada-elf-0.8.tar.gz
MD5: 92a699293944cbc784ac6a24fe965d15
SweetAda 0.8 - RTS - i686 sweetada-rts-i686-sweetada-elf-0.8.tar.gz
MD5: 1dd3c90c7a22487df88d9bff136f8710
SweetAda 0.8 - RTS - M68k sweetada-rts-m68k-sweetada-elf-0.8.tar.gz
MD5: a3374ba764bebb42decc7ab5b079131b
SweetAda 0.8 - RTS - MIPS sweetada-rts-mips-sweetada-elf-0.8.tar.gz
MD5: d93219c49b853056f78ca809033ec21f
SweetAda 0.8 - RTS - MIPS64 sweetada-rts-mips64-sweetada-elf-0.8.tar.gz
MD5: 47c1ea0c57a12a8f231f525862ace95b
SweetAda 0.8 - RTS - MicroBlaze sweetada-rts-microblaze-sweetada-elf-0.8.tar.gz
MD5: 7d28b97627bd0f5ebba4489073069293
SweetAda 0.8 - RTS - NiosII sweetada-rts-nios2-sweetada-elf-0.8.tar.gz
MD5: c45182d816f354947ff3c67d4b55faf4
SweetAda 0.8 - RTS - PowerPC sweetada-rts-powerpc-sweetada-elf-0.8.tar.gz
MD5: 549b76d14f89759563150638ebd8564e
SweetAda 0.8 - RTS - RISCV sweetada-rts-riscv-sweetada-elf-0.8.tar.gz
MD5: aa83951aef52ce30bd61bde006944923
SweetAda 0.8 - RTS - S/390 sweetada-rts-s390-sweetada-linux-0.8.tar.gz
MD5: c4a075fed9f94c9b46b81710cf9e71ec
SweetAda 0.8 - RTS - SuperH sweetada-rts-sh-sweetada-elf-0.8.tar.gz
MD5: a2c9135a069965ec5a7647f7ab6a8199
SweetAda 0.8 - RTS - SH4 sweetada-rts-sh4le-sweetada-elf-0.8.tar.gz
MD5: 379f4af54423075495d1d29cd05223ca
SweetAda 0.8 - RTS - SPARC sweetada-rts-sparc-sweetada-elf-0.8.tar.gz
MD5: 474aca13dd9e85694814253d91b83e25
SweetAda 0.8 - RTS - SPARC64 sweetada-rts-sparc64-sweetada-elf-0.8.tar.gz
MD5: 49b1b4d09a724d753c54e2997eefefdf
SweetAda 0.8 - RTS - x86_64 sweetada-rts-x86_64-sweetada-elf-0.8.tar.gz
MD5: 0f3571c94d275e90c0657b34a1b5b3d9

Toolchains - build 20210725 - Binutils 2.37 (L), 2.35 (W, M), GCC 11.1.0, GDB 10.2

target CPU Linux 64-bit Windows 64-bit OS X 64-bit
AArch64 aarch64-sweetada-elf-20210725L.tar.xz
MD5: 2eeb0a78687b76d455e92afe0c057115
aarch64-sweetada-elf-20210725W.zip
MD5: d74deaac5e36e8fafb3478858f7d4b23
aarch64-sweetada-elf-20210725M.tar.gz
MD5: 5012e0893b3ff4601f2ff52b6b644b9e
ARM arm-sweetada-eabi-20210725L.tar.xz
MD5: d86daca7edad3ec5065267bfa85b0677
arm-sweetada-eabi-20210725W.zip
MD5: b57abe120499a834986660c9452705ac
arm-sweetada-eabi-20210725M.tar.gz
MD5: 51aca7d8289bb8958272fdd66a2044d3
ARM
(big-endian)
armeb-sweetada-eabi-20210725L.tar.xz
MD5: 1c609a165c1de077c41fa43ceb3b581e
armeb-sweetada-eabi-20210725W.zip
MD5: cf7eca66c41d00b09830b97e1cefc88d
armeb-sweetada-eabi-20210725M.tar.gz
MD5: c7a092bd2faa92b8c2d3b28f6b290c32
AVR avr-sweetada-elf-20210725L.tar.xz
MD5: 9c881dbebca3c6438a8433be3b8463ad
avr-sweetada-elf-20210725W.zip
MD5: 68ebb2252dce0277aea70bc74f8d5cc0
avr-sweetada-elf-20210725M.tar.gz
MD5: c524278cacb2f4c001cee45da4694b2d
i686 i686-sweetada-elf-20210725L.tar.xz
MD5: b4baaa39e4ddc5aa4829ae16f21ee149
i686-sweetada-elf-20210725W.zip
MD5: e06541f7d1c1e6f133f88b86592524ce
i686-sweetada-elf-20210725M.tar.gz
MD5: 7f7e3a8b73f5ee0489e373e157600134
M68k
ColdFire
m68k-sweetada-elf-20210725L.tar.xz
MD5: 0847674098edc62b2462d2440b6974ba
m68k-sweetada-elf-20210725W.zip
MD5: d9f7bb9e92a5e4f69ce0509c322490ae
m68k-sweetada-elf-20210725M.tar.gz
MD5: 6915295ab0bc247e6e25e9469ead2dc9
MIPS mips-sweetada-elf-20210725L.tar.xz
MD5: 71f9cc13209ee01e3ed89a05fa5fd3a0
mips-sweetada-elf-20210725W.zip
MD5: 8202c16dd69e6b5139b9b3b7d8577bd5
mips-sweetada-elf-20210725M.tar.gz
MD5: 1ffe19f8e673c83ff9a2adff6c8c4831
MIPS64 mips64-sweetada-elf-20210725L.tar.xz
MD5: 2f21e69159496f5a6ab13341f5493de3
mips64-sweetada-elf-20210725W.zip
MD5: 67c4cf4585cf18c1043f17a7f78ec878
mips64-sweetada-elf-20210725M.tar.gz
MD5: 30fa263e56712e98e3b493884d0b559d
MicroBlaze microblaze-sweetada-elf-20210725L.tar.xz
MD5: a8a9dee7736ae71180f91cc0687c2a5d
microblaze-sweetada-elf-20210725W.zip
MD5: 08a8c98067b5698550f52c6478142235
microblaze-sweetada-elf-20210725M.tar.gz
MD5: c5022d4a4b53621c090ed3c1a35b79f2
NiosII nios2-sweetada-elf-20210725L.tar.xz
MD5: 033de6031a03511b7548442c395856c7
nios2-sweetada-elf-20210725W.zip
MD5: 231988199366814b0a33dfe5709f3def
nios2-sweetada-elf-20210725M.tar.gz
MD5: 27baf6afacbaa4b26c61f40654b5767a
PowerPC powerpc-sweetada-elf-20210725L.tar.xz
MD5: 3ca48b5868f1c11d9379b47ca17b191f
powerpc-sweetada-elf-20210725W.zip
MD5: 7ffa44516108a83df0db54fe05f4966e
powerpc-sweetada-elf-20210725M.tar.gz
MD5: b58ce4e31b9f61e740ec80b3ab04a060
RISCV riscv-sweetada-elf-20210725L.tar.xz
MD5: c4d4733d5413300fcccc3af77ea61f91
riscv-sweetada-elf-20210725W.zip
MD5: fb7805f5310ea3605bbd51e275b7ba09
riscv-sweetada-elf-20210725M.tar.gz
MD5: 952e7c6037e177c443eb09fea708e00d
S/390 s390-sweetada-linux-20210725L.tar.xz
MD5: 30fcba19badc39164325d8add3a0849e
s390-sweetada-linux-20210725W.zip
MD5: e5b98b70f9dfba3817e4e84f260c26ee
s390-sweetada-linux-20210725M.tar.gz
MD5: d87ef4990f2725c2be4bf7e2ac7ddbd9
SuperH sh-sweetada-elf-20210725L.tar.xz
MD5: f21467cbbc15db204ca645cb67bcc0f9
sh-sweetada-elf-20210725W.zip
MD5: cb0ddd9e5e062306c449382d22a301ce
sh-sweetada-elf-20210725M.tar.gz
MD5: 3f5f396a87b95aa2ba256601cac73e62
SH4 sh4le-sweetada-elf-20210725L.tar.xz
MD5: f78c8da3f6e8ad60ff05892fe8808860
sh4le-sweetada-elf-20210725W.zip
MD5: 23bc482095fc4a3fcd1f5ce0280e5f1e
sh4le-sweetada-elf-20210725M.tar.gz
MD5: e250152470d09ed1eea8f09cc78c8595
SPARC sparc-sweetada-elf-20210725L.tar.xz
MD5: f4ef17bb64b7caaf003c9363f49d5a31
sparc-sweetada-elf-20210725W.zip
MD5: 0ec2ab8a8b201e32b94d8b1d7283e3d5
sparc-sweetada-elf-20210725M.tar.gz
MD5: 8471b478690c6c2129e0bbfdd1561d25
SPARC64 sparc64-sweetada-elf-20210725L.tar.xz
MD5: 3bfdfaf22e5b2de2a70d66c6ecab0a0c
sparc64-sweetada-elf-20210725W.zip
MD5: 7db2920d056da130e2ecc947e609d326
sparc64-sweetada-elf-20210725M.tar.gz
MD5: 2fe263638f3d92c69d814f27c6044aac
x86-64 x86_64-sweetada-elf-20210725L.tar.xz
MD5: 324437ba3040460756dae09e952d22ac
x86_64-sweetada-elf-20210725W.zip
MD5: 4c7d1f03672ca765960b0b4302726f9e
x86_64-sweetada-elf-20210725M.tar.gz
MD5: a030f9f9e651328dc767916b50322b61

GPRbuild support - build 20200417

Note that GPRbuild is an optional component of the toolchain.
Linux 64-bit Windows 64-bit OS X 64-bit
gprbuild-20200417L.tar.xz
MD5: 80d633fa4b0765ef31600ed58ff0147d
gprbuild-20200417W.zip
MD5: c2010fe5dde3119a7f5e109aca56c94e
gprbuild-20200417M.tar.gz
MD5: a30d54a4b5bbb51da819a5db97b662b8

Insight debugger - build 20200417 - GDB 9.1

Note:
Insight requires Tcl 8.6.10, Tk 8.6.10, iTcl 4.2.0, iTk 4.1.0 and iWidgets 4.1.1.
Windows packages have libraries included, for Linux you should refer to your distribution package manager in order to download them.
target CPU Linux 64-bit Windows 64-bit OS X 64-bit
AArch64 insight-aarch64-sweetada-elf-20200417L.tar.xz
MD5: 40cc145c248567a5d804204abcaa45b8
insight-aarch64-sweetada-elf-20200417W.zip
MD5: 63e08cc88eceaed54f20ff48ec18bacf
N/A
ARM insight-arm-sweetada-eabi-20200417L.tar.xz
MD5: e62ce37dfc4787b6cd3a3a430b51d3b9
insight-arm-sweetada-eabi-20200417W.zip
MD5: cc763351bed5893995cdc2bf5acb0a0c
N/A
ARM
(big-endian)
N/A N/A N/A
AVR insight-avr-sweetada-elf-20200417L.tar.xz
MD5: 569c26c849c7fae1db8a1e14d8b135a8
insight-avr-sweetada-elf-20200417W.zip
MD5: 00ccd9fa850b15db26da5acedf07798a
N/A
i686 insight-i686-sweetada-elf-20200417L.tar.xz
MD5: f8a45fb0cc43716108d91d66d07fc5f8
insight-i686-sweetada-elf-20200417W.zip
MD5: 685090ae861ab32b1680d9dee1e4922f
N/A
M68k
ColdFire
insight-m68k-sweetada-elf-20200417L.tar.xz
MD5: 79c99493152c7f455e58dd7d218aa5c8
insight-m68k-sweetada-elf-20200417W.zip
MD5: 002205830b78981bc0cc51afba63218f
N/A
MIPS insight-mips-sweetada-elf-20200417L.tar.xz
MD5: 0a674a45b3a1a6c7e47ad821ae2ce1b5
insight-mips-sweetada-elf-20200417W.zip
MD5: 10d0133d02653bb4d2389025e0072dc1
N/A
MIPS64 insight-mips64-sweetada-elf-20200417L.tar.xz
MD5: db54ca8b286eb06b279ca19d9f1b8af5
insight-mips64-sweetada-elf-20200417W.zip
MD5: f026e45badde98554482f338abb6c425
N/A
MicroBlaze insight-microblaze-sweetada-elf-20200417L.tar.xz
MD5: 8d34ee9e7553b982ade1af4446ce8980
insight-microblaze-sweetada-elf-20200417W.zip
MD5: ea97b5bff9b042094ae1b3d6024098b7
N/A
NiosII insight-nios2-sweetada-elf-20200417L.tar.xz
MD5: 2163f2cfdbd37f19024d5c84321a7599
insight-nios2-sweetada-elf-20200417W.zip
MD5: b6679f98a071b912d6983628ad06b741
N/A
PowerPC insight-powerpc-sweetada-elf-20200417L.tar.xz
MD5: a1ad3c30f1dacb0d22e9e35372ec2b9c
insight-powerpc-sweetada-elf-20200417W.zip
MD5: 4b823f6a0549fb7a222dc8c4b96e0467
N/A
RISCV insight-riscv-sweetada-elf-20200417L.tar.xz
MD5: 841d413f6251e88918a3e37a1742acda
insight-riscv-sweetada-elf-20200417W.zip
MD5: 627516567c9ae068f6f81d3118d1a4a2
N/A
S/390 insight-s390-sweetada-linux-20200417L.tar.xz
MD5: eee313dab83f71c72058c2285cb9a8aa
insight-s390-sweetada-linux-20200417W.zip
MD5: 45462e30c62a8aaf2f9ec6055a7f1fc1
N/A
SuperH insight-sh-sweetada-elf-20200417L.tar.xz
MD5: 5f02057712519b997368272a0f12366f
insight-sh-sweetada-elf-20200417W.zip
MD5: 916dc927532adab8cd06ff1a3f69b8b7
N/A
SH4 insight-sh4le-sweetada-elf-20200417L.tar.xz
MD5: 7ec0c7bb2fe9dc652204b384997b57b4
insight-sh4le-sweetada-elf-20200417W.zip
MD5: 0d248bafc12b86e2571edb0b8714362a
N/A
SPARC insight-sparc-sweetada-elf-20200417L.tar.xz
MD5: cfc2ffd62c775946489ef45774773bd8
insight-sparc-sweetada-elf-20200417W.zip
MD5: 5af3341202da44f87cf56178aacabf92
N/A
SPARC64 insight-sparc64-sweetada-elf-20200417L.tar.xz
MD5: 63cfb6214517e094b6a155c8a4da7472
insight-sparc64-sweetada-elf-20200417W.zip
MD5: 7e8e180ff2ab382c307a8efc34fd18db
N/A
x86-64 insight-x86_64-sweetada-elf-20200417L.tar.xz
MD5: e4ded10ac59469cb96b3c829c4c2abe8
insight-x86_64-sweetada-elf-20200417W.zip
MD5: 48295c0ac35f37e9d83d5ade62e56ff1
N/A

Emulators - QEMU 6.0.0/5.2.0 - FS-UAE - GXemul

Note:
QEMU version is currently @ 6.0.0, but the release for OS/X is @ 5.2.0. Linux and Windows versions of QEMU are linked against SDL2 library (previously the Linux version was linked against GTK+3). The library is included only in Windows packages. FS-UAE requires libmpeg2 and OpenAL libraries. S/390 SweetAda emulation does not use QEMU; for S/390 emulation, you can download the Hercules emulator (possibly together with a X3270 emulator), which is not supplied here since the IOEMU library is not provided for this target, so a standard Hercules executable is fine.
target CPU Linux 64-bit Windows 64-bit OS X 64-bit
AArch64 qemu-aarch64-20210517L.tar.xz qemu-aarch64-20210517W.zip qemu-aarch64-20210517M.tar.gz
ARM qemu-arm-20210517L.tar.xz qemu-arm-20210517W.zip qemu-arm-20210517M.tar.gz
AVR qemu-avr-20210517L.tar.xz qemu-avr-20210517W.zip qemu-avr-20210517M.tar.gz
i686 qemu-i386-20210517L.tar.xz qemu-i386-20210517W.zip qemu-i386-20210517M.tar.gz
M68k/ColdFire qemu-m68k-20210517L.tar.xz qemu-m68k-20210517W.zip qemu-m68k-20210517M.tar.gz
M68k fs-uae.tar.xz N/A N/A
MIPS qemu-mips-20210517L.tar.xz qemu-mips-20210517W.zip qemu-mips-20210517M.tar.gz
MIPS64 qemu-mips64-20210517L.tar.xz qemu-mips64-20210517W.zip qemu-mips64-20210517M.tar.gz
MicroBlaze qemu-microblaze-20210517L.tar.xz qemu-microblaze-20210517W.zip qemu-microblaze-20210517M.tar.gz
NiosII qemu-nios2-20210517L.tar.xz qemu-nios2-20210517W.zip qemu-nios2-20210517M.tar.gz
PowerPC qemu-ppc-20210517L.tar.xz qemu-ppc-20210517W.zip qemu-ppc-20210517M.tar.gz
PowerPC64 qemu-ppc64-20210517L.tar.xz qemu-ppc64-20210517W.zip qemu-ppc64-20210517M.tar.gz
RISCV32 qemu-riscv32-20210517L.tar.xz qemu-riscv32-20210517W.zip qemu-riscv32-20210517M.tar.gz
RISCV64 qemu-riscv64-20210517L.tar.xz qemu-riscv64-20210517W.zip qemu-riscv64-20210517M.tar.gz
S/390 qemu-s390x-20210517L.tar.xz qemu-s390x-20210517W.zip N/A
SH4 gxemul.tar.xz N/A N/A
SPARC qemu-sparc-20210517L.tar.xz qemu-sparc-20210517W.zip qemu-sparc-20210517M.tar.gz
x86-64 qemu-x86_64-20210517L.tar.xz qemu-x86_64-20210517W.zip qemu-x86_64-20210517M.tar.gz

Additional downloads

Note:
The Tcl/Tk package should be installed in the same directory where SweetAda toolchains exist. Otherwise, specify the path to the tclsh executable in the top-level configuration.in.
Linux 64-bit Windows 64-bit OS X 64-bit
N/A Tcl/Tk 8.6.10 N/A

Contacts

My name is Gabriele Galeotti; I work as a software engineer. You can reach me at < gabriele dot galeotti at sweetada dot org >. Feel free to contact me for everything (chances are I will respond from another email account due to ISP spam restrictions on dynamic not-business-class websites).

POSIX is a registered trademark of the IEEE. Linux is a registered trademark of Linus Torvalds. Windows is a registered trademark of Microsoft Corp. OS X is a registered trademark of Apple Inc. Cygwin is a registered trademark of Red Hat, Inc. ARM is a registered trademark of ARM Ltd. ColdFire is a registered trademark of Motorola, Inc. MIPS is a registered trademark of MIPS Technologies, Inc. MicroBlaze and Virtex are trademarks and/or registered trademarks of Xilinx, Inc. Nios is a registered trademark of Altera Corp. PowerPC is a registered trademark of IBM Corp. SPARC is a registered trademark of SPARC International, Inc. Raspberry Pi is a trademark of the Raspberry Pi Foundation. IBM and System/390 are registered trademarks of IBM Corp. QEMU is a trademark of Fabrice Bellard. Other trademarks and trade names are properties of their respective owners.