247 lines
		
	
	
		
			7.8 KiB
		
	
	
	
		
			Makefile
		
	
	
	
	
	
			
		
		
	
	
			247 lines
		
	
	
		
			7.8 KiB
		
	
	
	
		
			Makefile
		
	
	
	
	
	
| #
 | |
| 
 | |
| # Copyright (c) 2007-2012 Luis R. Rodriguez <mcgrof@frijolero.org>
 | |
| #
 | |
| # Permission to use, copy, modify, and/or distribute this software for any
 | |
| # purpose with or without fee is hereby granted, provided that the above
 | |
| # copyright notice and this permission notice appear in all copies.
 | |
| #
 | |
| # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
 | |
| # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
 | |
| # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
 | |
| # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
 | |
| # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
 | |
| # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
 | |
| # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 | |
| 
 | |
| export KMODDIR?=       updates
 | |
| KMODDIR_ARG:=   "INSTALL_MOD_DIR=$(KMODDIR)"
 | |
| ifneq ($(origin KLIB), undefined)
 | |
| KMODPATH_ARG:=  "INSTALL_MOD_PATH=$(KLIB)"
 | |
| else
 | |
| export KLIB:=          /lib/modules/$(shell uname -r)
 | |
| endif
 | |
| export KLIB_BUILD ?=	$(KLIB)/build
 | |
| export MAKE
 | |
| 
 | |
| DESTDIR?=
 | |
| 
 | |
| ifneq ($(KERNELRELEASE),)
 | |
| 
 | |
| -include $(COMPAT_CONFIG)
 | |
| include $(COMPAT_CONFIG_CW)
 | |
| 
 | |
| NOSTDINC_FLAGS := -I$(M)/include/ \
 | |
| 	-include $(M)/include/linux/compat-2.6.h \
 | |
| 	$(CFLAGS)
 | |
| 
 | |
| obj-y := compat/
 | |
| 
 | |
| obj-$(CONFIG_COMPAT_RFKILL) += net/rfkill/
 | |
| 
 | |
| ifeq ($(BT),)
 | |
| obj-$(CONFIG_COMPAT_WIRELESS) += net/wireless/
 | |
| obj-$(CONFIG_COMPAT_WIRELESS_MODULES) += drivers/net/wireless/
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| ifeq ($(CONFIG_STAGING_EXCLUDE_BUILD),)
 | |
| endif
 | |
| 
 | |
| endif
 | |
| 
 | |
| 
 | |
| else
 | |
| 
 | |
| export PWD :=	$(shell pwd)
 | |
| 
 | |
| # The build will fail if there is any space in PWD.
 | |
| ifneq (,$(findstring  $() ,$(PWD)))
 | |
| $(error "The path to this compat-drivers directory has spaces in it." \
 | |
| 	"Please put it somewhere where there is no space")
 | |
| endif
 | |
| 
 | |
| export CFLAGS += \
 | |
|         -DCOMPAT_BASE="\"$(shell cat $(PWD)/.compat_base)\"" \
 | |
|         -DCOMPAT_BASE_TREE="\"$(shell cat $(PWD)/.compat_base_tree)\"" \
 | |
|         -DCOMPAT_BASE_TREE_VERSION="\"$(shell cat $(PWD)/.compat_base_tree_version)\"" \
 | |
|         -DCOMPAT_PROJECT="\"Compat-drivers\"" \
 | |
|         -DCOMPAT_VERSION="\"$(shell cat $(PWD)/.compat_version)\""\
 | |
|         -DCONFIG_ATH6KL_BAM2BAM
 | |
| 
 | |
| # These exported as they are used by the scripts
 | |
| # to check config and compat autoconf
 | |
| export COMPAT_CONFIG_CW=$(PWD)/config.mk
 | |
| export COMPAT_CONFIG=$(PWD)/.config
 | |
| export CONFIG_CHECK=$(PWD)/.config.mk_md5sum.txt
 | |
| export COMPAT_AUTOCONF=include/linux/compat_autoconf.h
 | |
| export CREL=$(shell cat $(PWD)/.compat_version)
 | |
| export CREL_PRE:=.compat_autoconf_
 | |
| export CREL_CHECK:=$(PWD)/$(CREL_PRE)$(CREL)
 | |
| 
 | |
| all: modules
 | |
| 
 | |
| $(COMPAT_CONFIG): ;
 | |
| 
 | |
| modules: $(CREL_CHECK)
 | |
| 	$(MAKE) -C $(KLIB_BUILD) M=$(PWD) modules
 | |
| 	@touch $@
 | |
| 
 | |
| bt: $(CREL_CHECK)
 | |
| 	+@./scripts/check_config.sh
 | |
| 	$(MAKE) -C $(KLIB_BUILD) M=$(PWD) BT=TRUE modules
 | |
| 	@touch $@
 | |
| 
 | |
| # We use a CREL_CHECK variable which will depend on the environment used to
 | |
| # build. If the environment requirements change it forces a reconfiguration
 | |
| # check.  This means we force a new reconfiguration check if a the user gets a
 | |
| # new updates of compat-drivers or when the user updates the $(COMPAT_CONFIG)
 | |
| # file.
 | |
| # XXX: add kernel target to the CREL_CHECK mix, this would ensure we also
 | |
| # reconfigure and build again fresh if we detect a new target kernel is
 | |
| # being used.
 | |
| $(CREL_CHECK):
 | |
| 	@# Force to regenerate compat autoconf
 | |
| 	+@./compat/scripts/gen-compat-config.sh > $(COMPAT_CONFIG)
 | |
| 	@rm -f $(CONFIG_CHECK)
 | |
| 	+@./scripts/check_config.sh
 | |
| 	@md5sum $(COMPAT_CONFIG_CW) > $(CONFIG_CHECK)
 | |
| 	@touch $@
 | |
| 
 | |
| btinstall: btuninstall bt-install-modules
 | |
| 
 | |
| bt-install-modules: bt
 | |
| 	$(MAKE) -C $(KLIB_BUILD) M=$(PWD) $(KMODDIR_ARG) $(KMODPATH_ARG) BT=TRUE \
 | |
| 		modules_install
 | |
| 	@/sbin/depmod -ae
 | |
| 	@echo
 | |
| 	@echo Now run:
 | |
| 	@echo
 | |
| 	@echo sudo make btunload:
 | |
| 	@echo
 | |
| 	@echo And then load the needed bluetooth modules. If unsure reboot.
 | |
| 	@echo
 | |
| 
 | |
| btuninstall:
 | |
| 	@# New location, matches upstream
 | |
| 	@rm -rf $(KLIB)/$(KMODDIR)/net/bluetooth/
 | |
| 	@rm -rf $(KLIB)/$(KMODDIR)/drivers/bluetooth/
 | |
| 	@# Lets only remove the stuff we are sure we are providing
 | |
| 	@# on the misc directory.
 | |
| 	@/sbin/depmod -ae
 | |
| 	@echo
 | |
| 
 | |
| btclean:
 | |
| 	$(MAKE) -C /lib/modules/$(shell uname -r)/build M=$(PWD) BT=TRUE clean
 | |
| 	@rm -f $(CREL_PRE)*
 | |
| 
 | |
| install: uninstall install-modules install-scripts
 | |
| 
 | |
| install-modules: modules
 | |
| 	$(MAKE) -C $(KLIB_BUILD) M=$(PWD) $(KMODDIR_ARG) $(KMODPATH_ARG) \
 | |
| 		modules_install
 | |
| 
 | |
| install-scripts:
 | |
| 	@# All the scripts we can use
 | |
| 	@mkdir -p $(DESTDIR)/usr/lib/compat-drivers/
 | |
| 	@install scripts/modlib.sh	$(DESTDIR)/usr/lib/compat-drivers/
 | |
| 	@install scripts/madwifi-unload	$(DESTDIR)/usr/sbin/
 | |
| 	@# This is to allow switching between drivers without blacklisting
 | |
| 	@install scripts/athenable	$(DESTDIR)/usr/sbin/
 | |
| 	@install scripts/b43enable	$(DESTDIR)/usr/sbin/
 | |
| 	@install scripts/iwl-enable	$(DESTDIR)/usr/sbin/
 | |
| 	@install scripts/athload	$(DESTDIR)/usr/sbin/
 | |
| 	@install scripts/b43load	$(DESTDIR)/usr/sbin/
 | |
| 	@install scripts/iwl-load	$(DESTDIR)/usr/sbin/
 | |
| 	@if [ $(shell modinfo ath_pci > /dev/null 2>&1 && echo 1) ]; then \
 | |
| 		echo -n "Note: madwifi detected, we're going to disable it. "  ;\
 | |
| 		echo "If you would like to enable it later you can run:"  ;\
 | |
| 		echo "    sudo athenable madwifi"  ;\
 | |
| 		echo ;\
 | |
| 		echo Running athenable ath5k...;\
 | |
| 		$(DESTDIR)/usr/sbin/athenable ath5k ;\
 | |
| 	fi
 | |
| 	@if [ $(shell modinfo iwl4965 > /dev/null 2>&1 && echo 1) ]; then \
 | |
| 		echo ;\
 | |
| 		echo -n "Note: iwl4965 detected, we're going to disable it. "  ;\
 | |
| 		echo "If you would like to enable it later you can run:"  ;\
 | |
| 		echo "    sudo iwl-load iwl4965"  ;\
 | |
| 		echo ;\
 | |
| 		echo Running iwl-enable iwlagn...;\
 | |
| 		$(DESTDIR)/usr/sbin/iwl-enable iwlagn ;\
 | |
| 	fi
 | |
| 	@if [ $(shell modinfo iwlagn > /dev/null 2>&1 && echo 1) ] \
 | |
| 	 && [ $(shell modinfo iwlwifi > /dev/null 2>&1 && echo 1) ]; then \
 | |
| 		echo ;\
 | |
| 		echo -n "Note: iwlagn detected, we're going to disable it. " ;\
 | |
| 		echo "If you would like to enable it later you can run:"  ;\
 | |
| 		echo "    sudo iwl-load iwlagn"  ;\
 | |
| 		echo ;\
 | |
| 		echo Running iwl-enable iwlwifi...;\
 | |
| 		$(DESTDIR)/usr/sbin/iwl-enable iwlwifi ;\
 | |
| 	fi
 | |
| 	@# If on distributions like Mandriva which like to
 | |
| 	@# compress their modules this will find out and do
 | |
| 	@# it for you. Reason is some old version of modutils
 | |
| 	@# won't know mac80211.ko should be used instead of
 | |
| 	@# mac80211.ko.gz
 | |
| 	@./scripts/compress_modules
 | |
| 	@# Mandrake doesn't have a depmod.d/ conf file to prefer
 | |
| 	@# the updates/ dir which is what we use so we add one for it
 | |
| 	@# (or any other distribution that doens't have this).
 | |
| 	@./scripts/check_depmod
 | |
| 	@# Udev stuff needed for the new compat_firmware_class.
 | |
| 	@./compat/scripts/compat_firmware_install
 | |
| 	@/sbin/depmod -a
 | |
| 	@echo 
 | |
| 	@echo Now run:
 | |
| 	@echo 
 | |
| 	@echo sudo make unload to unload all: wireless, bluetooth and ethernet modules
 | |
| 	@echo sudo make wlunload to unload wireless modules
 | |
| 	@echo sudo make btunload to unload bluetooth modules
 | |
| 	@echo
 | |
| 	@echo Run sudo modprobe 'driver-name' to load your desired driver. 
 | |
| 	@echo If unsure reboot.
 | |
| 	@echo
 | |
| 
 | |
| uninstall:
 | |
| 	@# New location, matches upstream
 | |
| 	@rm -rf $(KLIB)/$(KMODDIR)/compat/
 | |
| 	@rm -rf $(KLIB)/$(KMODDIR)/net/mac80211/
 | |
| 	@rm -rf $(KLIB)/$(KMODDIR)/net/rfkill/
 | |
| 	@rm -rf $(KLIB)/$(KMODDIR)/net/wireless/
 | |
| 	@rm -rf $(KLIB)/$(KMODDIR)/drivers/net/usb/
 | |
| 	@rm -rf $(KLIB)/$(KMODDIR)/drivers/net/wireless/
 | |
| 	@rm -rf $(KLIB)/$(KMODDIR)/drivers/staging/
 | |
| 	@rm -rf $(KLIB)/$(KMODDIR)/drivers/net/atl*
 | |
| 	@find $(KLIB)/$(KMODDIR)/drivers/net/ -name "alx*.ko" -o -name "atl*.ko" 2>/dev/null |xargs rm -f
 | |
| 	@# Lets only remove the stuff we are sure we are providing
 | |
| 	@# on the misc directory.
 | |
| 	@rm -f $(KLIB)/$(KMODDIR)/drivers/misc/eeprom_93cx6.ko*
 | |
| 	@rm -f $(KLIB)/$(KMODDIR)/drivers/net/b44.ko*
 | |
| 	@/sbin/depmod -a
 | |
| 	@echo 
 | |
| 
 | |
| clean:
 | |
| 	@if [ -d net -a -d $(KLIB_BUILD) ]; then \
 | |
| 		$(MAKE) -C $(KLIB_BUILD) M=$(PWD) clean ;\
 | |
| 	fi
 | |
| 	@rm -f $(CREL_PRE)*
 | |
| unload:
 | |
| 	@./scripts/unload.sh
 | |
| 
 | |
| btunload:
 | |
| 	@./scripts/btunload.sh
 | |
| 
 | |
| wlunload:
 | |
| 	@./scripts/wlunload.sh
 | |
| 
 | |
| 
 | |
| .PHONY: all clean install uninstall unload btunload wlunload modules bt Makefile
 | |
| 
 | |
| endif
 | |
| 
 | |
| clean-files += Module.symvers Module.markers modules modules.order
 | |
| clean-files += $(CREL_CHECK) $(CONFIG_CHECK) $(COMPAT_CONFIG)
 | 
