769bad9f8a
Implement simple chain loader in loader; this update does add chain command, taking device or file as argument to load and start new boot loader. In case of BIOS, the chain will read the boot block to address 0000:7c00 and jumps on it. In case of UEFI, the chain command is to be used with efi application, typically stored in EFI System Partition. The update also does add simple menu entry, if the variable chain_disk is set. The value of the variable chain_disk is used as argument for chain loading. Relnotes: yes Differential Revision: https://reviews.freebsd.org/D5992
142 lines
3.3 KiB
Makefile
142 lines
3.3 KiB
Makefile
# $FreeBSD$
|
|
|
|
.include <src.opts.mk>
|
|
MK_SSP= no
|
|
|
|
LOADER?= loader
|
|
PROG= ${LOADER}.sym
|
|
MAN=
|
|
INTERNALPROG=
|
|
NEWVERSWHAT?= "bootstrap loader" x86
|
|
VERSION_FILE= ${.CURDIR}/../loader/version
|
|
LOADER_NET_SUPPORT?= yes
|
|
LOADER_NFS_SUPPORT?= yes
|
|
LOADER_TFTP_SUPPORT?= yes
|
|
|
|
# architecture-specific loader code
|
|
SRCS= main.c conf.c vers.c chain.c
|
|
|
|
# Put LOADER_FIREWIRE_SUPPORT=yes in /etc/make.conf for FireWire/dcons support
|
|
.if defined(LOADER_FIREWIRE_SUPPORT)
|
|
CFLAGS+= -DLOADER_FIREWIRE_SUPPORT
|
|
LIBFIREWIRE= ${.OBJDIR}/../libfirewire/libfirewire.a
|
|
.endif
|
|
|
|
# Set by zfsloader Makefile
|
|
.if defined(LOADER_ZFS_SUPPORT)
|
|
CFLAGS+= -DLOADER_ZFS_SUPPORT
|
|
LIBZFSBOOT= ${.OBJDIR}/../../zfs/libzfsboot.a
|
|
.endif
|
|
|
|
.if defined(LOADER_NET_SUPPORT)
|
|
CFLAGS+= -I${.CURDIR}/../../../../lib/libstand
|
|
.endif
|
|
|
|
.if defined(LOADER_TFTP_SUPPORT)
|
|
CFLAGS+= -DLOADER_TFTP_SUPPORT
|
|
.endif
|
|
.if defined(LOADER_NFS_SUPPORT)
|
|
CFLAGS+= -DLOADER_NFS_SUPPORT
|
|
.endif
|
|
|
|
# Include bcache code.
|
|
HAVE_BCACHE= yes
|
|
|
|
# Enable PnP and ISA-PnP code.
|
|
HAVE_PNP= yes
|
|
HAVE_ISABUS= yes
|
|
|
|
.if ${MK_FORTH} != "no"
|
|
# Enable BootForth
|
|
BOOT_FORTH= yes
|
|
CFLAGS+= -DBOOT_FORTH -I${.CURDIR}/../../ficl -I${.CURDIR}/../../ficl/i386
|
|
.if ${MACHINE_CPUARCH} == "amd64"
|
|
LIBFICL= ${.OBJDIR}/../../ficl32/libficl.a
|
|
.else
|
|
LIBFICL= ${.OBJDIR}/../../ficl/libficl.a
|
|
.endif
|
|
.endif
|
|
|
|
.if defined(LOADER_BZIP2_SUPPORT)
|
|
CFLAGS+= -DLOADER_BZIP2_SUPPORT
|
|
.endif
|
|
.if !defined(LOADER_NO_GZIP_SUPPORT)
|
|
CFLAGS+= -DLOADER_GZIP_SUPPORT
|
|
.endif
|
|
.if defined(LOADER_NANDFS_SUPPORT)
|
|
CFLAGS+= -DLOADER_NANDFS_SUPPORT
|
|
.endif
|
|
.if !defined(LOADER_NO_GELI_SUPPORT)
|
|
CFLAGS+= -DLOADER_GELI_SUPPORT
|
|
CFLAGS+= -I${.CURDIR}/../../geli
|
|
LIBGELIBOOT= ${.OBJDIR}/../../geli/libgeliboot.a
|
|
.PATH: ${.CURDIR}/../../../opencrypto
|
|
SRCS+= xform_aes_xts.c
|
|
CFLAGS+= -I${.CURDIR}/../../.. -D_STAND
|
|
.endif
|
|
|
|
# Always add MI sources
|
|
.PATH: ${.CURDIR}/../../common
|
|
.include "${.CURDIR}/../../common/Makefile.inc"
|
|
CFLAGS+= -I${.CURDIR}/../../common
|
|
CFLAGS+= -I.
|
|
|
|
CLEANFILES= ${LOADER} ${LOADER}.bin loader.help
|
|
|
|
CFLAGS+= -Wall
|
|
LDFLAGS= -static -Ttext 0x0
|
|
|
|
# i386 standalone support library
|
|
LIBI386= ${.OBJDIR}/../libi386/libi386.a
|
|
CFLAGS+= -I${.CURDIR}/..
|
|
|
|
LIBSTAND= ${.OBJDIR}/../../libstand32/libstand.a
|
|
|
|
# BTX components
|
|
CFLAGS+= -I${.CURDIR}/../btx/lib
|
|
|
|
# Debug me!
|
|
#CFLAGS+= -g
|
|
#LDFLAGS+= -g
|
|
|
|
# Pick up ../Makefile.inc early.
|
|
.include <bsd.init.mk>
|
|
|
|
${LOADER}: ${LOADER}.bin ${BTXLDR} ${BTXKERN}
|
|
btxld -v -f aout -e ${LOADER_ADDRESS} -o ${.TARGET} -l ${BTXLDR} \
|
|
-b ${BTXKERN} ${LOADER}.bin
|
|
|
|
${LOADER}.bin: ${LOADER}.sym
|
|
strip -R .comment -R .note -o ${.TARGET} ${.ALLSRC}
|
|
|
|
loader.help: help.common help.i386
|
|
cat ${.ALLSRC} | awk -f ${.CURDIR}/../../common/merge_help.awk > ${.TARGET}
|
|
|
|
FILES= ${LOADER}
|
|
# XXX INSTALLFLAGS_loader= -b
|
|
FILESMODE_${LOADER}= ${BINMODE} -b
|
|
|
|
.if !defined(LOADER_ONLY)
|
|
.PATH: ${.CURDIR}/../../forth
|
|
.include "${.CURDIR}/../../forth/Makefile.inc"
|
|
FILES+= pcibios.4th
|
|
|
|
FILES+= loader.rc menu.rc
|
|
.endif
|
|
|
|
# XXX crt0.o needs to be first for pxeboot(8) to work
|
|
OBJS= ${BTXCRT}
|
|
|
|
DPADD= ${LIBFICL} ${LIBFIREWIRE} ${LIBZFSBOOT} ${LIBI386} ${LIBGELIBOOT} ${LIBSTAND}
|
|
LDADD= ${LIBFICL} ${LIBFIREWIRE} ${LIBZFSBOOT} ${LIBI386} ${LIBGELIBOOT} ${LIBSTAND}
|
|
|
|
.include <bsd.prog.mk>
|
|
|
|
.if ${MACHINE_CPUARCH} == "amd64"
|
|
beforedepend ${OBJS}: machine
|
|
CLEANFILES+= machine
|
|
CFLAGS+= -DLOADER_PREFER_AMD64
|
|
machine: .NOMETA
|
|
ln -sf ${.CURDIR}/../../../i386/include machine
|
|
.endif
|