From: Ivan Maidanski Date: Fri, 19 Jul 2019 17:42:38 +0000 (+0300) Subject: Build gccpp library by Makefile.direct, NT_MAKEFILE and WCC_MAKEFILE X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=4a08ae983;p=gc Build gccpp library by Makefile.direct, NT_MAKEFILE and WCC_MAKEFILE * Makefile.direct: Update header comment about all, gc.a (base_lib), c++, check, check-cpp targets. * Makefile.direct (CXX): Refine comment. * Makefile.direct (all): Depend also on c++. * Makefile.direct (bsd-libgccpp.a): New target (duplicates bsd-libgc.a one). * Makefile.direct (bsd-libgc.a): Add a rename of gccpp.a to bsd-libgccpp.a. * Makefile.direct (BSD-pkg-install): Copy bsd-libgccpp.a file to libgccpp.a, install the latter one. * Makefile.direct (test_cpp): Depend on c++ instead of gc_cpp.o; pass gccpp.a (instead of gc_cpp.o) to $(CXX). * Makefile.direct (gccpp.a): New target (duplicates c++ one). * Makefile.direct (c++): Do not depend on gc_cpp.h and base_lib; create gccpp.a instead of updating gc.a. * Makefile.direct (clean): Delete *.a files instead of gc.a. * Makefile.direct (check): Depend also on test_cpp$(EXEEXT); run also test_cpp. * NT_MAKEFILE (LINK_GC, LINK_DLL_FLAGS): Remove variable. * NT_MAKEFILE (OBJS): Remove gc_cpp.obj. * NT_MAKEFILE (all, test_cpp.exe): Depend also on gccpp.lib. * WCC_MAKEFILE (all, test_cpp.exe): Likewise. * NT_MAKEFILE (gccpp.lib): New target (depending on gc_cpp.obj). * WCC_MAKEFILE (gccpp.lib): Likewise. * WCC_MAKEFILE [MAKE_AS_DLL] (gccpp.dll): Likewise. * NT_MAKEFILE (test_cpp.exe): Pass gccpp.lib to $(link). * WCC_MAKEFILE [MAKE_AS_LIB] (MAKE_AS_LIB): Set to -DGC_NOT_DLL. * WCC_MAKEFILE (gc.lib): Do not depend gc_cpp.obj. * WCC_MAKEFILE [MAKE_AS_DLL] (gc.lib): Do not add gc_cpp.obj to gc.lib. * WCC_MAKEFILE [MAKE_AS_DLL] (gc.dll): Specify "op case". --- diff --git a/Makefile.direct b/Makefile.direct index 7f0f07f3..c3e501af 100644 --- a/Makefile.direct +++ b/Makefile.direct @@ -2,13 +2,13 @@ # 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= @@ -25,7 +25,7 @@ CC=cc $(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. @@ -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 +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 @@ -156,9 +156,10 @@ LEAKFLAGS= $(CFLAGS) -DFIND_LEAK 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 @@ -167,6 +168,8 @@ bsd-libleak.a: 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 @@ -223,10 +226,10 @@ gc_cpp.o: $(srcdir)/gc_cpp.cc $(srcdir)/include/gc_cpp.h $(srcdir)/include/gc.h $(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 @@ -237,14 +240,14 @@ c++-t: c++ test_cpp$(EXEEXT) 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 @@ -364,7 +367,7 @@ if_not_there$(EXEEXT): $(srcdir)/tools/if_not_there.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 *~ @@ -383,10 +386,11 @@ setjmp_test$(EXEEXT): $(srcdir)/tools/setjmp_t.c $(srcdir)/include/gc.h \ $(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 diff --git a/NT_MAKEFILE b/NT_MAKEFILE index 2dcc89f5..939becf6 100644 --- a/NT_MAKEFILE +++ b/NT_MAKEFILE @@ -58,12 +58,8 @@ CFLAGS_MT=$(cvarsmt) -DGC_THREADS -DTHREAD_LOCAL_ALLOC -DPARALLEL_MARK !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) @@ -81,9 +77,9 @@ CFLAGS_DEFAULT=-DALL_INTERIOR_POINTERS -DENABLE_DISCLAIM -DGC_ATOMIC_UNCOLLECTAB 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 @@ -99,8 +95,23 @@ check: gctest.exe test_cpp.exe de.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 @@ -127,8 +138,8 @@ test_cpp.cpp: tests\test_cpp.cc # 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 diff --git a/WCC_MAKEFILE b/WCC_MAKEFILE index c03b12e7..fa929294 100644 --- a/WCC_MAKEFILE +++ b/WCC_MAKEFILE @@ -59,7 +59,7 @@ DLLFLAG=-bd -DGC_DLL 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 @@ -78,7 +78,7 @@ 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 +all: gc.lib gccpp.lib check: gctest.exe test_cpp.exe .SYMBOLIC *gctest.exe @@ -86,8 +86,8 @@ check: gctest.exe test_cpp.exe .SYMBOLIC !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 @@ -98,13 +98,39 @@ gc.dll: $(OBJS) .AUTODEPEND !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 @@ -126,7 +152,8 @@ gctest.exe: test.obj gc.lib @%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 @@ -140,6 +167,7 @@ test_cpp.exe: test_cpp.obj gc.lib @%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 @@ -155,7 +183,7 @@ test_cpp.obj: tests\test_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