blob: 66bda37a8c0400409ac588603b1fa7f41ee5d476 [file] [log] [blame]
#
# GNUmakefile for wl/exe
#
# Copyright (c) 2000, Broadcom Corp.
# $Id: GNUmakefile 561503 2015-06-04 23:18:46Z $
WLAN_ComponentsInUse := bcmwifi ppr hal
include ../../makefiles/WLAN_Common.mk
ifndef SRCBASE
SRCBASE := $(WLAN_SrcBaseR)
endif
UNAME = $(shell uname)
ifeq ($(findstring CYGWIN,$(UNAME)),CYGWIN)
#-----------------------------------------------------------------
# Windows build, don't include Makerules due to all: conflict
include ../../GNUmakefile.inc
# MfgTest XP and WIN7 WLU DLL builds are built from other standalone Makefiles
# from App and MfgTest teams
# To build XP WLU DLL (output is in obj/*/mfg_dll/{free,checked}/...)
# $(MAKE) -C src/wl/exe -f GNUmakefile.wlu_dll
# To build Win7/Vista WLU DLL (output is in obj/*/mfg_dll/{Release,Debug}/...)
# $(MAKE) -C src/wl/exe/win7
else # UNAME
#-----------------------------------------------------------------
# Linux build
#
# This should be one of values recognized in src/Makerules
# 2) not windows, need to include first to pick up TARGETENV dependent vars
include $(SRCBASE)/Makerules
# GNU make function to do compilation and dependency generation
# in one step.
define CompileAndMakedep
$(strip $1 -c -MMD -MF $(@D)/.$(@F).depend -MP $2)
endef
ifdef CROSS_COMPILE
$(warning CROSS_COMPILE=$(CROSS_COMPILE))
CC := $(CROSS_COMPILE)gcc
LD := $(CROSS_COMPILE)ld
NM := $(CROSS_COMPILE)nm
AR := $(CROSS_COMPILE)ar
# LDFLAGS := -static
endif
ifdef ARCH
TARGETARCH := $(ARCH)
endif
CFLAGS += $(EXTRA_PLATFORM_CFLAGS)
# Use newer 11ac ratespec for wl command line
CFLAGS += -DD11AC_IOTYPES
# Use opaque PPR structures
CFLAGS += -DPPR_API
#ifdef WLCNT
CFLAGS += -DWLCNT
#endif
#ifdef WIFI_ACT_FRAME
CFLAGS += -DWIFI_ACT_FRAME
#endif
#ifdef WLEXTLOG
CFLAGS += -DWLEXTLOG
#endif
ifeq ($(WLTEST),1)
CFLAGS += -DSERDOWNLOAD -DEVENT_LOG_COMPILE
endif
ifeq ($(OLYMPIC_RWL),1)
CFLAGS += -DOLYMPIC_RWL
endif
ifneq ($(findstring $(TARGETENV), "linux linuxmips linuxmips_be linuxarm linuxarm_le android android_ndk_r6b freebsd"),)
#ifdef WLBTAMP
CFLAGS += -DWLBTAMP
#endif
#ifdef WLP2P
CFLAGS += -DWLP2P
#endif
#ifdef WLMCHAN
CFLAGS += -DWLMCHAN
#endif
#ifdef WLTDLS
CFLAGS += -DWLTDLS
#endif
#ifdef WLNDOE
CFLAGS += -DWLNDOE
#endif
#ifdef WLP2PO
CFLAGS += -DWLP2PO
#endif
#ifdef WLANQPO
CFLAGS += -DWLANQPO
#endif
#ifdef SR_DEBUG
CFLAGS += -DSR_DEBUG
#endif
#ifdef UC_FATAL
CFLAGS += -DUC_FATAL
#endif
#ifdef TBTT_OFFSET_STAT
CFLAGS += -DTBTT_OFFSET_STAT
#endif
#ifdef TRAFFIC_MGMT
CFLAGS += -DTRAFFIC_MGMT
#endif
# netlink driver interface
ifeq ($(NL80211),1)
CFLAGS += -DNL80211
endif
#ifdef WLWNM
CFLAGS += -DWLWNM
#endif
# extra warnings
ifneq ($(filter mips_be arm_le arm_android arm_android_ndk_r6b,$(TARGETARCH)),)
CFLAGS += -Wextra -Wall
else
CFLAGS += -Wextra -Wall -Werror
endif
CFLAGS += -DWLPFN -DWLPFN_AUTO_CONNECT -DWLOFFLD -DLINUX
ifeq ($(findstring $(TARGETENV), "freebsd"),)
CFLAGS += -DLINUX
endif
CFLAGS += -DWLC_HIGH
CFLAGS += -I$(SRCBASE)/wl/sys -I$(SRCBASE)/wl/phy
CFLAGS += $(WLAN_ComponentIncPathR)
# Discard any "MMX" or other qualifications on x86 so that
# any TARGETARCH containing x86 is just "x86"
ifeq ($(findstring x86_mmx,$(TARGETARCH)),x86_mmx)
TARGETARCH = x86
endif
ASD ?= 0
ifneq ($(ASD),1)
override ASD:=
endif
ifneq ($(ASD),1)
NOASDDIR = _noasd
endif
RWL ?= 1
ifeq ($(RWL),0)
override RWL:=
endif
RWL_DONGLE ?= 1
RWL_SOCKET ?= 1
RWL_WIFI ?= 1
RWL_SERIAL ?= 1
ifneq ($(RWL_DONGLE),0)
RWL_SERVERS += $(SERVER_DONGLE)
endif
ifneq ($(RWL_SOCKET),0)
RWL_SERVERS += $(SERVER_SOCKET)
endif
ifneq ($(RWL_WIFI),0)
RWL_SERVERS += $(SERVER_WIFI)
endif
ifneq ($(RWL_SERIAL),0)
RWL_SERVERS += $(SERVER_SERIAL)
endif
# $(TARGETARCH) is set based on TARGETENV in src/Makerules.* files
ifneq ($(findstring $(TARGETENV), "freebsd"),)
WL_OBJS := wlu.o wlu_common.o wlu_bsd.o wlu_cmd.o wlu_iov.o wlu_rates_matrix.o miniopt.o bcmutils.o bcmwifi_channels.o bcm_app_utils.o wlc_ppr.o
else
WL_OBJS := wlu.o wlu_common.o wlu_linux.o bcmutils.o bcmwifi_channels.o wlu_cmd.o wlu_iov.o wlu_client_shared.o wlu_pipe_linux.o wlu_pipe.o miniopt.o bcm_app_utils.o wlu_rates_matrix.o wlc_ppr.o
endif
SERVER_OBJS := wlu_server_linux.o wlu_pipe_linux.o wlu_pipe.o wlu_server_shared.o shellproc_linux.o
WLM_OBJS := $(WL_OBJS) wlm.o
WLHIGHSTUB_OBJS := wlhighstub.o bcm_rpc_char.o bcm_rpc.o linux_rpc_osl.o
WLHIGHSTUB_OBJS += wlc_low_stubs.o bcm_xdr.o
# include build settings for nl80211 support
ifeq ($(NL80211),1)
include netlink.inc
endif
# Prefix obj/<type>/TARGETARCH to produced .obj files
WL_OBJS := $(WL_OBJS:%.o=obj/wl$(NOASDDIR)/$(TARGETARCH)/%.o)
DONGLE_OBJS := $(SERVER_OBJS:%.o=obj/dongle$(NOASDDIR)/$(TARGETARCH)/%.o)
SOCKET_OBJS := $(SERVER_OBJS:%.o=obj/socket$(NOASDDIR)/$(TARGETARCH)/%.o)
WIFI_OBJS := $(SERVER_OBJS:%.o=obj/wifi$(NOASDDIR)/$(TARGETARCH)/%.o)
SERIAL_OBJS := $(SERVER_OBJS:%.o=obj/serial$(NOASDDIR)/$(TARGETARCH)/%.o)
WLM_OBJS := $(WLM_OBJS:%.o=obj/wlm/$(TARGETARCH)/%.o)
WLHIGHSTUB_OBJS := $(WLHIGHSTUB_OBJS:%.o=obj/wlhighstub/$(TARGETARCH)/%.o)
# Derive a final list of all known objects.
OBJS := $(WL_OBJS) $(DONGLE_OBJS) $(SOCKET_OBJS) $(WIFI_OBJS) $(SERIAL_OBJS) $(WLM_OBJS) $(WLHIGHSTUB_OBJS)
# Make a list of dependency files, one per object file.
DEPENDS := $(join $(dir $(OBJS)),$(addprefix .,$(addsuffix .depend,$(notdir $(OBJS)))))
# Include any dependency files which currently exist.
-include $(DEPENDS)
# TODO: Move final built objects to respective TARGETARCH dirs as well
# Final exe names
ifneq ($(TARGETARCH),x86)
ARCH_SFX = $(TARGETARCH)
endif
WL_EXE := wl$(ARCH_SFX)
SERVER_SOCKET = socket$(NOASDDIR)/$(TARGETARCH)/wl_server_socket$(ARCH_SFX)
SERVER_DONGLE = dongle$(NOASDDIR)/$(TARGETARCH)/wl_server_dongle$(ARCH_SFX)
SERVER_WIFI = wifi$(NOASDDIR)/$(TARGETARCH)/wl_server_wifi$(ARCH_SFX)
SERVER_SERIAL = serial$(NOASDDIR)/$(TARGETARCH)/wl_server_serial$(ARCH_SFX)
WLM_SO := wlm/$(TARGETARCH)/wlm$(ARCH_SFX).so
WLHIGHSTUB := obj/wlhighstub/$(TARGETARCH)/wlhighstub$(ARCH_SFX)
# ASD specific flags
ifeq ($(ASD),1)
ASD_CFLAGS := -DRWLASD
ASD_CFLAGS += -I../../tools/Wifi_ASD_test/inc
ifneq ($(filter mips_be arm_android arm_android_ndk_r6b x86_android_ndk_r6b,$(TARGETARCH)),)
ASD_LDFLAGS:= -L../../tools/Wifi_ASD_test/lib/$(TARGETARCH) -lwfa
else
ASD_LDFLAGS:= -L../../tools/Wifi_ASD_test/lib/$(TARGETARCH) -lwfa -lpthread
endif
endif # ASD
INSTALL_DIR ?= apps
vpath %.c $(SRCBASE)/shared $(SRCBASE)/wl/sys $(SRCBASE)/wl/phy $(WLAN_StdSrcDirsR) $(WLAN_ComponentSrcDirsR)
all: build_deps
# Build servers for all but mips_be
ifeq ($(filter mips_be,$(TARGETARCH)),)
all: $(WL_EXE) servers
else
all: $(WL_EXE)
endif
build_deps:
ifeq ($(ASD),1)
$(MAKE) -C ../../tools/Wifi_ASD_test
endif # ASD
wlm: $(WLM_SO)
servers: $(RWL_SERVERS)
# Handle creation of directories for objects mentioned below.
$(addprefix obj/,$(addsuffix $(NOASDDIR)/$(TARGETARCH),wl dongle socket wifi serial) $(addsuffix /$(TARGETARCH),wlm wlhighstub)):
@mkdir -pv $@
# Compilation targets
obj/wl$(NOASDDIR)/$(TARGETARCH)/%.o: %.c | obj/wl$(NOASDDIR)/$(TARGETARCH)
ifneq ($(RWL),)
$(call CompileAndMakedep,$(CC),$(CFLAGS) $(ASD_CFLAGS) -DRWL_SOCKET -DRWL_DONGLE -DRWL_WIFI -DRWL_SERIAL -o $@ $<)
else
$(call CompileAndMakedep,$(CC),$(CFLAGS) $(ASD_CFLAGS) -o $@ $<)
endif
obj/dongle$(NOASDDIR)/$(TARGETARCH)/%.o: %.c | obj/dongle$(NOASDDIR)/$(TARGETARCH)
$(call CompileAndMakedep,$(CC),$(CFLAGS) $(ASD_CFLAGS) -DRWL_DONGLE -o $@ $<)
obj/socket$(NOASDDIR)/$(TARGETARCH)/%.o: %.c | obj/socket$(NOASDDIR)/$(TARGETARCH)
$(call CompileAndMakedep,$(CC),$(CFLAGS) $(ASD_CFLAGS) -DRWL_SOCKET -o $@ $<)
obj/wifi$(NOASDDIR)/$(TARGETARCH)/%.o: %.c | obj/wifi$(NOASDDIR)/$(TARGETARCH)
$(call CompileAndMakedep,$(CC),$(CFLAGS) $(ASD_CFLAGS) -DRWL_WIFI -o $@ $<)
obj/serial$(NOASDDIR)/$(TARGETARCH)/%.o: %.c | obj/serial$(NOASDDIR)/$(TARGETARCH)
$(call CompileAndMakedep,$(CC),$(CFLAGS) $(ASD_CFLAGS) -DRWL_SERIAL -o $@ $<)
obj/wlm/$(TARGETARCH)/%.o: %.c | obj/wlm/$(TARGETARCH)
$(call CompileAndMakedep,$(CC),$(CFLAGS) $(ASD_CFLAGS) -DRWL_DONGLE -DRWL_SOCKET -DRWL_WIFI -DRWL_SERIAL -DWLMSO -fPIC -o $@ $<)
obj/wlhighstub/$(TARGETARCH)/%.o: %.c | obj/wlhighstub/$(TARGETARCH)
$(call CompileAndMakedep,$(CC),$(CFLAGS) -o $@ $<)
$(WLHIGHSTUB): $(WLHIGHSTUB_OBJS)
@mkdir -pv $(@D)
# Final link targets
$(WL_EXE): $(WL_OBJS)
$(strip $(CC) $(LDFLAGS) -o $@ $^ $(LIBS))
# net_priv target is for building the dhd with NET_ADMIN privilege (i.e. to avoid running as root)
# note: The 'setcap' command is availble from the libcap2-bin package
# note: linux kernel < 2.6.33 doesn't support Security File Capabilities by default
net_priv: $(WL_EXE)
sudo setcap CAP_NET_ADMIN=eip $^
$(SERVER_DONGLE): $(DONGLE_OBJS)
@mkdir -pv $(@D)
$(strip $(CC) $(LDFLAGS) -o $@ $^ $(ASD_LDFLAGS))
$(SERVER_SOCKET): $(SOCKET_OBJS)
@mkdir -pv $(@D)
$(strip $(CC) $(LDFLAGS) -o $@ $^ $(ASD_LDFLAGS))
$(SERVER_WIFI): $(WIFI_OBJS)
@mkdir -pv $(@D)
$(strip $(CC) $(LDFLAGS) -o $@ $^ $(ASD_LDFLAGS))
$(SERVER_SERIAL): $(SERIAL_OBJS)
@mkdir -pv $(@D)
$(strip $(CC) $(LDFLAGS) -o $@ $^ $(ASD_LDFLAGS))
$(WLM_SO): $(WLM_OBJS)
@mkdir -pv $(@D)
$(strip $(CC) $(LDFLAGS) -shared -o $@ $^)
wldefs: wlmain.o
$(CC) $(LDFLAGS) -o $@ $<
.PHONY: all clean wlm release_bins net_priv
release_bins:
@mkdir -p $(INSTALL_DIR)
install -pv $(WL_EXE) $(INSTALL_DIR)
ifeq ($(filter mips_be,$(TARGETARCH)),)
install -pv $(SERVER_SOCKET) $(INSTALL_DIR)
install -pv $(SERVER_DONGLE) $(INSTALL_DIR)
install -pv $(SERVER_WIFI) $(INSTALL_DIR)
install -pv $(SERVER_SERIAL) $(INSTALL_DIR)
endif
ifeq ($(ASD),1)
$(MAKE) -C ../../tools/Wifi_ASD_test release_bins
endif #ASD
clean::
rm -fv $(WL_EXE) $(WL_OBJS) $(SERVER_SOCKET) $(SERVER_DONGLE) $(SERVER_WIFI) $(SERVER_SERIAL) $(SOCKET_OBJS) $(SERIAL_OBJS) $(WIFI_OBJS) $(DONGLE_OBJS) $(WLM_SO) $(WLM_OBJS) $(SERVER_SERIAL) $(DEPENDS)
endif # TARGETENV linux
#-----------------------------------------------------------------
# MacOS build
#
ifeq ($(TARGETENV), macos)
include $(SRCBASE)/Makerules.env
.PHONY: all everything clean wl wl_server_socket wl_server_wifi wl_dongle
PROJTGT := wl
BUILD := xcodebuild
PROJECT := wl.xcodeproj
OBJDIR := $(TARGETENV)/$(MACOS_VER)
all: wl wl_server_socket
everything: wl wl_server_socket wl_server_wifi wl_dongle
clean::
rm -rf $(OBJDIR) build
wl wl_server_socket wl_server_wifi: | $(OBJDIR)
#
# dongle wl is located at ./build/Debug/wl
#
wl_dongle:
$(BUILD) -project $(PROJECT) -target $(PROJTGT) -configuration Debug build
WL_EXE := $(OBJDIR)/wl
SERVER_SOCKET := $(OBJDIR)/socket/wl_server_socket
SERVER_WIFI := $(OBJDIR)/wifi/wl_server_wifi
WL_OBJS := $(addprefix $(OBJDIR)/,wlu.o wlu_common.o wlu_macos.o bcmutils.o bcmwifi_channels.o wlu_cmd.o wlu_iov.o miniopt.o bcm_app_utils.o wlu_rates_matrix.o wlc_ppr.o)
SERVER_OBJS := wlu_server_macos.o wlu_pipe_linux.o wlu_pipe.o wlu_server_shared.o shellproc_linux.o
SOCKET_OBJS := $(SERVER_OBJS:%.o=$(OBJDIR)/socket/%.o)
WIFI_OBJS := $(SERVER_OBJS:%.o=$(OBJDIR)/wifi/%.o)
# Derive a final list of all known objects.
OBJS := $(WL_OBJS) $(SOCKET_OBJS) $(WIFI_OBJS)
# Create the sub-directories needed to hold object files.
$(sort $(dir $(OBJS))):
@mkdir -pv $@
# Make a list of dependency files, one per object file.
DEPENDS := $(join $(dir $(OBJS)),$(addprefix .,$(addsuffix .depend,$(notdir $(OBJS)))))
# Include any dependency files which currently exist.
-include $(DEPENDS)
vpath %.c .. $(SRCBASE)/shared $(SRCBASE)/wl/sys $(SRCBASE)/wl/phy $(WLAN_StdSrcDirsR) $(WLAN_ComponentSrcDirsR)
MACOS_VER ?:= $(shell sw_vers -productVersion)
ifneq (,$(findstring 10.9,$(MACOS_VER)))
SDKROOT := /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk
GCDEFS := $(GCDEFS) -DRDR_5905993 -DWLP2P -DWLMCHAN -DWLAWDL -DWLOFFLD -DPPR_API -I/usr/include -I/Library/Developer/CommandLineTools/usr/include -I$(SDKROOT)/System/Library/Frameworks/Kernel.framework/Versions/A/PrivateHeaders/IOKit/apple80211 -I$(SDKROOT)/System/Library/Frameworks/Kernel.framework/Versions/A/Headers/ -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include
else
ifneq (,$(findstring 10.8.3,$(MACOS_VER)))
SDKROOT := /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk
GCDEFS := $(GCDEFS) -DRDR_5905993 -DWLP2P -DWLMCHAN -DWLAWDL -DWLOFFLD -DPPR_API -I/usr/include -I/Library/Developer/CommandLineTools/usr/include -I$(SDKROOT)/System/Library/Frameworks/Kernel.framework/Versions/A/PrivateHeaders/IOKit/apple80211 -I$(SDKROOT)/System/Library/Frameworks/Kernel.framework/Versions/A/Headers/ -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include
else
ifneq (,$(findstring 10.8,$(MACOS_VER)))
GCDEFS := $(GCDEFS) -DRDR_5905993 -DWLP2P -DWLMCHAN -DWLAWDL -DWLOFFLD -DPPR_API -I/usr/include -I/System/Library/Frameworks/Kernel.framework/Versions/A/PrivateHeaders/IOKit/apple80211
else
ifneq (,$(findstring 10.7,$(MACOS_VER)))
GCDEFS := $(GCDEFS) -DRDR_5905993 -DWLP2P -DWLMCHAN -DWLOFFLD -DPPR_API
else
ifneq (,$(findstring 10.6,$(MACOS_VER)))
GCDEFS := $(GCDEFS) -DRDR_5905993 -DWLP2P -DWLMCHAN -DWLOFFLD -DPPR_API
endif
endif
endif
endif
endif
$(OBJDIR)/%.o: %.c | $(OBJDIR)
$(call CompileAndMakedep,$(CC),$(CFLAGS) -o $@ $<)
wl: $(OBJDIR)/wl
$(OBJDIR)/wl: $(WL_OBJS)
ifneq ($(findstring $(MACOS_VER), 10.8 10.9),)
$(CC) -L/usr/lib $(LDFLAGS) -o $@ $^
else
$(CC) $(LDFLAGS) -o $@ $^
endif
wl_server_socket: $(SERVER_SOCKET)
$(SERVER_SOCKET): $(SOCKET_OBJS)
$(strip $(CC) $(LDFLAGS) -o $@ $^)
$(OBJDIR)/socket/%.o: %.c | $(OBJDIR)/socket
$(call CompileAndMakedep,$(CC),$(CFLAGS) -DRWL_SOCKET -DREMOTE_WL -o $@ $<)
wl_server_wifi: $(SERVER_WIFI)
$(SERVER_WIFI): $(WIFI_OBJS)
$(strip $(CC) $(LDFLAGS) -o $@ $^)
$(OBJDIR)/wifi/%.o: %.c | $(OBJDIR)/wifi
$(call CompileAndMakedep,$(CC),$(CFLAGS) -DRWL_WIFI -DREMOTE_WL -o $@ $<)
endif # TARGETENV macos
endif # UNAME