summaryrefslogtreecommitdiffstats
path: root/src/arch/x86/Makefile.pcbios
blob: df08e018205714e187f3a878a44711f8985977e7 (plain) (blame)
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
132
# -*- makefile -*- : Force emacs to use Makefile mode

# BIOS-specific directories containing source files
#
SRCDIRS		+= arch/x86/drivers/net

# The i386 linker script
#
LDSCRIPT	= arch/x86/scripts/pcbios.lds

# Stop ld from complaining about our customised linker script
#
LDFLAGS		+= -N --no-check-sections

# Prefix always starts at address zero
#
LDFLAGS		+= --section-start=.prefix=0

# Media types.
#
MEDIA		+= rom
MEDIA		+= mrom
MEDIA		+= pcirom
MEDIA		+= isarom
MEDIA		+= pxe
MEDIA		+= kpxe
MEDIA		+= kkpxe
MEDIA		+= kkkpxe
MEDIA		+= lkrn
MEDIA		+= dsk
MEDIA		+= nbi
MEDIA		+= hd
MEDIA		+= raw
MEDIA		+= exe

# Padding rules
#
PAD_rom		= $(PERL) $(PADIMG) --blksize=512 --byte=0xff
PAD_mrom	= $(PAD_rom)
PAD_pcirom	= $(PAD_rom)
PAD_isarom	= $(PAD_rom)
PAD_dsk		= $(PERL) $(PADIMG) --blksize=512
PAD_hd		= $(PERL) $(PADIMG) --blksize=32768
PAD_exe		= $(PERL) $(PADIMG) --blksize=512

# Finalisation rules
#
FINALISE_rom	= $(PERL) $(FIXROM)
FINALISE_mrom	= $(FINALISE_rom)
FINALISE_pcirom	= $(FINALISE_rom)
FINALISE_isarom	= $(FINALISE_rom)

# Use $(ROMS) rather than $(DRIVERS) for "allroms", "allmroms", etc.
#
LIST_NAME_rom := ROMS
LIST_NAME_mrom := ROMS
LIST_NAME_pcirom := ROMS
LIST_NAME_isarom := ROMS

# Locations of isolinux files
#
SYSLINUX_DIR_LIST	:= \
	/usr/lib/syslinux \
	/usr/lib/syslinux/bios \
	/usr/lib/syslinux/modules/bios \
	/usr/share/syslinux \
	/usr/share/syslinux/bios \
	/usr/share/syslinux/modules/bios \
	/usr/local/share/syslinux \
	/usr/local/share/syslinux/bios \
	/usr/local/share/syslinux/modules/bios \
	/usr/lib/ISOLINUX
ISOLINUX_BIN_LIST	:= \
	$(ISOLINUX_BIN) \
	$(patsubst %,%/isolinux.bin,$(SYSLINUX_DIR_LIST))
LDLINUX_C32_LIST	:= \
	$(LDLINUX_C32) \
	$(patsubst %,%/ldlinux.c32,$(SYSLINUX_DIR_LIST))
ISOLINUX_BIN	= $(firstword $(wildcard $(ISOLINUX_BIN_LIST)))
LDLINUX_C32	= $(firstword $(wildcard $(LDLINUX_C32_LIST)))

# rule to make a non-emulation ISO boot image
NON_AUTO_MEDIA	+= iso
%iso:	%lkrn util/geniso
	$(QM)$(ECHO) "  [GENISO] $@"
	$(Q)ISOLINUX_BIN=$(ISOLINUX_BIN) LDLINUX_C32=$(LDLINUX_C32) \
	    VERSION="$(VERSION)" bash util/geniso -o $@ $<

# rule to make a floppy emulation ISO boot image
NON_AUTO_MEDIA	+= liso
%liso:	%lkrn util/geniso
	$(QM)$(ECHO) "  [GENISO] $@"
	$(Q)VERSION="$(VERSION)" bash util/geniso -l -o $@ $<

# rule to make a syslinux floppy image (mountable, bootable)
NON_AUTO_MEDIA	+= sdsk
%sdsk:	%lkrn util/gensdsk
	$(QM)$(ECHO) "  [GENSDSK] $@"
	$(Q)bash util/gensdsk $@ $<

# rule to write disk images to /dev/fd0
NON_AUTO_MEDIA	+= fd0
%fd0 : %dsk
	$(QM)$(ECHO) "  [DD] $@"
	$(Q)dd if=$< bs=512 conv=sync of=/dev/fd0
	$(Q)sync

# Special target for building Master Boot Record binary
$(BIN)/mbr.bin : $(BIN)/mbr.o
	$(QM)$(ECHO) "  [LD] $@"
	$(Q)$(LD) $(LDFLAGS) -o $@ --oformat binary -e 0 $<

# rule to make a USB disk image
$(BIN)/usbdisk.bin : $(BIN)/usbdisk.o
	$(QM)$(ECHO) "  [LD] $@"
	$(Q)$(LD) $(LDFLAGS) -o $@ --oformat binary -e 0 $<

NON_AUTO_MEDIA	+= usb
%usb: $(BIN)/usbdisk.bin %hd
	$(QM)$(ECHO) "  [FINISH] $@"
	$(Q)cat $^ > $@

NON_AUTO_MEDIA	+= vhd
%vhd: %usb
	$(QM)$(ECHO) "  [FINISH] $@"
	$(Q)$(QEMUIMG) convert -f raw -O vpc $< $@

# Padded floppy image (e.g. for iLO)
NON_AUTO_MEDIA += pdsk
%pdsk : %dsk
	$(Q)cp $< $@
	$(Q)$(PADIMG) --blksize=1474560 $@