Index: head/share/mk/src.opts.mk =================================================================== --- head/share/mk/src.opts.mk +++ head/share/mk/src.opts.mk @@ -130,6 +130,7 @@ LIBTHR \ LLVM_COV \ LOADER_GELI \ + LOADER_LUA \ LOADER_OFW \ LOADER_UBOOT \ LOCALES \ @@ -197,7 +198,6 @@ LIBSOFT \ LOADER_FIREWIRE \ LOADER_FORCE_LE \ - LOADER_LUA \ NAND \ OFED_EXTRA \ OPENLDAP \ Index: head/stand/defs.mk =================================================================== --- head/stand/defs.mk +++ head/stand/defs.mk @@ -146,6 +146,18 @@ .endif .endif +# +# Have a sensible default +# +.if ${MK_FORTH} == "yes" +LOADER_DEFAULT_INTERP?=4th +.elif ${MK_LOADER_LUA} == "yes" +LOADER_DEFAULT_INTERP?=lua +.else +LOADER_DEFAULT_INTERP?=simp +.endif +LOADER_INTERP?=${LOADER_DEFAULT_INTERP} + # Make sure we use the machine link we're about to create CFLAGS+=-I. Index: head/stand/efi/Makefile =================================================================== --- head/stand/efi/Makefile +++ head/stand/efi/Makefile @@ -9,7 +9,10 @@ .if ${COMPILER_TYPE} != "gcc" || ${COMPILER_VERSION} >= 40500 SUBDIR.${MK_FDT}+= fdt -SUBDIR.yes+= libefi loader boot1 +SUBDIR.yes+= libefi boot1 +SUBDIR.${MK_FORTH}+= loader_4th +SUBDIR.${MK_LOADER_LUA}+= loader_lua +SUBDIR.yes+= loader_simp .endif # ${COMPILER_TYPE} != "gcc" || ${COMPILER_VERSION} >= 40500 Index: head/stand/efi/loader/Makefile =================================================================== --- head/stand/efi/loader/Makefile +++ head/stand/efi/loader/Makefile @@ -8,7 +8,8 @@ .include -PROG= loader.sym +LOADER?= loader_${LOADER_INTERP} +PROG= ${LOADER}.sym INTERNALPROG= WARNS?= 3 @@ -24,6 +25,7 @@ smbios.c \ vers.c +CFLAGS+= -I${.CURDIR}/../loader .if ${MK_ZFS} != "no" CFLAGS+= -I${ZFSSRC} CFLAGS+= -DEFI_ZFS_BOOT @@ -41,10 +43,11 @@ # warnings for now. CWARNFLAGS.main.c+= -Wno-format -.PATH: ${.CURDIR}/arch/${MACHINE} -# For smbios.c +.PATH: ${.CURDIR}/../loader +.PATH: ${.CURDIR}/../loader/arch/${MACHINE} +# For smbios.c XXX need to abstract properly .PATH: ${BOOTSRC}/i386/libi386 -.include "${.CURDIR}/arch/${MACHINE}/Makefile.inc" +.include "${.CURDIR}/../loader/arch/${MACHINE}/Makefile.inc" CFLAGS+= -I${.CURDIR} CFLAGS+= -I${.CURDIR}/arch/${MACHINE} @@ -78,20 +81,21 @@ CFLAGS+= -DEFI_STAGING_SIZE=${EFI_STAGING_SIZE} .endif +NEWVERSWHAT= "EFI loader" ${MACHINE} +VERSION_FILE= ${.CURDIR}/../loader/version + # Always add MI sources .include "${BOOTSRC}/loader.mk" -FILES+= loader.efi -FILESMODE_loader.efi= ${BINMODE} +FILES+= ${LOADER}.efi +FILESMODE_${LOADER}.efi= ${BINMODE} -LDSCRIPT= ${.CURDIR}/arch/${MACHINE}/ldscript.${MACHINE} +LDSCRIPT= ${.CURDIR}/../loader/arch/${MACHINE}/ldscript.${MACHINE} LDFLAGS+= -Wl,-T${LDSCRIPT},-Bsymbolic,-znotext -shared CLEANFILES+= loader.efi -NEWVERSWHAT= "EFI loader" ${MACHINE} - -loader.efi: ${PROG} +${LOADER}.efi: ${PROG} if ${NM} ${.ALLSRC} | grep ' U '; then \ echo "Undefined symbols in ${.ALLSRC}"; \ exit 1; \ Index: head/stand/efi/loader_4th/Makefile =================================================================== --- head/stand/efi/loader_4th/Makefile +++ head/stand/efi/loader_4th/Makefile @@ -0,0 +1,6 @@ +# $FreeBSD$ + +LOADER_INTERP=4th + +.include "../loader/Makefile" + Index: head/stand/efi/loader_lua/Makefile =================================================================== --- head/stand/efi/loader_lua/Makefile +++ head/stand/efi/loader_lua/Makefile @@ -0,0 +1,6 @@ +# $FreeBSD$ + +LOADER_INTERP=lua + +.include "../loader/Makefile" + Index: head/stand/efi/loader_simp/Makefile =================================================================== --- head/stand/efi/loader_simp/Makefile +++ head/stand/efi/loader_simp/Makefile @@ -0,0 +1,6 @@ +# $FreeBSD$ + +LOADER_INTERP=simp + +.include "../loader/Makefile" + Index: head/stand/i386/Makefile =================================================================== --- head/stand/i386/Makefile +++ head/stand/i386/Makefile @@ -9,7 +9,9 @@ SUBDIR.${MK_LOADER_FIREWIRE}+= libfirewire -SUBDIR.yes+= loader +SUBDIR.${MK_FORTH}+= loader_4th +SUBDIR.${MK_LOADER_LUA}+= loader_lua +SUBDIR.yes+= loader_simp # special boot programs, 'self-extracting boot2+loader' SUBDIR.yes+= pxeldr Index: head/stand/i386/loader/Makefile =================================================================== --- head/stand/i386/loader/Makefile +++ head/stand/i386/loader/Makefile @@ -14,7 +14,7 @@ .include -LOADER?= loader +LOADER?= loader_${LOADER_INTERP} PROG= ${LOADER}.sym INTERNALPROG= NEWVERSWHAT?= "bootstrap loader" x86 @@ -64,11 +64,13 @@ ${LOADER}.bin: ${LOADER}.sym strip -R .comment -R .note -o ${.TARGET} ${.ALLSRC} -.if ${MK_ZFS} == "yes" -LINKS= ${BINDIR}/${LOADER} ${BINDIR}/zfs${LOADER} +.if ${MK_ZFS} == "yes" && ${LOADER_INTERP} == ${LOADER_DEFAULT_INTERP} +LINKS+= ${BINDIR}/${LOADER} ${BINDIR}/zfsloader .endif +.if ${LOADER_INTERP} == ${LOADER_DEFAULT_INTERP} +LINKS+= ${BINDIR}/${LOADER} ${BINDIR}/loader +.endif FILES+= ${LOADER} -# XXX INSTALLFLAGS_loader= -b FILESMODE_${LOADER}= ${BINMODE} -b # XXX crt0.o needs to be first for pxeboot(8) to work Index: head/stand/i386/loader_4th/Makefile =================================================================== --- head/stand/i386/loader_4th/Makefile +++ head/stand/i386/loader_4th/Makefile @@ -0,0 +1,6 @@ +# $FreeBSD$ + +LOADER_INTERP=4th + +.include "../loader/Makefile" + Index: head/stand/i386/loader_lua/Makefile =================================================================== --- head/stand/i386/loader_lua/Makefile +++ head/stand/i386/loader_lua/Makefile @@ -0,0 +1,6 @@ +# $FreeBSD$ + +LOADER_INTERP=lua + +.include "../loader/Makefile" + Index: head/stand/i386/loader_simp/Makefile =================================================================== --- head/stand/i386/loader_simp/Makefile +++ head/stand/i386/loader_simp/Makefile @@ -0,0 +1,6 @@ +# $FreeBSD$ + +LOADER_INTERP=simp + +.include "../loader/Makefile" + Index: head/stand/i386/pxeldr/Makefile =================================================================== --- head/stand/i386/pxeldr/Makefile +++ head/stand/i386/pxeldr/Makefile @@ -24,7 +24,8 @@ CFLAGS+=-I${BOOTSRC}/i386/common -LOADERBIN= ${BOOTOBJ}/i386/loader/loader.bin +L=${LOADER_DEFAULT_INTERP} +LOADERBIN= ${BOOTOBJ}/i386/loader_${L}/loader_${L}.bin CLEANFILES+= ${BOOT}.tmp Index: head/stand/loader.mk =================================================================== --- head/stand/loader.mk +++ head/stand/loader.mk @@ -57,19 +57,20 @@ SRCS+= pnp.c .endif -# Forth interpreter -.if ${MK_LOADER_LUA} != "no" +.if ${LOADER_INTERP} == "lua" SRCS+= interp_lua.c .include "${BOOTSRC}/lua.mk" LDR_INTERP= ${LIBLUA} LDR_INTERP32= ${LIBLUA32} -.elif ${MK_FORTH} != "no" +.elif ${LOADER_INTERP} == "4th" SRCS+= interp_forth.c .include "${BOOTSRC}/ficl.mk" LDR_INTERP= ${LIBFICL} LDR_INTERP32= ${LIBFICL32} -.else +.elif ${LOADER_INTERP} == "simp" SRCS+= interp_simple.c +.else +.error Unknown interpreter ${LOADER_INTERP} .endif .if defined(BOOT_PROMPT_123)