mirror of
https://github.com/espressif/esp-idf.git
synced 2025-08-04 21:24:32 +02:00
Merge branch 'feature/update-toolchain-to-esp-15.1.0_20250607' into 'master'
feat(tools): update toolchain version to esp-15.1.0_20250607 See merge request espressif/esp-idf!39728
This commit is contained in:
@@ -169,6 +169,10 @@ if(CONFIG_COMPILER_DUMP_RTL_FILES)
|
|||||||
list(APPEND compile_options "-fdump-rtl-expand")
|
list(APPEND compile_options "-fdump-rtl-expand")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
if(CMAKE_C_COMPILER_ID MATCHES "GNU" AND CMAKE_C_COMPILER_VERSION VERSION_GREATER 15.0)
|
||||||
|
list(APPEND c_compile_options "-fzero-init-padding-bits=all" "-fno-malloc-dce")
|
||||||
|
endif()
|
||||||
|
|
||||||
__generate_prefix_map(prefix_map_compile_options)
|
__generate_prefix_map(prefix_map_compile_options)
|
||||||
list(APPEND compile_options ${prefix_map_compile_options})
|
list(APPEND compile_options ${prefix_map_compile_options})
|
||||||
|
|
||||||
@@ -188,6 +192,15 @@ if(CONFIG_COMPILER_DISABLE_GCC14_WARNINGS)
|
|||||||
list(APPEND compile_options "-Wno-calloc-transposed-args")
|
list(APPEND compile_options "-Wno-calloc-transposed-args")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
if(CONFIG_COMPILER_DISABLE_GCC15_WARNINGS)
|
||||||
|
list(APPEND c_compile_options "-Wno-unterminated-string-initialization")
|
||||||
|
list(APPEND c_compile_options "-Wno-header-guard")
|
||||||
|
list(APPEND cxx_compile_options "-Wno-self-move")
|
||||||
|
list(APPEND cxx_compile_options "-Wno-template-body")
|
||||||
|
list(APPEND cxx_compile_options "-Wno-dangling-reference")
|
||||||
|
list(APPEND cxx_compile_options "-Wno-defaulted-function-deleted")
|
||||||
|
endif()
|
||||||
|
|
||||||
if(CONFIG_COMPILER_DISABLE_DEFAULT_ERRORS)
|
if(CONFIG_COMPILER_DISABLE_DEFAULT_ERRORS)
|
||||||
if(NOT CMAKE_C_COMPILER_ID MATCHES "Clang")
|
if(NOT CMAKE_C_COMPILER_ID MATCHES "Clang")
|
||||||
idf_build_replace_option_from_property(COMPILE_OPTIONS "-Werror" "-Werror=all")
|
idf_build_replace_option_from_property(COMPILE_OPTIONS "-Werror" "-Werror=all")
|
||||||
|
7
Kconfig
7
Kconfig
@@ -610,6 +610,13 @@ mainmenu "Espressif IoT Development Framework Configuration"
|
|||||||
Enable this option if use GCC 14 or newer, and want to disable warnings which don't appear with
|
Enable this option if use GCC 14 or newer, and want to disable warnings which don't appear with
|
||||||
GCC 13.
|
GCC 13.
|
||||||
|
|
||||||
|
config COMPILER_DISABLE_GCC15_WARNINGS
|
||||||
|
bool "Disable new warnings introduced in GCC 15"
|
||||||
|
default "n"
|
||||||
|
help
|
||||||
|
Enable this option if use GCC 15 or newer, and want to disable warnings which don't appear with
|
||||||
|
GCC 14.
|
||||||
|
|
||||||
config COMPILER_DUMP_RTL_FILES
|
config COMPILER_DUMP_RTL_FILES
|
||||||
bool "Dump RTL files during compilation"
|
bool "Dump RTL files during compilation"
|
||||||
help
|
help
|
||||||
|
@@ -29,7 +29,7 @@ esp_image_header_t WORD_ALIGNED_ATTR bootloader_image_hdr;
|
|||||||
|
|
||||||
void bootloader_clear_bss_section(void)
|
void bootloader_clear_bss_section(void)
|
||||||
{
|
{
|
||||||
memset(&_bss_start, 0, (&_bss_end - &_bss_start) * sizeof(_bss_start));
|
memset(&_bss_start, 0, (uintptr_t)&_bss_end - (uintptr_t)&_bss_start);
|
||||||
}
|
}
|
||||||
|
|
||||||
esp_err_t bootloader_read_bootloader_header(void)
|
esp_err_t bootloader_read_bootloader_header(void)
|
||||||
|
@@ -1022,3 +1022,14 @@ if(NOT CMAKE_BUILD_EARLY_EXPANSION)
|
|||||||
"${CMAKE_CURRENT_LIST_DIR}/host/bluedroid/btc/profile/std/gap/btc_gap_ble.c"
|
"${CMAKE_CURRENT_LIST_DIR}/host/bluedroid/btc/profile/std/gap/btc_gap_ble.c"
|
||||||
PROPERTIES COMPILE_FLAGS "${jump_table_opts}")
|
PROPERTIES COMPILE_FLAGS "${jump_table_opts}")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
if(CMAKE_C_COMPILER_ID MATCHES "GNU" AND CMAKE_C_COMPILER_VERSION VERSION_GREATER 15.0)
|
||||||
|
if(CONFIG_BT_BLUEDROID_ENABLED)
|
||||||
|
set_source_files_properties("host/bluedroid/device/controller.c"
|
||||||
|
PROPERTIES COMPILE_FLAGS "-Wno-unterminated-string-initialization")
|
||||||
|
endif()
|
||||||
|
if(CONFIG_BT_NIMBLE_ENABLED AND CONFIG_BT_NIMBLE_MESH)
|
||||||
|
set_source_files_properties("host/nimble/nimble/nimble/host/mesh/src/prov.c"
|
||||||
|
PROPERTIES COMPILE_FLAGS "-Wno-unterminated-string-initialization")
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
@@ -22,6 +22,7 @@
|
|||||||
* BTC.
|
* BTC.
|
||||||
*
|
*
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
|
#include "esp_attr.h"
|
||||||
#include "string.h"
|
#include "string.h"
|
||||||
#include "common/bt_target.h"
|
#include "common/bt_target.h"
|
||||||
#include "stack/a2d_api.h"
|
#include "stack/a2d_api.h"
|
||||||
@@ -66,7 +67,7 @@
|
|||||||
#define BTA_AV_CO_SBC_MAX_BITPOOL 53
|
#define BTA_AV_CO_SBC_MAX_BITPOOL 53
|
||||||
|
|
||||||
/* SCMS-T protect info */
|
/* SCMS-T protect info */
|
||||||
const UINT8 bta_av_co_cp_scmst[BTA_AV_CP_INFO_LEN] = "\x02\x02\x00";
|
const UINT8 bta_av_co_cp_scmst[BTA_AV_CP_INFO_LEN] = { 2, 2, 0 };
|
||||||
|
|
||||||
/* SBC SRC codec capabilities */
|
/* SBC SRC codec capabilities */
|
||||||
const tA2D_SBC_CIE bta_av_co_sbc_caps = {
|
const tA2D_SBC_CIE bta_av_co_sbc_caps = {
|
||||||
|
@@ -2,6 +2,6 @@
|
|||||||
|
|
||||||
components/cxx/test_apps:
|
components/cxx/test_apps:
|
||||||
enable:
|
enable:
|
||||||
- if: IDF_TARGET in ["esp32", "esp32c3"]
|
- if: IDF_TARGET in ["esp32", "esp32c3", "esp32c61", "esp32p4"]
|
||||||
temporary: true
|
temporary: true
|
||||||
reason: the other targets are not tested yet
|
reason: the other targets are not tested yet
|
||||||
|
@@ -1,2 +1,2 @@
|
|||||||
| Supported Targets | ESP32 | ESP32-C3 |
|
| Supported Targets | ESP32 | ESP32-C3 | ESP32-C61 | ESP32-P4 |
|
||||||
| ----------------- | ----- | -------- |
|
| ----------------- | ----- | -------- | --------- | -------- |
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* SPDX-FileCopyrightText: 2021-2024 Espressif Systems (Shanghai) CO LTD
|
* SPDX-FileCopyrightText: 2021-2025 Espressif Systems (Shanghai) CO LTD
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: Apache-2.0
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
*/
|
*/
|
||||||
@@ -13,12 +13,10 @@
|
|||||||
- 88 bytes are allocated by pthread_setspecific() to init internal lock
|
- 88 bytes are allocated by pthread_setspecific() to init internal lock
|
||||||
- some more memory...
|
- some more memory...
|
||||||
*/
|
*/
|
||||||
#if CONFIG_IDF_TARGET_ESP32
|
#if CONFIG_IDF_TARGET_ESP32 || CONFIG_IDF_TARGET_ESP32C61 || CONFIG_IDF_TARGET_ESP32P4
|
||||||
#define LEAKS (300)
|
#define LEAKS (128) /* real: 72 */
|
||||||
#elif CONFIG_IDF_TARGET_ESP32S2
|
#elif CONFIG_IDF_TARGET_ESP32S2 || CONFIG_IDF_TARGET_ESP32C3
|
||||||
#define LEAKS (800)
|
#define LEAKS (448) /* real: 396 */
|
||||||
#elif CONFIG_IDF_TARGET_ESP32C3
|
|
||||||
#define LEAKS (700)
|
|
||||||
#else
|
#else
|
||||||
#error "unknown target in CXX tests, can't set leaks threshold"
|
#error "unknown target in CXX tests, can't set leaks threshold"
|
||||||
#endif
|
#endif
|
||||||
|
@@ -6,6 +6,6 @@ from pytest_embedded_idf.utils import idf_parametrize
|
|||||||
|
|
||||||
|
|
||||||
@pytest.mark.generic
|
@pytest.mark.generic
|
||||||
@idf_parametrize('target', ['esp32', 'esp32c3'], indirect=['target'])
|
@idf_parametrize('target', ['esp32', 'esp32c3', 'esp32c61', 'esp32p4'], indirect=['target'])
|
||||||
def test_cxx_exception(dut: Dut) -> None:
|
def test_cxx_exception(dut: Dut) -> None:
|
||||||
dut.run_all_single_board_cases()
|
dut.run_all_single_board_cases()
|
||||||
|
@@ -1,2 +1,2 @@
|
|||||||
| Supported Targets | ESP32 | ESP32-C3 |
|
| Supported Targets | ESP32 | ESP32-C3 | ESP32-C61 | ESP32-P4 |
|
||||||
| ----------------- | ----- | -------- |
|
| ----------------- | ----- | -------- | --------- | -------- |
|
||||||
|
@@ -6,7 +6,7 @@ from pytest_embedded_idf.utils import idf_parametrize
|
|||||||
|
|
||||||
|
|
||||||
@pytest.mark.generic
|
@pytest.mark.generic
|
||||||
@idf_parametrize('target', ['esp32', 'esp32c3'], indirect=['target'])
|
@idf_parametrize('target', ['esp32', 'esp32c3', 'esp32c61', 'esp32p4'], indirect=['target'])
|
||||||
def test_cxx_noexcept_out_of_range(dut: Dut) -> None:
|
def test_cxx_noexcept_out_of_range(dut: Dut) -> None:
|
||||||
dut.expect_exact('Press ENTER to see the list of tests')
|
dut.expect_exact('Press ENTER to see the list of tests')
|
||||||
dut.write('1')
|
dut.write('1')
|
||||||
@@ -15,7 +15,7 @@ def test_cxx_noexcept_out_of_range(dut: Dut) -> None:
|
|||||||
|
|
||||||
|
|
||||||
@pytest.mark.generic
|
@pytest.mark.generic
|
||||||
@idf_parametrize('target', ['esp32', 'esp32c3'], indirect=['target'])
|
@idf_parametrize('target', ['esp32', 'esp32c3', 'esp32c61', 'esp32p4'], indirect=['target'])
|
||||||
def test_cxx_noexcept_bad_alloc(dut: Dut) -> None:
|
def test_cxx_noexcept_bad_alloc(dut: Dut) -> None:
|
||||||
dut.expect_exact('Press ENTER to see the list of tests')
|
dut.expect_exact('Press ENTER to see the list of tests')
|
||||||
dut.write('2')
|
dut.write('2')
|
||||||
|
@@ -1,2 +1,2 @@
|
|||||||
| Supported Targets | ESP32 | ESP32-C3 |
|
| Supported Targets | ESP32 | ESP32-C3 | ESP32-C61 | ESP32-P4 |
|
||||||
| ----------------- | ----- | -------- |
|
| ----------------- | ----- | -------- | --------- | -------- |
|
||||||
|
@@ -108,18 +108,16 @@ TEST_CASE("static initialization guards work as expected", "[misc]")
|
|||||||
TEST_ASSERT_NOT_NULL(s_slow_init_sem);
|
TEST_ASSERT_NOT_NULL(s_slow_init_sem);
|
||||||
int task_count = 0;
|
int task_count = 0;
|
||||||
// four tasks competing for static initialization of one object
|
// four tasks competing for static initialization of one object
|
||||||
task_count += start_slow_init_task<1>(0, PRO_CPU_NUM);
|
for (int i = 0; i < CONFIG_FREERTOS_NUMBER_OF_CORES; i++) {
|
||||||
#if CONFIG_FREERTOS_NUMBER_OF_CORES == 2
|
task_count += start_slow_init_task<1>(i, i);
|
||||||
task_count += start_slow_init_task<1>(1, APP_CPU_NUM);
|
}
|
||||||
#endif
|
|
||||||
task_count += start_slow_init_task<1>(2, PRO_CPU_NUM);
|
task_count += start_slow_init_task<1>(2, PRO_CPU_NUM);
|
||||||
task_count += start_slow_init_task<1>(3, tskNO_AFFINITY);
|
task_count += start_slow_init_task<1>(3, tskNO_AFFINITY);
|
||||||
|
|
||||||
// four tasks competing for static initialization of another object
|
// four tasks competing for static initialization of another object
|
||||||
task_count += start_slow_init_task<2>(0, PRO_CPU_NUM);
|
for (int i = 0; i < CONFIG_FREERTOS_NUMBER_OF_CORES; i++) {
|
||||||
#if CONFIG_FREERTOS_NUMBER_OF_CORES == 2
|
task_count += start_slow_init_task<2>(i, i);
|
||||||
task_count += start_slow_init_task<2>(1, APP_CPU_NUM);
|
}
|
||||||
#endif
|
|
||||||
task_count += start_slow_init_task<2>(2, PRO_CPU_NUM);
|
task_count += start_slow_init_task<2>(2, PRO_CPU_NUM);
|
||||||
task_count += start_slow_init_task<2>(3, tskNO_AFFINITY);
|
task_count += start_slow_init_task<2>(3, tskNO_AFFINITY);
|
||||||
|
|
||||||
|
@@ -9,21 +9,21 @@ configurations = ['noexcept', 'exceptions_rtti']
|
|||||||
|
|
||||||
@pytest.mark.generic
|
@pytest.mark.generic
|
||||||
@pytest.mark.parametrize('config', configurations, indirect=True)
|
@pytest.mark.parametrize('config', configurations, indirect=True)
|
||||||
@idf_parametrize('target', ['esp32', 'esp32c3'], indirect=['target'])
|
@idf_parametrize('target', ['esp32', 'esp32c3', 'esp32c61', 'esp32p4'], indirect=['target'])
|
||||||
def test_cxx_static_init_non_pod(dut: Dut) -> None:
|
def test_cxx_static_init_non_pod(dut: Dut) -> None:
|
||||||
dut.run_all_single_board_cases(name=['can use static initializers for non-POD types'])
|
dut.run_all_single_board_cases(name=['can use static initializers for non-POD types'])
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.generic
|
@pytest.mark.generic
|
||||||
@pytest.mark.parametrize('config', configurations, indirect=True)
|
@pytest.mark.parametrize('config', configurations, indirect=True)
|
||||||
@idf_parametrize('target', ['esp32', 'esp32c3'], indirect=['target'])
|
@idf_parametrize('target', ['esp32', 'esp32c3', 'esp32c61', 'esp32p4'], indirect=['target'])
|
||||||
def test_cxx_misc(dut: Dut) -> None:
|
def test_cxx_misc(dut: Dut) -> None:
|
||||||
dut.run_all_single_board_cases(group='misc')
|
dut.run_all_single_board_cases(group='misc')
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.generic
|
@pytest.mark.generic
|
||||||
@pytest.mark.parametrize('config', configurations, indirect=True)
|
@pytest.mark.parametrize('config', configurations, indirect=True)
|
||||||
@idf_parametrize('target', ['esp32', 'esp32c3'], indirect=['target'])
|
@idf_parametrize('target', ['esp32', 'esp32c3', 'esp32c61', 'esp32p4'], indirect=['target'])
|
||||||
def test_cxx_stack_smash(dut: Dut) -> None:
|
def test_cxx_stack_smash(dut: Dut) -> None:
|
||||||
dut.expect_exact('Press ENTER to see the list of tests')
|
dut.expect_exact('Press ENTER to see the list of tests')
|
||||||
dut.write('"stack smashing protection CXX"')
|
dut.write('"stack smashing protection CXX"')
|
||||||
|
@@ -1,2 +1,2 @@
|
|||||||
| Supported Targets | ESP32 | ESP32-C3 |
|
| Supported Targets | ESP32 | ESP32-C3 | ESP32-C61 | ESP32-P4 |
|
||||||
| ----------------- | ----- | -------- |
|
| ----------------- | ----- | -------- | --------- | -------- |
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* SPDX-FileCopyrightText: 2021-2022 Espressif Systems (Shanghai) CO LTD
|
* SPDX-FileCopyrightText: 2021-2025 Espressif Systems (Shanghai) CO LTD
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: Apache-2.0
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
*/
|
*/
|
||||||
@@ -14,12 +14,10 @@
|
|||||||
- 88 bytes are allocated by pthread_setspecific() to init internal lock
|
- 88 bytes are allocated by pthread_setspecific() to init internal lock
|
||||||
- some more memory...
|
- some more memory...
|
||||||
*/
|
*/
|
||||||
#if CONFIG_IDF_TARGET_ESP32
|
#if CONFIG_IDF_TARGET_ESP32 || CONFIG_IDF_TARGET_ESP32C61 || CONFIG_IDF_TARGET_ESP32P4
|
||||||
#define LEAKS (300)
|
#define LEAKS (128) /* real: 72 */
|
||||||
#elif CONFIG_IDF_TARGET_ESP32S2
|
#elif CONFIG_IDF_TARGET_ESP32S2 || CONFIG_IDF_TARGET_ESP32C3
|
||||||
#define LEAKS (800)
|
#define LEAKS (448) /* real: 396 */
|
||||||
#elif CONFIG_IDF_TARGET_ESP32C3
|
|
||||||
#define LEAKS (700)
|
|
||||||
#else
|
#else
|
||||||
#error "unknown target in CXX tests, can't set leaks threshold"
|
#error "unknown target in CXX tests, can't set leaks threshold"
|
||||||
#endif
|
#endif
|
||||||
|
@@ -6,6 +6,6 @@ from pytest_embedded_idf.utils import idf_parametrize
|
|||||||
|
|
||||||
|
|
||||||
@pytest.mark.generic
|
@pytest.mark.generic
|
||||||
@idf_parametrize('target', ['esp32', 'esp32c3'], indirect=['target'])
|
@idf_parametrize('target', ['esp32', 'esp32c3', 'esp32c61', 'esp32p4'], indirect=['target'])
|
||||||
def test_cxx_rtti(dut: Dut) -> None:
|
def test_cxx_rtti(dut: Dut) -> None:
|
||||||
dut.run_all_single_board_cases()
|
dut.run_all_single_board_cases()
|
||||||
|
@@ -161,6 +161,13 @@ extern "C" {
|
|||||||
// Forces to not inline function
|
// Forces to not inline function
|
||||||
#define NOINLINE_ATTR __attribute__((noinline))
|
#define NOINLINE_ATTR __attribute__((noinline))
|
||||||
|
|
||||||
|
#if !defined(__clang__) && __GNUC__ >= 15
|
||||||
|
// Marks a character array as not null-terminated to avoid string-related optimizations or warnings
|
||||||
|
#define NONSTRING_ATTR __attribute__ ((nonstring))
|
||||||
|
#else
|
||||||
|
#define NONSTRING_ATTR
|
||||||
|
#endif
|
||||||
|
|
||||||
// This allows using enum as flags in C++
|
// This allows using enum as flags in C++
|
||||||
// Format: FLAG_ATTR(flag_enum_t)
|
// Format: FLAG_ATTR(flag_enum_t)
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
|
@@ -7,6 +7,7 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "esp_err.h"
|
#include "esp_err.h"
|
||||||
|
#include "esp_attr.h"
|
||||||
#include "soc/soc_caps.h"
|
#include "soc/soc_caps.h"
|
||||||
#include "hal/uart_types.h"
|
#include "hal/uart_types.h"
|
||||||
|
|
||||||
@@ -45,7 +46,7 @@ typedef struct {
|
|||||||
'*' represents any symbol.
|
'*' represents any symbol.
|
||||||
The end character cannot be '*'.
|
The end character cannot be '*'.
|
||||||
Example: "he**o" matches hello, heyyo. */
|
Example: "he**o" matches hello, heyyo. */
|
||||||
char wake_chars_seq[SOC_UART_WAKEUP_CHARS_SEQ_MAX_LEN];
|
NONSTRING_ATTR char wake_chars_seq[SOC_UART_WAKEUP_CHARS_SEQ_MAX_LEN];
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
} uart_wakeup_cfg_t;
|
} uart_wakeup_cfg_t;
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* SPDX-FileCopyrightText: 2023-2024 Espressif Systems (Shanghai) CO LTD
|
* SPDX-FileCopyrightText: 2023-2025 Espressif Systems (Shanghai) CO LTD
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: Apache-2.0
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
*/
|
*/
|
||||||
@@ -119,11 +119,11 @@ static esp_err_t esp_sleep_tagmem_pd_low_init(void)
|
|||||||
if (s_tag_mem->link_addr == NULL) {
|
if (s_tag_mem->link_addr == NULL) {
|
||||||
extern char _stext[], _etext[];
|
extern char _stext[], _etext[];
|
||||||
uint32_t code_start = (uint32_t)_stext;
|
uint32_t code_start = (uint32_t)_stext;
|
||||||
uint32_t code_size = (uint32_t)(_etext - _stext);
|
uint32_t code_size = (uint32_t)((uintptr_t)_etext - (uintptr_t)_stext);
|
||||||
#if !(CONFIG_SPIRAM && CONFIG_SOC_PM_SUPPORT_TAGMEM_PD)
|
#if !(CONFIG_SPIRAM && CONFIG_SOC_PM_SUPPORT_TAGMEM_PD)
|
||||||
extern char _rodata_start[], _rodata_reserved_end[];
|
extern char _rodata_start[], _rodata_reserved_end[];
|
||||||
uint32_t data_start = (uint32_t)_rodata_start;
|
uint32_t data_start = (uint32_t)_rodata_start;
|
||||||
uint32_t data_size = (uint32_t)(_rodata_reserved_end - _rodata_start);
|
uint32_t data_size = (uint32_t)((uintptr_t)_rodata_reserved_end - (uintptr_t)_rodata_start);
|
||||||
#else
|
#else
|
||||||
uint32_t data_start = SOC_DROM_LOW;
|
uint32_t data_start = SOC_DROM_LOW;
|
||||||
uint32_t data_size = SOC_EXTRAM_DATA_SIZE;
|
uint32_t data_size = SOC_EXTRAM_DATA_SIZE;
|
||||||
|
@@ -7,6 +7,7 @@
|
|||||||
#ifndef PHY_INIT_DATA_H
|
#ifndef PHY_INIT_DATA_H
|
||||||
#define PHY_INIT_DATA_H /* don't use #pragma once here, we compile this file sometimes */
|
#define PHY_INIT_DATA_H /* don't use #pragma once here, we compile this file sometimes */
|
||||||
#include "esp_phy_init.h"
|
#include "esp_phy_init.h"
|
||||||
|
#include "esp_attr.h"
|
||||||
#include "sdkconfig.h"
|
#include "sdkconfig.h"
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
@@ -50,7 +51,7 @@ typedef struct {
|
|||||||
* @brief Country corresponds to PHY init data type structure
|
* @brief Country corresponds to PHY init data type structure
|
||||||
*/
|
*/
|
||||||
typedef struct {
|
typedef struct {
|
||||||
char cc[PHY_COUNTRY_CODE_LEN];
|
NONSTRING_ATTR char cc[PHY_COUNTRY_CODE_LEN];
|
||||||
uint8_t type;
|
uint8_t type;
|
||||||
} phy_country_to_bin_type_t;
|
} phy_country_to_bin_type_t;
|
||||||
#endif
|
#endif
|
||||||
|
@@ -7,6 +7,7 @@
|
|||||||
#ifndef PHY_INIT_DATA_H
|
#ifndef PHY_INIT_DATA_H
|
||||||
#define PHY_INIT_DATA_H /* don't use #pragma once here, we compile this file sometimes */
|
#define PHY_INIT_DATA_H /* don't use #pragma once here, we compile this file sometimes */
|
||||||
#include "esp_phy_init.h"
|
#include "esp_phy_init.h"
|
||||||
|
#include "esp_attr.h"
|
||||||
#include "sdkconfig.h"
|
#include "sdkconfig.h"
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
@@ -51,7 +52,7 @@ typedef struct {
|
|||||||
* @brief Country corresponds to PHY init data type structure
|
* @brief Country corresponds to PHY init data type structure
|
||||||
*/
|
*/
|
||||||
typedef struct {
|
typedef struct {
|
||||||
char cc[PHY_COUNTRY_CODE_LEN];
|
NONSTRING_ATTR char cc[PHY_COUNTRY_CODE_LEN];
|
||||||
uint8_t type;
|
uint8_t type;
|
||||||
} phy_country_to_bin_type_t;
|
} phy_country_to_bin_type_t;
|
||||||
#endif
|
#endif
|
||||||
|
@@ -7,6 +7,7 @@
|
|||||||
#ifndef PHY_INIT_DATA_H
|
#ifndef PHY_INIT_DATA_H
|
||||||
#define PHY_INIT_DATA_H /* don't use #pragma once here, we compile this file sometimes */
|
#define PHY_INIT_DATA_H /* don't use #pragma once here, we compile this file sometimes */
|
||||||
#include "esp_phy_init.h"
|
#include "esp_phy_init.h"
|
||||||
|
#include "esp_attr.h"
|
||||||
#include "sdkconfig.h"
|
#include "sdkconfig.h"
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
@@ -51,7 +52,7 @@ typedef struct {
|
|||||||
* @brief Country corresponds to PHY init data type structure
|
* @brief Country corresponds to PHY init data type structure
|
||||||
*/
|
*/
|
||||||
typedef struct {
|
typedef struct {
|
||||||
char cc[PHY_COUNTRY_CODE_LEN];
|
NONSTRING_ATTR char cc[PHY_COUNTRY_CODE_LEN];
|
||||||
uint8_t type;
|
uint8_t type;
|
||||||
} phy_country_to_bin_type_t;
|
} phy_country_to_bin_type_t;
|
||||||
#endif
|
#endif
|
||||||
|
@@ -7,6 +7,7 @@
|
|||||||
#ifndef PHY_INIT_DATA_H
|
#ifndef PHY_INIT_DATA_H
|
||||||
#define PHY_INIT_DATA_H /* don't use #pragma once here, we compile this file sometimes */
|
#define PHY_INIT_DATA_H /* don't use #pragma once here, we compile this file sometimes */
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
#include "esp_attr.h"
|
||||||
#include "esp_phy_init.h"
|
#include "esp_phy_init.h"
|
||||||
#include "sdkconfig.h"
|
#include "sdkconfig.h"
|
||||||
|
|
||||||
@@ -52,7 +53,7 @@ typedef struct {
|
|||||||
* @brief Country corresponds to PHY init data type structure
|
* @brief Country corresponds to PHY init data type structure
|
||||||
*/
|
*/
|
||||||
typedef struct {
|
typedef struct {
|
||||||
char cc[PHY_COUNTRY_CODE_LEN];
|
NONSTRING_ATTR char cc[PHY_COUNTRY_CODE_LEN];
|
||||||
uint8_t type;
|
uint8_t type;
|
||||||
} phy_country_to_bin_type_t;
|
} phy_country_to_bin_type_t;
|
||||||
#endif
|
#endif
|
||||||
|
@@ -7,6 +7,7 @@
|
|||||||
#ifndef PHY_INIT_DATA_H
|
#ifndef PHY_INIT_DATA_H
|
||||||
#define PHY_INIT_DATA_H /* don't use #pragma once here, we compile this file sometimes */
|
#define PHY_INIT_DATA_H /* don't use #pragma once here, we compile this file sometimes */
|
||||||
#include "esp_phy_init.h"
|
#include "esp_phy_init.h"
|
||||||
|
#include "esp_attr.h"
|
||||||
#include "sdkconfig.h"
|
#include "sdkconfig.h"
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
@@ -51,7 +52,7 @@ typedef struct {
|
|||||||
* @brief Country corresponds to PHY init data type structure
|
* @brief Country corresponds to PHY init data type structure
|
||||||
*/
|
*/
|
||||||
typedef struct {
|
typedef struct {
|
||||||
char cc[PHY_COUNTRY_CODE_LEN];
|
NONSTRING_ATTR char cc[PHY_COUNTRY_CODE_LEN];
|
||||||
uint8_t type;
|
uint8_t type;
|
||||||
} phy_country_to_bin_type_t;
|
} phy_country_to_bin_type_t;
|
||||||
#endif
|
#endif
|
||||||
|
@@ -8,6 +8,7 @@
|
|||||||
#define PHY_INIT_DATA_H /* don't use #pragma once here, we compile this file sometimes */
|
#define PHY_INIT_DATA_H /* don't use #pragma once here, we compile this file sometimes */
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include "esp_phy_init.h"
|
#include "esp_phy_init.h"
|
||||||
|
#include "esp_attr.h"
|
||||||
#include "sdkconfig.h"
|
#include "sdkconfig.h"
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
@@ -52,7 +53,7 @@ typedef struct {
|
|||||||
* @brief Country corresponds to PHY init data type structure
|
* @brief Country corresponds to PHY init data type structure
|
||||||
*/
|
*/
|
||||||
typedef struct {
|
typedef struct {
|
||||||
char cc[PHY_COUNTRY_CODE_LEN];
|
NONSTRING_ATTR char cc[PHY_COUNTRY_CODE_LEN];
|
||||||
uint8_t type;
|
uint8_t type;
|
||||||
} phy_country_to_bin_type_t;
|
} phy_country_to_bin_type_t;
|
||||||
#endif
|
#endif
|
||||||
|
@@ -7,6 +7,7 @@
|
|||||||
#ifndef PHY_INIT_DATA_H
|
#ifndef PHY_INIT_DATA_H
|
||||||
#define PHY_INIT_DATA_H /* don't use #pragma once here, we compile this file sometimes */
|
#define PHY_INIT_DATA_H /* don't use #pragma once here, we compile this file sometimes */
|
||||||
#include "esp_phy_init.h"
|
#include "esp_phy_init.h"
|
||||||
|
#include "esp_attr.h"
|
||||||
#include "sdkconfig.h"
|
#include "sdkconfig.h"
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
@@ -51,7 +52,7 @@ typedef struct {
|
|||||||
* @brief Country corresponds to PHY init data type structure
|
* @brief Country corresponds to PHY init data type structure
|
||||||
*/
|
*/
|
||||||
typedef struct {
|
typedef struct {
|
||||||
char cc[PHY_COUNTRY_CODE_LEN];
|
NONSTRING_ATTR char cc[PHY_COUNTRY_CODE_LEN];
|
||||||
uint8_t type;
|
uint8_t type;
|
||||||
} phy_country_to_bin_type_t;
|
} phy_country_to_bin_type_t;
|
||||||
#endif
|
#endif
|
||||||
|
@@ -7,6 +7,7 @@
|
|||||||
#ifndef PHY_INIT_DATA_H
|
#ifndef PHY_INIT_DATA_H
|
||||||
#define PHY_INIT_DATA_H /* don't use #pragma once here, we compile this file sometimes */
|
#define PHY_INIT_DATA_H /* don't use #pragma once here, we compile this file sometimes */
|
||||||
#include "esp_phy_init.h"
|
#include "esp_phy_init.h"
|
||||||
|
#include "esp_attr.h"
|
||||||
#include "sdkconfig.h"
|
#include "sdkconfig.h"
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
@@ -51,7 +52,7 @@ typedef struct {
|
|||||||
* @brief Country corresponds to PHY init data type structure
|
* @brief Country corresponds to PHY init data type structure
|
||||||
*/
|
*/
|
||||||
typedef struct {
|
typedef struct {
|
||||||
char cc[PHY_COUNTRY_CODE_LEN];
|
NONSTRING_ATTR char cc[PHY_COUNTRY_CODE_LEN];
|
||||||
uint8_t type;
|
uint8_t type;
|
||||||
} phy_country_to_bin_type_t;
|
} phy_country_to_bin_type_t;
|
||||||
#endif
|
#endif
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* SPDX-FileCopyrightText: 2024 Espressif Systems (Shanghai) CO LTD
|
* SPDX-FileCopyrightText: 2024-2025 Espressif Systems (Shanghai) CO LTD
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: Apache-2.0
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
*/
|
*/
|
||||||
@@ -57,7 +57,6 @@ struct syscall_stub_table
|
|||||||
int (*_write_r)(struct _reent *r, int, const void *, int);
|
int (*_write_r)(struct _reent *r, int, const void *, int);
|
||||||
int (*_lseek_r)(struct _reent *r, int, int, int);
|
int (*_lseek_r)(struct _reent *r, int, int, int);
|
||||||
int (*_read_r)(struct _reent *r, int, void *, int);
|
int (*_read_r)(struct _reent *r, int, void *, int);
|
||||||
#ifdef _RETARGETABLE_LOCKING
|
|
||||||
void (*_retarget_lock_init)(_LOCK_T *lock);
|
void (*_retarget_lock_init)(_LOCK_T *lock);
|
||||||
void (*_retarget_lock_init_recursive)(_LOCK_T *lock);
|
void (*_retarget_lock_init_recursive)(_LOCK_T *lock);
|
||||||
void (*_retarget_lock_close)(_LOCK_T lock);
|
void (*_retarget_lock_close)(_LOCK_T lock);
|
||||||
@@ -68,18 +67,6 @@ struct syscall_stub_table
|
|||||||
int (*_retarget_lock_try_acquire_recursive)(_LOCK_T lock);
|
int (*_retarget_lock_try_acquire_recursive)(_LOCK_T lock);
|
||||||
void (*_retarget_lock_release)(_LOCK_T lock);
|
void (*_retarget_lock_release)(_LOCK_T lock);
|
||||||
void (*_retarget_lock_release_recursive)(_LOCK_T lock);
|
void (*_retarget_lock_release_recursive)(_LOCK_T lock);
|
||||||
#else
|
|
||||||
void (*_lock_init)(_lock_t *lock);
|
|
||||||
void (*_lock_init_recursive)(_lock_t *lock);
|
|
||||||
void (*_lock_close)(_lock_t *lock);
|
|
||||||
void (*_lock_close_recursive)(_lock_t *lock);
|
|
||||||
void (*_lock_acquire)(_lock_t *lock);
|
|
||||||
void (*_lock_acquire_recursive)(_lock_t *lock);
|
|
||||||
int (*_lock_try_acquire)(_lock_t *lock);
|
|
||||||
int (*_lock_try_acquire_recursive)(_lock_t *lock);
|
|
||||||
void (*_lock_release)(_lock_t *lock);
|
|
||||||
void (*_lock_release_recursive)(_lock_t *lock);
|
|
||||||
#endif
|
|
||||||
int (*_printf_float)(struct _reent *data, void *pdata, FILE * fp, int (*pfunc) (struct _reent *, FILE *, const char *, size_t len), va_list * ap);
|
int (*_printf_float)(struct _reent *data, void *pdata, FILE * fp, int (*pfunc) (struct _reent *, FILE *, const char *, size_t len), va_list * ap);
|
||||||
int (*_scanf_float) (struct _reent *rptr, void *pdata, FILE *fp, va_list *ap);
|
int (*_scanf_float) (struct _reent *rptr, void *pdata, FILE *fp, va_list *ap);
|
||||||
void (*__assert_func) (const char *file, int line, const char * func, const char *failedexpr) __attribute__((noreturn));
|
void (*__assert_func) (const char *file, int line, const char * func, const char *failedexpr) __attribute__((noreturn));
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* SPDX-FileCopyrightText: 2020-2022 Espressif Systems (Shanghai) CO LTD
|
* SPDX-FileCopyrightText: 2020-2025 Espressif Systems (Shanghai) CO LTD
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: Apache-2.0
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
*/
|
*/
|
||||||
@@ -73,11 +73,11 @@ void rom_usb_cdc_set_descriptor_patch(void)
|
|||||||
void usb_dev_deinit(void)
|
void usb_dev_deinit(void)
|
||||||
{
|
{
|
||||||
extern char rom_usb_dev, rom_usb_dev_end;
|
extern char rom_usb_dev, rom_usb_dev_end;
|
||||||
memset((void *) &rom_usb_dev, 0, &rom_usb_dev_end - &rom_usb_dev);
|
memset((void *) &rom_usb_dev, 0, (uintptr_t)&rom_usb_dev_end - (uintptr_t)&rom_usb_dev);
|
||||||
}
|
}
|
||||||
|
|
||||||
void usb_dw_ctrl_deinit(void)
|
void usb_dw_ctrl_deinit(void)
|
||||||
{
|
{
|
||||||
extern char rom_usb_dw_ctrl, rom_usb_dw_ctrl_end;
|
extern char rom_usb_dw_ctrl, rom_usb_dw_ctrl_end;
|
||||||
memset((void *) &rom_usb_dw_ctrl, 0, &rom_usb_dw_ctrl_end - &rom_usb_dw_ctrl);
|
memset((void *) &rom_usb_dw_ctrl, 0, (uintptr_t)&rom_usb_dw_ctrl_end - (uintptr_t)&rom_usb_dw_ctrl);
|
||||||
}
|
}
|
||||||
|
@@ -417,26 +417,26 @@ FORCE_INLINE_ATTR IRAM_ATTR void get_reset_reason(soc_reset_reason_t *rst_reas)
|
|||||||
FORCE_INLINE_ATTR IRAM_ATTR void init_bss(const soc_reset_reason_t *rst_reas)
|
FORCE_INLINE_ATTR IRAM_ATTR void init_bss(const soc_reset_reason_t *rst_reas)
|
||||||
{
|
{
|
||||||
#if SOC_MEM_NON_CONTIGUOUS_SRAM
|
#if SOC_MEM_NON_CONTIGUOUS_SRAM
|
||||||
memset(&_bss_start_low, 0, (&_bss_end_low - &_bss_start_low) * sizeof(_bss_start_low));
|
memset(&_bss_start_low, 0, (uintptr_t)&_bss_end_low - (uintptr_t)&_bss_start_low);
|
||||||
memset(&_bss_start_high, 0, (&_bss_end_high - &_bss_start_high) * sizeof(_bss_start_high));
|
memset(&_bss_start_high, 0, (uintptr_t)&_bss_end_high - (uintptr_t)&_bss_start_high);
|
||||||
#else
|
#else
|
||||||
memset(&_bss_start, 0, (&_bss_end - &_bss_start) * sizeof(_bss_start));
|
memset(&_bss_start, 0, (uintptr_t)&_bss_end - (uintptr_t)&_bss_start);
|
||||||
#endif // SOC_MEM_NON_CONTIGUOUS_SRAM
|
#endif // SOC_MEM_NON_CONTIGUOUS_SRAM
|
||||||
|
|
||||||
#if CONFIG_BT_LE_RELEASE_IRAM_SUPPORTED
|
#if CONFIG_BT_LE_RELEASE_IRAM_SUPPORTED
|
||||||
// Clear Bluetooth bss
|
// Clear Bluetooth bss
|
||||||
memset(&_bss_bt_start, 0, (&_bss_bt_end - &_bss_bt_start) * sizeof(_bss_bt_start));
|
memset(&_bss_bt_start, 0, (uintptr_t)&_bss_bt_end - (uintptr_t)&_bss_bt_start);
|
||||||
#endif // CONFIG_BT_LE_RELEASE_IRAM_SUPPORTED
|
#endif // CONFIG_BT_LE_RELEASE_IRAM_SUPPORTED
|
||||||
|
|
||||||
#if defined(CONFIG_IDF_TARGET_ESP32) && defined(CONFIG_ESP32_IRAM_AS_8BIT_ACCESSIBLE_MEMORY)
|
#if defined(CONFIG_IDF_TARGET_ESP32) && defined(CONFIG_ESP32_IRAM_AS_8BIT_ACCESSIBLE_MEMORY)
|
||||||
// Clear IRAM BSS
|
// Clear IRAM BSS
|
||||||
memset(&_iram_bss_start, 0, (&_iram_bss_end - &_iram_bss_start) * sizeof(_iram_bss_start));
|
memset(&_iram_bss_start, 0, (uintptr_t)&_iram_bss_end - (uintptr_t)&_iram_bss_start);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if SOC_RTC_FAST_MEM_SUPPORTED || SOC_RTC_SLOW_MEM_SUPPORTED
|
#if SOC_RTC_FAST_MEM_SUPPORTED || SOC_RTC_SLOW_MEM_SUPPORTED
|
||||||
/* Unless waking from deep sleep (implying RTC memory is intact), clear RTC bss */
|
/* Unless waking from deep sleep (implying RTC memory is intact), clear RTC bss */
|
||||||
if (rst_reas[0] != RESET_REASON_CORE_DEEP_SLEEP) {
|
if (rst_reas[0] != RESET_REASON_CORE_DEEP_SLEEP) {
|
||||||
memset(&_rtc_bss_start, 0, (&_rtc_bss_end - &_rtc_bss_start) * sizeof(_rtc_bss_start));
|
memset(&_rtc_bss_start, 0, (uintptr_t)&_rtc_bss_end - (uintptr_t)&_rtc_bss_start);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
@@ -10,6 +10,7 @@
|
|||||||
#include "esp_private/system_internal.h"
|
#include "esp_private/system_internal.h"
|
||||||
#include "esp_attr.h"
|
#include "esp_attr.h"
|
||||||
#include "esp_log.h"
|
#include "esp_log.h"
|
||||||
|
#include "esp_macros.h"
|
||||||
#include "esp_rom_sys.h"
|
#include "esp_rom_sys.h"
|
||||||
#include "riscv/rv_utils.h"
|
#include "riscv/rv_utils.h"
|
||||||
#include "esp_rom_uart.h"
|
#include "esp_rom_uart.h"
|
||||||
@@ -135,7 +136,5 @@ void esp_restart_noos(void)
|
|||||||
esp_cpu_reset(1);
|
esp_cpu_reset(1);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
while (true) {
|
ESP_INFINITE_LOOP();
|
||||||
;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@@ -97,6 +97,12 @@ if(CONFIG_ESP_WIFI_ENABLED OR CONFIG_ESP_HOST_WIFI_ENABLED)
|
|||||||
target_link_libraries(${COMPONENT_LIB} PUBLIC ${blob})
|
target_link_libraries(${COMPONENT_LIB} PUBLIC ${blob})
|
||||||
endforeach()
|
endforeach()
|
||||||
endif()
|
endif()
|
||||||
|
# TODO IDF-13365: remove the following lines
|
||||||
|
if(CMAKE_C_COMPILER_ID MATCHES "GNU")
|
||||||
|
set_source_files_properties(regulatory/esp_wifi_regulatory.c
|
||||||
|
PROPERTIES COMPILE_FLAGS
|
||||||
|
-Wno-unterminated-string-initialization)
|
||||||
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(CONFIG_SPIRAM)
|
if(CONFIG_SPIRAM)
|
||||||
|
@@ -11,7 +11,7 @@ from pytest_embedded_idf.utils import idf_parametrize
|
|||||||
# The standard value has 30~100 bytes fault tolerance
|
# The standard value has 30~100 bytes fault tolerance
|
||||||
SAVE_BIN_SIZE_TH = {
|
SAVE_BIN_SIZE_TH = {
|
||||||
'disable_sae_h2e': {
|
'disable_sae_h2e': {
|
||||||
'esp32': 16800,
|
'esp32': 16600,
|
||||||
'esp32c2': 19700,
|
'esp32c2': 19700,
|
||||||
'esp32c3': 19600,
|
'esp32c3': 19600,
|
||||||
'esp32c5': 19650,
|
'esp32c5': 19650,
|
||||||
|
@@ -9,6 +9,7 @@
|
|||||||
#include <limits.h>
|
#include <limits.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <dirent.h>
|
#include <dirent.h>
|
||||||
|
#include <time.h>
|
||||||
#include <sys/errno.h>
|
#include <sys/errno.h>
|
||||||
#include <sys/fcntl.h>
|
#include <sys/fcntl.h>
|
||||||
#include <sys/lock.h>
|
#include <sys/lock.h>
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* SPDX-FileCopyrightText: 2018-2024 Espressif Systems (Shanghai) CO LTD
|
* SPDX-FileCopyrightText: 2018-2025 Espressif Systems (Shanghai) CO LTD
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: Apache-2.0
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
*/
|
*/
|
||||||
@@ -25,8 +25,9 @@ extern soc_reserved_region_t soc_reserved_memory_region_end;
|
|||||||
|
|
||||||
static size_t s_get_num_reserved_regions(void)
|
static size_t s_get_num_reserved_regions(void)
|
||||||
{
|
{
|
||||||
size_t result = ( &soc_reserved_memory_region_end
|
size_t result = (uintptr_t)&soc_reserved_memory_region_end - (uintptr_t)&soc_reserved_memory_region_start;
|
||||||
- &soc_reserved_memory_region_start );
|
result /= sizeof(soc_reserved_region_t);
|
||||||
|
|
||||||
#if ESP_ROM_HAS_LAYOUT_TABLE
|
#if ESP_ROM_HAS_LAYOUT_TABLE
|
||||||
return result + 1; // ROM table means one entry needs to be added at runtime
|
return result + 1; // ROM table means one entry needs to be added at runtime
|
||||||
#else
|
#else
|
||||||
|
@@ -28,7 +28,7 @@ static __attribute__((unused)) const char s_lvl_name[ESP_LOG_MAX] = {
|
|||||||
'V', // VERBOSE
|
'V', // VERBOSE
|
||||||
};
|
};
|
||||||
|
|
||||||
static __attribute__((unused)) const char s_lvl_color[ESP_LOG_MAX][8] = {
|
static __attribute__((unused)) const char s_lvl_color[ESP_LOG_MAX][9] = {
|
||||||
"\0", // NONE
|
"\0", // NONE
|
||||||
LOG_ANSI_COLOR_REGULAR(LOG_ANSI_COLOR_RED)"\0", // ERROR
|
LOG_ANSI_COLOR_REGULAR(LOG_ANSI_COLOR_RED)"\0", // ERROR
|
||||||
LOG_ANSI_COLOR_REGULAR(LOG_ANSI_COLOR_YELLOW)"\0", // WARNING
|
LOG_ANSI_COLOR_REGULAR(LOG_ANSI_COLOR_YELLOW)"\0", // WARNING
|
||||||
|
@@ -11,7 +11,9 @@
|
|||||||
#include "esp_log.h"
|
#include "esp_log.h"
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
|
#ifndef __weak
|
||||||
#define __weak __attribute__((weak))
|
#define __weak __attribute__((weak))
|
||||||
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Default lwip behavior is to silence LWIP_ERROR() if LWIP_DEBUG is not set.
|
* Default lwip behavior is to silence LWIP_ERROR() if LWIP_DEBUG is not set.
|
||||||
|
@@ -347,6 +347,11 @@ foreach(target ${mbedtls_targets})
|
|||||||
endif()
|
endif()
|
||||||
endforeach()
|
endforeach()
|
||||||
|
|
||||||
|
if(CMAKE_C_COMPILER_ID MATCHES "GNU" AND CMAKE_C_COMPILER_VERSION VERSION_GREATER 15.0)
|
||||||
|
target_compile_options(mbedtls PRIVATE "-Wno-unterminated-string-initialization")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
|
||||||
if(CONFIG_MBEDTLS_DYNAMIC_BUFFER)
|
if(CONFIG_MBEDTLS_DYNAMIC_BUFFER)
|
||||||
set(WRAP_FUNCTIONS
|
set(WRAP_FUNCTIONS
|
||||||
mbedtls_ssl_write_client_hello
|
mbedtls_ssl_write_client_hello
|
||||||
|
@@ -335,7 +335,7 @@ esp_err_t esp_crt_bundle_attach(void *conf)
|
|||||||
esp_err_t ret = ESP_OK;
|
esp_err_t ret = ESP_OK;
|
||||||
// If no bundle has been set by the user then use the bundle embedded in the binary
|
// If no bundle has been set by the user then use the bundle embedded in the binary
|
||||||
if (s_crt_bundle == NULL) {
|
if (s_crt_bundle == NULL) {
|
||||||
ret = esp_crt_bundle_init(x509_crt_imported_bundle_bin_start, x509_crt_imported_bundle_bin_end - x509_crt_imported_bundle_bin_start);
|
ret = esp_crt_bundle_init(x509_crt_imported_bundle_bin_start, (uintptr_t)x509_crt_imported_bundle_bin_end - (uintptr_t)x509_crt_imported_bundle_bin_start);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (unlikely(ret != ESP_OK)) {
|
if (unlikely(ret != ESP_OK)) {
|
||||||
|
@@ -38,6 +38,8 @@ if(CONFIG_STDATOMIC_S32C1I_SPIRAM_WORKAROUND)
|
|||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(CONFIG_LIBC_OPTIMIZED_MISALIGNED_ACCESS)
|
if(CONFIG_LIBC_OPTIMIZED_MISALIGNED_ACCESS)
|
||||||
|
if(CMAKE_C_COMPILER_ID MATCHES "Clang")
|
||||||
|
# TODO IDF-13089: remove this block and modify src/newlib.lf when clang was upgraded
|
||||||
list(APPEND srcs
|
list(APPEND srcs
|
||||||
"src/string/memcmp.c"
|
"src/string/memcmp.c"
|
||||||
"src/string/memmove.c"
|
"src/string/memmove.c"
|
||||||
@@ -53,6 +55,7 @@ if(CONFIG_LIBC_OPTIMIZED_MISALIGNED_ACCESS)
|
|||||||
list(APPEND EXTRA_LINK_FLAGS "-u esp_libc_include_strcpy_impl")
|
list(APPEND EXTRA_LINK_FLAGS "-u esp_libc_include_strcpy_impl")
|
||||||
list(APPEND EXTRA_LINK_FLAGS "-u esp_libc_include_strcmp_impl")
|
list(APPEND EXTRA_LINK_FLAGS "-u esp_libc_include_strcmp_impl")
|
||||||
endif()
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
if(CONFIG_LIBC_NEWLIB)
|
if(CONFIG_LIBC_NEWLIB)
|
||||||
list(APPEND srcs
|
list(APPEND srcs
|
||||||
@@ -69,12 +72,10 @@ endif()
|
|||||||
set(ldfragments "")
|
set(ldfragments "")
|
||||||
list(APPEND ldfragments "src/newlib.lf" "src/system_libs.lf")
|
list(APPEND ldfragments "src/newlib.lf" "src/system_libs.lf")
|
||||||
|
|
||||||
if(CONFIG_SPIRAM_CACHE_WORKAROUND)
|
|
||||||
if(CONFIG_LIBC_NEWLIB)
|
if(CONFIG_LIBC_NEWLIB)
|
||||||
list(APPEND ldfragments src/esp32-spiram-rom-functions-c.lf)
|
list(APPEND ldfragments src/libc.lf)
|
||||||
else()
|
else()
|
||||||
list(APPEND ldfragments src/picolibc/esp32-spiram-rom-functions-c.lf)
|
list(APPEND ldfragments src/picolibc/libc.lf)
|
||||||
endif()
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
idf_component_register(SRCS "${srcs}"
|
idf_component_register(SRCS "${srcs}"
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* SPDX-FileCopyrightText: 2022-2024 Espressif Systems (Shanghai) CO LTD
|
* SPDX-FileCopyrightText: 2022-2025 Espressif Systems (Shanghai) CO LTD
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: Apache-2.0
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
*/
|
*/
|
||||||
@@ -12,7 +12,7 @@
|
|||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef _RETARGETABLE_LOCKING
|
#if defined(_RETARGETABLE_LOCKING) || defined(CONFIG_LIBC_PICOLIBC)
|
||||||
|
|
||||||
/* Actual platfrom-specific definition of struct __lock.
|
/* Actual platfrom-specific definition of struct __lock.
|
||||||
* The size here should be sufficient for a FreeRTOS mutex.
|
* The size here should be sufficient for a FreeRTOS mutex.
|
||||||
@@ -52,10 +52,6 @@ int _lock_try_acquire_recursive(_lock_t *plock);
|
|||||||
void _lock_release(_lock_t *plock);
|
void _lock_release(_lock_t *plock);
|
||||||
void _lock_release_recursive(_lock_t *plock);
|
void _lock_release_recursive(_lock_t *plock);
|
||||||
|
|
||||||
#if CONFIG_LIBC_PICOLIBC
|
|
||||||
#define __lock_try_acquire(lock) _lock_try_acquire(&(lock))
|
|
||||||
#define __lock_try_acquire_recursive(lock) _lock_try_acquire_recursive(&(lock))
|
|
||||||
#endif // CONFIG_LIBC_PICOLIBC
|
|
||||||
#endif // _RETARGETABLE_LOCKING
|
#endif // _RETARGETABLE_LOCKING
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
|
@@ -26,6 +26,10 @@ int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *errorfds, struct
|
|||||||
|
|
||||||
#endif // fd_set
|
#endif // fd_set
|
||||||
|
|
||||||
|
#if __BSD_VISIBLE && !defined(fds_bits)
|
||||||
|
#define fds_bits __fds_bits
|
||||||
|
#endif
|
||||||
|
|
||||||
#if defined(FD_ISSET) || defined(FD_SET) || defined(FD_CLR)
|
#if defined(FD_ISSET) || defined(FD_SET) || defined(FD_CLR)
|
||||||
#undef FD_SET
|
#undef FD_SET
|
||||||
#undef FD_CLR
|
#undef FD_CLR
|
||||||
|
@@ -6,6 +6,7 @@
|
|||||||
|
|
||||||
#include <sys/random.h>
|
#include <sys/random.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
|
#include <stddef.h>
|
||||||
|
|
||||||
int getentropy(void *buffer, size_t length)
|
int getentropy(void *buffer, size_t length)
|
||||||
{
|
{
|
||||||
|
@@ -3,10 +3,6 @@
|
|||||||
# and/or applications may assume that because these functions normally are in ROM, they are accessible even when flash is
|
# and/or applications may assume that because these functions normally are in ROM, they are accessible even when flash is
|
||||||
# inaccessible. To work around this, this ld fragment places these functions in RAM instead. If the ROM functions are used,
|
# inaccessible. To work around this, this ld fragment places these functions in RAM instead. If the ROM functions are used,
|
||||||
# these defines do nothing, so they can still be included in that situation.
|
# these defines do nothing, so they can still be included in that situation.
|
||||||
#
|
|
||||||
#
|
|
||||||
# Note: the only difference between esp32-spiram-rom-functions-c.lf
|
|
||||||
# and esp32-spiram-rom-functions-psram-workaround.lf is the archive name.
|
|
||||||
|
|
||||||
[mapping:libc]
|
[mapping:libc]
|
||||||
archive:
|
archive:
|
||||||
@@ -15,6 +11,8 @@ archive:
|
|||||||
else:
|
else:
|
||||||
libc.a
|
libc.a
|
||||||
entries:
|
entries:
|
||||||
|
if LIBC_OPTIMIZED_MISALIGNED_ACCESS = y:
|
||||||
|
libc_a-memcpy (noflash)
|
||||||
if SPIRAM_CACHE_WORKAROUND = y:
|
if SPIRAM_CACHE_WORKAROUND = y:
|
||||||
# The following libs are either used in a lot of places or in critical
|
# The following libs are either used in a lot of places or in critical
|
||||||
# code. (such as panic or abort)
|
# code. (such as panic or abort)
|
@@ -9,3 +9,18 @@ entries:
|
|||||||
stdatomic (noflash)
|
stdatomic (noflash)
|
||||||
if STDATOMIC_S32C1I_SPIRAM_WORKAROUND = y:
|
if STDATOMIC_S32C1I_SPIRAM_WORKAROUND = y:
|
||||||
stdatomic_s32c1i (noflash)
|
stdatomic_s32c1i (noflash)
|
||||||
|
if STDATOMIC_S32C1I_SPIRAM_WORKAROUND = y:
|
||||||
|
stdatomic_s32c1i (noflash)
|
||||||
|
if CONFIG_LIBC_OPTIMIZED_MISALIGNED_ACCESS = y && IDF_TOOLCHAIN_GCC = y:
|
||||||
|
# memcpy() should be in IRAM due to early system use
|
||||||
|
# Others can stay in flash (performance difference is minimal)
|
||||||
|
#
|
||||||
|
# Performance Comparison:
|
||||||
|
# | func | flash | iram |
|
||||||
|
# |---------|-------|-------|
|
||||||
|
# | memcmp | 15986 | 15170 |
|
||||||
|
# | strcpy | 17499 | 16660 |
|
||||||
|
# | strcmp | 13125 | 11147 |
|
||||||
|
# | strncpy | 17386 | 16668 |
|
||||||
|
# | strncmp | 22161 | 21782 |
|
||||||
|
libc_a-memcpy (noflash)
|
||||||
|
@@ -8,6 +8,10 @@
|
|||||||
archive:
|
archive:
|
||||||
libc.a
|
libc.a
|
||||||
entries:
|
entries:
|
||||||
|
if LIBC_OPTIMIZED_MISALIGNED_ACCESS = y && IDF_TARGET_ARCH_RISCV = y:
|
||||||
|
memcpy-asm (noflash)
|
||||||
|
if LIBC_OPTIMIZED_MISALIGNED_ACCESS = y && IDF_TARGET_ARCH_XTENSA = y:
|
||||||
|
libc_machine_xtensa_memcpy (noflash)
|
||||||
if SPIRAM_CACHE_WORKAROUND = y:
|
if SPIRAM_CACHE_WORKAROUND = y:
|
||||||
# The following libs are either used in a lot of places or in critical code. (such as panic or abort)
|
# The following libs are either used in a lot of places or in critical code. (such as panic or abort)
|
||||||
# Thus, they shall always be placed in IRAM.
|
# Thus, they shall always be placed in IRAM.
|
@@ -13,7 +13,7 @@
|
|||||||
#include <stdio-bufio.h>
|
#include <stdio-bufio.h>
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
#include <sys/signal.h>
|
#include <signal.h>
|
||||||
#include <sys/unistd.h>
|
#include <sys/unistd.h>
|
||||||
#include <sys/reent.h>
|
#include <sys/reent.h>
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
|
@@ -4,6 +4,7 @@
|
|||||||
* SPDX-License-Identifier: Apache-2.0
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
*/
|
*/
|
||||||
#include <pthread.h>
|
#include <pthread.h>
|
||||||
|
#include <signal.h>
|
||||||
#include "esp_log.h"
|
#include "esp_log.h"
|
||||||
|
|
||||||
const static char *TAG = "esp32_asio_pthread";
|
const static char *TAG = "esp32_asio_pthread";
|
||||||
@@ -22,6 +23,8 @@ int pthread_sigmask(int how, const sigset_t *restrict set, sigset_t *restrict os
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// picolibc has sigfillset macro in signal.h
|
||||||
|
#if !CONFIG_LIBC_PICOLIBC
|
||||||
int sigfillset(sigset_t *what)
|
int sigfillset(sigset_t *what)
|
||||||
{
|
{
|
||||||
ESP_LOGD(TAG, "%s: Signals not supported in ESP pthread", __func__);
|
ESP_LOGD(TAG, "%s: Signals not supported in ESP pthread", __func__);
|
||||||
@@ -30,6 +33,7 @@ int sigfillset(sigset_t *what)
|
|||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
#endif /* !CONFIG_LIBC_PICOLIBC */
|
||||||
|
|
||||||
void esp_libc_include_pthread_impl(void)
|
void esp_libc_include_pthread_impl(void)
|
||||||
{
|
{
|
||||||
|
@@ -13,6 +13,7 @@
|
|||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <reent.h>
|
#include <reent.h>
|
||||||
#include <sys/fcntl.h>
|
#include <sys/fcntl.h>
|
||||||
|
#include <sys/stat.h>
|
||||||
#include "sdkconfig.h"
|
#include "sdkconfig.h"
|
||||||
#include "esp_rom_uart.h"
|
#include "esp_rom_uart.h"
|
||||||
#include "esp_system_console.h"
|
#include "esp_system_console.h"
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* SPDX-FileCopyrightText: 2024 Espressif Systems (Shanghai) CO LTD
|
* SPDX-FileCopyrightText: 2024-2025 Espressif Systems (Shanghai) CO LTD
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: Apache-2.0
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
*/
|
*/
|
||||||
@@ -10,6 +10,11 @@
|
|||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <sys/time.h>
|
#include <sys/time.h>
|
||||||
|
#include <sys/stat.h>
|
||||||
|
|
||||||
|
#if CONFIG_IDF_TOOLCHAIN_GCC
|
||||||
|
#include <sys/statvfs.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#if CONFIG_LIBC_PICOLIBC
|
#if CONFIG_LIBC_PICOLIBC
|
||||||
int open(const char *pathname, int flags, ...)
|
int open(const char *pathname, int flags, ...)
|
||||||
@@ -126,6 +131,22 @@ int system(const char* str)
|
|||||||
return _system_r(__getreent(), str);
|
return _system_r(__getreent(), str);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if CONFIG_IDF_TOOLCHAIN_GCC
|
||||||
|
int statvfs(const char *restrict path, struct statvfs *restrict buf)
|
||||||
|
{
|
||||||
|
/* TODO IDF-9879 */
|
||||||
|
errno = ENOSYS;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int fstatvfs(int fd, struct statvfs *buf)
|
||||||
|
{
|
||||||
|
/* TODO IDF-9879 */
|
||||||
|
errno = ENOSYS;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
void esp_libc_include_syscalls_impl(void)
|
void esp_libc_include_syscalls_impl(void)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
@@ -10,6 +10,7 @@
|
|||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <time.h>
|
#include <time.h>
|
||||||
|
#include <signal.h>
|
||||||
#include <sys/time.h>
|
#include <sys/time.h>
|
||||||
#include "unity.h"
|
#include "unity.h"
|
||||||
#include "sdkconfig.h"
|
#include "sdkconfig.h"
|
||||||
|
@@ -6,6 +6,7 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
#include <stddef.h>
|
||||||
#include "soc/pmu_reg.h"
|
#include "soc/pmu_reg.h"
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
|
@@ -6,6 +6,7 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
#include <stddef.h>
|
||||||
#include "soc/pmu_reg.h"
|
#include "soc/pmu_reg.h"
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C"
|
extern "C"
|
||||||
|
@@ -6,6 +6,7 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
#include <stddef.h>
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
@@ -5,6 +5,7 @@
|
|||||||
*/
|
*/
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include <stddef.h>
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include "soc/pmu_reg.h"
|
#include "soc/pmu_reg.h"
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
|
@@ -4,6 +4,7 @@
|
|||||||
* SPDX-License-Identifier: Apache-2.0
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include <stddef.h>
|
||||||
#include "soc/lldesc.h"
|
#include "soc/lldesc.h"
|
||||||
|
|
||||||
void lldesc_setup_link_constrained(lldesc_t *dmadesc, const void *data, int len, int max_desc_size, bool isrx)
|
void lldesc_setup_link_constrained(lldesc_t *dmadesc, const void *data, int len, int max_desc_size, bool isrx)
|
||||||
|
@@ -15,6 +15,7 @@
|
|||||||
#include "freertos/semphr.h"
|
#include "freertos/semphr.h"
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <dirent.h>
|
#include <dirent.h>
|
||||||
|
#include <time.h>
|
||||||
#include <sys/errno.h>
|
#include <sys/errno.h>
|
||||||
#include <sys/fcntl.h>
|
#include <sys/fcntl.h>
|
||||||
#include <sys/lock.h>
|
#include <sys/lock.h>
|
||||||
|
@@ -5,11 +5,11 @@ set(CMAKE_C_COMPILER "riscv32-esp-elf-gcc")
|
|||||||
set(CMAKE_CXX_COMPILER "riscv32-esp-elf-g++")
|
set(CMAKE_CXX_COMPILER "riscv32-esp-elf-g++")
|
||||||
set(CMAKE_ASM_COMPILER "riscv32-esp-elf-gcc")
|
set(CMAKE_ASM_COMPILER "riscv32-esp-elf-gcc")
|
||||||
|
|
||||||
set(CMAKE_C_FLAGS "-Os -ggdb -march=rv32imac_zicsr_zifencei -mdiv -fdata-sections -ffunction-sections"
|
set(CMAKE_C_FLAGS "-Os -ggdb -march=rv32imac_zicsr_zifencei_zaamo_zalrsc -mdiv -fdata-sections -ffunction-sections"
|
||||||
CACHE STRING "C Compiler Base Flags")
|
CACHE STRING "C Compiler Base Flags")
|
||||||
set(CMAKE_CXX_FLAGS "-Os -ggdb -march=rv32imac_zicsr_zifencei -mdiv -fdata-sections -ffunction-sections"
|
set(CMAKE_CXX_FLAGS "-Os -ggdb -march=rv32imac_zicsr_zifencei_zaamo_zalrsc -mdiv -fdata-sections -ffunction-sections"
|
||||||
CACHE STRING "C++ Compiler Base Flags")
|
CACHE STRING "C++ Compiler Base Flags")
|
||||||
set(CMAKE_ASM_FLAGS "-Os -ggdb -march=rv32imac_zicsr_zifencei -x assembler-with-cpp"
|
set(CMAKE_ASM_FLAGS "-Os -ggdb -march=rv32imac_zicsr_zifencei_zaamo_zalrsc -x assembler-with-cpp"
|
||||||
CACHE STRING "Assembler Base Flags")
|
CACHE STRING "Assembler Base Flags")
|
||||||
set(CMAKE_EXE_LINKER_FLAGS "-march=rv32imac_zicsr_zifencei --specs=nano.specs --specs=nosys.specs"
|
set(CMAKE_EXE_LINKER_FLAGS "-march=rv32imac_zicsr_zifencei_zaamo_zalrsc --specs=nano.specs --specs=nosys.specs"
|
||||||
CACHE STRING "Linker Base Flags")
|
CACHE STRING "Linker Base Flags")
|
||||||
|
@@ -362,6 +362,7 @@ PREDEFINED = \
|
|||||||
IDF_DEPRECATED(X)= \
|
IDF_DEPRECATED(X)= \
|
||||||
IRAM_ATTR= \
|
IRAM_ATTR= \
|
||||||
FORCE_INLINE_ATTR= \
|
FORCE_INLINE_ATTR= \
|
||||||
|
NONSTRING_ATTR= \
|
||||||
configSUPPORT_DYNAMIC_ALLOCATION=1 \
|
configSUPPORT_DYNAMIC_ALLOCATION=1 \
|
||||||
configSUPPORT_STATIC_ALLOCATION=1 \
|
configSUPPORT_STATIC_ALLOCATION=1 \
|
||||||
configQUEUE_REGISTRY_SIZE=1 \
|
configQUEUE_REGISTRY_SIZE=1 \
|
||||||
|
@@ -11,3 +11,4 @@ Migration from 5.5 to 6.0
|
|||||||
security
|
security
|
||||||
tools
|
tools
|
||||||
system
|
system
|
||||||
|
toolchain
|
||||||
|
110
docs/en/migration-guides/release-6.x/6.0/toolchain.rst
Normal file
110
docs/en/migration-guides/release-6.x/6.0/toolchain.rst
Normal file
@@ -0,0 +1,110 @@
|
|||||||
|
Toolchain
|
||||||
|
*********
|
||||||
|
|
||||||
|
:link_to_translation:`zh_CN:[中文]`
|
||||||
|
|
||||||
|
GCC Version
|
||||||
|
===========
|
||||||
|
|
||||||
|
The previous GCC version 14.2.0 has been upgraded to 15.1.0 across all chip targets. Upgrading to ESP-IDF v6.0 requires porting code to GCC 15.1.0. Refer to the official `GCC 15 porting guide <https://gcc.gnu.org/gcc-15/porting_to.html>`_
|
||||||
|
|
||||||
|
Warnings
|
||||||
|
========
|
||||||
|
|
||||||
|
The upgrade to GCC 15.1.0 has resulted in the addition of new warnings, or enhancements to existing warnings. The full details of all GCC warnings can be found in `GCC Warning Options <https://gcc.gnu.org/onlinedocs/gcc-15.1.0/gcc/Warning-Options.html>`_. Users are advised to double-check their code, then fix the warnings if possible. Unfortunately, depending on the warning and the complexity of the user's code, some warnings will be false positives that require non-trivial fixes. In such cases, users can choose to suppress the warning in multiple ways. This section outlines some common warnings that users are likely to encounter and ways to fix them.
|
||||||
|
|
||||||
|
To suprress all new warnings enable :ref:`CONFIG_COMPILER_DISABLE_GCC15_WARNINGS` config option.
|
||||||
|
|
||||||
|
``-Wno-unterminated-string-initialization``
|
||||||
|
-------------------------------------------
|
||||||
|
|
||||||
|
Warn about character arrays initialized as unterminated character sequences with a string literal, unless the declaration being initialized has the nonstring attribute.
|
||||||
|
|
||||||
|
.. code-block:: c
|
||||||
|
|
||||||
|
#include "esp_attr.h"
|
||||||
|
|
||||||
|
char arr[3] = "foo"; /* Warning. */
|
||||||
|
NONSTRING_ATTR char arr2[3] = "bar"; /* No warning. */
|
||||||
|
|
||||||
|
``-Wno-header-guard``
|
||||||
|
---------------------
|
||||||
|
|
||||||
|
Warn if a header file has a typo in its include guard. When #ifndef and #define use different names.
|
||||||
|
|
||||||
|
.. code-block:: c
|
||||||
|
|
||||||
|
#ifndef WHEADER_GUARD_2
|
||||||
|
#define WHEADERGUARD2 /* Warning. Must be changed to WHEADER_GUARD_2. */
|
||||||
|
/* ... */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
``-Wno-self-move (C++ only)``
|
||||||
|
-----------------------------
|
||||||
|
|
||||||
|
Warns when a value is moved to itself with std::move. Such a std::move typically has no effect.
|
||||||
|
|
||||||
|
.. code-block:: cpp
|
||||||
|
|
||||||
|
struct T {
|
||||||
|
/* ... */
|
||||||
|
};
|
||||||
|
void fn()
|
||||||
|
{
|
||||||
|
T t;
|
||||||
|
/* ... */
|
||||||
|
t = std::move (t); /* Warning. The line can be removed. */
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
``-Wno-template-body (C++ only)``
|
||||||
|
---------------------------------
|
||||||
|
|
||||||
|
Disable diagnosing errors when parsing a template, and instead issue an error only upon instantiation of the template.
|
||||||
|
|
||||||
|
.. code-block:: cpp
|
||||||
|
|
||||||
|
template<class T>
|
||||||
|
void f() {
|
||||||
|
const int n = 42;
|
||||||
|
++n; /* read-only variable 'n' */
|
||||||
|
}
|
||||||
|
|
||||||
|
``-Wno-dangling-reference (C++ only)``
|
||||||
|
--------------------------------------
|
||||||
|
|
||||||
|
Warn when a reference is bound to a temporary whose lifetime has ended.
|
||||||
|
|
||||||
|
.. code-block:: cpp
|
||||||
|
|
||||||
|
int n = 1;
|
||||||
|
const int& r = std::max(n - 1, n + 1); /* r is dangling. */
|
||||||
|
|
||||||
|
``-Wno-defaulted-function-deleted (C++ only)``
|
||||||
|
----------------------------------------------
|
||||||
|
|
||||||
|
Warn when an explicitly defaulted function is deleted by the compiler. That can occur when the function’s declared type does not match the type of the function that would have been implicitly declared.
|
||||||
|
|
||||||
|
.. code-block:: cpp
|
||||||
|
|
||||||
|
template<typename>
|
||||||
|
struct C {
|
||||||
|
C();
|
||||||
|
C(const C&&) = default; /* Implicitly deleted. */
|
||||||
|
};
|
||||||
|
|
||||||
|
Picolibc
|
||||||
|
========
|
||||||
|
|
||||||
|
When building with :ref:`CONFIG_LIBC_PICOLIBC<CONFIG_LIBC_PICOLIBC>` enabled, the following adaptation is required.
|
||||||
|
|
||||||
|
``sys/signal.h header removed``
|
||||||
|
-------------------------------
|
||||||
|
|
||||||
|
The header ``<sys/signal.h>`` is no longer available in Picolibc.
|
||||||
|
To ensure compatibility and improve portability across libc implementations, replace it with the standard C header ``<signal.h>``.
|
||||||
|
|
||||||
|
.. code-block:: c
|
||||||
|
|
||||||
|
#include <sys/signal.h> /* fatal error: sys/signal.h: No such file or directory */
|
||||||
|
#include <signal.h> /* Ok: standard and portable */
|
@@ -11,3 +11,4 @@
|
|||||||
security
|
security
|
||||||
tools
|
tools
|
||||||
system
|
system
|
||||||
|
toolchain
|
||||||
|
@@ -0,0 +1 @@
|
|||||||
|
.. include:: ../../../../en/migration-guides/release-6.x/6.0/toolchain.rst
|
@@ -7,11 +7,13 @@ import subprocess
|
|||||||
import time
|
import time
|
||||||
|
|
||||||
import pexpect
|
import pexpect
|
||||||
from idf_iperf_test_util import LineChart
|
|
||||||
from pytest_embedded import Dut
|
from pytest_embedded import Dut
|
||||||
|
|
||||||
|
from idf_iperf_test_util import LineChart
|
||||||
|
|
||||||
try:
|
try:
|
||||||
from typing import Any, Tuple
|
from typing import Any
|
||||||
|
from typing import Tuple
|
||||||
except ImportError:
|
except ImportError:
|
||||||
# Only used for type annotations
|
# Only used for type annotations
|
||||||
pass
|
pass
|
||||||
@@ -114,21 +116,27 @@ class TestResult(object):
|
|||||||
continue
|
continue
|
||||||
throughput_list.append(throughput)
|
throughput_list.append(throughput)
|
||||||
max_throughput = max(max_throughput, throughput)
|
max_throughput = max(max_throughput, throughput)
|
||||||
if throughput == 0 and rssi > self.ZERO_POINT_THRESHOLD \
|
if throughput == 0 and rssi > self.ZERO_POINT_THRESHOLD and fall_to_0_recorded < 1:
|
||||||
and fall_to_0_recorded < 1:
|
|
||||||
# throughput fall to 0 error. we only record 1 records for one test
|
# throughput fall to 0 error. we only record 1 records for one test
|
||||||
self.error_list.append('[Error][fall to 0][{}][att: {}][rssi: {}]: 0 throughput interval: {}-{}'
|
self.error_list.append(
|
||||||
.format(ap_ssid, att, rssi, result[0], result[1]))
|
'[Error][fall to 0][{}][att: {}][rssi: {}]: 0 throughput interval: {}-{}'.format(
|
||||||
|
ap_ssid, att, rssi, result[0], result[1]
|
||||||
|
)
|
||||||
|
)
|
||||||
fall_to_0_recorded += 1
|
fall_to_0_recorded += 1
|
||||||
|
|
||||||
if len(throughput_list) < self.THROUGHPUT_QUALIFY_COUNT:
|
if len(throughput_list) < self.THROUGHPUT_QUALIFY_COUNT:
|
||||||
self.error_list.append('[Error][Fatal][{}][att: {}][rssi: {}]: Only {} throughput values found, expected at least {}'
|
self.error_list.append(
|
||||||
.format(ap_ssid, att, rssi, len(throughput_list), self.THROUGHPUT_QUALIFY_COUNT))
|
'[Error][Fatal][{}][att: {}][rssi: {}]: Only {} throughput values found, expected at least {}'.format(
|
||||||
|
ap_ssid, att, rssi, len(throughput_list), self.THROUGHPUT_QUALIFY_COUNT
|
||||||
|
)
|
||||||
|
)
|
||||||
max_throughput = 0.0
|
max_throughput = 0.0
|
||||||
|
|
||||||
if max_throughput == 0 and rssi > self.ZERO_THROUGHPUT_THRESHOLD:
|
if max_throughput == 0 and rssi > self.ZERO_THROUGHPUT_THRESHOLD:
|
||||||
self.error_list.append('[Error][Fatal][{}][att: {}][rssi: {}]: No throughput data found'
|
self.error_list.append(
|
||||||
.format(ap_ssid, att, rssi))
|
'[Error][Fatal][{}][att: {}][rssi: {}]: No throughput data found'.format(ap_ssid, att, rssi)
|
||||||
|
)
|
||||||
|
|
||||||
self._save_result(max_throughput, ap_ssid, att, rssi, heap_size)
|
self._save_result(max_throughput, ap_ssid, att, rssi, heap_size)
|
||||||
|
|
||||||
@@ -141,6 +149,7 @@ class TestResult(object):
|
|||||||
1. throughput value 30% worse than the next point with lower RSSI
|
1. throughput value 30% worse than the next point with lower RSSI
|
||||||
2. throughput value 30% worse than the next point with larger attenuate
|
2. throughput value 30% worse than the next point with larger attenuate
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def analysis_bad_point(data: dict, index_type: str) -> None:
|
def analysis_bad_point(data: dict, index_type: str) -> None:
|
||||||
for ap_ssid in data:
|
for ap_ssid in data:
|
||||||
result_dict = data[ap_ssid]
|
result_dict = data[ap_ssid]
|
||||||
@@ -150,14 +159,18 @@ class TestResult(object):
|
|||||||
index_list.reverse()
|
index_list.reverse()
|
||||||
|
|
||||||
for i, index_value in enumerate(index_list[1:]):
|
for i, index_value in enumerate(index_list[1:]):
|
||||||
if index_value < self.BAD_POINT_RSSI_THRESHOLD or \
|
if (
|
||||||
result_dict[index_list[i]] < self.BAD_POINT_MIN_THRESHOLD:
|
index_value < self.BAD_POINT_RSSI_THRESHOLD
|
||||||
|
or result_dict[index_list[i]] < self.BAD_POINT_MIN_THRESHOLD
|
||||||
|
):
|
||||||
continue
|
continue
|
||||||
_percentage = result_dict[index_value] / result_dict[index_list[i]]
|
_percentage = result_dict[index_value] / result_dict[index_list[i]]
|
||||||
if _percentage < 1 - self.BAD_POINT_PERCENTAGE_THRESHOLD:
|
if _percentage < 1 - self.BAD_POINT_PERCENTAGE_THRESHOLD:
|
||||||
self.error_list.append('[Error][Bad point][{}][{}: {}]: drop {:.02f}%'
|
self.error_list.append(
|
||||||
.format(ap_ssid, index_type, index_value,
|
'[Error][Bad point][{}][{}: {}]: drop {:.02f}%'.format(
|
||||||
(1 - _percentage) * 100))
|
ap_ssid, index_type, index_value, (1 - _percentage) * 100
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
analysis_bad_point(self.throughput_by_rssi, 'rssi')
|
analysis_bad_point(self.throughput_by_rssi, 'rssi')
|
||||||
analysis_bad_point(self.throughput_by_att, 'att')
|
analysis_bad_point(self.throughput_by_att, 'att')
|
||||||
@@ -184,11 +197,14 @@ class TestResult(object):
|
|||||||
else:
|
else:
|
||||||
file_name = 'ThroughputVs{}_{}_{}.html'.format(type_name, self.proto, self.direction)
|
file_name = 'ThroughputVs{}_{}_{}.html'.format(type_name, self.proto, self.direction)
|
||||||
|
|
||||||
LineChart.draw_line_chart(os.path.join(path, file_name),
|
LineChart.draw_line_chart(
|
||||||
|
os.path.join(path, file_name),
|
||||||
'Throughput Vs {} ({} {})'.format(type_name, self.proto, self.direction),
|
'Throughput Vs {} ({} {})'.format(type_name, self.proto, self.direction),
|
||||||
'{} (dbm)'.format(type_name),
|
'{} (dbm)'.format(type_name),
|
||||||
'Throughput (Mbps)',
|
'Throughput (Mbps)',
|
||||||
data, range_list)
|
data,
|
||||||
|
range_list,
|
||||||
|
)
|
||||||
return file_name
|
return file_name
|
||||||
|
|
||||||
def draw_rssi_vs_att_figure(self, path: str, ap_ssid: str) -> str:
|
def draw_rssi_vs_att_figure(self, path: str, ap_ssid: str) -> str:
|
||||||
@@ -201,18 +217,14 @@ class TestResult(object):
|
|||||||
file_name = 'AttVsRSSI.html'
|
file_name = 'AttVsRSSI.html'
|
||||||
else:
|
else:
|
||||||
file_name = 'AttVsRSSI.html'
|
file_name = 'AttVsRSSI.html'
|
||||||
LineChart.draw_line_chart(os.path.join(path, file_name),
|
LineChart.draw_line_chart(
|
||||||
'Att Vs RSSI',
|
os.path.join(path, file_name), 'Att Vs RSSI', 'Att (dbm)', 'RSSI (dbm)', self.att_rssi_map, self.ATT_RANGE
|
||||||
'Att (dbm)',
|
)
|
||||||
'RSSI (dbm)',
|
|
||||||
self.att_rssi_map,
|
|
||||||
self.ATT_RANGE)
|
|
||||||
return file_name
|
return file_name
|
||||||
|
|
||||||
def get_best_throughput(self) -> Any:
|
def get_best_throughput(self) -> Any:
|
||||||
"""get the best throughput during test"""
|
"""get the best throughput during test"""
|
||||||
best_for_aps = [max(self.throughput_by_att[ap_ssid].values())
|
best_for_aps = [max(self.throughput_by_att[ap_ssid].values()) for ap_ssid in self.throughput_by_att]
|
||||||
for ap_ssid in self.throughput_by_att]
|
|
||||||
return max(best_for_aps)
|
return max(best_for_aps)
|
||||||
|
|
||||||
def __str__(self) -> str:
|
def __str__(self) -> str:
|
||||||
@@ -224,8 +236,9 @@ class TestResult(object):
|
|||||||
3. min free heap size during test
|
3. min free heap size during test
|
||||||
"""
|
"""
|
||||||
if self.throughput_by_att:
|
if self.throughput_by_att:
|
||||||
ret = '[{}_{}][{}]: {}\r\n\r\n'.format(self.proto, self.direction, self.config_name,
|
ret = '[{}_{}][{}]: {}\r\n\r\n'.format(
|
||||||
'Fail' if self.error_list else 'Success')
|
self.proto, self.direction, self.config_name, 'Fail' if self.error_list else 'Success'
|
||||||
|
)
|
||||||
ret += 'Performance for each AP:\r\n'
|
ret += 'Performance for each AP:\r\n'
|
||||||
for ap_ssid in self.throughput_by_att:
|
for ap_ssid in self.throughput_by_att:
|
||||||
ret += '[{}]: {:.02f} Mbps\r\n'.format(ap_ssid, max(self.throughput_by_att[ap_ssid].values()))
|
ret += '[{}]: {:.02f} Mbps\r\n'.format(ap_ssid, max(self.throughput_by_att[ap_ssid].values()))
|
||||||
@@ -239,8 +252,16 @@ class TestResult(object):
|
|||||||
class IperfTestUtility(object):
|
class IperfTestUtility(object):
|
||||||
"""iperf test implementation"""
|
"""iperf test implementation"""
|
||||||
|
|
||||||
def __init__(self, dut:Dut, config_name:str, ap_ssid:str, ap_password:str,
|
def __init__(
|
||||||
pc_nic_ip:str, pc_iperf_log_file:str, test_result:Any=None) -> None:
|
self,
|
||||||
|
dut: Dut,
|
||||||
|
config_name: str,
|
||||||
|
ap_ssid: str,
|
||||||
|
ap_password: str,
|
||||||
|
pc_nic_ip: str,
|
||||||
|
pc_iperf_log_file: str,
|
||||||
|
test_result: Any = None,
|
||||||
|
) -> None:
|
||||||
self.config_name = config_name
|
self.config_name = config_name
|
||||||
self.dut = dut
|
self.dut = dut
|
||||||
|
|
||||||
@@ -281,8 +302,7 @@ class IperfTestUtility(object):
|
|||||||
self.dut.write('sta_scan {}'.format(self.ap_ssid))
|
self.dut.write('sta_scan {}'.format(self.ap_ssid))
|
||||||
for _ in range(SCAN_RETRY_COUNT):
|
for _ in range(SCAN_RETRY_COUNT):
|
||||||
try:
|
try:
|
||||||
rssi = int(self.dut.expect(r'\[{}]\[rssi=(-\d+)]'.format(self.ap_ssid),
|
rssi = int(self.dut.expect(r'\[{}]\[rssi=(-\d+)]'.format(self.ap_ssid), timeout=SCAN_TIMEOUT).group(1))
|
||||||
timeout=SCAN_TIMEOUT).group(1))
|
|
||||||
break
|
break
|
||||||
except pexpect.TIMEOUT:
|
except pexpect.TIMEOUT:
|
||||||
continue
|
continue
|
||||||
@@ -307,17 +327,21 @@ class IperfTestUtility(object):
|
|||||||
if direction == 'tx':
|
if direction == 'tx':
|
||||||
with open(PC_IPERF_TEMP_LOG_FILE, 'w') as f:
|
with open(PC_IPERF_TEMP_LOG_FILE, 'w') as f:
|
||||||
if proto == 'tcp':
|
if proto == 'tcp':
|
||||||
process = subprocess.Popen(['iperf', '-s', '-B', self.pc_nic_ip,
|
process = subprocess.Popen(
|
||||||
'-t', str(TEST_TIME), '-i', '1', '-f', 'm'],
|
['iperf', '-s', '-B', self.pc_nic_ip, '-t', str(TEST_TIME), '-i', '1', '-f', 'm'],
|
||||||
stdout=f, stderr=f)
|
stdout=f,
|
||||||
|
stderr=f,
|
||||||
|
)
|
||||||
if bw_limit > 0:
|
if bw_limit > 0:
|
||||||
self.dut.write('iperf -c {} -i 1 -t {} -b {}'.format(self.pc_nic_ip, TEST_TIME, bw_limit))
|
self.dut.write('iperf -c {} -i 1 -t {} -b {}'.format(self.pc_nic_ip, TEST_TIME, bw_limit))
|
||||||
else:
|
else:
|
||||||
self.dut.write('iperf -c {} -i 1 -t {}'.format(self.pc_nic_ip, TEST_TIME))
|
self.dut.write('iperf -c {} -i 1 -t {}'.format(self.pc_nic_ip, TEST_TIME))
|
||||||
else:
|
else:
|
||||||
process = subprocess.Popen(['iperf', '-s', '-u', '-B', self.pc_nic_ip,
|
process = subprocess.Popen(
|
||||||
'-t', str(TEST_TIME), '-i', '1', '-f', 'm'],
|
['iperf', '-s', '-u', '-B', self.pc_nic_ip, '-t', str(TEST_TIME), '-i', '1', '-f', 'm'],
|
||||||
stdout=f, stderr=f)
|
stdout=f,
|
||||||
|
stderr=f,
|
||||||
|
)
|
||||||
if bw_limit > 0:
|
if bw_limit > 0:
|
||||||
self.dut.write('iperf -c {} -u -i 1 -t {} -b {}'.format(self.pc_nic_ip, TEST_TIME, bw_limit))
|
self.dut.write('iperf -c {} -u -i 1 -t {} -b {}'.format(self.pc_nic_ip, TEST_TIME, bw_limit))
|
||||||
else:
|
else:
|
||||||
@@ -343,11 +367,15 @@ class IperfTestUtility(object):
|
|||||||
# compatible with old iperf example binary
|
# compatible with old iperf example binary
|
||||||
logging.info('create iperf tcp server fail')
|
logging.info('create iperf tcp server fail')
|
||||||
if bw_limit > 0:
|
if bw_limit > 0:
|
||||||
process = subprocess.Popen(['iperf', '-c', dut_ip, '-b', str(bw_limit) + 'm',
|
process = subprocess.Popen(
|
||||||
'-t', str(TEST_TIME), '-f', 'm'], stdout=f, stderr=f)
|
['iperf', '-c', dut_ip, '-b', str(bw_limit) + 'm', '-t', str(TEST_TIME), '-f', 'm'],
|
||||||
|
stdout=f,
|
||||||
|
stderr=f,
|
||||||
|
)
|
||||||
else:
|
else:
|
||||||
process = subprocess.Popen(['iperf', '-c', dut_ip,
|
process = subprocess.Popen(
|
||||||
'-t', str(TEST_TIME), '-f', 'm'], stdout=f, stderr=f)
|
['iperf', '-c', dut_ip, '-t', str(TEST_TIME), '-f', 'm'], stdout=f, stderr=f
|
||||||
|
)
|
||||||
for _ in range(TEST_TIMEOUT):
|
for _ in range(TEST_TIMEOUT):
|
||||||
if process.poll() is not None:
|
if process.poll() is not None:
|
||||||
break
|
break
|
||||||
@@ -363,8 +391,11 @@ class IperfTestUtility(object):
|
|||||||
except pexpect.TIMEOUT:
|
except pexpect.TIMEOUT:
|
||||||
# compatible with old iperf example binary
|
# compatible with old iperf example binary
|
||||||
logging.info('create iperf udp server fail')
|
logging.info('create iperf udp server fail')
|
||||||
process = subprocess.Popen(['iperf', '-c', dut_ip, '-u', '-b', str(bw_limit) + 'm',
|
process = subprocess.Popen(
|
||||||
'-t', str(TEST_TIME), '-f', 'm'], stdout=f, stderr=f)
|
['iperf', '-c', dut_ip, '-u', '-b', str(bw_limit) + 'm', '-t', str(TEST_TIME), '-f', 'm'],
|
||||||
|
stdout=f,
|
||||||
|
stderr=f,
|
||||||
|
)
|
||||||
for _ in range(TEST_TIMEOUT):
|
for _ in range(TEST_TIMEOUT):
|
||||||
if process.poll() is not None:
|
if process.poll() is not None:
|
||||||
break
|
break
|
||||||
@@ -376,7 +407,9 @@ class IperfTestUtility(object):
|
|||||||
stop_bw = 100
|
stop_bw = 100
|
||||||
n = 10
|
n = 10
|
||||||
step = int((stop_bw - start_bw) / n)
|
step = int((stop_bw - start_bw) / n)
|
||||||
self.dut.write('iperf -s -u -i 1 -t {}'.format(TEST_TIME + 4 * (n + 1))) # 4 sec for each bw step instance start/stop
|
self.dut.write(
|
||||||
|
'iperf -s -u -i 1 -t {}'.format(TEST_TIME + 4 * (n + 1))
|
||||||
|
) # 4 sec for each bw step instance start/stop
|
||||||
# wait until DUT TCP server created
|
# wait until DUT TCP server created
|
||||||
try:
|
try:
|
||||||
self.dut.expect('Socket bound', timeout=5)
|
self.dut.expect('Socket bound', timeout=5)
|
||||||
@@ -384,8 +417,22 @@ class IperfTestUtility(object):
|
|||||||
# compatible with old iperf example binary
|
# compatible with old iperf example binary
|
||||||
logging.info('create iperf udp server fail')
|
logging.info('create iperf udp server fail')
|
||||||
for bandwidth in range(start_bw, stop_bw, step):
|
for bandwidth in range(start_bw, stop_bw, step):
|
||||||
process = subprocess.Popen(['iperf', '-c', dut_ip, '-u', '-b', str(bandwidth) + 'm',
|
process = subprocess.Popen(
|
||||||
'-t', str(TEST_TIME / (n + 1)), '-f', 'm'], stdout=f, stderr=f)
|
[
|
||||||
|
'iperf',
|
||||||
|
'-c',
|
||||||
|
dut_ip,
|
||||||
|
'-u',
|
||||||
|
'-b',
|
||||||
|
str(bandwidth) + 'm',
|
||||||
|
'-t',
|
||||||
|
str(TEST_TIME / (n + 1)),
|
||||||
|
'-f',
|
||||||
|
'm',
|
||||||
|
],
|
||||||
|
stdout=f,
|
||||||
|
stderr=f,
|
||||||
|
)
|
||||||
for _ in range(TEST_TIMEOUT):
|
for _ in range(TEST_TIMEOUT):
|
||||||
if process.poll() is not None:
|
if process.poll() is not None:
|
||||||
break
|
break
|
||||||
@@ -402,13 +449,16 @@ class IperfTestUtility(object):
|
|||||||
|
|
||||||
# save PC iperf logs to console
|
# save PC iperf logs to console
|
||||||
with open(self.pc_iperf_log_file, 'a+') as f:
|
with open(self.pc_iperf_log_file, 'a+') as f:
|
||||||
f.write('## [{}] `{}`\r\n##### {}'
|
f.write(
|
||||||
.format(self.config_name,
|
'## [{}] `{}`\r\n##### {}'.format(
|
||||||
|
self.config_name,
|
||||||
'{}_{}'.format(proto, direction),
|
'{}_{}'.format(proto, direction),
|
||||||
time.strftime('%m-%d %H:%M:%S', time.localtime(time.time()))))
|
time.strftime('%m-%d %H:%M:%S', time.localtime(time.time())),
|
||||||
|
)
|
||||||
|
)
|
||||||
f.write('\r\n```\r\n\r\n' + pc_raw_data + '\r\n```\r\n')
|
f.write('\r\n```\r\n\r\n' + pc_raw_data + '\r\n```\r\n')
|
||||||
self.dut.write('heap')
|
self.dut.write('heap')
|
||||||
heap_size = self.dut.expect(r'min heap size: (\d+)\D').group(1)
|
heap_size = self.dut.expect(r'min heap size: (\d+)\D', timeout=120).group(1)
|
||||||
|
|
||||||
# return server raw data (for parsing test results) and RSSI
|
# return server raw data (for parsing test results) and RSSI
|
||||||
return server_raw_data, rssi, heap_size
|
return server_raw_data, rssi, heap_size
|
||||||
@@ -426,11 +476,14 @@ class IperfTestUtility(object):
|
|||||||
heap_size = INVALID_HEAP_SIZE
|
heap_size = INVALID_HEAP_SIZE
|
||||||
try:
|
try:
|
||||||
server_raw_data, rssi, heap_size = self._test_once(proto, direction, bw_limit)
|
server_raw_data, rssi, heap_size = self._test_once(proto, direction, bw_limit)
|
||||||
throughput = self._save_test_result('{}_{}'.format(proto, direction),
|
throughput = self._save_test_result(
|
||||||
server_raw_data, atten_val,
|
'{}_{}'.format(proto, direction), server_raw_data, atten_val, rssi, heap_size
|
||||||
rssi, heap_size)
|
)
|
||||||
logging.info('[{}][{}_{}][{}][{}]: {:.02f}'
|
logging.info(
|
||||||
.format(self.config_name, proto, direction, rssi, self.ap_ssid, throughput))
|
'[{}][{}_{}][{}][{}]: {:.02f}'.format(
|
||||||
|
self.config_name, proto, direction, rssi, self.ap_ssid, throughput
|
||||||
|
)
|
||||||
|
)
|
||||||
self.lowest_rssi_scanned = min(self.lowest_rssi_scanned, rssi)
|
self.lowest_rssi_scanned = min(self.lowest_rssi_scanned, rssi)
|
||||||
except (ValueError, IndexError):
|
except (ValueError, IndexError):
|
||||||
self._save_test_result('{}_{}'.format(proto, direction), '', atten_val, rssi, heap_size)
|
self._save_test_result('{}_{}'.format(proto, direction), '', atten_val, rssi, heap_size)
|
||||||
@@ -452,7 +505,8 @@ class IperfTestUtility(object):
|
|||||||
self.run_test('udp', 'rx', atten_val, bw_limit)
|
self.run_test('udp', 'rx', atten_val, bw_limit)
|
||||||
if self.fail_to_scan > 10:
|
if self.fail_to_scan > 10:
|
||||||
logging.info(
|
logging.info(
|
||||||
'Fail to scan AP for more than 10 times. Lowest RSSI scanned is {}'.format(self.lowest_rssi_scanned))
|
'Fail to scan AP for more than 10 times. Lowest RSSI scanned is {}'.format(self.lowest_rssi_scanned)
|
||||||
|
)
|
||||||
raise AssertionError
|
raise AssertionError
|
||||||
|
|
||||||
def wait_ap_power_on(self) -> bool:
|
def wait_ap_power_on(self) -> bool:
|
||||||
@@ -467,8 +521,7 @@ class IperfTestUtility(object):
|
|||||||
for _ in range(WAIT_AP_POWER_ON_TIMEOUT // SCAN_TIMEOUT):
|
for _ in range(WAIT_AP_POWER_ON_TIMEOUT // SCAN_TIMEOUT):
|
||||||
try:
|
try:
|
||||||
self.dut.write('scan {}'.format(self.ap_ssid))
|
self.dut.write('scan {}'.format(self.ap_ssid))
|
||||||
self.dut.expect(r'\[{}]\[rssi=(-\d+)]'.format(self.ap_ssid),
|
self.dut.expect(r'\[{}]\[rssi=(-\d+)]'.format(self.ap_ssid), timeout=SCAN_TIMEOUT)
|
||||||
timeout=SCAN_TIMEOUT)
|
|
||||||
ret = True
|
ret = True
|
||||||
break
|
break
|
||||||
except pexpect.TIMEOUT:
|
except pexpect.TIMEOUT:
|
||||||
|
@@ -7,17 +7,17 @@ set(CMAKE_CXX_COMPILER xtensa-esp32-elf-g++)
|
|||||||
set(CMAKE_ASM_COMPILER xtensa-esp32-elf-gcc)
|
set(CMAKE_ASM_COMPILER xtensa-esp32-elf-gcc)
|
||||||
set(_CMAKE_TOOLCHAIN_PREFIX xtensa-esp32-elf-)
|
set(_CMAKE_TOOLCHAIN_PREFIX xtensa-esp32-elf-)
|
||||||
|
|
||||||
remove_duplicated_flags("-mlongcalls -Wno-frame-address \
|
set(_CMAKE_TOOLCHAIN_COMMON_FLAGS
|
||||||
-fno-builtin-memcpy -fno-builtin-memset -fno-builtin-bzero \
|
"-mlongcalls -Wno-frame-address -fno-builtin-memcpy -fno-builtin-memset -fno-builtin-bzero")
|
||||||
-fno-builtin-stpcpy -fno-builtin-strncpy \
|
|
||||||
${CMAKE_C_FLAGS}" UNIQ_CMAKE_C_FLAGS)
|
remove_duplicated_flags("${_CMAKE_TOOLCHAIN_COMMON_FLAGS} ${CMAKE_C_FLAGS}" UNIQ_CMAKE_C_FLAGS)
|
||||||
set(CMAKE_C_FLAGS "${UNIQ_CMAKE_C_FLAGS}" CACHE STRING "C Compiler Base Flags" FORCE)
|
set(CMAKE_C_FLAGS "${UNIQ_CMAKE_C_FLAGS}" CACHE STRING "C Compiler Base Flags" FORCE)
|
||||||
remove_duplicated_flags("-mlongcalls -Wno-frame-address \
|
|
||||||
-fno-builtin-memcpy -fno-builtin-memset -fno-builtin-bzero \
|
remove_duplicated_flags("${_CMAKE_TOOLCHAIN_COMMON_FLAGS} ${CMAKE_CXX_FLAGS}" UNIQ_CMAKE_CXX_FLAGS)
|
||||||
-fno-builtin-stpcpy -fno-builtin-strncpy \
|
|
||||||
${CMAKE_CXX_FLAGS}" UNIQ_CMAKE_CXX_FLAGS)
|
|
||||||
set(CMAKE_CXX_FLAGS "${UNIQ_CMAKE_CXX_FLAGS}" CACHE STRING "C++ Compiler Base Flags" FORCE)
|
set(CMAKE_CXX_FLAGS "${UNIQ_CMAKE_CXX_FLAGS}" CACHE STRING "C++ Compiler Base Flags" FORCE)
|
||||||
remove_duplicated_flags("-mlongcalls ${CMAKE_ASM_FLAGS}" UNIQ_CMAKE_ASM_FLAGS)
|
|
||||||
|
remove_duplicated_flags("${_CMAKE_TOOLCHAIN_COMMON_FLAGS} ${CMAKE_ASM_FLAGS}" UNIQ_CMAKE_ASM_FLAGS)
|
||||||
set(CMAKE_ASM_FLAGS "${UNIQ_CMAKE_ASM_FLAGS}" CACHE STRING "ASM Compiler Base Flags" FORCE)
|
set(CMAKE_ASM_FLAGS "${UNIQ_CMAKE_ASM_FLAGS}" CACHE STRING "ASM Compiler Base Flags" FORCE)
|
||||||
|
|
||||||
remove_duplicated_flags("-nostartfiles ${CMAKE_EXE_LINKER_FLAGS}" UNIQ_CMAKE_SAFE_EXE_LINKER_FLAGS)
|
remove_duplicated_flags("-nostartfiles ${CMAKE_EXE_LINKER_FLAGS}" UNIQ_CMAKE_SAFE_EXE_LINKER_FLAGS)
|
||||||
set(CMAKE_EXE_LINKER_FLAGS "${UNIQ_CMAKE_SAFE_EXE_LINKER_FLAGS}" CACHE STRING "Linker Base Flags" FORCE)
|
set(CMAKE_EXE_LINKER_FLAGS "${UNIQ_CMAKE_SAFE_EXE_LINKER_FLAGS}" CACHE STRING "Linker Base Flags" FORCE)
|
||||||
|
@@ -7,11 +7,17 @@ set(CMAKE_CXX_COMPILER riscv32-esp-elf-g++)
|
|||||||
set(CMAKE_ASM_COMPILER riscv32-esp-elf-gcc)
|
set(CMAKE_ASM_COMPILER riscv32-esp-elf-gcc)
|
||||||
set(_CMAKE_TOOLCHAIN_PREFIX riscv32-esp-elf-)
|
set(_CMAKE_TOOLCHAIN_PREFIX riscv32-esp-elf-)
|
||||||
|
|
||||||
remove_duplicated_flags("-march=rv32imc_zicsr_zifencei ${CMAKE_C_FLAGS}" UNIQ_CMAKE_C_FLAGS)
|
set(_CMAKE_TOOLCHAIN_COMMON_FLAGS "-march=rv32imc_zicsr_zifencei")
|
||||||
|
|
||||||
|
remove_duplicated_flags("${_CMAKE_TOOLCHAIN_COMMON_FLAGS} ${CMAKE_C_FLAGS}" UNIQ_CMAKE_C_FLAGS)
|
||||||
set(CMAKE_C_FLAGS "${UNIQ_CMAKE_C_FLAGS}" CACHE STRING "C Compiler Base Flags" FORCE)
|
set(CMAKE_C_FLAGS "${UNIQ_CMAKE_C_FLAGS}" CACHE STRING "C Compiler Base Flags" FORCE)
|
||||||
remove_duplicated_flags("-march=rv32imc_zicsr_zifencei ${CMAKE_CXX_FLAGS}" UNIQ_CMAKE_CXX_FLAGS)
|
|
||||||
|
remove_duplicated_flags("${_CMAKE_TOOLCHAIN_COMMON_FLAGS} ${CMAKE_CXX_FLAGS}" UNIQ_CMAKE_CXX_FLAGS)
|
||||||
set(CMAKE_CXX_FLAGS "${UNIQ_CMAKE_CXX_FLAGS}" CACHE STRING "C++ Compiler Base Flags" FORCE)
|
set(CMAKE_CXX_FLAGS "${UNIQ_CMAKE_CXX_FLAGS}" CACHE STRING "C++ Compiler Base Flags" FORCE)
|
||||||
|
|
||||||
remove_duplicated_flags("-nostartfiles -march=rv32imc_zicsr_zifencei ${CMAKE_EXE_LINKER_FLAGS}"
|
remove_duplicated_flags("${_CMAKE_TOOLCHAIN_COMMON_FLAGS} ${CMAKE_ASM_FLAGS}" UNIQ_CMAKE_ASM_FLAGS)
|
||||||
|
set(CMAKE_ASM_FLAGS "${UNIQ_CMAKE_ASM_FLAGS}" CACHE STRING "Asm Compiler Base Flags" FORCE)
|
||||||
|
|
||||||
|
remove_duplicated_flags("-nostartfiles ${_CMAKE_TOOLCHAIN_COMMON_FLAGS} ${CMAKE_EXE_LINKER_FLAGS}"
|
||||||
UNIQ_CMAKE_SAFE_EXE_LINKER_FLAGS)
|
UNIQ_CMAKE_SAFE_EXE_LINKER_FLAGS)
|
||||||
set(CMAKE_EXE_LINKER_FLAGS "${UNIQ_CMAKE_SAFE_EXE_LINKER_FLAGS}" CACHE STRING "Linker Base Flags" FORCE)
|
set(CMAKE_EXE_LINKER_FLAGS "${UNIQ_CMAKE_SAFE_EXE_LINKER_FLAGS}" CACHE STRING "Linker Base Flags" FORCE)
|
||||||
|
@@ -7,13 +7,17 @@ set(CMAKE_CXX_COMPILER riscv32-esp-elf-g++)
|
|||||||
set(CMAKE_ASM_COMPILER riscv32-esp-elf-gcc)
|
set(CMAKE_ASM_COMPILER riscv32-esp-elf-gcc)
|
||||||
set(_CMAKE_TOOLCHAIN_PREFIX riscv32-esp-elf-)
|
set(_CMAKE_TOOLCHAIN_PREFIX riscv32-esp-elf-)
|
||||||
|
|
||||||
remove_duplicated_flags("-march=rv32imc_zicsr_zifencei ${CMAKE_C_FLAGS}"
|
set(_CMAKE_TOOLCHAIN_COMMON_FLAGS "-march=rv32imc_zicsr_zifencei")
|
||||||
UNIQ_CMAKE_C_FLAGS)
|
|
||||||
|
remove_duplicated_flags("${_CMAKE_TOOLCHAIN_COMMON_FLAGS} ${CMAKE_C_FLAGS}" UNIQ_CMAKE_C_FLAGS)
|
||||||
set(CMAKE_C_FLAGS "${UNIQ_CMAKE_C_FLAGS}" CACHE STRING "C Compiler Base Flags" FORCE)
|
set(CMAKE_C_FLAGS "${UNIQ_CMAKE_C_FLAGS}" CACHE STRING "C Compiler Base Flags" FORCE)
|
||||||
remove_duplicated_flags("-march=rv32imc_zicsr_zifencei ${CMAKE_CXX_FLAGS}"
|
|
||||||
UNIQ_CMAKE_CXX_FLAGS)
|
remove_duplicated_flags("${_CMAKE_TOOLCHAIN_COMMON_FLAGS} ${CMAKE_CXX_FLAGS}" UNIQ_CMAKE_CXX_FLAGS)
|
||||||
set(CMAKE_CXX_FLAGS "${UNIQ_CMAKE_CXX_FLAGS}" CACHE STRING "C++ Compiler Base Flags" FORCE)
|
set(CMAKE_CXX_FLAGS "${UNIQ_CMAKE_CXX_FLAGS}" CACHE STRING "C++ Compiler Base Flags" FORCE)
|
||||||
|
|
||||||
remove_duplicated_flags("-nostartfiles -march=rv32imc_zicsr_zifencei ${CMAKE_EXE_LINKER_FLAGS}"
|
remove_duplicated_flags("${_CMAKE_TOOLCHAIN_COMMON_FLAGS} ${CMAKE_ASM_FLAGS}" UNIQ_CMAKE_ASM_FLAGS)
|
||||||
|
set(CMAKE_ASM_FLAGS "${UNIQ_CMAKE_ASM_FLAGS}" CACHE STRING "Asm Compiler Base Flags" FORCE)
|
||||||
|
|
||||||
|
remove_duplicated_flags("-nostartfiles ${_CMAKE_TOOLCHAIN_COMMON_FLAGS} ${CMAKE_EXE_LINKER_FLAGS}"
|
||||||
UNIQ_CMAKE_SAFE_EXE_LINKER_FLAGS)
|
UNIQ_CMAKE_SAFE_EXE_LINKER_FLAGS)
|
||||||
set(CMAKE_EXE_LINKER_FLAGS "${UNIQ_CMAKE_SAFE_EXE_LINKER_FLAGS}" CACHE STRING "Linker Base Flags" FORCE)
|
set(CMAKE_EXE_LINKER_FLAGS "${UNIQ_CMAKE_SAFE_EXE_LINKER_FLAGS}" CACHE STRING "Linker Base Flags" FORCE)
|
||||||
|
@@ -7,11 +7,17 @@ set(CMAKE_CXX_COMPILER riscv32-esp-elf-g++)
|
|||||||
set(CMAKE_ASM_COMPILER riscv32-esp-elf-gcc)
|
set(CMAKE_ASM_COMPILER riscv32-esp-elf-gcc)
|
||||||
set(_CMAKE_TOOLCHAIN_PREFIX riscv32-esp-elf-)
|
set(_CMAKE_TOOLCHAIN_PREFIX riscv32-esp-elf-)
|
||||||
|
|
||||||
remove_duplicated_flags("-march=rv32imac_zicsr_zifencei ${CMAKE_C_FLAGS}" UNIQ_CMAKE_C_FLAGS)
|
set(_CMAKE_TOOLCHAIN_COMMON_FLAGS "-march=rv32imac_zicsr_zifencei_zaamo_zalrsc")
|
||||||
|
|
||||||
|
remove_duplicated_flags("${_CMAKE_TOOLCHAIN_COMMON_FLAGS} ${CMAKE_C_FLAGS}" UNIQ_CMAKE_C_FLAGS)
|
||||||
set(CMAKE_C_FLAGS "${UNIQ_CMAKE_C_FLAGS}" CACHE STRING "C Compiler Base Flags" FORCE)
|
set(CMAKE_C_FLAGS "${UNIQ_CMAKE_C_FLAGS}" CACHE STRING "C Compiler Base Flags" FORCE)
|
||||||
remove_duplicated_flags("-march=rv32imac_zicsr_zifencei ${CMAKE_CXX_FLAGS}" UNIQ_CMAKE_CXX_FLAGS)
|
|
||||||
|
remove_duplicated_flags("${_CMAKE_TOOLCHAIN_COMMON_FLAGS} ${CMAKE_CXX_FLAGS}" UNIQ_CMAKE_CXX_FLAGS)
|
||||||
set(CMAKE_CXX_FLAGS "${UNIQ_CMAKE_CXX_FLAGS}" CACHE STRING "C++ Compiler Base Flags" FORCE)
|
set(CMAKE_CXX_FLAGS "${UNIQ_CMAKE_CXX_FLAGS}" CACHE STRING "C++ Compiler Base Flags" FORCE)
|
||||||
|
|
||||||
remove_duplicated_flags("-nostartfiles -march=rv32imac_zicsr_zifencei ${CMAKE_EXE_LINKER_FLAGS}"
|
remove_duplicated_flags("${_CMAKE_TOOLCHAIN_COMMON_FLAGS} ${CMAKE_ASM_FLAGS}" UNIQ_CMAKE_ASM_FLAGS)
|
||||||
|
set(CMAKE_ASM_FLAGS "${UNIQ_CMAKE_ASM_FLAGS}" CACHE STRING "Asm Compiler Base Flags" FORCE)
|
||||||
|
|
||||||
|
remove_duplicated_flags("-nostartfiles ${_CMAKE_TOOLCHAIN_COMMON_FLAGS} ${CMAKE_EXE_LINKER_FLAGS}"
|
||||||
UNIQ_CMAKE_SAFE_EXE_LINKER_FLAGS)
|
UNIQ_CMAKE_SAFE_EXE_LINKER_FLAGS)
|
||||||
set(CMAKE_EXE_LINKER_FLAGS "${UNIQ_CMAKE_SAFE_EXE_LINKER_FLAGS}" CACHE STRING "Linker Base Flags" FORCE)
|
set(CMAKE_EXE_LINKER_FLAGS "${UNIQ_CMAKE_SAFE_EXE_LINKER_FLAGS}" CACHE STRING "Linker Base Flags" FORCE)
|
||||||
|
@@ -7,11 +7,17 @@ set(CMAKE_CXX_COMPILER riscv32-esp-elf-g++)
|
|||||||
set(CMAKE_ASM_COMPILER riscv32-esp-elf-gcc)
|
set(CMAKE_ASM_COMPILER riscv32-esp-elf-gcc)
|
||||||
set(_CMAKE_TOOLCHAIN_PREFIX riscv32-esp-elf-)
|
set(_CMAKE_TOOLCHAIN_PREFIX riscv32-esp-elf-)
|
||||||
|
|
||||||
remove_duplicated_flags("-march=rv32imac_zicsr_zifencei ${CMAKE_C_FLAGS}" UNIQ_CMAKE_C_FLAGS)
|
set(_CMAKE_TOOLCHAIN_COMMON_FLAGS "-march=rv32imac_zicsr_zifencei_zaamo_zalrsc")
|
||||||
|
|
||||||
|
remove_duplicated_flags("${_CMAKE_TOOLCHAIN_COMMON_FLAGS} ${CMAKE_C_FLAGS}" UNIQ_CMAKE_C_FLAGS)
|
||||||
set(CMAKE_C_FLAGS "${UNIQ_CMAKE_C_FLAGS}" CACHE STRING "C Compiler Base Flags" FORCE)
|
set(CMAKE_C_FLAGS "${UNIQ_CMAKE_C_FLAGS}" CACHE STRING "C Compiler Base Flags" FORCE)
|
||||||
remove_duplicated_flags("-march=rv32imac_zicsr_zifencei ${CMAKE_CXX_FLAGS}" UNIQ_CMAKE_CXX_FLAGS)
|
|
||||||
|
remove_duplicated_flags("${_CMAKE_TOOLCHAIN_COMMON_FLAGS} ${CMAKE_CXX_FLAGS}" UNIQ_CMAKE_CXX_FLAGS)
|
||||||
set(CMAKE_CXX_FLAGS "${UNIQ_CMAKE_CXX_FLAGS}" CACHE STRING "C++ Compiler Base Flags" FORCE)
|
set(CMAKE_CXX_FLAGS "${UNIQ_CMAKE_CXX_FLAGS}" CACHE STRING "C++ Compiler Base Flags" FORCE)
|
||||||
|
|
||||||
remove_duplicated_flags("-nostartfiles -march=rv32imac_zicsr_zifencei ${CMAKE_EXE_LINKER_FLAGS}"
|
remove_duplicated_flags("${_CMAKE_TOOLCHAIN_COMMON_FLAGS} ${CMAKE_ASM_FLAGS}" UNIQ_CMAKE_ASM_FLAGS)
|
||||||
|
set(CMAKE_ASM_FLAGS "${UNIQ_CMAKE_ASM_FLAGS}" CACHE STRING "Asm Compiler Base Flags" FORCE)
|
||||||
|
|
||||||
|
remove_duplicated_flags("-nostartfiles ${_CMAKE_TOOLCHAIN_COMMON_FLAGS} ${CMAKE_EXE_LINKER_FLAGS}"
|
||||||
UNIQ_CMAKE_SAFE_EXE_LINKER_FLAGS)
|
UNIQ_CMAKE_SAFE_EXE_LINKER_FLAGS)
|
||||||
set(CMAKE_EXE_LINKER_FLAGS "${UNIQ_CMAKE_SAFE_EXE_LINKER_FLAGS}" CACHE STRING "Linker Base Flags" FORCE)
|
set(CMAKE_EXE_LINKER_FLAGS "${UNIQ_CMAKE_SAFE_EXE_LINKER_FLAGS}" CACHE STRING "Linker Base Flags" FORCE)
|
||||||
|
@@ -7,11 +7,17 @@ set(CMAKE_CXX_COMPILER riscv32-esp-elf-g++)
|
|||||||
set(CMAKE_ASM_COMPILER riscv32-esp-elf-gcc)
|
set(CMAKE_ASM_COMPILER riscv32-esp-elf-gcc)
|
||||||
set(_CMAKE_TOOLCHAIN_PREFIX riscv32-esp-elf-)
|
set(_CMAKE_TOOLCHAIN_PREFIX riscv32-esp-elf-)
|
||||||
|
|
||||||
remove_duplicated_flags("-march=rv32imac_zicsr_zifencei ${CMAKE_C_FLAGS}" UNIQ_CMAKE_C_FLAGS)
|
set(_CMAKE_TOOLCHAIN_COMMON_FLAGS "-march=rv32imac_zicsr_zifencei_zaamo_zalrsc")
|
||||||
|
|
||||||
|
remove_duplicated_flags("${_CMAKE_TOOLCHAIN_COMMON_FLAGS} ${CMAKE_C_FLAGS}" UNIQ_CMAKE_C_FLAGS)
|
||||||
set(CMAKE_C_FLAGS "${UNIQ_CMAKE_C_FLAGS}" CACHE STRING "C Compiler Base Flags" FORCE)
|
set(CMAKE_C_FLAGS "${UNIQ_CMAKE_C_FLAGS}" CACHE STRING "C Compiler Base Flags" FORCE)
|
||||||
remove_duplicated_flags("-march=rv32imac_zicsr_zifencei ${CMAKE_CXX_FLAGS}" UNIQ_CMAKE_CXX_FLAGS)
|
|
||||||
|
remove_duplicated_flags("${_CMAKE_TOOLCHAIN_COMMON_FLAGS} ${CMAKE_CXX_FLAGS}" UNIQ_CMAKE_CXX_FLAGS)
|
||||||
set(CMAKE_CXX_FLAGS "${UNIQ_CMAKE_CXX_FLAGS}" CACHE STRING "C++ Compiler Base Flags" FORCE)
|
set(CMAKE_CXX_FLAGS "${UNIQ_CMAKE_CXX_FLAGS}" CACHE STRING "C++ Compiler Base Flags" FORCE)
|
||||||
|
|
||||||
remove_duplicated_flags("-nostartfiles -march=rv32imac_zicsr_zifencei ${CMAKE_EXE_LINKER_FLAGS}"
|
remove_duplicated_flags("${_CMAKE_TOOLCHAIN_COMMON_FLAGS} ${CMAKE_ASM_FLAGS}" UNIQ_CMAKE_ASM_FLAGS)
|
||||||
|
set(CMAKE_ASM_FLAGS "${UNIQ_CMAKE_ASM_FLAGS}" CACHE STRING "Asm Compiler Base Flags" FORCE)
|
||||||
|
|
||||||
|
remove_duplicated_flags("-nostartfiles ${_CMAKE_TOOLCHAIN_COMMON_FLAGS} ${CMAKE_EXE_LINKER_FLAGS}"
|
||||||
UNIQ_CMAKE_SAFE_EXE_LINKER_FLAGS)
|
UNIQ_CMAKE_SAFE_EXE_LINKER_FLAGS)
|
||||||
set(CMAKE_EXE_LINKER_FLAGS "${UNIQ_CMAKE_SAFE_EXE_LINKER_FLAGS}" CACHE STRING "Linker Base Flags" FORCE)
|
set(CMAKE_EXE_LINKER_FLAGS "${UNIQ_CMAKE_SAFE_EXE_LINKER_FLAGS}" CACHE STRING "Linker Base Flags" FORCE)
|
||||||
|
@@ -7,11 +7,17 @@ set(CMAKE_CXX_COMPILER riscv32-esp-elf-g++)
|
|||||||
set(CMAKE_ASM_COMPILER riscv32-esp-elf-gcc)
|
set(CMAKE_ASM_COMPILER riscv32-esp-elf-gcc)
|
||||||
set(_CMAKE_TOOLCHAIN_PREFIX riscv32-esp-elf-)
|
set(_CMAKE_TOOLCHAIN_PREFIX riscv32-esp-elf-)
|
||||||
|
|
||||||
remove_duplicated_flags("-march=rv32imac_zicsr_zifencei ${CMAKE_C_FLAGS}" UNIQ_CMAKE_C_FLAGS)
|
set(_CMAKE_TOOLCHAIN_COMMON_FLAGS "-march=rv32imac_zicsr_zifencei_zaamo_zalrsc")
|
||||||
|
|
||||||
|
remove_duplicated_flags("${_CMAKE_TOOLCHAIN_COMMON_FLAGS} ${CMAKE_C_FLAGS}" UNIQ_CMAKE_C_FLAGS)
|
||||||
set(CMAKE_C_FLAGS "${UNIQ_CMAKE_C_FLAGS}" CACHE STRING "C Compiler Base Flags" FORCE)
|
set(CMAKE_C_FLAGS "${UNIQ_CMAKE_C_FLAGS}" CACHE STRING "C Compiler Base Flags" FORCE)
|
||||||
remove_duplicated_flags("-march=rv32imac_zicsr_zifencei ${CMAKE_CXX_FLAGS}" UNIQ_CMAKE_CXX_FLAGS)
|
|
||||||
|
remove_duplicated_flags("${_CMAKE_TOOLCHAIN_COMMON_FLAGS} ${CMAKE_CXX_FLAGS}" UNIQ_CMAKE_CXX_FLAGS)
|
||||||
set(CMAKE_CXX_FLAGS "${UNIQ_CMAKE_CXX_FLAGS}" CACHE STRING "C++ Compiler Base Flags" FORCE)
|
set(CMAKE_CXX_FLAGS "${UNIQ_CMAKE_CXX_FLAGS}" CACHE STRING "C++ Compiler Base Flags" FORCE)
|
||||||
|
|
||||||
remove_duplicated_flags("-nostartfiles -march=rv32imac_zicsr_zifencei ${CMAKE_EXE_LINKER_FLAGS}"
|
remove_duplicated_flags("${_CMAKE_TOOLCHAIN_COMMON_FLAGS} ${CMAKE_ASM_FLAGS}" UNIQ_CMAKE_ASM_FLAGS)
|
||||||
|
set(CMAKE_ASM_FLAGS "${UNIQ_CMAKE_ASM_FLAGS}" CACHE STRING "Asm Compiler Base Flags" FORCE)
|
||||||
|
|
||||||
|
remove_duplicated_flags("-nostartfiles ${_CMAKE_TOOLCHAIN_COMMON_FLAGS} ${CMAKE_EXE_LINKER_FLAGS}"
|
||||||
UNIQ_CMAKE_SAFE_EXE_LINKER_FLAGS)
|
UNIQ_CMAKE_SAFE_EXE_LINKER_FLAGS)
|
||||||
set(CMAKE_EXE_LINKER_FLAGS "${UNIQ_CMAKE_SAFE_EXE_LINKER_FLAGS}" CACHE STRING "Linker Base Flags" FORCE)
|
set(CMAKE_EXE_LINKER_FLAGS "${UNIQ_CMAKE_SAFE_EXE_LINKER_FLAGS}" CACHE STRING "Linker Base Flags" FORCE)
|
||||||
|
@@ -7,12 +7,17 @@ set(CMAKE_CXX_COMPILER riscv32-esp-elf-g++)
|
|||||||
set(CMAKE_ASM_COMPILER riscv32-esp-elf-gcc)
|
set(CMAKE_ASM_COMPILER riscv32-esp-elf-gcc)
|
||||||
set(_CMAKE_TOOLCHAIN_PREFIX riscv32-esp-elf-)
|
set(_CMAKE_TOOLCHAIN_PREFIX riscv32-esp-elf-)
|
||||||
|
|
||||||
remove_duplicated_flags("-march=rv32imac_zicsr_zifencei ${CMAKE_C_FLAGS}" UNIQ_CMAKE_C_FLAGS)
|
set(_CMAKE_TOOLCHAIN_COMMON_FLAGS "-march=rv32imac_zicsr_zifencei_zaamo_zalrsc")
|
||||||
|
|
||||||
|
remove_duplicated_flags("${_CMAKE_TOOLCHAIN_COMMON_FLAGS} ${CMAKE_C_FLAGS}" UNIQ_CMAKE_C_FLAGS)
|
||||||
set(CMAKE_C_FLAGS "${UNIQ_CMAKE_C_FLAGS}" CACHE STRING "C Compiler Base Flags" FORCE)
|
set(CMAKE_C_FLAGS "${UNIQ_CMAKE_C_FLAGS}" CACHE STRING "C Compiler Base Flags" FORCE)
|
||||||
remove_duplicated_flags("-march=rv32imac_zicsr_zifencei ${CMAKE_CXX_FLAGS}" UNIQ_CMAKE_CXX_FLAGS)
|
|
||||||
|
remove_duplicated_flags("${_CMAKE_TOOLCHAIN_COMMON_FLAGS} ${CMAKE_CXX_FLAGS}" UNIQ_CMAKE_CXX_FLAGS)
|
||||||
set(CMAKE_CXX_FLAGS "${UNIQ_CMAKE_CXX_FLAGS}" CACHE STRING "C++ Compiler Base Flags" FORCE)
|
set(CMAKE_CXX_FLAGS "${UNIQ_CMAKE_CXX_FLAGS}" CACHE STRING "C++ Compiler Base Flags" FORCE)
|
||||||
|
|
||||||
remove_duplicated_flags("-nostartfiles -march=rv32imac_zicsr_zifencei --specs=nosys.specs \
|
remove_duplicated_flags("${_CMAKE_TOOLCHAIN_COMMON_FLAGS} ${CMAKE_ASM_FLAGS}" UNIQ_CMAKE_ASM_FLAGS)
|
||||||
${CMAKE_EXE_LINKER_FLAGS}"
|
set(CMAKE_ASM_FLAGS "${UNIQ_CMAKE_ASM_FLAGS}" CACHE STRING "Asm Compiler Base Flags" FORCE)
|
||||||
|
|
||||||
|
remove_duplicated_flags("-nostartfiles ${_CMAKE_TOOLCHAIN_COMMON_FLAGS} ${CMAKE_EXE_LINKER_FLAGS}"
|
||||||
UNIQ_CMAKE_SAFE_EXE_LINKER_FLAGS)
|
UNIQ_CMAKE_SAFE_EXE_LINKER_FLAGS)
|
||||||
set(CMAKE_EXE_LINKER_FLAGS "${UNIQ_CMAKE_SAFE_EXE_LINKER_FLAGS}" CACHE STRING "Linker Base Flags" FORCE)
|
set(CMAKE_EXE_LINKER_FLAGS "${UNIQ_CMAKE_SAFE_EXE_LINKER_FLAGS}" CACHE STRING "Linker Base Flags" FORCE)
|
||||||
|
@@ -7,14 +7,17 @@ set(CMAKE_CXX_COMPILER riscv32-esp-elf-g++)
|
|||||||
set(CMAKE_ASM_COMPILER riscv32-esp-elf-gcc)
|
set(CMAKE_ASM_COMPILER riscv32-esp-elf-gcc)
|
||||||
set(_CMAKE_TOOLCHAIN_PREFIX riscv32-esp-elf-)
|
set(_CMAKE_TOOLCHAIN_PREFIX riscv32-esp-elf-)
|
||||||
|
|
||||||
remove_duplicated_flags("-march=rv32imafc_zicsr_zifencei -mabi=ilp32f ${CMAKE_C_FLAGS}" UNIQ_CMAKE_C_FLAGS)
|
set(_CMAKE_TOOLCHAIN_COMMON_FLAGS "-march=rv32imafc_zicsr_zifencei_zaamo_zalrsc_xespdsp -mabi=ilp32f")
|
||||||
set(CMAKE_C_FLAGS "${UNIQ_CMAKE_C_FLAGS}" CACHE STRING "C Compiler Base Flags" FORCE)
|
|
||||||
remove_duplicated_flags("-march=rv32imafc_zicsr_zifencei -mabi=ilp32f ${CMAKE_CXX_FLAGS}" UNIQ_CMAKE_CXX_FLAGS)
|
|
||||||
set(CMAKE_CXX_FLAGS "${UNIQ_CMAKE_CXX_FLAGS}" CACHE STRING "C++ Compiler Base Flags" FORCE)
|
|
||||||
remove_duplicated_flags("-march=rv32imafc_zicsr_zifencei -mabi=ilp32f ${CMAKE_ASM_FLAGS}" UNIQ_CMAKE_ASM_FLAGS)
|
|
||||||
set(CMAKE_ASM_FLAGS "${UNIQ_CMAKE_CXX_FLAGS}" CACHE STRING "Asm Compiler Base Flags" FORCE)
|
|
||||||
|
|
||||||
remove_duplicated_flags("-nostartfiles -march=rv32imafc_zicsr_zifencei -mabi=ilp32f --specs=nosys.specs \
|
remove_duplicated_flags("${_CMAKE_TOOLCHAIN_COMMON_FLAGS} ${CMAKE_C_FLAGS}" UNIQ_CMAKE_C_FLAGS)
|
||||||
${CMAKE_EXE_LINKER_FLAGS}"
|
set(CMAKE_C_FLAGS "${UNIQ_CMAKE_C_FLAGS}" CACHE STRING "C Compiler Base Flags" FORCE)
|
||||||
|
|
||||||
|
remove_duplicated_flags("${_CMAKE_TOOLCHAIN_COMMON_FLAGS} ${CMAKE_CXX_FLAGS}" UNIQ_CMAKE_CXX_FLAGS)
|
||||||
|
set(CMAKE_CXX_FLAGS "${UNIQ_CMAKE_CXX_FLAGS}" CACHE STRING "C++ Compiler Base Flags" FORCE)
|
||||||
|
|
||||||
|
remove_duplicated_flags("${_CMAKE_TOOLCHAIN_COMMON_FLAGS} ${CMAKE_ASM_FLAGS}" UNIQ_CMAKE_ASM_FLAGS)
|
||||||
|
set(CMAKE_ASM_FLAGS "${UNIQ_CMAKE_ASM_FLAGS}" CACHE STRING "Asm Compiler Base Flags" FORCE)
|
||||||
|
|
||||||
|
remove_duplicated_flags("-nostartfiles ${_CMAKE_TOOLCHAIN_COMMON_FLAGS} ${CMAKE_EXE_LINKER_FLAGS}"
|
||||||
UNIQ_CMAKE_SAFE_EXE_LINKER_FLAGS)
|
UNIQ_CMAKE_SAFE_EXE_LINKER_FLAGS)
|
||||||
set(CMAKE_EXE_LINKER_FLAGS "${UNIQ_CMAKE_SAFE_EXE_LINKER_FLAGS}" CACHE STRING "Linker Base Flags" FORCE)
|
set(CMAKE_EXE_LINKER_FLAGS "${UNIQ_CMAKE_SAFE_EXE_LINKER_FLAGS}" CACHE STRING "Linker Base Flags" FORCE)
|
||||||
|
@@ -7,13 +7,17 @@ set(CMAKE_CXX_COMPILER riscv32-esp-elf-g++)
|
|||||||
set(CMAKE_ASM_COMPILER riscv32-esp-elf-gcc)
|
set(CMAKE_ASM_COMPILER riscv32-esp-elf-gcc)
|
||||||
set(_CMAKE_TOOLCHAIN_PREFIX riscv32-esp-elf-)
|
set(_CMAKE_TOOLCHAIN_PREFIX riscv32-esp-elf-)
|
||||||
|
|
||||||
remove_duplicated_flags("-march=rv32imafc_zicsr_zifencei_xesppie -mabi=ilp32f ${CMAKE_C_FLAGS}" UNIQ_CMAKE_C_FLAGS)
|
set(_CMAKE_TOOLCHAIN_COMMON_FLAGS "-march=rv32imafc_zicsr_zifencei_zaamo_zalrsc_xespv_xesploop -mabi=ilp32f")
|
||||||
set(CMAKE_C_FLAGS "${UNIQ_CMAKE_C_FLAGS}" CACHE STRING "C Compiler Base Flags" FORCE)
|
|
||||||
remove_duplicated_flags("-march=rv32imafc_zicsr_zifencei_xesppie -mabi=ilp32f ${CMAKE_CXX_FLAGS}" UNIQ_CMAKE_CXX_FLAGS)
|
|
||||||
set(CMAKE_CXX_FLAGS "${UNIQ_CMAKE_CXX_FLAGS}" CACHE STRING "C++ Compiler Base Flags" FORCE)
|
|
||||||
remove_duplicated_flags("-march=rv32imafc_zicsr_zifencei_xesppie -mabi=ilp32f ${CMAKE_ASM_FLAGS}" UNIQ_CMAKE_ASM_FLAGS)
|
|
||||||
set(CMAKE_ASM_FLAGS "${UNIQ_CMAKE_CXX_FLAGS}" CACHE STRING "Asm Compiler Base Flags" FORCE)
|
|
||||||
|
|
||||||
remove_duplicated_flags("-nostartfiles -march=rv32imafc_zicsr_zifencei_xesppie -mabi=ilp32f ${CMAKE_EXE_LINKER_FLAGS}"
|
remove_duplicated_flags("${_CMAKE_TOOLCHAIN_COMMON_FLAGS} ${CMAKE_C_FLAGS}" UNIQ_CMAKE_C_FLAGS)
|
||||||
|
set(CMAKE_C_FLAGS "${UNIQ_CMAKE_C_FLAGS}" CACHE STRING "C Compiler Base Flags" FORCE)
|
||||||
|
|
||||||
|
remove_duplicated_flags("${_CMAKE_TOOLCHAIN_COMMON_FLAGS} ${CMAKE_CXX_FLAGS}" UNIQ_CMAKE_CXX_FLAGS)
|
||||||
|
set(CMAKE_CXX_FLAGS "${UNIQ_CMAKE_CXX_FLAGS}" CACHE STRING "C++ Compiler Base Flags" FORCE)
|
||||||
|
|
||||||
|
remove_duplicated_flags("${_CMAKE_TOOLCHAIN_COMMON_FLAGS} ${CMAKE_ASM_FLAGS}" UNIQ_CMAKE_ASM_FLAGS)
|
||||||
|
set(CMAKE_ASM_FLAGS "${UNIQ_CMAKE_ASM_FLAGS}" CACHE STRING "Asm Compiler Base Flags" FORCE)
|
||||||
|
|
||||||
|
remove_duplicated_flags("-nostartfiles ${_CMAKE_TOOLCHAIN_COMMON_FLAGS} ${CMAKE_EXE_LINKER_FLAGS}"
|
||||||
UNIQ_CMAKE_SAFE_EXE_LINKER_FLAGS)
|
UNIQ_CMAKE_SAFE_EXE_LINKER_FLAGS)
|
||||||
set(CMAKE_EXE_LINKER_FLAGS "${UNIQ_CMAKE_SAFE_EXE_LINKER_FLAGS}" CACHE STRING "Linker Base Flags" FORCE)
|
set(CMAKE_EXE_LINKER_FLAGS "${UNIQ_CMAKE_SAFE_EXE_LINKER_FLAGS}" CACHE STRING "Linker Base Flags" FORCE)
|
||||||
|
@@ -7,17 +7,16 @@ set(CMAKE_CXX_COMPILER xtensa-esp32s2-elf-g++)
|
|||||||
set(CMAKE_ASM_COMPILER xtensa-esp32s2-elf-gcc)
|
set(CMAKE_ASM_COMPILER xtensa-esp32s2-elf-gcc)
|
||||||
set(_CMAKE_TOOLCHAIN_PREFIX xtensa-esp32s2-elf-)
|
set(_CMAKE_TOOLCHAIN_PREFIX xtensa-esp32s2-elf-)
|
||||||
|
|
||||||
remove_duplicated_flags("-mlongcalls \
|
set(_CMAKE_TOOLCHAIN_COMMON_FLAGS "-mlongcalls -fno-builtin-memcpy -fno-builtin-memset -fno-builtin-bzero")
|
||||||
-fno-builtin-memcpy -fno-builtin-memset -fno-builtin-bzero \
|
|
||||||
-fno-builtin-stpcpy -fno-builtin-strncpy \
|
remove_duplicated_flags("${_CMAKE_TOOLCHAIN_COMMON_FLAGS} ${CMAKE_C_FLAGS}" UNIQ_CMAKE_C_FLAGS)
|
||||||
${CMAKE_C_FLAGS}" UNIQ_CMAKE_C_FLAGS)
|
|
||||||
set(CMAKE_C_FLAGS "${UNIQ_CMAKE_C_FLAGS}" CACHE STRING "C Compiler Base Flags" FORCE)
|
set(CMAKE_C_FLAGS "${UNIQ_CMAKE_C_FLAGS}" CACHE STRING "C Compiler Base Flags" FORCE)
|
||||||
remove_duplicated_flags("-mlongcalls \
|
|
||||||
-fno-builtin-memcpy -fno-builtin-memset -fno-builtin-bzero \
|
remove_duplicated_flags("${_CMAKE_TOOLCHAIN_COMMON_FLAGS} ${CMAKE_CXX_FLAGS}" UNIQ_CMAKE_CXX_FLAGS)
|
||||||
-fno-builtin-stpcpy -fno-builtin-strncpy \
|
|
||||||
${CMAKE_CXX_FLAGS}" UNIQ_CMAKE_CXX_FLAGS)
|
|
||||||
set(CMAKE_CXX_FLAGS "${UNIQ_CMAKE_CXX_FLAGS}" CACHE STRING "C++ Compiler Base Flags" FORCE)
|
set(CMAKE_CXX_FLAGS "${UNIQ_CMAKE_CXX_FLAGS}" CACHE STRING "C++ Compiler Base Flags" FORCE)
|
||||||
remove_duplicated_flags("-mlongcalls ${CMAKE_ASM_FLAGS}" UNIQ_CMAKE_ASM_FLAGS)
|
|
||||||
|
remove_duplicated_flags("${_CMAKE_TOOLCHAIN_COMMON_FLAGS} ${CMAKE_ASM_FLAGS}" UNIQ_CMAKE_ASM_FLAGS)
|
||||||
set(CMAKE_ASM_FLAGS "${UNIQ_CMAKE_ASM_FLAGS}" CACHE STRING "ASM Compiler Base Flags" FORCE)
|
set(CMAKE_ASM_FLAGS "${UNIQ_CMAKE_ASM_FLAGS}" CACHE STRING "ASM Compiler Base Flags" FORCE)
|
||||||
|
|
||||||
remove_duplicated_flags("-nostartfiles ${CMAKE_EXE_LINKER_FLAGS}" UNIQ_CMAKE_SAFE_EXE_LINKER_FLAGS)
|
remove_duplicated_flags("-nostartfiles ${CMAKE_EXE_LINKER_FLAGS}" UNIQ_CMAKE_SAFE_EXE_LINKER_FLAGS)
|
||||||
set(CMAKE_EXE_LINKER_FLAGS "${UNIQ_CMAKE_SAFE_EXE_LINKER_FLAGS}" CACHE STRING "Linker Base Flags" FORCE)
|
set(CMAKE_EXE_LINKER_FLAGS "${UNIQ_CMAKE_SAFE_EXE_LINKER_FLAGS}" CACHE STRING "Linker Base Flags" FORCE)
|
||||||
|
@@ -7,17 +7,16 @@ set(CMAKE_CXX_COMPILER xtensa-esp32s3-elf-g++)
|
|||||||
set(CMAKE_ASM_COMPILER xtensa-esp32s3-elf-gcc)
|
set(CMAKE_ASM_COMPILER xtensa-esp32s3-elf-gcc)
|
||||||
set(_CMAKE_TOOLCHAIN_PREFIX xtensa-esp32s3-elf-)
|
set(_CMAKE_TOOLCHAIN_PREFIX xtensa-esp32s3-elf-)
|
||||||
|
|
||||||
remove_duplicated_flags("-mlongcalls \
|
set(_CMAKE_TOOLCHAIN_COMMON_FLAGS "-mlongcalls -fno-builtin-memcpy -fno-builtin-memset -fno-builtin-bzero")
|
||||||
-fno-builtin-memcpy -fno-builtin-memset -fno-builtin-bzero \
|
|
||||||
-fno-builtin-stpcpy -fno-builtin-strncpy \
|
remove_duplicated_flags("${_CMAKE_TOOLCHAIN_COMMON_FLAGS} ${CMAKE_C_FLAGS}" UNIQ_CMAKE_C_FLAGS)
|
||||||
${CMAKE_C_FLAGS}" UNIQ_CMAKE_C_FLAGS)
|
|
||||||
set(CMAKE_C_FLAGS "${UNIQ_CMAKE_C_FLAGS}" CACHE STRING "C Compiler Base Flags" FORCE)
|
set(CMAKE_C_FLAGS "${UNIQ_CMAKE_C_FLAGS}" CACHE STRING "C Compiler Base Flags" FORCE)
|
||||||
remove_duplicated_flags("-mlongcalls \
|
|
||||||
-fno-builtin-memcpy -fno-builtin-memset -fno-builtin-bzero \
|
remove_duplicated_flags("${_CMAKE_TOOLCHAIN_COMMON_FLAGS} ${CMAKE_CXX_FLAGS}" UNIQ_CMAKE_CXX_FLAGS)
|
||||||
-fno-builtin-stpcpy -fno-builtin-strncpy \
|
|
||||||
${CMAKE_CXX_FLAGS}" UNIQ_CMAKE_CXX_FLAGS)
|
|
||||||
set(CMAKE_CXX_FLAGS "${UNIQ_CMAKE_CXX_FLAGS}" CACHE STRING "C++ Compiler Base Flags" FORCE)
|
set(CMAKE_CXX_FLAGS "${UNIQ_CMAKE_CXX_FLAGS}" CACHE STRING "C++ Compiler Base Flags" FORCE)
|
||||||
remove_duplicated_flags("-mlongcalls ${CMAKE_ASM_FLAGS}" UNIQ_CMAKE_ASM_FLAGS)
|
|
||||||
|
remove_duplicated_flags("${_CMAKE_TOOLCHAIN_COMMON_FLAGS} ${CMAKE_ASM_FLAGS}" UNIQ_CMAKE_ASM_FLAGS)
|
||||||
set(CMAKE_ASM_FLAGS "${UNIQ_CMAKE_ASM_FLAGS}" CACHE STRING "ASM Compiler Base Flags" FORCE)
|
set(CMAKE_ASM_FLAGS "${UNIQ_CMAKE_ASM_FLAGS}" CACHE STRING "ASM Compiler Base Flags" FORCE)
|
||||||
|
|
||||||
remove_duplicated_flags("-nostartfiles ${CMAKE_EXE_LINKER_FLAGS}" UNIQ_CMAKE_SAFE_EXE_LINKER_FLAGS)
|
remove_duplicated_flags("-nostartfiles ${CMAKE_EXE_LINKER_FLAGS}" UNIQ_CMAKE_SAFE_EXE_LINKER_FLAGS)
|
||||||
set(CMAKE_EXE_LINKER_FLAGS "${UNIQ_CMAKE_SAFE_EXE_LINKER_FLAGS}" CACHE STRING "Linker Base Flags" FORCE)
|
set(CMAKE_EXE_LINKER_FLAGS "${UNIQ_CMAKE_SAFE_EXE_LINKER_FLAGS}" CACHE STRING "Linker Base Flags" FORCE)
|
||||||
|
@@ -140,8 +140,7 @@ public:
|
|||||||
}
|
}
|
||||||
std::filesystem::copy_file("/test/file", "/test/file_size");
|
std::filesystem::copy_file("/test/file", "/test/file_size");
|
||||||
CHECK(std::filesystem::file_size("/test/file_size") == 11);
|
CHECK(std::filesystem::file_size("/test/file_size") == 11);
|
||||||
// Not supported: libstdc++ has to be built with _GLIBCXX_HAVE_TRUNCATE
|
std::filesystem::resize_file("/test/file_size", 20);
|
||||||
CHECK_THROWS(std::filesystem::resize_file("/test/file_size", 20));
|
|
||||||
CHECK(std::filesystem::remove("/test/file_size"));
|
CHECK(std::filesystem::remove("/test/file_size"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -27,6 +27,11 @@ extern int _iram_text_end;
|
|||||||
|
|
||||||
#define ALIGN_UP_TO_MMU_PAGE_SIZE(addr) (((addr) + (SOC_MMU_PAGE_SIZE) - 1) & ~((SOC_MMU_PAGE_SIZE) - 1))
|
#define ALIGN_UP_TO_MMU_PAGE_SIZE(addr) (((addr) + (SOC_MMU_PAGE_SIZE) - 1) & ~((SOC_MMU_PAGE_SIZE) - 1))
|
||||||
|
|
||||||
|
__attribute__((noinline))
|
||||||
|
static void run_function(void (*test_addr)(void)) {
|
||||||
|
test_addr();
|
||||||
|
}
|
||||||
|
|
||||||
/* NOTE: Naming conventions for RTC_FAST_MEM are
|
/* NOTE: Naming conventions for RTC_FAST_MEM are
|
||||||
* different for ESP32-C3 and other RISC-V targets
|
* different for ESP32-C3 and other RISC-V targets
|
||||||
*/
|
*/
|
||||||
@@ -121,10 +126,9 @@ static DRAM_ATTR uint8_t s_dram_buf[1024];
|
|||||||
void test_dram_reg1_execute_violation(void)
|
void test_dram_reg1_execute_violation(void)
|
||||||
{
|
{
|
||||||
memcpy(&s_dram_buf, &foo_d, sizeof(s_dram_buf));
|
memcpy(&s_dram_buf, &foo_d, sizeof(s_dram_buf));
|
||||||
void (*func_ptr)(void);
|
void *test_addr = &s_dram_buf;
|
||||||
func_ptr = (void(*)(void))&s_dram_buf;
|
|
||||||
printf("DRAM: Execute operation | Address: %p\n", &s_dram_buf);
|
printf("DRAM: Execute operation | Address: %p\n", &s_dram_buf);
|
||||||
func_ptr();
|
run_function(test_addr);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* DRAM: Heap region */
|
/* DRAM: Heap region */
|
||||||
@@ -136,9 +140,8 @@ void test_dram_reg2_execute_violation(void)
|
|||||||
printf("DRAM: Execute operation | Address: %p\n", instr);
|
printf("DRAM: Execute operation | Address: %p\n", instr);
|
||||||
|
|
||||||
memcpy(instr, &foo_d, 1024);
|
memcpy(instr, &foo_d, 1024);
|
||||||
void (*func_ptr)(void);
|
void *test_addr = instr;
|
||||||
func_ptr = (void(*)(void))instr;
|
run_function(test_addr);
|
||||||
func_ptr();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ---------------------------------------------------- RTC Violation Checks ---------------------------------------------------- */
|
/* ---------------------------------------------------- RTC Violation Checks ---------------------------------------------------- */
|
||||||
@@ -156,28 +159,28 @@ static RTC_IRAM_ATTR void foo_f(void)
|
|||||||
void test_rtc_fast_reg1_execute_violation(void)
|
void test_rtc_fast_reg1_execute_violation(void)
|
||||||
{
|
{
|
||||||
#if CONFIG_IDF_TARGET_ARCH_RISCV
|
#if CONFIG_IDF_TARGET_ARCH_RISCV
|
||||||
void (*test_addr)(void) = (void(*)(void))((uint32_t)&_rtc_fast_start);
|
void *test_addr = &_rtc_fast_start;
|
||||||
#else
|
#else
|
||||||
void (*test_addr)(void) = (void(*)(void))((uint32_t)&_rtc_text_start);
|
void *test_addr = &_rtc_text_start;
|
||||||
#endif
|
#endif
|
||||||
printf("RTC_MEM (Fast): Execute operation | Address: %p\n", test_addr);
|
printf("RTC_MEM (Fast): Execute operation | Address: %p\n", test_addr);
|
||||||
test_addr();
|
run_function(test_addr);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* RTC_FAST_MEM: .text section boundary */
|
/* RTC_FAST_MEM: .text section boundary */
|
||||||
void test_rtc_fast_reg2_execute_violation(void)
|
void test_rtc_fast_reg2_execute_violation(void)
|
||||||
{
|
{
|
||||||
void (*test_addr)(void) = (void(*)(void))((uint32_t)&_rtc_text_end - 0x04);
|
void *test_addr = &_rtc_text_end - 1;
|
||||||
printf("RTC_MEM (Fast): Execute operation | Address: %p\n", test_addr);
|
printf("RTC_MEM (Fast): Execute operation | Address: %p\n", test_addr);
|
||||||
test_addr();
|
run_function(test_addr);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* RTC_FAST_MEM: .data section */
|
/* RTC_FAST_MEM: .data section */
|
||||||
void test_rtc_fast_reg3_execute_violation(void)
|
void test_rtc_fast_reg3_execute_violation(void)
|
||||||
{
|
{
|
||||||
void (*test_addr)(void) = (void(*)(void))((uint32_t)&_rtc_force_fast_start + 0x04);
|
void *test_addr = &_rtc_force_fast_start + 1;
|
||||||
printf("RTC_MEM (Fast): Execute operation | Address: %p\n", test_addr);
|
printf("RTC_MEM (Fast): Execute operation | Address: %p\n", test_addr);
|
||||||
test_addr();
|
run_function(test_addr);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -193,17 +196,17 @@ static RTC_SLOW_ATTR void foo_s(void)
|
|||||||
/* RTC_SLOW_MEM: Data tagged with RTC_SLOW_ATTR */
|
/* RTC_SLOW_MEM: Data tagged with RTC_SLOW_ATTR */
|
||||||
void test_rtc_slow_reg1_execute_violation(void)
|
void test_rtc_slow_reg1_execute_violation(void)
|
||||||
{
|
{
|
||||||
void (*test_addr)(void) = (void(*)(void))((uint32_t)&_rtc_force_slow_start);
|
void *test_addr = &_rtc_force_slow_start;
|
||||||
printf("RTC_MEM (Slow): Execute operation | Address: %p\n", test_addr);
|
printf("RTC_MEM (Slow): Execute operation | Address: %p\n", test_addr);
|
||||||
test_addr();
|
run_function(test_addr);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* RTC_SLOW_MEM: Region start */
|
/* RTC_SLOW_MEM: Region start */
|
||||||
void test_rtc_slow_reg2_execute_violation(void)
|
void test_rtc_slow_reg2_execute_violation(void)
|
||||||
{
|
{
|
||||||
void (*test_addr)(void) = (void(*)(void))((uint32_t)&_rtc_data_start);
|
void *test_addr = &_rtc_data_start;
|
||||||
printf("RTC_MEM (Slow): Execute operation | Address: %p\n", test_addr);
|
printf("RTC_MEM (Slow): Execute operation | Address: %p\n", test_addr);
|
||||||
test_addr();
|
run_function(test_addr);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -243,10 +246,9 @@ void test_drom_reg_write_violation(void)
|
|||||||
|
|
||||||
void test_drom_reg_execute_violation(void)
|
void test_drom_reg_execute_violation(void)
|
||||||
{
|
{
|
||||||
printf("Flash (DROM): Execute operation | Address: %p\n", foo_buf);
|
void *test_addr = (void *)foo_buf;
|
||||||
void (*func_ptr)(void);
|
printf("Flash (DROM): Execute operation | Address: %p\n", test_addr);
|
||||||
func_ptr = (void(*)(void))foo_buf;
|
run_function(test_addr);
|
||||||
func_ptr();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check if the memory alignment gaps added to the heap are correctly configured
|
// Check if the memory alignment gaps added to the heap are correctly configured
|
||||||
@@ -255,9 +257,9 @@ void test_spiram_xip_irom_alignment_reg_execute_violation(void)
|
|||||||
{
|
{
|
||||||
extern int _instruction_reserved_end;
|
extern int _instruction_reserved_end;
|
||||||
if (ALIGN_UP_TO_MMU_PAGE_SIZE((uint32_t)(&_instruction_reserved_end)) - (uint32_t)(&_instruction_reserved_end) >= 4) {
|
if (ALIGN_UP_TO_MMU_PAGE_SIZE((uint32_t)(&_instruction_reserved_end)) - (uint32_t)(&_instruction_reserved_end) >= 4) {
|
||||||
void (*test_addr)(void) = (void(*)(void))((uint32_t)(&_instruction_reserved_end + 0x4));
|
void *test_addr = &_instruction_reserved_end + 1;
|
||||||
printf("SPIRAM (IROM): Execute operation | Address: %p\n", test_addr);
|
printf("SPIRAM (IROM): Execute operation | Address: %p\n", test_addr);
|
||||||
test_addr();
|
run_function(test_addr);
|
||||||
} else {
|
} else {
|
||||||
printf("SPIRAM (IROM): IROM alignment gap not added into heap\n");
|
printf("SPIRAM (IROM): IROM alignment gap not added into heap\n");
|
||||||
}
|
}
|
||||||
@@ -270,9 +272,9 @@ void test_spiram_xip_drom_alignment_reg_execute_violation(void)
|
|||||||
{
|
{
|
||||||
extern int _rodata_reserved_end;
|
extern int _rodata_reserved_end;
|
||||||
if (ALIGN_UP_TO_MMU_PAGE_SIZE((uint32_t)(&_rodata_reserved_end)) - (uint32_t)(&_rodata_reserved_end) >= 4) {
|
if (ALIGN_UP_TO_MMU_PAGE_SIZE((uint32_t)(&_rodata_reserved_end)) - (uint32_t)(&_rodata_reserved_end) >= 4) {
|
||||||
void (*test_addr)(void) = (void(*)(void))((uint32_t)(&_rodata_reserved_end + 0x4));
|
void *test_addr = &_rodata_reserved_end + 0x4;
|
||||||
printf("SPIRAM (DROM): Execute operation | Address: %p\n", test_addr);
|
printf("SPIRAM (DROM): Execute operation | Address: %p\n", test_addr);
|
||||||
test_addr();
|
run_function(test_addr);
|
||||||
} else {
|
} else {
|
||||||
printf("SPIRAM (DROM): DROM alignment gap not added into heap\n");
|
printf("SPIRAM (DROM): DROM alignment gap not added into heap\n");
|
||||||
}
|
}
|
||||||
@@ -290,9 +292,8 @@ void test_invalid_memory_region_write_violation(void)
|
|||||||
|
|
||||||
void test_invalid_memory_region_execute_violation(void)
|
void test_invalid_memory_region_execute_violation(void)
|
||||||
{
|
{
|
||||||
void (*func_ptr)(void);
|
void *test_addr = (void *)(SOC_DRAM_HIGH + 0x40);
|
||||||
func_ptr = (void(*)(void))(SOC_DRAM_HIGH + 0x40);
|
printf("Execute operation | Address: %p\n", test_addr);
|
||||||
printf("Execute operation | Address: %p\n", func_ptr);
|
run_function(test_addr);
|
||||||
func_ptr();
|
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@@ -113,13 +113,15 @@ def get_default_backtrace(config: str) -> List[str]:
|
|||||||
return [config, 'app_main', 'main_task', 'vPortTaskWrapper']
|
return [config, 'app_main', 'main_task', 'vPortTaskWrapper']
|
||||||
|
|
||||||
|
|
||||||
def expect_coredump_flash_write_logs(dut: PanicTestDut, config: str) -> None:
|
def expect_coredump_flash_write_logs(dut: PanicTestDut, config: str, check_cpu_reset: Optional[bool] = True) -> None:
|
||||||
dut.expect_exact('Save core dump to flash...')
|
dut.expect_exact('Save core dump to flash...')
|
||||||
if 'extram_stack' in config:
|
if 'extram_stack' in config:
|
||||||
dut.expect_exact('Backing up stack @')
|
dut.expect_exact('Backing up stack @')
|
||||||
dut.expect_exact('Restoring stack')
|
dut.expect_exact('Restoring stack')
|
||||||
dut.expect_exact('Core dump has been saved to flash.')
|
dut.expect_exact('Core dump has been saved to flash.')
|
||||||
dut.expect(dut.REBOOT)
|
dut.expect(dut.REBOOT)
|
||||||
|
if check_cpu_reset:
|
||||||
|
dut.expect_cpu_reset()
|
||||||
|
|
||||||
|
|
||||||
def expect_coredump_uart_write_logs(dut: PanicTestDut, check_cpu_reset: Optional[bool] = True) -> Any:
|
def expect_coredump_uart_write_logs(dut: PanicTestDut, check_cpu_reset: Optional[bool] = True) -> Any:
|
||||||
@@ -173,8 +175,9 @@ def common_test(
|
|||||||
dut.process_coredump_uart(coredump_base64, expected_coredump)
|
dut.process_coredump_uart(coredump_base64, expected_coredump)
|
||||||
check_cpu_reset = False # CPU reset is already checked in expect_coredump_uart_write_logs
|
check_cpu_reset = False # CPU reset is already checked in expect_coredump_uart_write_logs
|
||||||
elif 'flash' in config:
|
elif 'flash' in config:
|
||||||
expect_coredump_flash_write_logs(dut, config)
|
expect_coredump_flash_write_logs(dut, config, check_cpu_reset)
|
||||||
dut.process_coredump_flash(expected_coredump)
|
dut.process_coredump_flash(expected_coredump)
|
||||||
|
check_cpu_reset = False # CPU reset is already checked in expect_coredump_flash_write_logs
|
||||||
elif 'panic' in config:
|
elif 'panic' in config:
|
||||||
dut.expect(dut.REBOOT, timeout=60)
|
dut.expect(dut.REBOOT, timeout=60)
|
||||||
|
|
||||||
|
112
tools/tools.json
112
tools/tools.json
@@ -182,51 +182,51 @@
|
|||||||
"versions": [
|
"versions": [
|
||||||
{
|
{
|
||||||
"linux-amd64": {
|
"linux-amd64": {
|
||||||
"sha256": "e3e6dcf3d275c3c9ab0e4c8a9d93fd10e7efc035d435460576c9d95b4140c676",
|
"sha256": "45d60317d7a35414ce7fe4c900e636d90c4b0e16d85f2a5c03b523b4efadf3bb",
|
||||||
"size": 174652716,
|
"size": 125612316,
|
||||||
"url": "https://github.com/espressif/crosstool-NG/releases/download/esp-14.2.0_20241119/xtensa-esp-elf-14.2.0_20241119-x86_64-linux-gnu.tar.xz"
|
"url": "https://github.com/espressif/crosstool-NG/releases/download/esp-15.1.0_20250607/xtensa-esp-elf-15.1.0_20250607-x86_64-linux-gnu.tar.xz"
|
||||||
},
|
},
|
||||||
"linux-arm64": {
|
"linux-arm64": {
|
||||||
"sha256": "ac2b311dc0003386425086bfc813bf2aeb3cdf3b117845802df6ebef5f69955f",
|
"sha256": "22a2c9c4a4e6954ba024330266e10ab3eb980614b94859be5ae88c95d781a8bc",
|
||||||
"size": 176920772,
|
"size": 119180760,
|
||||||
"url": "https://github.com/espressif/crosstool-NG/releases/download/esp-14.2.0_20241119/xtensa-esp-elf-14.2.0_20241119-aarch64-linux-gnu.tar.xz"
|
"url": "https://github.com/espressif/crosstool-NG/releases/download/esp-15.1.0_20250607/xtensa-esp-elf-15.1.0_20250607-aarch64-linux-gnu.tar.xz"
|
||||||
},
|
},
|
||||||
"linux-armel": {
|
"linux-armel": {
|
||||||
"sha256": "c54c2877582070115fe6f4870a88a4db4f2f945becf2d70bb1f71e5ab1cac673",
|
"sha256": "31f7b786416893ee4a095ed23cb82183f4e0172c19736a104d9ef0223ee3047c",
|
||||||
"size": 167715268,
|
"size": 121484960,
|
||||||
"url": "https://github.com/espressif/crosstool-NG/releases/download/esp-14.2.0_20241119/xtensa-esp-elf-14.2.0_20241119-arm-linux-gnueabi.tar.xz"
|
"url": "https://github.com/espressif/crosstool-NG/releases/download/esp-15.1.0_20250607/xtensa-esp-elf-15.1.0_20250607-arm-linux-gnueabi.tar.xz"
|
||||||
},
|
},
|
||||||
"linux-armhf": {
|
"linux-armhf": {
|
||||||
"sha256": "04addfee56b45d62b6980967c71fafd6aec2be6dee6d8501e9db70345a6179d2",
|
"sha256": "8bda79cb1287c0d7e12fee8a0d32b85ba9c6801ccb7128d95d324152bd0ce49f",
|
||||||
"size": 168451936,
|
"size": 116521168,
|
||||||
"url": "https://github.com/espressif/crosstool-NG/releases/download/esp-14.2.0_20241119/xtensa-esp-elf-14.2.0_20241119-arm-linux-gnueabihf.tar.xz"
|
"url": "https://github.com/espressif/crosstool-NG/releases/download/esp-15.1.0_20250607/xtensa-esp-elf-15.1.0_20250607-arm-linux-gnueabihf.tar.xz"
|
||||||
},
|
},
|
||||||
"linux-i686": {
|
"linux-i686": {
|
||||||
"sha256": "acf3fb7e37274413cd8c812894a6a0e3a0b3a78e9d5b533893d304008cc996c2",
|
"sha256": "787e9779d507af185f7bb104286b1a6373e5b7d483bc67a7e22db225b4a54522",
|
||||||
"size": 178264512,
|
"size": 127704840,
|
||||||
"url": "https://github.com/espressif/crosstool-NG/releases/download/esp-14.2.0_20241119/xtensa-esp-elf-14.2.0_20241119-i586-linux-gnu.tar.xz"
|
"url": "https://github.com/espressif/crosstool-NG/releases/download/esp-15.1.0_20250607/xtensa-esp-elf-15.1.0_20250607-i586-linux-gnu.tar.xz"
|
||||||
},
|
},
|
||||||
"macos": {
|
"macos": {
|
||||||
"sha256": "1ca7a93825d5b84f6547fa73e6174acadb9af5c877f365e50e176936784383ea",
|
"sha256": "07200c2e6d4db648762f25c91806a3a38c994231f5b7f2752386825d09aa0c3c",
|
||||||
"size": 182782108,
|
"size": 126819660,
|
||||||
"url": "https://github.com/espressif/crosstool-NG/releases/download/esp-14.2.0_20241119/xtensa-esp-elf-14.2.0_20241119-x86_64-apple-darwin.tar.xz"
|
"url": "https://github.com/espressif/crosstool-NG/releases/download/esp-15.1.0_20250607/xtensa-esp-elf-15.1.0_20250607-x86_64-apple-darwin.tar.xz"
|
||||||
},
|
},
|
||||||
"macos-arm64": {
|
"macos-arm64": {
|
||||||
"sha256": "b9732bb3cdcd6a50420c25eb9a8d90eb1216a0a0a274c8ffd4c2037167b5081f",
|
"sha256": "0cd6922eb3414a2011099db5095547dfea9c829ed83a0950a73a585afa844fde",
|
||||||
"size": 167948176,
|
"size": 112300796,
|
||||||
"url": "https://github.com/espressif/crosstool-NG/releases/download/esp-14.2.0_20241119/xtensa-esp-elf-14.2.0_20241119-aarch64-apple-darwin.tar.xz"
|
"url": "https://github.com/espressif/crosstool-NG/releases/download/esp-15.1.0_20250607/xtensa-esp-elf-15.1.0_20250607-aarch64-apple-darwin.tar.xz"
|
||||||
},
|
},
|
||||||
"name": "esp-14.2.0_20241119",
|
"name": "esp-15.1.0_20250607",
|
||||||
"status": "recommended",
|
"status": "recommended",
|
||||||
"win32": {
|
"win32": {
|
||||||
"sha256": "b30e450e0af279783c54a9ae77c3b367dd556b78eda930a92ec7b784a74c28c8",
|
"sha256": "07b33dea9729f7b244f46b28206dd685de5a6fd4773067dd601e27bde37c7e72",
|
||||||
"size": 382457717,
|
"size": 315612119,
|
||||||
"url": "https://github.com/espressif/crosstool-NG/releases/download/esp-14.2.0_20241119/xtensa-esp-elf-14.2.0_20241119-i686-w64-mingw32.zip"
|
"url": "https://github.com/espressif/crosstool-NG/releases/download/esp-15.1.0_20250607/xtensa-esp-elf-15.1.0_20250607-i686-w64-mingw32.zip"
|
||||||
},
|
},
|
||||||
"win64": {
|
"win64": {
|
||||||
"sha256": "62ae704777d73c30689efff6e81178632a1ca44d1a2d60f4621eb997e040e028",
|
"sha256": "2c307163a2bb366acc9c5c637035dc1f6bbd03f8c4407cff40cd9a4e016b14d0",
|
||||||
"size": 386316009,
|
"size": 317468441,
|
||||||
"url": "https://github.com/espressif/crosstool-NG/releases/download/esp-14.2.0_20241119/xtensa-esp-elf-14.2.0_20241119-x86_64-w64-mingw32.zip"
|
"url": "https://github.com/espressif/crosstool-NG/releases/download/esp-15.1.0_20250607/xtensa-esp-elf-15.1.0_20250607-x86_64-w64-mingw32.zip"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
@@ -395,51 +395,51 @@
|
|||||||
"versions": [
|
"versions": [
|
||||||
{
|
{
|
||||||
"linux-amd64": {
|
"linux-amd64": {
|
||||||
"sha256": "7faaa86d272f3e43c233f8a5ffeba327673224a752c2eb72394655d5e7950000",
|
"sha256": "9bfe9b4fe08bd07614d085482301f5206a15a075ce4e9cf1c9c3d9d3e0d6b110",
|
||||||
"size": 298069324,
|
"size": 267310332,
|
||||||
"url": "https://github.com/espressif/crosstool-NG/releases/download/esp-14.2.0_20241119/riscv32-esp-elf-14.2.0_20241119-x86_64-linux-gnu.tar.xz"
|
"url": "https://github.com/espressif/crosstool-NG/releases/download/esp-15.1.0_20250607/riscv32-esp-elf-15.1.0_20250607-x86_64-linux-gnu.tar.xz"
|
||||||
},
|
},
|
||||||
"linux-arm64": {
|
"linux-arm64": {
|
||||||
"sha256": "762eac9ee3d909cf806dcbd26feeb4a83061640d1afea39bc36efdb566b77b03",
|
"sha256": "5089bee512dc575ebb726661edb1ee99923630bfacc43d94ea080c488e6b009f",
|
||||||
"size": 294868260,
|
"size": 264000536,
|
||||||
"url": "https://github.com/espressif/crosstool-NG/releases/download/esp-14.2.0_20241119/riscv32-esp-elf-14.2.0_20241119-aarch64-linux-gnu.tar.xz"
|
"url": "https://github.com/espressif/crosstool-NG/releases/download/esp-15.1.0_20250607/riscv32-esp-elf-15.1.0_20250607-aarch64-linux-gnu.tar.xz"
|
||||||
},
|
},
|
||||||
"linux-armel": {
|
"linux-armel": {
|
||||||
"sha256": "f5b92a7f91c97e11f8c871cffbb040310a3cea1049e967621e5dfc0ff1a601bc",
|
"sha256": "83d4f1125e5f9b79e34afb411b582808a985f82a3ac64981583039d9dd080cad",
|
||||||
"size": 296925780,
|
"size": 256938340,
|
||||||
"url": "https://github.com/espressif/crosstool-NG/releases/download/esp-14.2.0_20241119/riscv32-esp-elf-14.2.0_20241119-arm-linux-gnueabi.tar.xz"
|
"url": "https://github.com/espressif/crosstool-NG/releases/download/esp-15.1.0_20250607/riscv32-esp-elf-15.1.0_20250607-arm-linux-gnueabi.tar.xz"
|
||||||
},
|
},
|
||||||
"linux-armhf": {
|
"linux-armhf": {
|
||||||
"sha256": "14e7962cb4d00ef5c45bc2df2d5f7f2af796d4b68def9f9861d82ac05bb1831f",
|
"sha256": "467326b387dbd3defee6c573afd423063d5e7e77a94586beab4c541d2c260ba7",
|
||||||
"size": 297745292,
|
"size": 262701388,
|
||||||
"url": "https://github.com/espressif/crosstool-NG/releases/download/esp-14.2.0_20241119/riscv32-esp-elf-14.2.0_20241119-arm-linux-gnueabihf.tar.xz"
|
"url": "https://github.com/espressif/crosstool-NG/releases/download/esp-15.1.0_20250607/riscv32-esp-elf-15.1.0_20250607-arm-linux-gnueabihf.tar.xz"
|
||||||
},
|
},
|
||||||
"linux-i686": {
|
"linux-i686": {
|
||||||
"sha256": "39f12f204d3aef7b0c4f3f3e58846ff1ee0a90526db56e91d11bc1c093b645c0",
|
"sha256": "c4151af6cfc62c9a1b6c5d97a4f73e472d0bffc21c50b4f429e1cd05a8dd60e9",
|
||||||
"size": 304492976,
|
"size": 276360208,
|
||||||
"url": "https://github.com/espressif/crosstool-NG/releases/download/esp-14.2.0_20241119/riscv32-esp-elf-14.2.0_20241119-i586-linux-gnu.tar.xz"
|
"url": "https://github.com/espressif/crosstool-NG/releases/download/esp-15.1.0_20250607/riscv32-esp-elf-15.1.0_20250607-i586-linux-gnu.tar.xz"
|
||||||
},
|
},
|
||||||
"macos": {
|
"macos": {
|
||||||
"sha256": "fd7543ca97f4d971798b8323e1e7315e648dded4cf2c16a82c3093447b0358fa",
|
"sha256": "4ee3deecb24e4fcf2215e764392516b362d93e460ea5bdcc5f859f1b507bffad",
|
||||||
"size": 305253540,
|
"size": 282706680,
|
||||||
"url": "https://github.com/espressif/crosstool-NG/releases/download/esp-14.2.0_20241119/riscv32-esp-elf-14.2.0_20241119-x86_64-apple-darwin.tar.xz"
|
"url": "https://github.com/espressif/crosstool-NG/releases/download/esp-15.1.0_20250607/riscv32-esp-elf-15.1.0_20250607-x86_64-apple-darwin.tar.xz"
|
||||||
},
|
},
|
||||||
"macos-arm64": {
|
"macos-arm64": {
|
||||||
"sha256": "b0e54a077c8abd261a588ee96b4079a95218ad9c3124b70ef7275c5de262277d",
|
"sha256": "8a771237cf8784bd4a86bd2f5050d54480a60ae36be2ffc1bab8b944ab08ea50",
|
||||||
"size": 285259728,
|
"size": 262326564,
|
||||||
"url": "https://github.com/espressif/crosstool-NG/releases/download/esp-14.2.0_20241119/riscv32-esp-elf-14.2.0_20241119-aarch64-apple-darwin.tar.xz"
|
"url": "https://github.com/espressif/crosstool-NG/releases/download/esp-15.1.0_20250607/riscv32-esp-elf-15.1.0_20250607-aarch64-apple-darwin.tar.xz"
|
||||||
},
|
},
|
||||||
"name": "esp-14.2.0_20241119",
|
"name": "esp-15.1.0_20250607",
|
||||||
"status": "recommended",
|
"status": "recommended",
|
||||||
"win32": {
|
"win32": {
|
||||||
"sha256": "54193a97bd75205678ead8d11f00b351cfa3c2a6e5ab5d966341358b9f9422d7",
|
"sha256": "019c1ff3f4dbd4427917034e136df2019f1a0bceaae0c68e098ce6ad668e1d05",
|
||||||
"size": 672055172,
|
"size": 689243750,
|
||||||
"url": "https://github.com/espressif/crosstool-NG/releases/download/esp-14.2.0_20241119/riscv32-esp-elf-14.2.0_20241119-i686-w64-mingw32.zip"
|
"url": "https://github.com/espressif/crosstool-NG/releases/download/esp-15.1.0_20250607/riscv32-esp-elf-15.1.0_20250607-i686-w64-mingw32.zip"
|
||||||
},
|
},
|
||||||
"win64": {
|
"win64": {
|
||||||
"sha256": "24c8407fa467448d394e0639436a5ede31caf1838e35e8435e19df58ebed438c",
|
"sha256": "cc6df1e6f828487321fabd3c612097115e14937cb30eaab245f5fe931b481864",
|
||||||
"size": 677812937,
|
"size": 696505388,
|
||||||
"url": "https://github.com/espressif/crosstool-NG/releases/download/esp-14.2.0_20241119/riscv32-esp-elf-14.2.0_20241119-x86_64-w64-mingw32.zip"
|
"url": "https://github.com/espressif/crosstool-NG/releases/download/esp-15.1.0_20250607/riscv32-esp-elf-15.1.0_20250607-x86_64-w64-mingw32.zip"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
Reference in New Issue
Block a user