# GNU Makefile for Broadcom Dongle Host Driver # # Copyright (C) 1999-2010, Broadcom Corporation # # Unless you and Broadcom execute a separate written software license # agreement governing use of this software, this software is licensed to you # under the terms of the GNU General Public License version 2 (the "GPL"), # available at http://www.broadcom.com/licenses/GPLv2.php, with the # following added to such license: # # As a special exception, the copyright holders of this software give you # permission to link this software with independent modules, and to copy and # distribute the resulting executable under terms of your choice, provided that # you also meet, for each linked independent module, the terms and conditions of # the license of that module. An independent module is a module which is not # derived from this software. The special exception does not apply to any # modifications of the software. # # Notwithstanding the above, under no circumstances may you combine this # software in any way with any other Broadcom software provided under a license # other than the GPL, without Broadcom's express prior written consent. # # $Id: Makefile,v 1.55.2.6.2.10.6.28 2010/03/26 21:49:31 Exp $ # # Try a couple of places for LINUXDIR if not specified ifeq ($(LINUXDIR),) ifeq ($(LINUXVER),) # Neither one is specified, use uname for version LINUXVER := $(shell uname -r) endif ifneq ($(wildcard /lib/modules/$(LINUXVER)/build/include/linux/version.h),) LINUXDIR := /lib/modules/$(LINUXVER)/build else ifneq ($(wildcard /tools/linux/src/linux-$(LINUXVER)/include/linux/version.h),) LINUXDIR := /tools/linux/src/linux-$(LINUXVER) else LINUXDIR := /usr/src/linux endif endif endif # Derive LINUXVER from LINUXDIR MYKERNEL_RELEASE_KEYWORD:="KERNELRELEASE[[:space:]]*=.*kernel.release" MYKERNEL_DEFINITION:=$(if \ $(shell grep $(MYKERNEL_RELEASE_KEYWORD) $(LINUXDIR)/Makefile 2> /dev/null),\ grep $(MYKERNEL_RELEASE_KEYWORD) $(LINUXDIR)/Makefile,\ cat $(LINUXDIR)/Makefile) LINUXVER:=$(shell ($(MYKERNEL_DEFINITION); echo "show_kernel_version_number$$$$:;@echo \$$(KERNELRELEASE)") 2> /dev/null | $(MAKE) --no-print-directory -k -C $(LINUXDIR) MYUNAME="" -f - show_kernel_version_number$$$$ 2> /dev/null) ifeq ($(LINUXVER),) $(error LINUXVER=$(LINUXVER) is empty) endif # LINUXVER $(warning Found LINUXVER=$(LINUXVER)) $(warning Found LINUXDIR=$(LINUXDIR)) # check if 2.4 kernel or 2.5+ kernel BCM_KVER:=$(shell echo $(LINUXVER) | cut -c1-3 | sed 's/2\.[56]/2\.6/') # Allow CROSS_COMPILE to specify compiler base CC := $(CROSS_COMPILE)gcc LD := $(CROSS_COMPILE)ld NM := $(CROSS_COMPILE)nm OBJCOPY := $(CROSS_COMPILE)objcopy # driver source base and C file path ifeq ($(SRCBASE),) SRCBASE := $(shell /bin/pwd)/../.. endif vpath %.c $(SRCBASE)/dhd/sys $(SRCBASE)/shared $(SRCBASE)/bcmsdio/sys $(SRCBASE)/wl/sys $(SRCBASE)/crypto ## Initialize DFLAGS DFLAGS := # basic options (defines in DFLAGS, includes in IFLAGS) DFLAGS += -DLINUX -DSRCBASE=\"$(SRCBASE)\" -DBCMDRIVER -DBCMDONGLEHOST -DDHDTHREAD -DBCMWPA2 -DBCMWAPI_WPI DFLAGS += -DUNRELEASEDCHIP ifeq ($(BCMQT),1) DFLAGS += -DBCMSLTGT -DBCMQT endif ifeq ($(WLTEST),1) DFLAGS += -DWLTEST -DIOCTL_RESP_TIMEOUT=20000 DFLAGS += -DDHD_SPROM endif # Past 2.6.29 kernels, arch specific bits are re-organized in linux kernel. So # append new include paths to existing ones to get 2.6.29+ kernels compile # Default DHDARCH is x86 ifdef ARCH DHDARCH ?= $(ARCH) else DHDARCH ?= x86 endif ifneq ($(findstring native,$(TARGET)),) DHDARCH = x86 endif ifneq ($(findstring mips,$(TARGET)),) DHDARCH = mips endif ifneq ($(findstring arm,$(TARGET)),) DHDARCH = arm endif # First include from linux kernel dirs IFLAGS := -I$(LINUXDIR)/include IFLAGS += -I$(LINUXDIR)/include/asm/mach-default # Followed by 2.6.29+ specific paths IFLAGS += -I$(LINUXDIR)/arch/$(DHDARCH)/include IFLAGS += -I$(LINUXDIR)/arch/$(DHDARCH)/include/asm/mach-default # From current workspace IFLAGS += -I. IFLAGS += -I$(SRCBASE)/include IFLAGS += -I$(SRCBASE)/shared IFLAGS += -I$(SRCBASE)/dhd/sys IFLAGS += -I$(SRCBASE)/dongle IFLAGS += -I$(SRCBASE)/wl/sys ifneq ($(wildcard $(LINUXDIR)/.config),) include $(LINUXDIR)/.config else # This is dangerous, since we don't know if they are really configured. CONFIG_WIRELESS_EXT=y DFLAGS += -DCONFIG_WIRELESS_EXT endif ifeq ($(CONFIG_MMC_MSM7X00A),y) DFLAGS += -Dlinux DFLAGS += -DDHD_SDALIGN=64 -DMAX_HDR_READ=64 -DDHD_FIRSTREAD=64 endif WFLAGS := -Wall -Wstrict-prototypes ifeq (,$(findstring 2.4.18,$(LINUXVER))) WFLAGS += -Werror endif CFILES:= dhd_linux.c linux_osl.c bcmutils.c dhd_common.c dhd_custom_gpio.c CFILES += siutils.c sbutils.c aiutils.c hndpmu.c # threading options ifneq ($(findstring -nothread-,-$(TARGET)-),) DFLAGS += -UDHDTHREAD endif # Building gpl provides thread prioritization ifneq ($(findstring -gpl-,-$(TARGET)-),) CFILES += dhd_linux_sched.c DFLAGS += -DDHD_GPL -DDHD_SCHED endif ifeq ($(WLTEST),1) CFILES += bcmsrom.c bcmotp.c endif ifeq ($(CONFIG_NET_RADIO),y) CFILES += bcmwifi.c ifeq ($(findstring -cfg-,-$(TARGET)-),) CFILES += wl_iw.c endif else ifeq ($(CONFIG_WIRELESS_EXT),y) CFILES += bcmwifi.c ifeq ($(findstring -cfg-,-$(TARGET)-),) CFILES += wl_iw.c endif endif endif OFILES=$(CFILES:.c=.o) # Make debug a separate option ifneq ($(findstring -debug-,-$(TARGET)-),) DFLAGS += -DDHD_DEBUG -DSDTEST endif # Make big-endian a separate option ifneq ($(findstring -be-,-$(TARGET)-),) DFLAGS += -DIL_BIGENDIAN endif ifneq ($(findstring -dnglimage-,-$(TARGET)-),) ## Embeddable dongle image name DNGL_IMAGE_NAME ?= 4325b0/sdio-g-cdc-reclaim-idsup-wme DFLAGS += -DBCMEMBEDIMAGE -DIMAGE_NAME="$(DNGL_IMAGE_NAME)" IFLAGS += -I$(SRCBASE)/dongle/rte/wl/builds/$(DNGL_IMAGE_NAME) endif ifneq ($(findstring -cdc-,-$(TARGET)-),) DFLAGS += -DBDC -DTOE DFLAGS += -DDHD_BCMEVENTS -DSHOW_EVENTS CFILES += dhd_cdc.c ifneq ($(findstring -apsta-,-$(TARGET)-),) DFLAGS += -DAP -DAPSTA_PINGTEST endif endif ifneq ($(findstring -rndis-,-$(TARGET)-),) DFLAGS += -DRNDIS CFILES += dhd_rndis.c endif ifneq ($(findstring -usb-,-$(TARGET)-),) DFLAGS += -DBCMDHDUSB CFILES += dhd_usb_linux.c endif ifneq ($(findstring -sdio-,-$(TARGET)-),) DFLAGS += -DBCMSDIO CFILES += dhd_sdio.c endif ifneq ($(findstring -sdstd-,$(TARGET)-),) DFLAGS += -DBCMSDIO -DBCMSDIOH_STD CFILES += dhd_sdio.c bcmsdh.c bcmsdstd.c bcmsdstd_linux.c bcmsdh_linux.c endif ifneq ($(findstring -softap-,-$(TARGET)-),) DFLAGS += -DSOFTAP CFILES += sha1.c md5.c endif ifneq ($(findstring -cfg-,-$(TARGET)-),) DFLAGS += -DWL_CFG80211 CFILES += wl_cfg80211.c endif ifneq ($(findstring -oob-,-$(TARGET)-),) DFLAGS += -DOOB_INTR_ONLY DFLAGS += -DHW_OOB DFLAGS += -DMMC_SDIO_ABORT else ifneq ($(findstring -sdmmc-,-$(TARGET)-),) DFLAGS += -DSDIO_ISR_THREAD endif endif ifneq ($(findstring -sdmmc-,-$(TARGET)-),) DFLAGS += -DBCMSDIO -DDHD_GPL -DBCMLXSDMMC -DBCMPLATFORM_BUS CFILES += dhd_sdio.c bcmsdh_sdmmc.c bcmsdh.c bcmsdh_linux.c bcmsdh_sdmmc_linux.c endif ifneq ($(findstring -sdspi-,$(TARGET)-),) DFLAGS += -DBCMSDIO -DBCMSDIOH_SPI -DTESTDONGLE # -DBCMSDYIELD CFILES += dhd_sdio.c bcmsdh.c bcmsdspi.c bcmsdspi_linux.c bcmsdh_linux.c endif ifneq ($(findstring -pci,$(TARGET)-),) CFILES += bcmpcispi.c endif ifneq ($(findstring -sdext-,$(TARGET)-),) DFLAGS += -DBCMSDIO -DTESTDONGLE CFILES += dhd_sdio.c endif ifneq ($(findstring -intc1,$(shell echo $(LINUXVER))),) DFLAGS += -DSANDGATE2G endif CFLAGS += -fshort-wchar $(DFLAGS) $(WFLAGS) $(IFLAGS) $(CUSTOM_FLAGS) LDFLAGS := -r MODULES := dhd.o ifeq ($(BCM_KVER), 2.6) ##Kernel module names in 2.6 kernel have .ko suffix KMODULES:=dhd.ko ifneq ($(findstring -nexus-,$(TARGET)-),) KMODULES:=bcm4329.ko endif else KMODULES:=$(MODULES) endif # host options HOSTCC := $(CC) ifneq ($(BCM_KVER), 2.6) HOSTCFLAGS := $(CFLAGS) $(shell $(MAKE) --no-print-directory -s -C $(LINUXDIR) script 'SCRIPT=@echo $$(CFLAGS) $$(MODFLAGS)') else HOSTCFLAGS := $(CFLAGS) -D__KERNEL__ DHDCFLAGS = $(HOSTCFLAGS) -I$(shell pwd) export DHDCFLAGS DHDOFILES = $(OFILES) export DHDOFILES endif TARGETS := \ dhd-cdc-usb dhd-cdc-sdstd \ dhd-cdc-sdspi-pci dhd-cdc-sdmmc-gpl dhd-cdc-sdmmc-oob-gpl \ dhd-cdc-usb-apsta dhd-cdc-usb-gpl \ dhd-cdc-sdstd-apsta \ dhd-cdc-sdmmc-softap-gpl \ dhd-cdc-sdmmc-cfg-gpl TARGETS += \ dhd-cdc-sdio-dnglimage dhd-cdc-sdspi-pci-dnglimage \ dhd-cdc-gspi-pci #ifdef RNDIS TARGETS += dhd-rndis-usb #endif TARGETS += dhd-cdc-sdext-be TARGETS += dhd-cdc-sdext-be-dnglimage ifneq ($(findstring -intc1,$(shell echo $(LINUXVER))),) TARGETS += dhd-cdc-sdio dhd-cdc-sdiofd # dhd-cdc-sdmmc endif TARGETS += $(foreach tgt, $(TARGETS), $(tgt)-debug) OBJDIR=$(TARGET)-$(LINUXVER)$(if $(BCMQT),-bcmqt) all: $(filter %-sdio %-sdbcm %-sdstd %-usb %sdspi-pci %-sdiofd %-sdmmc, $(TARGETS)) sdio: $(filter %-sdio %-sdbcm %-sdstd, $(TARGETS)) usb: $(filter %-usb, $(TARGETS)) sdspi: $(filter %-sdspi-pci %-sdspi-cheetah, %-sdspi-u2c $(TARGETS)) # Allow making target with the LINUXVER suffix already on it. # (Typical of command line tab completion; trailing slash still not allowed) %-$(LINUXVER): force $(MAKE) $(@:%-$(LINUXVER)=%) $(TARGETS): @echo "MAKING $@" $(MAKE) TARGET=$@ objdir # Show compiler version, for the current target build showenv: @echo "CC = $(CC) (ver=`$(CC) -dumpversion`; host=`hostname`; processor=`uname -m`)" objdir: showenv @echo "Making objdir $(OBJDIR)" @echo "TARGET is $(TARGET)" mkdir -p $(OBJDIR) ifneq ($(BCM_KVER), 2.6) $(MAKE) -C $(OBJDIR) -f $(SRCBASE)/dhd/linux/Makefile SRCBASE=$(SRCBASE) dep endif $(MAKE) -C $(OBJDIR) -f $(SRCBASE)/dhd/linux/Makefile SRCBASE=$(SRCBASE) modules ifeq ($(BCM_KVER), 2.6) $(OBJCOPY) --strip-unneeded $(OBJDIR)/$(KMODULES) $(OBJDIR)/$(KMODULES).stripped else $(OBJCOPY) --strip-unneeded $(OBJDIR)/$(MODULES) $(OBJDIR)/$(MODULES).stripped endif dep: $(foreach file,$(CFILES),.$(file).depend) .%.c.depend: %.c $(HOSTCC) $(HOSTCFLAGS) -M $< > $@ || (rm -f $@; exit 1) .%.c.depend:: touch $@ ifeq ($(BCM_KVER), 2.6) modules: $(OFILES) test -r ./Makefile || ln -s $(SRCBASE)/dhd/linux/makefile.26 ./Makefile $(MAKE) -C $(LINUXDIR) M=$(shell pwd) $(if $(VERBOSE),V=1) modules else modules: $(MODULES) endif $(MODULES): $(OFILES) $(LD) $(LDFLAGS) -o $@ $^ ifeq ($(BCM_KVER), 2.6) %.o: %.c # when make is called from 2.6, vpath doesn't work so we need to link the files. test -r ./$< || ln -s $< . else %.o: %.c $(HOSTCC) $(HOSTCFLAGS) -c -o $@ $< @( \ echo 'ifneq ($$(HOSTCFLAGS),$(HOSTCFLAGS))' ; \ echo '$@: force' ; \ echo 'endif' ; \ ) > .$*.c.flags endif force: clean: rm -rf dhd-* ifneq ($(wildcard .*.depend),) include $(wildcard .*.depend) endif ifneq ($(wildcard .*.flags),) include $(wildcard .*.flags) endif