How can I install the ZFP (Zero Foot Print) RTS (Run Time System) for AVR with the Alire package manager for Ada?
My project file, I think correctly, contains:
project Avr is
for Runtime("Ada") use "zfp";
for Target use "avr-elf";
end Avr;
alire.toml
hopefully correction contains:
[[depends-on]]
gnat_avr_elf = ">=11.2.4"
Unfortunately, when running alr build
, I get:
gprconfig: can't find a toolchain for the following configuration:
gprconfig: language 'ada', target 'avr-elf', runtime 'zfp'
I found documentation for programming AVR with Ada, but this assumes that I build the tool-chain myself and not have a package manager at least providing the GNU tool-chain.
The same applies to Programming Arduino with Ada.
https://github.com/Fabien-Chouteau/bare_runtime is very adaptable and can at least be brought to build.
However, the following changes are required:
diff --git a/bare_runtime.gpr b/bare_runtime.gpr
index 1f6059c..69b4dd6 100644
--- a/bare_runtime.gpr
+++ b/bare_runtime.gpr
@@ -13,7 +13,7 @@ project Bare_Runtime is
for Library_Dir use "adalib";
for Object_Dir use "obj";
- for Source_Dirs use ("src");
+ for Source_Dirs use ("src", "config");
package Naming is
for Spec_Suffix ("Asm_CPP") use ".inc";
@@ -39,6 +39,26 @@ project Bare_Runtime is
& ("-g");
for Switches ("raise-gcc.c") use Target_Options.ALL_CFLAGS
& ("-fexceptions");
+ for Switches ("s-stoele.adb") use Target_Options.ALL_ADAFLAGS
+ & ("-gnatwn");
+ for Switches ("s-secsta.adb") use Target_Options.ALL_ADAFLAGS
+ & ("-gnatwn");
+ for Switches ("s-memtyp.ads") use Target_Options.ALL_ADAFLAGS
+ & ("-gnatwn");
+ for Switches ("s-memory.adb") use Target_Options.ALL_ADAFLAGS
+ & ("-gnatwn");
+ for Switches ("s-fatsfl.ads") use Target_Options.ALL_ADAFLAGS
+ & ("-gnatwn");
+ for Switches ("s-fatllf.ads") use Target_Options.ALL_ADAFLAGS
+ & ("-gnatwn");
+ for Switches ("s-fatlfl.ads") use Target_Options.ALL_ADAFLAGS
+ & ("-gnatwn");
+ for Switches ("s-fatflt.ads") use Target_Options.ALL_ADAFLAGS
+ & ("-gnatwn");
+ for Switches ("a-tags.adb") use Target_Options.ALL_ADAFLAGS
+ & ("-gnatwn");
+ for Switches ("a-elchha.adb") use Target_Options.ALL_ADAFLAGS
+ & ("-gnatwn");
-- Don't inline System.Machine_Reset otherwise we can loose our common
-- exit system.
diff --git a/src/s-memory.adb b/src/s-memory.adb
index bcb4494..a3d3f93 100644
--- a/src/s-memory.adb
+++ b/src/s-memory.adb
@@ -31,7 +31,7 @@
-- Simple implementation for use with ZFP
-pragma Restrictions (No_Elaboration_Code);
+-- pragma Restrictions (No_Elaboration_Code);
-- This unit may be linked without being with'ed, so we need to ensure
-- there is no elaboration code (since this code might not be executed).
The issue seems to be that the GCC/ GNAT toolchain for AVR seems to have unsupported combinations of word sizes for addresses and/ or basic datatypes.
So far I did not investigate that further, but still wanted to document the status.
FYI, I did not do any testing so far, so this is really just compiling and most probably will not run without issues.
To include that, call alr with --use=./bare_runtime bare_runtime
, where I assume that you have the code for the bare_runtime
as a sub-folder in your project.