1 ###############################################################################
3 # Initialise various variables
12 CROSS_COMPILE ?
= $(CROSS
)
15 ###############################################################################
29 CC
:= $(CROSS_COMPILE
)gcc
31 AS
:= $(CROSS_COMPILE
)as
32 LD
:= $(CROSS_COMPILE
)ld
33 SIZE
:= $(CROSS_COMPILE
)size
34 AR
:= $(CROSS_COMPILE
)ar
35 RANLIB
:= $(CROSS_COMPILE
)ranlib
36 OBJCOPY
:= $(CROSS_COMPILE
)objcopy
37 NM
:= $(CROSS_COMPILE
)nm
38 OBJDUMP
:= $(CROSS_COMPILE
)objdump
41 PARSEROM
:= .
/util
/parserom.pl
42 FIXROM
:= .
/util
/fixrom.pl
43 SYMCHECK
:= .
/util
/symcheck.pl
44 SORTOBJDUMP
:= .
/util
/sortobjdump.pl
45 PADIMG
:= .
/util
/padimg.pl
46 LICENCE
:= .
/util
/licence.pl
49 ELF2EFI32
:= .
/util
/elf2efi32
50 ELF2EFI64
:= .
/util
/elf2efi64
51 EFIROM
:= .
/util
/efirom
52 EFIFATBIN
:= .
/util
/efifatbin
54 GENKEYMAP
:= .
/util
/genkeymap.py
59 ###############################################################################
61 # SRCDIRS lists all directories containing source files.
66 SRCDIRS
+= net net
/tcp net
/udp net
/infiniband
68 SRCDIRS
+= drivers
/bus
69 SRCDIRS
+= drivers
/net
70 SRCDIRS
+= drivers
/net
/e1000
71 SRCDIRS
+= drivers
/net
/e1000e
72 SRCDIRS
+= drivers
/net
/igb
73 SRCDIRS
+= drivers
/net
/igbvf
74 SRCDIRS
+= drivers
/net
/phantom
75 SRCDIRS
+= drivers
/net
/vxge
76 SRCDIRS
+= drivers
/net
/efi
77 SRCDIRS
+= drivers
/net
/tg3
78 SRCDIRS
+= drivers
/net
/bnxt
79 SRCDIRS
+= drivers
/net
/sfc
80 SRCDIRS
+= drivers
/block
81 SRCDIRS
+= drivers
/nvs
82 SRCDIRS
+= drivers
/bitbash
83 SRCDIRS
+= drivers
/infiniband
84 SRCDIRS
+= drivers
/infiniband
/mlx_utils_flexboot
/src
85 SRCDIRS
+= drivers
/infiniband
/mlx_utils
/src
/public
86 SRCDIRS
+= drivers
/infiniband
/mlx_utils
/mlx_lib
/mlx_reg_access
87 SRCDIRS
+= drivers
/infiniband
/mlx_utils
/mlx_lib
/mlx_nvconfig
88 SRCDIRS
+= drivers
/infiniband
/mlx_utils
/mlx_lib
/mlx_vmac
89 SRCDIRS
+= drivers
/infiniband
/mlx_utils
/mlx_lib
/mlx_blink_leds
90 SRCDIRS
+= drivers
/infiniband
/mlx_utils
/mlx_lib
/mlx_link_speed
91 SRCDIRS
+= drivers
/infiniband
/mlx_utils
/mlx_lib
/mlx_mtu
92 SRCDIRS
+= drivers
/infiniband
/mlx_nodnic
/src
93 SRCDIRS
+= drivers
/usb
94 SRCDIRS
+= interface
/pxe interface
/efi interface
/smbios
95 SRCDIRS
+= interface
/bofm
96 SRCDIRS
+= interface
/xen
97 SRCDIRS
+= interface
/hyperv
99 SRCDIRS
+= crypto crypto
/mishmash
100 SRCDIRS
+= hci hci
/commands hci
/tui
101 SRCDIRS
+= hci
/mucurses hci
/mucurses
/widgets
102 SRCDIRS
+= hci
/keymap
106 # These directories contain code that is not eligible for UEFI Secure
109 SRCDIRS_INSEC
+= net
/oncrpc
110 SRCDIRS_INSEC
+= net
/80211
111 SRCDIRS_INSEC
+= drivers
/net
/rtl818x
112 SRCDIRS_INSEC
+= drivers
/net
/ath
113 SRCDIRS_INSEC
+= drivers
/net
/ath
/ath5k
114 SRCDIRS_INSEC
+= drivers
/net
/ath
/ath9k
116 # NON_AUTO_SRCS lists files that are excluded from the normal
117 # automatic build system.
120 NON_AUTO_SRCS
+= core
/version.c
121 NON_AUTO_SRCS
+= drivers
/net
/prism2.c
123 # INCDIRS lists the include path
128 ###############################################################################
130 # Default build target: build the most common targets and print out a
131 # helpfully suggestive message
133 ALL
:= bin
/blib.a bin
/ipxe.dsk bin
/ipxe.lkrn bin
/ipxe.iso \
134 bin
/ipxe.usb bin
/ipxe.pxe bin
/undionly.kpxe bin
/rtl8139.rom \
135 bin
/8086100e.mrom bin
/80861209.rom bin
/10500940.rom \
136 bin
/10222000.rom bin
/10ec8139.rom bin
/1af41000.rom \
137 bin
/8086100f.mrom bin
/808610d3.mrom bin
/15ad07b0.rom
140 @
$(ECHO
) '==========================================================='
142 @
$(ECHO
) 'To create a bootable floppy, type'
143 @
$(ECHO
) ' cat bin/ipxe.dsk > /dev/fd0'
144 @
$(ECHO
) 'where /dev/fd0 is your floppy drive. This will erase any'
145 @
$(ECHO
) 'data already on the disk.'
147 @
$(ECHO
) 'To create a bootable USB key, type'
148 @
$(ECHO
) ' cat bin/ipxe.usb > /dev/sdX'
149 @
$(ECHO
) 'where /dev/sdX is your USB key, and is *not* a real hard'
150 @
$(ECHO
) 'disk on your system. This will erase any data already on'
151 @
$(ECHO
) 'the USB key.'
153 @
$(ECHO
) 'To create a bootable CD-ROM, burn the ISO image '
154 @
$(ECHO
) 'bin/ipxe.iso to a blank CD-ROM.'
156 @
$(ECHO
) 'These images contain drivers for all supported cards. You'
157 @
$(ECHO
) 'can build more customised images, and ROM images, using'
158 @
$(ECHO
) ' make bin/<rom-name>.<output-format>'
160 @
$(ECHO
) '==========================================================='
162 ###############################################################################
164 # Comprehensive build target: build a selection of cross-platform
165 # targets to expose potential build errors that show up only on
169 $(Q
)$(MAKE
) --no-print-directory
$(ALL
) \
170 bin
/3c509.rom bin
/intel.rom bin
/intel.mrom \
171 bin-x86_64-pcbios
/8086100e.mrom bin-x86_64-pcbios
/intel.rom \
172 bin-x86_64-pcbios
/ipxe.usb bin-x86_64-pcbios
/ipxe.pxe \
173 bin-x86_64-pcbios
/undionly.kpxe \
174 bin-i386-efi
/ipxe.efi bin-i386-efi
/ipxe.efidrv \
175 bin-i386-efi
/ipxe.efirom \
176 bin-x86_64-efi
/ipxe.efi bin-x86_64-efi
/ipxe.efidrv \
177 bin-x86_64-efi
/ipxe.efirom \
178 bin-i386-linux
/tap.linux bin-x86_64-linux
/tap.linux \
179 bin-i386-linux
/tests.linux bin-x86_64-linux
/tests.linux
181 ###############################################################################
183 # VMware build target: all ROMs used with VMware
185 vmware
: bin
/8086100f.mrom bin
/808610d3.mrom bin
/10222000.rom bin
/15ad07b0.rom
186 @
$(ECHO
) '==========================================================='
188 @
$(ECHO
) 'Available ROMs:'
189 @
$(ECHO
) ' bin/8086100f.mrom -- intel/e1000'
190 @
$(ECHO
) ' bin/808610d3.mrom -- intel/e1000e'
191 @
$(ECHO
) ' bin/10222000.rom -- vlance/pcnet32'
192 @
$(ECHO
) ' bin/15ad07b0.rom -- vmxnet3'
194 @
$(ECHO
) 'For more information, see https://ipxe.org/howto/vmware'
196 @
$(ECHO
) '==========================================================='
198 ###############################################################################
200 # Build targets that do nothing but might be tried by users
203 @
$(ECHO
) "No configuration needed."
206 @
$(ECHO
) "No installation required."
208 ###############################################################################
210 # Version number calculations
212 ifneq ($(wildcard ..
/.git
),)
213 VERSIONS
:= $(shell git describe
--tags --always
--long
--abbrev
=1 --match
"v*")
214 VERSION_TUPLE
:= $(subst .
, ,$(subst -, ,$(patsubst v
%,%,$(VERSIONS
))))
215 VERSION_MAJOR
:= $(word 1,$(VERSION_TUPLE
))
216 VERSION_MINOR
:= $(word 2,$(VERSION_TUPLE
))
217 VERSION_PATCH
:= $(word 3,$(VERSION_TUPLE
))
218 ifeq ($(word 4,$(VERSION_TUPLE
)),0)
223 GITVERSION
= $(word 5,$(VERSION_TUPLE
))
230 MM_VERSION
= $(VERSION_MAJOR
).
$(VERSION_MINOR
)
231 VERSION
= $(MM_VERSION
).
$(VERSION_PATCH
)$(EXTRAVERSION
)
232 ifneq ($(GITVERSION
),)
233 VERSION
+= ($(GITVERSION
))
236 @
$(ECHO
) "$(VERSION)"
238 ###############################################################################
240 # Predefined build shortcuts (for e.g. bin/ipxe.iso)
242 # All drivers (excluding USB)
244 DRIVERS_ipxe
= $(DRIVERS_net
) $(DRIVERS_infiniband
) \
245 $(DRIVERS_xen
) $(DRIVERS_hyperv
)
249 DRIVERS_rpi
= smsc95xx lan78xx
251 ###############################################################################
253 # Drag in the bulk of the build system
256 MAKEDEPS
+= Makefile.housekeeping
257 include Makefile.housekeeping