-
Notifications
You must be signed in to change notification settings - Fork 1
/
ColdFrame.gpr
126 lines (106 loc) · 3.84 KB
/
ColdFrame.gpr
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
-- Copyright (C) Simon Wright <[email protected]>
-- This package is free software; you can redistribute it and/or
-- modify it under terms of the GNU General Public License as
-- published by the Free Software Foundation; either version 2, or
-- (at your option) any later version. This package is distributed in
-- the hope that it will be useful, but WITHOUT ANY WARRANTY; without
-- even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-- PARTICULAR PURPOSE. See the GNU General Public License for more
-- details. You should have received a copy of the GNU General Public
-- License distributed with this package; see file COPYING. If not,
-- write to the Free Software Foundation, 59 Temple Place - Suite
-- 330, Boston, MA 02111-1307, USA.
-- This file controls compilation of the standard ColdFrame library.
library project ColdFrame is
type Profile_Type is ("standard", "ravenscar");
Profile : Profile_Type := external ("COLDFRAME_PROFILE", "standard");
type Containers_Type is ("standard", "minimal");
Containers : Containers_Type :=
external ("COLDFRAME_CONTAINERS", external ("CONTAINERS", "standard"));
type Build_Type is ("Production", "Debug");
Build : Build_Type := external ("COLDFRAME_BUILD",
external ("BUILD", "Debug"));
RTS := external ("COLDFRAME_RUNTIME", "native");
for Library_Name use "coldframe";
for Library_Kind use "static";
case Profile is
when "standard" =>
for Source_Dirs use ("src/common", "src/standard");
when "ravenscar" =>
for Source_Dirs use ("src/common", "src/ravenscar", "src/containers");
end Case;
package Naming is
case Profile is
when "ravenscar" =>
case Containers is
when "minimal" =>
for Spec ("ColdFrame.Events.Standard")
use "coldframe-events-standard.ads-minimal";
when others =>
null;
end case;
when "standard" =>
null;
end case;
end Naming;
Build_Kind := Profile;
case Build is
when "Production" =>
Build_Kind := Build_Kind & "-production";
when "Debug" =>
Build_Kind := Build_Kind & "-debug";
end case;
for Library_Dir use "lib-" & Build_Kind;
for Object_Dir use ".build-" & Build_Kind;
COMPILER_SWITCHES :=
(
-- keep .alis, full messages, hardware overflow
-- checks, style checks
"-gnatqQfoy",
-- All standard warnings except elaboration problems
"-gnatwaL",
"-gnat12",
"-g"
);
case Build is
when "Production" =>
COMPILER_SWITCHES := COMPILER_SWITCHES & ("-O2");
when "Debug" =>
COMPILER_SWITCHES := COMPILER_SWITCHES & ("-O0", "-gnata");
end case;
case RTS is
when "native" =>
null;
when others =>
COMPILER_SWITCHES := COMPILER_SWITCHES &
(
-- .. dead code elimination (with -fgc-sections at link)
"-ffunction-sections",
"-fdata-sections",
-- .. non-local exceptions (exceptions invoking Last
-- Chance Handler: expected!)
"-gnatw.X"
);
end case;
-- Builder configuration options.
package Builder is
for Global_Compilation_Switches ("ada") use COMPILER_SWITCHES;
end Builder;
-- GCC configuration options.
package Compiler is
for Switches ("ada") use COMPILER_SWITCHES;
end Compiler;
-- GNATBIND configuration options.
package Binder is
for Default_Switches ("ada") use ("-E");
end Binder;
-- GNATLINK configuration options.
package Linker is
case RTS is
when "native" =>
null;
when others =>
for Default_Switches ("ada") use ("-Wl,-gc-sections");
end case;
end Linker;
end ColdFrame;