diff options
author | Nico Huber <nico.h@gmx.de> | 2016-01-14 01:13:33 +0100 |
---|---|---|
committer | Nico Huber <nico.h@gmx.de> | 2016-09-19 11:14:18 +0200 |
commit | 2e09d2b239ff2dfdba89011fd64d9a07da0d8717 (patch) | |
tree | 74a3e2f4fd172232e81c2881ae1e3dfaae7bdf9a /Makefile.inc | |
parent | fec0328c5f653233859d4aec7dae0b94acb67e97 (diff) |
Make Ada a first class citizen
Some remarks on the make process:
o We usually leave Ada specs (.ads files which are like c headers)
together with the bodies (implementations in .adb files) in one
directory. So we have to know, where they live.
o If there is no matching .adb an .ads is a valid source file and
we'll generate an object file from it.
o Object files need to have the same basename as their source files :-/
That's why we put them in build/<class>/ dirs now.
o We track dependencies by looking at the compiler output (.ali files
which accompany every .o). This way we don't need any gnatmake
magic, or even more complex, less portable tools.
For ADAFLAGS_common, I simply copied the CFLAGS_common whilst dropping
everything unsupported and adding sane warning options.
The set of language features is highly restricted (see gnat.adc). This
should suit the embedded nature of coreboot and helps proving absence
of runtime errors with SPARK.
Change-Id: I70df9adbd467ecd2dc7c5c1cf418b7765aca4e93
Signed-off-by: Nico Huber <nico.h@gmx.de>
Reviewed-on: https://review.coreboot.org/13044
Tested-by: build bot (Jenkins)
Reviewed-by: Stefan Reinauer <stefan.reinauer@coreboot.org>
Reviewed-by: Edward O'Callaghan <edward.ocallaghan@koparo.com>
Diffstat (limited to 'Makefile.inc')
-rw-r--r-- | Makefile.inc | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/Makefile.inc b/Makefile.inc index 21b07e666c..316cd22921 100644 --- a/Makefile.inc +++ b/Makefile.inc @@ -359,6 +359,50 @@ CFLAGS_common += -Wstrict-aliasing -Wshadow -Wdate-time CFLAGS_common += -fno-common -ffreestanding -fno-builtin -fomit-frame-pointer CFLAGS_common += -ffunction-sections -fdata-sections +ADAFLAGS_common += -gnatg -gnatp +ADAFLAGS_common += -Wuninitialized -Wall -Werror +ADAFLAGS_common += -pipe -g -nostdinc +ADAFLAGS_common += -Wstrict-aliasing -Wshadow +ADAFLAGS_common += -fno-common -fomit-frame-pointer +ADAFLAGS_common += -ffunction-sections -fdata-sections +# Ada warning options: +# +# a Activate most optional warnings. +# .e Activate every optional warnings. +# e Treat warnings and style checks as errors. +# +# D Suppress warnings on implicit dereferences: +# As SPARK does not accept access types we have to map the +# dynamically chosen register locations to a static SPARK +# variable. +# +# .H Suppress warnings on holes/gaps in records: +# We are modelling hardware here! +# +# H Suppress warnings on hiding: +# It's too annoying, you run out of ideas for identifiers fast. +# +# T Suppress warnings for tracking of deleted conditional code: +# We use static options to select code paths at compile time. +# +# U Suppress warnings on unused entities: +# Would have lots of warnings for unused register definitions, +# `withs` for debugging etc. +# +# .U Deactivate warnings on unordered enumeration types: +# As SPARK doesn't support `pragma Ordered` by now, we don't +# use that, yet. +# +# .W Suppress warnings on unnecessary Warnings Off pragmas: +# Things get really messy when you use different compiler +# versions, otherwise. +# .Y Disable information messages for why package spec needs body: +# Those messages are annoying. But don't forget to enable those, +# if you need the information. +ADAFLAGS_common += -gnatwa.eeD.HHTU.U.W.Y +# Disable style checks for now +ADAFLAGS_common += -gnatyN + LDFLAGS_common := --gc-sections -nostdlib -nostartfiles -static --emit-relocs ifeq ($(CONFIG_COMPILER_GCC),y) @@ -371,8 +415,10 @@ CFLAGS_common += -Werror endif ifneq ($(GDB_DEBUG),) CFLAGS_common += -Og +ADAFLAGS_common += -Og else CFLAGS_common += -Os +ADAFLAGS_common += -Os endif additional-dirs := $(objutil)/cbfstool $(objutil)/romcc $(objutil)/ifdtool \ |