Merge back from 2.21-pre1
authormichaelh <michaelh@4a8a32a2-be11-0410-ad9d-d568d2c75423>
Mon, 5 Jun 2000 00:29:59 +0000 (00:29 +0000)
committermichaelh <michaelh@4a8a32a2-be11-0410-ad9d-d568d2c75423>
Mon, 5 Jun 2000 00:29:59 +0000 (00:29 +0000)
git-svn-id: https://sdcc.svn.sourceforge.net/svnroot/sdcc/trunk/sdcc@273 4a8a32a2-be11-0410-ad9d-d568d2c75423

13 files changed:
Makefile
README
as/Makefile
as/z80/Makefile
configure
configure.in
src/avr/Makefile
src/mcs51/Makefile
src/z80/Makefile
support/gc/Makefile.cross.in [new file with mode: 0644]
support/gc/Makefile.in
support/scripts/build.mak
support/scripts/mega.mak [new file with mode: 0644]

index 61575aa2661541ffbfff1b1926f64f9b4237f83f..0b34350ae74a1adb9d06ec4a47f728b019a4326f 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -7,7 +7,7 @@ AUTOCONF        = autoconf
 
 PRJDIR         = .
 PKGS           = debugger/mcs51 sim/ucsim
-SDCC_LIBS      = support/gc support/cpp
+SDCC_LIBS      = support/cpp
 SDCC_ASLINK    = as/mcs51 as link
 
 PRJS           = sim/ucsim
@@ -20,6 +20,11 @@ srcdir          = .
 all: checkconf sdcc
 
 sdcc-libs:
+ifeq ($(CROSS_LIBGC),1)
+       $(MAKE) -C support/gc -f Makefile.cross
+else
+       $(MAKE) -C support/gc
+endif
        for lib in $(SDCC_LIBS); do $(MAKE) -C $$lib; done
 
 sdcc-cc: sdcc-libs
diff --git a/README b/README
index 0469134a776f55990e15bccd021cfd0f17aea9a5..22377abb9a623f01ee90e98ee99aee76f98d80f3 100644 (file)
--- a/README
+++ b/README
@@ -12,6 +12,44 @@ The Z80 port was started by Michael Hope <michaelh@earthling.net>
 Some of the Z80 related files are borrowed from the Gameboy
 Development Kit (GBDK) originally by Pascal Felber.
 
+Notes on the z80 port
+---------------------
+The 2.2.1 release finally includes the required libraries and
+tools to target the z80.  2.2.0a included z80 compiler support
+but not the assembler, linker, etc.
+
+Things are still not perfect.  The z80 port is partly wedged in
+due to the different ports using different base libraries, but most
+of this is hidden by lcc.  It is reccomended that to compile for
+the z80 you use:
+
+lcc -mz80/consolez80 -c -o file.o file.c
+lcc -mz80/consolez80 -o file.ihx file.o
+
+etc.
+lcc is a wrapper for sdcc, the assembler, linker etc.  It has the
+added advantage that it accepts more of the standard command line
+options than raw sdcc.
+
+The -mz80/consolez80 is very important as it selects the libraries
+to use and which crt0 module to use.  Unfortunatly each target system
+requires its own startup code (crt0) and definitions for the base
+of RAM, ROM etc.  Those adventurous enough should get a copy of gbdk-lib,
+build the appropriate crt0.s, and then manually link the object files
+together with the appropriate base definitions and the appropriate
+crt0.o.  Try 
+
+lcc -mz80/consolez80 -v -o file.ihx file.c
+
+to see the current liker command line.
+
+If you succeed, please consider sending Michael Hope a copy of crt0.s
+and the appropriate base definitions, and he will roll them into the
+next release of sdcc.
+
+If you find a bug and really cant wait, download the latest copy of
+gbdk and use the copy of sdcc from that.
+
 Notes:
 ------
 000123 mlh: You can set the processor type at run time.  Try:
@@ -51,7 +89,8 @@ Links:
   http://www.geocities.com/ResearchTriangle/Forum/1353/
 
 * SDCC mailing list
-  http://sdcc.listbot.com/
+  http://lists.sourceforge.net/mailman/listinfo/sdcc-user
+
 
 * Yahoo! Random link
   http://random.yahoo.com/bin/ryl
index 206729bce64c94777a92f1eebabad0dd915d0018..432ca1334546f1aca05204024e5d6e0fefa7967c 100644 (file)
@@ -6,11 +6,11 @@ PORTS = z80 gbz80
 all:
        for i in $(PORTS); do make _as THIS=$$i; done
 
-_as: clean
+_as:
 ifeq ($(THIS), gbz80)
-       make -C z80 BUILDDIR=../../bin EXT=-$(THIS)$(E) OPTS=-DGAMEBOY
+       make -C z80 BUILDDIR=../../bin EXT=-$(THIS)$(E) OPTS=-DGAMEBOY wary
 else
-       make -C z80 BUILDDIR=../../bin EXT=-$(THIS)$(E)
+       make -C z80 BUILDDIR=../../bin EXT=-$(THIS)$(E) wary
 endif
 
 clean:
index 7f77efa51ee44051f0c04e28bd2ddc8cd3920e30..dafa16079d3652125841aa2f8f463dbd558032c9 100644 (file)
@@ -3,19 +3,34 @@ PRJDIR = ../..
 include $(PRJDIR)/Makefile.common
 
 SDC    = .
-OBJS   = asdata.o asexpr.o aslex.o aslist.o asmain.o asout.o \
-         assubr.o assym.o z80adr.o z80ext.o z80mch.o z80pst.o
+SRC    = asdata.c asexpr.c aslex.c aslist.c asmain.c asout.c \
+         assubr.c assym.c z80adr.c z80ext.c z80mch.c z80pst.c
+OBJS   = $(SRC:%.c=%.o)
 BINS   = $(BUILDDIR)/as$(EXT)
 
 CFLAGS += $(OPTS) -I. -DINDEXLIB -DMLH_MAP -DUNIX -DSDK
 CFLAGS += -funsigned-char
 LDFLAGS += -lm
 
-all:   $(BINS)
+all:   dep $(BINS)
+
+dep: Makefile.dep
+
+Makefile.dep: $(SRC) *.h
+       $(CPP) $(CPPFLAGS) $(M_OR_MM) $(SRC) > Makefile.dep
+
+include Makefile.dep
 
 $(BINS): $(OBJS)
        $(CC) $(LDFLAGS) -o $(BINS) $(OBJS)
 
+# Hmm.  Should only rebuild if any of the source files are changed,
+# but must do a clean build to make sure that there isnt a mix of
+# z80 and gb stuff.
+wary: $(OBJS)
+       make clean
+       make $(BINS)
+
 %.o:   %.c
        $(CC) -c $(CFLAGS) -o $@ $<
 
index a36c89969bdef0485ab94c95bc2b79448aec1489..e57aae76eb4d9f7ea5b037fe9aa833bd5016d665 100755 (executable)
--- a/configure
+++ b/configure
@@ -2681,6 +2681,7 @@ ac_given_INSTALL="$INSTALL"
 
 trap 'rm -fr `echo "main.mk:main_in.mk
 support/gc/Makefile
+support/gc/Makefile.cross
 src/Makefile
 as/mcs51/Makefile
 support/cpp/Makefile
@@ -2784,6 +2785,7 @@ cat >> $CONFIG_STATUS <<EOF
 
 CONFIG_FILES=\${CONFIG_FILES-"main.mk:main_in.mk
 support/gc/Makefile
+support/gc/Makefile.cross
 src/Makefile
 as/mcs51/Makefile
 support/cpp/Makefile
index 346f815a3a3a68ed9735a31c953181ed2eb05993..0a4ec7e8ac26b733d43edf8d106075446b482c1a 100755 (executable)
@@ -230,6 +230,7 @@ AC_CONFIG_SUBDIRS(sim/ucsim)
 #link/z80/Makefile
 AC_OUTPUT(main.mk:main_in.mk
 support/gc/Makefile
+support/gc/Makefile.cross
 src/Makefile
 as/mcs51/Makefile
 support/cpp/Makefile
index 1419c26030c9f387a8e268e629ff3572cfab72fa..d2783a6411658f8c2ddf02fb489b9e29abb782bd 100644 (file)
@@ -5,7 +5,6 @@ include $(PRJDIR)/Makefile.common
 OBJ = gen.o ralloc.o main.o
 LIB = port.a
 
-CFLAGS = -ggdb -Wall -O2
 CFLAGS += -I.. -I. -I../..
 
 all: $(LIB)
@@ -15,7 +14,7 @@ main.o: main.c peeph.rul
 $(LIB): peeph.rul $(OBJ)
        rm -f $(LIB)
        ar r $(LIB) $(OBJ)
-       ranlib $(LIB)
+       $(RANLIB) $(LIB)
 
 peeph.rul: peeph.def
        $(AWK) -f ../SDCCpeeph.awk peeph.def > peeph.rul
index 1419c26030c9f387a8e268e629ff3572cfab72fa..d2783a6411658f8c2ddf02fb489b9e29abb782bd 100644 (file)
@@ -5,7 +5,6 @@ include $(PRJDIR)/Makefile.common
 OBJ = gen.o ralloc.o main.o
 LIB = port.a
 
-CFLAGS = -ggdb -Wall -O2
 CFLAGS += -I.. -I. -I../..
 
 all: $(LIB)
@@ -15,7 +14,7 @@ main.o: main.c peeph.rul
 $(LIB): peeph.rul $(OBJ)
        rm -f $(LIB)
        ar r $(LIB) $(OBJ)
-       ranlib $(LIB)
+       $(RANLIB) $(LIB)
 
 peeph.rul: peeph.def
        $(AWK) -f ../SDCCpeeph.awk peeph.def > peeph.rul
index 9d6207c724dffbc6ef1b9b06285cf2962025bb3e..8626cd73f2e3fe0c4c725af1aa3699e217901243 100644 (file)
@@ -5,7 +5,6 @@ include $(PRJDIR)/Makefile.common
 OBJ = gen.o ralloc.o main.o support.o
 LIB = port.a
 
-CFLAGS = -ggdb -Wall
 CFLAGS += -I.. -I. -I../..
 
 all: $(LIB)
@@ -13,7 +12,7 @@ all: $(LIB)
 $(LIB): peeph.rul peeph-z80.rul peeph-gbz80.rul $(OBJ)
        rm -f $(LIB)
        ar r $(LIB) $(OBJ)
-       ranlib $(LIB)
+       $(RANLIB) $(LIB)
 
 %.rul: %.def
        $(AWK) -f ../SDCCpeeph.awk $< > $@
diff --git a/support/gc/Makefile.cross.in b/support/gc/Makefile.cross.in
new file mode 100644 (file)
index 0000000..12b2b8c
--- /dev/null
@@ -0,0 +1,392 @@
+# Primary targets:
+# gc.a - builds basic library
+# libgc.a - builds library for use with g++ "-fgc-keyword" extension
+# c++ - adds C++ interface to library
+# cords - adds cords (heavyweight strings) to library
+# test - 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
+# cord/de - builds dumb editor based on cords.
+ABI_FLAG=
+CC             = @CC@ $(ABI_FLAG)
+CXX            = @CXX@ $(ABI_FLAG)
+AS             = @AS@ $(ABI_FLAG)
+PRJDIR         = ../..
+srcdir         = @srcdir@
+#  The above doesn't work with gas, which doesn't run cpp.
+#  Define AS as `gcc -c -x assembler-with-cpp' instead.
+#  Under Irix 6, you will have to specify the ABI for as if you specify
+#  it for the C compiler.
+
+CFLAGS= -O2 -DATOMIC_UNCOLLECTABLE -DNO_SIGNALS -DALL_INTERIOR_POINTERS -DNO_EXECUTE_PERMISSION -DSILENT -I /usr/local/include
+
+# For dynamic library builds, it may be necessary to add flags to generate
+# PIC code, e.g. -fPIC on Linux.
+
+# Setjmp_test may yield overly optimistic results when compiled
+# without optimization.
+# -DSILENT disables statistics printing, and improves performance.
+# -DCHECKSUMS reports on erroneously clear dirty bits, and unexpectedly
+#   altered stubborn objects, at substantial performance cost.
+#   Use only for incremental collector debugging.
+# -DFIND_LEAK causes the collector to assume that all inaccessible
+#   objects should have been explicitly deallocated, and reports exceptions.
+#   Finalization and the test program are not usable in this mode.
+# -DSOLARIS_THREADS enables support for Solaris (thr_) threads.
+#   (Clients should also define SOLARIS_THREADS and then include
+#   gc.h before performing thr_ or dl* or GC_ operations.)
+#   Must also define -D_REENTRANT.
+# -D_SOLARIS_PTHREADS enables support for Solaris pthreads.
+#   Define SOLARIS_THREADS as well.
+# -DIRIX_THREADS enables support for Irix pthreads.  See README.irix.
+# _DLINUX_THREADS enables support for Xavier Leroy's Linux threads.
+#   see README.linux.  -D_REENTRANT may also be required.
+# -DALL_INTERIOR_POINTERS allows all pointers to the interior
+#   of objects to be recognized.  (See gc_priv.h for consequences.)
+# -DSMALL_CONFIG tries to tune the collector for small heap sizes,
+#   usually causing it to use less space in such situations.
+#   Incremental collection no longer works in this case.
+# -DLARGE_CONFIG tunes the collector for unusually large heaps.
+#   Necessary for heaps larger than about 500 MB on most machines.
+#   Recommended for heaps larger than about 64 MB.
+# -DDONT_ADD_BYTE_AT_END is meaningful only with
+#   -DALL_INTERIOR_POINTERS.  Normally -DALL_INTERIOR_POINTERS
+#   causes all objects to be padded so that pointers just past the end of
+#   an object can be recognized.  This can be expensive.  (The padding
+#   is normally more than one byte due to alignment constraints.)
+#   -DDONT_ADD_BYTE_AT_END disables the padding.
+# -DNO_SIGNALS does not disable signals during critical parts of
+#   the GC process.  This is no less correct than many malloc 
+#   implementations, and it sometimes has a significant performance
+#   impact.  However, it is dangerous for many not-quite-ANSI C
+#   programs that call things like printf in asynchronous signal handlers.
+# -DNO_EXECUTE_PERMISSION may cause some or all of the heap to not
+#   have execute permission, i.e. it may be impossible to execute
+#   code from the heap.  Currently this only affects the incremental
+#   collector on UNIX machines.  It may greatly improve its performance,
+#   since this may avoid some expensive cache synchronization.
+# -DOPERATOR_NEW_ARRAY declares that the C++ compiler supports the
+#   new syntax "operator new[]" for allocating and deleting arrays.
+#   See gc_cpp.h for details.  No effect on the C part of the collector.
+#   This is defined implicitly in a few environments.
+# -DREDIRECT_MALLOC=X causes malloc, realloc, and free to be defined
+#   as aliases for X, GC_realloc, and GC_free, respectively.
+#   Calloc is redefined in terms of the new malloc.  X should
+#   be either GC_malloc or GC_malloc_uncollectable.
+#   The former is occasionally useful for working around leaks in code
+#   you don't want to (or can't) look at.  It may not work for
+#   existing code, but it often does.  Neither works on all platforms,
+#   since some ports use malloc or calloc to obtain system memory.
+#   (Probably works for UNIX, and win32.)
+# -DIGNORE_FREE turns calls to free into a noop.  Only useful with
+#   -DREDIRECT_MALLOC.
+# -DNO_DEBUGGING removes GC_dump and the debugging routines it calls.
+#   Reduces code size slightly at the expense of debuggability.
+# -DJAVA_FINALIZATION makes it somewhat safer to finalize objects out of
+#   order by specifying a nonstandard finalization mark procedure  (see
+#   finalize.c).  Objects reachable from finalizable objects will be marked
+#   in a sepearte postpass, and hence their memory won't be reclaimed.
+#   Not recommended unless you are implementing a language that specifies
+#   these semantics.
+# -DFINALIZE_ON_DEMAND causes finalizers to be run only in response
+#   to explicit GC_invoke_finalizers() calls.
+# -DATOMIC_UNCOLLECTABLE includes code for GC_malloc_atomic_uncollectable.
+#   This is useful if either the vendor malloc implementation is poor,
+#   or if REDIRECT_MALLOC is used.
+# -DHBLKSIZE=ddd, where ddd is a power of 2 between 512 and 16384, explicitly
+#   sets the heap block size.  Each heap block is devoted to a single size and
+#   kind of object.  For the incremental collector it makes sense to match
+#   the most likely page size.  Otherwise large values result in more
+#   fragmentation, but generally better performance for large heaps.
+# -DUSE_MMAP use MMAP instead of sbrk to get new memory.
+#   Works for Solaris and Irix.
+# -DMMAP_STACKS (for Solaris threads) Use mmap from /dev/zero rather than
+#   GC_scratch_alloc() to get stack memory.
+# -DPRINT_BLACK_LIST Whenever a black list entry is added, i.e. whenever
+#   the garbage collector detects a value that looks almost, but not quite,
+#   like a pointer, print both the address containing the value, and the
+#   value of the near-bogus-pointer.  Can be used to identifiy regions of
+#   memory that are likely to contribute misidentified pointers.
+# -DOLD_BLOCK_ALLOC Use the old, possibly faster, large block
+#   allocation strategy.  The new strategy tries harder to minimize
+#   fragmentation, sometimes at the expense of spending more time in the
+#   large block allocator and/or collecting more frequently.
+#   If you expect the allocator to promtly use an explicitly expanded
+#   heap, this is highly recommended.
+#
+
+
+
+LIBGC_CFLAGS= -O -DNO_SIGNALS -DSILENT \
+    -DREDIRECT_MALLOC=GC_malloc_uncollectable \
+    -DDONT_ADD_BYTE_AT_END -DALL_INTERIOR_POINTERS
+#   Flags for building libgc.a -- the last two are required.
+
+CXXFLAGS= $(CFLAGS) 
+AR             = ar
+RANLIB         = @RANLIB@
+
+# Redefining srcdir allows object code for the nonPCR version of the collector
+# to be generated in different directories.  In this case, the destination directory
+# should contain a copy of the original include directory.
+srcdir = .
+VPATH = $(srcdir)
+
+OBJS= alloc.o reclaim.o allchblk.o misc.o mach_dep.o os_dep.o mark_rts.o headers.o mark.o obj_map.o blacklst.o finalize.o new_hblk.o dbg_mlc.o malloc.o stubborn.o checksums.o solaris_threads.o irix_threads.o linux_threads.o typd_mlc.o ptr_chck.o mallocx.o solaris_pthreads.o
+
+CSRCS= reclaim.c allchblk.c misc.c alloc.c mach_dep.c os_dep.c mark_rts.c headers.c mark.c obj_map.c pcr_interface.c blacklst.c finalize.c new_hblk.c real_malloc.c dyn_load.c dbg_mlc.c malloc.c stubborn.c checksums.c solaris_threads.c irix_threads.c linux_threads.c typd_mlc.c ptr_chck.c mallocx.c solaris_pthreads.c
+
+CORD_SRCS=  cord/cordbscs.c cord/cordxtra.c cord/cordprnt.c cord/de.c cord/cordtest.c cord/cord.h cord/ec.h cord/private/cord_pos.h cord/de_win.c cord/de_win.h cord/de_cmds.h cord/de_win.ICO cord/de_win.RC cord/SCOPTIONS.amiga cord/SMakefile.amiga
+
+CORD_OBJS=  cord/cordbscs.o cord/cordxtra.o cord/cordprnt.o
+
+SRCS= $(CSRCS) mips_sgi_mach_dep.s rs6000_mach_dep.s alpha_mach_dep.s \
+    sparc_mach_dep.s gc.h gc_typed.h gc_hdrs.h gc_priv.h gc_private.h \
+    gcconfig.h gc_mark.h include/gc_inl.h include/gc_inline.h gc.man \
+    threadlibs.c if_mach.c if_not_there.c gc_cpp.cc gc_cpp.h weakpointer.h \
+    gcc_support.c mips_ultrix_mach_dep.s include/gc_alloc.h gc_alloc.h \
+    include/new_gc_alloc.h include/javaxfc.h sparc_sunos4_mach_dep.s \
+    solaris_threads.h $(CORD_SRCS)
+
+OTHER_FILES= Makefile PCR-Makefile OS2_MAKEFILE NT_MAKEFILE BCC_MAKEFILE \
+           README test.c test_cpp.cc setjmp_t.c SMakefile.amiga \
+           SCoptions.amiga README.amiga README.win32 cord/README \
+           cord/gc.h include/gc.h include/gc_typed.h include/cord.h \
+           include/ec.h include/private/cord_pos.h include/private/gcconfig.h \
+           include/private/gc_hdrs.h include/private/gc_priv.h \
+          include/gc_cpp.h README.rs6000 \
+           include/weakpointer.h README.QUICK callprocs pc_excludes \
+           barrett_diagram README.OS2 README.Mac MacProjects.sit.hqx \
+           MacOS.c EMX_MAKEFILE makefile.depend README.debugging \
+           include/gc_cpp.h Mac_files/datastart.c Mac_files/dataend.c \
+           Mac_files/MacOS_config.h Mac_files/MacOS_Test_config.h \
+           add_gc_prefix.c README.solaris2 README.sgi README.hp README.uts \
+          win32_threads.c NT_THREADS_MAKEFILE gc.mak README.dj Makefile.dj \
+          README.alpha README.linux version.h Makefile.DLLs gc_watcom.asm \
+          WCC_MAKEFILE
+
+CORD_INCLUDE_FILES= $(srcdir)/gc.h $(srcdir)/cord/cord.h $(srcdir)/cord/ec.h \
+           $(srcdir)/cord/private/cord_pos.h
+
+UTILS= if_mach if_not_there threadlibs
+
+# Libraries needed for curses applications.  Only needed for de.
+CURSES= -lcurses -ltermlib
+
+# The following is irrelevant on most systems.  But a few
+# versions of make otherwise fork the shell specified in
+# the SHELL environment variable.
+SHELL= /bin/sh
+
+SPECIALCFLAGS = 
+# Alternative flags to the C compiler for mach_dep.c.
+# Mach_dep.c often doesn't like optimization, and it's
+# not time-critical anyway.
+# Set SPECIALCFLAGS to -q nodirect_code on Encore.
+
+#all: checkconf libgc.a gctest
+all: checkconf libgc.a
+
+pcr: PCR-Makefile gc_private.h gc_hdrs.h gc.h gcconfig.h mach_dep.o $(SRCS)
+       make -f PCR-Makefile depend
+       make -f PCR-Makefile
+
+$(OBJS) test.o dyn_load.o dyn_load_sunos53.o: $(srcdir)/gc_priv.h $(srcdir)/gc_hdrs.h $(srcdir)/gc.h \
+    $(srcdir)/gcconfig.h $(srcdir)/gc_typed.h Makefile
+# The dependency on Makefile is needed.  Changing
+# options such as -DSILENT affects the size of GC_arrays,
+# invalidating all .o files that rely on gc_priv.h
+
+mark.o typd_mlc.o finalize.o: $(srcdir)/gc_mark.h
+
+base_lib libgc.a: $(OBJS) dyn_load.o $(UTILS)
+       echo > base_lib
+       rm -f on_sparc_sunos5_1
+       $(AR) ru libgc.a $(OBJS) dyn_load.o
+       $(RANLIB) libgc.a || cat /dev/null
+#      ignore ranlib failure; that usually means it doesn't exist, and isn't needed
+
+cords: $(CORD_OBJS) cord/cordtest $(UTILS)
+       rm -f on_sparc_sunos5_3
+       $(AR) ru libgc.a $(CORD_OBJS)
+       $(RANLIB) libgc.a || cat /dev/null
+
+gc_cpp.o: $(srcdir)/gc_cpp.cc $(srcdir)/gc_cpp.h $(srcdir)/gc.h Makefile
+       $(CXX) -c $(CXXFLAGS) $(srcdir)/gc_cpp.cc
+
+test_cpp: $(srcdir)/test_cpp.cc $(srcdir)/gc_cpp.h gc_cpp.o $(srcdir)/gc.h \
+base_lib $(UTILS)
+       rm -f test_cpp
+       $(CXX) $(CXXFLAGS) -o test_cpp $(srcdir)/test_cpp.cc gc_cpp.o libgc.a `./threadlibs`
+
+c++: gc_cpp.o $(srcdir)/gc_cpp.h test_cpp
+       rm -f on_sparc_sunos5_4
+       $(AR) ru libgc.a gc_cpp.o
+       $(RANLIB) libgc.a || cat /dev/null
+       ./test_cpp 1
+       echo > c++
+
+dyn_load_sunos53.o: dyn_load.c
+       $(CC) $(CFLAGS) -DSUNOS53_SHARED_LIB -c $(srcdir)/dyn_load.c -o $@
+
+# SunOS5 shared library version of the collector
+sunos5gc.so: $(OBJS) dyn_load_sunos53.o
+       $(CC) -G -o sunos5gc.so $(OBJS) dyn_load_sunos53.o -ldl
+       ln sunos5gc.so libgc.so
+
+# Alpha/OSF shared library version of the collector
+libalphagc.so: $(OBJS)
+       ld -shared -o libalphagc.so $(OBJS) dyn_load.o -lc
+       ln libalphagc.so libgc.so
+
+# IRIX shared library version of the collector
+libirixgc.so: $(OBJS) dyn_load.o
+       ld -shared $(ABI_FLAG) -o libirixgc.so $(OBJS) dyn_load.o -lc
+       ln libirixgc.so libgc.so
+
+# Linux shared library version of the collector
+liblinuxgc.so: $(OBJS) dyn_load.o
+       gcc -shared -o liblinuxgc.so $(OBJS) dyn_load.o -lo
+       ln liblinuxgc.so libgc.so
+
+mach_dep.o: $(srcdir)/mach_dep.c $(srcdir)/mips_sgi_mach_dep.s $(srcdir)/mips_ultrix_mach_dep.s $(srcdir)/rs6000_mach_dep.s $(UTILS)
+       rm -f mach_dep.o
+       $(CC) -c $(SPECIALCFLAGS) $(srcdir)/mach_dep.c
+
+mark_rts.o: $(srcdir)/mark_rts.c if_mach if_not_there $(UTILS)
+       rm -f mark_rts.o
+       $(CC) -c $(CFLAGS) $(srcdir)/mark_rts.c
+#      Work-around for DEC optimizer tail recursion elimination bug.
+#  The ALPHA-specific line should be removed if gcc is used.
+
+alloc.o: version.h
+
+cord/cordbscs.o: $(srcdir)/cord/cordbscs.c $(CORD_INCLUDE_FILES)
+       $(CC) $(CFLAGS) -c $(srcdir)/cord/cordbscs.c
+       mv cordbscs.o cord/cordbscs.o
+#  not all compilers understand -o filename
+
+cord/cordxtra.o: $(srcdir)/cord/cordxtra.c $(CORD_INCLUDE_FILES)
+       $(CC) $(CFLAGS) -c $(srcdir)/cord/cordxtra.c
+       mv cordxtra.o cord/cordxtra.o
+
+cord/cordprnt.o: $(srcdir)/cord/cordprnt.c $(CORD_INCLUDE_FILES)
+       $(CC) $(CFLAGS) -c $(srcdir)/cord/cordprnt.c
+       mv cordprnt.o cord/cordprnt.o
+
+cord/cordtest: $(srcdir)/cord/cordtest.c $(CORD_OBJS) libgc.a $(UTILS)
+       rm -f cord/cordtest
+       $(CC) $(CFLAGS) -o cord/cordtest $(srcdir)/cord/cordtest.c $(CORD_OBJS) libgc.a `./threadlibs`
+
+cord/de: $(srcdir)/cord/de.c cord/cordbscs.o cord/cordxtra.o libgc.a $(UTILS)
+       rm -f cord/de
+       $(CC) $(CFLAGS) -o cord/de $(srcdir)/cord/de.c cord/cordbscs.o cord/cordxtra.o libgc.a $(CURSES) `./threadlibs`
+
+if_mach: $(srcdir)/if_mach.c $(srcdir)/gcconfig.h
+       $(CC) $(CFLAGS) -o if_mach $(srcdir)/if_mach.c
+
+threadlibs: $(srcdir)/threadlibs.c $(srcdir)/gcconfig.h Makefile
+       $(CC) $(CFLAGS) -o threadlibs $(srcdir)/threadlibs.c
+
+if_not_there: $(srcdir)/if_not_there.c
+       $(CC) $(CFLAGS) -o if_not_there $(srcdir)/if_not_there.c
+
+clean: 
+       rm -f libgc.a *.o gctest gctest_dyn_link test_cpp \
+             setjmp_test  mon.out gmon.out a.out core if_not_there if_mach \
+             threadlibs $(CORD_OBJS) cord/cordtest cord/de
+       -rm -f *~
+
+gctest: test.o libgc.a if_mach if_not_there
+       rm -f gctest
+       $(CC) $(CFLAGS) -o gctest test.o libgc.a `./threadlibs`
+
+# If an optimized setjmp_test generates a segmentation fault,
+# odds are your compiler is broken.  Gctest may still work.
+# Try compiling setjmp_t.c unoptimized.
+setjmp_test: $(srcdir)/setjmp_t.c $(srcdir)/gc.h if_mach if_not_there
+       $(CC) $(CFLAGS) -o setjmp_test $(srcdir)/setjmp_t.c
+
+test:  KandRtest cord/cordtest
+       cord/cordtest
+
+# Those tests that work even with a K&R C compiler:
+KandRtest: setjmp_test gctest
+       ./setjmp_test
+       ./gctest
+
+add_gc_prefix: add_gc_prefix.c
+       $(CC) -o add_gc_prefix $(srcdir)/add_gc_prefix.c
+
+gc.tar: $(SRCS) $(OTHER_FILES) add_gc_prefix
+       ./add_gc_prefix $(SRCS) $(OTHER_FILES) > /tmp/gc.tar-files
+       (cd $(srcdir)/.. ; tar cvfh - `cat /tmp/gc.tar-files`) > gc.tar
+
+pc_gc.tar: $(SRCS) $(OTHER_FILES)
+       tar cvfX pc_gc.tar pc_excludes $(SRCS) $(OTHER_FILES)
+
+floppy: pc_gc.tar
+       -mmd a:/cord
+       -mmd a:/cord/private
+       -mmd a:/include
+       -mmd a:/include/private
+       mkdir /tmp/pc_gc
+       cat pc_gc.tar | (cd /tmp/pc_gc; tar xvf -)
+       -mcopy -tmn /tmp/pc_gc/* a:
+       -mcopy -tmn /tmp/pc_gc/cord/* a:/cord
+       -mcopy -mn /tmp/pc_gc/cord/de_win.ICO a:/cord
+       -mcopy -tmn /tmp/pc_gc/cord/private/* a:/cord/private
+       -mcopy -tmn /tmp/pc_gc/include/* a:/include
+       -mcopy -tmn /tmp/pc_gc/include/private/* a:/include/private
+       rm -r /tmp/pc_gc
+
+gc.tar.Z: gc.tar
+       compress gc.tar
+
+gc.tar.gz: gc.tar
+       gzip gc.tar
+
+lint: $(CSRCS) test.c
+       lint -DLINT $(CSRCS) test.c | egrep -v "possible pointer alignment problem|abort|exit|sbrk|mprotect|syscall"
+
+# BTL: added to test shared library version of collector.
+# Currently works only under SunOS5.  Requires GC_INIT call from statically
+# loaded client code.
+ABSDIR = `pwd`
+gctest_dyn_link: test.o libgc.so
+       $(CC) -L$(ABSDIR) -R$(ABSDIR) -o gctest_dyn_link test.o -lgc -ldl -lthread
+
+gctest_irix_dyn_link: test.o libirixgc.so
+       $(CC) -L$(ABSDIR) -o gctest_irix_dyn_link test.o -lirixgc
+
+test_dll.o: test.c libgc_globals.h
+       $(CC) $(CFLAGS) -DGC_USE_DLL -c test.c -o test_dll.o
+
+test_dll: test_dll.o libgc_dll.a libgc.dll
+       $(CC) test_dll.o -L$(ABSDIR) -lgc_dll -o test_dll
+
+SYM_PREFIX-libgc=GC
+
+# Uncomment the following line to build a GNU win32 DLL
+# include Makefile.DLLs
+
+reserved_namespace: $(SRCS)
+       for file in $(SRCS) test.c test_cpp.cc; do \
+               sed s/GC_/_GC_/g < $$file > tmp; \
+               cp tmp $$file; \
+               done
+
+user_namespace: $(SRCS)
+       for file in $(SRCS) test.c test_cpp.cc; do \
+               sed s/_GC_/GC_/g < $$file > tmp; \
+               cp tmp $$file; \
+               done
+
+# Remake configuration
+checkconf:
+       @if [ -f $(srcdir)/../devel ]; then \
+          $(MAKE) -f $(srcdir)/conf.mk freshconf \
+         srcdir="$(srcdir)" PRJDIR="$(PRJDIR)"; \
+        fi
+
+# End of Makefile
index c3982968c7facd3130c87e61f9f901345e23d993..185091859a6baefef7718aa799a8fe762c03c733 100644 (file)
@@ -123,8 +123,8 @@ LIBGC_CFLAGS= -O -DNO_SIGNALS -DSILENT \
 #   Flags for building libgc.a -- the last two are required.
 
 CXXFLAGS= $(CFLAGS) 
-AR= ar
-RANLIB= ranlib
+AR             = ar
+RANLIB         = @RANLIB@
 
 
 # Redefining srcdir allows object code for the nonPCR version of the collector
index 35f808a5fb0c6c647f40db13307cc7a6fb9060cb..3a01ae7e7a4c4a774776eb256ef6401059fbe2e8 100644 (file)
@@ -15,27 +15,44 @@ VER = 2.2.1
 # Used as a branch name.
 SHORTVER = 221
 
+# Options:
+# linux-linux   Building on Linux, targeting Linux
+# linux-ming32  Building on Linux, targeting mingw32 based win32
+# cygwin-mingw32 Building via cygwin on win32, targeting mingw32
+
+COMPILE_MODE = linux-mingw32
+SDCC_OR_GBDK = sdcc
+
 ROOT_GBDK = :pserver:anonymous@cvs.gbdk.sourceforge.net:/cvsroot/gbdk
 ROOT_SDCC = :pserver:anonymous@cvs.sdcc.sourceforge.net:/cvsroot/sdcc
 
+ifeq ($(COMPILE_MODE),linux-linux)
+# For Linux
+SE = 
+E =
+SDCC_ROOT = /usr/lib/$(SDCC_OR_GBDK)
+endif
+
+ifeq ($(COMPILE_MODE),linux-mingw32)
 # For mingw32 hosted on Linux
+# Tools name prefix
+TNP = i386-mingw32-
 # Source extension - what the gcc generated files have appended
-#SE =
+SE =
 # Dest extenstion - what extension we want them to have.
-#E = .exe
-#SDCC_ROOT = \\\\gbdk
+E = .exe
+SDCC_ROOT = /$(SDCC_OR_GBDK)
+# Set to cross to bypass the detection
+CROSS_LIBGC = 1
+endif
 
+ifeq ($(COMPILE_MODE),cygwin-mingw32)
 # For mingw32 on win32
 # Source extension - what the gcc generated files have appended
-#SE = .exe
+SE = .exe
 # Dest extenstion - what extension we want them to have.
-#E = .exe
-#SDCC_ROOT = \\\\gbdk
-
-# For Linux
-SE = 
-E =
-SDCC_ROOT = /usr/lib/sdcc
+SDCC_ROOT = /$(SDCC_OR_GBDK)
+endif
 
 all: logged_in dist
 
@@ -49,19 +66,34 @@ update: logged_in
        cd $(DIR); cvs $(CVSFLAGS) -d$(ROOT_GBDK) co -r sdcc-$(SHORTVER) gbdk-lib
        cd $(DIR); cvs $(CVSFLAGS) -d$(ROOT_GBDK) co -r sdcc-$(SHORTVER) gbdk-support
 
-_sdcc: sdcc-bin sdcc-lib sdcc-doc
+_sdcc: sdcc-bin sdcc-misc sdcc-lib sdcc-doc
 
 tidy:
        rm -rf `find $(BUILD) -name "CVS"`
        rm -rf `find $(BUILD)/lib -name "*.asm"`
-       -strip $(BUILD)/bin/*
+       -$(TNP)strip $(BUILD)/bin/*
 
 sdcc-bin: sdcc/sdccconf.h
+<<<<<<< build.mak
        make -C sdcc sdcc-bin
        mkdir -p $(BUILD)/bin
        for i in \
        sdcc sdcpp link-z80 as-z80 aslink asx8051 sdcdb; \
        do cp sdcc/bin/$$i$(SE) $(BUILD)/bin/$$i$(E); done
+=======
+       make -C sdcc sdcc-bin CROSS_LIBGC=$(CROSS_LIBGC)
+       mkdir -p $(BUILD)/bin
+       for i in \
+       sdcc sdcpp link-z80 as-z80 aslink asx8051; \
+       do cp sdcc/bin/$$i$(SE) $(BUILD)/bin/$$i$(E); done
+
+sdcc-misc: sdcc/sdccconf.h
+       make -C sdcc sdcc-misc CROSS_LIBGC=$(CROSS_LIBGC)
+       mkdir -p $(BUILD)/bin
+       for i in \
+       sdcdb; \
+       do cp sdcc/bin/$$i$(SE) $(BUILD)/bin/$$i$(E); done
+>>>>>>> 1.1.2.5
        cp sdcc/sim/ucsim/s51.src/s51$(E) $(BUILD)/bin
        cp sdcc/sim/ucsim/z80.src/sz80$(E) $(BUILD)/bin
        cp sdcc/sim/ucsim/avr.src/savr$(E) $(BUILD)/bin
@@ -89,13 +121,28 @@ sdcc-lib-z80:
 sdcc-lib-gen:
        make -C sdcc sdcc-device
 
+<<<<<<< build.mak
 lcc:
        make -C gbdk-support/lcc SDCCLIB=$(SDCC_ROOT)/
        cp gbdk-support/lcc/lcc$(E) $(BUILD)/bin
 
+=======
+lcc:
+       make -C gbdk-support/lcc SDCCLIB=$(SDCC_ROOT)/ TNP=$(TNP)
+       cp gbdk-support/lcc/lcc$(SE) $(BUILD)/bin/lcc$(E)
+
+>>>>>>> 1.1.2.5
 sdcc/sdccconf.h: sdcc/configure
+ifdef TNP
        cd sdcc; \
+       export CCC=$(TNP)c++; \
+       export RANLIB=$(TNP)ranlib; \
+       export CC=$(TNP)gcc; \
        ./configure --datadir=$(SDCC_ROOT)
+       echo $$CCC
+else
+       cd sdcc; ./configure --datadir=$(SDCC_ROOT)
+endif
 
 dist: _sdcc lcc tidy
 
@@ -106,4 +153,7 @@ logged_in:
        cvs -d$(ROOT_GBDK) login
        cvs -d$(ROOT_SDCC) login
        touch logged_in
-       make update
\ No newline at end of file
+<<<<<<< build.mak
+       make update=======
+       make -f build.mak update
+>>>>>>> 1.1.2.5
diff --git a/support/scripts/mega.mak b/support/scripts/mega.mak
new file mode 100644 (file)
index 0000000..af1d522
--- /dev/null
@@ -0,0 +1,75 @@
+# A simple Makefile that attempts to weave everything together
+# for a build.  Basically:
+#  * Makes a temporary build directory
+#  * Copies itself and build.mak off, hands over to the new Makefile
+#  * Downloads the source
+#  * Compiles the native, then win32 versions
+#  * Takes the libs from native and hooks them into win32
+#  * tars it all up and calls it done
+
+BUILD_DIR = /home/michaelh/tmp/sdcc-build
+NATIVE = linux-linux
+CROSS = linux-mingw32
+NATIVE_DIST = linux-glibc2
+CROSS_DIST = win32
+
+VER = 2.21-pre1
+
+all: spawn
+
+spawn:
+       mkdir -p $(BUILD_DIR)
+       cp build.mak mega.mak $(BUILD_DIR)
+       make -C $(BUILD_DIR) -f mega.mak build
+
+build: orig native cross dist
+
+dist:
+       cd $(NATIVE)/build; tar czf ../../sdcc-$(VER)-$(NATIVE_DIST).tar.gz sdcc
+ifeq ($(CROSS_DIST), win32)
+       rm -f sdcc-$(VER)-$(CROSS_DIST).zip
+       cd $(CROSS)/build; zip -rlq9 ../../sdcc-$(VER)-$(CROSS_DIST).zip sdcc
+else
+       cd $(CROSS)/build; tar czf ../../sdcc-$(VER)-$(CROSS_DIST).tar.gz sdcc
+endif
+
+clean:
+       rm -rf $(BUILD_DIR)
+
+orig:
+       mkdir -p orig
+       cp build.mak orig
+       touch orig/logged_in                    # Assume already logged in
+       make -C orig -f build.mak update
+
+
+linux-linux: orig
+       mkdir -p linux-linux
+       (cd orig; tar cf - .) | (cd linux-linux; tar xf -)
+
+linux-mingw32: orig
+       mkdir -p linux-mingw32
+       (cd orig; tar cf - .) | (cd linux-mingw32; tar xf -)
+
+native: $(NATIVE) dummy
+       cp build.mak $(NATIVE)
+       make -C $(NATIVE) -f build.mak COMPILE_MODE=$(NATIVE)
+
+dummy:
+
+# We do a first pass, ignored build on sdccconf.h as at the moment
+# it fails while configuring the sim.
+cross-bin: $(CROSS) dummy
+       cp build.mak $(CROSS)
+       -make -C $(CROSS) -f build.mak COMPILE_MODE=$(CROSS) sdcc/sdccconf.h
+       make -C $(CROSS) -f build.mak COMPILE_MODE=$(CROSS) sdcc-bin lcc tidy
+
+# Binary files are compiled; now copy the built libs from the native
+# version across
+cross-mix:
+       mv $(CROSS)/build/sdcc/bin $(CROSS)/build/sdcc/bin.1
+       (cd $(NATIVE); tar cf - build/sdcc) | (cd $(CROSS); tar xf - )
+       rm -rf $(CROSS)/build/sdcc/bin
+       mv $(CROSS)/build/sdcc/bin.1 $(CROSS)/build/sdcc/bin
+
+cross: cross-bin cross-mix