refactor(lwip): Added on/off switch for LwIP stack

* This switch allows applications to replace lwip with a different
  IP stack or just make it build if it is a dependency but not
  actually needed.
This commit is contained in:
Jakob Hasse
2023-09-07 13:17:02 +08:00
parent 3093384045
commit ac2515e199
7 changed files with 199 additions and 179 deletions

View File

@@ -35,7 +35,7 @@ set_property(TARGET ${lwip} APPEND PROPERTY LINK_INTERFACE_MULTIPLICITY 5)
else()
# Check if LWIP in the build for linux target to adapt esp-tls compatibility layer
idf_build_get_property(build_components BUILD_COMPONENTS)
if("lwip" IN_LIST build_components)
if(CONFIG_LWIP_ENABLE)
target_compile_definitions(${COMPONENT_LIB} PRIVATE ESP_TLS_WITH_LWIP=1)
endif()
endif()

View File

@@ -1,4 +1,6 @@
idf_build_get_property(target IDF_TARGET)
if(CONFIG_LWIP_ENABLE)
if(NOT ${target} STREQUAL "linux")
# ESP platform targets share the same port folder
set(target esp32xx)
@@ -136,7 +138,6 @@ endif()
if(NOT ${target} STREQUAL "linux")
# Support for vfs and linker fragments only for target builds
set(priv_requires vfs)
set(linker_fragments linker.lf)
if(CONFIG_VFS_SUPPORT_IO)
list(APPEND srcs "port/${target}/vfs_lwip.c")
@@ -162,12 +163,18 @@ endif()
if(CONFIG_LWIP_DHCP_RESTORE_LAST_IP)
list(APPEND srcs "port/esp32xx/netif/dhcp_state.c")
endif()
endif() # CONFIG_LWIP_ENABLE
if(NOT ${target} STREQUAL "linux")
set(priv_requires vfs)
endif()
idf_component_register(SRCS "${srcs}"
INCLUDE_DIRS ${include_dirs}
LDFRAGMENTS ${linker_fragments}
PRIV_REQUIRES ${priv_requires})
if(CONFIG_LWIP_ENABLE)
# lots of LWIP source files evaluate macros that check address of stack variables
target_compile_options(${COMPONENT_LIB} PRIVATE -Wno-address)
target_compile_definitions(${COMPONENT_LIB} PRIVATE ESP_LWIP_COMPONENT_BUILD)
@@ -218,3 +225,4 @@ if(${target} STREQUAL "linux")
target_link_libraries(${COMPONENT_LIB} INTERFACE "-u __wrap_${wrap}")
endforeach()
endif()
endif()

View File

@@ -1,4 +1,15 @@
menu "LWIP"
config LWIP_ENABLE
bool "Enable LwIP stack"
default y if !IDF_TARGET_LINUX
default n if IDF_TARGET_LINUX
help
Builds normally if selected. Excludes LwIP from build if unselected, even if it is a
dependency of a component or application.
Some applications can switch their IP stacks, e.g., when switching between chip
and Linux targets (LwIP stack vs. Linux IP stack). Since the LwIP dependency cannot
easily be excluded based on a Kconfig option, it has to be a dependency in all cases.
This switch allows the LwIP stack to be built selectively, even if it is a dependency.
config LWIP_LOCAL_HOSTNAME
string "Local netif hostname"

View File

@@ -134,8 +134,7 @@ endif()
# net_sockets.c should only be compiled if BSD socket functions are available.
# Do this by checking if lwip component is included into the build.
idf_build_get_property(build_components BUILD_COMPONENTS)
if(lwip IN_LIST build_components)
if(CONFIG_LWIP_ENABLE)
list(APPEND mbedtls_target_sources "${COMPONENT_DIR}/port/net_sockets.c")
idf_component_get_property(lwip_lib lwip COMPONENT_LIB)
target_link_libraries(${COMPONENT_LIB} ${linkage_type} ${lwip_lib})

View File

@@ -1,3 +1,4 @@
CONFIG_IDF_TARGET="linux"
CONFIG_EXAMPLE_IPV4_ADDR="127.0.0.1"
CONFIG_EXAMPLE_CONNECT_LWIP_TAPIF=n
CONFIG_LWIP_ENABLE=y

View File

@@ -0,0 +1 @@
CONFIG_LWIP_ENABLE=y