FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Building Ares

 
Post new topic   Reply to topic     Forum Index -> Build
View previous topic :: View next topic  
Author Message
JJR



Joined: 22 Feb 2004
Posts: 1104

PostPosted: Sun Mar 12, 2006 12:39 am    Post subject: Building Ares Reply with quote

I've run across a number of problems with build while attempting to use it to create an Ares library. I think this is pushing the limit of build capabilities, but I'm still wondering if the limitations in build can be fixed. So I'm posting a summary of the five problems.

First, I've created three separate build files for the sections of Ares as Sean as organized them. These reside in a "build" directory like so:

ares\src\build\ares.brf
ares\src\build\dmdgc.brf
ares\src\build\dmdrt.brf

The idea with these files is that you just type build @filename above to get each portion of Ares built. A batch or shell script can put all three processes into one short step. These files contain the typical build flags like -allobj, -lib, -full, etc.

In the same directory as the files above reside these files:

ares\src\build\ares.d
ares\src\build\dmdgc.d
ares\src\build\dmdrt.d

These files contain an explicit list of module imports to direct the build tool on the exact inclusion of each library. They also make use of special build pragma's to help the build tool along (like nolink, lib, target, include, etc).

Now for some problems, I've run into:

Code:
1)  Build supports multiple platforms, specificly Linux and Windows for now. But it appears that build doesn't allow two platforms to share the same *.brf in all cases.  Specifically, build does not allow / and \ for directory delimination to be interchangeable; this makes it impossible to specify a mere ..\ares with the include flag in the brf file.   I was hoping we could specify one type of slash, preferably forward slash and have build automatically change it for windows (or something like that).  That way, we don't have to make a separate brf file for each platfrom (nasty business when everything else is the same).


Code:
2) Concerning Rule Definition Files, the build docs state that I use source=/target= rules.  This is not so!  It took me half a day almost to track down that build uses in=/out= instead!  I was doing an all out debug session on build to find this out, embarassingly.   I couldn't figure out why build wouldn't compile the ares *.c files.  Please change the docs!


Code:
3) -od is broken for library build. It does not put object files in the directory specified (those files imported by the main project file).  It only puts the build command line source file in that directory: build foo.d.  None of the files that are imported by that file and compiled to objects are placed in the -od directory.  Being able to store all object files in a single directory is just plain nice for organization.


Code:
4) Rule Definition Files are broken for libraries. If you specify an rdf build, the ruled files are compiled correctly (like *.c files), but their objects are NOT included in the library list for packaging!  It appears that this feature is only useful for building an executable target.  But I really need these inserted into the library build list, especially in the case of Ares.


Code:
5) Precompiled objects like minit.obj can be included in the link phase list for an executable only; there is no way to include them in a library constructed with the build tool.  pragma(link, "minit.obj") appears to only be designed for an executable target.  I want to be able to add it to the object list for a library target.  This is important if I want to build Ares without tacking on a "lib ares.lib +minit.obj" in a shell script at the end of the build process.


After trying build on Ares, I was almost ready to give up, but it seemed a shame that build couldn't prove its worth in this area as well. Maybe there is still some hope?

Thanks!

John
Back to top
View user's profile Send private message
Derek Parnell



Joined: 22 Apr 2004
Posts: 408
Location: Melbourne, Australia

PostPosted: Sat Mar 18, 2006 7:17 am    Post subject: Re: Building Ares Reply with quote

JJR wrote:

Code:
1)  Build supports multiple platforms, specificly Linux and Windows for now. But it appears that build doesn't allow two platforms to share the same *.brf in all cases.  Specifically, build does not allow / and \ for directory delimination to be interchangeable; this makes it impossible to specify a mere ..\ares with the include flag in the brf file.   I was hoping we could specify one type of slash, preferably forward slash and have build automatically change it for windows (or something like that).  That way, we don't have to make a separate brf file for each platfrom (nasty business when everything else is the same).


This is fixed in the next release.
JJR wrote:

Code:
2) Concerning Rule Definition Files, the build docs state that I use source=/target= rules.  This is not so!  It took me half a day almost to track down that build uses in=/out= instead!  I was doing an all out debug session on build to find this out, embarassingly.   I couldn't figure out why build wouldn't compile the ares *.c files.  Please change the docs!


This is fixed in the next release.
JJR wrote:

Code:
3) -od is broken for library build. It does not put object files in the directory specified (those files imported by the main project file).  It only puts the build command line source file in that directory: build foo.d.  None of the files that are imported by that file and compiled to objects are placed in the -od directory.  Being able to store all object files in a single directory is just plain nice for organization.


This is fixed in the next release.
JJR wrote:

Code:
4) Rule Definition Files are broken for libraries. If you specify an rdf build, the ruled files are compiled correctly (like *.c files), but their objects are NOT included in the library list for packaging!  It appears that this feature is only useful for building an executable target.  But I really need these inserted into the library build list, especially in the case of Ares.


I'll add this to the request list.
JJR wrote:


Code:
5) Precompiled objects like minit.obj can be included in the link phase list for an executable only; there is no way to include them in a library constructed with the build tool.  pragma(link, "minit.obj") appears to only be designed for an executable target.  I want to be able to add it to the object list for a library target.  This is important if I want to build Ares without tacking on a "lib ares.lib +minit.obj" in a shell script at the end of the build process.


I'll add this to the request list.
JJR wrote:


After trying build on Ares, I was almost ready to give up, but it seemed a shame that build couldn't prove its worth in this area as well. Maybe there is still some hope?

Of course I'll try to make Build as useful to as many people as possible.

The next release is ready except for the documentation, which I'm converting to Ddoc format.
_________________
--
Derek
skype name: derek.j.parnell
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic     Forum Index -> Build All times are GMT - 6 Hours
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group