aboutsummaryrefslogtreecommitdiff
path: root/roms/Makefile
blob: 6994873314fa9f2d756a24482fc9f4cbbcc3f31d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131

vgabios_variants := stdvga cirrus vmware qxl isavga
vgabios_targets  := $(subst -isavga,,$(patsubst %,vgabios-%.bin,$(vgabios_variants)))
pxerom_variants  := e1000 eepro100 ne2k_pci pcnet rtl8139 virtio
pxerom_targets   := 8086100e 80861209 10500940 10222000 10ec8139 1af41000

pxe-rom-e1000    efi-rom-e1000    : VID := 8086
pxe-rom-e1000    efi-rom-e1000    : DID := 100e
pxe-rom-eepro100 efi-rom-eepro100 : VID := 8086
pxe-rom-eepro100 efi-rom-eepro100 : DID := 1209
pxe-rom-ne2k_pci efi-rom-ne2k_pci : VID := 1050
pxe-rom-ne2k_pci efi-rom-ne2k_pci : DID := 0940
pxe-rom-pcnet    efi-rom-pcnet    : VID := 1022
pxe-rom-pcnet    efi-rom-pcnet    : DID := 2000
pxe-rom-rtl8139  efi-rom-rtl8139  : VID := 10ec
pxe-rom-rtl8139  efi-rom-rtl8139  : DID := 8139
pxe-rom-virtio   efi-rom-virtio   : VID := 1af4
pxe-rom-virtio   efi-rom-virtio   : DID := 1000

#
# cross compiler auto detection
#
path := $(subst :, ,$(PATH))
system := $(shell uname -s | tr "A-Z" "a-z")

# first find cross binutils in path
find-cross-ld = $(firstword $(wildcard $(patsubst %,%/$(1)-*$(system)*-ld,$(path))))
# then check we have cross gcc too
find-cross-gcc = $(firstword $(wildcard $(patsubst %ld,%gcc,$(call find-cross-ld,$(1)))))
# finally strip off path + toolname so we get the prefix
find-cross-prefix = $(subst gcc,,$(notdir $(call find-cross-gcc,$(1))))

powerpc64_cross_prefix := $(call find-cross-prefix,powerpc64)
x86_64_cross_prefix := $(call find-cross-prefix,x86_64)

#
# EfiRom utility is shipped with edk2 / tianocore, in BaseTools/
#
# We need that to combine multiple images (legacy bios,
# efi ia32, efi x64) into a single rom binary.
#
# We try to find it in the path.  You can also pass the location on
# the command line, i.e. "make EFIROM=/path/to/EfiRom efirom"
#
EFIROM ?= $(shell which EfiRom 2>/dev/null)

default:
	@echo "nothing is build by default"
	@echo "available build targets:"
	@echo "  bios           -- update bios.bin (seabios)"
	@echo "  seavgabios     -- update vgabios binaries (seabios)"
	@echo "  lgplvgabios    -- update vgabios binaries (lgpl)"
	@echo "  pxerom         -- update nic roms (bios only)"
	@echo "  efirom         -- update nic roms (bios+efi, this needs"
	@echo "                    the EfiRom utility from edk2 / tianocore)"
	@echo "  slof           -- update slof.bin"

bios: build-seabios-config-seabios
	cp seabios/builds/seabios/bios.bin ../pc-bios/bios.bin
	cp seabios/builds/seabios/*dsdt.aml ../pc-bios/

seavgabios: $(patsubst %,seavgabios-%,$(vgabios_variants))

seavgabios-isavga: build-seabios-config-vga-isavga
	cp seabios/builds/vga-isavga/vgabios.bin ../pc-bios/vgabios.bin

seavgabios-%: build-seabios-config-vga-%
	cp seabios/builds/vga-$*/vgabios.bin ../pc-bios/vgabios-$*.bin

build-seabios-config-%: config.%
	mkdir -p seabios/builds/$*
	cp $< seabios/builds/$*/.config
	$(MAKE) $(MAKEFLAGS) -C seabios \
		KCONFIG_CONFIG=$(CURDIR)/seabios/builds/$*/.config \
		OUT=$(CURDIR)/seabios/builds/$*/ oldnoconfig
	$(MAKE) $(MAKEFLAGS) -C seabios \
		KCONFIG_CONFIG=$(CURDIR)/seabios/builds/$*/.config \
		OUT=$(CURDIR)/seabios/builds/$*/ all


lgplvgabios: $(patsubst %,lgplvgabios-%,$(vgabios_variants))

lgplvgabios-isavga: build-lgplvgabios
	cp vgabios/VGABIOS-lgpl-latest.bin ../pc-bios/vgabios.bin
lgplvgabios-%: build-lgplvgabios
	cp vgabios/VGABIOS-lgpl-latest.$*.bin ../pc-bios/vgabios-$*.bin

build-lgplvgabios:
	$(MAKE) $(MAKEFLAGS) -C vgabios $(vgabios_targets)


pxerom: $(patsubst %,pxe-rom-%,$(pxerom_variants))

pxe-rom-%: build-pxe-roms
	cp ipxe/src/bin/$(VID)$(DID).rom ../pc-bios/pxe-$*.rom

efirom: $(patsubst %,efi-rom-%,$(pxerom_variants))

efi-rom-%: build-pxe-roms build-efi-roms
	$(EFIROM) -f "0x$(VID)" -i "0x$(DID)" -l 0x02 \
		-b ipxe/src/bin/$(VID)$(DID).rom \
		-ec ipxe/src/bin-i386-efi/$(VID)$(DID).efidrv \
		-ec ipxe/src/bin-x86_64-efi/$(VID)$(DID).efidrv \
		-o ../pc-bios/efi-$*.rom

build-pxe-roms: ipxe/src/config/local/general.h
	$(MAKE) $(MAKEFLAGS) -C ipxe/src GITVERSION="" \
		CROSS_COMPILE=$(x86_64_cross_prefix) \
		$(patsubst %,bin/%.rom,$(pxerom_targets))

build-efi-roms: build-pxe-roms ipxe/src/config/local/general.h
	$(MAKE) $(MAKEFLAGS) -C ipxe/src GITVERSION="" \
		CROSS_COMPILE=$(x86_64_cross_prefix) \
		$(patsubst %,bin-i386-efi/%.efidrv,$(pxerom_targets)) \
		$(patsubst %,bin-x86_64-efi/%.efidrv,$(pxerom_targets))

ipxe/src/config/local/%: config.ipxe.%
	cp $< $@


slof:
	$(MAKE) $(MAKEFLAGS) -C SLOF CROSS=$(powerpc64_cross_prefix) qemu
	cp SLOF/boot_rom.bin ../pc-bios/slof.bin


clean:
	rm -rf seabios/.config seabios/out seabios/builds
	$(MAKE) $(MAKEFLAGS) -C vgabios clean
	rm -f vgabios/VGABIOS-lgpl-latest*
	$(MAKE) $(MAKEFLAGS) -C ipxe/src veryclean
	$(MAKE) $(MAKEFLAGS) -C SLOF clean