LICENSE     := GPLv2
VERSION     := 2
DOWNLOADS   := dwc_otg.git usb.archive intel_fb.archive lxip.archive \
               wifi.archive fec.archive libnl.archive wpa_supplicant.archive \
               fw_3160.archive fw_6000.archive fw_6205a.archive fw_6205b.archive \
               fw_7260.archive fw_7265.archive fw_8260.archive fw_1000.archive

#
# Tools
#
$(call check_tool,flex)
$(call check_tool,bison)

FLEX = flex
YACC = bison

#
# The git checkout checks for the existence of SRC_DIR, which is created by the
# Linux extraction, therefore make sure to checkout the GIT sources first.
#
usb.archive: dwc_otg.git


#
# The git checkout checks for the existence of SRC_DIR, which is created by the
# Linux extraction, therefore make sure to checkout the GIT sources first.
#
usb.archive: dwc_otg.git

#
# USB
#
SRC_DIR_USB  := src/lib/usb
VERSION_USB  := 4.4.3
URL(usb)     := https://www.kernel.org/pub/linux/kernel/v4.x/linux-$(VERSION_USB).tar.xz
SHA(usb)     := 336d66925a15ce9077cbf2c38acbdc6c2644e33f
DIR(usb)     := $(SRC_DIR_USB)
TAR_OPT(usb) := --strip-components=1 --files-from - < <(sed 's/-x.x.x/-$(VERSION_USB)/g' $(REP_DIR)/usb.list)
HASH_INPUT   += $(REP_DIR)/usb.list

#
# Raspberry Pi USB controller
#
URL(dwc_otg) := https://github.com/ssumpf/dwc_otg.git
REV(dwc_otg) := r3
DIR(dwc_otg) := $(SRC_DIR_USB)/drivers/usb/host/dwc_otg


#
# Intel framebuffer driver
#
SRC_DIR_INTEL_FB  := src/drivers/framebuffer/intel
VERSION_INTEL_FB  := 4.4.3
URL(intel_fb)     := https://www.kernel.org/pub/linux/kernel/v4.x/linux-$(VERSION_INTEL_FB).tar.xz
SHA(intel_fb)     := 336d66925a15ce9077cbf2c38acbdc6c2644e33f
DIR(intel_fb)     := $(SRC_DIR_INTEL_FB)
TAR_OPT(intel_fb) := --strip-components=1  --files-from - < <(sed 's/-x.x.x/-$(VERSION_INTEL_FB)/g' $(REP_DIR)/intel_fb.list)
HASH_INPUT        += $(REP_DIR)/intel_fb.list

#
# mac80211 stack, iwlwifi sources
#
SRC_DIR_WIFI  := src/lib/wifi
VERSION_WIFI  := 4.4.3
URL(wifi)     := https://www.kernel.org/pub/linux/kernel/v4.x/linux-$(VERSION_WIFI).tar.xz
SHA(wifi)     := 336d66925a15ce9077cbf2c38acbdc6c2644e33f
DIR(wifi)     := $(SRC_DIR_WIFI)
TAR_OPT(wifi) := --strip-components=1  --files-from - < <(sed 's/-x.x.x/-$(VERSION_WIFI)/g' $(REP_DIR)/wifi.list)
HASH_INPUT    += $(REP_DIR)/wifi.list

#
# IP stack sources
#
SRC_DIR_LXIP  := src/lib/lxip
VERSION_LXIP  := 4.4.3
URL(lxip)     := https://www.kernel.org/pub/linux/kernel/v4.x/linux-$(VERSION_LXIP).tar.xz
SHA(lxip)     := 336d66925a15ce9077cbf2c38acbdc6c2644e33f
DIR(lxip)     := $(SRC_DIR_LXIP)
TAR_OPT(lxip) := --strip-components=1  --files-from - < <(sed 's/-x.x.x/-$(VERSION_LXIP)/g' $(REP_DIR)/lxip.list)
HASH_INPUT    += $(REP_DIR)/lxip.list

#
# Freescale Ethernet controller
#
SRC_DIR_FEC  := src/drivers/nic/fec
VERSION_FEC  := 4.4.3
URL(fec)     := https://www.kernel.org/pub/linux/kernel/v4.x/linux-$(VERSION_FEC).tar.xz
SHA(fec)     := 336d66925a15ce9077cbf2c38acbdc6c2644e33f
DIR(fec)     := $(SRC_DIR_FEC)
TAR_OPT(fec) := --strip-components=1  --files-from - < <(sed 's/-x.x.x/-$(VERSION_FEC)/g'     $(REP_DIR)/fec.list)
HASH_INPUT   += $(REP_DIR)/fec.list

#
# libnl sources
#
URL(libnl) := https://github.com/thom311/libnl/releases/download/libnl3_2_25/libnl-3.2.25.tar.gz
SHA(libnl) := b7a4981f7edf7398256d35fd3c0b87bc84ae27d1
DIR(libnl) := src/lib/libnl


default: generate_libnl_files
generate_libnl_files: $(DOWNLOADS)
	@$(MSG_PREFIX)"generate libnl files "
	$(VERBOSE)$(FLEX) --header-file=${DIR(libnl)}/lib/route/pktloc_grammar.h \
	                  -o ${DIR(libnl)}/lib/route/pktloc_grammar.c            \
	                   ${DIR(libnl)}/lib/route/pktloc_grammar.l
	$(VERBOSE)$(YACC) -d -o ${DIR(libnl)}/lib/route/pktloc_syntax.c \
	                  ${DIR(libnl)}/lib/route/pktloc_syntax.y
	$(VERBOSE)$(FLEX) --header-file=${DIR(libnl)}/lib/route/cls/ematch_grammar.h \
	                  -o ${DIR(libnl)}/lib/route/cls/ematch_grammar.c            \
	                  ${DIR(libnl)}/lib/route/cls/ematch_grammar.l
	$(VERBOSE)$(YACC) -d -o ${DIR(libnl)}/lib/route/cls/ematch_syntax.c \
	                  ${DIR(libnl)}/lib/route/cls/ematch_syntax.y

#
# wpa_supplicant sources
#
URL(wpa_supplicant) := https://w1.fi/releases/wpa_supplicant-2.2.tar.gz
SHA(wpa_supplicant) := 0c2ff4fd2e2f6325147cca0357d6c9f524efa26a
DIR(wpa_supplicant) := src/app/wpa_supplicant

#
# Firmware images for iwlwifi Intel Wireless 3160
#
URL(fw_3160) := https://wireless.wiki.kernel.org/_media/en/users/drivers/iwlwifi-3160-ucode-16.242414.0.tgz
SHA(fw_3160) := 4777e85d75d3dc17ba40dd32f30cd9ebdcf9e533
DIR(fw_3160) := firmware

#
# Firmware images for iwlwifi Ultimate-N 6300 and Advanced-N 6200
#
URL(fw_6000) := https://wireless.wiki.kernel.org/_media/en/users/drivers/iwlwifi-6000-ucode-9.221.4.1.tgz
SHA(fw_6000) := a888cf54974702594e82bcbfca20c26d8f906e9f
DIR(fw_6000) := firmware

#
# Firmware images for iwlwifi Advanced-N 6205
#
URL(fw_6205a) := https://wireless.wiki.kernel.org/_media/en/users/drivers/iwlwifi-6000g2a-ucode-18.168.6.1.tgz
SHA(fw_6205a) := a542c82dba96e0bfb1b0e01817a59575c5c87fc4
DIR(fw_6205a) := firmware

#
# Firmware images for iwlwifi Advanced-N 6230 / 6235 and Wireless-N 130 / 1030
#
URL(fw_6205b) := https://wireless.wiki.kernel.org/_media/en/users/drivers/iwlwifi-6000g2b-ucode-18.168.6.1.tgz
SHA(fw_6205b) := f4c72b75ae8415661182d63154234dc0a55bc3db
DIR(fw_6205b) := firmware

#
# Firmware images for iwlwifi Wireless 7260
#
URL(fw_7260) := https://wireless.wiki.kernel.org/_media/en/users/drivers/iwlwifi-7260-ucode-16.242414.0.tgz
SHA(fw_7260) := e167ae4d3ed5ac5ca4d8b5f154d47324809717e6
DIR(fw_7260) := firmware

#
# Firmware images for iwlwifi Wireless 7265
#
URL(fw_7265) := https://wireless.wiki.kernel.org/_media/en/users/drivers/iwlwifi-7265-ucode-16.242414.0.tgz
SHA(fw_7265) := 2a408809f51d552aa2c5d26c9a582d7729ce612b
DIR(fw_7265) := firmware

#
# Firmware images for iwlwifi Wireless 8260
#
URL(fw_8260) := https://wireless.wiki.kernel.org/_media/en/users/drivers/iwlwifi-8000-ucode-16.242414.0.tgz
SHA(fw_8260) := ec5ee829aeebab93e1228848a7675e4469ab3ce2
DIR(fw_8260) := firmware

#
# Firmware images for iwlwifi Wireless-N 1000
#
URL(fw_1000) := https://wireless.wiki.kernel.org/_media/en/users/drivers/iwlwifi-1000-ucode-39.31.5.1.tgz
SHA(fw_1000) := 6b2d9e0fe18ffa98c8335f989833ef12a2f4604b
DIR(fw_1000) := firmware

https://wireless.wiki.kernel.org/_media/en/users/drivers/iwlwifi-1000-ucode-39.31.5.1.tgz

#
# Patches
#
PATCHES := $(addprefix patches/,$(notdir $(wildcard $(REP_DIR)/patches/w*.patch)))
PATCHES += $(addprefix patches/,$(notdir $(wildcard $(REP_DIR)/patches/libnl*.patch)))
PATCHES += $(addprefix patches/,$(notdir $(wildcard $(REP_DIR)/patches/lxip*.patch)))
PATCHES += $(addprefix patches/,$(notdir $(wildcard $(REP_DIR)/patches/intel*.patch)))
PATCHES += $(addprefix patches/,$(notdir $(wildcard $(REP_DIR)/patches/usb*.patch)))
PATCHES += $(addprefix patches/,$(notdir $(wildcard $(REP_DIR)/patches/intel*.patch)))
PATCHES += $(addprefix patches/,$(notdir $(wildcard $(REP_DIR)/patches/fec_*.patch)))

#IP stack
LXIP_OPT = -p1 -d$(SRC_DIR_LXIP)
PATCH_OPT(patches/lxip_icmp.patch)         := $(LXIP_OPT)
PATCH_OPT(patches/lxip_ip_config.patch)    := $(LXIP_OPT)
PATCH_OPT(patches/lxip_netlink.patch)      := $(LXIP_OPT)
PATCH_OPT(patches/lxip_request_sock.patch) := $(LXIP_OPT)
PATCH_OPT(patches/lxip_sk_wq.patch)        := $(LXIP_OPT)
PATCH_OPT(patches/lxip_skbuff_cast.patch)  := $(LXIP_OPT)

# WIFI
WIFI_OPT = -p1 -d$(SRC_DIR_WIFI)
PATCH_OPT(patches/wifi.patch)        := $(WIFI_OPT)
PATCH_OPT(patches/wifi_crypto.patch) := $(WIFI_OPT)
PATCH_OPT(patches/wifi_mem.patch)    := $(WIFI_OPT)

# libnl
PATCH_OPT(patches/libnl.patch) := -p1 -d ${DIR(libnl)}

# WPA supplicant
PATCH_OPT(patches/wpa_supplicant.patch) := -p1 -d ${DIR(wpa_supplicant)}

# USB
USB_OPT = -p1 -d$(SRC_DIR_USB)
PATCH_OPT(patches/usb_ax88179.patch)     := $(USB_OPT)
PATCH_OPT(patches/usb_csum.patch)        := $(USB_OPT)
PATCH_OPT(patches/usb_evdev.patch)       := $(USB_OPT)
PATCH_OPT(patches/usb_mem.patch)         := $(USB_OPT)
PATCH_OPT(patches/usb_usbnet.patch)      := $(USB_OPT)
PATCH_OPT(patches/usb_rndis.patch)       := $(USB_OPT)

# INTEL FB
PATCH_OPT(patches/intel_fb_export_api.patch) := -p1 -d$(SRC_DIR_INTEL_FB)
PATCH_OPT(patches/intel_fb_drm_remove.patch) := -p1 -d$(SRC_DIR_INTEL_FB)
PATCH_OPT(patches/intel_fb_backlight.patch)  := -p1 -d$(SRC_DIR_INTEL_FB)

# Freescale NIC
PATCH_OPT(patches/fec_skbuff_cast.patch) := -p1 -d$(SRC_DIR_FEC)

# vi: set ft=make :
