blob: ea81c8fd62f73c12707714621ec06e3d00a375fb [file] [log] [blame]
#
# Copyright (c) 2018 The Fuchsia Authors.
#
# 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.
import("//build/cipd.gni")
import("//build/config/fuchsia/rules.gni")
import("//build/package.gni")
# By default, targets are only visible here and to subdirectories.
visibility = [ "./*" ]
# The brcmfmac driver can be built with support for different system buses
# (SDIO, and simulated-firmware), and different configurations will require
# different support. To facilitate consolidating all the potentially messy
# conditional compilation in one place, "bus.cc" is conditionally compiled based
# on the values of the preprocessor #defines:
#
# * CONFIG_BRCMFMAC_SDIO
# * CONFIG_BRCMFMAC_SIM
#
# These #defines are applied as public_configs entries on the targets,
# respectively:
#
# * :sdio
# * :sim
#
# Thus a target that depends on one of the above targets, can include "bus.cc"
# in its sources and will then conditionally compile it with the set of
# preprocessor #defines set by the targets it depends on.
#
# See the targets ":driver_module" and ":driver_test" to see how this is done.
source_set("debug") {
sources = [
"debug.cc",
]
public = [
"debug.h",
]
public_deps = [
"//zircon/public/lib/ddk",
"//zircon/system/public",
]
}
source_set("linuxisms") {
sources = [
"linuxisms.cc",
"netbuf.cc",
"workqueue.cc",
]
public = [
"linuxisms.h",
"netbuf.h",
"workqueue.h",
]
deps = [
":debug",
"//zircon/public/lib/sync",
]
public_deps = [
"//zircon/system/public",
]
}
source_set("core") {
sources = [
# "bus.cc" is not included here; see top-of-file comment.
"bcdc.cc",
"bits.cc",
"bits.h",
"btcoex.cc",
"btcoex.h",
"cfg80211.cc",
"cfg80211.h",
"chip.cc",
"common.cc",
"core.cc",
"d11.cc",
"device.cc",
"feature.cc",
"feature.h",
"fweh.cc",
"fwil.cc",
"fwsignal.cc",
"fwsignal.h",
"p2p.cc",
"p2p.h",
"pno.cc",
"pno.h",
"proto.cc",
"proto.h",
"timer.cc",
"utils.cc",
]
public = [
"bcdc.h",
"brcm_hw_ids.h",
"brcmu_d11.h",
"brcmu_utils.h",
"brcmu_wifi.h",
"bus.h",
"chip.h",
"common.h",
"core.h",
"device.h",
"fweh.h",
"fwil.h",
"fwil_types.h",
"soc.h",
"timer.h",
]
deps = [
":debug",
"//src/connectivity/wlan/lib/common/cpp:common",
"//zircon/public/banjo/ddk.hw.wlan.wlaninfo",
"//zircon/public/lib/ddk",
]
public_deps = [
":linuxisms",
"//garnet/lib/wlan/protocol",
# TODO: we should try to refactor Device so this isn't required outside of the :sim target
"//src/connectivity/wlan/drivers/testing/lib/sim-env:simenv",
"//zircon/public/banjo/ddk.protocol.ethernet",
"//zircon/public/banjo/ddk.protocol.wlanphyimpl",
"//zircon/public/lib/async",
"//zircon/public/lib/async-loop",
"//zircon/public/lib/ddktl",
"//zircon/public/lib/sync",
"//zircon/system/public",
]
friend = [ "test/*" ]
}
source_set("firmware") {
sources = [
"firmware.cc",
]
public = [
"firmware.h",
]
deps = [
":debug",
"//zircon/public/lib/ddk",
"//zircon/system/public",
]
public_deps = [
":core",
":linuxisms",
]
}
config("config_sdio") {
defines = [ "CONFIG_BRCMFMAC_SDIO=1" ]
}
source_set("sdio") {
sources = [
"bcmsdh.cc",
"sdio.cc",
]
public = [
"sdio.h",
]
deps = [
":debug",
"//zircon/public/banjo/ddk.protocol.composite",
"//zircon/public/lib/broadcom",
"//zircon/public/lib/sync",
"//zircon/public/lib/trace-driver",
"//zircon/system/public",
]
public_deps = [
":core",
":firmware",
":linuxisms",
"//zircon/public/banjo/ddk.protocol.gpio",
"//zircon/public/banjo/ddk.protocol.sdio",
"//zircon/public/lib/ddk",
]
public_configs = [ ":config_sdio" ]
}
config("config_sim") {
defines = [ "CONFIG_BRCMFMAC_SIM=1" ]
}
source_set("sim") {
sources = [
"sim-fw/sim_fw.cc",
"sim-fw/sim_hw.cc",
"sim-fw/sim_hw.h",
"sim.cc",
]
public = [
"sim-fw/sim_fw.h",
"sim.h",
]
deps = [
":core",
":debug",
"//src/connectivity/wlan/drivers/testing/lib/sim-device",
"//zircon/public/lib/ddk",
"//zircon/system/public",
]
public_deps = [
":core",
]
public_configs = [ ":config_sim" ]
}
driver_module("driver_module") {
output_name = "brcmfmac"
sources = [
# bus.cc is included here. See top-of-file comment.
"binding.cc",
"bus.cc",
]
deps = [
":core",
":debug",
":sdio",
"//zircon/public/lib/driver",
]
configs -= [ "//build/config/fuchsia:no_cpp_standard_library" ]
configs += [ "//build/config/fuchsia:static_cpp_standard_library" ]
}
source_set("driver_test") {
testonly = true
sources = [
# bus.cc is included here. See top-of-file comment.
"bus.cc",
]
deps = [
":core",
":debug",
":sim",
]
}
if (internal_access) {
# Firmware files from git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git
copy("brcmfmac-firmware-copy") {
sources = [
"firmware/brcmfmac43242a.bin",
"firmware/brcmfmac43455-sdio.bin",
"firmware/brcmfmac43455-sdio.txt",
"firmware/brcmfmac4356-pcie.bin",
"firmware/brcmfmac4356-sdio.bin",
"firmware/brcmfmac4356-sdio.txt",
"firmware/brcmfmac4359-sdio.bin",
"firmware/brcmfmac4359-sdio.txt",
]
outputs = [
"$root_out_dir/firmware/brcmfmac/{{source_file_part}}",
]
}
}
package("brcmfmac") {
deprecated_system_image = true
deps = [
":driver_module",
]
drivers = [
{
name = "brcmfmac.so"
},
]
if (internal_access) {
deps += [
# The copy step has to be in the shared-library toolchain to use the
# expected output directory, since we treat firmware blobs as if they
# were libraries which always use the shared-library toolchain to build.
":brcmfmac-firmware-copy($shlib_toolchain)",
]
libraries = [
{
name = "firmware/brcmfmac/brcmfmac4356-pcie.bin"
},
{
name = "firmware/brcmfmac/brcmfmac4356-sdio.bin"
},
{
name = "firmware/brcmfmac/brcmfmac4356-sdio.txt"
},
{
name = "firmware/brcmfmac/brcmfmac4359-sdio.bin"
},
{
name = "firmware/brcmfmac/brcmfmac4359-sdio.txt"
},
{
name = "firmware/brcmfmac/brcmfmac43455-sdio.bin"
},
{
name = "firmware/brcmfmac/brcmfmac43455-sdio.txt"
},
{
name = "firmware/brcmfmac/brcmfmac43242a.bin"
},
]
}
visibility += [ "*" ]
}