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