Build ntdll.dll.
authorCasper Hornstrup <chorns@users.sourceforge.net>
Tue, 11 Jan 2005 20:02:58 +0000 (20:02 +0000)
committerCasper Hornstrup <chorns@users.sourceforge.net>
Tue, 11 Jan 2005 20:02:58 +0000 (20:02 +0000)
svn path=/branches/xmlbuildsystem/; revision=12926

reactos/config.template.xml
reactos/lib/directory.xml
reactos/lib/ntdll/ntdll.xml [new file with mode: 0644]
reactos/tools/rbuild/backend/mingw/modulehandler.cpp
reactos/tools/rbuild/backend/mingw/modulehandler.h
reactos/tools/rbuild/module.cpp
reactos/tools/rbuild/rbuild.h

index 341c548..e69de29 100644 (file)
@@ -1,66 +0,0 @@
-<!--\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
index 42a7bf6..83f8296 100644 (file)
@@ -1,6 +1,9 @@
 <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
diff --git a/reactos/lib/ntdll/ntdll.xml b/reactos/lib/ntdll/ntdll.xml
new file mode 100644 (file)
index 0000000..0a8afdf
--- /dev/null
@@ -0,0 +1,108 @@
+<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
index de6c5e8..4542a1f 100644 (file)
@@ -719,3 +719,65 @@ MingwKernelModeDLLModuleHandler::GenerateKernelModeDLLModuleTarget ( const Modul
                          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
index 2d75222..d7bf6a5 100644 (file)
@@ -108,4 +108,14 @@ private:
        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
index 56ce688..fba4022 100644 (file)
@@ -152,6 +152,8 @@ Module::GetModuleType ( const string& location, const XMLAttribute& attribute )
                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
@@ -170,6 +172,8 @@ Module::GetDefaultModuleExtension () const
                        return ".exe";\r
                case KernelModeDLL:\r
                        return ".dll";\r
+               case NativeDLL:\r
+                       return ".dll";\r
        }\r
        throw InvalidOperationException (__FILE__,\r
                                         __LINE__);\r
index 1eb5cab..8411a35 100644 (file)
@@ -65,7 +65,8 @@ enum ModuleType
        BuildTool,\r
        StaticLibrary,\r
        Kernel,\r
-       KernelModeDLL\r
+       KernelModeDLL,\r
+       NativeDLL\r
 };\r
 \r
 \r