cwittich(a)svn.reactos.com wrote:
added more correct linker flags (patch by brezenbak)
Modified: trunk/reactos/tools/rbuild/backend/msvc/vcprojmaker.cpp
------------------------------------------------------------------------
*Modified: trunk/reactos/tools/rbuild/backend/msvc/vcprojmaker.cpp*
--- trunk/reactos/tools/rbuild/backend/msvc/vcprojmaker.cpp 2005-11-30 00:25:48 UTC (rev
19764)
+++ trunk/reactos/tools/rbuild/backend/msvc/vcprojmaker.cpp 2005-11-30 00:26:51 UTC (rev
19765)
@@ -330,8 +330,17 @@
}
else if ( exe )
{
- fprintf ( OUT, "\t\t\t\tSubSystem=\"%d\"\r\n", console ? 1 : 2
);
- fprintf ( OUT, "\t\t\t\tBaseAddress=\"%s\"\r\n",
module.baseaddress.c_str ());
+ if ( module.type == Kernel || module.type == NativeCUI)
+ {
+ fprintf ( OUT, "\t\t\t\tAdditionalOptions=\" /SUBSYSTEM:NATIVE
/SECTION:INIT,D /ALIGN:4096 /FORCE:MULTIPLE\"\r\n" );
+ fprintf ( OUT, "\t\t\t\tIgnoreAllDefaultLibraries=\"TRUE\"\r\n"
);
+ fprintf ( OUT, "\t\t\t\tEntryPointSymbol=\"%s\"\r\n",
module.entrypoint.c_str ());
+ fprintf ( OUT, "\t\t\t\tBaseAddress=\"%s\"\r\n",
module.baseaddress.c_str ());
+ }
+ else if ( module.type == Win32CUI || module.type == Win32GUI )
+ {
+ fprintf ( OUT, "\t\t\t\tSubSystem=\"%d\"\r\n", console ? 1 : 2
);
+ }
}
else if ( dll)
{
This still isn't fully correct.
First, the check should be widened to inculde Drivers.
Secondly, /SECTION:INIT,D should only be used for Kernel or Drivers, not
Native apps. Thirdly, /ALIGN:4096 is irrelevant -- this is the default.
Kernel should get 0x80, and drivers should get 0x20.
Fourthly, Kernel entrypoint should be hard-coded to KiSystemStartup,
while Native apps shoudl be hardcoded to NtProcessStartup. This is
especially important so that nt.lib will get used properly.
Also, NativeCUI is a bit repetitive. Native can only be CUI.
Drivers should also be compiled with /DRIVER.
Native, Kernel and Drivers should have /NODEFAULTLIB.
/FORCE:MULTIPLE is ugly and I don't know why it was added.
Best regards,
Alex Ionescu