# to build the collector.
#
# Primary targets:
-# gc.a - builds basic library
-# c++ - adds C++ interface to library
+# all - builds gc.a, gccpp.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
-# check - prints porting information, then builds basic version of gc.a,
-# and runs some tests of collector and cords. Does not add cords or
-# c++ interface to gc.a
-# check-cpp - runs C++ test without adding C++ (and cords) interface to gc.a
+# 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
# cord/de - builds dumb editor based on cords.
ABI_FLAG=
# Compiler executable name. For EMX, replace to "gcc".
CXX=g++ $(ABI_FLAG)
-# Needed only for "make c++", which adds the c++ interface.
+# Needed only for "make c++", which builds the C++ interface.
AS=as $(AS_ABI_FLAG)
# The above doesn't work with gas, which doesn't run cpp.
# not time-critical anyway.
# Set SPECIALCFLAGS to -q nodirect_code on Encore.
-all: base_lib
+all: base_lib c++
atomic_ops.o: $(AO_SRC_DIR)/src/atomic_ops.c
$(CC) $(CFLAGS) -c -o $@ $(AO_SRC_DIR)/src/atomic_ops.c
BSD-pkg-all: bsd-libgc.a bsd-libleak.a
-bsd-libgc.a:
+bsd-libgc.a bsd-libgccpp.a:
$(MAKE) -f Makefile.direct CFLAGS="$(CFLAGS)" clean c++-t
mv gc.a bsd-libgc.a
+ mv gccpp.a bsd-libgccpp.a
bsd-libleak.a:
$(MAKE) -f Makefile.direct CFLAGS="$(LEAKFLAGS)" clean c++-nt
BSD-pkg-install: BSD-pkg-all
${CP} bsd-libgc.a libgc.a
${INSTALL_DATA} libgc.a ${PREFIX}/lib
+ ${CP} bsd-libgccpp.a libgccpp.a
+ ${INSTALL_DATA} libgccpp.a ${PREFIX}/lib
${INSTALL_DATA} gc.h gc_cpp.h ${PREFIX}/include
${INSTALL_MAN} doc/gc.man ${PREFIX}/man/man3/gc.3
$(CXX) -c $(CXXFLAGS) $(srcdir)/gc_cpp.cc
test_cpp$(EXEEXT): $(srcdir)/tests/test_cpp.cc $(srcdir)/include/gc_cpp.h \
- $(srcdir)/include/gc.h gc_cpp.o base_lib $(UTILS)
+ $(srcdir)/include/gc.h c++ base_lib $(UTILS)
rm -f test_cpp$(EXEEXT)
- ./if_mach HP_PA HPUX $(CXX) $(CXXFLAGS) -o test_cpp $(srcdir)/tests/test_cpp.cc gc_cpp.o gc.a -ldld `./threadlibs`
- ./if_not_there test_cpp$(EXEEXT) || $(CXX) $(CXXFLAGS) -o test_cpp$(EXEEXT) $(srcdir)/tests/test_cpp.cc gc_cpp.o gc.a `./threadlibs`
+ ./if_mach HP_PA HPUX $(CXX) $(CXXFLAGS) -o test_cpp $(srcdir)/tests/test_cpp.cc gc.a gccpp.a -ldld `./threadlibs`
+ ./if_not_there test_cpp$(EXEEXT) || $(CXX) $(CXXFLAGS) -o test_cpp$(EXEEXT) $(srcdir)/tests/test_cpp.cc gc.a gccpp.a `./threadlibs`
check-cpp: test_cpp$(EXEEXT)
./test_cpp
c++-nt: c++
@echo "Use ./test_cpp 1 to test the leak library"
-c++: gc_cpp.o $(srcdir)/include/gc_cpp.h base_lib $(UTILS)
+c++ gccpp.a: gc_cpp.o $(UTILS)
rm -f dont_ar_4
./if_mach SPARC SOLARIS touch dont_ar_4
- ./if_mach SPARC SOLARIS $(AR) rus gc.a gc_cpp.o
+ ./if_mach SPARC SOLARIS $(AR) rus gccpp.a gc_cpp.o
./if_mach M68K AMIGA touch dont_ar_4
- ./if_mach M68K AMIGA $(AR) -vrus gc.a gc_cpp.o
- ./if_not_there dont_ar_4 || $(AR) ru gc.a gc_cpp.o
- ./if_not_there dont_ar_4 || $(RANLIB) gc.a || cat /dev/null
+ ./if_mach M68K AMIGA $(AR) -vrus gccpp.a gc_cpp.o
+ ./if_not_there dont_ar_4 || $(AR) ru gccpp.a gc_cpp.o
+ ./if_not_there dont_ar_4 || $(RANLIB) gccpp.a || cat /dev/null
echo > c++
dyn_load_sunos53.o: dyn_load.c
$(HOSTCC) $(HOSTCFLAGS) -o if_not_there$(EXEEXT) $(srcdir)/tools/if_not_there.c
clean:
- rm -f gc.a *.i *.o *.exe tests/*.o gctest gctest_dyn_link test_cpp \
+ rm -f *.a *.i *.o *.exe tests/*.o gctest gctest_dyn_link test_cpp \
setjmp_test mon.out gmon.out a.out core if_not_there if_mach \
base_lib c++ $(CORD_OBJS) cordtest de cords dont_ar_* threadlibs
-rm -f *~
$(UTILS)
$(CC) $(CFLAGS) -o setjmp_test$(EXEEXT) $(srcdir)/tools/setjmp_t.c
-check: cordtest$(EXEEXT) gctest$(EXEEXT) setjmp_test$(EXEEXT)
+check: cordtest$(EXEEXT) gctest$(EXEEXT) setjmp_test$(EXEEXT) test_cpp$(EXEEXT)
./setjmp_test
./gctest
./cordtest
+ ./test_cpp
# A synonym to "check" (for compatibility with older GC versions).
test: check
!IFDEF MAKE_AS_LIB
CFLAGS_GCDLL=-DGC_NOT_DLL
-LINK_GC=lib /out:gc.lib
!ELSE
CFLAGS_GCDLL=-DGC_DLL
-LINK_DLL_FLAGS=kernel32.lib user32.lib /subsystem:windows /dll \
- /INCREMENTAL:NO /pdb:"gc.pdb" /out:gc.dll /implib:gc.lib
-LINK_GC=$(link) $(ldebug) $(LINK_DLL_FLAGS)
!ENDIF
CFLAGS_SPECIFIC=$(CFLAGS_DEBUG) $(CFLAGS_GCDLL) $(CFLAGS_MT)
AO_SRC_DIR=libatomic_ops/src
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 gc_cpp.obj gcj_mlc.obj mallocx.obj extra\msvc_dbg.obj thread_local_alloc.obj
+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
+all: gc.lib gccpp.lib
check: gctest.exe test_cpp.exe de.exe
gctest.exe
$(OBJS) tests\test.obj: include\private\gc_priv.h include\private\gc_hdrs.h include\gc.h include\private\gcconfig.h include\private\gc_locks.h include\private\gc_pmark.h include\gc_mark.h include\gc_disclaim.h include\private\msvc_dbg.h
+!IFDEF MAKE_AS_LIB
+
+gc.lib: $(OBJS)
+ lib /out:gc.lib /MACHINE:$(CPU) $(OBJS)
+
+gccpp.lib: gc_cpp.obj
+ lib /out:gccpp.lib /MACHINE:$(CPU) gc_cpp.obj
+
+!ELSE
+
gc.lib: $(OBJS)
- $(LINK_GC) /MACHINE:$(CPU) $(OBJS)
+ $(link) $(ldebug) kernel32.lib user32.lib /subsystem:windows /dll /INCREMENTAL:NO /pdb:"gc.pdb" /out:gc.dll /implib:gc.lib /MACHINE:$(CPU) $(OBJS)
+
+gccpp.lib: gc_cpp.obj
+ $(link) $(ldebug) gc.lib /subsystem:windows /dll /INCREMENTAL:NO /pdb:"gccpp.pdb" /out:gccpp.dll /implib:gccpp.lib /MACHINE:$(CPU) gc_cpp.obj
+
+!ENDIF
gctest.exe: gc.lib tests\test.obj
$(link) /MACHINE:$(CPU) /INCREMENTAL:NO $(ldebug) $(lflags) user32.lib -out:$*.exe tests\test.obj gc.lib
# This generates the C++ test executable. The executable expects
# a single numeric argument, which is the number of iterations.
# The output appears in test_cpp.gc.log file.
-test_cpp.exe: test_cpp.obj include\gc_cpp.h include\gc.h gc.lib
- $(link) /MACHINE:$(CPU) /INCREMENTAL:NO $(ldebug) $(lflags) user32.lib -out:test_cpp.exe test_cpp.obj gc.lib
+test_cpp.exe: test_cpp.obj include\gc_cpp.h include\gc.h gc.lib gccpp.lib
+ $(link) /MACHINE:$(CPU) /INCREMENTAL:NO $(ldebug) $(lflags) user32.lib -out:test_cpp.exe test_cpp.obj gc.lib gccpp.lib
$(AO_SRC_DIR):
tar xvfz $(AO_SRC_DIR).tar.gz
TEST_DLLFLAG=-DGC_DLL
!else ifdef MAKE_AS_LIB
DLLFLAG=
-TEST_DLLFLAG=
+TEST_DLLFLAG=-DGC_NOT_DLL
!else
!error Either MAKE_AS_LIB or MAKE_AS_DLL should be defined
!endif
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
+all: gc.lib gccpp.lib
check: gctest.exe test_cpp.exe .SYMBOLIC
*gctest.exe
!ifdef MAKE_AS_DLL
-gc.lib: gc.dll gc_cpp.obj
- *wlib -b -c -n -p=512 $@ +gc.dll +gc_cpp.obj
+gc.lib: gc.dll
+ *wlib -b -c -n -p=512 $@ +gc.dll
gc.dll: $(OBJS) .AUTODEPEND
@%create $*.lnk
!else ifdef OS2
@%append $*.lnk sys os2v2_dll
!endif
+ @%append $*.lnk op case
@%append $*.lnk name $*
@for %i in ($(OBJS)) do @%append $*.lnk file '%i'
*wlink @$*.lnk
+
+gccpp.lib: gccpp.dll
+ *wlib -b -c -n -p=512 $@ +gccpp.dll
+
+gccpp.dll: gc_cpp.obj 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 $*
+ @%append $*.lnk file 'gc_cpp.obj'
+ @%append $*.lnk library gc.lib
+ @%append $*.lnk library wr7$(CALLING)dll.lib
+ *wlink @$*.lnk
+
!else
-gc.lib: $(OBJS) gc_cpp.obj
+
+gc.lib: $(OBJS)
@%create $*.lb1
@for %i in ($(OBJS)) do @%append $*.lb1 +'%i'
+ *wlib -b -c -n -p=512 $@ @$*.lb1
+
+gccpp.lib: gc_cpp.obj
+ @%create $*.lb1
@%append $*.lb1 +'gc_cpp.obj'
*wlib -b -c -n -p=512 $@ @$*.lb1
@%append $*.lnk file test.obj
@%append $*.lnk library gc.lib
*wlink @$*.lnk
-test_cpp.exe: test_cpp.obj gc.lib
+
+test_cpp.exe: test_cpp.obj gc.lib gccpp.lib
%create $*.lnk
!ifdef DOS4GW
@%append $*.lnk sys dos4g
@%append $*.lnk name $*
@%append $*.lnk file test_cpp.obj
@%append $*.lnk library gc.lib
+ @%append $*.lnk library gccpp.lib
*wlink @$*.lnk
gc_cpp.obj: gc_cpp.cc .AUTODEPEND
.cc.obj: .AUTODEPEND
$(CXX) $(CXXFLAGS) $*.cc
-clean : .SYMBOLIC
+clean: .SYMBOLIC
@if exist *.obj del *.obj
@if exist *.map del *.map
@if exist *.lnk del *.lnk