207 lines
6.1 KiB
Makefile
207 lines
6.1 KiB
Makefile
#
|
|
# @(#)Makefile 1.1 94/10/31 SMI
|
|
#
|
|
|
|
MACH= `mach`
|
|
ARCH= `arch`
|
|
CC= /bin/cc -${ARCH}
|
|
AS= as -${MACH}
|
|
RM= rm -f
|
|
|
|
DESTDIR=
|
|
SYSDIR= ../..
|
|
LIBDIR= ../lib
|
|
MONDIR= ../mon
|
|
LIBXX= libxx.a
|
|
BBSU= ../${ARCH}/srt0xx.o
|
|
BBSU1= ../${ARCH}/srt0.o
|
|
LINTOBJ= ${LIBDIR}/llib-lsa.ln
|
|
ARCHDEST= ${LIBDIR}/${ARCH}
|
|
|
|
BOOTDEFS= "-Dprintf=(*romp->v_printf)" "-Dputchar=(*romp->v_putchar)"
|
|
CPPDEFS= -D${ARCH}
|
|
COPTS= -O -Qoption as -O
|
|
CFLAGS= ${COPTS} ${BOOTDEFS}
|
|
LDFLAGS= -N -e _start
|
|
|
|
LDIR= /usr/lib/lint
|
|
LINT1= ${LDIR}/lint1
|
|
LCOPTS= -C -Dlint ${CPPOPTS} -DLOAD=0x${LOAD}
|
|
LOPTS= -hxb -n
|
|
LTAIL= egrep -v 'struct/union .* never defined' | \
|
|
egrep -v 'possible pointer alignment problem' ; true
|
|
|
|
# BRELOC is text segment start for final stage (2nd or 3rd stage) boots
|
|
# Note that this must be higher than the kernel's edata and should be
|
|
# higher than the kernel's bss so the bss can be cleared
|
|
BRELOC= 240000
|
|
# LOAD is text segment start for booted user programs
|
|
LOAD= 4000
|
|
|
|
PROGS= bootxy bootsd installboot
|
|
SUN2BB= sun2.bb
|
|
|
|
SUN2PROGS= ${PROGS} ${SUN2BB}
|
|
SUN3PROGS= ${PROGS}
|
|
SUN4PROGS= ${PROGS}
|
|
|
|
ALL= archdep
|
|
|
|
all: ${ALL}
|
|
archdep:
|
|
@case ${ARCH} in \
|
|
sun2) ${MAKE} -e ${MFLAGS} ${SUN2PROGS};;\
|
|
sun3) ${MAKE} -e ${MFLAGS} ${SUN3PROGS};;\
|
|
sun4) ${MAKE} -e ${MFLAGS} ${SUN4PROGS};;\
|
|
esac
|
|
|
|
|
|
#
|
|
# The sun2 tftp boot block
|
|
# NOTE: The sun2/50 prom ethernet driver seems to be writing to location
|
|
# a0400 when it gets opened, so we change the relocation value to a
|
|
# slightly lower value to avoid getting our program overwritten.
|
|
#
|
|
SUN2BBRELOC= 9e000
|
|
SUN2BBSRCS= bootnd.c udp.c tftp.c
|
|
SUN2BBFILES= ${SUN2BBSRCS:.c=.o}
|
|
${SUN2BB}: ${BBSU1} ${SUN2BBFILES} ${LIBXX} sizecheck
|
|
ld ${LDFLAGS} -T ${SUN2BBRELOC} ${BBSU1} ${SUN2BBFILES} \
|
|
${ARCHDEST}/${LIBXX} -lc
|
|
sizecheck
|
|
cp a.out b.out;strip b.out;dd if=b.out of=$@ ibs=32 skip=1
|
|
|
|
# this little piece of chicanery gets the right version of bootsd made...
|
|
# the first time thru, a recursive make is done;
|
|
# the second time thru, BOOTSD is resolved to the arch-dependent filename
|
|
#
|
|
BOOTSD=FRC
|
|
bootsd: ${BOOTSD}
|
|
@if [ ${BOOTSD} = FRC ]; then \
|
|
case ${ARCH} in \
|
|
sun2) ${MAKE} -e ${MFLAGS} $@ BOOTSD=big.bootsd ;;\
|
|
sun3) ${MAKE} -e ${MFLAGS} $@ BOOTSD=bootpr ;;\
|
|
sun4) ${MAKE} -e ${MFLAGS} $@ BOOTSD=bootpr ;;\
|
|
esac \
|
|
else \
|
|
cp ${ARCHDEST}/${BOOTSD} ${ARCHDEST}/$@; \
|
|
fi
|
|
|
|
# We need to search libc.a to complete this load since the C
|
|
# compiler generates calls to ulmult.
|
|
#
|
|
bootxy: ${BBSU1} bootblk.o confxy.o ${LIBXX} sizecheck
|
|
ld ${LDFLAGS} -T ${BRELOC} -o ${ARCHDEST}/$@ ${BBSU1} ${ARCHDEST}/bootblk.o \
|
|
${ARCHDEST}/confxy.o ${ARCHDEST}/${LIBXX} -lc
|
|
sizecheck ${ARCHDEST}/$@
|
|
|
|
big.bootsd: ${BBSU1} bootblk.o confsd.o ${LIBXX} sizecheck
|
|
ld ${LDFLAGS} -T ${BRELOC} -o ${ARCHDEST}/$@ ${BBSU1} ${ARCHDEST}/bootblk.o \
|
|
${ARCHDEST}/confsd.o ${ARCHDEST}/${LIBXX} -lc
|
|
sizecheck ${ARCHDEST}/$@
|
|
|
|
bootpr: ${BBSU1} bootblk.o confpr.o ${LIBXX} sizecheck
|
|
ld ${LDFLAGS} -T ${BRELOC} -o ${ARCHDEST}/$@ ${BBSU1} ${ARCHDEST}/bootblk.o \
|
|
${ARCHDEST}/confpr.o ${ARCHDEST}/${LIBXX} -lc
|
|
sizecheck ${ARCHDEST}/$@
|
|
|
|
bootxd: ${BBSU1} bootblk.o confxd.o ${LIBXX} sizecheck
|
|
ld ${LDFLAGS} -T ${BRELOC} -o ${ARCHDEST}/$@ ${BBSU1} ${ARCHDEST}/bootblk.o \
|
|
${ARCHDEST}/confxd.o ${ARCHDEST}/${LIBXX} -lc
|
|
sizecheck ${ARCHDEST}/$@
|
|
|
|
# FRC ensures we just do it once.
|
|
bootblk.o: FRC
|
|
${MAKE} ARCH=${ARCH} ${ARCHDEST}/bootblk.o
|
|
|
|
${ARCHDEST}/bootblk.o: ../boot/bootblk.c
|
|
${CC} -c ${CFLAGS} -DLOAD=0x${LOAD} -D${ARCH} -DBRELOC=0x${BRELOC} -o ${ARCHDEST}/bootblk.o ../boot/bootblk.c
|
|
installboot: ../boot/installboot.c
|
|
${CC} ${COPTS} -o ${ARCHDEST}/installboot ../boot/installboot.c
|
|
|
|
# FRC ensures we just do it once.
|
|
confxy.o: FRC
|
|
${MAKE} ARCH=${ARCH} ${ARCHDEST}/confxy.o
|
|
|
|
${ARCHDEST}/confxy.o: ../boot/confxx.c
|
|
cd ../boot; $(MAKE) $(MFLAGS) confxy.o
|
|
|
|
# FRC ensures we just do it once.
|
|
confxd.o: FRC
|
|
${MAKE} ARCH=${ARCH} ${ARCHDEST}/confxd.o
|
|
|
|
${ARCHDEST}/confxd.o: ../boot/confxx.c
|
|
cd ../boot; $(MAKE) $(MFLAGS) confxd.o
|
|
|
|
# FRC ensures we just do it once.
|
|
confsd.o: FRC
|
|
${MAKE} ARCH=${ARCH} ${ARCHDEST}/confsd.o
|
|
|
|
${ARCHDEST}/confsd.o: ../boot/confxx.c
|
|
cd ../boot; $(MAKE) $(MFLAGS) confsd.o
|
|
|
|
# FRC ensures we just do it once.
|
|
confpr.o: FRC
|
|
${MAKE} ARCH=${ARCH} ${ARCHDEST}/confpr.o
|
|
|
|
${ARCHDEST}/confpr.o: ../boot/confpr.c
|
|
cd ../boot; $(MAKE) $(MFLAGS) confpr.o
|
|
|
|
# FRC ensures we just do it once.
|
|
# This version gets built to include the block list used by installboot.
|
|
${BBSU}: FRC
|
|
cd ../${ARCH}; ${MAKE} -e $(@F)
|
|
|
|
# This version gets built without the block list used by installboot.
|
|
${BBSU1}: FRC
|
|
cd ../${ARCH}; ${MAKE} -e $(@F)
|
|
|
|
${LIBXX}: FRC
|
|
cd ../lib; $(MAKE) ARCH=${ARCH} ${LIBXX}
|
|
|
|
sizecheck: ../bootblk/sizecheck.sh
|
|
cp ../bootblk/sizecheck.sh sizecheck
|
|
chmod a+xw sizecheck
|
|
|
|
rawboot:
|
|
cd ../boot; $(MAKE) boot
|
|
cp ../boot/boot .; strip boot
|
|
dd if=boot of=rawboot bs=64 skip=1;
|
|
clean:
|
|
${RM} ${LIBDIR}/sun2/bootxy ${LIBDIR}/sun2/bootsd ${LIBDIR}/sun2/installboot ${LIBDIR}/sun2/rawboot
|
|
${RM} ${LIBDIR}/sun2/*.o ${LIBDIR}/sun2/core ${LIBDIR}/sun2/a.out
|
|
${RM} ${LIBDIR}/sun3/bootxy ${LIBDIR}/sun3/bootsd ${LIBDIR}/sun3/installboot ${LIBDIR}/sun3/rawboot
|
|
${RM} ${LIBDIR}/sun3/*.o ${LIBDIR}/sun3/core ${LIBDIR}/sun3/a.out
|
|
${RM} ${LIBDIR}/sun4/bootxy ${LIBDIR}/sun4/bootsd ${LIBDIR}/sun4/installboot ${LIBDIR}/sun4/rawboot
|
|
${RM} ${LIBDIR}/sun4/*.o ${LIBDIR}/sun4/core ${LIBDIR}/sun4/a.out
|
|
|
|
${LINTOBJ}:
|
|
cd ${LIBDIR}; ${MAKE} -e ${MFLAGS} lint
|
|
|
|
lint: ${LINTOBJ} boot.c readfile.c
|
|
@${RM} lint.ln
|
|
@-(for i in readfile.c ; do \
|
|
${CC} -E ${LCOPTS} $$i | \
|
|
${LINT1} ${LOPTS} >> lint.ln; done ) 2>&1 | ${LTAIL}
|
|
lint -Dlint ${CPPOPTS} ${LOPTS} boot.c lint.ln ${LINTOBJ} | ${LTAIL}
|
|
@${RM} lint.ln
|
|
|
|
depend:
|
|
install_h:
|
|
FRC:
|
|
|
|
install: ${ALL}
|
|
-mkdir ${DESTDIR}/tftpboot && \
|
|
chown bin ${DESTDIR}/tftpboot && \
|
|
chmod 755 ${DESTDIR}/tftpboot
|
|
if [ ${ARCH} = sun2 ]; then \
|
|
install ${SUN2BB} ${DESTDIR}/tftpboot; \
|
|
fi
|
|
-mkdir ${DESTDIR}/usr/mdec && \
|
|
chown bin ${DESTDIR}/usr/mdec && \
|
|
chmod 755 ${DESTDIR}/usr/mdec
|
|
install -c ${ARCHDEST}/bootxy ${DESTDIR}/usr/mdec/bootxy
|
|
install -c ${ARCHDEST}/bootsd ${DESTDIR}/usr/mdec/bootsd
|
|
install -c ${ARCHDEST}/bootsd ${DESTDIR}/usr/mdec/rawboot
|
|
install -c -m 755 ${ARCHDEST}/installboot ${DESTDIR}/usr/mdec/installboot
|