comp.lang.ada
 help / color / mirror / Atom feed
From: Vincent DIEMUNSCH <vincent.diemunsch@gmail.com>
Subject: Re: Tools Generating Ada
Date: Tue, 11 Feb 2014 09:48:53 -0800 (PST)
Date: 2014-02-11T09:48:53-08:00	[thread overview]
Message-ID: <8f4037b8-ed00-4a98-8096-e18e507e7cbb@googlegroups.com> (raw)
In-Reply-To: <85zjm2yorr.fsf@stephe-leake.org>

On Saturday, February 8, 2014 9:47:20 AM UTC+1, Stephen Leake wrote:
> Vincent writes:
> 
> 
> 
> > Hello everybody,
> 
> >
> 
> > I have a question regarding Ada Code Generation tools, like Aflex /
> 
> > Ayacc for instance. How can I insert them into the automatic build
> 
> > process ? 
> 
> 
> 
> Yes; you have to write an XML file to tell gprbuild about the tool.
> 
> 
> 
> I did this for Auto_Text_IO, which produces *.Text_IO packages from Ada
> 
> packages.
> 
> 
> 
> The process is not well documented, and the XML file often needs
> 
> tweaking with new releases of the GNAT compiler; I submit a bug report
> 
> to find out how to tweak. I don't recommend doing this without an
> 
> AdaCore support contract. Unless you have read and understand all of the
> 
> gprbuild source :).
> 
> 
> 
> >I use GNAT GPL, so is it possible to create a GPRBuild
> 
> > project that generates Ada files from an AYacc source and then compile
> 
> > the Ada sources ? 
> 
> 
> 
> That takes two projects, to keep the source information distinct.
> 
> 
> 
> >Do I need to use a make file ? 
> 
> 
> 
> No, the project that compiles the Ada code can 'with' the project that
> 
> produces the Ada code.
> 
> 
> 
> However, gprbuild doesn't always get the dependencies right; sometimes
> 
> you have to run it twice.
> 
> 
> 
> >Where can I find
> 
> > examples ?
> 
> 
> 
> Here. This works with GNAT 7.1.2, and probably with GPL 2013:
> 
> 
> 
> with "sal_text_io";
> 
> project Common_Text_IO is
> 
>    for Languages use ("Auto_Text_IO");
> 
> 
> 
>    for Source_Dirs use
> 
>      ("../1553",
> 
>       "../base",
> 
>       "../base/test",
> 
>       "../models",
> 
>       "../../opentoken");
> 
>    for Object_Dir use "auto";
> 
>    for Source_Files use
> 
>      ("gds-hardware-bus_1553-time_tone.ads",
> 
>       "gds-unconstrained_arrays.ads",
> 
>       "simple_flight-rwa.ads",
> 
>       "simple_flight-safehold_css.ads");
> 
> 
> 
>    package Compiler is
> 
>       for Default_Switches ("Auto_Text_IO") use ("-05");
> 
>    end Compiler;
> 
> end Common_Text_IO;
> 
> 
> 
> 
> 
> with "opentoken";
> 
> with "sal";
> 
> with "standard_common";
> 
> with "../common_text_io";
> 
> project GDS is
> 
> 
> 
>    for Source_Dirs use
> 
>      ("../auto",
> 
>       "../../1553",
> 
>       "../../asist_if",
> 
>       "../../base",
> 
>       "../../fpga",
> 
>       "../../hardware",
> 
>       "../../itos_if",
> 
>       "../../models",
> 
>       "../../models/sofa",
> 
>       "../../spacewire",
> 
>       "../../system",
> 
>       "../../windows");
> 
> 
> 
>    for Object_Dir use "objects";
> 
>    for Exec_Dir use ".";
> 
> 
> 
>    for Languages use ("Ada", "C");
> 
> 
> 
>    package Compiler is
> 
>       for Default_Switches ("Ada") use
> 
>         Standard_Common.Compiler.Release_Switches &
> 
>         Standard_Common.Compiler.Style_Checks &
> 
>         Standard_Common.Compiler'Default_Switches ("Ada");
> 
> 
> 
>       for Local_Configuration_Pragmas use "../gnat_config_pragmas.adc";
> 
> 
> 
>       for Default_Switches ("C") use Standard_Common.Compiler.Release_Switches_C;
> 
> 
> 
>    end Compiler;
> 
> 
> 
>    package Binder is
> 
>       for Default_Switches ("Ada") use Standard_Common.Binder'Default_Switches ("Ada");
> 
>    end Binder;
> 
> 
> 
>    package Builder is
> 
>       for Default_Switches ("Ada") use Standard_Common.Builder'Default_Switches ("Ada");
> 
> 
> 
>       --  We use ".exe" extension even on non-Windows, to simplify the makefiles.
> 
>       for Executable_Suffix use ".exe";
> 
>    end Builder;
> 
> 
> 
> end GDS;
> 
> 
> 
> ---- auto_text_io.xml -----
> 
> <?xml version="1.0" ?>
> 
> <!-- Run auto_text_io
> 
> 
> 
> To tell gprbuild how to run auto_text_io:
> 
> 
> 
> copy this file to <gnat>/share/gprconfig
> 
> 
> 
> use gprbuild - -autoconf
> 
> 
> 
> -->
> 
> <gprconfig>
> 
>   <compiler_description>
> 
>     <name>Auto_Text_IO</name>
> 
>     <executable prefix="-1">auto_text_io.exe</executable>
> 
>     <languages>Auto_Text_IO</languages>
> 
>     <version>
> 
>       <external>auto_text_io.exe -?</external>
> 
>       <grep regexp="auto_text_io version .*"/>
> 
>     </version>
> 
>     <!-- target must match gprconfig target -->
> 
>     <target>
> 
>       <external>${PREFIX}gcc -dumpmachine</external>
> 
>       <grep regexp="[^\r\n]+"></grep>
> 
>     </target>
> 
>   </compiler_description>
> 
> 
> 
>   <configuration>
> 
>     <compilers>
> 
>       <compiler language="Auto_Text_IO"/>
> 
>     </compilers>
> 
>     <config>
> 
>    package Compiler is
> 
>       for Driver ("Auto_Text_IO") use "${PATH(auto_text_io)}auto_text_io.exe";
> 
>       for Include_Path ("Auto_Text_IO") use "ADA_INCLUDE_PATH";
> 
>       for Required_Switches ("Auto_Text_IO") use ("-f");
> 
>       for Dependency_Switches ("Auto_Text_IO") use ("-M");
> 
>    end Compiler;
> 
>    package Naming is
> 
>       for Body_Suffix ("Auto_Text_IO") use ".ads";
> 
>    end Naming;
> 
>    for Inherit_Source_Path ("Auto_Text_IO") use ("Ada");
> 
>    for Object_Generated ("Auto_Text_IO") use "false";
> 
>     </config>
> 
>   </configuration>
> 
> </gprconfig>
> 
> 
> 
> 
> 
> 
> 
> -- 
> 
> -- Stephe

Thank you very much for your complete response !
I'll try this, maybe with the help of AdaCore's support.

By the way, does GPRBuild creates "ali" files for an external tool ?
If not, then how can it knows what the dependencies ares ?
Does your tool creates an ali file ?

Kind regards,

Vincent

  reply	other threads:[~2014-02-11 17:48 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-02-07  8:57 Tools Generating Ada vincent.diemunsch
2014-02-07  9:34 ` Jacob Sparre Andersen
2014-02-07  9:41 ` Simon Wright
2014-02-07 16:32   ` Pascal Obry
2014-02-08  8:33   ` vincent.diemunsch
2014-02-07 16:52 ` Vadim Godunko
2014-02-07 19:32 ` gautier_niouzes
2014-02-08  8:47 ` Stephen Leake
2014-02-11 17:48   ` Vincent DIEMUNSCH [this message]
2014-02-11 21:08     ` briot.emmanuel
2014-02-12 11:52       ` Vincent DIEMUNSCH
2014-02-12 13:38         ` Pascal Obry
2014-02-12 16:18         ` Robert A Duff
2014-02-13 15:31     ` Stephen Leake
replies disabled

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox