comp.lang.ada
 help / color / mirror / Atom feed
From: Niklas Holsti <nobody@nowhere.fi>
Subject: Re: Multiple shared libraries with a single spec
Date: Fri, 04 Nov 2005 14:56:38 +0200
Date: 2005-11-04T14:56:38+02:00	[thread overview]
Message-ID: <hYIaf.613$9O7.445@reader1.news.jippii.net> (raw)
In-Reply-To: <1131107328.981560.222350@g43g2000cwa.googlegroups.com>

Lucretia wrote:
> Hi,
> 
> One of the things I need to know how to achieve is having a single
> specification but different bodies, to create a set of similar shared
> libraries. As an example, take the implementation of some maths
> routines (vector). I can have a version which will work on all machines
> i386 and FPU, then more specific versions which use SSE, MMX, etc. All
> of these different libs do the same thing, have the same spec, but
> different bodies. So I may have a directory structure like this:
> 
> vector.ads
> i386/vector.adb
> i386/libvector.so
> sse/vector.adb
> sse/libvector.so
> mmx/vector.adb
> mmx/libvector.so
> 
> <snip>
> 
> I have just created a test program which creates 2 shared libs (in
> separate directories with separate makefiles) and then created adalib
> and adainclude directories in which the lib, ali and ads files were
> linked to. I then built the test app which linked to the files in
> adalib and adainclude. I could then use a symlink to change the library
> used. This works, but I'm not too sure if it's the correct way to do
> this.
> 
> Has anyone else done this sort of thing with GNAT?

I'm working on an Ada program that has different versions, as in 
your example. I put the different versions of the package bodies 
(and specifications, too, for some packages) in different 
source-code directories, as you do. To build a specific version of 
the program, I list the source-code directories for the desired 
version in ADA_INCLUDE_PATH (and also in ADA_OBJECTS_PATH, but I 
think this is unnecessary for me) and then run "gnatmake" in a 
directory dedicated to this version. The .ali and .o files and the 
executable go in this version-specific directory. I don't use 
symlinks, just ADA_INCLUDE_PATH.

Mine is a simple and crude approach (it recompiles everything 
separately for each version of the program instead of sharing the 
compilation of shared libraries) but it works well enough for me. 
The library code changes so rarely that its recompilation time is 
irrelevant.

-- 
Niklas Holsti
Tidorum Ltd
niklas holsti tidorum fi
       .      @       .



  reply	other threads:[~2005-11-04 12:56 UTC|newest]

Thread overview: 27+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2005-11-04 12:28 Multiple shared libraries with a single spec Lucretia
2005-11-04 12:56 ` Niklas Holsti [this message]
2005-11-04 13:03   ` Lucretia
2005-11-04 13:22     ` Niklas Holsti
2005-11-04 15:43       ` Lucretia
2005-11-04 16:31         ` Pascal Obry
2005-11-04 17:36         ` Martin Krischik
2005-11-04 17:31       ` Martin Krischik
2005-11-04 21:55         ` Niklas Holsti
2005-11-04 13:04   ` Lucretia
2005-11-04 14:09 ` Stephen Leake
2005-11-04 15:53   ` Lucretia
2005-11-04 17:34     ` Martin Krischik
2005-11-05 10:41     ` Stephen Leake
2005-11-05 11:44       ` Lucretia
2005-11-05 14:17         ` Martin Krischik
2005-11-05 15:47           ` Stephen Leake
2005-11-05 16:00             ` Stefan Bellon
2005-11-06 11:57               ` Stephen Leake
2005-11-06 12:33                 ` Stefan Bellon
2005-11-07 17:30             ` Lucretia
2005-11-07 23:42               ` Stephen Leake
2005-11-08  6:31               ` Stefan Bellon
2005-11-05 14:12       ` Martin Krischik
2005-11-05 14:22         ` Pascal Obry
2005-11-07 14:12           ` Frank J. Lhota
2005-11-07 17:31             ` Pascal Obry
replies disabled

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