# Needed to include the lwIP's HTTP app, which is not included by default.
set(IDF_PATH $ENV{IDF_PATH})
set(CMAKE_MODULE_PATH "${CMAKE_MODULE_PATH}" "${CMAKE_CURRENT_LIST_DIR}/cmake")
set(CMAKE_MODULE_PATH "${CMAKE_MODULE_PATH}" PARENT_SCOPE)

include(BTstack_project)

if( NOT DEFINED BTSTACK_ROOT )
    if( NOT DEFINED ENV{BTSTACK_ROOT} )
        set(BTSTACK_ROOT ${CMAKE_SOURCE_DIR}/../..)
    else()
        set(BTSTACK_ROOT $ENV{BTSTACK_ROOT})
    endif()
    set(BTSTACK_ROOT "${BTSTACK_ROOT}" PARENT_SCOPE)
endif()
message( "BTstack root: \"${BTSTACK_ROOT}\"" )

if (CMAKE_HOST_WIN32)
    string(REPLACE "\\" "/" IDF_PATH $ENV{IDF_PATH})
endif()

set(include_dirs
    ${BTSTACK_ROOT}/3rd-party/bluedroid/decoder/include
    ${BTSTACK_ROOT}/3rd-party/bluedroid/encoder/include
    ${BTSTACK_ROOT}/3rd-party/hxcmod-player
    ${BTSTACK_ROOT}/3rd-party/hxcmod-player/mods
    ${BTSTACK_ROOT}/3rd-party/lc3-google/include
    ${BTSTACK_ROOT}/3rd-party/lwip/dhcp-server
    ${BTSTACK_ROOT}/3rd-party/md5
    ${BTSTACK_ROOT}/3rd-party/qr-code-generator
    ${BTSTACK_ROOT}/3rd-party/yxml
    ${BTSTACK_ROOT}/chipset/zephyr
    ${BTSTACK_ROOT}/src/classic
    ${BTSTACK_ROOT}/src/ble/gatt-service
    ${BTSTACK_ROOT}/src/ble
    ${BTSTACK_ROOT}/src/le-audio
    ${BTSTACK_ROOT}/src/classic
    ${BTSTACK_ROOT}/src
    ${BTSTACK_ROOT}/platform/embedded
    ${BTSTACK_ROOT}/platform/freertos
    ${BTSTACK_ROOT}/platform/lwip
    ${IDF_PATH}/components/lwip/lwip/src/include
    include)

set(src_dirs
    ${BTSTACK_ROOT}/3rd-party/bluedroid/decoder/srce
    ${BTSTACK_ROOT}/3rd-party/bluedroid/encoder/srce
    ${BTSTACK_ROOT}/3rd-party/hxcmod-player
    ${BTSTACK_ROOT}/3rd-party/hxcmod-player/mods
    ${BTSTACK_ROOT}/3rd-party/lc3-google/src
    ${BTSTACK_ROOT}/3rd-party/lwip/dhcp-server
    ${BTSTACK_ROOT}/3rd-party/md5
    ${BTSTACK_ROOT}/3rd-party/micro-ecc
    ${BTSTACK_ROOT}/3rd-party/qr-code-generator
    ${BTSTACK_ROOT}/3rd-party/yxml
    ${BTSTACK_ROOT}/src/ble/gatt-service
    ${BTSTACK_ROOT}/chipset/zephyr
    ${BTSTACK_ROOT}/src/ble
    ${BTSTACK_ROOT}/src/le-audio
    ${BTSTACK_ROOT}/src/mesh
    ${BTSTACK_ROOT}/src
    ${BTSTACK_ROOT}/platform/embedded
    ${BTSTACK_ROOT}/platform/freertos
    ${BTSTACK_ROOT}/platform/lwip
    ${IDF_PATH}/components/lwip/lwip/src/apps/http)

set( exclude_srcs
    ${BTSTACK_ROOT}/platform/embedded/btstack_audio_embedded.c
    ${BTSTACK_ROOT}/platform/embedded/btstack_run_loop_embedded.c
    ${BTSTACK_ROOT}/platform/embedded/btstack_stdin_embedded.c
    ${BTSTACK_ROOT}/platform/embedded/btstack_tlv_flash_bank.c
    ${BTSTACK_ROOT}/platform/embedded/hci_dump_segger_rtt_binary.c
    ${BTSTACK_ROOT}/platform/embedded/hci_dump_segger_rtt_stdout.c
)

set( srcs btstack_port_esp32.c btstack_stdio_esp32.c btstack_tlv_esp32.c )

if(${CONFIG_BTSTACK_AUDIO})
    if("${IDF_VERSION_MAJOR}.${IDF_VERSION_MINOR}" VERSION_GREATER_EQUAL "5.0")
        list(APPEND srcs "btstack_audio_esp32_v5.c")
    else()
        list(APPEND srcs "btstack_audio_esp32_v4.c")
    endif()
endif()

if(CONFIG_BTSTACK_INTERNAL_BT)
    list(APPEND srcs "hci_transport_esp32_vhci.c")
endif()

if(CONFIG_BTSTACK_EXTERNAL_UART_BT)
    list(APPEND srcs
        hal_uart_dma_esp32.c
        ${BTSTACK_ROOT}/platform/embedded/btstack_uart_block_embedded.c)
endif()

if(CONFIG_BTSTACK_HCI_DUMP_STDOUT)
    list( APPEND srcs
        ${BTSTACK_ROOT}/platform/embedded/hci_dump_embedded_stdout.c)
endif()

if(CONFIG_BTDM_CTRL_MODE_BTDM)
    list(APPEND src_dirs
        ${BTSTACK_ROOT}/src/classic)
endif()

set(priv_include_dirs
    ${BTSTACK_ROOT}/3rd-party/micro-ecc
)

set(priv_requires
        "nvs_flash"
        "bt"
        "driver"
        "lwip"
        "vfs"
        )

idf_component_register(
    SRC_DIRS "${src_dirs}"
    EXCLUDE_SRCS "${exclude_srcs}"
    INCLUDE_DIRS "${include_dirs}"
    PRIV_INCLUDE_DIRS "${priv_include_dirs}"
    PRIV_REQUIRES "${priv_requires}"
    REQUIRES btstack_config
)

target_sources(${COMPONENT_LIB} PRIVATE ${srcs})
