binutils-gdb/ld/makefile.dos
Steve Chamberlain f9ea3c982e Initial revision
1991-12-12 03:42:06 +00:00

528 lines
16 KiB
Plaintext
Executable File
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Makefile for the GNU linker ld (version 2)
# Copyright (C) 1989-1991 Free Software Foundation, Inc.
# This file is part of GNU ld..
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#
# $Id$
#
srcdir = .
ddestdir = /usr/local
#version=/`$(unsubdir)/../gcc$(subdir)/gcc -dumpversion`
version=
bindir = $(ddestdir)/bin
gcclibdir = $(ddestdir)/lib/gcc/$(target_alias)$(version)
# Seach path to override the default search path for -lfoo libraries.
# If LIB_PATH is empty, the ones in the script (if any) are left alone.
# Otherwise, they are replaced with the ones given in LIB_PATH,
# which may have the form: LIB_PATH=/lib:/usr/local/lib
LIB_PATH =
INSTALL = install -c
INSTALL_PROGRAM = $(INSTALL)
INSTALL_FILE = $(INSTALL)
BASEDIR = ../..
INCLUDE = $(srcdir)/../include
INCLUDES = -I. -I$(srcdir) -I$(INCLUDE)
MINUS_G = -g
# Where to find texinfo.tex to format docn with TeX
TEXIDIR = $(srcdir)/../texinfo/fsf
# Whether to get roff to put indexing entries on stderr
TEXI2OPT =
# You neeed this to generate ld-index.ms (or .mm or .me)
# TEXI2OPT = -i
MAKEINFO=makeinfo
TEXI2ROFF=texi2roff
# Which roff program to use to generate index for texi2roff'd doc
ROFF = groff
BISON = bison
BISONFLAGS = -v
SCRIPTS = ldgld68k.sc ldgld.sc \
ldlnk960.sc ldlnk960r.sc ldgld960.sc \
i386aout.sc ldm88k.sc ldglda29k.sc news.sc h8300hds.sc ebmon29k.sc
#### target and host dependent Makefile fragments come in here.
HDEFINES=-O -D__MSDOS__ -D__GO32__
TDEFINES=
CDEFINES=
###
CFLAGS = $(INCLUDES) $(MINUS_G) $(HDEFINES) $(TDEFINES) $(CDEFINES)
LINTFLAGS = $(INCLUDES) $(EXTRA_DEF)
.SUFFIXES: .y .x .xr .xu .xn .xN .sc .scu .scr .scn
# 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 .scn script is for linking with -N flag (mix text and data on same page).
# A .scN script is for linking with -N flag (mix text and data on same page).
# The diference is that segments should (need) not be page aligned.
# A sed pattern to translate .sc to .scu:
SED_MAKE_RELOC_WITH_CONSTRUCTORS=\
-e "/If relocating/,/End if relocating/d" \
-e "/=/s/[_a-zA-Z.]* *= .*//g" \
-e '/>/s/} *> *[a-zA-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 builtin script file is included as a C string literal.
# These are generated by the mkscript filter.
.sc.x:
if [ "x"$(LIB_PATH) = "x" ]; then ./mkscript < $< >$*.x ; \
else \
(sed <$< -e '/SEARCH_DIR(.*)/d' ; \
echo $(LIB_PATH) | tr ':' ' ' | sed -e 's/\([^ ][^ ]*\)/SEARCH_DIR(\1);/g';) | ./mkscript >$*.x;\
fi
# The .xn script is used if the -n flag is given (write-protect text)..
# Sunos starts the text segment for demand-paged binaries at 0x2020
# and other binaries at 0x2000, since the exec header is paged in
# with the text. Some other Unix variants do the same.
# For -n and -N flags the offset of the exec header must be removed.
# This sed script does this if the master script contains
# a line of the form ".text 0xAAAA BLOCK(0xBBBB):" - the
# output will contain ".text 0xBBBB:". (For Sunos AAAA=2020 and BBBB=2000.)
.x.xn:
sed -e '/text/s/\.text .* BLOCK(\([^)]*\)):/.text \1:/' < $< >$*.xn
# The .xN script is used if the -N flag is given (don't write-protect text).
# This is like -n, except that the data segment need not be page-aligned.
# So get rid of commands for page-alignment: We assume these use ALIGN
# with a hex constant that end with 00, since any normal page size is be
# at least divisible by 256. We use the 00 to avoid matching
# anything that tries to align of (say) 8-byte boundaries.
.xn.xN:
sed -e '/ALIGN/s/ALIGN( *0x[0-9a-fA-F]*00 *)/./' < $< >$*.xN
# The xu and xr scripts don't search libraries, so LIB_PATH doesn't matter.
.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
BFDLIB=../bfd/libbfd.a
LIBIBERTY=../libiberty/libiberty.a
OFILES= ldgram.o ldlex.o ldlang.o ldctor.o ldmain.o ldindr.o \
ldwarn.o ldwrite.o ldexp.o ldlnk960.o ld__gld68k.o ld__i386aout.o \
ld__m88k.o ld__glda29k.o ld__news.o h8300hds.o ld__ebmon29k.o \
ld__gld.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 ldctor.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 ldctor.c ldindr.c ldmain.c ldwrite.c ldwarn.c ldlnk960.c \
ld__gld.c ld__gld68k.c ld__m88k.c ld__ebmon29k.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 ld__*.c
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: $(LD_PROG)
all-info: ld.info
ldgram.h ldgram.c: ldgram.y
$(BISON) $(BISONFLAGS) -d ldgram.y
mv -f y.tab.c ldgram.c
mv -f y.tab.h ldgram.h
ldlex.c: ldlex.l
lex -t ldlex.l >ldlex.c
# These all start with ld__ so 'make clean' can find them.
ld__gld.c: $(srcdir)/ldtemplate
sed -e s/"<ldtarget>"/ldgld/g -e s/"<arch>"/m68k/g \
-e s/"<target>"//g -e s/"<TARGET>"//g <$(srcdir)/ldtemplate >$@
ld__news.c: $(srcdir)/ldtemplate
sed -e s/"<ldtarget>"/news/g -e s/"<arch>"/m68k/g \
-e s/"<target>"/news/g -e s/"<TARGET>"/NEWS/g <$(srcdir)/ldtemplate >$@
ld__i386aout.c: $(srcdir)/ldtemplate
sed -e s/"<ldtarget>"/i386aout/g -e s/"<arch>"/i386/g \
-e s/"<target>"/i386aout/g -e s/"<TARGET>"/I386AOUT/g <$(srcdir)/ldtemplate >$@
ld__ebmon29k.c: $(srcdir)/ldtemplate
sed -e s/"<ldtarget>"/ebmon29k/g -e s/"<arch>"/a29k/g \
-e s/"gld<target>"/ebmon29k/g -e s/"GLD<TARGET>"/EBMON29K/g \
-e s/"<ldtarget>.x"/ebmon.x/ <$(srcdir)/ldtemplate >$@
ld__gld68k.c: $(srcdir)/ldtemplate
sed -e s/"<ldtarget>"/ldgld68k/g -e s/"<arch>"/m68k/g \
-e s/"<target>"/68k/g -e s/"<TARGET>"/68K/g <$(srcdir)/ldtemplate >$@
ld__glda29k.c: $(srcdir)/ldtemplate
sed -e s/"<ldtarget>"/ldglda29k/g -e s/"<arch>"/a29k/g \
-e s/"<target>"/29k/g -e s/"<TARGET>"/29K/g <$(srcdir)/ldtemplate >$@
ld__m88k.c: $(srcdir)/ldtemplate
sed -e s/"<ldtarget>"/ldm88k/g -e s/"<arch>"/m88k/g \
-e s/"<target>"/m88kbcs/g -e s/"<TARGET>"/M88KBCS/g <$(srcdir)/ldtemplate >$@
# The .c files for these are generated from ldtemplete.
ld__gld.o: ./mkscript ldgld.x ldgld.xr ldgld.xu ldgld.xn ldgld.xN
ld__news.o: ./mkscript news.x news.xr news.xu news.xn news.xN
ld__i386aout.o: ./mkscript i386aout.x i386aout.xr i386aout.xu i386aout.xn i386aout.xN
ld__ebmon29k.o: ./mkscript ebmon29k.x ebmon29k.xr ebmon29k.xu \
ebmon29k.xn ebmon29k.xN
ld__gld68k.o: ./mkscript ldgld68k.x ldgld68k.xr ldgld68k.xu \
ldgld68k.xn ldgld68k.xN
ld__glda29k.o: ./mkscript ldglda29k.x ldglda29k.xr ldglda29k.xu \
ldglda29k.xn ldglda29k.xN
ld__m88k.o: ./mkscript ldm88k.x ldm88k.xr ldm88k.xu ldm88k.xn ldm88k.xN
# The .c files for these are (for now) specially written (not ldtemplete).
ldgld960.o: ./mkscript ldgld960.x
ldlnk960.o: ./mkscript ldlnk960.x ldlnk960.xr
h8300hds.o: ./mkscript h8300hds.x
#$(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)
######################################################################
# DOCUMENTATION TARGETS
# TeX output
ld.dvi: $(srcdir)/ld.texinfo
TEXINPUTS=${TEXIDIR}:.:$$TEXINPUTS tex $(srcdir)/ld.texinfo
texindex ld.??
TEXINPUTS=${TEXIDIR}:.:$$TEXINPUTS tex $(srcdir)/ld.texinfo
# info file for online browsing
ld.info: $(srcdir)/ld.texinfo
$(MAKEINFO) -o ld.info $(srcdir)/ld.texinfo
#separate targets for "ms", "me", and "mm" forms of roff doc
# Try to use a recent texi2roff. v2 was put on prep in jan91.
# If you want an index, see texi2roff doc for postprocessing
# and add -i to texi2roff invocations below.
# Workarounds for texi2roff-2 (probably fixed in later texi2roff's, delete
# correspondint -e lines when later texi2roff's are current)
# + @ifinfo's deleted explicitly due to texi2roff-2 bug w nested constructs.
# + @c's deleted explicitly because texi2roff sees texinfo commands in them
# + @ (that's at-BLANK) not recognized by texi2roff, turned into blank
# + @alphaenumerate is ridiculously new, turned into @enumerate
ld.ms: $(srcdir)/ld.texinfo
sed -e '/\\input texinfo/d' \
-e '/@c TEXI2ROFF-KILL/,/@c END TEXI2ROFF-KILL/d' \
-e '/^@ifinfo/,/^@end ifinfo/d' \
-e '/^@c/d' \
-e 's/{.*,,/{/' \
-e 's/@ / /g' \
-e 's/^@alphaenumerate/@enumerate/g' \
-e 's/^@end alphaenumerate/@end enumerate/g' \
$(srcdir)/ld.texinfo | \
$(TEXI2ROFF) $(TEXI2OPT) -ms | \
sed -e 's/---/\\(em/g' \
>>ld.ms
# index for roff output
ld-index.ms: ld.ms
$(ROFF) -ms ld.ms 2>&1 1>/dev/null | \
sed -e '/: warning:/d' | \
texi2index >ld-index.ms
# roff output (-mm)
ld.mm: $(srcdir)/ld.texinfo
sed -e '/\\input texinfo/d' \
-e '/@c TEXI2ROFF-KILL/,/@c END TEXI2ROFF-KILL/d' \
-e '/^@ifinfo/,/^@end ifinfo/d' \
-e '/^@c/d' \
-e 's/{.*,,/{/' \
-e '/@noindent/d' \
-e 's/@ / /g' \
-e 's/^@alphaenumerate/@enumerate/g' \
-e 's/^@end alphaenumerate/@end enumerate/g' \
$(srcdir)/ld.texinfo | \
$(TEXI2ROFF) $(TEXI2OPT) -mm | \
sed -e 's/---/\\(em/g' \
>ld.mm
# index for roff output
ld-index.mm: ld.mm
$(ROFF) -mm ld.mm 2>&1 1>/dev/null | \
sed -e '/: warning:/d' | \
texi2index >ld-index.mm
# roff output (-me)
ld.me: $(srcdir)/ld.texinfo
sed -e '/\\input texinfo/d' \
-e '/@c TEXI2ROFF-KILL/,/@c END TEXI2ROFF-KILL/d' \
-e '/^@ifinfo/,/^@end ifinfo/d' \
-e '/^@c/d' \
-e 's/{.*,,/{/' \
-e 's/@ / /g' \
-e 's/^@alphaenumerate/@enumerate/g' \
-e 's/^@end alphaenumerate/@end enumerate/g' \
$(srcdir)/ld.texinfo | \
$(TEXI2ROFF) $(TEXI2OPT) -me | \
sed -e 's/---/\\(em/g' \
>>ld.me
# index for roff output
ld-index.me: ld.me
$(ROFF) -me ld.me 2>&1 1>/dev/null | \
sed -e '/: warning:/d' | \
texi2index >ld-index.me
######################################################################
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
h8300hds.x: h8300hds.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
ldm88k.x: ldm88k.sc
news.x: news.sc
i386aout.x: i386aout.sc
h8300hds.x: h8300hds.sc
h8300hds.o: h8300hds.c
ldgld68k.x: ldgld68k.sc
ldglda29k.x : ldglda29k.sc
ldglda29kr.x : ldglda29kr.sc
ldglda29kUr.x : ldglda29kUr.sc
ebmon29k.x : ebmon29k.sc
ebmon29kr.x : ebmon29kr.sc
ebmon29kUr.x : ebmon29kUr.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[runN] *.sc[runN]
- rm -f ld.?? ld.???
- 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 $?
objdump: objdump.c
install: $(LD_PROG)
$(INSTALL_PROGRAM) ld.new $(ddestdir)/bin/ld
$(INSTALL_PROGRAM) ld.new $(gcclibdir)/ld
install-info: all-info
for i in ld.info* ; do \
echo Installing $$i... ; \
(cp $$i $(idestdir)/info/$$i.new \
&& mv -f $(idestdir)/info/$$i.new $(idestdir)/info/$$i) \
|| exit 1 ; \
done
# Something like the following might make sense for install, but doesn't work
# - it is too fragile, depending on a gcc binary int the right place.
# Perhaps using gcc/version.c might work?
# # If $(gcclibdir) exists, install ld there, and put a link to it
# # from $(bindir); otherwise put ld in $(bindir).
# if ([ -x $(unsubdir)/../gcc$(subdir)/gcc -a -d $(gcclibdir) ]); then \
# $(INSTALL_PROGRAM) ld.new $(gcclibdir)/ld; \
# cd $(bindir); rm -f ld; ln -s $(gcclibdir)/ld ld; \
# else \
# $(INSTALL_PROGRAM) ld.new $(bindir)/ld; \
# fi
#-----------------------------------------------------------------------------
# '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 $(host_makefile_frag) $(target_makefile_frag)
$(SHELL) ./config.status
### Local Variables: ***
### mode:fundamental ***
### page-delimiter: "^# " ***
### End: ***
### end of file
# IF YOU PUT ANYTHING HERE IT WILL GO AWAY