xref: /wlan-dirver/qcacld-3.0/Android.mk (revision f802c97df268be8bf638e3bd1a10a4acc0b52dd9)
1# Android makefile for the WLAN Module
2
3# set WLAN_BUILD_DEBUG=y in your environment to enable debug logging
4define wlog
5$(if $(WLAN_BUILD_DEBUG),$(info $(1)))
6endef
7
8define target_is_dual_wlan
9$(strip \
10  $(if $(TARGET_SUPPORT_DUAL_WLAN), \
11     $(if $(findstring cnss2,$(1)),true,), \
12  ) \
13)
14endef
15
16LOCAL_MODULE_DDK_BUILD := false
17LOCAL_MODULE_DDK_ALLOW_UNSAFE_HEADERS := false
18
19ifeq ($(TARGET_BOARD_PLATFORM), sun)
20LOCAL_MODULE_DDK_BUILD := true
21LOCAL_MODULE_DDK_ALLOW_UNSAFE_HEADERS := true
22endif
23ifeq ($(TARGET_BOARD_PLATFORM), pineapple)
24LOCAL_MODULE_DDK_BUILD := true
25LOCAL_MODULE_DDK_ALLOW_UNSAFE_HEADERS := true
26endif
27
28ifeq ($(TARGET_BOARD_PLATFORM), niobe)
29LOCAL_MODULE_DDK_BUILD := true
30LOCAL_MODULE_DDK_ALLOW_UNSAFE_HEADERS := true
31endif
32
33LOCAL_PATH := $(call my-dir)
34$(call wlog,LOCAL_PATH=$(LOCAL_PATH))
35BOARD_OPENSOURCE_DIR ?= vendor/qcom/opensource
36
37ENABLE_QCACLD := true
38ifeq ($(TARGET_USES_QMAA), true)
39ifneq ($(TARGET_USES_QMAA_OVERRIDE_WLAN), true)
40ENABLE_QCACLD := false
41else
42ENABLE_QCACLD := true
43endif
44endif
45
46ifeq ($(BOARD_COMMON_DIR),)
47    BOARD_COMMON_DIR := device/qcom/common
48endif
49
50ifeq  ($(ENABLE_QCACLD), true)
51
52# Assume no targets will be supported
53WLAN_CHIPSET :=
54
55ifeq ($(BOARD_HAS_QCOM_WLAN), true)
56
57# Check if this driver needs be built for current target
58ifneq ($(findstring qca_cld3,$(WIFI_DRIVER_BUILT)),)
59	WLAN_CHIPSET := qca_cld3
60	WLAN_SELECT  := CONFIG_QCA_CLD_WLAN=m
61endif
62
63# Build/Package only in case of supported target
64ifneq ($(WLAN_CHIPSET),)
65
66# This makefile is only for DLKM
67ifneq ($(findstring vendor,$(LOCAL_PATH)),)
68
69ifneq ($(findstring opensource,$(LOCAL_PATH)),)
70	WLAN_BLD_DIR := $(BOARD_OPENSOURCE_DIR)/wlan
71endif # opensource
72
73# Multi-ko check
74LOCAL_DEV_NAME := $(patsubst .%,%,\
75	$(lastword $(strip $(subst /, ,$(LOCAL_PATH)))))
76
77$(call wlog,LOCAL_DEV_NAME=$(LOCAL_DEV_NAME))
78$(call wlog,TARGET_WLAN_CHIP=$(TARGET_WLAN_CHIP))
79
80TARGET_WLAN_CHIP ?= wlan
81LOCAL_MULTI_KO := false
82ifneq ($(TARGET_WLAN_CHIP), wlan)
83ifeq ($(LOCAL_DEV_NAME), qcacld-3.0)
84LOCAL_MULTI_KO := true
85endif
86endif
87
88ifeq ($(LOCAL_MULTI_KO), true)
89LOCAL_ANDROID_ROOT := $(shell pwd)
90LOCAL_WLAN_BLD_DIR := $(LOCAL_ANDROID_ROOT)/$(WLAN_BLD_DIR)
91$(shell `find $(LOCAL_WLAN_BLD_DIR)/qcacld-3.0/ -maxdepth 1 -name '.*' ! -name '.git' -delete`)
92
93ifeq ($(LOCAL_MODULE_DDK_BUILD), true)
94ifeq ($(CHIPSET),)
95$(foreach chip, $(TARGET_WLAN_CHIP),\
96	$(eval CHIPSET := $(chip))\
97	$(eval include $(LOCAL_PATH)/Android.mk))
98else
99# DLKM_DIR was moved for JELLY_BEAN (PLATFORM_SDK 16)
100BAZEL_CHIPSET_NAME := $(subst _,-,$(CHIPSET))
101ifeq ($(call is-platform-sdk-version-at-least,16),true)
102        DLKM_DIR := $(TOP)/$(BOARD_COMMON_DIR)/dlkm
103else
104        DLKM_DIR := build/dlkm
105endif # platform-sdk-version
106
107include $(CLEAR_VARS)
108LOCAL_MOD_NAME := wlan
109LOCAL_MODULE              := qca_cld3_$(CHIPSET).ko
110LOCAL_MODULE_KBUILD_NAME  := qca_cld3_$(CHIPSET).ko
111LOCAL_MODULE_DEBUG_ENABLE := true
112LOCAL_MODULE_DDK_SUBTARGET_REGEX := "all.*"
113ifeq ($(PRODUCT_VENDOR_MOVE_ENABLED),true)
114    ifeq ($(WIFI_DRIVER_INSTALL_TO_KERNEL_OUT),true)
115        LOCAL_MODULE_PATH := $(KERNEL_MODULES_OUT)
116    else
117        LOCAL_MODULE_PATH := $(TARGET_OUT_VENDOR)/lib/modules/$(WLAN_CHIPSET)
118    endif
119else
120    LOCAL_MODULE_PATH := $(TARGET_OUT)/lib/modules/$(WLAN_CHIPSET)
121endif
122
123
124LOCAL_DEV_NAME := $(CHIPSET)
125LOCAL_CHIP_NAME := $(LOCAL_DEV_NAME)
126TARGET_MAC_BIN_PATH := /mnt/vendor/persist/$(LOCAL_CHIP_NAME)
127TARGET_FW_DIR := firmware/wlan/qca_cld/$(LOCAL_CHIP_NAME)
128TARGET_CFG_PATH := /vendor/etc/wifi/$(LOCAL_CHIP_NAME)
129TARGET_MAC_BIN_PATH := /mnt/vendor/persist/$(LOCAL_CHIP_NAME)
130
131ifeq ($(PRODUCT_VENDOR_MOVE_ENABLED),true)
132TARGET_FW_PATH := $(TARGET_OUT_VENDOR)/$(TARGET_FW_DIR)
133else
134TARGET_FW_PATH := $(TARGET_OUT_ETC)/$(TARGET_FW_DIR)
135endif
136
137# Create wlan_mac.bin symbolic link as part of the module
138$(call symlink-file,,$(TARGET_MAC_BIN_PATH)/wlan_mac.bin,$(TARGET_FW_PATH)/wlan_mac.bin)
139LOCAL_ADDITIONAL_DEPENDENCIES := $(TARGET_FW_PATH)/wlan_mac.bin
140
141# Conditionally create module symbolic link
142ifneq ($(findstring $(WLAN_CHIPSET),$(WIFI_DRIVER_DEFAULT)),)
143ifeq ($(PRODUCT_VENDOR_MOVE_ENABLED),true)
144ifneq ($(WIFI_DRIVER_INSTALL_TO_KERNEL_OUT),true)
145$(call symlink-file,,$(TARGET_COPY_OUT_VENDOR)/lib/modules/$(WLAN_CHIPSET)/$(LOCAL_MODULE),$(TARGET_OUT_VENDOR)/lib/modules/$(LOCAL_MODULE))
146LOCAL_ADDITIONAL_DEPENDENCIES += $(TARGET_OUT_VENDOR)/lib/modules/$(LOCAL_MODULE)
147endif
148else
149$(call symlink-file,,/system/lib/modules/$(WLAN_CHIPSET)/$(LOCAL_MODULE),$(TARGET_OUT)/lib/modules/$(LOCAL_MODULE))
150LOCAL_ADDITIONAL_DEPENDENCIES += $(TARGET_OUT)/lib/modules/$(LOCAL_MODULE)
151endif
152endif
153
154# Conditionally create ini symbolic link
155ifeq ($(TARGET_BOARD_AUTO),true)
156$(call symlink-file,,$(TARGET_CFG_PATH)/WCNSS_qcom_cfg.ini,$(TARGET_FW_PATH)/WCNSS_qcom_cfg.ini)
157LOCAL_ADDITIONAL_DEPENDENCIES += $(TARGET_FW_PATH)/WCNSS_qcom_cfg.ini
158$(call wlog,"generate soft link because TARGET_BOARD_AUTO true")
159else
160ifneq ($(GENERIC_ODM_IMAGE),true)
161$(call symlink-file,,$(TARGET_CFG_PATH)/WCNSS_qcom_cfg.ini,$(TARGET_FW_PATH)/WCNSS_qcom_cfg.ini)
162LOCAL_ADDITIONAL_DEPENDENCIES += $(TARGET_FW_PATH)/WCNSS_qcom_cfg.ini
163$(call wlog,"generate soft link because GENERIC_ODM_IMAGE not true")
164endif
165endif
166
167# Set dependencies so that CNSS family drivers can be compiled ahead.
168ifneq ($(WLAN_PLATFORM_KBUILD_OPTIONS),)
169LOCAL_REQUIRED_MODULES := wlan-platform-module-symvers
170LOCAL_ADDITIONAL_DEPENDENCIES += $(call intermediates-dir-for,DLKM,wlan-platform-module-symvers)/Module.symvers
171endif
172
173$(call wlog,TARGET_USES_KERNEL_PLATFORM=$(TARGET_USES_KERNEL_PLATFORM))
174ifeq ($(TARGET_USES_KERNEL_PLATFORM),true)
175    include $(DLKM_DIR)/Build_external_kernelmodule.mk
176else
177    include $(DLKM_DIR)/AndroidKernelModule.mk
178endif
179endif
180else
181$(foreach chip, $(TARGET_WLAN_CHIP), \
182	$(shell ln -sf . $(LOCAL_WLAN_BLD_DIR)/qcacld-3.0/.$(chip)))
183include $(foreach chip, $(TARGET_WLAN_CHIP), $(LOCAL_PATH)/.$(chip)/Android.mk)
184endif
185
186else # Multi-ok check
187
188# When dual wlan enabled, secondary dev name would be $(chip)_cnss2.
189# Use LOCAL_CHIP_NAME instead of LOCAL_DEV_NAME for secondary one.
190LOCAL_CHIP_NAME := $(LOCAL_DEV_NAME)
191TARGET_SECONDARY_WLAN := $(call target_is_dual_wlan,$(LOCAL_DEV_NAME))
192ifeq ($(TARGET_SECONDARY_WLAN), true)
193LOCAL_CHIP_NAME := $(patsubst %_cnss2,%,$(strip $(LOCAL_DEV_NAME)))
194endif
195
196ifeq ($(WLAN_PROFILE),)
197WLAN_PROFILE := default
198endif
199
200ifeq ($(LOCAL_DEV_NAME), qcacld-3.0)
201
202LOCAL_DEV_NAME := wlan
203LOCAL_MOD_NAME := wlan
204LOCAL_SRC_DIR :=
205TARGET_FW_DIR := firmware/wlan/qca_cld
206TARGET_CFG_PATH := /vendor/etc/wifi
207TARGET_MAC_BIN_PATH := /mnt/vendor/persist
208
209else
210
211LOCAL_SRC_DIR := .$(LOCAL_DEV_NAME)
212# Use default profile if WLAN_CFG_USE_DEFAULT defined.
213ifeq ($(WLAN_CFG_USE_DEFAULT),)
214WLAN_PROFILE := $(LOCAL_CHIP_NAME)
215endif
216TARGET_FW_DIR := firmware/wlan/qca_cld/$(LOCAL_CHIP_NAME)
217TARGET_CFG_PATH := /vendor/etc/wifi/$(LOCAL_CHIP_NAME)
218TARGET_MAC_BIN_PATH := /mnt/vendor/persist/$(LOCAL_CHIP_NAME)
219
220ifneq ($(TARGET_MULTI_WLAN), true)
221LOCAL_MOD_NAME := wlan
222DYNAMIC_SINGLE_CHIP := $(LOCAL_DEV_NAME)
223else
224LOCAL_MOD_NAME := $(LOCAL_DEV_NAME)
225endif
226
227ifeq ($(TARGET_SECONDARY_WLAN), true)
228TARGET_SECONDARY_WLAN_NUMBER := 2
229LOCAL_MOD_NAME := $(LOCAL_CHIP_NAME)_$(TARGET_SECONDARY_WLAN_NUMBER)
230DYNAMIC_SINGLE_CHIP := $(LOCAL_CHIP_NAME)
231endif
232
233endif
234
235# DLKM_DIR was moved for JELLY_BEAN (PLATFORM_SDK 16)
236ifeq ($(call is-platform-sdk-version-at-least,16),true)
237	DLKM_DIR := $(TOP)/$(BOARD_COMMON_DIR)/dlkm
238else
239	DLKM_DIR := build/dlkm
240endif # platform-sdk-version
241
242# Build wlan.ko as $(WLAN_CHIPSET)_wlan.ko
243###########################################################
244# This is set once per LOCAL_PATH, not per (kernel) module
245KBUILD_OPTIONS := WLAN_ROOT=$(WLAN_BLD_DIR)/qcacld-3.0/$(LOCAL_SRC_DIR)
246KBUILD_OPTIONS += WLAN_COMMON_ROOT=cmn
247KBUILD_OPTIONS += WLAN_COMMON_INC=$(WLAN_BLD_DIR)/qcacld-3.0/cmn
248KBUILD_OPTIONS += WLAN_FW_API=$(WLAN_BLD_DIR)/fw-api
249KBUILD_OPTIONS += WLAN_PROFILE=$(WLAN_PROFILE)
250KBUILD_OPTIONS += DYNAMIC_SINGLE_CHIP=$(DYNAMIC_SINGLE_CHIP)
251
252# We are actually building wlan.ko here, as per the
253# requirement we are specifying <chipset>_wlan.ko as LOCAL_MODULE.
254# This means we need to rename the module to <chipset>_wlan.ko
255# after wlan.ko is built.
256KBUILD_OPTIONS += MODNAME=$(LOCAL_MOD_NAME)
257KBUILD_OPTIONS += DEVNAME=$(LOCAL_DEV_NAME)
258KBUILD_OPTIONS += BOARD_PLATFORM=$(TARGET_BOARD_PLATFORM)
259KBUILD_OPTIONS += $(WLAN_SELECT)
260
261KBUILD_REQUIRED_KOS := ipam.ko
262
263ifneq ($(WLAN_CFG_OVERRIDE_$(LOCAL_DEV_NAME)),)
264KBUILD_OPTIONS += WLAN_CFG_OVERRIDE="$(WLAN_CFG_OVERRIDE_$(LOCAL_DEV_NAME))"
265endif
266
267# driver expects "/dev/<name>" for wifi driver state ctrl parameter.
268# i.e. WIFI_DRIVER_STATE_CTRL_PARAM="/dev/wlan" is defined for single wlan.
269# WIFI_DRIVER_STATE_CTRL_PARAM_SECONDARY="/dev/wlan2" is defined for 2nd wlan.
270ifeq ($(TARGET_SECONDARY_WLAN), true)
271$(call wlog,STATE_CTRL_PARAM_SECONDARY=$(WIFI_DRIVER_STATE_CTRL_PARAM_SECONDARY))
272PARAM_SECONDARY := $(patsubst "%",%,$(WIFI_DRIVER_STATE_CTRL_PARAM_SECONDARY))
273$(call wlog,PARAM_SECONDARY=$(PARAM_SECONDARY))
274ifeq ($(dir $(PARAM_SECONDARY)),/dev/)
275KBUILD_OPTIONS += WLAN_CTRL_NAME=$(notdir $(PARAM_SECONDARY))
276endif
277else
278$(call wlog,WIFI_DRIVER_STATE_CTRL_PARAM=$(WIFI_DRIVER_STATE_CTRL_PARAM))
279PARAM := $(patsubst "%",%,$(WIFI_DRIVER_STATE_CTRL_PARAM))
280$(call wlog,PARAM=$(PARAM))
281ifeq ($(dir $(PARAM)),/dev/)
282KBUILD_OPTIONS += WLAN_CTRL_NAME=$(notdir $(PARAM))
283endif
284endif
285
286# Pass build options per chip to Kbuild. This will be injected from upper layer
287# makefile.
288#
289# e.g.
290#  WLAN_KBUILD_OPTIONS_qca6390 := CONFIG_CNSS_QCA6390=y
291ifneq ($(WLAN_KBUILD_OPTIONS_$(LOCAL_DEV_NAME)),)
292KBUILD_OPTIONS += "$(WLAN_KBUILD_OPTIONS_$(LOCAL_DEV_NAME))"
293endif
294
295ifeq ($(PRODUCT_VENDOR_MOVE_ENABLED),true)
296TARGET_FW_PATH := $(TARGET_OUT_VENDOR)/$(TARGET_FW_DIR)
297else
298TARGET_FW_PATH := $(TARGET_OUT_ETC)/$(TARGET_FW_DIR)
299endif
300
301# WLAN_PLATFORM_KBUILD_OPTIONS should be passed from upper level Makefiles
302# like wlan.mk. It indicates sources of CNSS family drivers (cnss2, cnss_nl,
303# cnss_prealloc and cnss_utils etc.) are built out of kernel tree and it
304# should also include all necessary config flags (e.g. CONFIG_CNSS2) which
305# are originally defined from kernel Kconfig/defconfig. KBUILD_EXTRA_SYMBOLS
306# is also needed to indicate all the symbols from these drivers.
307ifneq ($(WLAN_PLATFORM_KBUILD_OPTIONS),)
308KBUILD_OPTIONS += $(foreach wlan_platform_kbuild_option, \
309		   $(WLAN_PLATFORM_KBUILD_OPTIONS), \
310		   $(wlan_platform_kbuild_option))
311
312KBUILD_OPTIONS += KBUILD_EXTRA_SYMBOLS+=$(shell pwd)/$(call intermediates-dir-for,DLKM,wlan-platform-module-symvers)/Module.symvers
313endif
314
315include $(CLEAR_VARS)
316
317# Create the module
318LOCAL_MODULE              := $(WLAN_CHIPSET)_$(LOCAL_DEV_NAME).ko
319LOCAL_MODULE_KBUILD_NAME  := $(LOCAL_MOD_NAME).ko
320LOCAL_MODULE_DEBUG_ENABLE := true
321ifeq ($(PRODUCT_VENDOR_MOVE_ENABLED),true)
322    ifeq ($(WIFI_DRIVER_INSTALL_TO_KERNEL_OUT),true)
323        LOCAL_MODULE_PATH := $(KERNEL_MODULES_OUT)
324    else
325        LOCAL_MODULE_PATH := $(TARGET_OUT_VENDOR)/lib/modules/$(WLAN_CHIPSET)
326    endif
327else
328    LOCAL_MODULE_PATH := $(TARGET_OUT)/lib/modules/$(WLAN_CHIPSET)
329endif
330
331# Create wlan_mac.bin symbolic link as part of the module
332$(call symlink-file,,$(TARGET_MAC_BIN_PATH)/wlan_mac.bin,$(TARGET_FW_PATH)/wlan_mac.bin)
333LOCAL_ADDITIONAL_DEPENDENCIES := $(TARGET_FW_PATH)/wlan_mac.bin
334
335# Conditionally create module symbolic link
336ifneq ($(findstring $(WLAN_CHIPSET),$(WIFI_DRIVER_DEFAULT)),)
337ifeq ($(PRODUCT_VENDOR_MOVE_ENABLED),true)
338ifneq ($(WIFI_DRIVER_INSTALL_TO_KERNEL_OUT),true)
339$(call symlink-file,,$(TARGET_COPY_OUT_VENDOR)/lib/modules/$(WLAN_CHIPSET)/$(LOCAL_MODULE),$(TARGET_OUT_VENDOR)/lib/modules/$(LOCAL_MODULE))
340LOCAL_ADDITIONAL_DEPENDENCIES += $(TARGET_OUT_VENDOR)/lib/modules/$(LOCAL_MODULE)
341endif
342else
343$(call symlink-file,,/system/lib/modules/$(WLAN_CHIPSET)/$(LOCAL_MODULE),$(TARGET_OUT)/lib/modules/$(LOCAL_MODULE))
344LOCAL_ADDITIONAL_DEPENDENCIES += $(TARGET_OUT)/lib/modules/$(LOCAL_MODULE)
345endif
346endif
347
348# Conditionally create ini symbolic link
349ifeq ($(TARGET_BOARD_AUTO),true)
350$(call symlink-file,,$(TARGET_CFG_PATH)/WCNSS_qcom_cfg.ini,$(TARGET_FW_PATH)/WCNSS_qcom_cfg.ini)
351LOCAL_ADDITIONAL_DEPENDENCIES += $(TARGET_FW_PATH)/WCNSS_qcom_cfg.ini
352$(call wlog,"generate soft link because TARGET_BOARD_AUTO true")
353else
354ifneq ($(GENERIC_ODM_IMAGE),true)
355$(call symlink-file,,$(TARGET_CFG_PATH)/WCNSS_qcom_cfg.ini,$(TARGET_FW_PATH)/WCNSS_qcom_cfg.ini)
356LOCAL_ADDITIONAL_DEPENDENCIES += $(TARGET_FW_PATH)/WCNSS_qcom_cfg.ini
357$(call wlog,"generate soft link because GENERIC_ODM_IMAGE not true")
358endif
359endif
360
361# Set dependencies so that CNSS family drivers can be compiled ahead.
362ifneq ($(WLAN_PLATFORM_KBUILD_OPTIONS),)
363LOCAL_REQUIRED_MODULES := wlan-platform-module-symvers
364LOCAL_ADDITIONAL_DEPENDENCIES += $(call intermediates-dir-for,DLKM,wlan-platform-module-symvers)/Module.symvers
365endif
366
367$(call wlog,TARGET_USES_KERNEL_PLATFORM=$(TARGET_USES_KERNEL_PLATFORM))
368ifeq ($(TARGET_USES_KERNEL_PLATFORM),true)
369    include $(DLKM_DIR)/Build_external_kernelmodule.mk
370else
371    include $(DLKM_DIR)/AndroidKernelModule.mk
372endif
373
374endif # Multi-ko check
375endif # DLKM check
376endif # supported target check
377endif # WLAN enabled check
378endif # ENABLE_QCACLD
379