diff --git a/components/esp-tls/CMakeLists.txt b/components/esp-tls/CMakeLists.txt index d53d4fe10e..1cdd1e5b69 100644 --- a/components/esp-tls/CMakeLists.txt +++ b/components/esp-tls/CMakeLists.txt @@ -12,8 +12,10 @@ endif() idf_component_register(SRCS "${srcs}" INCLUDE_DIRS . esp-tls-crypto PRIV_INCLUDE_DIRS "private_include" - REQUIRES mbedtls - PRIV_REQUIRES lwip http_parser) + # lwip and mbedtls are public requirements becasue esp_tls.h + # includes sys/socket.h and mbedtls header files. + REQUIRES mbedtls lwip + PRIV_REQUIRES http_parser) if(CONFIG_ESP_TLS_USING_WOLFSSL) idf_component_get_property(wolfssl esp-wolfssl COMPONENT_LIB) diff --git a/components/esp_http_client/CMakeLists.txt b/components/esp_http_client/CMakeLists.txt index 6794a62e2b..45e53d8413 100644 --- a/components/esp_http_client/CMakeLists.txt +++ b/components/esp_http_client/CMakeLists.txt @@ -4,5 +4,6 @@ idf_component_register(SRCS "esp_http_client.c" "lib/http_utils.c" INCLUDE_DIRS "include" PRIV_INCLUDE_DIRS "lib/include" - REQUIRES http_parser + # lwip is a public requirement because esp_http_client.h includes sys/socket.h + REQUIRES http_parser lwip PRIV_REQUIRES tcp_transport) diff --git a/components/esp_wifi/CMakeLists.txt b/components/esp_wifi/CMakeLists.txt index 4b37de238a..a3efef9a2f 100644 --- a/components/esp_wifi/CMakeLists.txt +++ b/components/esp_wifi/CMakeLists.txt @@ -31,7 +31,7 @@ idf_component_register(SRCS "${srcs}" INCLUDE_DIRS "include" REQUIRES esp_event esp_phy PRIV_REQUIRES driver esptool_py esp_netif esp_pm esp_timer nvs_flash - wpa_supplicant hal ${extra_priv_requires} + wpa_supplicant hal lwip ${extra_priv_requires} LDFRAGMENTS "${ldfragments}") if(CONFIG_ESP32_WIFI_ENABLED) diff --git a/components/mbedtls/CMakeLists.txt b/components/mbedtls/CMakeLists.txt index 36ad5e69f0..85741abf17 100644 --- a/components/mbedtls/CMakeLists.txt +++ b/components/mbedtls/CMakeLists.txt @@ -17,10 +17,17 @@ endif() idf_component_register(SRCS "${mbedtls_srcs}" INCLUDE_DIRS "${mbedtls_include_dirs}" - REQUIRES lwip PRIV_REQUIRES "${priv_requires}" ) +# Determine the type of mbedtls component library +if(mbedtls_srcs STREQUAL "") + # For no sources in component library we must use "INTERFACE" + set(linkage_type INTERFACE) +else() + set(linkage_type PUBLIC) +endif() + if(CONFIG_MBEDTLS_CERTIFICATE_BUNDLE) set(bundle_name "x509_crt_bundle") @@ -103,8 +110,7 @@ endif() set(mbedtls_targets mbedtls mbedcrypto mbedx509) -set(mbedtls_target_sources "${COMPONENT_DIR}/port/mbedtls_debug.c" - "${COMPONENT_DIR}/port/net_sockets.c") +set(mbedtls_target_sources "${COMPONENT_DIR}/port/mbedtls_debug.c") if(CONFIG_MBEDTLS_DYNAMIC_BUFFER) set(mbedtls_target_sources ${mbedtls_target_sources} @@ -114,6 +120,15 @@ set(mbedtls_target_sources ${mbedtls_target_sources} "${COMPONENT_DIR}/port/dynamic/esp_ssl_tls.c") 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) + 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}) +endif() + # Add port files to mbedtls targets target_sources(mbedtls PRIVATE ${mbedtls_target_sources}) @@ -240,14 +255,6 @@ set_property(TARGET mbedcrypto APPEND PROPERTY LINK_INTERFACE_LIBRARIES mbedtls) set_property(TARGET mbedcrypto APPEND PROPERTY LINK_LIBRARIES idf::driver idf::${target}) set_property(TARGET mbedcrypto APPEND PROPERTY INTERFACE_LINK_LIBRARIES idf::driver idf::${target}) -# Link mbedtls libraries to component library -if(mbedtls_srcs STREQUAL "") - # For no sources in component library we must use "INTERFACE" - set(linkage_type INTERFACE) -else() - set(linkage_type PUBLIC) -endif() - target_link_libraries(${COMPONENT_LIB} ${linkage_type} ${mbedtls_targets}) if(CONFIG_ESP_TLS_USE_DS_PERIPHERAL) diff --git a/components/mqtt/CMakeLists.txt b/components/mqtt/CMakeLists.txt index ac832e1d14..004389a47a 100644 --- a/components/mqtt/CMakeLists.txt +++ b/components/mqtt/CMakeLists.txt @@ -4,6 +4,7 @@ idf_component_register(SRCS "esp-mqtt/mqtt_client.c" "esp-mqtt/lib/platform_esp32_idf.c" INCLUDE_DIRS esp-mqtt/include PRIV_INCLUDE_DIRS "esp-mqtt/lib/include" + PRIV_REQUIRES lwip ) if(TEST_BUILD) diff --git a/components/newlib/CMakeLists.txt b/components/newlib/CMakeLists.txt index ab732217ba..5e3e4efa1e 100644 --- a/components/newlib/CMakeLists.txt +++ b/components/newlib/CMakeLists.txt @@ -53,3 +53,7 @@ if(CONFIG_NEWLIB_NANO_FORMAT) endif() add_subdirectory(port) + +# if lwip is included in the build, add it as a public requirement so that +# #include works without any special provisions. +idf_component_optional_requires(PUBLIC lwip) diff --git a/components/tcp_transport/CMakeLists.txt b/components/tcp_transport/CMakeLists.txt index 4b67ca7b21..7eb449365e 100644 --- a/components/tcp_transport/CMakeLists.txt +++ b/components/tcp_transport/CMakeLists.txt @@ -11,4 +11,4 @@ endif() idf_component_register(SRCS "${srcs}" INCLUDE_DIRS "include" PRIV_INCLUDE_DIRS "private_include" - REQUIRES esp-tls) + REQUIRES esp-tls lwip) diff --git a/tools/cmake/build.cmake b/tools/cmake/build.cmake index dfcd74d312..6c73fdf308 100644 --- a/tools/cmake/build.cmake +++ b/tools/cmake/build.cmake @@ -162,9 +162,8 @@ function(__build_init idf_path) else() # Set components required by all other components in the build # - # - lwip is here so that #include works without any special provisions # - esp_hw_support is here for backward compatibility - set(requires_common cxx newlib freertos esp_hw_support heap log lwip soc hal esp_rom esp_common esp_system) + set(requires_common cxx newlib freertos esp_hw_support heap log soc hal esp_rom esp_common esp_system) idf_build_set_property(__COMPONENT_REQUIRES_COMMON "${requires_common}") endif() diff --git a/tools/test_apps/system/g1_components/CMakeLists.txt b/tools/test_apps/system/g1_components/CMakeLists.txt index 03b9ba0e24..06d963b725 100644 --- a/tools/test_apps/system/g1_components/CMakeLists.txt +++ b/tools/test_apps/system/g1_components/CMakeLists.txt @@ -41,15 +41,6 @@ set(extra_components_which_shouldnt_be_included # Figure out if these components can exist without a dependency on efuse. # If not, see if esp_hw_support can provide minimal efuse component replacement in G1 build. efuse - # esp_eth is a dependency of esp_netif, esp_event, lwip - # Once they are removed from G1, esp_eth will be removed as well. - esp_eth - # esp_event is a dependency of esp_wifi, esp_eth. Both should be removed from G1. - esp_event - # esp_netif is a dependency of lwip and esp_event, should disappear once lwip is removed. - esp_netif - # esp_phy is a dependency of esp_wifi. - esp_phy # esp_pm is pulled in by freertos, can be made a weak dependency # conditional on related Kconfig option. It is also used by esp_wifi, driver, mbedtls, # all of which should be removed from G1-only build. @@ -59,30 +50,17 @@ set(extra_components_which_shouldnt_be_included # esp_timer is a dependency of freertos, esp_event, esp_wifi, driver. # For freertos, it can be made a weak dependency conditional on FREERTOS_RUN_TIME_STATS_USING_ESP_TIMER esp_timer - # esp_wifi is a dependency of lwip. - # [refactor-todo]: investigate making esp_wifi a conditional dependency. - esp_wifi # esptool_py is a dependency of bootloader, esp_wifi, app_update, partition_table, all of which # should be removed from G1-only build. esptool_py - # lwip is a common component due to "sys/socket.h" header. - # [refactor-todo] consider adding a system-level sys/socket.h in newlib instead - lwip # mbedtls is a dependency of bootloader_support (plus other easier-to-remove ones) # it is hard to make it conditional, need to remove bootloader_support. mbedtls - # nvs_flash is required by: - # esp_wifi, esp_phy — both should be removed - nvs_flash # partition_table is pulled in by app_update, esptool_py, bootloader; all to be removed partition_table # pthread is required by esp_system (for initialization only, can be made a weak dependency) # and cxx. See also [refactor-todo] about cxx, can it work without pthread? pthread - # vfs is a dependency of lwip. It can be made conditional, while lwip is still a common component. - vfs - # wpa_supplicant is a dependency of esp_wifi, which is to be removed from G1-only build - wpa_supplicant ) set(expected_components