cwittich@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