1############################################################################### 2# 3# Initialise various variables 4# 5 6CLEANUP := 7CFLAGS := 8ASFLAGS := 9LDFLAGS := 10HOST_CFLAGS := 11MAKEDEPS := Makefile 12CROSS_COMPILE ?= $(CROSS) 13 14############################################################################### 15# 16# Locations of tools 17# 18HOST_CC := gcc 19RM := rm -f 20TOUCH := touch 21MKDIR := mkdir 22CP := cp 23ECHO := echo 24PRINTF := printf 25PERL := perl 26TRUE := true 27CC := $(CROSS_COMPILE)gcc 28CPP := $(CC) -E 29AS := $(CROSS_COMPILE)as 30LD := $(CROSS_COMPILE)ld 31SIZE := $(CROSS_COMPILE)size 32AR := $(CROSS_COMPILE)ar 33RANLIB := $(CROSS_COMPILE)ranlib 34OBJCOPY := $(CROSS_COMPILE)objcopy 35NM := $(CROSS_COMPILE)nm 36OBJDUMP := $(CROSS_COMPILE)objdump 37OPENSSL := openssl 38CSPLIT := csplit 39PARSEROM := ./util/parserom.pl 40FIXROM := ./util/fixrom.pl 41SYMCHECK := ./util/symcheck.pl 42SORTOBJDUMP := ./util/sortobjdump.pl 43PADIMG := ./util/padimg.pl 44LICENCE := ./util/licence.pl 45NRV2B := ./util/nrv2b 46ZBIN := ./util/zbin 47ELF2EFI32 := ./util/elf2efi32 48ELF2EFI64 := ./util/elf2efi64 49EFIROM := ./util/efirom 50EFIFATBIN := ./util/efifatbin 51ICCFIX := ./util/iccfix 52EINFO := ./util/einfo 53GENKEYMAP := ./util/genkeymap.pl 54DOXYGEN := doxygen 55LCAB := lcab 56QEMUIMG := qemu-img 57 58############################################################################### 59# 60# SRCDIRS lists all directories containing source files. 61# 62SRCDIRS := 63SRCDIRS += libgcc 64SRCDIRS += core 65SRCDIRS += net net/tcp net/udp net/infiniband 66SRCDIRS += image 67SRCDIRS += drivers/bus 68SRCDIRS += drivers/net 69SRCDIRS += drivers/net/e1000 70SRCDIRS += drivers/net/e1000e 71SRCDIRS += drivers/net/igb 72SRCDIRS += drivers/net/igbvf 73SRCDIRS += drivers/net/phantom 74SRCDIRS += drivers/net/vxge 75SRCDIRS += drivers/net/efi 76SRCDIRS += drivers/net/tg3 77SRCDIRS += drivers/net/bnxt 78SRCDIRS += drivers/net/sfc 79SRCDIRS += drivers/block 80SRCDIRS += drivers/nvs 81SRCDIRS += drivers/bitbash 82SRCDIRS += drivers/infiniband 83SRCDIRS += drivers/infiniband/mlx_utils_flexboot/src 84SRCDIRS += drivers/infiniband/mlx_utils/src/public 85SRCDIRS += drivers/infiniband/mlx_utils/mlx_lib/mlx_reg_access 86SRCDIRS += drivers/infiniband/mlx_utils/mlx_lib/mlx_nvconfig 87SRCDIRS += drivers/infiniband/mlx_utils/mlx_lib/mlx_vmac 88SRCDIRS += drivers/infiniband/mlx_utils/mlx_lib/mlx_blink_leds 89SRCDIRS += drivers/infiniband/mlx_utils/mlx_lib/mlx_link_speed 90SRCDIRS += drivers/infiniband/mlx_utils/mlx_lib/mlx_mtu 91SRCDIRS += drivers/infiniband/mlx_nodnic/src 92SRCDIRS += drivers/usb 93SRCDIRS += interface/pxe interface/efi interface/smbios 94SRCDIRS += interface/bofm 95SRCDIRS += interface/xen 96SRCDIRS += interface/hyperv 97SRCDIRS += tests 98SRCDIRS += crypto crypto/mishmash 99SRCDIRS += hci hci/commands hci/tui 100SRCDIRS += hci/mucurses hci/mucurses/widgets 101SRCDIRS += hci/keymap 102SRCDIRS += usr 103SRCDIRS += config 104 105# These directories contain code that is not eligible for UEFI Secure 106# Boot signing. 107# 108SRCDIRS_INSEC += net/oncrpc 109SRCDIRS_INSEC += net/80211 110SRCDIRS_INSEC += drivers/net/rtl818x 111SRCDIRS_INSEC += drivers/net/ath 112SRCDIRS_INSEC += drivers/net/ath/ath5k 113SRCDIRS_INSEC += drivers/net/ath/ath9k 114 115# NON_AUTO_SRCS lists files that are excluded from the normal 116# automatic build system. 117# 118NON_AUTO_SRCS := 119NON_AUTO_SRCS += core/version.c 120NON_AUTO_SRCS += drivers/net/prism2.c 121 122# INCDIRS lists the include path 123# 124INCDIRS := 125INCDIRS += include . 126 127############################################################################### 128# 129# Default build target: build the most common targets and print out a 130# helpfully suggestive message 131# 132ALL := bin/blib.a bin/ipxe.dsk bin/ipxe.lkrn bin/ipxe.iso \ 133 bin/ipxe.usb bin/ipxe.pxe bin/undionly.kpxe bin/rtl8139.rom \ 134 bin/8086100e.mrom bin/80861209.rom bin/10500940.rom \ 135 bin/10222000.rom bin/10ec8139.rom bin/1af41000.rom \ 136 bin/8086100f.mrom bin/808610d3.mrom bin/15ad07b0.rom 137 138all : $(ALL) 139 @$(ECHO) '===========================================================' 140 @$(ECHO) 141 @$(ECHO) 'To create a bootable floppy, type' 142 @$(ECHO) ' cat bin/ipxe.dsk > /dev/fd0' 143 @$(ECHO) 'where /dev/fd0 is your floppy drive. This will erase any' 144 @$(ECHO) 'data already on the disk.' 145 @$(ECHO) 146 @$(ECHO) 'To create a bootable USB key, type' 147 @$(ECHO) ' cat bin/ipxe.usb > /dev/sdX' 148 @$(ECHO) 'where /dev/sdX is your USB key, and is *not* a real hard' 149 @$(ECHO) 'disk on your system. This will erase any data already on' 150 @$(ECHO) 'the USB key.' 151 @$(ECHO) 152 @$(ECHO) 'To create a bootable CD-ROM, burn the ISO image ' 153 @$(ECHO) 'bin/ipxe.iso to a blank CD-ROM.' 154 @$(ECHO) 155 @$(ECHO) 'These images contain drivers for all supported cards. You' 156 @$(ECHO) 'can build more customised images, and ROM images, using' 157 @$(ECHO) ' make bin/<rom-name>.<output-format>' 158 @$(ECHO) 159 @$(ECHO) '===========================================================' 160 161############################################################################### 162# 163# Comprehensive build target: build a selection of cross-platform 164# targets to expose potential build errors that show up only on 165# certain platforms 166# 167everything : 168 $(Q)$(MAKE) --no-print-directory $(ALL) \ 169 bin/3c509.rom bin/intel.rom bin/intel.mrom \ 170 bin-x86_64-pcbios/8086100e.mrom bin-x86_64-pcbios/intel.rom \ 171 bin-x86_64-pcbios/ipxe.usb bin-x86_64-pcbios/ipxe.pxe \ 172 bin-x86_64-pcbios/undionly.kpxe \ 173 bin-i386-efi/ipxe.efi bin-i386-efi/ipxe.efidrv \ 174 bin-i386-efi/ipxe.efirom \ 175 bin-x86_64-efi/ipxe.efi bin-x86_64-efi/ipxe.efidrv \ 176 bin-x86_64-efi/ipxe.efirom \ 177 bin-i386-linux/tap.linux bin-x86_64-linux/tap.linux \ 178 bin-i386-linux/tests.linux bin-x86_64-linux/tests.linux 179 180############################################################################### 181# 182# VMware build target: all ROMs used with VMware 183# 184vmware : bin/8086100f.mrom bin/808610d3.mrom bin/10222000.rom bin/15ad07b0.rom 185 @$(ECHO) '===========================================================' 186 @$(ECHO) 187 @$(ECHO) 'Available ROMs:' 188 @$(ECHO) ' bin/8086100f.mrom -- intel/e1000' 189 @$(ECHO) ' bin/808610d3.mrom -- intel/e1000e' 190 @$(ECHO) ' bin/10222000.rom -- vlance/pcnet32' 191 @$(ECHO) ' bin/15ad07b0.rom -- vmxnet3' 192 @$(ECHO) 193 @$(ECHO) 'For more information, see http://ipxe.org/howto/vmware' 194 @$(ECHO) 195 @$(ECHO) '===========================================================' 196 197############################################################################### 198# 199# Build targets that do nothing but might be tried by users 200# 201configure : 202 @$(ECHO) "No configuration needed." 203 204install : 205 @$(ECHO) "No installation required." 206 207############################################################################### 208# 209# Version number calculations 210# 211ifneq ($(wildcard ../.git),) 212VERSIONS := $(shell git describe --tags --always --long --abbrev=1 --match "v*") 213VERSION_TUPLE := $(subst ., ,$(subst -, ,$(patsubst v%,%,$(VERSIONS)))) 214VERSION_MAJOR := $(word 1,$(VERSION_TUPLE)) 215VERSION_MINOR := $(word 2,$(VERSION_TUPLE)) 216VERSION_PATCH := $(word 3,$(VERSION_TUPLE)) 217ifeq ($(word 4,$(VERSION_TUPLE)),0) 218EXTRAVERSION := 219else 220EXTRAVERSION := + 221endif 222GITVERSION = $(word 5,$(VERSION_TUPLE)) 223else 224VERSION_MAJOR = 1 225VERSION_MINOR = 0 226VERSION_PATCH = 0 227EXTRAVERSION = + 228endif 229MM_VERSION = $(VERSION_MAJOR).$(VERSION_MINOR) 230VERSION = $(MM_VERSION).$(VERSION_PATCH)$(EXTRAVERSION) 231ifneq ($(GITVERSION),) 232VERSION += ($(GITVERSION)) 233endif 234version : 235 @$(ECHO) "$(VERSION)" 236 237############################################################################### 238# 239# Predefined build shortcuts (for e.g. bin/ipxe.iso) 240 241# All drivers (excluding USB) 242# 243DRIVERS_ipxe = $(DRIVERS_net) $(DRIVERS_infiniband) \ 244 $(DRIVERS_xen) $(DRIVERS_hyperv) 245 246# Raspberry Pi 247# 248DRIVERS_rpi = smsc95xx lan78xx 249 250############################################################################### 251# 252# Drag in the bulk of the build system 253# 254 255MAKEDEPS += Makefile.housekeeping 256include Makefile.housekeeping 257