183b4671eSToomas Soome#
283b4671eSToomas Soome# This file and its contents are supplied under the terms of the
383b4671eSToomas Soome# Common Development and Distribution License ("CDDL"), version 1.0.
483b4671eSToomas Soome# You may only use this file in accordance with the terms of version
583b4671eSToomas Soome# 1.0 of the CDDL.
683b4671eSToomas Soome#
783b4671eSToomas Soome# A full copy of the text of the CDDL should have accompanied this
883b4671eSToomas Soome# source.  A copy of the CDDL is also available via the Internet at
983b4671eSToomas Soome# http://www.illumos.org/license/CDDL.
1083b4671eSToomas Soome#
1183b4671eSToomas Soome
1283b4671eSToomas Soome#
1383b4671eSToomas Soome# Copyright 2016 Toomas Soome <tsoome@me.com>
1483b4671eSToomas Soome#
1583b4671eSToomas Soome
1683b4671eSToomas Soomeinclude $(SRC)/boot/Makefile.version
1722028508SToomas Soomeinclude $(SRC)/boot/Makefile.inc
1883b4671eSToomas Soome
1983b4671eSToomas SoomePROG=		loader.sym
2083b4671eSToomas Soome
2183b4671eSToomas Soome# architecture-specific loader code
229890ff83SToomas SoomeSRCS=	\
239890ff83SToomas Soome	acpi.c \
247d1eae8cSToomas Soome	autoload.c \
257d1eae8cSToomas Soome	bootinfo.c \
267d1eae8cSToomas Soome	conf.c \
277d1eae8cSToomas Soome	copy.c \
287d1eae8cSToomas Soome	efi_main.c \
299890ff83SToomas Soome	font.c \
309890ff83SToomas Soome	$(FONT).c \
317d1eae8cSToomas Soome	framebuffer.c \
327d1eae8cSToomas Soome	main.c \
337d1eae8cSToomas Soome	memmap.c \
345ac07b12SToomas Soome	mb_header.S \
357d1eae8cSToomas Soome	multiboot2.c \
36b713c91eSToomas Soome	nvstore.c \
377d1eae8cSToomas Soome	self_reloc.c \
389890ff83SToomas Soome	tem.c \
397d1eae8cSToomas Soome	vers.c
407d1eae8cSToomas Soome
419890ff83SToomas SoomeOBJS=	\
429890ff83SToomas Soome	acpi.o \
437d1eae8cSToomas Soome	autoload.o \
447d1eae8cSToomas Soome	bootinfo.o \
457d1eae8cSToomas Soome	conf.o \
467d1eae8cSToomas Soome	copy.o \
477d1eae8cSToomas Soome	efi_main.o \
489890ff83SToomas Soome	font.o \
499890ff83SToomas Soome	$(FONT).o \
507d1eae8cSToomas Soome	framebuffer.o \
517d1eae8cSToomas Soome	main.o \
527d1eae8cSToomas Soome	memmap.o \
535ac07b12SToomas Soome	mb_header.o \
547d1eae8cSToomas Soome	multiboot2.o \
55b713c91eSToomas Soome	nvstore.o \
567d1eae8cSToomas Soome	self_reloc.o \
579890ff83SToomas Soome	tem.o \
587d1eae8cSToomas Soome	vers.o
5983b4671eSToomas Soome
60411d06f4SToomas Soomemodule.o := CPPFLAGS += -I$(CRYPTOSRC)
61e0721d5aSToomas Soometem.o := CPPFLAGS += $(DEFAULT_CONSOLE_COLOR)
62b713c91eSToomas Soomemain.o := CPPFLAGS += -I$(SRC)/uts/common/fs/zfs
633c562093SToomas Soome
6422028508SToomas SoomeCPPFLAGS += -I../../../include -I../../../sys
6522028508SToomas SoomeCPPFLAGS += -I../../../libsa
6683b4671eSToomas Soome
6783b4671eSToomas Soomeinclude ../../Makefile.inc
6883b4671eSToomas Soome
6983b4671eSToomas Soomeinclude ../arch/$(MACHINE)/Makefile.inc
7083b4671eSToomas Soome
7183b4671eSToomas SoomeCPPFLAGS +=	-I. -I..
7283b4671eSToomas SoomeCPPFLAGS +=	-I../../include
7383b4671eSToomas SoomeCPPFLAGS +=	-I../../include/$(MACHINE)
7486fec011SToomas SoomeCPPFLAGS +=	-I$(ZFSSRC)
7522028508SToomas SoomeCPPFLAGS +=	-I../../../sys/cddl/boot/zfs
7683b4671eSToomas SoomeCPPFLAGS +=	-I$(SRC)/uts/intel/sys/acpi
779890ff83SToomas SoomeCPPFLAGS +=	-I$(PNGLITE)
789890ff83SToomas SoomeCPPFLAGS +=	-DNO_PCI -DEFI
7983b4671eSToomas Soome
8022028508SToomas SoomeDPLIBSA=	../../../libsa/$(MACHINE)/libsa_pics.a
8122028508SToomas SoomeLIBSA=	-L../../../libsa/$(MACHINE) -lsa_pics
8283b4671eSToomas Soome
8383b4671eSToomas SoomeBOOT_FORTH=	yes
8486fec011SToomas SoomeCPPFLAGS +=	-DBOOT_FORTH
8583b4671eSToomas SoomeCPPFLAGS +=	-I$(SRC)/common/ficl
8683b4671eSToomas SoomeCPPFLAGS +=	-I../../../libficl
87ff5d4039SToomas SoomeDPLIBFICL=	../../../libficl/$(MACHINE)/libficl_pics.a
88ff5d4039SToomas SoomeLIBFICL=	-L../../../libficl/$(MACHINE) -lficl_pics
8983b4671eSToomas Soome
9083b4671eSToomas Soome# Always add MI sources
91ff5d4039SToomas Soome#
92ff5d4039SToomas SoomeSRCS +=	boot.c commands.c console.c devopen.c interp.c
93ff5d4039SToomas SoomeSRCS +=	interp_backslash.c interp_parse.c ls.c misc.c
94ff5d4039SToomas SoomeSRCS +=	module.c linenoise.c zfs_cmd.c
95ff5d4039SToomas Soome
96ff5d4039SToomas SoomeOBJS += boot.o commands.o console.o devopen.o interp.o \
97ff5d4039SToomas Soome	interp_backslash.o interp_parse.o ls.o misc.o \
98ff5d4039SToomas Soome	module.o linenoise.o zfs_cmd.o
99ff5d4039SToomas Soome
100ff5d4039SToomas SoomeSRCS +=	load_elf32.c load_elf32_obj.c reloc_elf32.c
101ff5d4039SToomas SoomeSRCS +=	load_elf64.c load_elf64_obj.c reloc_elf64.c
102ff5d4039SToomas Soome
103ff5d4039SToomas SoomeOBJS += load_elf32.o load_elf32_obj.o reloc_elf32.o \
104ff5d4039SToomas Soome	load_elf64.o load_elf64_obj.o reloc_elf64.o
105ff5d4039SToomas Soome
106ff5d4039SToomas SoomeSRCS +=	disk.c part.c dev_net.c vdisk.c
107ff5d4039SToomas SoomeOBJS += disk.o part.o dev_net.o vdisk.o
108ff5d4039SToomas SoomeCPPFLAGS += -DLOADER_DISK_SUPPORT
109ff5d4039SToomas SoomeCPPFLAGS += -DLOADER_GPT_SUPPORT
110ff5d4039SToomas SoomeCPPFLAGS += -DLOADER_MBR_SUPPORT
111ff5d4039SToomas Soome
112ff5d4039SToomas Soomepart.o := CPPFLAGS += -I$(ZLIB)
113ff5d4039SToomas Soome
114ff5d4039SToomas SoomeSRCS +=  bcache.c
115ff5d4039SToomas SoomeOBJS +=  bcache.o
116ff5d4039SToomas Soome
117ff5d4039SToomas Soome# Forth interpreter
118ff5d4039SToomas SoomeSRCS +=	interp_forth.c
119ff5d4039SToomas SoomeOBJS +=	interp_forth.o
12083b4671eSToomas SoomeCPPFLAGS +=	-I../../../common
12183b4671eSToomas Soome
12283b4671eSToomas Soome# For multiboot2.h, must be last, to avoid conflicts
12383b4671eSToomas SoomeCPPFLAGS +=	-I$(SRC)/uts/common
12483b4671eSToomas Soome
12583b4671eSToomas SoomeFILES=		$(EFIPROG)
12683b4671eSToomas SoomeFILEMODE=	0555
12783b4671eSToomas SoomeROOT_BOOT=	$(ROOT)/boot
12883b4671eSToomas SoomeROOTBOOTFILES=$(FILES:%=$(ROOT_BOOT)/%)
12983b4671eSToomas Soome
13083b4671eSToomas SoomeLDSCRIPT=	../arch/$(MACHINE)/ldscript.$(MACHINE)
13183b4671eSToomas SoomeLDFLAGS =	-nostdlib --eh-frame-hdr
13283b4671eSToomas SoomeLDFLAGS +=	-shared --hash-style=both --enable-new-dtags
13383b4671eSToomas SoomeLDFLAGS +=	-T$(LDSCRIPT) -Bsymbolic
13483b4671eSToomas Soome
135ff5d4039SToomas SoomeCLEANFILES=	$(EFIPROG) loader.sym loader.bin
1369890ff83SToomas SoomeCLEANFILES +=	$(FONT).c vers.c
13783b4671eSToomas Soome
13883b4671eSToomas SoomeNEWVERSWHAT=	"EFI loader" $(MACHINE)
13983b4671eSToomas Soome
14083b4671eSToomas Soomeinstall: all $(ROOTBOOTFILES)
14183b4671eSToomas Soome
14283b4671eSToomas Soomevers.c:	../../../common/newvers.sh $(SRC)/boot/Makefile.version
14383b4671eSToomas Soome	$(SH) ../../../common/newvers.sh $(LOADER_VERSION) $(NEWVERSWHAT)
14483b4671eSToomas Soome
1457d1eae8cSToomas Soome$(EFIPROG): loader.bin
1467d1eae8cSToomas Soome	$(BTXLD) -V $(BOOT_VERSION) -o $@ loader.bin
1477d1eae8cSToomas Soome
1487d1eae8cSToomas Soomeloader.bin: loader.sym
14983b4671eSToomas Soome	if [ `$(OBJDUMP) -t loader.sym | fgrep '*UND*' | wc -l` != 0 ]; then \
15083b4671eSToomas Soome		$(OBJDUMP) -t loader.sym | fgrep '*UND*'; \
15183b4671eSToomas Soome		exit 1; \
15283b4671eSToomas Soome	fi
15383b4671eSToomas Soome	$(OBJCOPY) --readonly-text -j .peheader -j .text -j .sdata -j .data \
15483b4671eSToomas Soome		-j .dynamic -j .dynsym -j .rel.dyn \
15583b4671eSToomas Soome		-j .rela.dyn -j .reloc -j .eh_frame -j set_Xcommand_set \
15683b4671eSToomas Soome		-j set_Xficl_compile_set \
15783b4671eSToomas Soome		--output-target=$(EFI_TARGET) --subsystem efi-app loader.sym $@
15883b4671eSToomas Soome
159411d06f4SToomas SoomeDPLIBEFI=	../../libefi/$(MACHINE)/libefi.a
160411d06f4SToomas SoomeLIBEFI=		-L../../libefi/$(MACHINE) -lefi
16183b4671eSToomas Soome
16222028508SToomas SoomeDPADD=		$(DPLIBFICL) $(DPLIBEFI) $(DPLIBSA) $(LDSCRIPT)
16322028508SToomas SoomeLDADD=		$(LIBFICL) $(LIBEFI) $(LIBSA)
16483b4671eSToomas Soome
16583b4671eSToomas Soomeloader.sym:	$(OBJS) $(DPADD)
166*db1a8debSToomas Soome	$(GLD) $(LDFLAGS) -o $@ $(OBJS) $(LDADD)
16783b4671eSToomas Soome
16883b4671eSToomas Soomemachine:
16983b4671eSToomas Soome	$(RM) machine
17022028508SToomas Soome	$(SYMLINK) ../../../sys/$(MACHINE)/include machine
17183b4671eSToomas Soome
17283b4671eSToomas Soomex86:
17383b4671eSToomas Soome	$(RM) x86
17422028508SToomas Soome	$(SYMLINK) ../../../sys/x86/include x86
17583b4671eSToomas Soome
17683b4671eSToomas Soomeclean clobber:
177ff5d4039SToomas Soome	$(RM) $(CLEANFILES) $(OBJS) machine x86
17883b4671eSToomas Soome
17983b4671eSToomas Soome%.o:	../%.c
18083b4671eSToomas Soome	$(COMPILE.c) $<
18183b4671eSToomas Soome
18283b4671eSToomas Soome%.o:	../arch/$(MACHINE)/%.c
18383b4671eSToomas Soome	$(COMPILE.c) $<
18483b4671eSToomas Soome
18583b4671eSToomas Soome#
18683b4671eSToomas Soome# using -W to silence gas here, as for 32bit build, it will generate warning
18783b4671eSToomas Soome# for start.S because hand crafted .reloc section does not have group name
18883b4671eSToomas Soome#
18983b4671eSToomas Soome%.o:	../arch/$(MACHINE)/%.S
19083b4671eSToomas Soome	$(COMPILE.S) -Wa,-W $<
19183b4671eSToomas Soome
1927d1eae8cSToomas Soome%.o:	../../../common/%.S
1937d1eae8cSToomas Soome	$(COMPILE.S) $<
1947d1eae8cSToomas Soome
19583b4671eSToomas Soome%.o:	../../../common/%.c
19683b4671eSToomas Soome	$(COMPILE.c) $<
19783b4671eSToomas Soome
19883b4671eSToomas Soome%.o:	../../../common/linenoise/%.c
19983b4671eSToomas Soome	$(COMPILE.c) $<
20083b4671eSToomas Soome
2019890ff83SToomas Soome%.o: $(SRC)/common/font/%.c
20283b4671eSToomas Soome	$(COMPILE.c) $<
20383b4671eSToomas Soome
2049890ff83SToomas Soome$(FONT).c: $(FONT_DIR)/$(FONT_SRC)
2059890ff83SToomas Soome	$(VTFONTCVT) -f compressed-source -o $@ $(FONT_DIR)/$(FONT_SRC)
2069890ff83SToomas Soome
20783b4671eSToomas Soome$(ROOT_BOOT)/%: %
20883b4671eSToomas Soome	$(INS.file)
209