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.

SweetAda is a FOSDEM 2022 project: https://fosdem.org/2022/schedule/event/ada_sweetada/

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

version all systems
SweetAda 0.10 SweetAda-0.10.tar.gz
MD5: 4ad505ef269fb0921a3f8f5fdd6b08de

Toolchains - build 20220429 - Binutils 2.38, GCC 11.3.0, GDB 11.2

target CPU Linux 64-bit Windows 64-bit
AArch64 aarch64-sweetada-elf-20220429L.tar.xz
MD5: 6dfd26992af85eaafa6e2f4c1a77052b
aarch64-sweetada-elf-20220429W.zip
MD5: 51209c559e24375dd47ea03825f3fae2
ARM arm-sweetada-eabi-20220429L.tar.xz
MD5: c59006922a89556f41c980e2aa5e3328
arm-sweetada-eabi-20220429W.zip
MD5: 60df8ae18a767580540ccf20f166dcd6
ARM
(big-endian)
armeb-sweetada-eabi-20220429L.tar.xz
MD5: 35d39cbd5f2036e2f6bd117b3977d759
armeb-sweetada-eabi-20220429W.zip
MD5: c8a1096658ab0e74d5651cd28a3b635a
AVR avr-sweetada-elf-20220429L.tar.xz
MD5: cd4384ccddb3cf7f1ac32c0da252e448
avr-sweetada-elf-20220429W.zip
MD5: 118367917f8b665e044330dbe3be4dc9
i686 i686-sweetada-elf-20220429L.tar.xz
MD5: 35082eeef9fd8b940ced176f6874deaf
i686-sweetada-elf-20220429W.zip
MD5: 9c883e4e5dac545b78274b7ff5ac5035
M68k
ColdFire
m68k-sweetada-elf-20220429L.tar.xz
MD5: bd43b546774c97089e12036041618c0f
m68k-sweetada-elf-20220429W.zip
MD5: 863ec2e5f897ac11d352976f69510278
MIPS mips-sweetada-elf-20220429L.tar.xz
MD5: eecaadf1146ba8e7b95e5d3e99f8c82f
mips-sweetada-elf-20220429W.zip
MD5: c3203ecfb3cbb29cf343172b1b49f999
MIPS64 mips64-sweetada-elf-20220429L.tar.xz
MD5: 011754f21ca1acf2fe9fdfb9805f64a8
mips64-sweetada-elf-20220429W.zip
MD5: c8215d1fc450a974ad9794aadf6d578e
MicroBlaze microblaze-sweetada-elf-20220429L.tar.xz
MD5: 97f36de1c30bc8560690b75a16673756
microblaze-sweetada-elf-20220429W.zip
MD5: 59300eab9cd2ee4e34cbfeea44f3e40c
NiosII nios2-sweetada-elf-20220429L.tar.xz
MD5: 999e9bf4bd6c32363b6ae8724fbc32b2
nios2-sweetada-elf-20220429W.zip
MD5: 313fff8b0074c20cbfdf65173f9111e1
PowerPC powerpc-sweetada-elf-20220429L.tar.xz
MD5: 7dae3417bcb8e6ed8cddec1ce58129ad
powerpc-sweetada-elf-20220429W.zip
MD5: d508e40af6eed02f512577f6bed40100
RISCV riscv-sweetada-elf-20220429L.tar.xz
MD5: edf39fc8b959167cdf0199e177febfa0
riscv-sweetada-elf-20220429W.zip
MD5: f948a2094b770f963f39ecc69bf75a5d
S/390 s390-sweetada-linux-20220429L.tar.xz
MD5: 47e6368963c56ec6195ff32fe13aeb77
s390-sweetada-linux-20220429W.zip
MD5: 5db218d1f00fa2640c8da59bd6f979ad
SuperH sh-sweetada-elf-20220429L.tar.xz
MD5: f588dffc43d842c4453dcf134c6b52b3
sh-sweetada-elf-20220429W.zip
MD5: 09948cedafef67880d6b387609af8c32
SH4 sh4le-sweetada-elf-20220429L.tar.xz
MD5: 39965af0c91e0ed2e5ac37ed4a080e78
sh4le-sweetada-elf-20220429W.zip
MD5: 6de30ab2db7c581539f8c17e06da413c
SPARC sparc-sweetada-elf-20220429L.tar.xz
MD5: 6574ebe925c67b7d71d39fd6a25827ce
sparc-sweetada-elf-20220429W.zip
MD5: ecb489caa3678864409d6724c55ae28c
SPARC64 sparc64-sweetada-elf-20220429L.tar.xz
MD5: bd0fd2a09ec1b9c91c407832d4979bcc
sparc64-sweetada-elf-20220429W.zip
MD5: b1f9ba768bb5a9f7a2149492d51c213a
x86-64 x86_64-sweetada-elf-20220429L.tar.xz
MD5: b7acdc8322ec070e889b735fb6699f10
x86_64-sweetada-elf-20220429W.zip
MD5: b4c895501730c1ee049e01678ab5dd59

GPRbuild support - build 20200417

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

Emulators - QEMU 7.0.0 - FS-UAE - GXemul

Note:
SweetAda QEMU is linked against SDL2 library (previously the Linux version was linked against GTK+3). This 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
AArch64 qemu-aarch64-20220504L.tar.xz qemu-aarch64-20220504W.zip
ARM qemu-arm-20220504L.tar.xz qemu-arm-20220504W.zip
AVR qemu-avr-20220504L.tar.xz qemu-avr-20220504W.zip
i686 qemu-i386-20220504L.tar.xz qemu-i386-20220504W.zip
M68k/ColdFire qemu-m68k-20220504L.tar.xz qemu-m68k-20220504W.zip
M68k fs-uae.tar.xz N/A
MIPS qemu-mips-20220504L.tar.xz qemu-mips-20220504W.zip
MIPS64 qemu-mips64-20220504L.tar.xz qemu-mips64-20220504W.zip
MicroBlaze qemu-microblaze-20220504L.tar.xz qemu-microblaze-20220504W.zip
NiosII qemu-nios2-20220504L.tar.xz qemu-nios2-20220504W.zip
PowerPC qemu-ppc-20220504L.tar.xz qemu-ppc-20220504W.zip
PowerPC64 qemu-ppc64-20220504L.tar.xz qemu-ppc64-20220504W.zip
RISCV32 qemu-riscv32-20220504L.tar.xz qemu-riscv32-20220504W.zip
RISCV64 qemu-riscv64-20220504L.tar.xz qemu-riscv64-20220504W.zip
S/390 qemu-s390x-20220504L.tar.xz qemu-s390x-20220504W.zip
SH4 gxemul.tar.xz N/A
SPARC qemu-sparc-20220504L.tar.xz qemu-sparc-20220504W.zip
x86-64 qemu-x86_64-20220504L.tar.xz qemu-x86_64-20220504W.zip

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
N/A Tcl/Tk 8.6.10

Contacts

mail icon
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.