Finalizing dmd support on Windows
Lars Ivar Igesund <[email protected]> Sat, 31 Jan 2004 14:25:45 +0100
| Newsgroups | gmane.comp.tools.aap.devel |
|---|---|
| Message-ID | <[email protected]> |
Hi again I believe that I now have ruled out most errors when using AAP to build D stuff on Windows. It might actually work on Linux, but it hasn't been tested yet. The last patch is included. It mainly fixes the building of static libs. AAP now successfully builds the currently biggest D project around. Another thing I was thinking; when doing a one step build, the dependency checking can become a major slowdown. Could some option be added that made it possible to turn off dependency checking? Lars Ivar Igesund
dmd.diff
(text/plain, 4.3 KB)
Index: dmd.py
===================================================================
RCS file: /cvsroot/a-a-p/Exec/tools/dmd.py,v
retrieving revision 1.5
diff -u -r1.5 dmd.py
--- dmd.py 18 Oct 2003 15:09:50 -0000 1.5
+++ dmd.py 31 Jan 2004 12:51:22 -0000
@@ -19,7 +19,16 @@
"""
Return TRUE when the DMD toolchain can be found.
"""
- return program_path("dmd")
+ if program_path("dmd"):
+ if os.name == "nt":
+ if program_path("link"):
+ return program_path("lib")
+ else:
+ return FALSE
+ else:
+ return program_path("gcc")
+ else:
+ return FALSE
def define_actions():
@@ -38,10 +47,25 @@
"@if _no.DEBUG == 'yes':\n"
" dbg = -g\n"
":sys $DMD $?DFLAGS $?DVERSION $opt $dbg $?DDEBUG $?DIMPORT -of$target -c $source")
- # Build a program/static lib from object files
+ # Build a program from object files
rpstack = [ RecPos("build_dmd action") ]
- action_add(rpstack, rd, str2dictlist(rpstack, "build_dmd object,dllobject,libobject"),
- ":sys $DMD $?DLINKFLAGS -of$target $source")
+ action_add(rpstack, rd, str2dictlist(rpstack, "build_dmd object"),
+ "cmd = \n"
+ "@if os.name == \"nt\":\n"
+ " :progsearch LINK link\n"
+ " @exec \"import tools.dmd\"\n"
+ " DLINKFLAGS = `tools.dmd.find_phobos()` $?DLINKFLAGS \n"
+ " :sys $LINK /noi $source,$target,,$DLINKFLAGS\n"
+ "@else:\n"
+ " :sys $DMD $?DLINKFLAGS -of$target $source")
+ # Build a static lib from object files
+ rpstack = [ RecPos("buildlib_dmd action") ]
+ action_add(rpstack, rd, str2dictlist(rpstack, "buildlib_dmd libobject"),
+ "@if os.name == \"nt\":\n"
+ " :progsearch LIB lib\n"
+ " :sys $LIB $?DLINKFLAGS -p512 -c $target $source\n"
+ "@else:\n"
+ " :sys $DMD $?DLINKFLAGS -of$target $source")
# Build a dll from object files
rpstack = [ RecPos("builddll_dmd action") ]
action_add(rpstack, rd, str2dictlist(rpstack, "builddll_dmd dllobject"),
@@ -54,7 +78,7 @@
" source += aap_dllmain.obj\n"
":sys $DMD $?DLINKFLAGS -of$target $source\n"
":del {f} {q} aap_dllmain.*")
- # Build a program/static lib directly from source
+ # Build a program directly from source
rpstack = [ RecPos("buildonestep_dmd d action") ]
action_add(rpstack, rd, str2dictlist(rpstack, "buildonestep_dmd d"),
"opt =\n"
@@ -67,6 +91,23 @@
":sys $DMD $?DFLAGS $?DVERSION $opt $dbg $?DDEBUG $?DIMPORT"
" $?DLINKFLAGS -of$target $source\n"
":del {f} {q} *.obj")
+ # Build a static lib directly from source
+ rpstack = [ RecPos("buildlibonestep_dmd d action") ]
+ action_add(rpstack, rd, str2dictlist(rpstack, "buildlibonestep_dmd d"),
+ "opt =\n"
+ "@if _no.OPTIMIZE and int(_no.OPTIMIZE) > 0:\n"
+ " opt = -O\n"
+ "dbg =\n"
+ "DEBUG ?=\n"
+ "@if _no.DEBUG == 'yes':\n"
+ " dbg = -g\n"
+ ":sys $DMD -c $?DFLAGS $?DVERSION $opt $dbg $?DDEBUG $?DIMPORT"
+ " -op $source\n"
+ ":progsearch LIB lib\n"
+ "BDIR = \n"
+ "objects = `src2obj(source)`\n"
+ ":sys $LIB $?DLINKFLAGS -p512 -c $target $objects\n"
+ ":del {f} {q} *.obj")
# Build a dll directly from source
rpstack = [ RecPos("builddllonestep_dmd d action") ]
action_add(rpstack, rd, str2dictlist(rpstack, "builddllonestep_dmd d"),
@@ -98,11 +139,18 @@
"""
scope["D_COMPILE_ACTION"] = "compile_dmd"
scope["D_BUILD_ACTION"] = "build_dmd"
- scope["D_BUILDLIB_ACTION"] = "build_dmd"
+ scope["D_BUILDLIB_ACTION"] = "buildlib_dmd"
scope["D_BUILDDLL_ACTION"] = "builddll_dmd"
scope["D_BUILDONESTEP_ACTION"] = "buildonestep_dmd"
scope["D_BUILDDLLONESTEP_ACTION"] = "builddllonestep_dmd"
- scope["D_BUILDLIBONESTEP_ACTION"] = "buildonestep_dmd"
+ scope["D_BUILDLIBONESTEP_ACTION"] = "buildlibonestep_dmd"
+
+def find_phobos():
+ dmd_path = program_path("dmd")
+ import re
+ phobos_path = re.sub('bin', 'lib', dmd_path)
+ return re.sub('dmd.EXE', '', phobos_path)
+
def find_dll_main_source(sourcestr):
import re