#
# 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.script ldgld68kUr.script ldgld68kr.script \
	ldgld.script ldgldUr.script ldgldr.script ldlnk960.script \
	ldlnk960r.script ldgld960.script \
	ldgldm88kbcs.script ldgldm88kbcsUr.script ldgldm88kbcsr.script \
	ldglda29k.script ldglda29kUr.script ldglda29kr.script

PROCESSED_SCRIPTS = ldgld68k.x ldgld68kUr.x ldgld68kr.x ldgld.x \
	ldgldUr.x ldgldr.x ldlnk960.x ldlnk960r.x ldgld960.x \
	ldgldm88kbcs.x ldgldm88kbcsUr.x ldgldm88kbcsr.x \
	ldglda29k.x ldglda29kUr.x ldglda29kr.x

#### target and host dependent Makefile fragments come in here.
###

CFLAGS	= $(INCLUDES) $(DEBUG) $(HDEFINES) $(TDEFINES) $(CDEFINES)
LINTFLAGS =  $(INCLUDES) $(EXTRA_DEF) 

.SUFFIXES: .y .x .script $(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

.script.x:
	./mkscript < $< >$*.x

# 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 \
	ldgldm88kbcs.o ldglda29k.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 \
	ldgldm88kbcs.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 = $(GENERATED_SOURCES) $(GENERATED_HEADERS) $(PROCESSED_SCRIPTS) $(OFILES) $(LD_PROG) mkscript

all: Makefile $(PROCESSED_SCRIPTS) $(LD_PROG)

$(PROCESSED_SCRIPTS): mkscript $(SCRIPTS)

ldgram.c:ldgram.y
	$(BISON) $(BISONFLAGS) -d $(VPATH)/ldgram.y -o ldgram.c

ldlex.c:ldlex.l
	lex -t $(VPATH)/ldlex.l >ldlex.c



#$(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) -o mkscript $(srcdir)/mkscript.c

ldgld.o: $(PROCESSED_SCRIPTS) ldgld.c 

ldlex.c: ldlex.l ldgram.h
ldlex.o: ldlex.c ldgram.h
ldgram.o: ldgram.c
ldgram.c:ldgram.y

ldgld68k.x :ldgld68k.script 
ldgld68kUr.x :ldgld68kUr.script 
ldgld68kr.x :ldgld68kr.script 
ldgld.x :ldgld.script 
ldgldUr.x :ldgldUr.script 
ldgldr.x :ldgldr.script 
ldlnk960.x :ldlnk960.script 
ldlnk960r.x :ldlnk960r.script 
ldgld960.x :ldgld960.script 
ldgldm88kbcs.x :ldgldm88kbcs.script 
ldgldm88kbcsUr.x :ldgldm88kbcsUr.script 
ldgldm88kbcsr.x:ldgldm88kbcsr.script
ldgld68k.x:ldgld68k.script
ldglda29k.x :ldglda29k.script 
ldglda29kr.x :ldglda29kr.script 
ldglda29kUr.x :ldglda29kUr.script 

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 $(PROCESSED_SCRIPTS)
	- 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) $(PROCESSED_SCRIPTS) 
	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