122028508SToomas Soome#
222028508SToomas Soome# This file and its contents are supplied under the terms of the
322028508SToomas Soome# Common Development and Distribution License ("CDDL"), version 1.0.
422028508SToomas Soome# You may only use this file in accordance with the terms of version
522028508SToomas Soome# 1.0 of the CDDL.
622028508SToomas Soome#
722028508SToomas Soome# A full copy of the text of the CDDL should have accompanied this
822028508SToomas Soome# source.  A copy of the CDDL is also available via the Internet at
922028508SToomas Soome# http://www.illumos.org/license/CDDL.
1022028508SToomas Soome#
1122028508SToomas Soome
1222028508SToomas Soome#
1322028508SToomas Soome# Copyright 2016 Toomas Soome <tsoome@me.com>
1422028508SToomas Soome#
1522028508SToomas Soome
1622028508SToomas Soomeinclude $(SRC)/boot/Makefile.version
1722028508SToomas Soomeinclude $(SRC)/boot/Makefile.inc
1822028508SToomas Soome
1922028508SToomas SoomePROG=		loader.sym
2022028508SToomas Soome
2122028508SToomas Soome# architecture-specific loader code
2222028508SToomas SoomeOBJS=	\
2322028508SToomas Soome	acpi.o \
2422028508SToomas Soome	autoload.o \
2522028508SToomas Soome	bootinfo.o \
2622028508SToomas Soome	conf.o \
2722028508SToomas Soome	copy.o \
2822028508SToomas Soome	efi_main.o \
2922028508SToomas Soome	font.o \
3022028508SToomas Soome	$(FONT).o \
3122028508SToomas Soome	framebuffer.o \
3222028508SToomas Soome	main.o \
3322028508SToomas Soome	memmap.o \
3422028508SToomas Soome	mb_header.o \
3522028508SToomas Soome	multiboot2.o \
3622028508SToomas Soome	nvstore.o \
3722028508SToomas Soome	self_reloc.o \
3822028508SToomas Soome	tem.o \
3922028508SToomas Soome	vers.o
4022028508SToomas Soome
4122028508SToomas Soomemodule.o := CPPFLAGS += -I$(CRYPTOSRC)
4222028508SToomas Soometem.o := CPPFLAGS += $(DEFAULT_CONSOLE_COLOR)
4322028508SToomas Soomemain.o := CPPFLAGS += -I$(SRC)/uts/common/fs/zfs
4422028508SToomas Soome
4522028508SToomas SoomeCPPFLAGS += -I../../../include -I../../../sys
4622028508SToomas SoomeCPPFLAGS += -I../../../libsa
4722028508SToomas Soome
4822028508SToomas Soomeinclude ../../Makefile.inc
4922028508SToomas Soome
5022028508SToomas Soomeinclude ../arch/$(MACHINE)/Makefile.inc
5122028508SToomas Soome
5222028508SToomas SoomeCPPFLAGS +=	-I. -I..
5322028508SToomas SoomeCPPFLAGS +=	-I../../include
5422028508SToomas SoomeCPPFLAGS +=	-I../../include/$(MACHINE)
5522028508SToomas SoomeCPPFLAGS +=	-I$(ZFSSRC)
5622028508SToomas SoomeCPPFLAGS +=	-I../../../sys/cddl/boot/zfs
5722028508SToomas SoomeCPPFLAGS +=	-I$(SRC)/uts/intel/sys/acpi
5822028508SToomas SoomeCPPFLAGS +=	-I$(PNGLITE)
5922028508SToomas SoomeCPPFLAGS +=	-DNO_PCI -DEFI
6022028508SToomas Soome
6122028508SToomas SoomeDPLIBSA=	../../../libsa/$(MACHINE)/libsa_pics.a
6222028508SToomas SoomeLIBSA=	-L../../../libsa/$(MACHINE) -lsa_pics
6322028508SToomas Soome
6422028508SToomas SoomeBOOT_FORTH=	yes
6522028508SToomas SoomeCPPFLAGS +=	-DBOOT_FORTH
6622028508SToomas SoomeCPPFLAGS +=	-I$(SRC)/common/ficl
6722028508SToomas SoomeCPPFLAGS +=	-I../../../libficl
6822028508SToomas SoomeDPLIBFICL=	../../../libficl/$(MACHINE)/libficl_pics.a
6922028508SToomas SoomeLIBFICL=	-L../../../libficl/$(MACHINE) -lficl_pics
7022028508SToomas Soome
7122028508SToomas Soome# Always add MI sources
7222028508SToomas Soome#
7322028508SToomas SoomeOBJS += boot.o commands.o console.o devopen.o interp.o \
7422028508SToomas Soome	interp_backslash.o interp_parse.o ls.o misc.o \
7522028508SToomas Soome	module.o linenoise.o zfs_cmd.o
7622028508SToomas Soome
7722028508SToomas SoomeOBJS += load_elf32.o load_elf32_obj.o reloc_elf32.o \
7822028508SToomas Soome	load_elf64.o load_elf64_obj.o reloc_elf64.o
7922028508SToomas Soome
8022028508SToomas SoomeOBJS += disk.o part.o dev_net.o vdisk.o
8122028508SToomas SoomeCPPFLAGS += -DLOADER_DISK_SUPPORT
8222028508SToomas SoomeCPPFLAGS += -DLOADER_GPT_SUPPORT
8322028508SToomas SoomeCPPFLAGS += -DLOADER_MBR_SUPPORT
8422028508SToomas Soome
8522028508SToomas Soomepart.o := CPPFLAGS += -I$(ZLIB)
8622028508SToomas Soome
8722028508SToomas SoomeOBJS +=  bcache.o
8822028508SToomas Soome
8922028508SToomas Soome# Forth interpreter
9022028508SToomas SoomeOBJS +=	interp_forth.o
9122028508SToomas SoomeCPPFLAGS +=	-I../../../common
9222028508SToomas Soome
9322028508SToomas Soome# For multiboot2.h, must be last, to avoid conflicts
9422028508SToomas SoomeCPPFLAGS +=	-I$(SRC)/uts/common
9522028508SToomas Soome
9622028508SToomas SoomeFILES=		$(EFIPROG)
9722028508SToomas SoomeFILEMODE=	0555
9822028508SToomas SoomeROOT_BOOT=	$(ROOT)/boot
9922028508SToomas SoomeROOTBOOTFILES=$(FILES:%=$(ROOT_BOOT)/%)
10022028508SToomas Soome
10122028508SToomas SoomeLDSCRIPT=	../arch/$(MACHINE)/ldscript.$(MACHINE)
10222028508SToomas SoomeLDFLAGS =	-nostdlib --eh-frame-hdr
10322028508SToomas SoomeLDFLAGS +=	-shared --hash-style=both --enable-new-dtags
10422028508SToomas SoomeLDFLAGS +=	-T$(LDSCRIPT) -Bsymbolic
10522028508SToomas Soome
10622028508SToomas SoomeCLEANFILES=	$(EFIPROG) loader.sym loader.bin
10722028508SToomas SoomeCLEANFILES +=	$(FONT).c vers.c
10822028508SToomas Soome
10922028508SToomas SoomeNEWVERSWHAT=	"EFI loader" $(MACHINE)
11022028508SToomas Soome
11122028508SToomas Soomeinstall: all $(ROOTBOOTFILES)
11222028508SToomas Soome
11322028508SToomas Soomevers.c:	../../../common/newvers.sh $(SRC)/boot/Makefile.version
11422028508SToomas Soome	$(SH) ../../../common/newvers.sh $(LOADER_VERSION) $(NEWVERSWHAT)
11522028508SToomas Soome
11622028508SToomas Soome$(EFIPROG): loader.bin
11722028508SToomas Soome	$(BTXLD) -V $(BOOT_VERSION) -o $@ loader.bin
11822028508SToomas Soome
11922028508SToomas Soomeloader.bin: loader.sym
12022028508SToomas Soome	if [ `$(OBJDUMP) -t loader.sym | fgrep '*UND*' | wc -l` != 0 ]; then \
12122028508SToomas Soome		$(OBJDUMP) -t loader.sym | fgrep '*UND*'; \
12222028508SToomas Soome		exit 1; \
12322028508SToomas Soome	fi
12422028508SToomas Soome	$(OBJCOPY) --readonly-text -j .peheader -j .text -j .sdata -j .data \
12522028508SToomas Soome		-j .dynamic -j .dynsym -j .rel.dyn \
12622028508SToomas Soome		-j .rela.dyn -j .reloc -j .eh_frame -j set_Xcommand_set \
12722028508SToomas Soome		-j set_Xficl_compile_set \
12822028508SToomas Soome		--output-target=$(EFI_TARGET) --subsystem efi-app loader.sym $@
12922028508SToomas Soome
13022028508SToomas SoomeDPLIBEFI=	../../libefi/$(MACHINE)/libefi.a
13122028508SToomas SoomeLIBEFI=		-L../../libefi/$(MACHINE) -lefi
13222028508SToomas Soome
13322028508SToomas SoomeDPADD=		$(DPLIBFICL) $(DPLIBEFI) $(DPLIBSA) $(LDSCRIPT)
13422028508SToomas SoomeLDADD=		$(LIBFICL) $(LIBEFI) $(LIBSA)
13522028508SToomas Soome
13622028508SToomas Soomeloader.sym:	$(OBJS) $(DPADD)
137*db1a8debSToomas Soome	$(GLD) $(LDFLAGS) -o $@ $(OBJS) $(LDADD)
13822028508SToomas Soome
13922028508SToomas Soomemachine:
14022028508SToomas Soome	$(RM) machine
14122028508SToomas Soome	$(SYMLINK) ../../../sys/$(MACHINE)/include machine
14222028508SToomas Soome
14322028508SToomas Soomex86:
14422028508SToomas Soome	$(RM) x86
14522028508SToomas Soome	$(SYMLINK) ../../../sys/x86/include x86
14622028508SToomas Soome
14722028508SToomas Soomeclean clobber:
14822028508SToomas Soome	$(RM) $(CLEANFILES) $(OBJS) machine x86
14922028508SToomas Soome
15022028508SToomas Soome%.o:	../%.c
15122028508SToomas Soome	$(COMPILE.c) $<
15222028508SToomas Soome
15322028508SToomas Soome%.o:	../arch/$(MACHINE)/%.c
15422028508SToomas Soome	$(COMPILE.c) $<
15522028508SToomas Soome
15622028508SToomas Soome#
15722028508SToomas Soome# using -W to silence gas here, as for 32bit build, it will generate warning
15822028508SToomas Soome# for start.S because hand crafted .reloc section does not have group name
15922028508SToomas Soome#
16022028508SToomas Soome%.o:	../arch/$(MACHINE)/%.S
16122028508SToomas Soome	$(COMPILE.S) -Wa,-W $<
16222028508SToomas Soome
16322028508SToomas Soome%.o:	../../../common/%.S
16422028508SToomas Soome	$(COMPILE.S) $<
16522028508SToomas Soome
16622028508SToomas Soome%.o:	../../../common/%.c
16722028508SToomas Soome	$(COMPILE.c) $<
16822028508SToomas Soome
16922028508SToomas Soome%.o:	../../../common/linenoise/%.c
17022028508SToomas Soome	$(COMPILE.c) $<
17122028508SToomas Soome
17222028508SToomas Soome%.o: $(SRC)/common/font/%.c
17322028508SToomas Soome	$(COMPILE.c) $<
17422028508SToomas Soome
17522028508SToomas Soome$(FONT).c: $(FONT_DIR)/$(FONT_SRC)
17622028508SToomas Soome	$(VTFONTCVT) -f compressed-source -o $@ $(FONT_DIR)/$(FONT_SRC)
17722028508SToomas Soome
17822028508SToomas Soome$(ROOT_BOOT)/%: %
17922028508SToomas Soome	$(INS.file)
180