changeset 183:190ba98276b3

Several changes to make it build on posix systems. I've only tried to build on Mac OS X but it should build on Linux now as well. This should also fix ticket #9.
author Jacob Carlborg <doob@me.com>
date Mon, 25 Oct 2010 15:36:13 +0200
parents aa70dca07cb0
children 9f4e5ac4f0a3
files .hgignore bin/dmd.conf buildHelper.d commands.linux.txt commands.osx.txt dmd/Declaration.d dmd/File.d dmd/Library.d dmd/SwitchStatement.d dmd/Type.d dmd/TypeDArray.d dmd/Util.d dmd/backend/glue.d dmd/backend/iasm.d dmdpatch.patch linux_lib.mak main.d osx_lib.mak
diffstat 18 files changed, 1083 insertions(+), 34 deletions(-) [+]
line wrap: on
line diff
--- a/.hgignore	Mon Oct 18 00:36:44 2010 +0400
+++ b/.hgignore	Mon Oct 25 15:36:13 2010 +0200
@@ -5,9 +5,11 @@
 
 \.map$
 \.obj$
+\.o$
 glob:dmd2/*
 glob:dmd.*.zip
 glob:buildHelper.d.deps
 glob:buildHelper.exe
 glob:dmd.lib
 glob:bin/*
+glob:libdmd.a
--- a/bin/dmd.conf	Mon Oct 18 00:36:44 2010 +0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,3 +0,0 @@
-[Environment]
-DFLAGS=-I%@P%/../dmd33/dmd2/src/druntime/import/ -I%@P%/../dmd33/dmd2/src/druntime/src/common/ -I%@P%/../dmd33/dmd2/src/phobos/ -L-L%@P%/../dmd33/dmd2/linux/lib
-;CC=i686-unknown-linux-gnu-gcc
--- a/buildHelper.d	Mon Oct 18 00:36:44 2010 +0400
+++ b/buildHelper.d	Mon Oct 25 15:36:13 2010 +0200
@@ -10,20 +10,28 @@
 
 enum dmdVersionDefault = "2.040";
 enum dmdArchiveBaseURL = "http://ftp.digitalmars.com/";
-enum dmdLib = "dmd.lib";
+enum dmd = "dmd";
+
 version(Windows)
 {
 	enum scriptName = "build.bat";
 	enum osSubDir   = "windows";
 	enum configFile = "sc.ini";
 	enum execExt    = ".exe";
+	enum dmdLib = "dmd.lib";
 }
 else
 {
+	version (OSX)
+		enum osSubDir   = "osx";
+
+	else version (linux)
+		enum osSubDir   = "linux";
+
 	enum scriptName = "./build.sh";
-	enum osSubDir   = "linux";
 	enum configFile = "dmd.conf";
 	enum execExt    = "";
+	enum dmdLib = "libdmd.a";
 }
 
 string dmdVersion;
@@ -183,7 +191,12 @@
 		enum makefile = "win32.mak";
 	else
 	{
-		enum makefile = "linux_lib.mak";
+		version (linux)
+			enum makefile = "linux_lib.mak";
+
+		else version (OSX)
+			enum makefile = "osx_lib.mak";
+
 		doCopy("../../../"~makefile, makefile);
 	}
 
@@ -204,7 +217,7 @@
 		doSystem("make deblib -f"~makefile);
 	else
 		doSystem("make -f"~makefile);
-	doCopy("dmd.lib", "../../../dmd.lib");
+	doCopy(dmdLib, "../../../" ~ dmdLib);
 	
 	// Copy and patch config file
 	doChDir("../../..");
@@ -213,12 +226,13 @@
 		normFilePath("bin/"~configFile),
 		(ref string data) {
 			data = data.replace(normDirPath("../.."), normDirPath("../dmd2"));
-			data = data.replace(normDirPath("../lib"), normDirPath("../dmd2/"~osSubDir~"/lib"));
+			data = data.replace(normDirPath("../lib")[0 .. $ - 1], normDirPath("../dmd2/"~osSubDir~"/lib")[0 .. $ - 1]);
 		}
 	);
 
 	// Copy linker
-	doCopy("dmd2/"~osSubDir~"/bin/link"~execExt, "bin/link"~execExt);
+	version (Windows)
+		doCopy("dmd2/"~osSubDir~"/bin/link"~execExt, "bin/link"~execExt);
 
 	return true;
 }
@@ -317,14 +331,20 @@
 	{
 		system("cls");
 		if(ret == 0) ret = doSystem(r"dmc.exe bridge\bridge.cpp -c");
-		if(!releaseOnly) if(ret == 0) ret = doSystem(r"dmd -debug -g @commands.txt");
-		if(!debugOnly)   if(ret == 0) ret = doSystem(r"dmd -release -O -inline @commands.txt");
+		if(!releaseOnly) if(ret == 0) ret = doSystem(dmd ~ r" -debug -g @commands.txt");
+		if(!debugOnly)   if(ret == 0) ret = doSystem(dmd ~ r" -release -O -inline @commands.txt");
 	}
 	else
 	{
-		if(ret == 0) ret = doSystem("g++ -c bridge/bridge.cpp -obridge.o");
-		if(!releaseOnly) if(ret == 0) ret = doSystem("dmd -debug -gc @commands.linux.txt");
-		if(!debugOnly)   if(ret == 0) ret = doSystem("dmd -release -O -inline @commands.linux.txt");
+		version (linux)
+			auto commands = "@commands.linux.txt";
+
+		else version (OSX)
+			auto commands = "@commands.osx.txt";
+
+		if(ret == 0) ret = doSystem("g++ -m32 -c bridge/bridge.cpp -obridge.o");
+		if(!releaseOnly) if(ret == 0) ret = doSystem(dmd ~ " -debug -gc " ~ commands);
+		if(!debugOnly)   if(ret == 0) ret = doSystem(dmd ~ " -release -O -inline " ~ commands);
 	}
 	
 	return ret;
--- a/commands.linux.txt	Mon Oct 18 00:36:44 2010 +0400
+++ b/commands.linux.txt	Mon Oct 25 15:36:13 2010 +0200
@@ -17,14 +17,14 @@
 -version=SNAN_DEFAULT_INIT
 -version=SARRAYVALUE
 -version=MODULEINFO_IS_STRUCT
+-version=CPP_MANGLE
 -ofbin/ddmd
 
 bridge.o
--L-Ldmd32/dmd2/src/dmd
+-L-Ldmd2/src/dmd
 -L-ldmd
 -L-lstdc++
 main.d
-dbg/CallStackInfo.d 
 dbg/Debug.d
 dbg/symbol/CodeView.d
 dmd/AggregateDeclaration.d
@@ -90,6 +90,7 @@
 dmd/TypeInfoPointerDeclaration.d
 dmd/TypeInfoStaticArrayDeclaration.d
 dmd/TypeInfoAssociativeArrayDeclaration.d
+dmd/TypeInfoFunctionDeclaration.d
 dmd/DsymbolExp.d
 dmd/GlobalExpressions.d
 dmd/NewExp.d
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/commands.osx.txt	Mon Oct 25 15:36:13 2010 +0200
@@ -0,0 +1,400 @@
+-version=Bug3602
+-version=Bug4054
+-version=Bug4059
+-version=DMDV2
+-version=TX86
+-version=MARS
+-version=TARGET_OSX
+-version=POSIX
+-version=MACHOBJ
+-version=ELFOBJ_OR_MACHOBJ
+-version=NobodyCares
+-version=DumbClone
+-version=STRUCTTHISREF
+-version=CCASTSYNTAX
+-version=CARRAYDECL
+-version=BREAKABI
+-version=SNAN_DEFAULT_INIT
+-version=SARRAYVALUE
+-version=MODULEINFO_IS_STRUCT
+-version=CPP_MANGLE
+-ofbin/ddmd
+
+bridge.o
+-L-Ldmd2/src/dmd
+-L-ldmd
+-L-lstdc++
+-L-framework -LCoreServices
+main.d
+dbg/Debug.d
+dbg/symbol/CodeView.d
+dmd/AggregateDeclaration.d
+dmd/VarExp.d
+dmd/Tuple.d
+dmd/UnrolledLoopStatement.d
+dmd/SwitchErrorStatement.d
+dmd/NewAnonClassExp.d
+dmd/StructLiteralExp.d
+dmd/StaticIfCondition.d
+dmd/BoolExp.d
+dmd/ShlAssignExp.d
+dmd/ShrAssignExp.d
+dmd/UshrAssignExp.d
+dmd/CatAssignExp.d
+dmd/Port.d
+dmd/Gnuc.d
+dmd/declaration/Match.d
+dmd/interpret/Util.d
+dmd/templates/Util.d
+dmd/expression/Util.d
+dmd/expression/Add.d
+dmd/expression/Bool.d
+dmd/expression/Xor.d
+dmd/expression/Ptr.d
+dmd/expression/Min.d
+dmd/expression/And.d
+dmd/expression/Shr.d
+dmd/expression/Not.d
+dmd/expression/Mod.d
+dmd/expression/Mul.d
+dmd/expression/Com.d
+dmd/expression/Ushr.d
+dmd/expression/Shl.d
+dmd/expression/Div.d
+dmd/expression/Cmp.d
+dmd/expression/Identity.d
+dmd/expression/ArrayLength.d
+dmd/expression/Equal.d
+dmd/expression/Or.d
+dmd/expression/Neg.d
+dmd/expression/Cat.d
+dmd/expression/Slice.d
+dmd/expression/Index.d
+dmd/expression/shift_optimize.d
+dmd/expression/util/arrayTypeCompatible.d
+dmd/condition/util/findCondition.d
+dmd/OverExp.d
+dmd/Cast.d
+dmd/TupleExp.d
+dmd/ArrayLengthExp.d
+dmd/TypeInfoConstDeclaration.d
+dmd/TypeInfoInvariantDeclaration.d
+dmd/TypeInfoWildDeclaration.d
+dmd/TypeInfoSharedDeclaration.d
+dmd/TypeInfoStructDeclaration.d
+dmd/TypeInfoInterfaceDeclaration.d
+dmd/TypeInfoEnumDeclaration.d
+dmd/TypeInfoClassDeclaration.d
+dmd/TypeInfoArrayDeclaration.d
+dmd/TypeInfoDelegateDeclaration.d
+dmd/TypeInfoTypedefDeclaration.d
+dmd/TypeInfoPointerDeclaration.d
+dmd/TypeInfoStaticArrayDeclaration.d
+dmd/TypeInfoAssociativeArrayDeclaration.d
+dmd/TypeInfoFunctionDeclaration.d
+dmd/DsymbolExp.d
+dmd/GlobalExpressions.d
+dmd/NewExp.d
+dmd/PeelStatement.d
+dmd/HaltExp.d
+dmd/SymOffExp.d
+dmd/type/Util.d
+dmd/SymbolExp.d
+dmd/Optimize.d
+dmd/DotVarExp.d
+dmd/DeclarationExp.d
+dmd/TraitsExp.d
+dmd/ComplexExp.d
+dmd/ErrorExp.d
+dmd/AssignExp.d
+dmd/DotExp.d
+dmd/AliasDeclaration.d
+dmd/DefaultInitExp.d
+dmd/FileInitExp.d
+dmd/LineInitExp.d
+dmd/AnonDeclaration.d
+dmd/AliasThis.d
+dmd/AlignDeclaration.d
+dmd/AnonymousAggregateDeclaration.d
+dmd/Parameter.d
+dmd/FuncExp.d
+dmd/ArrayLiteralExp.d
+dmd/AssocArrayLiteralExp.d
+dmd/AssertExp.d
+dmd/IsExp.d
+dmd/TypeExp.d
+dmd/StringExp.d
+dmd/NullExp.d
+dmd/RealExp.d
+dmd/ThisExp.d
+dmd/ScopeExp.d
+dmd/Array.d
+dmd/DotIdExp.d
+dmd/FileExp.d
+dmd/SuperExp.d
+dmd/TypeidExp.d
+dmd/CompileExp.d
+dmd/IdentifierExp.d
+dmd/DollarExp.d
+dmd/AndAndExp.d
+dmd/DotTemplateInstanceExp.d
+dmd/OrExp.d
+dmd/PostExp.d
+dmd/CallExp.d
+dmd/SliceExp.d
+dmd/ArrayExp.d
+dmd/AddrExp.d
+dmd/UAddExp.d
+dmd/XorExp.d
+dmd/CommaExp.d
+dmd/BinExp.d
+dmd/CondExp.d
+dmd/OrOrExp.d
+dmd/AndExp.d
+dmd/InExp.d
+dmd/EqualExp.d
+dmd/CmpExp.d
+dmd/ShlExp.d
+dmd/AddExp.d
+dmd/CatExp.d
+dmd/MinExp.d
+dmd/MulExp.d
+dmd/ModExp.d
+dmd/DivExp.d
+dmd/ShrExp.d
+dmd/UshrExp.d
+dmd/CastExp.d
+dmd/DeleteExp.d
+dmd/ComExp.d
+dmd/NotExp.d
+dmd/UnaExp.d
+dmd/NegExp.d
+dmd/PtrExp.d
+dmd/IntegerExp.d
+dmd/AddAssignExp.d
+dmd/AndAssignExp.d
+dmd/DivAssignExp.d
+dmd/MinAssignExp.d
+dmd/ModAssignExp.d
+dmd/MulAssignExp.d
+dmd/OrAssignExp.d
+dmd/XorAssignExp.d
+dmd/IdentityExp.d
+dmd/ArrayInitializer.d
+dmd/ArrayScopeSymbol.d
+dmd/ArrayTypes.d
+dmd/AsmStatement.d
+dmd/AttribDeclaration.d
+dmd/BUILTIN.d
+dmd/BaseClass.d
+dmd/BreakStatement.d
+dmd/CaseRangeStatement.d
+dmd/CaseStatement.d
+dmd/Catch.d
+dmd/ClassDeclaration.d
+dmd/ClassInfoDeclaration.d
+dmd/CompileDeclaration.d
+dmd/CompileStatement.d
+dmd/CompoundDeclarationStatement.d
+dmd/CompoundStatement.d
+dmd/Condition.d
+dmd/ConditionalDeclaration.d
+dmd/ConditionalStatement.d
+dmd/ContinueStatement.d
+dmd/CppMangleState.d
+dmd/CtorDeclaration.d
+dmd/DVCondition.d
+dmd/Dchar.d
+dmd/DebugCondition.d
+dmd/DebugSymbol.d
+dmd/Declaration.d
+dmd/DeclarationStatement.d
+dmd/DefaultStatement.d
+dmd/DeleteDeclaration.d
+dmd/DoStatement.d
+dmd/DocComment.d
+dmd/Dsymbol.d
+dmd/DsymbolTable.d
+dmd/DtorDeclaration.d
+dmd/EnumDeclaration.d
+dmd/EnumMember.d
+dmd/Escape.d
+dmd/ExpInitializer.d
+dmd/ExpStatement.d
+dmd/Expression.d
+dmd/File.d
+dmd/FileName.d
+dmd/ForStatement.d
+dmd/ForeachRangeStatement.d
+dmd/ForeachStatement.d
+dmd/FuncAliasDeclaration.d
+dmd/FuncDeclaration.d
+dmd/FuncLiteralDeclaration.d
+dmd/Global.d
+dmd/GotoCaseStatement.d
+dmd/GotoDefaultStatement.d
+dmd/GotoStatement.d
+dmd/HdrGenState.d
+dmd/ILS.d
+dmd/IRState.d
+dmd/Id.d
+dmd/Identifier.d
+dmd/IfStatement.d
+dmd/Import.d
+dmd/Initializer.d
+dmd/InlineCostState.d
+dmd/InlineDoState.d
+dmd/InlineScanState.d
+dmd/IntRange.d
+dmd/InterState.d
+dmd/InterfaceDeclaration.d
+dmd/InvariantDeclaration.d
+dmd/Json.d
+dmd/LINK.d
+dmd/LabelDsymbol.d
+dmd/LabelStatement.d
+dmd/Lexer.d
+dmd/Library.d
+dmd/LinkDeclaration.d
+dmd/Loc.d
+dmd/Lstring.d
+dmd/MATCH.d
+dmd/Macro.d
+dmd/Module.d
+dmd/ModuleDeclaration.d
+dmd/ModuleInfoDeclaration.d
+dmd/NewDeclaration.d
+dmd/ObjModule.d
+dmd/OnScopeStatement.d
+dmd/OutBuffer.d
+dmd/OverloadSet.d
+dmd/PREC.d
+dmd/PROT.d
+dmd/Package.d
+dmd/Param.d
+dmd/Parser.d
+dmd/PostBlitDeclaration.d
+dmd/PowExp.d
+dmd/PowAssignExp.d
+dmd/PragmaDeclaration.d
+dmd/PragmaStatement.d
+dmd/ProtDeclaration.d
+dmd/RET.d
+dmd/ReturnStatement.d
+dmd/STC.d
+dmd/Scope.d
+dmd/ScopeDsymbol.d
+dmd/ScopeStatement.d
+dmd/Section.d
+dmd/Statement.d
+dmd/StaticAssert.d
+dmd/StaticAssertStatement.d
+dmd/StaticCtorDeclaration.d
+dmd/StaticDtorDeclaration.d
+dmd/StaticIfDeclaration.d
+dmd/StorageClassDeclaration.d
+dmd/String.d
+dmd/StringEntry.d
+dmd/StringTable.d
+dmd/StringValue.d
+dmd/StructDeclaration.d
+dmd/StructInitializer.d
+dmd/SwitchStatement.d
+dmd/SymbolDeclaration.d
+dmd/SynchronizedStatement.d
+dmd/SharedStaticCtorDeclaration.d
+dmd/SharedStaticDtorDeclaration.d
+dmd/TOK.d
+dmd/TRUST.d
+dmd/TY.d
+dmd/TemplateAliasParameter.d
+dmd/TemplateDeclaration.d
+dmd/TemplateInstance.d
+dmd/TemplateMixin.d
+dmd/TemplateParameter.d
+dmd/TemplateThisParameter.d
+dmd/TemplateTupleParameter.d
+dmd/TemplateTypeParameter.d
+dmd/TemplateValueParameter.d
+dmd/ThisDeclaration.d
+dmd/ThrowStatement.d
+dmd/Token.d
+dmd/TryCatchStatement.d
+dmd/TryFinallyStatement.d
+dmd/TupleDeclaration.d
+dmd/Type.d
+dmd/TypeAArray.d
+dmd/TypeArray.d
+dmd/TypeBasic.d
+dmd/TypeClass.d
+dmd/TypeDArray.d
+dmd/TypeDelegate.d
+dmd/TypeEnum.d
+dmd/TypeFunction.d
+dmd/TypeIdentifier.d
+dmd/TypeInfoDeclaration.d
+dmd/TypeInstance.d
+dmd/TypeNewArray.d
+dmd/TypeNext.d
+dmd/TypePointer.d
+dmd/TypeQualified.d
+dmd/TypeReference.d
+dmd/TypeReturn.d
+dmd/TypeSArray.d
+dmd/EnumUtils.d
+dmd/TypeSlice.d
+dmd/TypeStruct.d
+dmd/TypeTuple.d
+dmd/TypeTypedef.d
+dmd/TypeTypeof.d
+dmd/TypedefDeclaration.d
+dmd/TypeInfoTupleDeclaration
+dmd/UnionDeclaration.d
+dmd/UnitTestDeclaration.d
+dmd/Utf.d
+dmd/Util.d
+dmd/DotTemplateExp.d
+dmd/DelegateExp.d
+dmd/RemoveExp.d
+dmd/TemplateExp.d
+dmd/DotTypeExp.d
+dmd/IndexExp.d
+dmd/TObject.d
+dmd/VarDeclaration.d
+dmd/VersionCondition.d
+dmd/VersionSymbol.d
+dmd/VoidInitializer.d
+dmd/VolatileStatement.d
+dmd/WhileStatement.d
+dmd/WithScopeSymbol.d
+dmd/WithStatement.d
+dmd/backend/Blockx.d
+dmd/backend/enum_t.d
+dmd/backend/Symbol.d
+dmd/backend/Util.d
+dmd/backend/TYPE.d
+dmd/backend/TYM.d
+dmd/backend/mTY.d
+dmd/backend/block.d
+dmd/backend/code.d
+dmd/backend/glue.d
+dmd/backend/dt_t.d
+dmd/backend/elem.d
+dmd/backend/func_t.d
+dmd/backend/Cstate.d
+dmd/backend/TYFL.d
+dmd/backend/RTLSYM.d
+dmd/backend/symtab_t.d
+dmd/backend/Classsym.d
+dmd/backend/con_t.d
+dmd/backend/cse_t.d
+dmd/backend/struct_t.d
+dmd/backend/OPER.d
+dmd/backend/StringTab.d
+dmd/backend/DT.d
+dmd/backend/Configv.d
+dmd/backend/iasm.d
+dmd/backend/rel.d
+dmd/backend/LIST.d
+dmd/codegen/Util.d
+dmd/codegen/linkhelper.d
\ No newline at end of file
--- a/dmd/Declaration.d	Mon Oct 18 00:36:44 2010 +0400
+++ b/dmd/Declaration.d	Mon Oct 25 15:36:13 2010 +0200
@@ -15,6 +15,12 @@
 import dmd.VarDeclaration;
 import dmd.OutBuffer;
 
+version (CPP_MANGLE)
+{
+	import dmd.backend.glue;
+	import std.conv : to;
+}
+
 import std.stdio : writef;
 
 import core.stdc.ctype;
@@ -246,7 +252,7 @@
 
 			case LINK.LINKcpp:
 version (CPP_MANGLE) {
-				return cpp_mangle(this);
+				return to!(string)(cpp_mangle(this));
 } else {
 				// Windows C++ mangling is done by C++ back end
 				return ident.toChars();
--- a/dmd/File.d	Mon Oct 18 00:36:44 2010 +0400
+++ b/dmd/File.d	Mon Oct 25 15:36:13 2010 +0200
@@ -111,7 +111,7 @@
 			goto err2;
 		}
 
-		off_t size = buf.st_size;
+		size_t size = cast(size_t) buf.st_size;
 		buffer = cast(ubyte*)GC.malloc(size + 2);
 		if (buffer is null) {
 			printf("\tmalloc error, errno = %d\n", errno);
--- a/dmd/Library.d	Mon Oct 18 00:36:44 2010 +0400
+++ b/dmd/Library.d	Mon Oct 25 15:36:13 2010 +0200
@@ -1009,3 +1009,26 @@
 
 }
 }
+
+else version (TARGET_OSX)
+{
+	import dmd.TObject;
+
+	class Library : TObject
+	{
+	    void setFilename(string dir, string filename)
+	    {
+	    	assert(0);
+	    }
+
+	    void addObject(string module_name, void *buf, size_t buflen)
+	    {
+	    	assert(0);
+	    }
+
+	    void write()
+	    {
+	    	assert(0);
+	    }
+	}
+}
\ No newline at end of file
--- a/dmd/SwitchStatement.d	Mon Oct 18 00:36:44 2010 +0400
+++ b/dmd/SwitchStatement.d	Mon Oct 25 15:36:13 2010 +0200
@@ -50,6 +50,9 @@
 import dmd.backend.RTLSYM;
 import dmd.backend.targ_types;
 
+version (MACHOBJ)
+	import dmd.Module;
+
 import core.memory;
 
 import core.stdc.stdlib;
--- a/dmd/Type.d	Mon Oct 18 00:36:44 2010 +0400
+++ b/dmd/Type.d	Mon Oct 25 15:36:13 2010 +0200
@@ -936,6 +936,8 @@
 	}
 
 version (CPP_MANGLE) {
+	import dmd.CppMangleState;
+
     void toCppMangle(OutBuffer buf, CppMangleState* cms)
 	{
 		assert(false);
--- a/dmd/TypeDArray.d	Mon Oct 18 00:36:44 2010 +0400
+++ b/dmd/TypeDArray.d	Mon Oct 25 15:36:13 2010 +0200
@@ -281,7 +281,10 @@
 	}
 
 version (CPP_MANGLE) {
-    void toCppMangle(OutBuffer buf, CppMangleState* cms);
+    void toCppMangle(OutBuffer buf, CppMangleState* cms)
+	{
+		assert(false);
+	}
 }
 
     override type* toCtype()
--- a/dmd/Util.d	Mon Oct 18 00:36:44 2010 +0400
+++ b/dmd/Util.d	Mon Oct 25 15:36:13 2010 +0200
@@ -58,6 +58,8 @@
 	import dmd.Gnuc;
 	import core.sys.posix.stdlib;
 	version (TARGET_FOS) import core.stdc.limits;
+
+	enum PATH_MAX = 1024;
 }
 
 enum MAX_PATH = 256; ///
@@ -192,7 +194,7 @@
 					*/
 		version (TARGET_FOS) {/// #if __APPLE__ || __FreeBSD__ || __sun&&__SVR4
 					char resolved_name[PATH_MAX + 1];
-					char* real_argv0 = realpath(toStringz(argv0), resolved_name);
+					char* real_argv0 = realpath(toStringz(argv0), resolved_name.ptr);
 		} else {
 					char* real_argv0 = realpath(toStringz(argv0), null);
 		}
@@ -919,7 +921,7 @@
 			global.params.mapfile = cast(string)m[0..mlen];
 		}
 		argv.push(cast(void*)"-Xlinker".ptr);
-		argv.push(global.params.mapfile.ptr);
+		argv.push(cast(void*)global.params.mapfile.ptr);
     }
 
     if (0 && global.params.exefile)
--- a/dmd/backend/glue.d	Mon Oct 18 00:36:44 2010 +0400
+++ b/dmd/backend/glue.d	Mon Oct 25 15:36:13 2010 +0200
@@ -38,11 +38,23 @@
 		void util_set386();
 	}
 }
+else version (OSX)
+{
+	extern (C++)
+	{
+		int go_flag(char* cp);
+		void util_set64();
+		void util_set386();
+	}
+}
 else
 {
 	static assert(false, "fix this");
 }
 
+version (CPP_MANGLE)
+	extern (C++) char* cpp_mangle(Dsymbol s);
+
 import std.exception;
 import std.string;
 
--- a/dmd/backend/iasm.d	Mon Oct 18 00:36:44 2010 +0400
+++ b/dmd/backend/iasm.d	Mon Oct 25 15:36:13 2010 +0200
@@ -4489,7 +4489,7 @@
 }
 }
 
-extern(C)
+extern(C++)
 {
 	// backward reference from backend
 	
--- a/dmdpatch.patch	Mon Oct 18 00:36:44 2010 +0400
+++ b/dmdpatch.patch	Mon Oct 25 15:36:13 2010 +0200
@@ -13,7 +13,7 @@
      {	// Look for special class names
  
 -	if (id == Id::__sizeof || id == Id::alignof || id == Id::mangleof)
-+	if (id == Id::__sizeof || id == Id::__alignof || id == Id::mangleof)
++	if (id == Id::__sizeof || id == Id::_alignof || id == Id::mangleof)
  	    error("illegal class name");
  
  	// BUG: What if this is the wrong TypeInfo, i.e. it is nested?
@@ -25,7 +25,7 @@
  	if (sd->isAggregateDeclaration() || sd->isEnumDeclaration())
  	{
 -	    if (ident == Id::__sizeof || ident == Id::alignof || ident == Id::mangleof)
-+	    if (ident == Id::__sizeof || ident == Id::__alignof || ident == Id::mangleof)
++	    if (ident == Id::__sizeof || ident == Id::_alignof || ident == Id::mangleof)
  		error(".%s property cannot be redefined", ident->toChars());
  	}
  	return 1;
@@ -37,7 +37,7 @@
      else if (t1b->ty == Tpointer &&
  	     ident != Id::init && ident != Id::__sizeof &&
 -	     ident != Id::alignof && ident != Id::offsetof &&
-+	     ident != Id::__alignof && ident != Id::offsetof &&
++	     ident != Id::_alignof && ident != Id::offsetof &&
  	     ident != Id::mangleof && ident != Id::stringof)
      {	/* Rewrite:
           *   p.ident
@@ -49,7 +49,7 @@
      { "size" },
      { "__sizeof", "sizeof" },
 -    { "alignof" },
-+    { "__alignof", "alignof" },
++    { "_alignof", "alignof" },
      { "mangleof" },
      { "stringof" },
      { "tupleof" },
@@ -61,7 +61,7 @@
  	e = new ErrorExp();
      }
 -    else if (ident == Id::alignof)
-+    else if (ident == Id::__alignof)
++    else if (ident == Id::_alignof)
      {
  	e = new IntegerExp(loc, alignsize(), Type::tsize_t);
      }
@@ -70,7 +70,7 @@
  
      if (ident != Id::__sizeof &&
 -	ident != Id::alignof &&
-+	ident != Id::__alignof &&
++	ident != Id::_alignof &&
  	ident != Id::init &&
  	ident != Id::mangleof &&
  	ident != Id::stringof &&
--- a/linux_lib.mak	Mon Oct 18 00:36:44 2010 +0400
+++ b/linux_lib.mak	Mon Oct 25 15:36:13 2010 +0200
@@ -159,7 +159,7 @@
 	$(CC) -c $(CFLAGS) $<
 
 cast.o: cast.c
-	$(CC) -c $(CFLAGS) $< 
+	$(CC) -c $(CFLAGS) $<
 
 cg.o: fltables.c $C/cg.c
 	$(CC) -c $(MFLAGS) -I. $C/cg.c
@@ -219,7 +219,7 @@
 	$(CC) -c $(CFLAGS) $<
 
 irstate.o: irstate.h irstate.c
-	$(CC) -c $(MFLAGS) irstate.c
+	$(CC) -c $(MFLAGS) -I$(ROOT) irstate.c
 
 csymbol.o : $C/symbol.c
 	$(CC) -c $(MFLAGS) $C/symbol.c -o csymbol.o
@@ -255,7 +255,7 @@
 	$(CC) -c $(CFLAGS) $<
 
 dwarf.o: $C/dwarf.h $C/dwarf.c
-	$(CC) -c $(MFLAGS) $C/dwarf.c
+	$(CC) -c $(MFLAGS) -I. $C/dwarf.c
 
 e2ir.o: $C/rtlsym.h expression.h toir.h e2ir.c
 	$(CC) -c -I$(ROOT) $(MFLAGS) e2ir.c
@@ -379,7 +379,7 @@
 
 rmem.o: $(ROOT)/rmem.c
 	$(CC) -c $(GFLAGS) -I$(ROOT) $(ROOT)/rmem.c
-	
+
 module.o: $(TOTALH) $C/html.h module.c
 	$(CC) -c $(CFLAGS) -I$C module.c
 
@@ -444,7 +444,7 @@
 	$(CC) -c $(GFLAGS) -I$(ROOT) $<
 
 strtold.o: $C/strtold.c
-	$(CC) -c $C/strtold.c
+	gcc -m32 -c $C/strtold.c
 
 struct.o: struct.c
 	$(CC) -c $(CFLAGS) $<
--- a/main.d	Mon Oct 18 00:36:44 2010 +0400
+++ b/main.d	Mon Oct 25 15:36:13 2010 +0200
@@ -33,7 +33,8 @@
 
 import core.memory;
 
-import dbg.CallStackInfo;
+version (Windows)
+	import dbg.CallStackInfo;
 
 import dmd.Util;
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/osx_lib.mak	Mon Oct 25 15:36:13 2010 +0200
@@ -0,0 +1,577 @@
+
+C=backend
+TK=tk
+ROOT=root
+
+CC=g++ -m32
+#CC=/usr/bin/i686-unknown-linux-gnu-g++
+
+#OPT=-g -g3
+#OPT=-O2
+
+#COV=-fprofile-arcs -ftest-coverage
+
+GFLAGS = -Wno-deprecated -D__near= -D__pascal= -fno-exceptions -g -DDEBUG=1 $(COV)
+#GFLAGS = -Wno-deprecated -D__near= -D__pascal= -fno-exceptions -O2
+
+CFLAGS = $(GFLAGS) -I$(ROOT) -D__I86__=1 -DMARS=1 -DTARGET_OSX=1 -D_DH
+MFLAGS = $(GFLAGS) -I$C -I$(TK) -D__I86__=1 -DMARS=1 -DTARGET_OSX=1 -D_DH
+
+CH= $C/cc.h $C/global.h $C/parser.h $C/oper.h $C/code.h $C/type.h \
+	$C/dt.h $C/cgcv.h $C/el.h $C/iasm.h
+TOTALH=
+
+DMD_OBJS = \
+	access.o array.o attrib.o bcomplex.o bit.o blockopt.o \
+	cast.o code.o cg.o cg87.o cgcod.o cgcs.o cgcv.o cgelem.o cgen.o \
+	cgreg.o cgsched.o class.o cod1.o cod2.o cod3.o cod4.o cod5.o \
+	constfold.o irstate.o dchar.o cond.o debug.o \
+	declaration.o dsymbol.o dt.o dump.o e2ir.o ee.o eh.o el.o \
+	dwarf.o enum.o evalu8.o expression.o func.o gdag.o gflow.o \
+	glocal.o gloop.o glue.o gnuc.o go.o gother.o html.o iasm.o id.o \
+	identifier.o impcnvtab.o import.o inifile.o init.o inline.o \
+	lexer.o link.o lstring.o mangle.o mars.o rmem.o module.o msc.o mtype.o \
+	nteh.o cppmangle.o opover.o optimize.o os.o out.o outbuf.o \
+	parse.o ph.o ptrntab.o root.o rtlsym.o s2ir.o scope.o statement.o \
+	stringtable.o struct.o csymbol.o template.o tk.o tocsym.o todt.o \
+	type.o typinf.o util.o var.o version.o strtold.o utf.o staticassert.o \
+	unialpha.o toobj.o toctype.o toelfdebug.o entity.o doc.o macro.o \
+	hdrgen.o delegatize.o aa.o ti_achar.o toir.o interpret.o traits.o \
+	builtin.o clone.o aliasthis.o \
+	man.o arrayop.o port.o response.o async.o json.o \
+	libmach.o machobj.o
+
+SRC = win32.mak linux.mak osx.mak freebsd.mak solaris.mak \
+	mars.c enum.c struct.c dsymbol.c import.c idgen.c impcnvgen.c \
+	identifier.c mtype.c expression.c optimize.c template.h \
+	template.c lexer.c declaration.c cast.c cond.h cond.c link.c \
+	aggregate.h parse.c statement.c constfold.c version.h version.c \
+	inifile.c iasm.c module.c scope.c dump.c init.h init.c attrib.h \
+	attrib.c opover.c class.c mangle.c bit.c tocsym.c func.c inline.c \
+	access.c complex_t.h irstate.h irstate.c glue.c msc.c ph.c tk.c \
+	s2ir.c todt.c e2ir.c util.c identifier.h parse.h objfile.h \
+	scope.h enum.h import.h mars.h module.h mtype.h dsymbol.h \
+	declaration.h lexer.h expression.h irstate.h statement.h eh.c \
+	utf.h utf.c staticassert.h staticassert.c unialpha.c \
+	typinf.c toobj.c toctype.c tocvdebug.c toelfdebug.c entity.c \
+	doc.h doc.c macro.h macro.c hdrgen.h hdrgen.c arraytypes.h \
+	delegatize.c toir.h toir.c interpret.c traits.c cppmangle.c \
+	builtin.c clone.c lib.h libomf.c libelf.c libmach.c arrayop.c \
+	aliasthis.h aliasthis.c json.h json.c \
+	$C/cdef.h $C/cc.h $C/oper.h $C/ty.h $C/optabgen.c \
+	$C/global.h $C/parser.h $C/code.h $C/type.h $C/dt.h $C/cgcv.h \
+	$C/el.h $C/iasm.h $C/rtlsym.h $C/html.h \
+	$C/bcomplex.c $C/blockopt.c $C/cg.c $C/cg87.c \
+	$C/cgcod.c $C/cgcs.c $C/cgcv.c $C/cgelem.c $C/cgen.c $C/cgobj.c \
+	$C/cgreg.c $C/var.c $C/strtold.c \
+	$C/cgsched.c $C/cod1.c $C/cod2.c $C/cod3.c $C/cod4.c $C/cod5.c \
+	$C/code.c $C/symbol.c $C/debug.c $C/dt.c $C/ee.c $C/el.c \
+	$C/evalu8.c $C/go.c $C/gflow.c $C/gdag.c \
+	$C/gother.c $C/glocal.c $C/gloop.c $C/html.c $C/newman.c \
+	$C/nteh.c $C/os.c $C/out.c $C/outbuf.c $C/ptrntab.c $C/rtlsym.c \
+	$C/type.c $C/melf.h $C/mach.h $C/bcomplex.h \
+	$C/cdeflnx.h $C/outbuf.h $C/token.h $C/tassert.h \
+	$C/elfobj.c $C/cv4.h $C/dwarf2.h $C/cpp.h $C/exh.h $C/go.h \
+	$C/dwarf.c $C/dwarf.h $C/aa.h $C/aa.c $C/tinfo.h $C/ti_achar.c \
+	$C/machobj.c \
+	$(TK)/filespec.h $(TK)/mem.h $(TK)/list.h $(TK)/vec.h \
+	$(TK)/filespec.c $(TK)/mem.c $(TK)/vec.c $(TK)/list.c \
+	$(ROOT)/dchar.h $(ROOT)/dchar.c $(ROOT)/lstring.h \
+	$(ROOT)/lstring.c $(ROOT)/root.h $(ROOT)/root.c $(ROOT)/array.c \
+	$(ROOT)/rmem.h $(ROOT)/rmem.c $(ROOT)/port.h $(ROOT)/port.c \
+	$(ROOT)/gnuc.h $(ROOT)/gnuc.c $(ROOT)/man.c \
+	$(ROOT)/stringtable.h $(ROOT)/stringtable.c \
+	$(ROOT)/response.c $(ROOT)/async.h $(ROOT)/async.c
+
+
+all: dmd
+
+dmd: id.o optabgen $(DMD_OBJS)
+	ar rs libdmd.a $(DMD_OBJS)
+
+clean:
+	rm -f $(DMD_OBJS) dmd optab.o id.o impcnvgen idgen id.c id.h \
+	impcnvtab.c optabgen debtab.c optab.c cdxxx.c elxxx.c fltables.c \
+	tytab.c core \
+	*.cov *.gcda *.gcno
+
+######## optabgen generates some source
+
+optabgen: $C/optabgen.c $C/cc.h $C/oper.h
+	$(CC) $(MFLAGS) $< -o optabgen
+	./optabgen
+
+debtab.c optab.c cdxxx.c elxxx.c fltables.c tytab.c : optabgen
+	./optabgen
+
+######## idgen generates some source
+
+id.h id.c : idgen
+	./idgen
+
+idgen : idgen.c
+	$(CC) idgen.c -o idgen
+
+id.o : id.h id.c
+	$(CC) -c $(CFLAGS) id.c
+
+######### impcnvgen generates some source
+
+impcnvtab.c : impcnvgen
+	./impcnvgen
+
+impcnvgen : mtype.h impcnvgen.c
+	$(CC) $(CFLAGS) impcnvgen.c -o impcnvgen
+
+#########
+
+aa.o: $C/aa.h $C/tinfo.h $C/aa.c
+	$(CC) -c $(MFLAGS) -I. $C/aa.c
+
+access.o: access.c
+	$(CC) -c $(CFLAGS) $<
+
+aliasthis.o: aliasthis.c
+	$(CC) -c $(CFLAGS) $<
+
+array.o: $(ROOT)/array.c
+	$(CC) -c $(GFLAGS) -I$(ROOT) $<
+
+arrayop.o: arrayop.c
+	$(CC) -c $(CFLAGS) $<
+
+async.o: $(ROOT)/async.c
+	$(CC) -c $(GFLAGS) -I$(ROOT) $<
+
+attrib.o: attrib.c
+	$(CC) -c $(CFLAGS) $<
+
+bcomplex.o: $C/bcomplex.c
+	$(CC) -c $(MFLAGS) $C/bcomplex.c
+
+bit.o: expression.h bit.c
+	$(CC) -c -I$(ROOT) $(MFLAGS) bit.c
+
+blockopt.o: $C/blockopt.c
+	$(CC) -c $(MFLAGS) $C/blockopt.c
+
+builtin.o: builtin.c
+	$(CC) -c $(CFLAGS) $<
+
+cast.o: cast.c
+	$(CC) -c $(CFLAGS) $<
+
+cg.o: fltables.c $C/cg.c
+	$(CC) -c $(MFLAGS) -I. $C/cg.c
+
+cg87.o: $C/cg87.c
+	$(CC) -c $(MFLAGS) $<
+
+cgcod.o: $C/cgcod.c
+	$(CC) -c $(MFLAGS) -I. $<
+
+cgcs.o: $C/cgcs.c
+	$(CC) -c $(MFLAGS) $<
+
+cgcv.o: $C/cgcv.c
+	$(CC) -c $(MFLAGS) $<
+
+cgelem.o: $C/rtlsym.h $C/cgelem.c
+	$(CC) -c $(MFLAGS) -I. $C/cgelem.c
+
+cgen.o: $C/rtlsym.h $C/cgen.c
+	$(CC) -c $(MFLAGS) $C/cgen.c
+
+cgobj.o: $C/cgobj.c
+	$(CC) -c $(MFLAGS) $<
+
+cgreg.o: $C/cgreg.c
+	$(CC) -c $(MFLAGS) $<
+
+cgsched.o: $C/rtlsym.h $C/cgsched.c
+	$(CC) -c $(MFLAGS) $C/cgsched.c
+
+class.o: class.c
+	$(CC) -c $(CFLAGS) $<
+
+clone.o: clone.c
+	$(CC) -c $(CFLAGS) $<
+
+cod1.o: $C/rtlsym.h $C/cod1.c
+	$(CC) -c $(MFLAGS) $C/cod1.c
+
+cod2.o: $C/rtlsym.h $C/cod2.c
+	$(CC) -c $(MFLAGS) $C/cod2.c
+
+cod3.o: $C/rtlsym.h $C/cod3.c
+	$(CC) -c $(MFLAGS) $C/cod3.c
+
+cod4.o: $C/cod4.c
+	$(CC) -c $(MFLAGS) $<
+
+cod5.o: $C/cod5.c
+	$(CC) -c $(MFLAGS) $<
+
+code.o: $C/code.c
+	$(CC) -c $(MFLAGS) $<
+
+constfold.o: constfold.c
+	$(CC) -c $(CFLAGS) $<
+
+irstate.o: irstate.h irstate.c
+	$(CC) -c $(MFLAGS) -I$(ROOT) irstate.c
+
+csymbol.o : $C/symbol.c
+	$(CC) -c $(MFLAGS) $C/symbol.c -o csymbol.o
+
+dchar.o: $(ROOT)/dchar.c
+	$(CC) -c $(GFLAGS) -I$(ROOT) $<
+
+cond.o: cond.c
+	$(CC) -c $(CFLAGS) $<
+
+cppmangle.o: cppmangle.c
+	$(CC) -c $(CFLAGS) $<
+
+debug.o: $C/debug.c
+	$(CC) -c $(MFLAGS) -I. $<
+
+declaration.o: declaration.c
+	$(CC) -c $(CFLAGS) $<
+
+delegatize.o: delegatize.c
+	$(CC) -c $(CFLAGS) $<
+
+doc.o: doc.c
+	$(CC) -c $(CFLAGS) $<
+
+dsymbol.o: dsymbol.c
+	$(CC) -c $(CFLAGS) $<
+
+dt.o: $C/dt.h $C/dt.c
+	$(CC) -c $(MFLAGS) $C/dt.c
+
+dump.o: dump.c
+	$(CC) -c $(CFLAGS) $<
+
+dwarf.o: $C/dwarf.h $C/dwarf.c
+	$(CC) -c $(MFLAGS) -I. $C/dwarf.c
+
+e2ir.o: $C/rtlsym.h expression.h toir.h e2ir.c
+	$(CC) -c -I$(ROOT) $(MFLAGS) e2ir.c
+
+ee.o: $C/ee.c
+	$(CC) -c $(MFLAGS) $<
+
+eh.o : $C/cc.h $C/code.h $C/type.h $C/dt.h eh.c
+	$(CC) -c $(MFLAGS) eh.c
+
+el.o: $C/rtlsym.h $C/el.h $C/el.c
+	$(CC) -c $(MFLAGS) $C/el.c
+
+elfobj.o: $C/elfobj.c
+	$(CC) -c $(MFLAGS) $<
+
+entity.o: entity.c
+	$(CC) -c $(CFLAGS) $<
+
+enum.o: enum.c
+	$(CC) -c $(CFLAGS) $<
+
+evalu8.o: $C/evalu8.c
+	$(CC) -c $(MFLAGS) $<
+
+expression.o: expression.c
+	$(CC) -c $(CFLAGS) $<
+
+func.o: func.c
+	$(CC) -c $(CFLAGS) $<
+
+gdag.o: $C/gdag.c
+	$(CC) -c $(MFLAGS) $<
+
+gflow.o: $C/gflow.c
+	$(CC) -c $(MFLAGS) $<
+
+#globals.o: globals.c
+#	$(CC) -c $(CFLAGS) $<
+
+glocal.o: $C/rtlsym.h $C/glocal.c
+	$(CC) -c $(MFLAGS) $C/glocal.c
+
+gloop.o: $C/gloop.c
+	$(CC) -c $(MFLAGS) $<
+
+glue.o: $(CH) $(TOTALH) $C/rtlsym.h mars.h module.h glue.c
+	$(CC) -c $(MFLAGS) -I$(ROOT) glue.c
+
+gnuc.o: $(ROOT)/gnuc.h $(ROOT)/gnuc.c
+	$(CC) -c $(GFLAGS) $(ROOT)/gnuc.c
+
+go.o: $C/go.c
+	$(CC) -c $(MFLAGS) $<
+
+gother.o: $C/gother.c
+	$(CC) -c $(MFLAGS) $<
+
+hdrgen.o: hdrgen.c
+	$(CC) -c $(CFLAGS) $<
+
+html.o: $(CH) $(TOTALH) $C/html.h $C/html.c
+	$(CC) -c -I$(ROOT) $(MFLAGS) $C/html.c
+
+iasm.o : $(CH) $(TOTALH) $C/iasm.h iasm.c
+	$(CC) -c $(MFLAGS) -I$(ROOT) iasm.c
+
+identifier.o: identifier.c
+	$(CC) -c $(CFLAGS) $<
+
+impcnvtab.o: mtype.h impcnvtab.c
+	$(CC) -c $(CFLAGS) -I$(ROOT) impcnvtab.c
+
+import.o: import.c
+	$(CC) -c $(CFLAGS) $<
+
+inifile.o: inifile.c
+	$(CC) -c $(CFLAGS) $<
+
+init.o: init.c
+	$(CC) -c $(CFLAGS) $<
+
+inline.o: inline.c
+	$(CC) -c $(CFLAGS) $<
+
+interpret.o: interpret.c
+	$(CC) -c $(CFLAGS) $<
+
+json.o: json.c
+	$(CC) -c $(CFLAGS) $<
+
+lexer.o: lexer.c
+	$(CC) -c $(CFLAGS) $<
+
+libelf.o: libelf.c $C/melf.h
+	$(CC) -c $(CFLAGS) -I$C $<
+
+libmach.o: libmach.c $C/mach.h
+	$(CC) -c $(CFLAGS) -I$C $<
+
+link.o: link.c
+	$(CC) -c $(CFLAGS) $<
+
+lstring.o: $(ROOT)/lstring.c
+	$(CC) -c $(GFLAGS) -I$(ROOT) $<
+
+machobj.o: $C/machobj.c
+	$(CC) -c $(MFLAGS) -I. $<
+
+macro.o: macro.c
+	$(CC) -c $(CFLAGS) $<
+
+man.o: $(ROOT)/man.c
+	$(CC) -c $(GFLAGS) -I$(ROOT) $<
+
+mangle.o: mangle.c
+	$(CC) -c $(CFLAGS) $<
+
+mars.o: mars.c
+	$(CC) -c $(CFLAGS) $<
+
+rmem.o: $(ROOT)/rmem.c
+	$(CC) -c $(GFLAGS) -I$(ROOT) $(ROOT)/rmem.c
+
+module.o: $(TOTALH) $C/html.h module.c
+	$(CC) -c $(CFLAGS) -I$C module.c
+
+msc.o: $(CH) mars.h msc.c
+	$(CC) -c $(MFLAGS) msc.c
+
+mtype.o: mtype.c
+	$(CC) -c $(CFLAGS) $<
+
+nteh.o: $C/rtlsym.h $C/nteh.c
+	$(CC) -c $(MFLAGS) $C/nteh.c
+
+opover.o: opover.c
+	$(CC) -c $(CFLAGS) $<
+
+optimize.o: optimize.c
+	$(CC) -c $(CFLAGS) $<
+
+os.o: $C/os.c
+	$(CC) -c $(MFLAGS) $<
+
+out.o: $C/out.c
+	$(CC) -c $(MFLAGS) $<
+
+outbuf.o : $C/outbuf.h $C/outbuf.c
+	$(CC) -c $(MFLAGS) $C/outbuf.c
+
+parse.o: parse.c
+	$(CC) -c $(CFLAGS) $<
+
+ph.o: ph.c
+	$(CC) -c $(MFLAGS) $<
+
+port.o: $(ROOT)/port.c
+	$(CC) -c $(GFLAGS) -I$(ROOT) $<
+
+ptrntab.o: $C/iasm.h $C/ptrntab.c
+	$(CC) -c $(MFLAGS) $C/ptrntab.c
+
+response.o: $(ROOT)/response.c
+	$(CC) -c $(GFLAGS) -I$(ROOT) $<
+
+root.o: $(ROOT)/root.c
+	$(CC) -c $(GFLAGS) -I$(ROOT) $<
+
+rtlsym.o: $C/rtlsym.h $C/rtlsym.c
+	$(CC) -c $(MFLAGS) $C/rtlsym.c
+
+s2ir.o : $C/rtlsym.h statement.h s2ir.c
+	$(CC) -c -I$(ROOT) $(MFLAGS) s2ir.c
+
+scope.o: scope.c
+	$(CC) -c $(CFLAGS) $<
+
+statement.o: statement.c
+	$(CC) -c $(CFLAGS) $<
+
+staticassert.o: staticassert.h staticassert.c
+	$(CC) -c $(CFLAGS) staticassert.c
+
+stringtable.o: $(ROOT)/stringtable.c
+	$(CC) -c $(GFLAGS) -I$(ROOT) $<
+
+strtold.o: $C/strtold.c
+	gcc -m32 -c $C/strtold.c
+
+struct.o: struct.c
+	$(CC) -c $(CFLAGS) $<
+
+template.o: template.c
+	$(CC) -c $(CFLAGS) $<
+
+ti_achar.o: $C/tinfo.h $C/ti_achar.c
+	$(CC) -c $(MFLAGS) -I. $C/ti_achar.c
+
+tk.o: tk.c
+	$(CC) -c $(MFLAGS) tk.c
+
+tocsym.o: $(CH) $(TOTALH) mars.h module.h tocsym.c
+	$(CC) -c $(MFLAGS) -I$(ROOT) tocsym.c
+
+toctype.o: $(CH) $(TOTALH) $C/rtlsym.h mars.h module.h toctype.c
+	$(CC) -c $(MFLAGS) -I$(ROOT) toctype.c
+
+todt.o : mtype.h expression.h $C/dt.h todt.c
+	$(CC) -c -I$(ROOT) $(MFLAGS) todt.c
+
+toelfdebug.o: $(CH) $(TOTALH) mars.h toelfdebug.c
+	$(CC) -c $(MFLAGS) -I$(ROOT) toelfdebug.c
+
+toir.o: $C/rtlsym.h expression.h toir.h toir.c
+	$(CC) -c -I$(ROOT) $(MFLAGS) toir.c
+
+toobj.o: $(CH) $(TOTALH) mars.h module.h toobj.c
+	$(CC) -c $(MFLAGS) -I$(ROOT) toobj.c
+
+traits.o: $(TOTALH) traits.c
+	$(CC) -c $(CFLAGS) $<
+
+type.o: $C/type.c
+	$(CC) -c $(MFLAGS) $C/type.c
+
+typinf.o: $(CH) $(TOTALH) mars.h module.h mtype.h typinf.c
+	$(CC) -c $(MFLAGS) -I$(ROOT) typinf.c
+
+util.o: util.c
+	$(CC) -c $(MFLAGS) $<
+
+utf.o: utf.h utf.c
+	$(CC) -c $(CFLAGS) utf.c
+
+unialpha.o: unialpha.c
+	$(CC) -c $(CFLAGS) $<
+
+var.o: $C/var.c optab.c
+	$(CC) -c $(MFLAGS) -I. $C/var.c
+
+version.o: version.c
+	$(CC) -c $(CFLAGS) $<
+
+######################################################
+
+gcov:
+	gcov access.c
+	gcov aliasthis.c
+	gcov arrayop.c
+	gcov attrib.c
+	gcov bit.c
+	gcov builtin.c
+	gcov cast.c
+	gcov class.c
+	gcov clone.c
+	gcov cond.c
+	gcov constfold.c
+	gcov declaration.c
+	gcov delegatize.c
+	gcov doc.c
+	gcov dsymbol.c
+	gcov dump.c
+	gcov e2ir.c
+	gcov eh.c
+	gcov entity.c
+	gcov enum.c
+	gcov expression.c
+	gcov func.c
+	gcov glue.c
+	gcov iasm.c
+	gcov identifier.c
+	gcov imphint.c
+	gcov import.c
+	gcov inifile.c
+	gcov init.c
+	gcov inline.c
+	gcov interpret.c
+	gcov irstate.c
+	gcov json.c
+	gcov lexer.c
+	gcov libmach.c
+	gcov link.c
+	gcov macro.c
+	gcov mangle.c
+	gcov mars.c
+	gcov module.c
+	gcov msc.c
+	gcov mtype.c
+	gcov opover.c
+	gcov optimize.c
+	gcov parse.c
+	gcov ph.c
+	gcov scope.c
+	gcov statement.c
+	gcov staticassert.c
+	gcov s2ir.c
+	gcov struct.c
+	gcov template.c
+	gcov tk.c
+	gcov tocsym.c
+	gcov todt.c
+	gcov toobj.c
+	gcov toctype.c
+	gcov toelfdebug.c
+	gcov typinf.c
+	gcov unialpha.c
+	gcov utf.c
+	gcov util.c
+	gcov version.c
+
+#	gcov hdrgen.c
+#	gcov tocvdebug.c
+
+######################################################
+
+zip:
+	-rm -f dmdsrc.zip
+	zip dmdsrc $(SRC)