[m-dev.] for review: build hlc.par.gc using MSVC
Peter Ross
peter.ross at miscrit.be
Fri Sep 1 01:43:15 AEDT 2000
Hi,
For Fergus to review.
I have only one unresolved issue for this change.
Where the hell do I install libpar_gc.dll? It needs to reside in the
users $PATH, so that there programs can run.
Pete
===================================================================
Estimated hours taken: 32
Build the hlc.par.gc grade using MSVC.
boehm_gc/NT_MAKEFILE:
Seperate the rules for building libpar_gc.lib and libgc.lib as
they use different makefiles.
Use gc.mak to build libpar_gc.dll
Note the thread safe garbage collector must be built as a dll
according to the README.win32 documentation.
boehm_gc/gc.mak:
Change the name from gc.dll to libpar_gc.dll
This gets built in the Release directory.
boehm_gc/Mmakefile:
Remove the Release directory as well.
scripts/mgnuc.in:
scripts/ml.in:
Pass the appropiate flags to the c compiler and the linker to
build in hlc.par.gc grade.
util/mkinit.c:
Delete a duplicate reference to GC_stackbottom.
Index: boehm_gc/Mmakefile
===================================================================
RCS file: /home/mercury1/repository/mercury/boehm_gc/Mmakefile,v
retrieving revision 1.12
diff -u -r1.12 Mmakefile
--- boehm_gc/Mmakefile 2000/08/17 05:30:52 1.12
+++ boehm_gc/Mmakefile 2000/08/31 14:32:06
@@ -45,7 +45,8 @@
clean_local:
MAKEFLAGS=""; export MAKEFLAGS; \
$(MAKE) $(BOEHMGC_MAKEFILE) $(MMAKEFLAGS) clean
- rm -f libgc.$A libgc.so
+ rm -rf Release
+ rm -f libgc.$A libgc.so libpar_gc.$A libpar_gc.dll
#-----------------------------------------------------------------------------#
@@ -92,5 +93,9 @@
install_lib: lib$(GC_GRADE).$A lib$(GC_GRADE).$(EXT_FOR_SHARED_LIB) install_dirs
cp `vpath_find lib$(GC_GRADE).$A lib$(GC_GRADE).$(EXT_FOR_SHARED_LIB)` \
$(INSTALL_MERC_GC_LIB_DIR)
+
+.PHONY: install_dll
+install_dll:
+ [ -f libpar_gc.dll ] && cp `vpath_find libpar_gc.dll` $(INSTALL_MERC_BIN_DIR)
#-----------------------------------------------------------------------------#
Index: boehm_gc/NT_MAKEFILE
===================================================================
RCS file: /home/mercury1/repository/mercury/boehm_gc/NT_MAKEFILE,v
retrieving revision 1.7
diff -u -r1.7 NT_MAKEFILE
--- boehm_gc/NT_MAKEFILE 2000/08/17 05:30:52 1.7
+++ boehm_gc/NT_MAKEFILE 2000/08/31 14:32:06
@@ -24,8 +24,13 @@
all: gctest.exe cord\de.exe test_cpp.exe
-dll: lib$(GC_GRADE)d$(DLL_DEF_LIB).dll
-lib$(GC_GRADE)$(DLL_DEF_LIB).dll: libgcd.dll
+libpar_gc.lib:
+ MAKEFLAGS="" nmake /F gc.mak
+ cp Release/libpar_gc.lib ./libpar_gc.lib
+ cp Release/libpar_gc.dll ./libpar_gc.dll
+
+dll: libgcd$(DLL_DEF_LIB).dll
+libgc$(DLL_DEF_LIB).dll: libgcd.dll
# had -DSMALL_CONFIG
%.obj:%.c
$(cc) $(cdebug) $(CFLAGS) $(cvars) -DSILENT -DLARGE_CONFIG -DALL_INTERIOR_POINTERS -D__STDC__ /c /Fo$*.obj $*.c
@@ -38,16 +43,16 @@
gc.lib: $(OBJS)
lib /MACHINE:i386 /out:gc.lib $(OBJS)
# a .def defining exports should be made....
-lib$(GC_GRADE)d$(DLL_DEF_LIB).dll: $(OBJS)
-# $(link) /MACHINE:i386 /DLL /out:lib$(GC_GRADE)d.dll $(OBJS)
+libgcd$(DLL_DEF_LIB).dll: $(OBJS)
+# $(link) /MACHINE:i386 /DLL /out:libgcd.dll $(OBJS)
# The original NT SDK used lib32 instead of lib
-lib$(GC_GRADE)$(DLL_DEF_LIB).lib: gc.lib
- rm -f lib$(GC_GRADE)$(DLL_DEF_LIB).lib
+libgc$(DLL_DEF_LIB).lib: gc.lib
+ rm -f libgc$(DLL_DEF_LIB).lib
# `ln -s' here doesn't work with gnu-win32, so we use `cp' instead
- cp gc.lib lib$(GC_GRADE)$(DLL_DEF_LIB).lib
+ cp gc.lib libgc$(DLL_DEF_LIB).lib
gctest.exe: test.obj libgc.lib
# The following works for win32 debugging. For win32s debugging use debugtype:coff
@@ -86,6 +91,7 @@
.PHONY: clean
clean:
-rm -f *.lib *.dll *.obj
+ -rm -rf Release
# The Mmakefile invokes `make $(EXT_FOR_SHARED_LIB)',
# so we need targets `a', `so', and `dll'.
Index: boehm_gc/gc.mak
===================================================================
RCS file: /home/mercury1/repository/mercury/boehm_gc/gc.mak,v
retrieving revision 1.1.1.2
diff -u -r1.1.1.2 gc.mak
--- boehm_gc/gc.mak 1999/07/14 23:47:19 1.1.1.2
+++ boehm_gc/gc.mak 2000/08/31 14:32:06
@@ -54,7 +54,7 @@
OUTDIR=.\Release
INTDIR=.\Release
-ALL : ".\Release\gc.dll" ".\Release\gc.bsc"
+ALL : ".\Release\libpar_gc.dll" ".\Release\libpar_gc.bsc"
CLEAN :
- at erase ".\Release\allchblk.obj"
@@ -71,10 +71,10 @@
- at erase ".\Release\dyn_load.sbr"
- at erase ".\Release\finalize.obj"
- at erase ".\Release\finalize.sbr"
- - at erase ".\Release\gc.bsc"
- - at erase ".\Release\gc.dll"
- - at erase ".\Release\gc.exp"
- - at erase ".\Release\gc.lib"
+ - at erase ".\Release\libpar_gc.bsc"
+ - at erase ".\Release\libpar_gc.dll"
+ - at erase ".\Release\libpar_gc.exp"
+ - at erase ".\Release\libpar_gc.lib"
- at erase ".\Release\headers.obj"
- at erase ".\Release\headers.sbr"
- at erase ".\Release\mach_dep.obj"
@@ -171,7 +171,7 @@
".\Release\typd_mlc.sbr" \
".\Release\win32_threads.sbr"
-".\Release\gc.bsc" : "$(OUTDIR)" $(BSC32_SBRS)
+".\Release\libpar_gc.bsc" : "$(OUTDIR)" $(BSC32_SBRS)
$(BSC32) @<<
$(BSC32_FLAGS) $(BSC32_SBRS)
<<
@@ -182,8 +182,8 @@
LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib\
advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib\
odbccp32.lib /nologo /subsystem:windows /dll /incremental:no\
- /pdb:"$(OUTDIR)/gc.pdb" /machine:I386 /out:"$(OUTDIR)/gc.dll"\
- /implib:"$(OUTDIR)/gc.lib"
+ /pdb:"$(OUTDIR)/libpar_gc.pdb" /machine:I386 /out:"$(OUTDIR)/libpar_gc.dll"\
+ /implib:"$(OUTDIR)/libpar_gc.lib"
LINK32_OBJS= \
".\Release\allchblk.obj" \
".\Release\alloc.obj" \
@@ -208,7 +208,7 @@
".\Release\typd_mlc.obj" \
".\Release\win32_threads.obj"
-".\Release\gc.dll" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
+".\Release\libpar_gc.dll" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
$(LINK32) @<<
$(LINK32_FLAGS) $(LINK32_OBJS)
<<
@@ -228,7 +228,7 @@
OUTDIR=.\Debug
INTDIR=.\Debug
-ALL : ".\Debug\gc.dll" ".\Debug\gc.bsc"
+ALL : ".\Debug\libpar_gc.dll" ".\Debug\libpar_gc.bsc"
CLEAN :
- at erase ".\Debug\allchblk.obj"
@@ -245,12 +245,12 @@
- at erase ".\Debug\dyn_load.sbr"
- at erase ".\Debug\finalize.obj"
- at erase ".\Debug\finalize.sbr"
- - at erase ".\Debug\gc.bsc"
- - at erase ".\Debug\gc.dll"
- - at erase ".\Debug\gc.exp"
- - at erase ".\Debug\gc.lib"
- - at erase ".\Debug\gc.map"
- - at erase ".\Debug\gc.pdb"
+ - at erase ".\Debug\libpar_gc.bsc"
+ - at erase ".\Debug\libpar_gc.dll"
+ - at erase ".\Debug\libpar_gc.exp"
+ - at erase ".\Debug\libpar_gc.lib"
+ - at erase ".\Debug\libpar_gc.map"
+ - at erase ".\Debug\libpar_gc.pdb"
- at erase ".\Debug\headers.obj"
- at erase ".\Debug\headers.sbr"
- at erase ".\Debug\mach_dep.obj"
@@ -350,7 +350,7 @@
".\Debug\typd_mlc.sbr" \
".\Debug\win32_threads.sbr"
-".\Debug\gc.bsc" : "$(OUTDIR)" $(BSC32_SBRS)
+".\Debug\libpar_gc.bsc" : "$(OUTDIR)" $(BSC32_SBRS)
$(BSC32) @<<
$(BSC32_FLAGS) $(BSC32_SBRS)
<<
@@ -361,8 +361,8 @@
LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib\
advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib\
odbccp32.lib /nologo /subsystem:windows /dll /incremental:no\
- /pdb:"$(OUTDIR)/gc.pdb" /map:"$(INTDIR)/gc.map" /debug /machine:I386\
- /out:"$(OUTDIR)/gc.dll" /implib:"$(OUTDIR)/gc.lib"
+ /pdb:"$(OUTDIR)/libpar_gc.pdb" /map:"$(INTDIR)/libpar_gc.map" /debug /machine:I386\
+ /out:"$(OUTDIR)/libpar_gc.dll" /implib:"$(OUTDIR)/libpar_gc.lib"
LINK32_OBJS= \
".\Debug\allchblk.obj" \
".\Debug\alloc.obj" \
@@ -387,7 +387,7 @@
".\Debug\typd_mlc.obj" \
".\Debug\win32_threads.obj"
-".\Debug\gc.dll" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
+".\Debug\libpar_gc.dll" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
$(LINK32) @<<
$(LINK32_FLAGS) $(LINK32_OBJS)
<<
@@ -465,7 +465,7 @@
/pdb:"$(OUTDIR)/gctest.pdb" /machine:I386 /out:"Release/gctest.exe"
LINK32_OBJS= \
".\gctest\Release\test.obj" \
- ".\Release\gc.lib"
+ ".\Release\libpar_gc.lib"
".\Release\gctest.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
$(LINK32) @<<
@@ -557,7 +557,7 @@
/pdb:"$(OUTDIR)/gctest.pdb" /map:"$(INTDIR)/gctest.map" /debug /machine:I386\
/out:"Debug/gctest.exe"
LINK32_OBJS= \
- ".\Debug\gc.lib" \
+ ".\Debug\libpar_gc.lib" \
".\gctest\Debug\test.obj"
".\Debug\gctest.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
@@ -646,7 +646,7 @@
".\cord\Release\de.obj" \
".\cord\Release\de_win.obj" \
".\cord\Release\de_win.res" \
- ".\Release\gc.lib"
+ ".\Release\libpar_gc.lib"
".\Release\de.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
$(LINK32) @<<
@@ -739,7 +739,7 @@
".\cord\Debug\de.obj" \
".\cord\Debug\de_win.obj" \
".\cord\Debug\de_win.res" \
- ".\Debug\gc.lib"
+ ".\Debug\libpar_gc.lib"
".\Debug\de.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
$(LINK32) @<<
Index: scripts/mgnuc.in
===================================================================
RCS file: /home/mercury1/repository/mercury/scripts/mgnuc.in,v
retrieving revision 1.70
diff -u -r1.70 mgnuc.in
--- scripts/mgnuc.in 2000/06/14 14:54:09 1.70
+++ scripts/mgnuc.in 2000/08/31 14:32:13
@@ -57,6 +57,12 @@
OPT_OPTS=""
COMPILER=lcc
;;
+ *cl* | *CL*)
+ ANSI_OPTS=""
+ CHECK_OPTS=""
+ OPT_OPTS=""
+ COMPILER=cl
+ ;;
*)
ANSI_OPTS=
CHECK_OPTS=
@@ -264,6 +270,12 @@
ANSI_OPTS=""
;;
+ *cygwin32*)
+ case $COMPILER in
+ cl) THREAD_OPTS="-DMR_THREAD_SAFE /MD"
+ ;;
+ esac
+ ;;
*) THREAD_OPTS=""
;;
esac ;;
Index: scripts/ml.in
===================================================================
RCS file: /home/mercury1/repository/mercury/scripts/ml.in,v
retrieving revision 1.80
diff -u -r1.80 ml.in
--- scripts/ml.in 2000/08/25 14:19:35 1.80
+++ scripts/ml.in 2000/08/31 14:32:13
@@ -41,6 +41,21 @@
LINK=/stack:10485760 # 10 Mb
export LINK
+case "$CC" in
+ *gcc*)
+ COMPILER=gcc
+ ;;
+ *lcc*)
+ COMPILER=lcc
+ ;;
+ *cl* | *CL*)
+ COMPILER=cl
+ ;;
+ *)
+ COMPILER=unknown
+ ;;
+esac
+
# On some systems (Solaris for exemple), we need libraries to be able to
# use sockets. The name of the needed libraries is determined by autoconf
# and passed through this variable.
@@ -543,6 +558,13 @@
*-osf*) THREAD_LIBS="-lpthreads -lmach -lc_r" ;;
*-linux*) THREAD_LIBS="-lpthread" ;;
*-solaris*) THREAD_LIBS="-lpthread -ldl" ;;
+ *cygwin*)
+ case $COMPILER in
+ cl) ARCH_OPTS="/MD"
+ ;;
+
+ esac
+ ;;
*) echo "$0: warning: don't know which" \
"library to use for pthreads" 1>&2
THREAD_LIBS=""
Index: util/mkinit.c
===================================================================
RCS file: /home/mercury1/repository/mercury/util/mkinit.c,v
retrieving revision 1.65
diff -u -r1.65 mkinit.c
--- util/mkinit.c 2000/08/26 04:34:36 1.65
+++ util/mkinit.c 2000/08/31 14:32:14
@@ -124,10 +124,6 @@
" Declare_entry(%s);\n"
"#endif\n"
"\n"
- "#ifdef CONSERVATIVE_GC\n"
- " extern char *GC_stackbottom;\n"
- "#endif\n"
- "\n"
"#if defined(USE_DLLS)\n"
" #if !defined(libmer_DEFINE_DLL)\n"
" #define libmer_impure_ptr \\\n"
--------------------------------------------------------------------------
mercury-developers mailing list
Post messages to: mercury-developers at cs.mu.oz.au
Administrative Queries: owner-mercury-developers at cs.mu.oz.au
Subscriptions: mercury-developers-request at cs.mu.oz.au
--------------------------------------------------------------------------
More information about the developers
mailing list