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
 
 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
 SDCC_ASLINK    = as/mcs51 as link
 
 PRJS           = sim/ucsim
@@ -20,6 +20,11 @@ srcdir          = .
 all: checkconf sdcc
 
 sdcc-libs:
 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
        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.
 
 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:
 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://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
 
 * 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
 
 all:
        for i in $(PORTS); do make _as THIS=$$i; done
 
-_as: clean
+_as:
 ifeq ($(THIS), gbz80)
 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
 else
-       make -C z80 BUILDDIR=../../bin EXT=-$(THIS)$(E)
+       make -C z80 BUILDDIR=../../bin EXT=-$(THIS)$(E) wary
 endif
 
 clean:
 endif
 
 clean:
index 7f77efa51ee44051f0c04e28bd2ddc8cd3920e30..dafa16079d3652125841aa2f8f463dbd558032c9 100644 (file)
@@ -3,19 +3,34 @@ PRJDIR = ../..
 include $(PRJDIR)/Makefile.common
 
 SDC    = .
 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
 
 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)
 
 
 $(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 $@ $<
 
 %.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
 
 trap 'rm -fr `echo "main.mk:main_in.mk
 support/gc/Makefile
+support/gc/Makefile.cross
 src/Makefile
 as/mcs51/Makefile
 support/cpp/Makefile
 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
 
 CONFIG_FILES=\${CONFIG_FILES-"main.mk:main_in.mk
 support/gc/Makefile
+support/gc/Makefile.cross
 src/Makefile
 as/mcs51/Makefile
 support/cpp/Makefile
 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
 #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
 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
 
 OBJ = gen.o ralloc.o main.o
 LIB = port.a
 
-CFLAGS = -ggdb -Wall -O2
 CFLAGS += -I.. -I. -I../..
 
 all: $(LIB)
 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)
 $(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
 
 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
 
 OBJ = gen.o ralloc.o main.o
 LIB = port.a
 
-CFLAGS = -ggdb -Wall -O2
 CFLAGS += -I.. -I. -I../..
 
 all: $(LIB)
 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)
 $(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
 
 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
 
 OBJ = gen.o ralloc.o main.o support.o
 LIB = port.a
 
-CFLAGS = -ggdb -Wall
 CFLAGS += -I.. -I. -I../..
 
 all: $(LIB)
 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)
 $(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 $< > $@
 
 %.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) 
 #   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
 
 
 # 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
 
 # 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
 
 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
 # For mingw32 hosted on Linux
+# Tools name prefix
+TNP = i386-mingw32-
 # Source extension - what the gcc generated files have appended
 # Source extension - what the gcc generated files have appended
-#SE =
+SE =
 # Dest extenstion - what extension we want them to have.
 # 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
 # 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.
 # 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
 
 
 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
 
        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"`
 
 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
 
 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
        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
        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
 
 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)/
        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
 sdcc/sdccconf.h: sdcc/configure
+ifdef TNP
        cd sdcc; \
        cd sdcc; \
+       export CCC=$(TNP)c++; \
+       export RANLIB=$(TNP)ranlib; \
+       export CC=$(TNP)gcc; \
        ./configure --datadir=$(SDCC_ROOT)
        ./configure --datadir=$(SDCC_ROOT)
+       echo $$CCC
+else
+       cd sdcc; ./configure --datadir=$(SDCC_ROOT)
+endif
 
 dist: _sdcc lcc tidy
 
 
 dist: _sdcc lcc tidy
 
@@ -106,4 +153,7 @@ logged_in:
        cvs -d$(ROOT_GBDK) login
        cvs -d$(ROOT_SDCC) login
        touch 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