From 646879b54a5b6a5388fdee6e8091d20e564c2568 Mon Sep 17 00:00:00 2001 From: michaelh Date: Mon, 5 Jun 2000 00:29:59 +0000 Subject: [PATCH] Merge back from 2.21-pre1 git-svn-id: https://sdcc.svn.sourceforge.net/svnroot/sdcc/trunk/sdcc@273 4a8a32a2-be11-0410-ad9d-d568d2c75423 --- Makefile | 7 +- README | 41 +++- as/Makefile | 6 +- as/z80/Makefile | 21 +- configure | 2 + configure.in | 1 + src/avr/Makefile | 3 +- src/mcs51/Makefile | 3 +- src/z80/Makefile | 3 +- support/gc/Makefile.cross.in | 392 +++++++++++++++++++++++++++++++++++ support/gc/Makefile.in | 4 +- support/scripts/build.mak | 78 +++++-- support/scripts/mega.mak | 75 +++++++ 13 files changed, 606 insertions(+), 30 deletions(-) create mode 100644 support/gc/Makefile.cross.in create mode 100644 support/scripts/mega.mak diff --git a/Makefile b/Makefile index 61575aa2..0b34350a 100644 --- 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 0469134a..22377abb 100644 --- a/README +++ b/README @@ -12,6 +12,44 @@ The Z80 port was started by Michael Hope 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 diff --git a/as/Makefile b/as/Makefile index 206729bc..432ca133 100644 --- a/as/Makefile +++ b/as/Makefile @@ -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: diff --git a/as/z80/Makefile b/as/z80/Makefile index 7f77efa5..dafa1607 100644 --- a/as/z80/Makefile +++ b/as/z80/Makefile @@ -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 $@ $< diff --git a/configure b/configure index a36c8996..e57aae76 100755 --- 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 < peeph.rul diff --git a/src/mcs51/Makefile b/src/mcs51/Makefile index 1419c260..d2783a64 100644 --- a/src/mcs51/Makefile +++ b/src/mcs51/Makefile @@ -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 diff --git a/src/z80/Makefile b/src/z80/Makefile index 9d6207c7..8626cd73 100644 --- a/src/z80/Makefile +++ b/src/z80/Makefile @@ -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 index 00000000..12b2b8c1 --- /dev/null +++ b/support/gc/Makefile.cross.in @@ -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 diff --git a/support/gc/Makefile.in b/support/gc/Makefile.in index c3982968..18509185 100644 --- a/support/gc/Makefile.in +++ b/support/gc/Makefile.in @@ -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 diff --git a/support/scripts/build.mak b/support/scripts/build.mak index 35f808a5..3a01ae7e 100644 --- a/support/scripts/build.mak +++ b/support/scripts/build.mak @@ -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 index 00000000..af1d522a --- /dev/null +++ b/support/scripts/mega.mak @@ -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 -- 2.30.2