summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile.direct42
-rw-r--r--NT_MAKEFILE43
-rw-r--r--OS2_MAKEFILE16
-rw-r--r--README.md2
-rw-r--r--WCC_MAKEFILE62
5 files changed, 127 insertions, 38 deletions
diff --git a/Makefile.direct b/Makefile.direct
index c3e501af..8e6d9f41 100644
--- a/Makefile.direct
+++ b/Makefile.direct
@@ -2,10 +2,10 @@
# to build the collector.
#
# Primary targets:
-# all - builds gc.a, gccpp.a
+# all - builds gc.a, gccpp.a and cord.a
# base_lib - builds gc.a only (basic library)
# c++ - builds gccpp.a only (C++ interface to library)
-# cords - adds cords (heavyweight strings) to library
+# cords - builds cord.a only (heavyweight strings library)
# check - same as "all" but also prints porting information, and runs some
# tests of collector and cords
# check-cpp - builds gc.a and gccpp.a, runs C++ only test
@@ -143,7 +143,7 @@ SPECIALCFLAGS= -I$(srcdir)/include -I$(AO_SRC_DIR)/src $(CFLAGS_FOR_PIC)
# not time-critical anyway.
# Set SPECIALCFLAGS to -q nodirect_code on Encore.
-all: base_lib c++
+all: base_lib cords c++
atomic_ops.o: $(AO_SRC_DIR)/src/atomic_ops.c
$(CC) $(CFLAGS) -c -o $@ $(AO_SRC_DIR)/src/atomic_ops.c
@@ -212,14 +212,14 @@ base_lib gc.a: $(OBJS) dyn_load.o $(UTILS)
# Ignore ranlib failure; that usually means it doesn't exist, and
# isn't needed.
-cords: $(CORD_OBJS) $(UTILS) base_lib
+cords cord.a: $(CORD_OBJS) $(UTILS)
rm -f dont_ar_3
./if_mach SPARC SOLARIS touch dont_ar_3
- ./if_mach SPARC SOLARIS $(AR) rus gc.a $(CORD_OBJS)
+ ./if_mach SPARC SOLARIS $(AR) rus cord.a $(CORD_OBJS)
./if_mach M68K AMIGA touch dont_ar_3
- ./if_mach M68K AMIGA $(AR) -vrus gc.a $(CORD_OBJS)
- ./if_not_there dont_ar_3 || $(AR) ru gc.a $(CORD_OBJS)
- ./if_not_there dont_ar_3 || $(RANLIB) gc.a || cat /dev/null
+ ./if_mach M68K AMIGA $(AR) -vrus cord.a $(CORD_OBJS)
+ ./if_not_there dont_ar_3 || $(AR) ru cord.a $(CORD_OBJS)
+ ./if_not_there dont_ar_3 || $(RANLIB) cord.a || cat /dev/null
echo > cords
gc_cpp.o: $(srcdir)/gc_cpp.cc $(srcdir)/include/gc_cpp.h $(srcdir)/include/gc.h
@@ -334,26 +334,24 @@ cord/cordprnt.o: $(srcdir)/cord/cordprnt.c $(CORD_INCLUDE_FILES)
mkdir cord || cat /dev/null
mv cordprnt.o cord/cordprnt.o
-cordtest$(EXEEXT): $(srcdir)/cord/tests/cordtest.c $(CORD_OBJS) \
- base_lib $(UTILS)
+cordtest$(EXEEXT): $(srcdir)/cord/tests/cordtest.c cords base_lib $(UTILS)
rm -f cordtest$(EXEEXT)
- ./if_mach SPARC DRSNX $(CC) $(CFLAGS) -o cordtest $(srcdir)/cord/tests/cordtest.c $(CORD_OBJS) gc.a -lucb
- ./if_mach HP_PA HPUX $(CC) $(CFLAGS) -o cordtest $(srcdir)/cord/tests/cordtest.c $(CORD_OBJS) gc.a -ldld `./threadlibs`
- ./if_mach M68K AMIGA $(CC) $(CFLAGS) -UGC_AMIGA_MAKINGLIB -o cordtest $(srcdir)/cord/tests/cordtest.c $(CORD_OBJS) gc.a `./threadlibs`
- ./if_not_there cordtest$(EXEEXT) || $(CC) $(CFLAGS) -o cordtest$(EXEEXT) $(srcdir)/cord/tests/cordtest.c $(CORD_OBJS) gc.a `./threadlibs`
+ ./if_mach SPARC DRSNX $(CC) $(CFLAGS) -o cordtest $(srcdir)/cord/tests/cordtest.c gc.a cord.a -lucb
+ ./if_mach HP_PA HPUX $(CC) $(CFLAGS) -o cordtest $(srcdir)/cord/tests/cordtest.c gc.a cord.a -ldld `./threadlibs`
+ ./if_mach M68K AMIGA $(CC) $(CFLAGS) -UGC_AMIGA_MAKINGLIB -o cordtest $(srcdir)/cord/tests/cordtest.c gc.a cord.a `./threadlibs`
+ ./if_not_there cordtest$(EXEEXT) || $(CC) $(CFLAGS) -o cordtest$(EXEEXT) $(srcdir)/cord/tests/cordtest.c gc.a cord.a `./threadlibs`
cord/de: de$(EXEEXT)
de$(EXEEXT): $(srcdir)/cord/tests/de.c $(srcdir)/cord/tests/de_win.c \
- $(srcdir)/cord/tests/de_win.h cord/cordbscs.o cord/cordxtra.o base_lib \
- $(UTILS)
+ $(srcdir)/cord/tests/de_win.h cords base_lib $(UTILS)
rm -f de$(EXEEXT)
- ./if_mach SPARC DRSNX $(CC) $(CFLAGS) -o de $(srcdir)/cord/tests/de.c cord/cordbscs.o cord/cordxtra.o gc.a -lcurses -ltermlib -lucb `./threadlibs`
- ./if_mach HP_PA HPUX $(CC) $(CFLAGS) -o de $(srcdir)/cord/tests/de.c cord/cordbscs.o cord/cordxtra.o gc.a -lcurses -ltermlib -ldld `./threadlibs`
- ./if_mach POWERPC AIX $(CC) $(CFLAGS) -o de $(srcdir)/cord/tests/de.c cord/cordbscs.o cord/cordxtra.o gc.a -lcurses
- ./if_mach POWERPC DARWIN $(CC) $(CFLAGS) -o de $(srcdir)/cord/tests/de.c cord/cordbscs.o cord/cordxtra.o gc.a
- ./if_mach M68K AMIGA $(CC) $(CFLAGS) -UGC_AMIGA_MAKINGLIB -o de $(srcdir)/cord/tests/de.c cord/cordbscs.o cord/cordxtra.o gc.a -lcurses
- ./if_not_there de$(EXEEXT) || $(CC) $(CFLAGS) -o de$(EXEEXT) $(srcdir)/cord/tests/de.c $(srcdir)/cord/tests/de_win.c cord/cordbscs.o cord/cordxtra.o gc.a $(CURSES) `./threadlibs`
+ ./if_mach SPARC DRSNX $(CC) $(CFLAGS) -o de $(srcdir)/cord/tests/de.c gc.a cord.a -lcurses -ltermlib -lucb `./threadlibs`
+ ./if_mach HP_PA HPUX $(CC) $(CFLAGS) -o de $(srcdir)/cord/tests/de.c gc.a cord.a -lcurses -ltermlib -ldld `./threadlibs`
+ ./if_mach POWERPC AIX $(CC) $(CFLAGS) -o de $(srcdir)/cord/tests/de.c gc.a cord.a -lcurses
+ ./if_mach POWERPC DARWIN $(CC) $(CFLAGS) -o de $(srcdir)/cord/tests/de.c gc.a cord.a
+ ./if_mach M68K AMIGA $(CC) $(CFLAGS) -UGC_AMIGA_MAKINGLIB -o de $(srcdir)/cord/tests/de.c gc.a cord.a -lcurses
+ ./if_not_there de$(EXEEXT) || $(CC) $(CFLAGS) -o de$(EXEEXT) $(srcdir)/cord/tests/de.c $(srcdir)/cord/tests/de_win.c gc.a cord.a $(CURSES) `./threadlibs`
if_mach$(EXEEXT): $(srcdir)/tools/if_mach.c \
$(srcdir)/include/private/gcconfig.h
diff --git a/NT_MAKEFILE b/NT_MAKEFILE
index a0477ed7..3266d9af 100644
--- a/NT_MAKEFILE
+++ b/NT_MAKEFILE
@@ -52,14 +52,25 @@ CVTRES_CPU=X64
CFLAGS_DEBUG=-DGC_ASSERTIONS
!ENDIF
-!IFNDEF DISABLE_THREADS
-CFLAGS_MT=$(cvarsmt) -DGC_THREADS -DTHREAD_LOCAL_ALLOC -DPARALLEL_MARK
-!ENDIF
-
!IFDEF ENABLE_STATIC
CFLAGS_GCDLL=-DGC_NOT_DLL
+CORDFLAG=
!ELSE
CFLAGS_GCDLL=-DGC_DLL
+# cord.dll and its clients should not link C library statically otherwise
+# FILE-related functions might not work (because own set of opened FILEs
+# is maintained by each copy of the C library thus making impossible to pass
+# FILE pointer from .exe code to .dll code).
+cvarsmt=
+!IFDEF NODEBUG
+CORDFLAG=-MD
+!ELSE
+CORDFLAG=-MDd
+!ENDIF
+!ENDIF
+
+!IFNDEF DISABLE_THREADS
+CFLAGS_MT=$(cvarsmt) -DGC_THREADS -DTHREAD_LOCAL_ALLOC -DPARALLEL_MARK
!ENDIF
CFLAGS_SPECIFIC=$(CFLAGS_DEBUG) $(CFLAGS_GCDLL) $(CFLAGS_MT)
@@ -79,14 +90,17 @@ AO_INCLUDE_DIR=$(AO_SRC_DIR)
OBJS= misc.obj win32_threads.obj alloc.obj reclaim.obj allchblk.obj mach_dep.obj os_dep.obj mark_rts.obj headers.obj mark.obj obj_map.obj blacklst.obj finalize.obj new_hblk.obj dbg_mlc.obj fnlz_mlc.obj malloc.obj dyn_load.obj typd_mlc.obj ptr_chck.obj gcj_mlc.obj mallocx.obj extra\msvc_dbg.obj thread_local_alloc.obj
-all: gc.lib gccpp.lib
+COBJS= cord\cordbscs.obj cord\cordxtra.obj cord\cordprnt.obj
+
+all: gc.lib cord.lib gccpp.lib
-check: gctest.exe test_cpp.exe de.exe
+check: gctest.exe test_cpp.exe cordtest.exe de.exe
gctest.exe
+ cordtest.exe
test_cpp.exe
.c.obj:
- $(cc) $(cdebug) $(cflags) $(CFLAGS_SPECIFIC) -Iinclude -I$(AO_INCLUDE_DIR) $(CFLAGS_DEFAULT) -DCORD_NOT_DLL -D_CRT_SECURE_NO_DEPRECATE $*.c /Fo$*.obj /wd4100 /wd4127 /wd4701
+ $(cc) $(cdebug) $(cflags) $(CFLAGS_SPECIFIC) $(CORDFLAG) -Iinclude -I$(AO_INCLUDE_DIR) $(CFLAGS_DEFAULT) -D_CRT_SECURE_NO_DEPRECATE $*.c /Fo$*.obj /wd4100 /wd4127 /wd4701
# Disable crt security warnings, since unfortunately they warn about all sorts
# of safe uses of strncpy. It would be nice to leave the rest enabled.
@@ -100,6 +114,9 @@ $(OBJS) tests\test.obj: include\private\gc_priv.h include\private\gc_hdrs.h incl
gc.lib: $(OBJS)
lib /out:gc.lib /MACHINE:$(CPU) $(OBJS)
+cord.lib: $(COBJS)
+ lib /out:cord.lib /MACHINE:$(CPU) $(COBJS)
+
gccpp.lib: gc_cpp.obj
lib /out:gccpp.lib /MACHINE:$(CPU) gc_cpp.obj
@@ -108,6 +125,9 @@ gccpp.lib: gc_cpp.obj
gc.lib: $(OBJS)
$(link) $(ldebug) kernel32.lib user32.lib /subsystem:windows /dll /INCREMENTAL:NO /pdb:"gc.pdb" /out:gc.dll /implib:gc.lib /MACHINE:$(CPU) $(OBJS)
+cord.lib: $(COBJS) gc.lib
+ $(link) $(ldebug) gc.lib /subsystem:windows /dll /INCREMENTAL:NO /pdb:"cord.pdb" /out:cord.dll /implib:cord.lib /MACHINE:$(CPU) $(COBJS)
+
gccpp.lib: gc_cpp.obj gc.lib
$(link) $(ldebug) gc.lib /subsystem:windows /dll /INCREMENTAL:NO /pdb:"gccpp.pdb" /out:gccpp.dll /implib:gccpp.lib /MACHINE:$(CPU) gc_cpp.obj
@@ -127,8 +147,11 @@ cord\tests\de_win.res: cord\tests\de_win.rc cord\tests\de_win.h cord\tests\de_cm
$(rc) $(rcvars) -r -fo cord\tests\de_win.res cord\tests\de_win.rc
# Cord/de is a real win32 GUI app.
-de.exe: cord\cordbscs.obj cord\cordxtra.obj cord\tests\de.obj cord\tests\de_win.obj cord\tests\de_win.rbj gc.lib
- $(link) /MACHINE:$(CPU) /INCREMENTAL:NO $(ldebug) $(lflags) -out:de.exe cord\cordbscs.obj cord\cordxtra.obj cord\tests\de.obj cord\tests\de_win.obj cord\tests\de_win.rbj gc.lib gdi32.lib user32.lib
+de.exe: cord\tests\de.obj cord\tests\de_win.obj cord\tests\de_win.rbj gc.lib cord.lib
+ $(link) /MACHINE:$(CPU) /INCREMENTAL:NO $(ldebug) $(lflags) -out:de.exe cord\tests\de.obj cord\tests\de_win.obj cord\tests\de_win.rbj gc.lib cord.lib gdi32.lib user32.lib
+
+cordtest.exe: cord\tests\cordtest.obj gc.lib cord.lib
+ $(link) /subsystem:console /MACHINE:$(CPU) /INCREMENTAL:NO $(ldebug) $(lflags) -out:cordtest.exe cord\tests\cordtest.obj gc.lib cord.lib user32.lib
gc_cpp.obj: gc_cpp.cc include\gc_cpp.h include\gc.h
@@ -145,4 +168,4 @@ $(AO_SRC_DIR):
tar xvfz $(AO_SRC_DIR).tar.gz
clean:
- del *.exe *.log *.obj *.pdb cord\*.exe cord\*.exp cord\*.lib cord\*.obj cord\*.pdb cord\tests\*.rbj cord\tests\*.res cord\tests\*.obj extra\*.obj gc*.lib gc*.dll gc*.exp test_cpp.cpp tests\*.obj 2> nul
+ del *.dll *.exe *.exp *.lib *.log *.obj *.pdb cordtst*.tmp cord\*.obj cord\tests\*.rbj cord\tests\*.res cord\tests\*.obj extra\*.obj test_cpp.cpp tests\*.obj 2> nul
diff --git a/OS2_MAKEFILE b/OS2_MAKEFILE
index 522a4d09..a5216316 100644
--- a/OS2_MAKEFILE
+++ b/OS2_MAKEFILE
@@ -15,7 +15,7 @@ CFLAGS= /O /Q /DALL_INTERIOR_POINTERS /DENABLE_DISCLAIM /DGC_ATOMIC_UNCOLLECTABL
# Setjmp_test may yield overly optimistic results when compiled
# without optimization.
-all: gc.lib
+all: gc.lib cord.lib
check: gctest.exe cordtest.exe
gctest.exe
@@ -45,5 +45,15 @@ cord\cordxtra.obj: cord\cordxtra.c include\cord.h include\cord_pos.h include\ec.
cord\cordprnt.obj: cord\cordprnt.c include\cord.h include\cord_pos.h include\ec.h
$(CC) $(CFLAGS) /C /Focord\cordprnt cord\cordprnt.c
-cordtest.exe: cord\tests\cordtest.c include\cord.h include\cord_pos.h include\ec.h $(CORDOBJS) gc.lib
- $(CC) $(CFLAGS) /B"/STACK:65536" /Fecordtest cord\tests\cordtest.c gc.lib $(CORDOBJS)
+cord.lib: $(CORDOBJS)
+ echo . > cord.lib
+ erase cord.lib
+ LIB cord.lib $(CORDOBJS), cord.lst
+
+cordtest.exe: cord\tests\cordtest.c include\cord.h include\cord_pos.h include\ec.h gc.lib cord.lib
+ $(CC) $(CFLAGS) /B"/STACK:65536" /Fecordtest cord\tests\cordtest.c gc.lib cord.lib
+
+clean:
+ erase gc.lib cord.lib
+ erase gctest.exe cordtest.exe
+ erase $(OBJS) $(CORDOBJS)
diff --git a/README.md b/README.md
index b7725b24..7c42c479 100644
--- a/README.md
+++ b/README.md
@@ -208,7 +208,7 @@ use up to about 30 MB of memory. (The multi-threaded version will use more.
attempt to build and test the "cord" string library.)
Makefile.direct will generate a library gc.a which you should link against.
-Typing "make cords" will add the cord library to gc.a.
+Typing "make cords" will build the cord library (cord.a).
The GNU style build process understands the usual targets. `make check`
runs a number of tests. `make install` installs at least libgc, and libcord.
diff --git a/WCC_MAKEFILE b/WCC_MAKEFILE
index a106d306..2a9fc4dd 100644
--- a/WCC_MAKEFILE
+++ b/WCC_MAKEFILE
@@ -57,9 +57,15 @@ SYSFLAG=-DOS2 -bt=os2
!ifdef ENABLE_STATIC
DLLFLAG=
TEST_DLLFLAG=-DGC_NOT_DLL
+CORDFLAG=
!else
DLLFLAG=-bd -DGC_DLL
TEST_DLLFLAG=-DGC_DLL
+# cord.dll and its clients should not link C library statically otherwise
+# FILE-related functions might not work (because own set of opened FILEs
+# is maintained by each copy of the C library thus making impossible to pass
+# FILE pointer from, e.g., .exe code to .dll one).
+CORDFLAG=-br
!endif
CC=wcc386
@@ -76,11 +82,14 @@ OBJS= alloc.obj reclaim.obj allchblk.obj misc.obj &
dbg_mlc.obj malloc.obj dyn_load.obj &
typd_mlc.obj ptr_chck.obj mallocx.obj fnlz_mlc.obj gcj_mlc.obj
-all: gc.lib gccpp.lib
+COBJS= cordbscs.obj cordxtra.obj cordprnt.obj
-check: gctest.exe test_cpp.exe .SYMBOLIC
+all: gc.lib gccpp.lib cord.lib
+
+check: gctest.exe test_cpp.exe cordtest.exe .SYMBOLIC
*gctest.exe
*test_cpp.exe
+ *cordtest.exe
!ifdef ENABLE_STATIC
@@ -89,6 +98,11 @@ gc.lib: $(OBJS)
@for %i in ($(OBJS)) do @%append $*.lb1 +'%i'
*wlib -b -c -n -p=512 $@ @$*.lb1
+cord.lib: $(COBJS)
+ @%create $*.lb1
+ @for %i in ($(COBJS)) do @%append $*.lb1 +'%i'
+ *wlib -b -c -n -p=512 $@ @$*.lb1
+
gccpp.lib: gc_cpp.obj
@%create $*.lb1
@%append $*.lb1 +'gc_cpp.obj'
@@ -113,6 +127,24 @@ gc.dll: $(OBJS) .AUTODEPEND
@for %i in ($(OBJS)) do @%append $*.lnk file '%i'
*wlink @$*.lnk
+cord.lib: cord.dll
+ *wlib -b -c -n -p=512 $@ +cord.dll
+
+cord.dll: $(COBJS) gc.lib .AUTODEPEND
+ @%create $*.lnk
+!ifdef DOS4GW
+ @%append $*.lnk sys os2v2_dll
+!else ifdef MSWIN32
+ @%append $*.lnk sys nt_dll
+!else ifdef OS2
+ @%append $*.lnk sys os2v2_dll
+!endif
+ @%append $*.lnk op case
+ @%append $*.lnk name $*
+ @for %i in ($(COBJS)) do @%append $*.lnk file '%i'
+ @%append $*.lnk library gc.lib
+ *wlink @$*.lnk
+
gccpp.lib: gccpp.dll
*wlib -b -c -n -p=512 $@ +gccpp.dll
@@ -150,6 +182,23 @@ gctest.exe: test.obj gc.lib
@%append $*.lnk library gc.lib
*wlink @$*.lnk
+cordtest.exe: cordtest.obj gc.lib cord.lib
+ %create $*.lnk
+!ifdef DOS4GW
+ @%append $*.lnk sys dos4g
+!else ifdef MSWIN32
+ @%append $*.lnk sys nt
+!else ifdef OS2
+ @%append $*.lnk sys os2v2
+!endif
+ @%append $*.lnk op case
+ @%append $*.lnk op stack=256K
+ @%append $*.lnk name $*
+ @%append $*.lnk file cordtest.obj
+ @%append $*.lnk library gc.lib
+ @%append $*.lnk library cord.lib
+ *wlink @$*.lnk
+
test_cpp.exe: test_cpp.obj gc.lib gccpp.lib
%create $*.lnk
!ifdef DOS4GW
@@ -167,10 +216,19 @@ test_cpp.exe: test_cpp.obj gc.lib gccpp.lib
@%append $*.lnk library gccpp.lib
*wlink @$*.lnk
+cordbscs.obj: cord\cordbscs.c .AUTODEPEND
+ $(CC) $(CFLAGS) $(CORDFLAG) cord\cordbscs.c
+cordxtra.obj: cord\cordxtra.c .AUTODEPEND
+ $(CC) $(CFLAGS) $(CORDFLAG) cord\cordxtra.c
+cordprnt.obj: cord\cordprnt.c .AUTODEPEND
+ $(CC) $(CFLAGS) $(CORDFLAG) cord\cordprnt.c
+
gc_cpp.obj: gc_cpp.cc .AUTODEPEND
$(CXX) $(TEST_CXXFLAGS) $*.cc
test.obj: tests\test.c .AUTODEPEND
$(CC) $(TEST_CFLAGS) /wcd=13 /wcd=201 /wcd=367 /wcd=368 tests\test.c
+cordtest.obj: cord\tests\cordtest.c .AUTODEPEND
+ $(CC) $(TEST_CFLAGS) $(CORDFLAG) cord\tests\cordtest.c
test_cpp.obj: tests\test_cpp.cc .AUTODEPEND
$(CXX) $(TEST_CXXFLAGS) tests\test_cpp.cc