From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on polar.synack.me X-Spam-Level: X-Spam-Status: No, score=-0.3 required=5.0 tests=BAYES_00, REPLYTO_WITHOUT_TO_CC autolearn=no autolearn_force=no version=3.4.4 X-Google-Thread: a07f3367d7,15d78a51b0d35cec X-Google-Attributes: gida07f3367d7,public,usenet X-Google-NewGroupId: yes X-Google-Language: ENGLISH,ASCII Path: g2news2.google.com!news3.google.com!feeder.news-service.com!newsfeed.freenet.de!news.buerger.net!noris.net!newsfeed.arcor.de!newsspool4.arcor-online.net!news.arcor.de.POSTED!not-for-mail From: "Dmitry A. Kazakov" Subject: Re: architecture-independent GNAT project files? Newsgroups: comp.lang.ada User-Agent: 40tude_Dialog/2.0.15.1 MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 8bit Reply-To: mailbox@dmitry-kazakov.de Organization: cbb software GmbH References: <75l5ceF18samiU1@mid.individual.net> <75mlktF1979j6U1@mid.individual.net> Date: Tue, 28 Apr 2009 09:24:03 +0200 Message-ID: <1xrnblwdskgjg$.1v3turpillxav$.dlg@40tude.net> NNTP-Posting-Date: 28 Apr 2009 09:24:02 CEST NNTP-Posting-Host: 156b1742.newsspool1.arcor-online.net X-Trace: DXC=7YJ9DOHOSFYaAeROF2PWMQic==]BZ:af^4Fo<]lROoRQ^YC2XCjHcbY8`8E0EIZeUWDNcfSJ;bb[UFCTGGVUmh?TLK[5LiR>kgR6l_gESi?Jb^ X-Complaints-To: usenet-abuse@arcor.de Xref: g2news2.google.com comp.lang.ada:5576 Date: 2009-04-28T09:24:02+02:00 List-Id: On Mon, 27 Apr 2009 23:16:13 +0200, Bj�rn Persson wrote: > Dmitry A. Kazakov wrote: > >> On Mon, 27 Apr 2009 09:32:29 +0200, Bj�rn Persson wrote: >> >>> When I write GNAT project files for shared libraries I find that I have >>> to hardcode the paths to some architecture-specific directories. 32-bit >>> libraries are in /usr/lib/ while 64-bit libraries are in /usr/lib64/, and >>> I would like to have a single project file that works for both cases. >> >> The way I am using is to have a platform variable in the project file: >> >> type Platform_Type is ("x86_Windows", "x86_VxWorks"); >> Platform : Platform_Type := external ("Platform", "x86_Windows"); >> >> and then somewhere later >> >> case Platform is >> when "x86_Windows" => >> for Source_Dirs use "os/Windows/i586" & ...; >> when "x86_VxWorks" => >> for Source_Dirs use "os/vxworks/i586" & ...; >> end case; >> >> then same for library things etc. > > The analog for my case would be: > > type Architecture is ("i386", "x86_64"); > Target : Architecture := external ("Target", "i386"); > > The problem with that is of course that on x86_64 systems the default will > almost always be wrong, and if I set the default to x86_64 it will be wrong > on i386 systems. New GPS remembers the last choices of the project variables (well almost always (:-)). So it should not be a great problem. Of course object and executable files have to land into disparate directories (switched by the same variable). >>> The way to find out the architecture of a Unix-like system appears to be >>> to invoke uname, but GNAT project files don't seem to have a shell-out >>> feature. As far as I can see in the manual the only ways they can get >>> input is by environment variables and command line parameters. I don't >>> suppose Gnatmake provides some variable to project files that shows what >>> the architecture is? >> >> I don't know if it has, but if any, how that is supposed to work for cross >> platform developing? > > The cross-compiler would know its target platform and would assign that > value to the hypothetical variable. The project file would then select the > right library directories for that platform. Hmm, I see no obvious way to do it. In my case there are several GNAT compilers installed. The project variable Platform chooses the compiler as well. For example, I have: package Ide is case Platform is when "x86_Windows" => for Gnatlist use "gnatls"; for Gnat use "gnat"; for Compiler_Command ("ada") use "gnatmake"; for Debugger_Command use "gdb"; when "x86_VxWorks" => for Gnatlist use "i586-wrs-vxworks-gnatls"; for Gnat use "i586-wrs-vxworks-gnat"; for Compiler_Command ("ada") use "i586-wrs-vxworks-gnatmake"; for Debugger_Command use "i586-wrs-vxworks6-gdb"; end case; end Ide; This changes gnatlist, gnat, gnatmake, everything... -- Regards, Dmitry A. Kazakov http://www.dmitry-kazakov.de