openwrt/package/kernel/broadcom-wl/Makefile
Christian Marangi 3ccdc15c6a
kernel: broadcom-wl: multiple fix to make the package compilable again
Add multiple patch to make the package compilable again.
Aside from some fixup of obvius wrong code, some real fix were needed.
This fix any compilation warning found on compiling the package on
bcm47xx. (omitted since they are too much)

The real problem of this package was the missing MODULE_LICENSE now
mandatory even without WERROR. Set to Proprietary.
And the big blocker is that Broadcom provided an object file targetting
an old kernel version.
The module on modprobe try to find the symbol printk but printk was
dropped and replaced to _printk.
To handle this change we use objcopy tool to rename the symbol to the
new name permitting a correct modprobe and creation of .ko

Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
2023-05-12 03:15:45 +02:00

193 lines
5.0 KiB
Makefile

#
# Copyright (C) 2006-2014 OpenWrt.org
#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
#
include $(TOPDIR)/rules.mk
include $(INCLUDE_DIR)/kernel.mk
PKG_NAME:=broadcom-wl
PKG_VERSION:=5.10.56.27.3
PKG_RELEASE:=10
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)_$(ARCH).tar.bz2
PKG_SOURCE_URL:=@OPENWRT
ifeq ($(ARCH),mipsel)
PKG_HASH:=26a8c370f48fc129d0731cfd751c36cae1419b0bc8ca35781126744e60eae009
endif
ifeq ($(ARCH),mips)
PKG_HASH:=ca6a86ca3e3e9c85b6dbb665b35bcbf338c37829c1b2f1994487d55664886045
endif
PKG_EXTMOD_SUBDIRS:=driver driver-mini glue
PKG_BUILD_FLAGS:=no-mips16
PKG_FLAGS:=nonshared
include $(INCLUDE_DIR)/package.mk
define Package/broadcom-wl/Default
SECTION:=kernel
CATEGORY:=Kernel modules
DEPENDS:=@(PACKAGE_kmod-brcm-wl||PACKAGE_kmod-brcm-wl-mini)
SUBMENU:=Proprietary BCM43xx WiFi driver
SUBMENUDEP:=(TARGET_bcm47xx||TARGET_bcm63xx)
endef
define KernelPackage/brcm-wl/Default
$(call Package/broadcom-wl/Default)
SECTION:=kernel
DEPENDS:=@(TARGET_bcm47xx||TARGET_bcm63xx) +wireless-tools +@KERNEL_WIRELESS_EXT
TITLE:=Kernel driver for BCM43xx chipsets
FILES:=$(PKG_BUILD_DIR)/driver$(1)/wl.ko $(PKG_BUILD_DIR)/glue/wl_glue.ko
AUTOLOAD:=$(call AutoProbe,wl)
endef
define KernelPackage/brcm-wl/Default/description
This package contains the proprietary wireless driver for the Broadcom
BCM43xx chipset.
endef
define KernelPackage/brcm-wl
$(call KernelPackage/brcm-wl/Default,)
TITLE+= (normal version)
endef
define KernelPackage/brcm-wl/description
$(call KernelPackage/brcm-wl/Default/description)
endef
define KernelPackage/brcm-wl-mini
$(call KernelPackage/brcm-wl/Default,-mini)
TITLE+= (Legacy version)
endef
define KernelPackage/brcm-wl-mini/description
$(call KernelPackage/brcm-wl/Default/description)
endef
define Package/wlc
$(call Package/broadcom-wl/Default)
TITLE:=wl driver setup utility
endef
define Package/wlc/description
This package contains an utility for initializing the proprietary Broadcom
wl driver.
endef
define Package/wl
$(call Package/broadcom-wl/Default)
TITLE:=Proprietary Broadcom wl driver config utility
endef
define Package/wl/description
This package contains the proprietary utility (wl) for configuring the
proprietary Broadcom wl driver.
endef
define Package/nas
$(call Package/broadcom-wl/Default)
TITLE:=Proprietary Broadcom WPA/WPA2 authenticator
endef
define Package/nas/description
This package contains the proprietary WPA/WPA2 authenticator (nas) for the
proprietary Broadcom wl driver.
endef
MAKE_KMOD := $(KERNEL_MAKE) \
PATH="$(TARGET_PATH)" \
M="$(PKG_BUILD_DIR)/kmod" \
define Build/Prepare
$(call Build/Prepare/Default)
# New kernel version changed the sysmbol exported from printk to _printk
# The object file provided by broadcom require modification to correctly
# modprobe and generate a .ko
$(TARGET_CROSS)objcopy $(PKG_BUILD_DIR)/driver/wl_apsta/wl_prebuilt.o \
--redefine-sym printk=_printk
$(TARGET_CROSS)objcopy $(PKG_BUILD_DIR)/driver/wl_apsta_mini/wl_prebuilt.o \
--redefine-sym printk=_printk
$(CP) $(PKG_BUILD_DIR)/driver $(PKG_BUILD_DIR)/driver-mini
$(CP) ./src/glue $(PKG_BUILD_DIR)/glue
endef
define Build/Compile
# Compile glue driver
$(MAKE_KMOD) -C "$(LINUX_DIR)" \
M="$(PKG_BUILD_DIR)/glue" \
modules
# Compile the kernel part
$(MAKE_KMOD) \
M="$(PKG_BUILD_DIR)/driver" \
MODFLAGS="-DMODULE -mlong-calls" \
KBUILD_EXTRA_SYMBOLS="$(PKG_BUILD_DIR)/glue/Module.symvers" \
modules
$(MAKE_KMOD) \
M="$(PKG_BUILD_DIR)/driver-mini" \
MODFLAGS="-DMODULE -mlong-calls" \
BUILD_TYPE="wl_apsta_mini" \
KBUILD_EXTRA_SYMBOLS="$(PKG_BUILD_DIR)/glue/Module.symvers" \
modules
# Compile libshared
$(MAKE) -C $(PKG_BUILD_DIR)/shared \
$(TARGET_CONFIGURE_OPTS) \
CFLAGS="$(TARGET_CFLAGS) -I. -I$(PKG_BUILD_DIR)/driver/include" \
all
$(TARGET_CC) -o $(PKG_BUILD_DIR)/wlc \
-I$(PKG_BUILD_DIR)/shared -I$(PKG_BUILD_DIR)/driver/include \
./src/wlc.c $(PKG_BUILD_DIR)/shared/libshared.a
$(TARGET_CC) -o $(PKG_BUILD_DIR)/nas \
$(PKG_BUILD_DIR)/nas_exe.o \
$(PKG_BUILD_DIR)/shared/libshared.a
$(TARGET_CC) -o $(PKG_BUILD_DIR)/wl \
$(PKG_BUILD_DIR)/wl_exe.o \
$(PKG_BUILD_DIR)/shared/libshared.a
endef
define Build/InstallDev
$(INSTALL_DIR) $(1)/usr/lib
$(CP) $(PKG_BUILD_DIR)/shared/libshared.a $(1)/usr/lib/
endef
define Package/wlc/install
$(CP) ./files/* $(1)/
$(INSTALL_DIR) $(1)/sbin
$(INSTALL_BIN) $(PKG_BUILD_DIR)/wlc $(1)/sbin/
endef
define Package/wlc/postinst
#!/bin/sh
[ -n "$${IPKG_INSTROOT}" ] || /etc/init.d/wlunbind enable || true
endef
define Package/wl/install
$(INSTALL_DIR) $(1)/usr/sbin
$(INSTALL_BIN) $(PKG_BUILD_DIR)/wl $(1)/usr/sbin/
endef
define Package/nas/install
$(INSTALL_DIR) $(1)/usr/sbin
$(INSTALL_BIN) $(PKG_BUILD_DIR)/nas $(1)/usr/sbin/
$(LN) nas $(1)/usr/sbin/nas4not
$(LN) nas $(1)/usr/sbin/nas4wds
endef
$(eval $(call KernelPackage,brcm-wl))
$(eval $(call KernelPackage,brcm-wl-mini))
$(eval $(call BuildPackage,wlc))
$(eval $(call BuildPackage,wl))
$(eval $(call BuildPackage,nas))