if (DEFINED ENV{PICO_BTSTACK_PATH} AND (NOT PICO_BTSTACK_PATH))
    set(PICO_BTSTACK_PATH $ENV{PICO_BTSTACK_PATH})
    message("Using PICO_BTSTACK_PATH from environment ('${PICO_BTSTACK_PATH}')")
endif ()

set(BTSTACK_TEST_PATH "src/bluetooth.h")
if (NOT PICO_BTSTACK_PATH)
    set(PICO_BTSTACK_PATH ${PROJECT_SOURCE_DIR}/lib/btstack)
    if (PICO_CYW43_SUPPORTED AND NOT EXISTS ${PICO_BTSTACK_PATH}/${BTSTACK_TEST_PATH})
        message(WARNING "btstack submodule has not been initialized; Pico W BLE support will be unavailable.
            hint: try 'git submodule update --init' from your SDK directory (${PICO_SDK_PATH}).")
    endif()
elseif (NOT EXISTS ${PICO_BTSTACK_PATH}/${BTSTACK_TEST_PATH})
    message(WARNING "PICO_BTSTACK_PATH specified but content not present.")
endif()

if (EXISTS ${PICO_BTSTACK_PATH}/${BTSTACK_TEST_PATH})
    message("BTstack available at ${PICO_BTSTACK_PATH}")

    pico_register_common_scope_var(PICO_BTSTACK_PATH)

    pico_add_library(pico_btstack_base NOFLAG)
    target_include_directories(pico_btstack_base_headers INTERFACE
        ${PICO_BTSTACK_PATH}/src
        ${PICO_BTSTACK_PATH}/platform/embedded
        )

    target_sources(pico_btstack_base INTERFACE
        ${PICO_BTSTACK_PATH}/3rd-party/micro-ecc/uECC.c
        ${PICO_BTSTACK_PATH}/3rd-party/rijndael/rijndael.c
        ${PICO_BTSTACK_PATH}/3rd-party/segger-rtt/SEGGER_RTT.c
        ${PICO_BTSTACK_PATH}/3rd-party/segger-rtt/SEGGER_RTT_printf.c
        ${PICO_BTSTACK_PATH}/platform/embedded/btstack_tlv_flash_bank.c
        ${PICO_BTSTACK_PATH}/platform/embedded/hci_dump_embedded_stdout.c
        ${PICO_BTSTACK_PATH}/platform/embedded/hci_dump_segger_rtt_stdout.c
        ${PICO_BTSTACK_PATH}/src/ad_parser.c
        ${PICO_BTSTACK_PATH}/src/btstack_base64_decoder.c
        ${PICO_BTSTACK_PATH}/src/btstack_crypto.c
        ${PICO_BTSTACK_PATH}/src/btstack_hid_parser.c
        ${PICO_BTSTACK_PATH}/src/btstack_linked_list.c
        ${PICO_BTSTACK_PATH}/src/btstack_memory.c
        ${PICO_BTSTACK_PATH}/src/btstack_memory_pool.c
        ${PICO_BTSTACK_PATH}/src/btstack_resample.c
        ${PICO_BTSTACK_PATH}/src/btstack_ring_buffer.c
        ${PICO_BTSTACK_PATH}/src/btstack_run_loop.c
        ${PICO_BTSTACK_PATH}/src/btstack_run_loop_base.c
        ${PICO_BTSTACK_PATH}/src/btstack_slip.c
        ${PICO_BTSTACK_PATH}/src/btstack_tlv.c
        ${PICO_BTSTACK_PATH}/src/btstack_tlv_none.c
        ${PICO_BTSTACK_PATH}/src/btstack_util.c
        ${PICO_BTSTACK_PATH}/src/hci.c
        ${PICO_BTSTACK_PATH}/src/hci_cmd.c
        ${PICO_BTSTACK_PATH}/src/hci_dump.c
        ${PICO_BTSTACK_PATH}/src/l2cap.c
        ${PICO_BTSTACK_PATH}/src/l2cap_signaling.c
        ${PICO_BTSTACK_PATH}/src/mesh/gatt-service/mesh_provisioning_service_server.c
        ${PICO_BTSTACK_PATH}/src/mesh/gatt-service/mesh_proxy_service_server.c
        ${PICO_BTSTACK_PATH}/3rd-party/md5/md5.c
        ${PICO_BTSTACK_PATH}/3rd-party/yxml/yxml.c
        ${CMAKE_CURRENT_LIST_DIR}/btstack_stdin_pico.c
    )
    target_include_directories(pico_btstack_base_headers INTERFACE
        ${PICO_BTSTACK_PATH}/
        ${PICO_BTSTACK_PATH}/3rd-party/md5
        ${PICO_BTSTACK_PATH}/3rd-party/yxml
        ${PICO_BTSTACK_PATH}/3rd-party/rijndael
        ${PICO_BTSTACK_PATH}/3rd-party/micro-ecc
        ${PICO_BTSTACK_PATH}/3rd-party/segger-rtt
    )

    pico_add_library(pico_btstack_ble)
    target_sources(pico_btstack_ble INTERFACE
        ${PICO_BTSTACK_PATH}/src/ble/att_db.c
        ${PICO_BTSTACK_PATH}/src/ble/att_db_util.c
        ${PICO_BTSTACK_PATH}/src/ble/att_dispatch.c
        ${PICO_BTSTACK_PATH}/src/ble/att_server.c
        ${PICO_BTSTACK_PATH}/src/ble/gatt-service/battery_service_server.c
        ${PICO_BTSTACK_PATH}/src/ble/gatt-service/battery_service_client.c
        ${PICO_BTSTACK_PATH}/src/ble/gatt-service/cycling_power_service_server.c
        ${PICO_BTSTACK_PATH}/src/ble/gatt-service/cycling_speed_and_cadence_service_server.c
        ${PICO_BTSTACK_PATH}/src/ble/gatt-service/device_information_service_server.c
        ${PICO_BTSTACK_PATH}/src/ble/gatt-service/device_information_service_client.c
        ${PICO_BTSTACK_PATH}/src/ble/gatt-service/heart_rate_service_server.c
        ${PICO_BTSTACK_PATH}/src/ble/gatt-service/hids_client.c
        ${PICO_BTSTACK_PATH}/src/ble/gatt-service/hids_device.c
        ${PICO_BTSTACK_PATH}/src/ble/gatt-service/nordic_spp_service_server.c
        ${PICO_BTSTACK_PATH}/src/ble/gatt-service/ublox_spp_service_server.c
        ${PICO_BTSTACK_PATH}/src/ble/gatt-service/ancs_client.c
        ${PICO_BTSTACK_PATH}/src/ble/gatt_client.c
        ${PICO_BTSTACK_PATH}/src/ble/le_device_db_memory.c
        ${PICO_BTSTACK_PATH}/src/ble/le_device_db_tlv.c
        ${PICO_BTSTACK_PATH}/src/ble/sm.c
    )
    pico_mirrored_target_link_libraries(pico_btstack_ble INTERFACE
        pico_btstack_base
    )
    target_compile_definitions(pico_btstack_ble_headers INTERFACE
            ENABLE_BLE=1
            )

    pico_add_library(pico_btstack_classic)
    target_sources(pico_btstack_classic INTERFACE
        ${PICO_BTSTACK_PATH}/src/classic/a2dp.c
        ${PICO_BTSTACK_PATH}/src/classic/a2dp_sink.c
        ${PICO_BTSTACK_PATH}/src/classic/a2dp_source.c
        ${PICO_BTSTACK_PATH}/src/classic/avdtp.c
        ${PICO_BTSTACK_PATH}/src/classic/avdtp_acceptor.c
        ${PICO_BTSTACK_PATH}/src/classic/avdtp_initiator.c
        ${PICO_BTSTACK_PATH}/src/classic/avdtp_sink.c
        ${PICO_BTSTACK_PATH}/src/classic/avdtp_source.c
        ${PICO_BTSTACK_PATH}/src/classic/avdtp_util.c
        ${PICO_BTSTACK_PATH}/src/classic/avrcp.c
        ${PICO_BTSTACK_PATH}/src/classic/avrcp_browsing.c
        ${PICO_BTSTACK_PATH}/src/classic/avrcp_browsing_controller.c
        ${PICO_BTSTACK_PATH}/src/classic/avrcp_browsing_target.c
        ${PICO_BTSTACK_PATH}/src/classic/avrcp_controller.c
        ${PICO_BTSTACK_PATH}/src/classic/avrcp_media_item_iterator.c
        ${PICO_BTSTACK_PATH}/src/classic/avrcp_target.c
        ${PICO_BTSTACK_PATH}/src/classic/btstack_cvsd_plc.c
        ${PICO_BTSTACK_PATH}/src/classic/btstack_link_key_db_tlv.c
        ${PICO_BTSTACK_PATH}/src/classic/btstack_sbc_plc.c
        ${PICO_BTSTACK_PATH}/src/classic/device_id_server.c
        ${PICO_BTSTACK_PATH}/src/classic/gatt_sdp.c
        ${PICO_BTSTACK_PATH}/src/classic/goep_client.c
        ${PICO_BTSTACK_PATH}/src/classic/goep_server.c
        ${PICO_BTSTACK_PATH}/src/classic/hfp.c
        ${PICO_BTSTACK_PATH}/src/classic/hfp_ag.c
        ${PICO_BTSTACK_PATH}/src/classic/hfp_gsm_model.c
        ${PICO_BTSTACK_PATH}/src/classic/hfp_hf.c
        ${PICO_BTSTACK_PATH}/src/classic/hfp_msbc.c
        ${PICO_BTSTACK_PATH}/src/classic/hid_device.c
        ${PICO_BTSTACK_PATH}/src/classic/hid_host.c
        ${PICO_BTSTACK_PATH}/src/classic/hsp_ag.c
        ${PICO_BTSTACK_PATH}/src/classic/hsp_hs.c
        ${PICO_BTSTACK_PATH}/src/classic/obex_iterator.c
        ${PICO_BTSTACK_PATH}/src/classic/obex_message_builder.c
        ${PICO_BTSTACK_PATH}/src/classic/obex_parser.c
        ${PICO_BTSTACK_PATH}/src/classic/pan.c
        ${PICO_BTSTACK_PATH}/src/classic/pbap_client.c
        ${PICO_BTSTACK_PATH}/src/classic/rfcomm.c
        ${PICO_BTSTACK_PATH}/src/classic/sdp_client.c
        ${PICO_BTSTACK_PATH}/src/classic/sdp_client_rfcomm.c
        ${PICO_BTSTACK_PATH}/src/classic/sdp_server.c
        ${PICO_BTSTACK_PATH}/src/classic/sdp_util.c
        ${PICO_BTSTACK_PATH}/src/classic/spp_server.c
    )
    pico_mirrored_target_link_libraries(pico_btstack_classic INTERFACE
        pico_btstack_base
    )
    target_compile_definitions(pico_btstack_classic_headers INTERFACE
            ENABLE_CLASSIC=1
            )

    pico_add_library(pico_btstack_flash_bank)
    target_sources(pico_btstack_flash_bank INTERFACE
            ${CMAKE_CURRENT_LIST_DIR}/btstack_flash_bank.c
    )
    target_include_directories(pico_btstack_flash_bank_headers INTERFACE ${CMAKE_CURRENT_LIST_DIR}/include)
    pico_mirrored_target_link_libraries(pico_btstack_flash_bank INTERFACE pico_btstack_base)

    pico_add_library(pico_btstack_run_loop_async_context NOFLAG)
    target_sources(pico_btstack_run_loop_async_context INTERFACE
            ${CMAKE_CURRENT_LIST_DIR}/btstack_run_loop_async_context.c
    )
    target_include_directories(pico_btstack_run_loop_async_context_headers INTERFACE ${CMAKE_CURRENT_LIST_DIR}/include)
    pico_mirrored_target_link_libraries(pico_btstack_run_loop_async_context INTERFACE pico_btstack_base pico_async_context_base)

    pico_add_library(pico_btstack_sbc_encoder NOFLAG)
    target_sources(pico_btstack_sbc_encoder INTERFACE
            # SBC codec for A2DP and HFP demos
            ${PICO_BTSTACK_PATH}/src/classic/btstack_sbc_encoder_bluedroid.c
            ${PICO_BTSTACK_PATH}/3rd-party/bluedroid/encoder/srce/sbc_analysis.c
            ${PICO_BTSTACK_PATH}/3rd-party/bluedroid/encoder/srce/sbc_dct.c
            ${PICO_BTSTACK_PATH}/3rd-party/bluedroid/encoder/srce/sbc_dct_coeffs.c
            ${PICO_BTSTACK_PATH}/3rd-party/bluedroid/encoder/srce/sbc_enc_bit_alloc_mono.c
            ${PICO_BTSTACK_PATH}/3rd-party/bluedroid/encoder/srce/sbc_enc_bit_alloc_ste.c
            ${PICO_BTSTACK_PATH}/3rd-party/bluedroid/encoder/srce/sbc_enc_coeffs.c
            ${PICO_BTSTACK_PATH}/3rd-party/bluedroid/encoder/srce/sbc_encoder.c
            ${PICO_BTSTACK_PATH}/3rd-party/bluedroid/encoder/srce/sbc_packing.c
            )
    target_include_directories(pico_btstack_sbc_encoder_headers INTERFACE
            ${PICO_BTSTACK_PATH}/3rd-party/bluedroid/encoder/include
            )

    pico_add_library(pico_btstack_sbc_decoder NOFLAG)
    target_sources(pico_btstack_sbc_decoder INTERFACE
            ${PICO_BTSTACK_PATH}/src/classic/btstack_sbc_decoder_bluedroid.c
            ${PICO_BTSTACK_PATH}/3rd-party/bluedroid/decoder/srce/alloc.c
            ${PICO_BTSTACK_PATH}/3rd-party/bluedroid/decoder/srce/bitalloc.c
            ${PICO_BTSTACK_PATH}/3rd-party/bluedroid/decoder/srce/bitalloc-sbc.c
            ${PICO_BTSTACK_PATH}/3rd-party/bluedroid/decoder/srce/bitstream-decode.c
            ${PICO_BTSTACK_PATH}/3rd-party/bluedroid/decoder/srce/decoder-oina.c
            ${PICO_BTSTACK_PATH}/3rd-party/bluedroid/decoder/srce/decoder-private.c
            ${PICO_BTSTACK_PATH}/3rd-party/bluedroid/decoder/srce/decoder-sbc.c
            ${PICO_BTSTACK_PATH}/3rd-party/bluedroid/decoder/srce/dequant.c
            ${PICO_BTSTACK_PATH}/3rd-party/bluedroid/decoder/srce/framing.c
            ${PICO_BTSTACK_PATH}/3rd-party/bluedroid/decoder/srce/framing-sbc.c
            ${PICO_BTSTACK_PATH}/3rd-party/bluedroid/decoder/srce/oi_codec_version.c
            ${PICO_BTSTACK_PATH}/3rd-party/bluedroid/decoder/srce/synthesis-sbc.c
            ${PICO_BTSTACK_PATH}/3rd-party/bluedroid/decoder/srce/synthesis-dct8.c
            ${PICO_BTSTACK_PATH}/3rd-party/bluedroid/decoder/srce/synthesis-8-generated.c
            )
    target_include_directories(pico_btstack_sbc_decoder_headers INTERFACE
            ${PICO_BTSTACK_PATH}/3rd-party/bluedroid/decoder/include
            )

    pico_add_library(pico_btstack_bnep_lwip NOFLAG)
    target_sources(pico_btstack_bnep_lwip INTERFACE
            ${PICO_BTSTACK_PATH}/src/classic/bnep.c
            ${PICO_BTSTACK_PATH}/platform/lwip/bnep_lwip.c
            )
    target_include_directories(pico_btstack_bnep_lwip_headers INTERFACE
            ${PICO_BTSTACK_PATH}/platform/lwip
            )

    pico_add_library(pico_btstack_bnep_lwip_sys_freertos NOFLAG)
    target_include_directories(pico_btstack_bnep_lwip_sys_freertos INTERFACE
            ${PICO_BTSTACK_PATH}/platform/freertos
            )
    pico_mirrored_target_link_libraries(pico_btstack_bnep_lwip_sys_freertos INTERFACE
            pico_btstack_bnep_lwip
    )
    target_compile_definitions(pico_btstack_bnep_lwip_sys_freertos INTERFACE
            LWIP_PROVIDE_ERRNO=1
            PICO_LWIP_CUSTOM_LOCK_TCPIP_CORE=1
            )

    pico_promote_common_scope_vars()

    # Make a GATT header file from a BTstack GATT file
    # Pass the target library name library type and path to the GATT input file
    function(pico_btstack_make_gatt_header TARGET_LIB TARGET_TYPE GATT_FILE)
            find_package (Python3 REQUIRED COMPONENTS Interpreter)
            get_filename_component(GATT_NAME "${GATT_FILE}" NAME_WE)
            get_filename_component(GATT_PATH "${GATT_FILE}" PATH)
            set(GATT_BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}/generated")
            set(GATT_HEADER "${GATT_BINARY_DIR}/${GATT_NAME}.h")
            set(TARGET_GATT "${TARGET_LIB}_gatt_header")

            add_custom_target(${TARGET_GATT} DEPENDS ${GATT_HEADER})
            add_custom_command(
                    OUTPUT ${GATT_HEADER}
                    DEPENDS ${GATT_FILE}
                    WORKING_DIRECTORY ${GATT_PATH}
                    COMMAND ${CMAKE_COMMAND} -E make_directory ${GATT_BINARY_DIR} &&
                            ${Python3_EXECUTABLE} ${PICO_SDK_PATH}/lib/btstack/tool/compile_gatt.py ${GATT_FILE} ${GATT_HEADER}
                    VERBATIM)
            add_dependencies(${TARGET_LIB}
                    ${TARGET_GATT}
                    )
            target_include_directories(${TARGET_LIB} ${TARGET_TYPE}
                    ${GATT_BINARY_DIR}
                    )
    endfunction()

    function(suppress_btstack_warnings)
        set_source_files_properties(
            ${PICO_BTSTACK_PATH}/src/ble/att_server.c
            ${PICO_BTSTACK_PATH}/src/ble/gatt-service/device_information_service_server.c
            ${PICO_BTSTACK_PATH}/src/ble/gatt-service/hids_client.c
            ${PICO_BTSTACK_PATH}/src/btstack_util.c
            ${PICO_BTSTACK_PATH}/src/btstack_crypto.c
            ${PICO_BTSTACK_PATH}/src/classic/a2dp.c
            ${PICO_BTSTACK_PATH}/src/classic/a2dp_sink.c
            ${PICO_BTSTACK_PATH}/src/classic/a2dp_source.c
            ${PICO_BTSTACK_PATH}/src/classic/avdtp.c
            ${PICO_BTSTACK_PATH}/src/classic/avdtp_source.c
            ${PICO_BTSTACK_PATH}/src/classic/avrcp.c
            ${PICO_BTSTACK_PATH}/src/classic/avrcp_controller.c
            ${PICO_BTSTACK_PATH}/src/classic/btstack_sbc_decoder_bluedroid.c
            ${PICO_BTSTACK_PATH}/src/classic/avrcp_target.c
            ${PICO_BTSTACK_PATH}/src/classic/hid_device.c
            ${PICO_BTSTACK_PATH}/src/classic/hsp_ag.c
            ${PICO_BTSTACK_PATH}/src/classic/hsp_hs.c
            ${PICO_BTSTACK_PATH}/src/classic/pan.c
            ${PICO_BTSTACK_PATH}/src/classic/pbap_client.c
            ${PICO_BTSTACK_PATH}/src/classic/rfcomm.c
            ${PICO_BTSTACK_PATH}/src/classic/sdp_client_rfcomm.c
            ${PICO_BTSTACK_PATH}/src/classic/sdp_server.c
            ${PICO_BTSTACK_PATH}/src/classic/spp_server.c
            PROPERTIES
            COMPILE_OPTIONS "-Wno-cast-qual"
            )
        set_source_files_properties(
            ${PICO_BTSTACK_PATH}/src/ble/sm.c
            ${PICO_BTSTACK_PATH}/src/l2cap.c
            PROPERTIES
            COMPILE_OPTIONS "-Wno-cast-qual;-Wno-unused-parameter"
            )
        set_source_files_properties(
            ${PICO_BTSTACK_PATH}/src/btstack_hid_parser.c
            PROPERTIES
            COMPILE_OPTIONS "-Wno-maybe-uninitialized"
            )
        set_source_files_properties(
            ${PICO_BTSTACK_PATH}/src/btstack_tlv_none.c
            ${PICO_BTSTACK_PATH}/src/classic/avdtp_util.c
            PROPERTIES
            COMPILE_OPTIONS "-Wno-unused-parameter"
            )
        set_source_files_properties(
            ${PICO_BTSTACK_PATH}/platform/embedded/hci_dump_embedded_stdout.c
            PROPERTIES
            COMPILE_OPTIONS "-Wno-suggest-attribute=format"
            )
        set_source_files_properties(
            ${PICO_BTSTACK_PATH}/src/hci.c
            ${PICO_BTSTACK_PATH}/src/classic/rfcomm.c
            PROPERTIES
            COMPILE_OPTIONS "-Wno-cast-qual;-Wno-format"
            )
        set_source_files_properties(
            ${PICO_BTSTACK_PATH}/platform/embedded/hal_flash_bank_memory.c
            PROPERTIES
            COMPILE_OPTIONS "-Wno-sign-compare;-Wno-format"
            )
        set_source_files_properties(
            ${PICO_BTSTACK_PATH}/platform/embedded/btstack_tlv_flash_bank.c
            PROPERTIES
            COMPILE_OPTIONS "-Wno-unused-parameter;-Wno-sign-compare"
            )
        set_source_files_properties(
            ${PICO_BTSTACK_PATH}/src/ble/gatt-service/hids_client.c
            PROPERTIES
            COMPILE_OPTIONS "-Wno-cast-qual;-Wno-null-dereference"
            )
        set_source_files_properties(
            ${PICO_BTSTACK_PATH}/src/classic/hfp.c
            PROPERTIES
            COMPILE_OPTIONS "-Wno-cast-qual;-Wno-null-dereference;-Wno-unused-parameter"
            )
        set_source_files_properties(
            ${PICO_BTSTACK_PATH}/src/classic/goep_server.c
            PROPERTIES
            COMPILE_OPTIONS "-Wno-unused-parameter;-Wno-null-dereference"
            )
        set_source_files_properties(
            ${PICO_BTSTACK_PATH}/src/ble/gatt-service/battery_service_client.c
            ${PICO_BTSTACK_PATH}/src/ble/gatt-service/device_information_service_client.c
            PROPERTIES
            COMPILE_OPTIONS "-Wno-null-dereference"
            )
        set_source_files_properties(
            ${PICO_BTSTACK_PATH}/src/classic/hfp_hf.c
            PROPERTIES
            COMPILE_OPTIONS "-Wno-type-limits;-Wno-stringop-overflow"
            )
        set_source_files_properties(
            ${PICO_BTSTACK_PATH}/src/btstack_crypto.c
            PROPERTIES
            COMPILE_OPTIONS "-Wno-cast-qual;-Wno-sign-compare"
            )
    endfunction()
endif()
