# Build file for Fuchsia OS
#
# Copyright (c) 2016 The Fuchsia Authors.
#
# This software may be distributed under the terms of the BSD license.
# See README for more details.

executable("wpa_supplicant") {

  configs += [ ":wpa_supplicant_private" ]
  configs -= [ "//build/config:default_warnings" ]

  deps = [
    ":wpa_supplicant_original",
    ":wpa_supplicant_fuchsia",
  ]

}

config("wpa_supplicant_private") {
  visibility = [ ":*" ]

  include_dirs = [
    "../src",
    "../src/utils",
  ]

  cflags = [
    "-MMD",
    "-O2",
    "-g",
    "-Wall",
    "-Wextra",
    "-Wno-unused-function",
    "-Wno-unused-parameter",
  ]

  defines = [
    "CONFIG_BACKEND_FILE",
    "CONFIG_CRYPTO_INTERNAL",
    "CONFIG_DRIVER_MOCK",
    "CONFIG_NO_PBKDF2",
    "CONFIG_NO_CONFIG_BLOBS",
    "CONFIG_NO_SCAN_PROCESSING",
    "CONFIG_NO_WPA",
    "CONFIG_NO_ROAMING",
    "CONFIG_SHA256",
  ]
}

source_set("wpa_supplicant_original") {
  sources = [
    "../src/common/ieee802_11_common.c",
    "../src/common/hw_features_common.c",
    "../src/crypto/random.c",
    "../src/crypto/crypto_internal.c",
    "../src/crypto/md5.c",
    "../src/crypto/md5-internal.c",
    "../src/crypto/sha1.c",
    "../src/crypto/sha1-internal.c",
    "../src/crypto/sha256.c",
    "../src/crypto/sha256-internal.c",
    "../src/crypto/sha256-prf.c",
    "../src/crypto/sha256-tlsprf.c",
    "../src/crypto/tls_none.c",
    "../src/drivers/driver_common.c",
    "../src/drivers/driver_mock.c",
    "../src/drivers/drivers.c",
    "../src/l2_packet/l2_packet_none.c",
    "../src/utils/common.c",
    "../src/utils/wpa_debug.c",
    "../src/utils/wpabuf.c",
    "config.c",
    "notify.c",
    "bss.c",
    "eap_register.c",
    "wmm_ac.c",
    "config_file.c",
    "wpa_supplicant.c",
    "events.c",
    "blacklist.c",
    "wpas_glue.c",
    "scan.c",
  ]

  configs += [ ":wpa_supplicant_private" ]
}

source_set("wpa_supplicant_fuchsia") {
  sources = [
    "../src/utils/eloop_fuchsia.cc",
    "../src/utils/os_fuchsia.c",
    "main_fuchsia.c",
  ]

  configs += [ ":wpa_supplicant_private" ]

  deps = [
    "//lib/ftl",
    "//lib/mtl",
  ]
}
