blob: 66715100b7cae044a78482faec2fa97ef78228ec [file] [log] [blame]
# GNU Makefile for Broadcom BCMSDH Lower-level Driver
#
# Copyright (C) 1999-2011, 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.12 2009-04-09 19:40:51 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
LINUXVER := $(shell { cat $(LINUXDIR)/Makefile; \
echo "bcm$$$$:;@echo \$$(KERNELRELEASE)"; } | \
$(MAKE) --no-print-directory $(if $(ARCH),ARCH=$(ARCH),) -C $(LINUXDIR) -f - bcm$$$$)
# 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)/shared $(SRCBASE)/bcmsdio/sys $(SRCBASE)/wl/sys
## Initialize DFLAGS
DFLAGS :=
# basic options (defines in DFLAGS, includes in IFLAGS)
DFLAGS += -DLINUX -DSRCBASE=\"$(SRCBASE)\" -DBCMDRIVER -DBCMSDH_MODULE
DFLAGS += -DBCMDONGLEHOST
DFLAGS += -DBCM4325
IFLAGS := -I$(LINUXDIR)/include -I$(LINUXDIR)/include/asm/mach-default -I. -I$(SRCBASE)/include -I$(SRCBASE)/shared -I$(SRCBASE)/dongle -I$(SRCBASE)/wl/sys
WFLAGS := -Wall -Wstrict-prototypes
ifeq (,$(findstring 2.4.18,$(LINUXVER)))
WFLAGS += -Werror
endif
CFILES:= bcmsdh_linux.c linux_osl.c bcmsdh.c
CFILES += siutils.c sbutils.c aiutils.c bcmutils.c hndpmu.c
OFILES=$(CFILES:.c=.o)
# Make debug a separate option
ifneq ($(findstring -debug-,-$(TARGET)-),)
DFLAGS += -DBCMDBG -DSDTEST
endif
# Make big-endian a separate option
ifneq ($(findstring -be-,-$(TARGET)-),)
DFLAGS += -DIL_BIGENDIAN
endif
ifneq ($(findstring -sdstd,$(TARGET)-),)
DFLAGS += -DBCMSDIO -DBCMSDIOH_STD
CFILES += bcmsdstd.c bcmsdstd_linux.c
endif
ifneq ($(findstring -intc1,$(shell echo $(LINUXVER))),)
DFLAGS += -DSANDGATE2G
endif
ifneq ($(findstring -sdspi-,$(TARGET)-),)
DFLAGS += -DBCMSDIO -DBCMSDIOH_SPI -DTESTDONGLE
CFILES += bcmsdspi.c bcmsdspi_linux.c
endif
CFLAGS += -fshort-wchar $(DFLAGS) $(WFLAGS) $(IFLAGS)
LDFLAGS := -r
MODULES := bcmsdh_driver.o
ifeq ($(BCM_KVER), 2.6)
##Kernel module names in 2.6 kernel have .ko suffix
KMODULES:=bcmsdh_driver.ko
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__
BCMSDHCFLAGS = $(HOSTCFLAGS) -I$(shell pwd)
export BCMSDHCFLAGS
BCMSDHOFILES = $(OFILES)
export BCMSDHOFILES
endif
TARGETS := \
bcmsdh-sdstd
ifneq ($(findstring -intc1,$(shell echo $(LINUXVER))),)
TARGETS := bcmsdh-sdiofd
endif
TARGETS += $(foreach tgt, $(TARGETS), $(tgt)-debug)
OBJDIR=$(TARGET)-$(LINUXVER)$(if $(BCMQT),-bcmqt)
all: $(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
objdir:
@echo "Making objdir $(OBJDIR)"
@echo "TARGET is $(TARGET)"
mkdir -p $(OBJDIR)
$(MAKE) -C $(OBJDIR) -f ../Makefile SRCBASE=$(SRCBASE) dep
$(MAKE) -C $(OBJDIR) -f ../Makefile SRCBASE=$(SRCBASE) modules
ifeq ($(BCM_KVER), 2.6)
$(OBJCOPY) --strip-unneeded $(OBJDIR)/bcmsdh_driver.ko $(OBJDIR)/bcmsdh_driver.ko.stripped
else
$(OBJCOPY) --strip-unneeded $(OBJDIR)/bcmsdh_driver.o $(OBJDIR)/bcmsdh_driver.o.stripped
endif
dep: $(foreach file,$(CFILES),.$(file).depend)
.%.c.depend: %.c
$(HOSTCC) $(HOSTCFLAGS) -M $< > $@
.%.c.depend::
touch $@
ifeq ($(BCM_KVER), 2.6)
modules: $(OFILES)
test -r ./Makefile || ln -s ../makefile.26 ./Makefile
$(MAKE) -C $(LINUXDIR) M=$(shell pwd) $(if $(VERBOSE),V=1) modules
else
modules: $(MODULES)
endif
bcmsdh_driver.o: $(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 bcmsdh-*
ifneq ($(wildcard .*.depend),)
include $(wildcard .*.depend)
endif
ifneq ($(wildcard .*.flags),)
include $(wildcard .*.flags)
endif