199767f8919635c4928607450d9e0abb932109ceToomas Soome#
199767f8919635c4928607450d9e0abb932109ceToomas Soome# This file and its contents are supplied under the terms of the
199767f8919635c4928607450d9e0abb932109ceToomas Soome# Common Development and Distribution License ("CDDL"), version 1.0.
199767f8919635c4928607450d9e0abb932109ceToomas Soome# You may only use this file in accordance with the terms of version
199767f8919635c4928607450d9e0abb932109ceToomas Soome# 1.0 of the CDDL.
199767f8919635c4928607450d9e0abb932109ceToomas Soome#
199767f8919635c4928607450d9e0abb932109ceToomas Soome# A full copy of the text of the CDDL should have accompanied this
199767f8919635c4928607450d9e0abb932109ceToomas Soome# source. A copy of the CDDL is also available via the Internet at
199767f8919635c4928607450d9e0abb932109ceToomas Soome# http://www.illumos.org/license/CDDL.
199767f8919635c4928607450d9e0abb932109ceToomas Soome#
199767f8919635c4928607450d9e0abb932109ceToomas Soome
199767f8919635c4928607450d9e0abb932109ceToomas Soome#
199767f8919635c4928607450d9e0abb932109ceToomas Soome# Copyright 2015 Toomas Soome <tsoome@me.com>
e547e4e8adbc4f31e3fac2e9d89d20e99911227cAndrew Stormont# Copyright 2016 RackTop Systems.
199767f8919635c4928607450d9e0abb932109ceToomas Soome#
199767f8919635c4928607450d9e0abb932109ceToomas Soome
199767f8919635c4928607450d9e0abb932109ceToomas Soomeinclude $(SRC)/Makefile.master
199767f8919635c4928607450d9e0abb932109ceToomas Soome
199767f8919635c4928607450d9e0abb932109ceToomas SoomeCFLAGS= -O2
199767f8919635c4928607450d9e0abb932109ceToomas SoomeCPPFLAGS= -DSTAND -nostdinc -I../../../../include -I../../..
199767f8919635c4928607450d9e0abb932109ceToomas SoomeLOADER= zfsloader
199767f8919635c4928607450d9e0abb932109ceToomas SoomeNEWVERSWHAT= "ZFS enabled bootstrap loader" x86
199767f8919635c4928607450d9e0abb932109ceToomas SoomeMAN=
199767f8919635c4928607450d9e0abb932109ceToomas Soome
199767f8919635c4928607450d9e0abb932109ceToomas Soome# Set by zfsloader Makefile
199767f8919635c4928607450d9e0abb932109ceToomas SoomeCPPFLAGS += -DLOADER_ZFS_SUPPORT -I../../zfs
199767f8919635c4928607450d9e0abb932109ceToomas SoomeCPPFLAGS += -I../libi386
199767f8919635c4928607450d9e0abb932109ceToomas SoomeLIBZFSBOOT= ../../zfs/i386/libzfsboot.a
199767f8919635c4928607450d9e0abb932109ceToomas SoomeLIBI386= ../libi386/libi386.a
199767f8919635c4928607450d9e0abb932109ceToomas Soome
199767f8919635c4928607450d9e0abb932109ceToomas Soome# loader.help build needs better awk
199767f8919635c4928607450d9e0abb932109ceToomas SoomeAWK= /usr/xpg4/bin/awk
199767f8919635c4928607450d9e0abb932109ceToomas SoomeLD= $(GNU_ROOT)/bin/gld
199767f8919635c4928607450d9e0abb932109ceToomas SoomeCC= $(GCC_ROOT)/bin/gcc
199767f8919635c4928607450d9e0abb932109ceToomas SoomeOBJCOPY= $(GNU_ROOT)/bin/gobjcopy
199767f8919635c4928607450d9e0abb932109ceToomas SoomeGSTRIP= $(GNU_ROOT)/bin/gstrip
199767f8919635c4928607450d9e0abb932109ceToomas SoomeROOT_BOOT= $(ROOT)/boot
199767f8919635c4928607450d9e0abb932109ceToomas SoomeROOT_BOOT_DEFAULTS= $(ROOT)/boot/defaults
199767f8919635c4928607450d9e0abb932109ceToomas SoomeROOT_BOOT_FORTH= $(ROOT)/boot/forth
199767f8919635c4928607450d9e0abb932109ceToomas SoomeROOT_BOOT_CONF= $(ROOT)/boot/conf.d
199767f8919635c4928607450d9e0abb932109ceToomas SoomeROOTBOOTFILES=$(FILES:%=$(ROOT_BOOT)/%)
199767f8919635c4928607450d9e0abb932109ceToomas SoomeROOTBOOTFORTH=$(FORTH:%=$(ROOT_BOOT_FORTH)/%)
199767f8919635c4928607450d9e0abb932109ceToomas SoomeROOTBOOTDEFAULTS=$(DEFFILES:%=$(ROOT_BOOT_DEFAULTS)/%)
199767f8919635c4928607450d9e0abb932109ceToomas SoomeFILEMODE=0444
199767f8919635c4928607450d9e0abb932109ceToomas Soome
e547e4e8adbc4f31e3fac2e9d89d20e99911227cAndrew Stormontall: ${LOADER} loader.help
199767f8919635c4928607450d9e0abb932109ceToomas Soome
199767f8919635c4928607450d9e0abb932109ceToomas Soomeinstall: all $(ROOTBOOTLOADER)
199767f8919635c4928607450d9e0abb932109ceToomas Soome
199767f8919635c4928607450d9e0abb932109ceToomas SoomePROG= ${LOADER}.sym
199767f8919635c4928607450d9e0abb932109ceToomas SoomeINTERNALPROG=
199767f8919635c4928607450d9e0abb932109ceToomas Soome
199767f8919635c4928607450d9e0abb932109ceToomas Soome# architecture-specific loader code
199767f8919635c4928607450d9e0abb932109ceToomas SoomeSRCS= main.c conf.c vers.c chain.c
199767f8919635c4928607450d9e0abb932109ceToomas Soome
199767f8919635c4928607450d9e0abb932109ceToomas SoomeCPPFLAGS += -DLOADER_TFTP_SUPPORT -DLOADER_GZIP_SUPPORT
199767f8919635c4928607450d9e0abb932109ceToomas Soome
199767f8919635c4928607450d9e0abb932109ceToomas Soome# Enable BootForth
199767f8919635c4928607450d9e0abb932109ceToomas SoomeCPPFLAGS += -DBOOT_FORTH -I$(SRC)/common/ficl -I../../ficl
199767f8919635c4928607450d9e0abb932109ceToomas SoomeLIBFICL= ../../ficl/i386/libficl.a
199767f8919635c4928607450d9e0abb932109ceToomas Soome
199767f8919635c4928607450d9e0abb932109ceToomas Soome# Always add MI sources
199767f8919635c4928607450d9e0abb932109ceToomas SoomeSRCS += boot.c commands.c console.c devopen.c interp.c
199767f8919635c4928607450d9e0abb932109ceToomas SoomeSRCS += interp_backslash.c interp_parse.c ls.c misc.c
199767f8919635c4928607450d9e0abb932109ceToomas SoomeSRCS += module.c panic.c linenoise.c
199767f8919635c4928607450d9e0abb932109ceToomas Soome
199767f8919635c4928607450d9e0abb932109ceToomas SoomeSRCS += load_elf32.c load_elf32_obj.c reloc_elf32.c
199767f8919635c4928607450d9e0abb932109ceToomas SoomeSRCS += load_elf64.c load_elf64_obj.c reloc_elf64.c
199767f8919635c4928607450d9e0abb932109ceToomas Soome
199767f8919635c4928607450d9e0abb932109ceToomas SoomeSRCS += dev_net.c
199767f8919635c4928607450d9e0abb932109ceToomas Soome
199767f8919635c4928607450d9e0abb932109ceToomas SoomeSRCS += disk.c part.c
199767f8919635c4928607450d9e0abb932109ceToomas SoomeCPPFLAGS += -DLOADER_DISK_SUPPORT
199767f8919635c4928607450d9e0abb932109ceToomas SoomeSRCS += crc32.c
199767f8919635c4928607450d9e0abb932109ceToomas SoomeCPPFLAGS += -DLOADER_GPT_SUPPORT
199767f8919635c4928607450d9e0abb932109ceToomas SoomeCPPFLAGS += -DLOADER_MBR_SUPPORT
199767f8919635c4928607450d9e0abb932109ceToomas Soome
199767f8919635c4928607450d9e0abb932109ceToomas SoomeSRCS += bcache.c
199767f8919635c4928607450d9e0abb932109ceToomas Soome
199767f8919635c4928607450d9e0abb932109ceToomas SoomeSRCS += isapnp.c
199767f8919635c4928607450d9e0abb932109ceToomas SoomeSRCS += pnp.c
199767f8919635c4928607450d9e0abb932109ceToomas Soome
199767f8919635c4928607450d9e0abb932109ceToomas Soome# Forth interpreter
199767f8919635c4928607450d9e0abb932109ceToomas SoomeSRCS += interp_forth.c
199767f8919635c4928607450d9e0abb932109ceToomas Soome
199767f8919635c4928607450d9e0abb932109ceToomas SoomeMAN += loader.8
199767f8919635c4928607450d9e0abb932109ceToomas SoomeMAN += zfsloader.8
199767f8919635c4928607450d9e0abb932109ceToomas SoomeCPPFLAGS += -I../../common
199767f8919635c4928607450d9e0abb932109ceToomas SoomeCPPFLAGS += -I.
199767f8919635c4928607450d9e0abb932109ceToomas Soome
199767f8919635c4928607450d9e0abb932109ceToomas SoomeCLEANFILES= vers.c ${LOADER} ${LOADER}.sym ${LOADER}.bin loader.help
199767f8919635c4928607450d9e0abb932109ceToomas Soome
199767f8919635c4928607450d9e0abb932109ceToomas SoomeCFLAGS += -Wall
199767f8919635c4928607450d9e0abb932109ceToomas SoomeLDFLAGS= -static -Ttext 0x0
199767f8919635c4928607450d9e0abb932109ceToomas Soome
199767f8919635c4928607450d9e0abb932109ceToomas Soome# i386 standalone support library
199767f8919635c4928607450d9e0abb932109ceToomas SoomeCPPFLAGS += -I.. -I../../../../lib/libstand
199767f8919635c4928607450d9e0abb932109ceToomas SoomeLIBSTAND= ../../libstand/i386/libstand.a
199767f8919635c4928607450d9e0abb932109ceToomas Soome
199767f8919635c4928607450d9e0abb932109ceToomas Soome# BTX components
199767f8919635c4928607450d9e0abb932109ceToomas SoomeCPPFLAGS += -I../btx/lib
199767f8919635c4928607450d9e0abb932109ceToomas Soome
199767f8919635c4928607450d9e0abb932109ceToomas Soome# Debug me!
199767f8919635c4928607450d9e0abb932109ceToomas Soome#CFLAGS+= -g
199767f8919635c4928607450d9e0abb932109ceToomas Soome#LDFLAGS+= -g
199767f8919635c4928607450d9e0abb932109ceToomas Soome
199767f8919635c4928607450d9e0abb932109ceToomas Soomeinclude ../Makefile.inc
199767f8919635c4928607450d9e0abb932109ceToomas Soome
199767f8919635c4928607450d9e0abb932109ceToomas Soomevers.c: ../../common/newvers.sh version
199767f8919635c4928607450d9e0abb932109ceToomas Soome $(SH) ../../common/newvers.sh version ${NEWVERSWHAT}
199767f8919635c4928607450d9e0abb932109ceToomas Soome
199767f8919635c4928607450d9e0abb932109ceToomas Soome${LOADER}: ${LOADER}.bin ${BTXLDR} ${BTXKERN}
199767f8919635c4928607450d9e0abb932109ceToomas Soome $(BTXLD) -v -f aout -e ${LOADER_ADDRESS} -o $@ -l ${BTXLDR} \
199767f8919635c4928607450d9e0abb932109ceToomas Soome -b ${BTXKERN} ${LOADER}.bin
199767f8919635c4928607450d9e0abb932109ceToomas Soome
199767f8919635c4928607450d9e0abb932109ceToomas Soome${LOADER}.bin: ${LOADER}.sym
199767f8919635c4928607450d9e0abb932109ceToomas Soome $(CP) $^ $@
199767f8919635c4928607450d9e0abb932109ceToomas Soome $(GSTRIP) -R .comment -R .note $@
199767f8919635c4928607450d9e0abb932109ceToomas Soome
199767f8919635c4928607450d9e0abb932109ceToomas Soomeloader.help: ../../common/help.common help.i386
199767f8919635c4928607450d9e0abb932109ceToomas Soome $(CAT) $^ | $(AWK) -f ../../common/merge_help.awk > $@
199767f8919635c4928607450d9e0abb932109ceToomas Soome
199767f8919635c4928607450d9e0abb932109ceToomas SoomeFILES= ${LOADER} loader.help
199767f8919635c4928607450d9e0abb932109ceToomas Soome
199767f8919635c4928607450d9e0abb932109ceToomas Soomeinclude ../../forth/Makefile.inc
199767f8919635c4928607450d9e0abb932109ceToomas SoomeFORTH += pcibios.4th
199767f8919635c4928607450d9e0abb932109ceToomas Soome
199767f8919635c4928607450d9e0abb932109ceToomas SoomeFILES += loader.rc
199767f8919635c4928607450d9e0abb932109ceToomas SoomeFORTH += menu.rc
199767f8919635c4928607450d9e0abb932109ceToomas Soome
199767f8919635c4928607450d9e0abb932109ceToomas Soome# XXX crt0.o needs to be first for pxeboot(8) to work
199767f8919635c4928607450d9e0abb932109ceToomas Soome
199767f8919635c4928607450d9e0abb932109ceToomas SoomeDPADD= ${LIBFICL} ${LIBZFSBOOT} ${LIBI386} ${LIBSTAND}
199767f8919635c4928607450d9e0abb932109ceToomas SoomeLDADD= ${LIBFICL} ${LIBZFSBOOT} ${LIBI386} ${LIBSTAND}
199767f8919635c4928607450d9e0abb932109ceToomas Soome
199767f8919635c4928607450d9e0abb932109ceToomas SoomeCLEANFILES += machine x86
199767f8919635c4928607450d9e0abb932109ceToomas SoomeCFLAGS += -DLOADER_PREFER_AMD64
199767f8919635c4928607450d9e0abb932109ceToomas Soome
199767f8919635c4928607450d9e0abb932109ceToomas Soomemachine:
199767f8919635c4928607450d9e0abb932109ceToomas Soome $(RM) machine
199767f8919635c4928607450d9e0abb932109ceToomas Soome $(SYMLINK) ../../../i386/include machine
199767f8919635c4928607450d9e0abb932109ceToomas Soome
199767f8919635c4928607450d9e0abb932109ceToomas Soomex86:
199767f8919635c4928607450d9e0abb932109ceToomas Soome $(RM) x86
199767f8919635c4928607450d9e0abb932109ceToomas Soome $(SYMLINK) ../../../x86/include x86
199767f8919635c4928607450d9e0abb932109ceToomas Soome
199767f8919635c4928607450d9e0abb932109ceToomas SoomeOBJS= $(SRCS:%.c=%.o)
199767f8919635c4928607450d9e0abb932109ceToomas Soome
e547e4e8adbc4f31e3fac2e9d89d20e99911227cAndrew Stormont${OBJS}: machine x86
e547e4e8adbc4f31e3fac2e9d89d20e99911227cAndrew Stormont
199767f8919635c4928607450d9e0abb932109ceToomas Soome${PROG}: ${OBJS} $(LDADD)
199767f8919635c4928607450d9e0abb932109ceToomas Soome $(LD) $(LDFLAGS) -o $@ $(BTXCRT) $(OBJS) $(LDADD)
199767f8919635c4928607450d9e0abb932109ceToomas Soome
199767f8919635c4928607450d9e0abb932109ceToomas Soomeclean: clobber
199767f8919635c4928607450d9e0abb932109ceToomas Soomeclobber:
199767f8919635c4928607450d9e0abb932109ceToomas Soome $(RM) $(CLEANFILES) $(OBJS)
199767f8919635c4928607450d9e0abb932109ceToomas Soome
199767f8919635c4928607450d9e0abb932109ceToomas Soomeinstall: all $(ROOT_BOOT_DEFAULTS) $(ROOT_BOOT_FORTH) \
199767f8919635c4928607450d9e0abb932109ceToomas Soome $(ROOTBOOTFILES) $(ROOTBOOTDEFAULTS) $(ROOT_BOOT_CONF) $(ROOTBOOTFORTH)
199767f8919635c4928607450d9e0abb932109ceToomas Soome
199767f8919635c4928607450d9e0abb932109ceToomas Soome%.o: ../../common/%.c
199767f8919635c4928607450d9e0abb932109ceToomas Soome $(COMPILE.c) -o $@ $<
199767f8919635c4928607450d9e0abb932109ceToomas Soome
199767f8919635c4928607450d9e0abb932109ceToomas Soome%.o: ../../common/linenoise/%.c
199767f8919635c4928607450d9e0abb932109ceToomas Soome $(COMPILE.c) -o $@ $<
199767f8919635c4928607450d9e0abb932109ceToomas Soome
199767f8919635c4928607450d9e0abb932109ceToomas Soome$(ROOT_BOOT)/%: ../../forth/%
199767f8919635c4928607450d9e0abb932109ceToomas Soome $(INS.file)
199767f8919635c4928607450d9e0abb932109ceToomas Soome
199767f8919635c4928607450d9e0abb932109ceToomas Soome$(ROOT_BOOT_DEFAULTS)/%: ../../forth/%
199767f8919635c4928607450d9e0abb932109ceToomas Soome $(INS.file)
199767f8919635c4928607450d9e0abb932109ceToomas Soome
199767f8919635c4928607450d9e0abb932109ceToomas Soome$(ROOT_BOOT_FORTH)/%: ../../forth/%
199767f8919635c4928607450d9e0abb932109ceToomas Soome $(INS.file)
199767f8919635c4928607450d9e0abb932109ceToomas Soome
199767f8919635c4928607450d9e0abb932109ceToomas Soome$(ROOT_BOOT_DEFAULTS) $(ROOT_BOOT_CONF) $(ROOT_BOOT_FORTH):
199767f8919635c4928607450d9e0abb932109ceToomas Soome $(INS.dir)