#
# This is a common config file that is used mainly by modules
# or brand makefiles. The ".usf" suffix stands for "universal
# settings file". The important feature is that this file is
# both legal makefile and shell syntax, and could be parsed as
# a properties file by any language (Perl, Python, Java, ...)
# which understands properties.
#
# Rules: Each line is either an assignment, a comment, or blank.
# Assignments MUST be of the form "foo=bar" (no spaces) and
# comments have a leading "#" character.
#
# It can be included by common templates like WLAN_Common.mk,
# or by brand makefiles, or sourced by build scripts.
#
# Copyright (C) 2017, Broadcom. All Rights Reserved.
# 
# 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.
#
#
# <<Broadcom-WL-IPTag/Open:>>
#
# $Id: WLAN.usf 658442 2016-09-08 01:17:56Z $
#

# Current list of components
# This list is used in module makefiles to set vpath search
# paths and include paths

WLAN_COMPONENT_PATHS=src/shared/bcmwifi components/clm-api src/wl/lwip src/wl/ppr \
                     src/wl/rel_mcast src/wl/gas src/wl/encode src/wl/olpc \
		     src/wl/keymgmt src/wl/iocv src/wl/dump \
		     components/ndis src/wl/proxd src/dongle src/rte \
		     components/nan src/wl/ate src/wl/mesh src/wl/randmac \
		     components/phy src/wl/natoe components/accel components/avs \
		     components/msch components/apf components/hml src/wl/chctx

# This is a staging area for generated content that need to be shared
# between build step and packaging step. E.g when CLM data files
# need to be packaged, they are first staged to $(WLAN_GEN_BASEDIR)
# and packaged from there.

WLAN_GEN_BASEDIR=generated

# This is the conventional Windows mount point for network files.

WLAN_WINPFX=Z:
