blob: 1a523b78150910b2adc85aa58bb7384f11153f7e [file] [log] [blame]
if (DEFINED ENV{PICO_LWIP_PATH} AND (NOT PICO_LWIP_PATH))
set(PICO_LWIP_PATH $ENV{PICO_LWIP_PATH})
message("Using PICO_LWIP_PATH from environment ('${PICO_LWIP_PATH}')")
endif ()
set(LWIP_TEST_PATH "src/Filelists.cmake")
if (NOT PICO_LWIP_PATH)
set(PICO_LWIP_PATH ${PROJECT_SOURCE_DIR}/lib/lwip)
if (PICO_CYW43_SUPPORTED AND NOT EXISTS ${PICO_LWIP_PATH}/${LWIP_TEST_PATH})
message(WARNING "LWIP submodule has not been initialized; Pico W wireless support will be unavailable
#hint: try 'git submodule update --init' from your SDK directory (${PICO_SDK_PATH}).")
endif()
elseif (NOT EXISTS ${PICO_LWIP_PATH}/${LWIP_TEST_PATH})
message(WARNING "PICO_LWIP_PATH specified but content not present.")
endif()
if (EXISTS ${PICO_LWIP_PATH}/${LWIP_TEST_PATH})
message("lwIP available at ${PICO_LWIP_PATH}")
# argh... wanted to use this, but they dump stuff into the source tree, which breaks parallel builds
#set(LWIP_DIR ${PICO_LWIP_PATH})
#include(${PICO_LWIP_PATH}/src/Filelists.cmake)
pico_register_common_scope_var(PICO_LWIP_PATH)
# The minimum set of files needed for lwIP.
pico_add_library(pico_lwip_core NOFLAG)
target_sources(pico_lwip_core INTERFACE
${PICO_LWIP_PATH}/src/core/init.c
${PICO_LWIP_PATH}/src/core/def.c
${PICO_LWIP_PATH}/src/core/dns.c
${PICO_LWIP_PATH}/src/core/inet_chksum.c
${PICO_LWIP_PATH}/src/core/ip.c
${PICO_LWIP_PATH}/src/core/mem.c
${PICO_LWIP_PATH}/src/core/memp.c
${PICO_LWIP_PATH}/src/core/netif.c
${PICO_LWIP_PATH}/src/core/pbuf.c
${PICO_LWIP_PATH}/src/core/raw.c
${PICO_LWIP_PATH}/src/core/stats.c
${PICO_LWIP_PATH}/src/core/sys.c
${PICO_LWIP_PATH}/src/core/altcp.c
${PICO_LWIP_PATH}/src/core/altcp_alloc.c
${PICO_LWIP_PATH}/src/core/altcp_tcp.c
${PICO_LWIP_PATH}/src/core/tcp.c
${PICO_LWIP_PATH}/src/core/tcp_in.c
${PICO_LWIP_PATH}/src/core/tcp_out.c
${PICO_LWIP_PATH}/src/core/timeouts.c
${PICO_LWIP_PATH}/src/core/udp.c
)
target_include_directories(pico_lwip_core_headers SYSTEM INTERFACE
${PICO_LWIP_PATH}/src/include)
pico_add_library(pico_lwip_core4 NOFLAG)
target_sources(pico_lwip_core4 INTERFACE
${PICO_LWIP_PATH}/src/core/ipv4/autoip.c
${PICO_LWIP_PATH}/src/core/ipv4/dhcp.c
${PICO_LWIP_PATH}/src/core/ipv4/etharp.c
${PICO_LWIP_PATH}/src/core/ipv4/icmp.c
${PICO_LWIP_PATH}/src/core/ipv4/igmp.c
${PICO_LWIP_PATH}/src/core/ipv4/ip4_frag.c
${PICO_LWIP_PATH}/src/core/ipv4/ip4.c
${PICO_LWIP_PATH}/src/core/ipv4/ip4_addr.c
)
# Doesn't exists in version earlier than 2.1.3
if (EXISTS ${PICO_LWIP_PATH}/src/core/ipv4/acd.c)
target_sources(pico_lwip_core4 INTERFACE
${PICO_LWIP_PATH}/src/core/ipv4/acd.c
)
endif()
pico_add_library(pico_lwip_core6 NOFLAG)
target_sources(pico_lwip_core6 INTERFACE
${PICO_LWIP_PATH}/src/core/ipv6/dhcp6.c
${PICO_LWIP_PATH}/src/core/ipv6/ethip6.c
${PICO_LWIP_PATH}/src/core/ipv6/icmp6.c
${PICO_LWIP_PATH}/src/core/ipv6/inet6.c
${PICO_LWIP_PATH}/src/core/ipv6/ip6.c
${PICO_LWIP_PATH}/src/core/ipv6/ip6_addr.c
${PICO_LWIP_PATH}/src/core/ipv6/ip6_frag.c
${PICO_LWIP_PATH}/src/core/ipv6/mld6.c
${PICO_LWIP_PATH}/src/core/ipv6/nd6.c
)
# APIFILES: The files which implement the sequential and socket APIs.
pico_add_library(pico_lwip_api NOFLAG)
target_sources(pico_lwip_api INTERFACE
${PICO_LWIP_PATH}/src/api/api_lib.c
${PICO_LWIP_PATH}/src/api/api_msg.c
${PICO_LWIP_PATH}/src/api/err.c
${PICO_LWIP_PATH}/src/api/if_api.c
${PICO_LWIP_PATH}/src/api/netbuf.c
${PICO_LWIP_PATH}/src/api/netdb.c
${PICO_LWIP_PATH}/src/api/netifapi.c
${PICO_LWIP_PATH}/src/api/sockets.c
${PICO_LWIP_PATH}/src/api/tcpip.c
)
# Files implementing various generic network interface functions
pico_add_library(pico_lwip_netif NOFLAG)
target_sources(pico_lwip_netif INTERFACE
${PICO_LWIP_PATH}/src/netif/ethernet.c
${PICO_LWIP_PATH}/src/netif/bridgeif.c
${PICO_LWIP_PATH}/src/netif/bridgeif_fdb.c
${PICO_LWIP_PATH}/src/netif/slipif.c
)
# 6LoWPAN
pico_add_library(pico_lwip_sixlowpan NOFLAG)
target_sources(pico_lwip_sixlowpan INTERFACE
${PICO_LWIP_PATH}/src/netif/lowpan6_common.c
${PICO_LWIP_PATH}/src/netif/lowpan6.c
${PICO_LWIP_PATH}/src/netif/lowpan6_ble.c
${PICO_LWIP_PATH}/src/netif/zepif.c
)
# PPP
pico_add_library(pico_lwip_ppp NOFLAG)
target_sources(pico_lwip_ppp INTERFACE
${PICO_LWIP_PATH}/src/netif/ppp/auth.c
${PICO_LWIP_PATH}/src/netif/ppp/ccp.c
${PICO_LWIP_PATH}/src/netif/ppp/chap-md5.c
${PICO_LWIP_PATH}/src/netif/ppp/chap_ms.c
${PICO_LWIP_PATH}/src/netif/ppp/chap-new.c
${PICO_LWIP_PATH}/src/netif/ppp/demand.c
${PICO_LWIP_PATH}/src/netif/ppp/eap.c
${PICO_LWIP_PATH}/src/netif/ppp/ecp.c
${PICO_LWIP_PATH}/src/netif/ppp/eui64.c
${PICO_LWIP_PATH}/src/netif/ppp/fsm.c
${PICO_LWIP_PATH}/src/netif/ppp/ipcp.c
${PICO_LWIP_PATH}/src/netif/ppp/ipv6cp.c
${PICO_LWIP_PATH}/src/netif/ppp/lcp.c
${PICO_LWIP_PATH}/src/netif/ppp/magic.c
${PICO_LWIP_PATH}/src/netif/ppp/mppe.c
${PICO_LWIP_PATH}/src/netif/ppp/multilink.c
${PICO_LWIP_PATH}/src/netif/ppp/ppp.c
${PICO_LWIP_PATH}/src/netif/ppp/pppapi.c
${PICO_LWIP_PATH}/src/netif/ppp/pppcrypt.c
${PICO_LWIP_PATH}/src/netif/ppp/pppoe.c
${PICO_LWIP_PATH}/src/netif/ppp/pppol2tp.c
${PICO_LWIP_PATH}/src/netif/ppp/pppos.c
${PICO_LWIP_PATH}/src/netif/ppp/upap.c
${PICO_LWIP_PATH}/src/netif/ppp/utils.c
${PICO_LWIP_PATH}/src/netif/ppp/vj.c
${PICO_LWIP_PATH}/src/netif/ppp/polarssl/arc4.c
${PICO_LWIP_PATH}/src/netif/ppp/polarssl/des.c
${PICO_LWIP_PATH}/src/netif/ppp/polarssl/md4.c
${PICO_LWIP_PATH}/src/netif/ppp/polarssl/md5.c
${PICO_LWIP_PATH}/src/netif/ppp/polarssl/sha1.c
)
# SNMPv3 agent
pico_add_library(pico_lwip_snmp NOFLAG)
target_sources(pico_lwip_snmp INTERFACE
${PICO_LWIP_PATH}/src/apps/snmp/snmp_asn1.c
${PICO_LWIP_PATH}/src/apps/snmp/snmp_core.c
${PICO_LWIP_PATH}/src/apps/snmp/snmp_mib2.c
${PICO_LWIP_PATH}/src/apps/snmp/snmp_mib2_icmp.c
${PICO_LWIP_PATH}/src/apps/snmp/snmp_mib2_interfaces.c
${PICO_LWIP_PATH}/src/apps/snmp/snmp_mib2_ip.c
${PICO_LWIP_PATH}/src/apps/snmp/snmp_mib2_snmp.c
${PICO_LWIP_PATH}/src/apps/snmp/snmp_mib2_system.c
${PICO_LWIP_PATH}/src/apps/snmp/snmp_mib2_tcp.c
${PICO_LWIP_PATH}/src/apps/snmp/snmp_mib2_udp.c
${PICO_LWIP_PATH}/src/apps/snmp/snmp_snmpv2_framework.c
${PICO_LWIP_PATH}/src/apps/snmp/snmp_snmpv2_usm.c
${PICO_LWIP_PATH}/src/apps/snmp/snmp_msg.c
${PICO_LWIP_PATH}/src/apps/snmp/snmpv3.c
${PICO_LWIP_PATH}/src/apps/snmp/snmp_netconn.c
${PICO_LWIP_PATH}/src/apps/snmp/snmp_pbuf_stream.c
${PICO_LWIP_PATH}/src/apps/snmp/snmp_raw.c
${PICO_LWIP_PATH}/src/apps/snmp/snmp_scalar.c
${PICO_LWIP_PATH}/src/apps/snmp/snmp_table.c
${PICO_LWIP_PATH}/src/apps/snmp/snmp_threadsync.c
${PICO_LWIP_PATH}/src/apps/snmp/snmp_traps.c
)
# HTTP server + client
pico_add_library(pico_lwip_http NOFLAG)
target_sources(pico_lwip_http INTERFACE
${PICO_LWIP_PATH}/src/apps/http/altcp_proxyconnect.c
${PICO_LWIP_PATH}/src/apps/http/fs.c
${PICO_LWIP_PATH}/src/apps/http/http_client.c
${PICO_LWIP_PATH}/src/apps/http/httpd.c
)
# MAKEFSDATA HTTP server host utility
pico_add_library(pico_lwip_makefsdata NOFLAG)
target_sources(pico_lwip_makefsdata INTERFACE
${PICO_LWIP_PATH}/src/apps/http/makefsdata/makefsdata.c
)
# iperf
pico_add_library(pico_lwip_iperf NOFLAG)
target_sources(pico_lwip_iperf INTERFACE
${PICO_LWIP_PATH}/src/apps/lwiperf/lwiperf.c
)
# SMTP client
pico_add_library(pico_lwip_smtp NOFLAG)
target_sources(pico_lwip_smtp INTERFACE
${PICO_LWIP_PATH}/src/apps/smtp/smtp.c
)
# SNTP client
pico_add_library(pico_lwip_sntp NOFLAG)
target_sources(pico_lwip_sntp INTERFACE
${PICO_LWIP_PATH}/src/apps/sntp/sntp.c
)
# MDNS responder
pico_add_library(pico_lwip_mdns NOFLAG)
target_sources(pico_lwip_mdns INTERFACE
${PICO_LWIP_PATH}/src/apps/mdns/mdns.c
)
# Old versions of lwip had everything in mdns.c
if (EXISTS ${PICO_LWIP_PATH}/src/apps/mdns/mdns_out.c)
target_sources(pico_lwip_mdns INTERFACE
${PICO_LWIP_PATH}/src/apps/mdns/mdns_out.c
${PICO_LWIP_PATH}/src/apps/mdns/mdns_domain.c
)
endif()
# NetBIOS name server
pico_add_library(pico_lwip_netbios NOFLAG)
target_sources(pico_lwip_netbios INTERFACE
${PICO_LWIP_PATH}/src/apps/netbiosns/netbiosns.c
)
# TFTP server files
pico_add_library(pico_lwip_tftp NOFLAG)
target_sources(pico_lwip_tftp INTERFACE
${PICO_LWIP_PATH}/src/apps/tftp/tftp.c
)
# Mbed TLS files
pico_add_library(pico_lwip_mbedtls NOFLAG)
target_sources(pico_lwip_mbedtls INTERFACE
${PICO_LWIP_PATH}/src/apps/altcp_tls/altcp_tls_mbedtls.c
${PICO_LWIP_PATH}/src/apps/altcp_tls/altcp_tls_mbedtls_mem.c
${PICO_LWIP_PATH}/src/apps/snmp/snmpv3_mbedtls.c
)
# MQTT client files
pico_add_library(pico_lwip_mqtt NOFLAG)
target_sources(pico_lwip_mqtt INTERFACE
${PICO_LWIP_PATH}/src/apps/mqtt/mqtt.c
)
# All LWIP files without apps
pico_add_library(pico_lwip NOFLAG)
pico_mirrored_target_link_libraries(pico_lwip INTERFACE
pico_lwip_core
pico_lwip_core4
pico_lwip_core6
pico_lwip_api
pico_lwip_netif
pico_lwip_sixlowpan
pico_lwip_ppp
)
# our arch/cc.h
pico_add_library(pico_lwip_arch NOFLAG)
target_include_directories(pico_lwip_arch_headers SYSTEM INTERFACE
${CMAKE_CURRENT_LIST_DIR}/include)
pico_mirrored_target_link_libraries(pico_lwip_arch INTERFACE pico_rand)
# our nosys impl
pico_add_library(pico_lwip_nosys NOFLAG)
target_sources(pico_lwip_nosys INTERFACE
${CMAKE_CURRENT_LIST_DIR}/lwip_nosys.c
)
pico_mirrored_target_link_libraries(pico_lwip_nosys INTERFACE
pico_async_context_base
pico_lwip_arch
pico_lwip)
if (NOT PICO_LWIP_CONTRIB_PATH)
set(PICO_LWIP_CONTRIB_PATH ${PICO_LWIP_PATH}/contrib)
endif()
pico_register_common_scope_var(PICO_LWIP_CONTRIB_PATH)
# Make lwip_contrib_freertos library, with the FreeRTOS/lwIP code from lwip-contrib
pico_add_library(pico_lwip_contrib_freertos NOFLAG)
target_sources(pico_lwip_contrib_freertos INTERFACE
${PICO_LWIP_CONTRIB_PATH}/ports/freertos/sys_arch.c
)
target_include_directories(pico_lwip_contrib_freertos_headers SYSTEM INTERFACE
${PICO_LWIP_CONTRIB_PATH}/ports/freertos/include
)
pico_mirrored_target_link_libraries(pico_lwip_contrib_freertos INTERFACE
pico_lwip_arch)
pico_add_library(pico_lwip_freertos NOFLAG)
target_sources(pico_lwip_freertos INTERFACE
${CMAKE_CURRENT_LIST_DIR}/lwip_freertos.c
)
pico_mirrored_target_link_libraries(pico_lwip_freertos INTERFACE
pico_async_context_base
pico_lwip
pico_lwip_contrib_freertos
pico_rand)
pico_add_subdirectory(tools)
pico_promote_common_scope_vars()
endif()