[ros-dev] rbuild and HALs module optimization

art yerkes ayerkes at speakeasy.net
Sat Sep 22 04:55:49 CEST 2007


On Fri, 21 Sep 2007 19:48:24 +0200
David Hinz <post.center at gmail.com> wrote:

> 
> Aleksey Bragin schrieb:
> > David, what does a kernel-dev have to do with rbuild?
> I just guessed that as HAL is very near to the kernel, it would be 
> maintained by a kernel-dev, who could answer in detail, why we have 
> certain different hals (I'm referring to differenciating between 
> x86-generic, x86-xbox etc., not between x86 and PPC).
> > Also, recent massive commits to the rbuild itself, and to  
> > various .rbuild files hardly prove your "rbuild is an umaintained  
> > piece of ... stuff" theory. It's, by the least measure, offensive to  
> > Herve's (and there were a few different patches submitted by various  
> > authors submitted) work he's been doing with rbuild.
> I surely noticed him working there, that's why I said he might have an 
> oppinion on that matter.
> > 
> > Or what is a "maintained rbuild", by your definition? How more should  
> > it be maintained? Note: not improved (we have a number of  
> > improvements pending to be implemented in it), but *maintained*.
> Well for me, a maintainer is the one who cares about that piece of code, 
> integrates patches, implements features, cleans up and so on and can be 
> contacted regarding that piece of code, even if he isn't currently 
> working on it. As I stated above I noticed Herve working in there, but 
> it didn't look like he was the new maintainer, more like he was doing 
> some stuff that just had to be done to keep rbuild working (I don't want 
> to disregard that work, I know that it was quite a lot he did in there 
> recently).
> But good to know rbuild has a maintainer.
> > 
> > Another thing is completely wrong and counter-productive: irc is a  
> > wrong place for such question, since not all devs are there all the  
> > time.
> I didn't want to keep him from posting here, but I know devs tend to 
> have way to less time, so you sometimes have to make them aware of 
> something.
> 
> 
> Sorry for mixing up just about everything in my first mail...

Sorry, I've been somewhat taken up while this email thread was going.

Here's what I want to see in rbuild:

1) Remove platform specific settings where possible from rbuild and 
   place them in named variables, and park the variables in the .rbuild
   files per architecture.

   This just means moving things like 
                string linkerParameters = ssprintf ( "-Wl,--subsystem,console -W
l,--entry,%s -Wl,--image-base,%s -Wl,--file-alignment,0x1000 -Wl,--section-align
ment,0x1000 -shared",
                                                     module.GetEntryPoint(true).
c_str (),
                                                     module.baseaddress.c_str ()
 );

   Into variables like:

   <property name="default_WIN32OCX_LINK">-Wl,--subsystem,console ...</property>
   
   And make them overridable so that:

   <!-- need this on elf platforms -->
   <property name="HHCTRL_LINK">-Wl,-z,defs ... $(HHCTRL_ADDLINK)</property>

   Supporting entities for common things like variables that will be expanded
   with target names would be good too.

   Like this:
   <!-- force the linker to include the entry point -->
   <property name="HHCTRL_ADDLINK">-Wl,-U,&entryPoint;</property>

   Where &entryPoint; is expanded to the entry point set for the current target.

2) Reduce the number of targets by turning them into a smaller number of
   configurable meta-targets and creating the final targets using xml
   input.

   An example target definition would be something like this:

   <defineTarget target="ntoskrnl" base="targetModuleRules" for="mingw">
    <add stage="linker">-Wl,-T,$(&module;_MODULEBASE)/ntoskrnl_$(ARCH).lnk</add>
    <add stage="linker">-Wl,--subsystem,native -Wl,--entry,&entryPoint;</add>
    <add stage="linker">-Wl,-nostartfiles</add>
    <!-- ... more ... -->
    <outline>
     <!-- would expand to the same thing as GenerateCommands compilation
          parts -->
     <perform>compile</perform>
     <perform>link</perform>
     <perform>postlink</perform>
   </defineTarget>

   Then you can use <module type="ntoskrnl">...</module> in your rbuild input
   and you can even make these conditional on architecture in the build rules.
-- 
"Ask Bill why the string in function 9 is terminated by a dollar sign. Ask him, because he can't answer. Only I know that".
- Gary Kildall


More information about the Ros-dev mailing list