summaryrefslogtreecommitdiffstats
path: root/src/arch/x86/Makefile.pcbios
blob: f8c2253520deaf88a6ba42d049cb1a0719951c5e (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
# -*- 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 $^ > $@

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