mirror of
https://github.com/darlinghq/darling-gdb.git
synced 2024-12-02 00:56:27 +00:00
e1e5fbfcbb
* ldm88k.sc: "Clean up" script, so that ldm88kUr.sc and ldm88kr.sc can be automatically generated. * ldemul.c, configure.in, config.h, Makefile.in: Add support for Sony NewsOS3. * Makefile.in: Re-do the way ldemulation scipts and structures are done. do we only need one or two files for each emulation target (a TARGET.sc and optionally TARGET.c, if ldtemplate isn't suitable). This gets rid of lots of extra source files.
330 lines
9.1 KiB
Makefile
330 lines
9.1 KiB
Makefile
#
|
||
# Makefile for ld version 2
|
||
#
|
||
# $Id$
|
||
#
|
||
|
||
srcdir = .
|
||
|
||
destdir = /usr/local
|
||
|
||
version=`$(srcdir)/../gcc$(subdir)/gcc -dumpversion`
|
||
prefix = $(destdir)
|
||
bindir = $(prefix)/bin
|
||
libdir = $(prefix)/lib
|
||
libsubdir = $(libdir)/gcc/$(target)/$(version)
|
||
|
||
INSTALL = install -c
|
||
INSTALL_PROGRAM = $(INSTALL)
|
||
INSTALL_FILE = $(INSTALL)
|
||
|
||
BASEDIR = ../..
|
||
INCLUDE = $(srcdir)/../include
|
||
INCLUDES = -I. -I$(srcdir) -I$(INCLUDE)
|
||
DEBUG = -g
|
||
|
||
BISON = bison
|
||
BISONFLAGS = -v
|
||
|
||
SCRIPTS = ldgld68k.sc ldgld.sc \
|
||
ldlnk960.sc ldlnk960r.sc ldgld960.sc \
|
||
ldm88k.sc ldglda29k.sc news.sc
|
||
|
||
#### target and host dependent Makefile fragments come in here.
|
||
###
|
||
|
||
CFLAGS = $(INCLUDES) $(DEBUG) $(HDEFINES) $(TDEFINES) $(CDEFINES)
|
||
LINTFLAGS = $(INCLUDES) $(EXTRA_DEF)
|
||
|
||
.SUFFIXES: .y .x .xr .xu .sc .scu .scr $(SUFFIXES)
|
||
|
||
# go directly to ld.new in case this ld isn't capable of
|
||
# linking native object on this host. It can be renamed on
|
||
# install.
|
||
LD_PROG = ld.new
|
||
|
||
# A .sc script file is needed for each emulation mode.
|
||
# sed is used to transform this script into two variant forms:
|
||
# A .scr script is for linking without relocation (-r flag).
|
||
# A .scu script is like .scr, but *do* create constructors.
|
||
|
||
# A sed pattern to translate .sc to .scu:
|
||
SED_MAKE_RELOC_WITH_CONSTRUCTORS=\
|
||
-e "/If relocating/,/End if relocating/d" \
|
||
-e "/=/s/[_a-z.]* *= .*//g" \
|
||
-e '/>/s/} *> *[a-z]*/}/' \
|
||
-e "/text/s/[.]text .*:/.text :/" \
|
||
-e "/data/s/[.]data .*:/.data :/"
|
||
# A sed pattern to translate .scu to .scr:
|
||
SED_REMOVE_CONSTRUCTORS= -e /CONSTRUCTORS/d
|
||
|
||
.sc.scu:
|
||
sed $(SED_MAKE_RELOC_WITH_CONSTRUCTORS) $< >$*.scu
|
||
.scu.scr:
|
||
sed $(SED_REMOVE_CONSTRUCTORS) < $< >$*.scr
|
||
|
||
# Each .sc .scr or .scu script is filtered by mkscript
|
||
# into a string literal that can be included in a .c program.
|
||
.sc.x:
|
||
./mkscript < $< >$*.x
|
||
.scu.xu:
|
||
./mkscript < $< >$*.xu
|
||
.scr.xr:
|
||
./mkscript < $< >$*.xr
|
||
.sc.xu:
|
||
sed $(SED_MAKE_RELOC_WITH_CONSTRUCTORS) < $< | ./mkscript >$*.xu
|
||
.sc.xr:
|
||
sed $(SED_MAKE_RELOC_WITH_CONSTRUCTORS) $(SED_REMOVE_CONSTRUCTORS) \
|
||
< $< | ./mkscript >$*.xr
|
||
|
||
# for self hosting
|
||
GNUTARGET=a.out-sunos-big
|
||
LDEMULATION=gld
|
||
BFDLIB=$(srcdir)/../bfd$(subdir)/libbfd.a
|
||
LIBIBERTY=$(srcdir)/../libiberty$(subdir)/libiberty.a
|
||
|
||
OFILES= ldgram.o ldlex.o ldlang.o ldmain.o ldwarn.o ldwrite.o ldexp.o ldlnk960.o ldgld68k.o ldindr.o \
|
||
ldm88k.o ldglda29k.o news.o \
|
||
ldgld.o ldgld960.o ldemul.o ldver.o ldmisc.o ldsym.o ldvanilla.o ldfile.o
|
||
|
||
HEADERS=config.h ldmain.h ldmain.h ldwarn.h ldmisc.h ldindr.h ldsym.h ldlang.h ldexp.h \
|
||
ldlex.h ldwrite.h ldver.h ldemul.h ldfile.h ldgram.h ld.h
|
||
|
||
MANSOURCES=ld.tex
|
||
|
||
LDCSOURCES=ldlang.c ldindr.c ldmain.c ldwrite.c ldwarn.c ldlnk960.c ldgld.c ldgld68k.c \
|
||
ldm88k.c ldgld29k.c \
|
||
ldgld960.c ldemul.c ldver.c ldmisc.c ldexp.c ldsym.c ldfile.c ldvanilla.c
|
||
|
||
GENERATED_SOURCES=ldgram.c ldlex.c ldgram.h
|
||
GENERATED_HEADERS=ldgram.h
|
||
|
||
LDSOURCES=$(LDCSOURCES) ldgram.y ldlex.l ldgram.h
|
||
|
||
BFDSOURCES=../../bfd/common/*.c
|
||
|
||
SOURCES= $(LDSOURCES) $(BFDSOURCES)
|
||
LINTSOURCES= $(LDCSOURCES) $(BFDSOURCES) $(GENERATED_SOURCES)
|
||
|
||
STAGESTUFF = *.x *.x[ru] *.sc[ru] $(GENERATED_SOURCES) $(GENERATED_HEADERS) $(OFILES) $(LD_PROG) mkscript
|
||
|
||
all: Makefile $(LD_PROG)
|
||
|
||
ldgram.c:ldgram.y
|
||
$(BISON) $(BISONFLAGS) -d $(VPATH)/ldgram.y -o ldgram.c
|
||
|
||
ldlex.c:ldlex.l
|
||
lex -t $(VPATH)/ldlex.l >ldlex.c
|
||
|
||
|
||
ldgld.c: ldtemplate
|
||
sed -e s/"<ldtarget>"/ldgld/g -e s/"<arch>"/m68k/g \
|
||
-e s/"<target>"//g -e s/"<TARGET>"//g < $< > ldgld.c
|
||
news.c: ldtemplate
|
||
sed -e s/"<ldtarget>"/news/g -e s/"<arch>"/m68k/g \
|
||
-e s/"<target>"/news/g -e s/"<TARGET>"/NEWS/g < $< > news.c
|
||
ldgld68k.c: ldtemplate
|
||
sed -e s/"<ldtarget>"/ldgld68k/g -e s/"<arch>"/m68k/g \
|
||
-e s/"<target>"/68k/g -e s/"<TARGET>"/68K/g < $< > ldgld68k.c
|
||
ldglda29k.c: ldtemplate
|
||
sed -e s/"<ldtarget>"/ldglda29k/g -e s/"<arch>"/a29k/g \
|
||
-e s/"<target>"/29k/g -e s/"<TARGET>"/29K/g < $< > ldglda29k.c
|
||
ldm88k.c: ldtemplate
|
||
sed -e s/"<ldtarget>"/ldm88k/g -e s/"<arch>"/m88k/g \
|
||
-e s/"<target>"/m88kbcs/g -e s/"<TARGET>"/M88KBCS/g < $< > ldm88k.c
|
||
|
||
# The .c files for these are generated from ldtemplete.
|
||
ldgld.o: ./mkscript ldgld.x ldgld.xr ldgld.xu
|
||
news.o: ./mkscript news.x news.xr news.xu
|
||
ldgld68k.o: ./mkscript ldgld68k.x ldgld68k.xr ldgld68k.xu
|
||
ldglda29k.o: ./mkscript ldglda29k.x ldglda29k.xr ldglda29k.xu
|
||
ldm88k.o: ./mkscript ldm88k.x ldm88k.xr ldm88k.xu
|
||
|
||
# The .c files for these are (for now) specially written (not ldtemplete).
|
||
ldgld960.o: ./mkscript ldgld960.x
|
||
ldlnk960.o: ./mkscript ldlnk960.x ldlnk960.xr
|
||
|
||
|
||
#$(BFDLIB): $(BFDSOURCES)
|
||
# (cd ../bfd; make)
|
||
|
||
$(LD_PROG): $(OFILES) $(BFDLIB) $(LIBIBERTY)
|
||
$(CC) $(CFLAGS) $(LDFLAGS) -o $(LD_PROG) $(OFILES) $(BFDLIB) $(LIBIBERTY) $(LOADLIBES)
|
||
|
||
# (cd ../bfd; make)
|
||
# LDEMULATION=gld; export LDEMULATION; GNUTARGET=a.out-sunos-big;./ldok -format a.out-sunos-big -o ld /lib/crt0.o $(OFILES) $(BFDLIB) $(LIBIBERTY) -lc /usr/local/lib/gcc/sparc/1.91/gnulib
|
||
# gld -o ld /lib/crt0.o $(OFILES) $(BFDLIB) $(LIBIBERTY) -lc /usr/local/lib/gcc/sparc/1.91/gnulib
|
||
# $(CC) -Bstatic -o ld.new $(OFILES) $(BFDLIB) $(LIBIBERTY)
|
||
|
||
|
||
ld1: ld.new
|
||
$(HOSTING_EMU); ./ld.new -o ld1 $(HOSTING_CRT0) $(OFILES) $(BFDLIB) $(LIBIBERTY) $(HOSTING_LIBS)
|
||
|
||
ld2: ld1
|
||
$(HOSTING_EMU); ./ld1 -o ld2 $(HOSTING_CRT0) $(OFILES) $(BFDLIB) $(LIBIBERTY) $(HOSTING_LIBS)
|
||
|
||
ld3: ld2
|
||
$(HOSTING_EMU); ./ld2 -o ld3 $(HOSTING_CRT0) $(OFILES) $(BFDLIB) $(LIBIBERTY) $(HOSTING_LIBS)
|
||
|
||
ld.dvi:ld.tex
|
||
tex ld.tex
|
||
|
||
mkscript: $(srcdir)/mkscript.c
|
||
$(CC) $(CFLAGS) $(LDFLAGS) -o mkscript $(srcdir)/mkscript.c $(LOADLIBES)
|
||
|
||
ldlex.c: ldlex.l ldgram.h
|
||
ldlex.o: ldlex.c ldgram.h
|
||
ldgram.o: ldgram.c
|
||
ldgram.c:ldgram.y
|
||
|
||
ldgld68k.x :ldgld68k.sc
|
||
ldgld68kUr.x :ldgld68kUr.sc
|
||
ldgld68kr.x :ldgld68kr.sc
|
||
ldgld.x :ldgld.sc
|
||
ldgldUr.x :ldgldUr.sc
|
||
ldgldr.x :ldgldr.sc
|
||
ldlnk960.x :ldlnk960.sc
|
||
ldlnk960r.x :ldlnk960r.sc
|
||
ldgld960.x :ldgld960.sc
|
||
ldgldm88k.x :ldgldm88k.sc
|
||
ldm88kUr.x :ldm88kUr.sc
|
||
ldm88kr.x:ldm88kr.sc
|
||
ldgld68k.x:ldgld68k.sc
|
||
ldglda29k.x :ldglda29k.sc
|
||
ldglda29kr.x :ldglda29kr.sc
|
||
ldglda29kUr.x :ldglda29kUr.sc
|
||
|
||
stage1: force
|
||
- mkdir stage1
|
||
- mv -f $(STAGESTUFF) stage1
|
||
- (cd stage1 ; ln -s $(LD_PROG) ld)
|
||
|
||
stage2: force
|
||
- mkdir stage2
|
||
- mv -f $(STAGESTUFF) stage2
|
||
- (cd stage2 ; ln -s $(LD_PROG) ld)
|
||
|
||
stage3: force
|
||
- mkdir stage3
|
||
- mv -f $(STAGESTUFF) stage3
|
||
- (cd stage3 ; ln -s $(LD_PROG) ld)
|
||
|
||
against=stage2
|
||
|
||
comparison: force
|
||
for i in $(STAGESTUFF) ; do cmp $$i $(against)/$$i ; done
|
||
|
||
de-stage1: force
|
||
- (cd stage1 ; mv -f * ..)
|
||
- rm ld
|
||
- rmdir stage1
|
||
|
||
de-stage2: force
|
||
- (cd stage2 ; mv -f * ..)
|
||
- rm ld
|
||
- rmdir stage2
|
||
|
||
de-stage3: force
|
||
- (cd stage3 ; mv -f * ..)
|
||
- rm ld
|
||
- rmdir stage3
|
||
|
||
clean:
|
||
- rm -f TAGS $(OFILES) $(GENERATED_SOURCES) $(GENERATED_HEADERS)
|
||
- rm -f *.x *.x[ru] *.sc[ur]
|
||
- rm -f ld ld1 ld2 ld3 ld.new mkscript *.o y.output
|
||
|
||
lintlog:$(SOURCES) Makefile
|
||
$(LINT) -abhxzn $(LINTFLAGS) $(LINTSOURCES) \
|
||
| grep -v "pointer casts may be troublesome" \
|
||
| grep -v "possible pointer alignment problem" \
|
||
| grep -v "ignore" \
|
||
| grep -v "conversion from long may lose accuracy" \
|
||
| grep -v "warning: constant argument to NOT" \
|
||
| grep -v "enumeration type clash, operator CAST" \
|
||
| grep -v "warning: constant in conditional context"\
|
||
| grep -v "archive\.c"
|
||
|
||
|
||
tags TAGS:$(SOURCES) $(HEADERS)
|
||
etags -t $?
|
||
|
||
release:
|
||
(cd /4/steve/ld; tar cf - $(LDSOURCES) $(HEADERS) $(MANSOURCES)) | tar xf -
|
||
|
||
objdump:objdump.c
|
||
|
||
install: $(LD_PROG)
|
||
$(INSTALL_PROGRAM) ld.new $(libsubdir)/ld
|
||
|
||
#-----------------------------------------------------------------------------
|
||
# 'STANDARD' GNU/960 TARGETS BELOW THIS POINT
|
||
#
|
||
# 'VERSION' file must be present and contain a string of the form "x.y"
|
||
#-----------------------------------------------------------------------------
|
||
|
||
ver960.c: FORCE
|
||
rm -f ver960.c
|
||
echo "char ${TARG}_ver[]= \"${TARG} `cat VERSION`, `date`\";" > ver960.c
|
||
|
||
|
||
# This target should be invoked before building a new release.
|
||
# 'VERSION' file must be present and contain a string of the form "x.y"
|
||
#
|
||
roll:
|
||
@V=`cat VERSION` ; \
|
||
MAJ=`sed 's/\..*//' VERSION` ; \
|
||
MIN=`sed 's/.*\.//' VERSION` ; \
|
||
V=$$MAJ.`expr $$MIN + 1` ; \
|
||
rm -f VERSION ; \
|
||
echo $$V >VERSION ; \
|
||
echo Version $$V
|
||
|
||
|
||
dep: $(LDSOURCES)
|
||
mkdep $(CFLAGS) $?
|
||
|
||
# Dummy target to force execution of dependent targets.
|
||
#
|
||
force:
|
||
|
||
# Target to uncomment host-specific lines in this makefile. Such lines must
|
||
# have the following string beginning in column 1: #__<hostname>__#
|
||
# Original Makefile is backed up as 'Makefile.old'.
|
||
#
|
||
# Invoke with: make make HOST=xxx
|
||
#
|
||
make:
|
||
-@if test $(HOST)x = x ; then \
|
||
echo 'Specify "make make HOST=???"'; \
|
||
exit 1; \
|
||
fi ; \
|
||
grep -s "^#The next line was generated by 'make make'" Makefile; \
|
||
if test $$? = 0 ; then \
|
||
echo "Makefile has already been processed with 'make make'";\
|
||
exit 1; \
|
||
fi ; \
|
||
mv -f Makefile Makefile.old; \
|
||
echo "#The next line was generated by 'make make'" >Makefile ; \
|
||
echo "HOST=$(HOST)" >>Makefile ; \
|
||
echo >>Makefile ; \
|
||
sed "s/^#__$(HOST)__#//" < Makefile.old >>Makefile
|
||
|
||
#
|
||
|
||
Makefile: $(srcdir)/Makefile.in $(srcdir)/configure
|
||
(cd $(srcdir) ; \
|
||
./configure +destdir=$(destdir) \
|
||
+norecurse \
|
||
`if [ "$(srcdir)" != "." ] ; then echo +subdirs; fi` \
|
||
$(host) +target=$(target))
|
||
|
||
### Local Variables: ***
|
||
### mode:fundamental ***
|
||
### page-delimiter: "^#" ***
|
||
### End: ***
|
||
### end of file
|
||
|
||
|
||
# IF YOU PUT ANYTHING HERE IT WILL GO AWAY
|