]> granicus.if.org Git - gc/commitdiff
Build cord.lib by Makefile.direct, NT_MAKEFILE, OS2_MAKEFILE, WCC_MAKEFILE
authorIvan Maidanski <ivmai@mail.ru>
Wed, 24 Jul 2019 08:11:29 +0000 (11:11 +0300)
committerIvan Maidanski <ivmai@mail.ru>
Wed, 24 Jul 2019 08:36:00 +0000 (11:36 +0300)
Note: Makefile.direct builds cord.a (not libcord.a or cord.lib).

* Makefile.direct: Update header comment about all and cords targets.
* Makefile.direct (all): Depend also on cords.
* Makefile.direct (cord.a): New target (duplicates cords target).
* Makefile.direct (cords): Do not depend on base_lib; create cord.a
instead of updating gc.a.
* Makefile.direct (cordtest, de): Depend on cords instead of
$(CORD_OBJS); pass cord.a (instead of $(CORD_OBJS)) to $(CC).
* NT_MAKEFILE (CFLAGS_MT): Move variable definition (which uses cvarsmt) to
be after CORDFLAG one.
* NT_MAKEFILE (CORDFLAG, COBJS): New variable.
* WCC_MAKEFILE (CORDFLAG, COBJS): Likewise.
* NT_MAKEFILE [!ENABLE_STATIC] (cvarsmt): Set variable value to empty;
add comment.
* NT_MAKEFILE (all): Depend also on cord.lib.
* OS2_MAKEFILE (all): Likewise.
* WCC_MAKEFILE (all): Likewise.
* NT_MAKEFILE (check): Depend also on cordtest.exe; run also cordtest.
* WCC_MAKEFILE (check): Likewise.
* NT_MAKEFILE (.c.obj): Remove -DCORD_NOT_DLL; add $(CORDFLAG).
* NT_MAKEFILE (cord.lib, cordtest.exe): New target.
* OS2_MAKEFILE (cord.lib, cordtest.exe, clean): Likewise.
* WCC_MAKEFILE (cord.lib, cordtest.exe, cordbscs.obj, cordxtra.obj,
cordprnt.obj, cordtest.obj): Likewise.
* WCC_MAKEFILE [!ENABLE_STATIC] (cord.dll): Likewise.
* NT_MAKEFILE (de.exe): Depend on cord.lib instead of cordbscs.obj and
cordxtra.obj.
* NT_MAKEFILE (clean): Delete cordtst*.tmp files; delete *.lib, *.dll,
and *.exp files instead of gc*.lib, gc*.dll, gc*.exp, cord\*.exe,
cord\*.exp, cord\*.lib, cord\*.pdb.
* README.md (Installation and Portability): Update information about
"make cords".

Makefile.direct
NT_MAKEFILE
OS2_MAKEFILE
README.md
WCC_MAKEFILE

index c3e501af1aceace4a12f3cdf13389fdc31e8f2a7..8e6d9f413e732fa23797da4f8eeb8785e0ea6804 100644 (file)
@@ -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
index a0477ed73ebad608ab4ea9f3734abf7aae77fdf8..3266d9afa4e988032117ec47b079dd6e1bb302e1 100644 (file)
@@ -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
index 522a4d0957147430d93c49d485dc1e9c55df6f11..a521631694461699c48fb57beb472407cc2b0a23 100644 (file)
@@ -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)
index b7725b24053a6faeb126e003508c1cfa579a36a4..7c42c479f2a33fa3788fa983a18eba39474ed4e9 100644 (file)
--- 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.
index a106d306d41c3981cc22d248f64ff6b7c2f6b3f2..2a9fc4dde4f0fb968e6f7cf513d1bdbac624c03c 100644 (file)
@@ -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