-<!--\r
- Architecture to build for\r
-\r
- Specify one of: i386\r
- Possible values in the future: alpha,i386,m68k,mips,powerpc\r
--->\r
-\r
-<define name="ARCH" value="i386" />\r
-\r
-\r
-<!--\r
- Which cpu should reactos optimze for\r
- example : i486, i586, pentium, pentium2, pentum3, pentium4\r
- athlon-xp, athlon-mp, k6-2, \r
-\r
- see gcc manual for more cpu name and which cpu it can \r
- be optimze for. \r
--->\r
-\r
-<define name="OARCH" value="i486" />\r
-\r
-<!--\r
- Whether to compile in the kernel debugger\r
--->\r
-\r
-<define name="KDBG" value="0" />\r
-\r
-\r
-<!--\r
- Whether to compile for debugging\r
--->\r
-\r
-<define name="DBG" value="0" />\r
-\r
-\r
-<!--\r
- Whether to compile with optimizations\r
--->\r
-\r
-<define name="OPTIMIZED" value="0" />\r
-\r
-\r
-<!--\r
- Whether to compile a multiprocessor or single processor version\r
--->\r
-\r
-<define name="MP" value="0" />\r
-\r
-<!--\r
- Whether to compile for ACPI compliant systems\r
--->\r
-\r
-<define name="ACPI" value="0" />\r
-\r
-\r
-<!--\r
- whether to use a 3GB User, 1GB Kernel memory map\r
--->\r
-\r
-<define name="3GB" value="1" />\r
-\r
-\r
-<!--\r
- Which version of NDIS do we support up to?\r
-<define name="NDISVERSION" value="NDIS50" />\r
--->\r
<directory name="kjs">\r
<xi:include href="kjs/kjs.xml" />\r
</directory>\r
+<directory name="ntdll">\r
+ <xi:include href="ntdll/ntdll.xml" />\r
+</directory>\r
<directory name="pseh">\r
<xi:include href="pseh/pseh.xml" />\r
</directory>\r
--- /dev/null
+<module name="ntdll" type="nativedll">\r
+ <dependency>genntdll</dependency>\r
+ <importlibrary definition="def/ntdll.def" />\r
+ <define name="__NTDLL__" />\r
+ <define name="_DISABLE_TIDENTS" />\r
+ <library>rosrtl</library>\r
+ <library>rtl</library>\r
+ <library>string</library>\r
+ <directory name="csr">\r
+ <file>capture.c</file>\r
+ <file>lpc.c</file>\r
+ <file>probe.c</file>\r
+ <file>thread.c</file>\r
+ </directory>\r
+ <directory name="dbg">\r
+ <file>brkpoint.c</file>\r
+ <file>debug.c</file>\r
+ <file>print.c</file>\r
+ </directory>\r
+ <directory name="ldr">\r
+ <file>entry.S</file>\r
+ <file>res.c</file>\r
+ <file>startup.c</file>\r
+ <file>utils.c</file>\r
+ </directory>\r
+ <directory name="main">\r
+ <file>dllmain.c</file>\r
+ </directory>\r
+ <directory name="rtl">\r
+ <directory name="i386">\r
+ <file>alldiv.s</file>\r
+ <file>allmul.s</file>\r
+ <file>allrem.s</file>\r
+ <file>allshl.s</file>\r
+ <file>allshr.s</file>\r
+ <file>aulldiv.s</file>\r
+ <file>aullrem.s</file>\r
+ <file>aullshr.s</file>\r
+ <file>chkstk.s</file>\r
+ <file>except.s</file>\r
+ <file>exception.c</file>\r
+ <file>float.c</file>\r
+ <file>ftol.c</file>\r
+ </directory>\r
+ <file>access.c</file>\r
+ <file>apc.c</file>\r
+ <file>atom.c</file>\r
+ <file>callback.c</file>\r
+ <file>crc32.c</file>\r
+ <file>critical.c</file>\r
+ <file>dbgbuffer.c</file>\r
+ <file>exception.c</file>\r
+ <file>handle.c</file>\r
+ <file>intrlck.c</file>\r
+ <file>libsupp.c</file>\r
+ <file>math.c</file>\r
+ <file>message.c</file>\r
+ <file>misc.c</file>\r
+ <file>path.c</file>\r
+ <file>ppb.c</file>\r
+ <file>process.c</file>\r
+ <file>propvar.c</file>\r
+ <file>rangelist.c</file>\r
+ <file>registry.c</file>\r
+ <file>resource.c</file>\r
+ <file>teb.c</file>\r
+ <file>thread.c</file>\r
+ <file>timerqueue.c</file>\r
+ </directory>\r
+ <directory name="stdio">\r
+ <file>sprintf.c</file>\r
+ <file>sscanf.c</file>\r
+ <file>swprintf.c</file>\r
+ </directory>\r
+ <directory name="stdlib">\r
+ <file>abs.c</file>\r
+ <file>atoi64.c</file>\r
+ <file>atoi.c</file>\r
+ <file>atol.c</file>\r
+ <file>bsearch.c</file>\r
+ <file>itoa.c</file>\r
+ <file>itow.c</file>\r
+ <file>labs.c</file>\r
+ <file>lfind.c</file>\r
+ <file>mbstowcs.c</file>\r
+ <file>splitp.c</file>\r
+ <file>strtol.c</file>\r
+ <file>strtoul.c</file>\r
+ <file>wcstol.c</file>\r
+ <file>wcstombs.c</file>\r
+ <file>wcstoul.c</file>\r
+ <file>wtoi64.c</file>\r
+ <file>wtoi.c</file>\r
+ <file>wtol.c</file>\r
+ </directory>\r
+ <directory name="string">\r
+ <file>ctype.c</file>\r
+ <file>memicmp.c</file>\r
+ <file>stricmp.c</file>\r
+ <file>strlwr.c</file>\r
+ <file>strnicmp.c</file>\r
+ <file>strpbrk.c</file>\r
+ <file>strstr.c</file>\r
+ <file>strupr.c</file>\r
+ <file>wstring.c</file>\r
+ </directory>\r
+ <file>napi.c</file>\r
+</module>\r
target.c_str ());\r
}\r
}\r
+\r
+\r
+static MingwNativeDLLModuleHandler nativedll_handler;\r
+\r
+MingwNativeDLLModuleHandler::MingwNativeDLLModuleHandler ()\r
+ : MingwModuleHandler ( NativeDLL )\r
+{\r
+}\r
+\r
+void\r
+MingwNativeDLLModuleHandler::Process ( const Module& module )\r
+{\r
+ GeneratePreconditionDependencies ( module );\r
+ GenerateNativeDLLModuleTarget ( module );\r
+ GenerateInvocations ( module );\r
+}\r
+\r
+void\r
+MingwNativeDLLModuleHandler::GenerateNativeDLLModuleTarget ( const Module& module )\r
+{\r
+ static string ros_junk ( "$(ROS_TEMPORARY)" );\r
+ string target ( FixupTargetFilename ( module.GetPath () ) );\r
+ string workingDirectory = GetWorkingDirectory ( );\r
+ string archiveFilename = GetModuleArchiveFilename ( module );\r
+ string importLibraryDependencies = GetImportLibraryDependencies ( module );\r
+\r
+ if (module.importLibrary != NULL)\r
+ {\r
+ fprintf ( fMakefile, "%s:\n",\r
+ module.GetDependencyPath ().c_str () );\r
+\r
+ fprintf ( fMakefile,\r
+ "\t${dlltool} --dllname %s --def %s --output-lib %s --kill-at\n\n",\r
+ module.GetTargetName ().c_str (),\r
+ FixupTargetFilename ( module.GetBasePath () + SSEP + module.importLibrary->definition ).c_str (),\r
+ FixupTargetFilename ( module.GetDependencyPath () ).c_str () );\r
+ }\r
+\r
+ if (module.files.size () > 0)\r
+ {\r
+ fprintf ( fMakefile, "%s: %s %s\n",\r
+ target.c_str (),\r
+ archiveFilename.c_str (),\r
+ importLibraryDependencies.c_str () );\r
+ \r
+ fprintf ( fMakefile,\r
+ "\t${gcc} -Wl,--subsystem,native -Wl,--entry,_DllMainCRTStartup@12 -Wl,--image-base,0x10000 -Wl,--file-alignment,0x1000 -Wl,--section-alignment,0x1000 -nostartfiles -nostdlib -mdll -o %s %s %s\n",\r
+ target.c_str (),\r
+ archiveFilename.c_str (),\r
+ importLibraryDependencies.c_str () );\r
+ \r
+ GenerateArchiveTargetTarget ( module );\r
+ GenerateObjectFileTargetsTarget ( module );\r
+ }\r
+ else\r
+ {\r
+ fprintf ( fMakefile, "%s:\n\n",\r
+ target.c_str ());\r
+ fprintf ( fMakefile, ".PHONY: %s\n\n",\r
+ target.c_str ());\r
+ }\r
+}\r
void GenerateKernelModeDLLModuleTarget ( const Module& module );\r
};\r
\r
+\r
+class MingwNativeDLLModuleHandler : public MingwModuleHandler\r
+{\r
+public:\r
+ MingwNativeDLLModuleHandler ();\r
+ virtual void Process ( const Module& module );\r
+private:\r
+ void GenerateNativeDLLModuleTarget ( const Module& module );\r
+};\r
+\r
#endif /* MINGW_MODULEHANDLER_H */\r
return Kernel;\r
if ( attribute.value == "kernelmodedll" )\r
return KernelModeDLL;\r
+ if ( attribute.value == "nativedll" )\r
+ return NativeDLL;\r
throw InvalidAttributeValueException ( location,\r
attribute.name,\r
attribute.value );\r
return ".exe";\r
case KernelModeDLL:\r
return ".dll";\r
+ case NativeDLL:\r
+ return ".dll";\r
}\r
throw InvalidOperationException (__FILE__,\r
__LINE__);\r
BuildTool,\r
StaticLibrary,\r
Kernel,\r
- KernelModeDLL\r
+ KernelModeDLL,\r
+ NativeDLL\r
};\r
\r
\r