diff options
-rw-r--r-- | Makefile.direct | 42 | ||||
-rw-r--r-- | NT_MAKEFILE | 43 | ||||
-rw-r--r-- | OS2_MAKEFILE | 16 | ||||
-rw-r--r-- | README.md | 2 | ||||
-rw-r--r-- | WCC_MAKEFILE | 62 |
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) @@ -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 |