Skip to content

Commit

Permalink
Merge branch 'bugfix/remove_lwip_from_common_requirements' into 'master'
Browse files Browse the repository at this point in the history
build system: remove lwip from common component requirements

Closes IDF-1258

See merge request espressif/esp-idf!17785
  • Loading branch information
igrr committed May 3, 2022
2 parents e4eeff8 + 89e7897 commit 2f79356
Show file tree
Hide file tree
Showing 18 changed files with 74 additions and 62 deletions.
6 changes: 4 additions & 2 deletions components/esp-tls/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
3 changes: 2 additions & 1 deletion components/esp_http_client/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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)
8 changes: 8 additions & 0 deletions components/esp_system/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -95,3 +95,11 @@ idf_component_optional_requires(PRIVATE app_update)
if(CONFIG_PM_ENABLE)
idf_component_optional_requires(PRIVATE pm)
endif()

if(CONFIG_VFS_SUPPORT_IO)
idf_component_optional_requires(PRIVATE vfs)
endif()

if(CONFIG_SW_COEXIST_ENABLE OR CONFIG_EXTERNAL_COEX_ENABLE)
idf_component_optional_requires(PRIVATE esp_wifi)
endif()
9 changes: 7 additions & 2 deletions components/esp_system/startup.c
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,6 @@
#include "esp_spi_flash.h"
#include "esp_flash_internal.h"
#include "esp_newlib.h"
#include "esp_vfs_dev.h"
#include "esp_timer.h"
#include "esp_efuse.h"
#include "esp_flash_encrypt.h"
Expand All @@ -41,7 +40,9 @@

/***********************************************/
// Headers for other components init functions
#if CONFIG_SW_COEXIST_ENABLE || CONFIG_EXTERNAL_COEX_ENABLE
#include "esp_coexist_internal.h"
#endif

#if CONFIG_ESP_COREDUMP_ENABLE
#include "esp_core_dump.h"
Expand All @@ -58,8 +59,12 @@
#include "esp_private/pm_impl.h"
#endif

#include "esp_pthread.h"
#if CONFIG_VFS_SUPPORT_IO
#include "esp_vfs_dev.h"
#include "esp_vfs_console.h"
#endif

#include "esp_pthread.h"
#include "esp_private/esp_clk.h"

#include "esp_private/brownout.h"
Expand Down
2 changes: 1 addition & 1 deletion components/esp_wifi/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
29 changes: 18 additions & 11 deletions components/mbedtls/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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")
Expand Down Expand Up @@ -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}
Expand All @@ -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})

Expand Down Expand Up @@ -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)
Expand Down
1 change: 1 addition & 0 deletions components/mqtt/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
4 changes: 4 additions & 0 deletions components/newlib/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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 <sys/socket.h> works without any special provisions.
idf_component_optional_requires(PUBLIC lwip)
22 changes: 9 additions & 13 deletions components/newlib/syscalls.c
Original file line number Diff line number Diff line change
@@ -1,16 +1,8 @@
// Copyright 2015-2020 Espressif Systems (Shanghai) PTE LTD
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
/*
* SPDX-FileCopyrightText: 2015-2022 Espressif Systems (Shanghai) CO LTD
*
* SPDX-License-Identifier: Apache-2.0
*/

#include <stdbool.h>
#include <stdlib.h>
Expand Down Expand Up @@ -59,6 +51,10 @@ ssize_t _read_r_console(struct _reent *r, int fd, void * data, size_t size)
break;
}
}
if (received == 0) {
errno = EWOULDBLOCK;
return -1;
}
return received;
}
__errno_r(r) = EBADF;
Expand Down
2 changes: 1 addition & 1 deletion components/tcp_transport/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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)
2 changes: 1 addition & 1 deletion docs/en/api-guides/build-system.rst
Original file line number Diff line number Diff line change
Expand Up @@ -548,7 +548,7 @@ Common component requirements

To avoid duplication, every component automatically requires some "common" IDF components even if they are not mentioned explicitly. Headers from these components can always be included.

The list of common components is: cxx, newlib, freertos, esp_hw_support, heap, log, lwip, soc, hal, esp_rom, esp_common, esp_system.
The list of common components is: cxx, newlib, freertos, esp_hw_support, heap, log, soc, hal, esp_rom, esp_common, esp_system.

Including components in the build
----------------------------------
Expand Down
7 changes: 7 additions & 0 deletions docs/en/migration-guides/build-system.rst
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,13 @@ In previous versions of ESP-IDF, some components were always added as public req
* ``driver``
* ``efuse``
* ``esp_timer``
* ``lwip``
* ``vfs``
* ``esp_wifi``
* ``esp_event``
* ``esp_netif``
* ``esp_eth``
* ``esp_phy``

This means that it was possible to include header files of those components without specifying them as requirements in ``idf_component_register``.

Expand Down
2 changes: 1 addition & 1 deletion docs/zh_CN/api-guides/build-system.rst
Original file line number Diff line number Diff line change
Expand Up @@ -634,7 +634,7 @@ Spark Plug 组件

为避免重复性工作,各组件都用自动依赖一些“通用” IDF 组件,即使它们没有被明确提及。这些组件的头文件会一直包含在构建系统中。

通用组件包括:cxx、newlib、freertos、esp_hw_support、heap、log、lwip、soc、hal、esp_rom、esp_common、esp_system。
通用组件包括:cxx、newlib、freertos、esp_hw_support、heap、log、soc、hal、esp_rom、esp_common、esp_system。

在构建中导入组件
-----------------
Expand Down
1 change: 0 additions & 1 deletion tools/ci/check_copyright_ignore.txt
Original file line number Diff line number Diff line change
Expand Up @@ -1090,7 +1090,6 @@ components/newlib/poll.c
components/newlib/priv_include/esp_time_impl.h
components/newlib/pthread.c
components/newlib/reent_init.c
components/newlib/syscalls.c
components/newlib/termios.c
components/newlib/test/test_atomic.c
components/newlib/test/test_locks.c
Expand Down
3 changes: 1 addition & 2 deletions tools/cmake/build.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -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 <sys/socket.h> 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()

Expand Down
22 changes: 0 additions & 22 deletions tools/test_apps/system/g1_components/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand All @@ -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
Expand Down
11 changes: 8 additions & 3 deletions tools/test_apps/system/panic/main/test_panic_main.c
Original file line number Diff line number Diff line change
Expand Up @@ -194,12 +194,17 @@ static const char* get_test_name(void)
c = getchar();
if (c == EOF) {
vTaskDelay(pdMS_TO_TICKS(10));
} else if (c == '\r') {
continue;
} else if (c == '\n') {
} else if ((c == '\r' || c == '\n') && p != test_name_str) {
/* terminate the line */
puts("\n\r");
fflush(stdout);
*p = '\0';
break;
} else {
/* echo the received character */
putchar(c);
fflush(stdout);
/* and save it */
*p = c;
++p;
}
Expand Down
2 changes: 1 addition & 1 deletion tools/unit-test-app/components/test_utils/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -26,4 +26,4 @@ idf_component_register(SRCS ${srcs}
INCLUDE_DIRS include
PRIV_INCLUDE_DIRS private_include
REQUIRES spi_flash idf_test cmock
PRIV_REQUIRES perfmon driver)
PRIV_REQUIRES perfmon driver esp_netif)

0 comments on commit 2f79356

Please sign in to comment.