# HG changeset patch # User Trass3r # Date 1284422088 -7200 # Node ID 31c086f76669977c8a8682639649d4bb39680123 # Parent bc45b1c53019711d1d1e63448c17eec827442da7 dmd.lib now only contains the backend backward references from the backend to the frontend are implemented in ddmd win32_lib.mak is replaced by a patch also fixed VisualD project file predefined versions diff -r bc45b1c53019 -r 31c086f76669 commands.linux.txt --- a/commands.linux.txt Tue Sep 14 01:13:58 2010 +0200 +++ b/commands.linux.txt Tue Sep 14 01:54:48 2010 +0200 @@ -392,3 +392,4 @@ dmd/backend/rel.d dmd/backend/LIST.d dmd/codegen/Util.d +dmd/codegen/linkhelper.d \ No newline at end of file diff -r bc45b1c53019 -r 31c086f76669 commands.txt --- a/commands.txt Tue Sep 14 01:13:58 2010 +0200 +++ b/commands.txt Tue Sep 14 01:54:48 2010 +0200 @@ -387,4 +387,5 @@ dmd\backend\iasm.d dmd\backend\rel.d dmd\backend\LIST.d -dmd\codegen\Util.d \ No newline at end of file +dmd\codegen\Util.d +dmd\codegen\linkhelper.d \ No newline at end of file diff -r bc45b1c53019 -r 31c086f76669 ddmd.visualdproj --- a/ddmd.visualdproj Tue Sep 14 01:13:58 2010 +0200 +++ b/ddmd.visualdproj Tue Sep 14 01:54:48 2010 +0200 @@ -59,7 +59,7 @@ 0 0 - DMDV2 TX86 MARS _WIN32 TARGET_WINDOS OMFOBJ WindowsXP DumbClone BREAKABI SEH STRUCTTHISREF SNAN_DEFAULT_INIT SARRAYVALUE + DMDV2 TX86 MARS _WIN32 TARGET_WINDOS OMFOBJ WindowsXP DumbClone BREAKABI SEH STRUCTTHISREF CCASTSYNTAX CARRAYDECL SNAN_DEFAULT_INIT SARRAYVALUE 0 0 0 @@ -146,7 +146,7 @@ 0 0 - DMDV2 TX86 MARS _WIN32 TARGET_WINDOS OMFOBJ WindowsXP DumbClone BREAKABI SEH STRUCTTHISREF SNAN_DEFAULT_INIT SARRAYVALUE + DMDV2 TX86 MARS _WIN32 TARGET_WINDOS OMFOBJ WindowsXP DumbClone BREAKABI SEH STRUCTTHISREF CCASTSYNTAX CARRAYDECL SNAN_DEFAULT_INIT SARRAYVALUE 0 0 0 @@ -246,6 +246,7 @@ + diff -r bc45b1c53019 -r 31c086f76669 dmd/Type.d --- a/dmd/Type.d Tue Sep 14 01:13:58 2010 +0200 +++ b/dmd/Type.d Tue Sep 14 01:54:48 2010 +0200 @@ -89,15 +89,15 @@ * REALALIGNSIZE = alignment for reals */ version (TARGET_OSX) { - int REALSIZE = 16; + extern(C++) int REALSIZE = 16; int REALPAD = 6; int REALALIGNSIZE = 16; } else version (POSIX) { /// TARGET_LINUX || TARGET_FREEBSD || TARGET_SOLARIS - int REALSIZE = 12; + extern(C++) int REALSIZE = 12; int REALPAD = 2; int REALALIGNSIZE = 4; } else { - int REALSIZE = 10; + extern(C++) int REALSIZE = 10; int REALPAD = 0; int REALALIGNSIZE = 2; } diff -r bc45b1c53019 -r 31c086f76669 dmd/VolatileStatement.d --- a/dmd/VolatileStatement.d Tue Sep 14 01:13:58 2010 +0200 +++ b/dmd/VolatileStatement.d Tue Sep 14 01:54:48 2010 +0200 @@ -15,6 +15,9 @@ import dmd.backend.Blockx; import dmd.backend.Util; import dmd.backend.BC; +import dmd.backend.elem; +import dmd.backend.OPER; +import dmd.backend.mTY; //import dmd.backend.BFL; class VolatileStatement : Statement @@ -70,6 +73,23 @@ return this; } + static void el_setVolatile(elem* e) + { + while (1) + { + e.Ety |= mTYvolatile; + if (OTunary(e.Eoper)) + e = e.E1; + else if (OTbinary(e.Eoper)) + { + el_setVolatile(e.E2); + e = e.E1; + } + else + break; + } + } + override void toIR(IRState* irs) { block* b; diff -r bc45b1c53019 -r 31c086f76669 dmd/backend/OPER.d --- a/dmd/backend/OPER.d Tue Sep 14 01:13:58 2010 +0200 +++ b/dmd/backend/OPER.d Tue Sep 14 01:54:48 2010 +0200 @@ -324,12 +324,17 @@ #define _OTboolnop 1 +/ -ubyte OTbinary(OPER op) { +ubyte OTbinary(OPER op) +{ return (optab1[op] & _OT._OTbinary); } +ubyte OTunary(OPER op) +{ + return (optab1[op] & _OT._OTunary); +} + /+ -#define OTunary(op) (optab1[op]&_OTunary) #define OTleaf(op) (!(optab1[op]&(_OTunary|_OTbinary))) #define OTcommut(op) (optab1[op]&_OTcommut) #define OTassoc(op) (optab1[op]&_OTassoc) diff -r bc45b1c53019 -r 31c086f76669 dmd/backend/Util.d --- a/dmd/backend/Util.d Tue Sep 14 01:13:58 2010 +0200 +++ b/dmd/backend/Util.d Tue Sep 14 01:54:48 2010 +0200 @@ -167,7 +167,7 @@ elem_p el_copytree(elem_p); int el_allbits(elem *e, int bit); block* block_goto(Blockx* bctx, BC bc, block* bn); - block* block_calloc(Blockx* blx); +// block* block_calloc(Blockx* blx); targ_size_t type_paramsize_i(type* t); int os_critsecsize(); void el_setVolatile(elem* e); @@ -175,6 +175,15 @@ elem* el_const(tym_t, eve*); elem *el_params(void** args, int length); + /**************************************** + * Allocate a new block, and set the tryblock. + */ + block *block_calloc(Blockx *blx) + { + block* b = block_calloc(); + b.Btry = blx.tryblock; + return b; + } version (SEH) { void nteh_declarvars(Blockx* bx); diff -r bc45b1c53019 -r 31c086f76669 dmd/backend/glue.d --- a/dmd/backend/glue.d Tue Sep 14 01:13:58 2010 +0200 +++ b/dmd/backend/glue.d Tue Sep 14 01:54:48 2010 +0200 @@ -20,12 +20,12 @@ import core.stdc.string; __gshared Array obj_symbols_towrite; +__gshared Outbuffer objbuf; version (Windows) { extern (C++) extern { - __gshared Outbuffer objbuf; int go_flag(char* cp); void util_set64(); void util_set386(); @@ -35,7 +35,6 @@ { extern (C++) { - extern(C) extern __gshared Outbuffer objbuf; int go_flag(char* cp); void util_set64(); void util_set386(); diff -r bc45b1c53019 -r 31c086f76669 dmd/backend/iasm.d --- a/dmd/backend/iasm.d Tue Sep 14 01:13:58 2010 +0200 +++ b/dmd/backend/iasm.d Tue Sep 14 01:54:48 2010 +0200 @@ -36,6 +36,7 @@ import dmd.backend.Config; import dmd.backend.targ_types; import dmd.backend.elem; +import dmd.backend.block; import dmd.Util; import std.stdio : writef, writefln; @@ -4466,3 +4467,22 @@ (szReg[1] == 't' || szReg[1] == 'T')); } } + +extern(C) +{ + // backward reference from backend + + extern int refparam; + + /********************************** + * Return mask of registers used by block bp. + */ + regm_t iasm_regs(block *bp) + { + debug if (debuga) + printf("Block iasm regs = 0x%X\n", bp.usIasmregs); + + refparam |= bp.bIasmrefparam; + return bp.usIasmregs; + } +} \ No newline at end of file diff -r bc45b1c53019 -r 31c086f76669 dmd/codegen/Util.d --- a/dmd/codegen/Util.d Tue Sep 14 01:13:58 2010 +0200 +++ b/dmd/codegen/Util.d Tue Sep 14 01:54:48 2010 +0200 @@ -55,6 +55,7 @@ import dmd.backend.RTLSYM; import dmd.backend.block; import dmd.backend.LIST; +import dmd.backend.iasm : binary; import std.string; import core.stdc.string; @@ -652,13 +653,123 @@ * Returns that operator, -1 if not an intrinsic function. */ -extern (C++) extern int intrinsic_op(char* name); - +//extern (C++) extern int intrinsic_op(char* name); + OPER intrinsic_oper(const(char)* name) { - int result = intrinsic_op(cast(char*)name); - if (result == -1) return OPER.OPMAX; - return cast(OPER)result; + version(DMDV1) + static const(char) *namearray[] = + [ + "4math3cosFeZe", + "4math3sinFeZe", + "4math4fabsFeZe", + "4math4rintFeZe", + "4math4sqrtFdZd", + "4math4sqrtFeZe", + "4math4sqrtFfZf", + "4math4yl2xFeeZe", + "4math5ldexpFeiZe", + "4math6rndtolFeZl", + "4math6yl2xp1FeeZe", + + "9intrinsic2btFPkkZi", + "9intrinsic3bsfFkZi", + "9intrinsic3bsrFkZi", + "9intrinsic3btcFPkkZi", + "9intrinsic3btrFPkkZi", + "9intrinsic3btsFPkkZi", + "9intrinsic3inpFkZh", + "9intrinsic4inplFkZk", + "9intrinsic4inpwFkZt", + "9intrinsic4outpFkhZh", + "9intrinsic5bswapFkZk", + "9intrinsic5outplFkkZk", + "9intrinsic5outpwFktZt", + ]; +else + static const(char) *namearray[] = + [ + /* The names are mangled differently because of the pure and + * nothrow attributes. + */ + "4math3cosFNaNbNfeZe", + "4math3sinFNaNbNfeZe", + "4math4fabsFNaNbNfeZe", + "4math4rintFNaNbNfeZe", + "4math4sqrtFNaNbNfdZd", + "4math4sqrtFNaNbNfeZe", + "4math4sqrtFNaNbNffZf", + "4math4yl2xFNaNbNfeeZe", + "4math5ldexpFNaNbNfeiZe", + "4math6rndtolFNaNbNfeZl", + "4math6yl2xp1FNaNbNfeeZe", + + "9intrinsic2btFNaNbxPkkZi", + "9intrinsic3bsfFNaNbkZi", + "9intrinsic3bsrFNaNbkZi", + "9intrinsic3btcFNbPkkZi", + "9intrinsic3btrFNbPkkZi", + "9intrinsic3btsFNbPkkZi", + "9intrinsic3inpFNbkZh", + "9intrinsic4inplFNbkZk", + "9intrinsic4inpwFNbkZt", + "9intrinsic4outpFNbkhZh", + "9intrinsic5bswapFNaNbkZk", + "9intrinsic5outplFNbkkZk", + "9intrinsic5outpwFNbktZt", + ]; + + static const OPER ioptab[] = + [ + OPcos, + OPsin, + OPabs, + OPrint, + OPsqrt, + OPsqrt, + OPsqrt, + OPyl2x, + OPscale, + OPrndtol, + OPyl2xp1, + + OPbt, + OPbsf, + OPbsr, + OPbtc, + OPbtr, + OPbts, + OPinp, + OPinp, + OPinp, + OPoutp, + OPbswap, + OPoutp, + OPoutp, + ]; + + debug + { + assert(namearray.length == ioptab.length); + // assume sorted namearray + for (int i = 0; i < namearray.length - 1; i++) + { + if (strcmp(namearray[i], namearray[i + 1]) >= 0) + { + printf("namearray[%d] = '%s'\n", i, namearray[i]); + assert(0); + } + } + } + + size_t length = strlen(name); + if (length < 11 || !(name[7] == 'm' || name[7] == 'i') || name[0..6] != "_D3std") + return OPMAX; + + int p = binary(name + 6, namearray.ptr, namearray.length); + if(p == -1) + return OPMAX; + return ioptab[p]; } /************************************** @@ -790,13 +901,13 @@ { elength = *pe; *pe = el_same(&elength); - elength = el_una(OPER.OP64_32, TYM.TYuint, elength); + elength = el_una(OP64_32, TYM.TYuint, elength); L3: slength = lengthVar.toSymbol(); //symbol_add(slength); - einit = el_bin(OPER.OPeq, TYM.TYuint, el_var(slength), elength); + einit = el_bin(OPeq, TYM.TYuint, el_var(slength), elength); } } return einit; diff -r bc45b1c53019 -r 31c086f76669 dmd/codegen/linkhelper.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/dmd/codegen/linkhelper.d Tue Sep 14 01:54:48 2010 +0200 @@ -0,0 +1,32 @@ +module dmd.codegen.linkhelper; + +import dmd.Loc; +import dmd.Util; + +import core.stdc.stdarg; +import std.conv; + +// help resolve some linker dependencies from the backend back into the frontend + +extern(C++) +{ + // msc.c wants to access global from out_config_init(), but it should never be called + struct Global {} + Global global; + + void error(const char *filename, uint linnum, const char *format, ...) + { + Loc loc; + loc.filename = to!string(filename); + loc.linnum = linnum; + + va_list ap; + va_start(ap, format); + + char buf[1024]; + vsprintf(buf.ptr, format, ap); + va_end( ap ); + + dmd.Util.error(loc, to!string(buf)); + } +} diff -r bc45b1c53019 -r 31c086f76669 dmdpatch.patch --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/dmdpatch.patch Tue Sep 14 01:54:48 2010 +0200 @@ -0,0 +1,183 @@ +# HG changeset patch +# User trass3r +# Date 1284418540 -7200 +# Node ID a4ec24e030fdda493d8d1249ef966e0beed13e1e +# Parent 0ebf1721e4d32cfb38376c6688a767627aa63758 +t + +diff -r 0ebf1721e4d3 -r a4ec24e030fd src/dmd/class.c +--- a/src/dmd/class.c Mon Sep 13 15:46:31 2010 +0200 ++++ b/src/dmd/class.c Tue Sep 14 00:55:40 2010 +0200 +@@ -61,7 +61,7 @@ + if (id) + { // 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) + error("illegal class name"); + + // BUG: What if this is the wrong TypeInfo, i.e. it is nested? +diff -r 0ebf1721e4d3 -r a4ec24e030fd src/dmd/dsymbol.c +--- a/src/dmd/dsymbol.c Mon Sep 13 15:46:31 2010 +0200 ++++ b/src/dmd/dsymbol.c Tue Sep 14 00:55:40 2010 +0200 +@@ -488,7 +488,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) + error(".%s property cannot be redefined", ident->toChars()); + } + return 1; +diff -r 0ebf1721e4d3 -r a4ec24e030fd src/dmd/expression.c +--- a/src/dmd/expression.c Mon Sep 13 15:46:31 2010 +0200 ++++ b/src/dmd/expression.c Tue Sep 14 00:55:40 2010 +0200 +@@ -5953,7 +5953,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::mangleof && ident != Id::stringof) + { /* Rewrite: + * p.ident +diff -r 0ebf1721e4d3 -r a4ec24e030fd src/dmd/idgen.c +--- a/src/dmd/idgen.c Mon Sep 13 15:46:31 2010 +0200 ++++ b/src/dmd/idgen.c Tue Sep 14 00:55:40 2010 +0200 +@@ -44,7 +44,7 @@ + { "init" }, + { "size" }, + { "__sizeof", "sizeof" }, +- { "alignof" }, ++ { "__alignof", "alignof" }, + { "mangleof" }, + { "stringof" }, + { "tupleof" }, +diff -r 0ebf1721e4d3 -r a4ec24e030fd src/dmd/mtype.c +--- a/src/dmd/mtype.c Mon Sep 13 15:46:31 2010 +0200 ++++ b/src/dmd/mtype.c Tue Sep 14 00:55:40 2010 +0200 +@@ -1610,7 +1610,7 @@ + error(loc, ".size property should be replaced with .sizeof"); + e = new ErrorExp(); + } +- else if (ident == Id::alignof) ++ else if (ident == Id::__alignof) + { + e = new IntegerExp(loc, alignsize(), Type::tsize_t); + } +@@ -1749,7 +1749,7 @@ + assert(sym); + + if (ident != Id::__sizeof && +- ident != Id::alignof && ++ ident != Id::__alignof && + ident != Id::init && + ident != Id::mangleof && + ident != Id::stringof && +diff -r 0ebf1721e4d3 -r a4ec24e030fd src/dmd/win32.mak +--- a/src/dmd/win32.mak Mon Sep 13 15:46:31 2010 +0200 ++++ b/src/dmd/win32.mak Tue Sep 14 00:55:40 2010 +0200 +@@ -8,7 +8,8 @@ + DMDSVN=\svnproj\dmd\trunk\src + SCROOT=$D\dm + INCLUDE=$(SCROOT)\include +-CC=\dm\bin\dmc ++CC=$(SCROOT)\bin\dmc ++LIB=$(SCROOT)\bin\lib + LIBNT=$(SCROOT)\lib + SNN=$(SCROOT)\lib\snn + DIR=\dmd2 +@@ -24,7 +25,7 @@ + XFLG= + MODEL=n + OPT= +-DEBUG=-gl -D ++DEBUG=-g -D + #PREC=-H -HItotal.h -HO + PREC= + LFLAGS= +@@ -59,11 +60,17 @@ + $(MAKE) OPT=-o "DEBUG=" LFLAGS=-L/delexe dmd.exe + # $(MAKE) OPT=-o "DEBUG=" LFLAGS=-L/ma/co/delexe dmd.exe + ++lib: ++ $(MAKE) OPT=-o "DEBUG=" dmd.lib ++ + ################ NT COMMAND LINE DEBUG ######################### + + debdmd: + $(MAKE) OPT= "DEBUG=-D -g" LFLAGS=-L/ma/co dmd.exe + ++deblib: ++ $(MAKE) OPT= "DEBUG=-D -g" dmd.lib ++ + ######################################### + + # D front end +@@ -155,8 +162,11 @@ + ######################################### + + $(TARGET).exe : $(OBJS) win32.mak +- dmc -o$(TARGET).exe $(OBJS) -cpp -mn -Ar $(LFLAGS) ++ $(CC) -o$(TARGET).exe $(OBJS) -cpp -mn -Ar $(LFLAGS) + ++$(TARGET).lib : $(OBJS) win32.mak ++ $(LIB) -c -p128 $(TARGET).lib $(OBJ8) $(ROOTOBJS) msc.obj tk.obj util.obj entity.obj ph.obj eh.obj ++ $(LIB) -d $(TARGET).lib iasm.obj + + ##################### INCLUDE MACROS ##################### + +@@ -171,11 +181,11 @@ + msgsx + + msgsx.exe : msgsx.c +- dmc msgsx -mn -D$(TARGET) $(DEFINES) $(WINLIBS) ++ $(CC) msgsx -mn -D$(TARGET) $(DEFINES) $(WINLIBS) + + elxxx.c cdxxx.c optab.c debtab.c fltables.c tytab.c : \ + $C\cdef.h $C\cc.h $C\oper.h $C\ty.h $C\optabgen.c +- dmc -cpp -ooptabgen.exe $C\optabgen -DMARS -I$(TK) $(WINLIBS) #-L$(LINKS) ++ $(CC) -cpp -ooptabgen.exe $C\optabgen -DMARS -I$(TK) $(WINLIBS) #-L$(LINKS) + optabgen + + impcnvtab.c : impcnvgen.c +@@ -183,7 +193,7 @@ + impcnvgen + + id.h id.c : idgen.c +- dmc -cpp idgen ++ $(CC) -cpp idgen + idgen + + ##################### SPECIAL BUILDS ##################### +diff -r 0ebf1721e4d3 -r a4ec24e030fd src/druntime/win32.mak +--- a/src/druntime/win32.mak Mon Sep 13 15:46:31 2010 +0200 ++++ b/src/druntime/win32.mak Tue Sep 14 00:55:40 2010 +0200 +@@ -1,5 +1,5 @@ + +-DMD=dmd ++DMD=..\..\windows\bin\dmd + + CC=dmc + +@@ -300,7 +300,7 @@ + # NOTE: a pre-compiled minit.obj has been provided in dmd for Win32 and + # minit.asm is not used by dmd for Linux + +-OBJS= errno_c.obj complex.obj critical.obj deh.obj monitor.obj src\rt\minit.obj ++OBJS= errno_c.obj complex.obj critical.obj deh.obj monitor.obj minit.obj + OBJS_TO_DELETE= errno_c.obj complex.obj critical.obj deh.obj monitor.obj + + DOCS=\ +diff -r 0ebf1721e4d3 -r a4ec24e030fd src/phobos/win32.mak +--- a/src/phobos/win32.mak Mon Sep 13 15:46:31 2010 +0200 ++++ b/src/phobos/win32.mak Tue Sep 14 00:55:40 2010 +0200 +@@ -51,7 +51,7 @@ + + DMD=$(DIR)\bin\dmd + #DMD=..\dmd +-DMD=dmd ++DMD=..\..\windows\bin\dmd + + ## Location of where to write the html documentation files + diff -r bc45b1c53019 -r 31c086f76669 win32_lib.mak --- a/win32_lib.mak Tue Sep 14 01:13:58 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,518 +0,0 @@ -#_ win32_lib.mak -# Copyright (C) 1999-2009 by Digital Mars, http://www.digitalmars.com -# Written by Walter Bright -# All Rights Reserved -# Build dmd with Digital Mars C++ compiler - -D= -DMDSVN=\svnproj\dmd\trunk\src -SCROOT=$D\dm -INCLUDE=$(SCROOT)\include -CC=\dm\bin\dmc -LIBNT=$(SCROOT)\lib -SNN=$(SCROOT)\lib\snn -DIR=\dmd2 -CP=cp - -C=backend -TK=tk -ROOT=root - -MAKE=make -fwin32_lib.mak C=$C TK=$(TK) ROOT=$(ROOT) - -TARGET=dmd -XFLG= -MODEL=n -OPT= -DEBUG=-gl -D -#PREC=-H -HItotal.h -HO -PREC= -LFLAGS= - -LINKN=$(SCROOT)\bin\link /de - -CFLAGS=-I$(ROOT);$(INCLUDE) $(XFLG) $(OPT) $(DEBUG) -cpp -D_DH -MFLAGS=-I$C;$(TK) -DMARS -cpp $(DEBUG) -e -wx -D_DH - -# Makerules: -.c.obj: - $(CC) -c $(CFLAGS) $(PREC) $* - -.asm.obj: - $(CC) -c $(CFLAGS) $* - -defaulttarget: debdmd - -################ RELEASES ######################### - -release: - $(MAKE) clean - $(MAKE) dmd - $(MAKE) clean - -################ NT COMMAND LINE RELEASE ######################### - -trace: - $(MAKE) OPT=-o "DEBUG=-gt -Nc" LFLAGS=-L/ma/co/delexe dmd.lib - -dmd: - $(MAKE) OPT=-o "DEBUG=" LFLAGS=-L/delexe dmd.lib -# $(MAKE) OPT=-o "DEBUG=" LFLAGS=-L/ma/co/delexe dmd.exe - -################ NT COMMAND LINE DEBUG ######################### - -debdmd: - $(MAKE) OPT= "DEBUG=-D -g" LFLAGS=-L/ma/co dmd.lib - -######################################### - -# D front end - -OBJ1= mars2.obj enum.obj struct.obj dsymbol.obj import.obj id.obj \ - staticassert.obj identifier.obj mtype.obj expression.obj \ - optimize.obj template.obj lexer.obj declaration.obj cast.obj \ - init.obj func.obj utf.obj unialpha.obj parse.obj statement.obj \ - constfold.obj version.obj inifile.obj typinf.obj \ - module.obj scope.obj dump.obj cond.obj inline.obj opover.obj \ - entity.obj class.obj mangle.obj attrib.obj impcnvtab.obj \ - link.obj access.obj doc.obj macro.obj hdrgen.obj delegatize.obj \ - interpret.obj traits.obj aliasthis.obj \ - builtin.obj clone.obj libomf.obj arrayop.obj irstate.obj \ - glue.obj msc.obj ph.obj tk.obj s2ir.obj todt.obj e2ir.obj tocsym.obj \ - util.obj bit.obj eh.obj toobj.obj toctype.obj tocvdebug.obj toir.obj \ - json.obj - -# from C/C++ compiler optimizer and back end - -OBJ8= go.obj gdag.obj gother.obj gflow.obj gloop.obj var.obj el.obj \ - newman.obj glocal.obj os.obj nteh.obj evalu8.obj cgcs.obj \ - rtlsym.obj html.obj cgelem.obj cgen.obj cgreg.obj out.obj \ - blockopt.obj cgobj.obj cg.obj cgcv.obj type.obj dt.obj \ - debug.obj code.obj cg87.obj cgsched.obj ee.obj csymbol.obj \ - cgcod.obj cod1.obj cod2.obj cod3.obj cod4.obj cod5.obj outbuf.obj \ - bcomplex.obj iasm.obj ptrntab.obj aa.obj ti_achar.obj md5.obj - -# from ROOT - -ROOTOBJS= lstring.obj array.obj gnuc.obj man.obj rmem.obj port.obj root.obj \ - stringtable.obj dchar.obj response.obj async.obj - -OBJS= $(OBJ1) $(OBJ8) $(ROOTOBJS) - -SRCS= mars2.c enum.c struct.c dsymbol.c import.c idgen.c impcnvgen.c utf.h \ - utf.c entity.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 staticassert.h parse.c statement.c \ - constfold.c version.h version.c inifile.c iasm.c staticassert.c \ - module.c scope.c dump.c init.h init.c attrib.h attrib.c opover.c \ - eh.c toctype.c class.c mangle.c bit.c tocsym.c func.c inline.c \ - access.c complex_t.h unialpha.c irstate.h irstate.c glue.c msc.c \ - ph.c tk.c s2ir.c todt.c e2ir.c util.c toobj.c cppmangle.c \ - identifier.h parse.h objfile.h scope.h enum.h import.h \ - typinf.c tocvdebug.c toelfdebug.c mars.h module.h mtype.h dsymbol.h \ - declaration.h lexer.h expression.h statement.h doc.h doc.c \ - macro.h macro.c hdrgen.h hdrgen.c arraytypes.h \ - delegatize.c toir.h toir.c interpret.c traits.c builtin.c \ - clone.c lib.h libomf.c libelf.c libmach.c arrayop.c \ - aliasthis.h aliasthis.c json.h json.c - -# From C++ compiler - -BACKSRC= $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\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\cppman.c $C\machobj.c \ - $C\strtold.c $C\aa.h $C\aa.c $C\tinfo.h $C\ti_achar.c \ - $C\md5.h $C\md5.c - -# From TK - -TKSRC= $(TK)\filespec.h $(TK)\mem.h $(TK)\list.h $(TK)\vec.h \ - $(TK)\filespec.c $(TK)\mem.c $(TK)\vec.c $(TK)\list.c - -# From root - -ROOTSRC= $(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)\stringtable.h $(ROOT)\stringtable.c \ - $(ROOT)\gnuc.h $(ROOT)\gnuc.c $(ROOT)\man.c $(ROOT)\port.c \ - $(ROOT)\response.c $(ROOT)\async.h $(ROOT)\async.c - -MAKEFILES=win32.mak win32_lib.mak linux.mak osx.mak freebsd.mak solaris.mak - -######################################### - -$(TARGET).lib : $(OBJS) win32_lib.mak - lib -c -p128 $(TARGET).lib $(OBJS) - -##################### INCLUDE MACROS ##################### - -CCH= -#TOTALH=$(CCH) total.sym -TOTALH=$(CCH) id.h -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 - -##################### GENERATED SOURCE ##################### - -msgs.h msgs.c sj1041.msg sj1036.msg sj1031.msg : msgsx.exe - msgsx - -msgsx.exe : msgsx.c - dmc msgsx -mn -D$(TARGET) $(DEFINES) $(WINLIBS) - -elxxx.c cdxxx.c optab.c debtab.c fltables.c tytab.c : \ - $C\cdef.h $C\cc.h $C\oper.h $C\ty.h $C\optabgen.c - dmc -cpp -ooptabgen.exe $C\optabgen -DMARS -I$(TK) $(WINLIBS) #-L$(LINKS) - optabgen - -impcnvtab.c : impcnvgen.c - $(CC) -I$(ROOT) -cpp impcnvgen - impcnvgen - -id.h id.c : idgen.c - dmc -cpp idgen - idgen - -##################### SPECIAL BUILDS ##################### - -total.sym : $(ROOT)\root.h mars.h lexer.h parse.h enum.h dsymbol.h \ - mtype.h expression.h attrib.h init.h cond.h version.h \ - declaration.h statement.h scope.h import.h module.h id.h \ - template.h aggregate.h arraytypes.h lib.h total.h - $(CC) -c $(CFLAGS) -HFtotal.sym total.h - -impcnvtab.obj : mtype.h impcnvtab.c - $(CC) -c -I$(ROOT) -cpp impcnvtab - -iasm.obj : $(CH) $(TOTALH) $C\iasm.h iasm.c - $(CC) -c $(MFLAGS) -I$(ROOT) iasm - -bcomplex.obj : $C\bcomplex.c - $(CC) -c $(MFLAGS) $C\bcomplex - -aa.obj : $C\tinfo.h $C\aa.h $C\aa.c - $(CC) -c $(MFLAGS) -I. $C\aa - -bit.obj : expression.h bit.c - $(CC) -c -I$(ROOT) $(MFLAGS) bit - -blockopt.obj : $C\blockopt.c - $(CC) -c $(MFLAGS) $C\blockopt - -cg.obj : $C\cg.c - $(CC) -c $(MFLAGS) -I. $C\cg - -cg87.obj : $C\cg87.c - $(CC) -c $(MFLAGS) $C\cg87 - -cgcod.obj : $C\cgcod.c - $(CC) -c $(MFLAGS) -I. $C\cgcod - -cgcs.obj : $C\cgcs.c - $(CC) -c $(MFLAGS) $C\cgcs - -cgcv.obj : $C\cgcv.c - $(CC) -c $(MFLAGS) $C\cgcv - -cgelem.obj : $C\rtlsym.h $C\cgelem.c - $(CC) -c $(MFLAGS) -I. $C\cgelem - -cgen.obj : $C\rtlsym.h $C\cgen.c - $(CC) -c $(MFLAGS) $C\cgen - -cgobj.obj : $C\md5.h $C\cgobj.c - $(CC) -c $(MFLAGS) $C\cgobj - -cgreg.obj : $C\cgreg.c - $(CC) -c $(MFLAGS) $C\cgreg - -cgsched.obj : $C\rtlsym.h $C\cgsched.c - $(CC) -c $(MFLAGS) $C\cgsched - -cod1.obj : $C\rtlsym.h $C\cod1.c - $(CC) -c $(MFLAGS) $C\cod1 - -cod2.obj : $C\rtlsym.h $C\cod2.c - $(CC) -c $(MFLAGS) $C\cod2 - -cod3.obj : $C\rtlsym.h $C\cod3.c - $(CC) -c $(MFLAGS) $C\cod3 - -cod4.obj : $C\cod4.c - $(CC) -c $(MFLAGS) $C\cod4 - -cod5.obj : $C\cod5.c - $(CC) -c $(MFLAGS) $C\cod5 - -code.obj : $C\code.c - $(CC) -c $(MFLAGS) $C\code - -irstate.obj : irstate.h irstate.c - $(CC) -c $(MFLAGS) irstate - -csymbol.obj : $C\symbol.c - $(CC) -c $(MFLAGS) $C\symbol -ocsymbol.obj - -debug.obj : $C\debug.c - $(CC) -c $(MFLAGS) -I. $C\debug - -dt.obj : $C\dt.h $C\dt.c - $(CC) -c $(MFLAGS) $C\dt - -ee.obj : $C\ee.c - $(CC) -c $(MFLAGS) $C\ee - -eh.obj : $C\cc.h $C\code.h $C\type.h $C\dt.h eh.c - $(CC) -c $(MFLAGS) eh - -el.obj : $C\rtlsym.h $C\el.h $C\el.c - $(CC) -c $(MFLAGS) $C\el - -evalu8.obj : $C\evalu8.c - $(CC) -c $(MFLAGS) $C\evalu8 - -go.obj : $C\go.c - $(CC) -c $(MFLAGS) $C\go - -gflow.obj : $C\gflow.c - $(CC) -c $(MFLAGS) $C\gflow - -gdag.obj : $C\gdag.c - $(CC) -c $(MFLAGS) $C\gdag - -gother.obj : $C\gother.c - $(CC) -c $(MFLAGS) $C\gother - -glocal.obj : $C\rtlsym.h $C\glocal.c - $(CC) -c $(MFLAGS) $C\glocal - -gloop.obj : $C\gloop.c - $(CC) -c $(MFLAGS) $C\gloop - -glue.obj : $(CH) $(TOTALH) $C\rtlsym.h mars.h module.h glue.c - $(CC) -c $(MFLAGS) -I$(ROOT) glue - -html.obj : $(CH) $(TOTALH) $C\html.h $C\html.c - $(CC) -c -I$(ROOT) $(MFLAGS) $C\html - -mars2.obj : $(TOTALH) module.h mars.h mars2.c - $(CC) -c $(CFLAGS) $(PREC) $* -Ae - -md5.obj : $C\md5.h $C\md5.c - $(CC) -c $(MFLAGS) $C\md5 - -module.obj : $(TOTALH) $C\html.h module.c - $(CC) -c $(CFLAGS) -I$C $(PREC) module.c - -msc.obj : $(CH) mars.h msc.c - $(CC) -c $(MFLAGS) msc - -newman.obj : $(CH) $C\newman.c - $(CC) -c $(MFLAGS) $C\newman - -nteh.obj : $C\rtlsym.h $C\nteh.c - $(CC) -c $(MFLAGS) $C\nteh - -os.obj : $C\os.c - $(CC) -c $(MFLAGS) $C\os - -out.obj : $C\out.c - $(CC) -c $(MFLAGS) $C\out - -outbuf.obj : $C\outbuf.h $C\outbuf.c - $(CC) -c $(MFLAGS) $C\outbuf - -ph.obj : ph.c - $(CC) -c $(MFLAGS) ph - -ptrntab.obj : $C\iasm.h $C\ptrntab.c - $(CC) -c $(MFLAGS) $C\ptrntab - -rtlsym.obj : $C\rtlsym.h $C\rtlsym.c - $(CC) -c $(MFLAGS) $C\rtlsym - -ti_achar.obj : $C\tinfo.h $C\ti_achar.c - $(CC) -c $(MFLAGS) -I. $C\ti_achar - -toctype.obj : $(CH) $(TOTALH) $C\rtlsym.h mars.h module.h toctype.c - $(CC) -c $(MFLAGS) -I$(ROOT) toctype - -tocvdebug.obj : $(CH) $(TOTALH) $C\rtlsym.h mars.h module.h tocvdebug.c - $(CC) -c $(MFLAGS) -I$(ROOT) tocvdebug - -toobj.obj : $(CH) $(TOTALH) mars.h module.h toobj.c - $(CC) -c $(MFLAGS) -I$(ROOT) toobj - -type.obj : $C\type.c - $(CC) -c $(MFLAGS) $C\type - -typinf.obj : $(CH) $(TOTALH) $C\rtlsym.h mars.h module.h typinf.c - $(CC) -c $(MFLAGS) -I$(ROOT) typinf - -todt.obj : mtype.h expression.h $C\dt.h todt.c - $(CC) -c -I$(ROOT) $(MFLAGS) todt - -s2ir.obj : $C\rtlsym.h statement.h s2ir.c - $(CC) -c -I$(ROOT) $(MFLAGS) s2ir - -e2ir.obj : $C\rtlsym.h expression.h toir.h e2ir.c - $(CC) -c -I$(ROOT) $(MFLAGS) e2ir - -toir.obj : $C\rtlsym.h expression.h toir.h toir.c - $(CC) -c -I$(ROOT) $(MFLAGS) toir - -tocsym.obj : $(CH) $(TOTALH) mars.h module.h tocsym.c - $(CC) -c $(MFLAGS) -I$(ROOT) tocsym - -util.obj : util.c - $(CC) -c $(MFLAGS) util - -var.obj : $C\var.c optab.c - $(CC) -c $(MFLAGS) -I. $C\var - - -tk.obj : tk.c - $(CC) -c $(MFLAGS) tk.c - -# ROOT - -array.obj : $(ROOT)\array.c - $(CC) -c $(CFLAGS) $(ROOT)\array.c - -async.obj : $(ROOT)\async.h $(ROOT)\async.c - $(CC) -c $(CFLAGS) $(ROOT)\async.c - -dchar.obj : $(ROOT)\dchar.c - $(CC) -c $(CFLAGS) $(ROOT)\dchar.c - -gnuc.obj : $(ROOT)\gnuc.c - $(CC) -c $(CFLAGS) $(ROOT)\gnuc.c - -lstring.obj : $(ROOT)\lstring.c - $(CC) -c $(CFLAGS) $(ROOT)\lstring.c - -man.obj : $(ROOT)\man.c - $(CC) -c $(CFLAGS) $(ROOT)\man.c - -rmem.obj : $(ROOT)\rmem.c - $(CC) -c $(CFLAGS) $(ROOT)\rmem.c - -port.obj : $(ROOT)\port.c - $(CC) -c $(CFLAGS) $(ROOT)\port.c - -root.obj : $(ROOT)\root.c - $(CC) -c $(CFLAGS) $(ROOT)\root.c - -response.obj : $(ROOT)\response.c - $(CC) -c $(CFLAGS) $(ROOT)\response.c - -stringtable.obj : $(ROOT)\stringtable.c - $(CC) -c $(CFLAGS) $(ROOT)\stringtable.c - - -################# Source file dependencies ############### - -access.obj : $(TOTALH) enum.h aggregate.h init.h attrib.h access.c -aliasthis.obj : $(TOTALH) aliasthis.h aliasthis.c -arrayop.obj : $(TOTALH) identifier.h declaration.h arrayop.c -attrib.obj : $(TOTALH) identifier.h declaration.h attrib.h attrib.c -builtin.obj : $(TOTALH) builtin.c -cast.obj : $(TOTALH) expression.h mtype.h cast.c -class.obj : $(TOTALH) enum.h class.c -clone.obj : $(TOTALH) clone.c -constfold.obj : $(TOTALH) expression.h constfold.c -cond.obj : $(TOTALH) identifier.h declaration.h cond.h cond.c -declaration.obj : $(TOTALH) identifier.h attrib.h declaration.h declaration.c -delegatize.obj : $(TOTALH) delegatize.c -doc.obj : $(TOTALH) doc.h doc.c -enum.obj : $(TOTALH) identifier.h enum.h enum.c -expression.obj : $(TOTALH) expression.h expression.c -func.obj : $(TOTALH) identifier.h attrib.h declaration.h func.c -hdrgen.obj : $(TOTALH) hdrgen.h hdrgen.c -id.obj : $(TOTALH) id.h id.c -identifier.obj : $(TOTALH) identifier.h identifier.c -import.obj : $(TOTALH) dsymbol.h import.h import.c -inifile.obj : $(TOTALH) inifile.c -init.obj : $(TOTALH) init.h init.c -inline.obj : $(TOTALH) inline.c -interpret.obj : $(TOTALH) interpret.c -json.obj : $(TOTALH) json.h json.c -lexer.obj : $(TOTALH) lexer.c -libomf.obj : $(TOTALH) lib.h libomf.c -link.obj : $(TOTALH) link.c -macro.obj : $(TOTALH) macro.h macro.c -mangle.obj : $(TOTALH) dsymbol.h declaration.h mangle.c -#module.obj : $(TOTALH) mars.h $C\html.h module.h module.c -opover.obj : $(TOTALH) expression.h opover.c -optimize.obj : $(TOTALH) expression.h optimize.c -parse.obj : $(TOTALH) attrib.h lexer.h parse.h parse.c -scope.obj : $(TOTALH) scope.h scope.c -statement.obj : $(TOTALH) statement.h statement.c -staticassert.obj : $(TOTALH) staticassert.h staticassert.c -struct.obj : $(TOTALH) identifier.h enum.h struct.c -traits.obj : $(TOTALH) traits.c -dsymbol.obj : $(TOTALH) identifier.h dsymbol.h dsymbol.c -mtype.obj : $(TOTALH) mtype.h mtype.c -#typinf.obj : $(TOTALH) mtype.h typinf.c -utf.obj : utf.h utf.c -template.obj : $(TOTALH) template.h template.c -version.obj : $(TOTALH) identifier.h dsymbol.h cond.h version.h version.c - -################### Utilities ################ - -clean: - del *.obj - del total.sym - del msgs.h msgs.c - del elxxx.c cdxxx.c optab.c debtab.c fltables.c tytab.c - del impcnvtab.c - -zip : $(MAKEFILES) - del dmdsrc.zip - zip32 dmdsrc $(MAKEFILES) - zip32 dmdsrc $(SRCS) - zip32 dmdsrc $(BACKSRC) - zip32 dmdsrc $(TKSRC) - zip32 dmdsrc $(ROOTSRC) - -################### Install ################ - -install: - copy dmd.exe $(DIR)\windows\bin\ - copy phobos\phobos.lib $(DIR)\windows\lib - $(CP) $(SRCS) $(DIR)\src\dmd\ - $(CP) $(ROOTSRC) $(DIR)\src\dmd\root\ - $(CP) $(TKSRC) $(DIR)\src\dmd\tk\ - $(CP) $(BACKSRC) $(DIR)\src\dmd\backend\ - $(CP) $(MAKEFILES) $(DIR)\src\dmd\ - copy gpl.txt $(DIR)\src\dmd\ - copy readme.txt $(DIR)\src\dmd\ - copy artistic.txt $(DIR)\src\dmd\ - copy backendlicense.txt $(DIR)\src\dmd\ - -################### Write to SVN ################ - -svn: - $(CP) $(SRCS) $(DMDSVN)\ - $(CP) $(ROOTSRC) $(DMDSVN)\root\ - $(CP) $(TKSRC) $(DMDSVN)\tk\ - $(CP) $(BACKSRC) $(DMDSVN)\backend\ - $(CP) $(MAKEFILES) $(DMDSVN)\ - copy gpl.txt $(DMDSVN)\ - copy readme.txt $(DMDSVN)\ - copy artistic.txt $(DMDSVN)\ - copy backendlicense.txt $(DMDSVN)\ - -###################################