if (PICO_CYW43_SUPPORTED) # set by BOARD=pico-w
    if (TARGET cyw43_driver_picow)
        pico_add_impl_library(pico_cyw43_arch)
        target_sources(pico_cyw43_arch INTERFACE
                ${CMAKE_CURRENT_LIST_DIR}/cyw43_arch.c
                ${CMAKE_CURRENT_LIST_DIR}/cyw43_arch_poll.c
                ${CMAKE_CURRENT_LIST_DIR}/cyw43_arch_threadsafe_background.c
                ${CMAKE_CURRENT_LIST_DIR}/cyw43_arch_freertos.c
                )

        target_include_directories(pico_cyw43_arch INTERFACE
                ${CMAKE_CURRENT_LIST_DIR}/include)

        target_link_libraries(pico_cyw43_arch INTERFACE
                pico_unique_id
                cyw43_driver_picow # driver for pico w
                pico_cyw43_driver # integration with async_context
                )

        if (NOT TARGET pico_lwip)
            message(WARNING "lwIP is not available; Full Pico W wireless support will be unavailable")
        else()
            message("Pico W wireless build support available.")
            add_library(pico_cyw43_arch_poll INTERFACE)
            target_link_libraries(pico_cyw43_arch_poll INTERFACE
                    pico_cyw43_arch
                    pico_async_context_poll)
            target_compile_definitions(pico_cyw43_arch_poll INTERFACE
                    PICO_CYW43_ARCH_POLL=1
                    )

            add_library(pico_cyw43_arch_lwip_poll INTERFACE)
            target_link_libraries(pico_cyw43_arch_lwip_poll INTERFACE
                    pico_lwip_nosys
                    pico_cyw43_arch_poll)
            target_compile_definitions(pico_cyw43_arch_lwip_poll INTERFACE
                    CYW43_LWIP=1
                    )

            add_library(pico_cyw43_arch_threadsafe_background INTERFACE)
            target_link_libraries(pico_cyw43_arch_threadsafe_background INTERFACE
                    pico_cyw43_arch
                    pico_async_context_threadsafe_background)
            target_compile_definitions(pico_cyw43_arch_threadsafe_background INTERFACE
                    PICO_CYW43_ARCH_THREADSAFE_BACKGROUND=1
                    )
            add_library(pico_cyw43_arch_lwip_threadsafe_background INTERFACE)

            target_link_libraries(pico_cyw43_arch_lwip_threadsafe_background INTERFACE
                    pico_lwip_nosys
                    pico_cyw43_arch_threadsafe_background)
            target_compile_definitions(pico_cyw43_arch_lwip_threadsafe_background INTERFACE
                    CYW43_LWIP=1
                    )

            add_library(pico_cyw43_arch_sys_freertos INTERFACE)
            target_link_libraries(pico_cyw43_arch_sys_freertos INTERFACE
                    pico_cyw43_arch
                    pico_async_context_freertos)
            target_compile_definitions(pico_cyw43_arch_sys_freertos INTERFACE
                    PICO_CYW43_ARCH_FREERTOS=1
                    )

            add_library(pico_cyw43_arch_lwip_sys_freertos INTERFACE)
            target_link_libraries(pico_cyw43_arch_lwip_sys_freertos INTERFACE
                    pico_lwip_freertos
                    pico_cyw43_arch_sys_freertos)
            target_compile_definitions(pico_cyw43_arch_lwip_sys_freertos INTERFACE
                    CYW43_LWIP=1
                    LWIP_PROVIDE_ERRNO=1
                    # now the default
                    #PICO_LWIP_CUSTOM_LOCK_TCPIP_CORE=1 # we want to override the lwip locking mechanism to use our mutex
                    )
        endif()

        add_library(pico_cyw43_arch_none INTERFACE)
        target_link_libraries(pico_cyw43_arch_none INTERFACE
                pico_cyw43_arch
                pico_async_context_threadsafe_background)
        target_compile_definitions(pico_cyw43_arch_none INTERFACE
                CYW43_LWIP=0
                PICO_CYW43_ARCH_THREADSAFE_BACKGROUND=1 # none still uses threadsafe_background to make gpio use easy
                )
    endif()
endif()

if (PICO_CYW43_DRIVER_PATH AND EXISTS "${PICO_CYW43_DRIVER_PATH}")
    pico_add_doxygen(${PICO_CYW43_DRIVER_PATH}/src)
endif()