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=-1.9 required=5.0 tests=BAYES_00 autolearn=ham autolearn_force=no version=3.4.4 X-Google-Thread: 103376,4cabfb8e49247533 X-Google-Attributes: gid103376,public X-Google-Language: ENGLISH,ASCII-7-bit Path: g2news1.google.com!news4.google.com!news2.volia.net!news.germany.com!feeder2.news.jippii.net!reader1.news.jippii.net!53ab2750!not-for-mail From: Niklas Holsti Organization: Tidorum Ltd User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.7.8) Gecko/20050513 Debian/1.7.8-1 X-Accept-Language: en MIME-Version: 1.0 Newsgroups: comp.lang.ada Subject: Re: Multiple shared libraries with a single spec References: <1131107328.981560.222350@g43g2000cwa.googlegroups.com> In-Reply-To: <1131107328.981560.222350@g43g2000cwa.googlegroups.com> Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit Message-ID: Date: Fri, 04 Nov 2005 14:56:38 +0200 NNTP-Posting-Host: 81.17.205.61 X-Complaints-To: newsmaster@saunalahti.com X-Trace: reader1.news.jippii.net 1131109261 81.17.205.61 (Fri, 04 Nov 2005 15:01:01 EET) NNTP-Posting-Date: Fri, 04 Nov 2005 15:01:01 EET Xref: g2news1.google.com comp.lang.ada:6181 Date: 2005-11-04T14:56:38+02:00 List-Id: 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 > > > > 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 . @ .