Having worked with rbuild for a few weeks I have identified
some problems that would like to share. I also would like to hear the
developers' opinions about all of these issues because I want to start working
to solving them.
A) The behavior of the "include" +
"directory" tags are inconsistent when an "include" is
placed inside a "directory" for
example:
Correct:
(expected : ke/i386/boot.S)
<directory
name="ke">
<if
property="ARCH" value="i386">
<directory
name="i386">
<file
first="true">boot.S</file>
Incorrect:
(expected : reactos/reactos.rbuild
real : reactos/reactos/reactos.rbuild)
<directory
name="reactos">
<xi:include
href="reactos/reactos.rbuild" />
</directory>
should
be:
<directory
name="reactos">
<xi:include
href="reactos.rbuild" />
</directory>
B) The "oldcrt" attribute is no longer used and
can be removed.
C) The module types "Iso" , "LiveIso" ,
"IsoRegTest" and "LiveIsoRegTest" are IMHO hacks introduced
to be able use the makefile generation code. rbuild is C++ so with a small code
refactor they can be easly removed.
D) Any module is using the "EmbeddedTypeLib"
module type , is really needed or can be removed?
E) IMHO the "ElfExecutable" is incorrect . I
posted my reasons some time ago:
http://www.reactos.org/archives/public/ros-dev/2007-September/009770.html
http://www.reactos.org/archives/public/ros-dev/2007-September/009771.html
http://www.reactos.org/archives/public/ros-dev/2007-September/009779.html
F) The module type "alias" is only used for HAL
related modules and IMHO it isn't requiered because the problem it tries to
solve can be easly solved using "if" tags and
conditional compilation.
http://www.reactos.org/archives/public/ros-dev/2007-September/009798.html
There are several reasons for this change:
-
Currently every platform requires 3 new HAL modules. In the future if new
platforms are supported for example (X86 , XBOX , PPC , AMD64 , MIPS , IA64 ,
ARM ... ) 3 x 7 = 21 modules .. see what I'm saying?
-
It simplifies backends work. No need to include logic for alias handling.
-
Conceptually wrong . every module represents a particular functionality when
you compile the module it should just reconfigure itself to produce the appropriate
image for the configured architecture .It a good idea to have a true componentized
operating system.
Regarding the ModuleType IMHO they should be used to provide
information that describes the module output/target not the build process! Iso
, LiveIso , Alias , ... all of them are meaningless they are not true metadata.
Long term enhancements:
X) tags like "linkerflag" or
"compilerflag" are gcc/mingw specific and should be replaced with
other tags that provide the
equivalent functionality using a more abstract aproach so
other backends/compilers could benefit from it. rbuild files should
only describe the source code and the compilation process
without including specific information.
/Marc