buildsupport_utils.ads 7.22 KB
Newer Older
Maxime Perrotin's avatar
Maxime Perrotin committed
1
--  *************************** buildsupport ****************************  --
Maxime Perrotin's avatar
Maxime Perrotin committed
2
--  (c) 2017 European Space Agency - maxime.perrotin@esa.int
Maxime Perrotin's avatar
Maxime Perrotin committed
3
4
5
--  LGPL license, see LICENSE file

--  Set of helper functions for buildsupport
Maxime Perrotin's avatar
Maxime Perrotin committed
6
with Ocarina,
7
     --  Ocarina.Types,
Maxime Perrotin's avatar
Maxime Perrotin committed
8
9
     Ocarina.Types,
     Ocarina.Namet,
10
     Ocarina.Backends.Properties,
11
     Ada.Containers.Indefinite_Ordered_Maps,
12
     Ada.Containers.Indefinite_Vectors,
Maxime Perrotin's avatar
Maxime Perrotin committed
13
14
     Ocarina.ME_AADL.AADL_Tree.Nodes,
     Ocarina.ME_AADL.AADL_Instances.Nodes,
Maxime Perrotin's avatar
Maxime Perrotin committed
15
16
     Ada.Strings.Unbounded,
     Option_Type;
Maxime Perrotin's avatar
Maxime Perrotin committed
17

Maxime Perrotin's avatar
Maxime Perrotin committed
18
use Ocarina,
Maxime Perrotin's avatar
Maxime Perrotin committed
19
20
    Ocarina.Types,
    Ocarina.Namet,
21
    Ocarina.Backends.Properties,
Maxime Perrotin's avatar
Maxime Perrotin committed
22
23
    Ocarina.ME_AADL.AADL_Tree.Nodes,
    Ocarina.ME_AADL.AADL_Instances.Nodes,
24
25
    Ada.Containers,
    Ada.Strings.Unbounded;
Maxime Perrotin's avatar
Maxime Perrotin committed
26
27
28

package Buildsupport_Utils is

Maxime Perrotin's avatar
Maxime Perrotin committed
29
30
   package ATN renames Ocarina.ME_AADL.AADL_Tree.Nodes;
   package AIN renames Ocarina.ME_AADL.AADL_Instances.Nodes;
Maxime Perrotin's avatar
Maxime Perrotin committed
31
   function US (Source : String) return Unbounded_String renames
Maxime Perrotin's avatar
Maxime Perrotin committed
32
       To_Unbounded_String;
Maxime Perrotin's avatar
Maxime Perrotin committed
33
34
35
36
37
38
39
40
41
42
43
44

   procedure Banner;

   procedure Usage;

   procedure Exit_On_Error (Error : Boolean; Reason : String);

   type Synchronism is (Sync, Async);

   type Supported_RCM_Operation_Kind is (Unprotected_Operation,
                                         Protected_Operation,
                                         Cyclic_Operation,
45
46
                                         Sporadic_Operation,
                                         Any_Operation);
Maxime Perrotin's avatar
Maxime Perrotin committed
47

48
   function Get_RCM_Operation_Kind (E : Node_Id)
Maxime Perrotin's avatar
Maxime Perrotin committed
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
     return Supported_RCM_Operation_Kind;

   function Get_RCM_Operation (E : Node_Id) return Node_Id;

   function Get_RCM_Period (D : Node_Id) return Unsigned_Long_Long;

   function Get_APLC_Binding (E : Node_Id) return List_Id;

   type Supported_ASN1_Encoding is (Default, Native, UPER, ACN);

   function Get_ASN1_Encoding (E : Node_Id) return Supported_ASN1_Encoding;

   type Supported_ASN1_Basic_Type is (ASN1_Sequence,
                                      ASN1_SequenceOf,
                                      ASN1_Enumerated,
                                      ASN1_Set,
                                      ASN1_SetOf,
                                      ASN1_Integer,
                                      ASN1_Boolean,
                                      ASN1_Real,
                                      ASN1_OctetString,
                                      ASN1_Choice,
                                      ASN1_String,
                                      ASN1_Unknown);

74
   package Property_Maps is new Indefinite_Ordered_Maps (String, String);
75
76
   use Property_Maps;
   package String_Vectors is new Indefinite_Vectors (Natural, String);
77

Maxime Perrotin's avatar
Maxime Perrotin committed
78
79
80
81
82
83
   function Get_ASN1_Basic_Type (E : Node_Id) return Supported_ASN1_Basic_Type;

   function Get_Ada_Package_Name (D : Node_Id) return Name_Id;

   function Get_Ellidiss_Tool_Version (D : Node_Id) return Name_Id;

84
85
86
87
   function Get_Instance_Of (Device : Node_Id) return Name_Id;

   function Get_Is_Component_Type (Device : Node_Id) return Boolean;

Maxime Perrotin's avatar
Maxime Perrotin committed
88
89
   function Get_Interface_Name (D : Node_Id) return Name_Id;

90
   function Get_Env_Vars     (D : Node_Id) return Name_Id;
91

Maxime Perrotin's avatar
Maxime Perrotin committed
92
93
   function Get_ASN1_Module_Name (D : Node_Id) return String;

Maxime Perrotin's avatar
Maxime Perrotin committed
94
95
   function Get_Properties_Map (D : Node_Id) return Property_Maps.Map;

Maxime Perrotin's avatar
Maxime Perrotin committed
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
   --  Shortcut to read an identifier from the parser, in lowercase
   function ATN_Lower (N : Node_Id) return String is
       (Get_Name_String (ATN.Name (ATN.Identifier (N))));

   --  Shortcut to read an identifier from the parser, with original case
   function ATN_Case (N : Node_Id) return String is
       (Get_Name_String (ATN.Display_Name (ATN.Identifier (N))));

   --  Shortcut to read an identifier from the parser, in lowercase
   function AIN_Lower (N : Node_Id) return String is
       (Get_Name_String (AIN.Name (AIN.Identifier (N))));

   --  Shortcut to read an identifier from the parser, with original case
   function AIN_Case (N : Node_Id) return String is
       (Get_Name_String (AIN.Display_Name (AIN.Identifier (N))));

112
113
114
   --  Types needed to build the AST of the TASTE Interface View in Ada
   type Parameter_Direction is (param_in, param_out);

115
116
   package Option_UString is new Option_Type (Unbounded_String);
   use Option_UString;
Maxime Perrotin's avatar
Maxime Perrotin committed
117
   subtype Optional_Unbounded_String is Option_UString.Option;
Maxime Perrotin's avatar
Maxime Perrotin committed
118
119
120
   package Option_ULL is new Option_Type (Unsigned_Long_Long);
   use Option_ULL;
   subtype Optional_Long_Long is Option_ULL.Option;
121

122
   type ASN1_Parameter is
123
       record
124
125
126
127
128
129
130
           Name            : Unbounded_String;
           Sort            : Unbounded_String;
           ASN1_Module     : Unbounded_String;
           ASN1_Basic_Type : Supported_ASN1_Basic_Type;
           ASN1_File_Name  : Unbounded_String;
           Encoding        : Supported_ASN1_Encoding;
           Direction       : Parameter_Direction;
131
132
       end record;

133
   package Parameters is new Indefinite_Vectors (Natural, ASN1_Parameter);
134

135
136
   type Taste_Interface is
       record
Maxime Perrotin's avatar
Maxime Perrotin committed
137
           Name            : Unbounded_String;
138
           Params          : Parameters.Vector;
Maxime Perrotin's avatar
Maxime Perrotin committed
139
           RCM             : Supported_RCM_Operation_Kind;
140
           Period_Or_MIAT  : Unsigned_Long_Long;
Maxime Perrotin's avatar
Maxime Perrotin committed
141
142
           WCET_ms         : Optional_Long_Long := Nothing;
           Queue_Size      : Optional_Long_Long := Nothing;
Maxime Perrotin's avatar
Maxime Perrotin committed
143
           User_Properties : Property_Maps.Map;
144
145
146
       end record;

   package Interfaces is new Indefinite_Vectors (Natural, Taste_Interface);
147

Maxime Perrotin's avatar
Maxime Perrotin committed
148
   type Context_Parameter is
149
       record
150
           Name           : Unbounded_String;
Maxime Perrotin's avatar
Maxime Perrotin committed
151
152
153
           Sort           : Unbounded_String;
           Default_Value  : Unbounded_String;
           ASN1_Module    : Unbounded_String;
Maxime Perrotin's avatar
Maxime Perrotin committed
154
           ASN1_File_Name : Optional_Unbounded_String := Nothing;
Maxime Perrotin's avatar
Maxime Perrotin committed
155
156
157
158
159
160
161
       end record;

   package Ctxt_Params is new Indefinite_Vectors (Natural, Context_Parameter);

   type Taste_Terminal_Function is
       record
           Name            : Unbounded_String;
162
           Prefix          : Optional_Unbounded_String := Nothing;
Maxime Perrotin's avatar
Maxime Perrotin committed
163
           Language        : Supported_Source_Language;
Maxime Perrotin's avatar
Maxime Perrotin committed
164
           Zip_File        : Optional_Unbounded_String := Nothing;
Maxime Perrotin's avatar
Maxime Perrotin committed
165
166
167
168
169
           Context_Params  : Ctxt_Params.Vector;
           User_Properties : Property_Maps.Map;
           Timers          : String_Vectors.Vector;
           Provided        : Interfaces.Vector;
           Required        : Interfaces.Vector;
170
171
       end record;

172
173
174
175
176
   package Functions is new Indefinite_Vectors (Natural,
                                                Taste_Terminal_Function);

   type Connection is
       record
177
178
179
180
           Caller  : Unbounded_String;
           Callee  : Unbounded_String;
           RI_Name : Unbounded_String;
           PI_Name : Unbounded_String;
181
182
183
       end record;

   package Channels is new Indefinite_Vectors (Natural, Connection);
Maxime Perrotin's avatar
Maxime Perrotin committed
184
185
186
   package Connection_Maps is new Indefinite_Ordered_Maps (String,
                                                           Channels.Vector,
                                                          "=" => Channels."=");
187

188
   type Complete_Interface_View is
189
       record
Maxime Perrotin's avatar
Maxime Perrotin committed
190
191
192
           Flat_Functions  : Functions.Vector;
           End_To_End_Conn : Channels.Vector;
           Nested_Conn     : Connection_Maps.Map;
193
194
       end record;

Maxime Perrotin's avatar
Maxime Perrotin committed
195
196
197
   --  Function to build up the Ada AST by transforming the one from Ocarina
   function AADL_to_Ada_IV (System : Node_Id) return Complete_Interface_View;

Maxime Perrotin's avatar
Maxime Perrotin committed
198
end Buildsupport_Utils;