# SPDX-License-Identifier: Apache-2.0

if(CONFIG_BT_CTLR_ADVANCED_FEATURES)
  message(WARNING "\nCONFIG_BT_CTLR_ADVANCED_FEATURES=y, Advanced Features' "
                  "default value change could change Zephyr Bluetooth "
                  "Controller's functional behavior.")
endif()

zephyr_library()

zephyr_library_sources(
  util/mem.c
  util/memq.c
  util/mayfly.c
  util/dbuf.c
  util/util.c
  ticker/ticker.c
  ll_sw/ll_feat.c
  ll_sw/ll_tx_pwr.c
  ll_sw/ll_addr.c
  ll_sw/ull.c
  ll_sw/lll_common.c
  hci/hci_driver.c
  hci/hci.c
  )

if(CONFIG_BT_BROADCASTER)
  zephyr_library_sources(
    ll_sw/ull_adv.c
    )
  zephyr_library_sources_ifdef(
    CONFIG_BT_CTLR_ADV_EXT
    ll_sw/ull_adv_aux.c
    )
  zephyr_library_sources_ifdef(
    CONFIG_BT_CTLR_ADV_PERIODIC
    ll_sw/ull_adv_sync.c
    )
  zephyr_library_sources_ifdef(
    CONFIG_BT_CTLR_ADV_ISO
    ll_sw/ull_adv_iso.c
    )
endif()

if(CONFIG_BT_OBSERVER)
  zephyr_library_sources(
    ll_sw/ull_scan.c
    )
  zephyr_library_sources_ifdef(
    CONFIG_BT_CTLR_ADV_EXT
    ll_sw/ull_scan_aux.c
    )
  zephyr_library_sources_ifdef(
    CONFIG_BT_CTLR_SYNC_PERIODIC
    ll_sw/ull_sync.c
    )
  zephyr_library_sources_ifdef(
    CONFIG_BT_CTLR_SYNC_ISO
    ll_sw/ull_sync_iso.c
    )
endif()

if(CONFIG_BT_CONN)
  zephyr_library_sources(
    ll_sw/ull_conn.c
    )
  zephyr_library_sources_ifdef(
    CONFIG_BT_CTLR_LE_ENC
    ll_sw/ull_llcp_enc.c
    )
  zephyr_library_sources_ifdef(
    CONFIG_BT_CTLR_PHY
    ll_sw/ull_llcp_phy.c
    )
  if (CONFIG_BT_CTLR_PERIPHERAL_ISO OR
      CONFIG_BT_CTLR_CENTRAL_ISO)
    zephyr_library_sources(
      ll_sw/ull_llcp_cc.c
      )
  endif()
  zephyr_library_sources(
    ll_sw/ull_tx_queue.c
    ll_sw/ull_llcp.c
    ll_sw/ull_llcp_common.c
    ll_sw/ull_llcp_local.c
    ll_sw/ull_llcp_pdu.c
    ll_sw/ull_llcp_conn_upd.c
    ll_sw/ull_llcp_chmu.c
    ll_sw/ull_llcp_remote.c
    )
  zephyr_library_sources_ifdef(
    CONFIG_BT_PERIPHERAL
    ll_sw/ull_peripheral.c
    )
  zephyr_library_sources_ifdef(
    CONFIG_BT_CTLR_PERIPHERAL_ISO
    ll_sw/ull_peripheral_iso.c
    )
  zephyr_library_sources_ifdef(
    CONFIG_BT_CENTRAL
    ll_sw/ull_central.c
    )
  zephyr_library_sources_ifdef(
    CONFIG_BT_CTLR_CENTRAL_ISO
    ll_sw/ull_central_iso.c
    )
endif()

zephyr_library_sources_ifdef(
  CONFIG_BT_CTLR_SCHED_ADVANCED
  ll_sw/ull_sched.c
  )

zephyr_library_sources_ifdef(
  CONFIG_BT_CTLR_DF
  ll_sw/ull_df.c
  )

zephyr_library_sources_ifdef(
  CONFIG_BT_CTLR_CONN_ISO
  ll_sw/ull_conn_iso.c
  )

zephyr_library_sources_ifdef(
  CONFIG_BT_CTLR_ISO
  ll_sw/ull_iso.c
  ll_sw/isoal.c
  )

if(CONFIG_BT_CONN OR
   (CONFIG_BT_BROADCASTER AND
    CONFIG_BT_CTLR_ADV_EXT) OR
   CONFIG_BT_CTLR_ADV_PERIODIC OR
   CONFIG_BT_CTLR_SYNC_PERIODIC)
  zephyr_library_sources(
    ll_sw/ull_chan.c
    ll_sw/lll_chan.c
    )
endif()

if(CONFIG_BT_CTLR_FILTER_ACCEPT_LIST OR
   CONFIG_BT_CTLR_SYNC_PERIODIC_ADV_LIST)
  zephyr_library_sources(
    ll_sw/ull_filter.c
    )
endif()

zephyr_library_sources_ifdef(
  CONFIG_BT_HCI_MESH_EXT
  ll_sw/ll_mesh.c
  )

zephyr_library_sources_ifdef(
  CONFIG_BT_CTLR_SETTINGS
  ll_sw/ll_settings.c
  )

zephyr_library_sources_ifdef(
  CONFIG_BT_CTLR_CRYPTO
  crypto/crypto.c
  )

zephyr_library_sources_ifdef(
  CONFIG_SOC_FLASH_NRF_RADIO_SYNC_TICKER
  flash/soc_flash_nrf_ticker.c
  )

add_subdirectory_ifdef(
  CONFIG_BT_CTLR_COEX_DRIVERS
  coex
  )

if(CONFIG_SOC_COMPATIBLE_NRF)
  include(ll_sw/nrf.cmake)
elseif(CONFIG_SOC_OPENISA_RV32M1_RISCV32)
  include(ll_sw/openisa.cmake)
endif()

zephyr_library_include_directories(
  .
  include
  )

zephyr_library_include_directories_ifdef(
  CONFIG_BT_CTLR_CRYPTO
  ../crypto
)

zephyr_library_include_directories_ifdef(
  CONFIG_SOC_FLASH_NRF_RADIO_SYNC_TICKER
  ${ZEPHYR_BASE}/drivers/flash
)

zephyr_library_compile_options_ifdef(
  CONFIG_BT_CTLR_OPTIMIZE_FOR_SPEED
  ${OPTIMIZE_FOR_SPEED_FLAG}
  )

zephyr_library_link_libraries(subsys__bluetooth)
