Initial public release of the 2024A software.

This commit is contained in:
Joe Kearney 2025-01-25 14:04:42 -06:00
parent 7b9ad3edfd
commit 303e9e1dad
361 changed files with 60083 additions and 2 deletions

View file

@ -0,0 +1 @@
351350613ceafba240b761b4ea991e0f231ac7a9f59a9ee901f751bddc0bb18f

View file

@ -0,0 +1,89 @@
## v0.5.3 - 2023-09-15
* fix `add_dependencies called with incorrect number of arguments` in `relinker.cmake`
* `include(cmake_utilities)` is not suggested now, to avoid cmake_utilities dependency issue
## v0.5.2 - 2023-09-15
* Support work on older ESP-IDF, eg: 4.3.x
## v0.5.1 - 2023-08-22
* Add string 1-byte align support
## v0.5.0 - 2023-08-02
* Add GCC LTO support
## v0.4.8 - 2023-05-24
* Add unit test app
### Bugfix:
* fix customer target redefinition issue
## v0.4.7 - 2023-04-21
* gen_compressed_ota: support the addition of a v2 compressed OTA header to compressed firmware.
## v0.4.6 - 2023-04-20
* relinker: add IDF v4.3.x support
## v0.4.5 - 2023-04-17
* gen_compressed_ota: remove slash use in gen_custom_ota.py so that the script can be used in the Windows cmd terminal.
## v0.4.4 - 2023-04-07
* relinker: suppressing the creation of `__pycache__`
* relinker: support same name objects in one library
## v0.4.3 - 2023-03-24
* relinker: support decoding to get IRAM excluded libraries
## v0.4.2 - 2023-03-20
### Bugfix:
* gen_compressed_ota: Fix the number of bytes reserved in the v3 compressed image header
* gen_compressed_ota: Fix definition of MD5 length in compressed image header for different versions.
## v0.4.1 - 2023-03-15
* relinker: add option to use customized configuration files
* relinker: add option to print error information instead of throwing exception when missing function
* relinker: move functions of SPI flash from IRAM to flash only when enable CONFIG_SPI_FLASH_ROM_IMPL
* relinker: move some functions of esp_timer from IRAM to flash only when disable CONFIG_ESP_TIMER_SUPPORTS_ISR_DISPATCH_METHOD
## v0.4.0 - 2023-03-13
### Feature:
* Add command `idf.py gen_single_bin` to generate merged bin file
* Add command `idf.py flash_single_bin` to flash generated merged bin
* Add config `Color in diagnostics` to control the GCC color output
## v0.3.0 - 2023-03-10
* Add gen_compressed_ota functionality, please refer to [gen_compressed_ota.md](https://github.com/espressif/esp-iot-solution/tree/master/tools/cmake_utilities/docs/gen_compressed_ota.md)
## v0.2.1 - 2023-03-09
### Bugfix:
* package manager: Fix the compile issue when the name of the component has `-`, just like esp-xxx
## v0.2.0 - 2023-02-23
* Add relinker functionality, please refer to [relinker.md](https://github.com/espressif/esp-iot-solution/tree/master/tools/cmake_utilities/docs/relinker.md)
## v0.1.0 - 2023-01-12
### Feature:
* Add function cu_pkg_get_version
* Add macro cu_pkg_define_version
* Add cmake script to CMAKE_MODULE_PATH

View file

@ -0,0 +1 @@
idf_component_register()

View file

@ -0,0 +1,65 @@
menu "CMake Utilities"
config CU_RELINKER_ENABLE
bool "Enable relinker"
default n
help
"Enable relinker to linker some IRAM functions to Flash"
if CU_RELINKER_ENABLE
config CU_RELINKER_ENABLE_PRINT_ERROR_INFO_WHEN_MISSING_FUNCTION
bool "Print error information when missing function"
default y
help
"Enable this option to print error information instead of
throwing exception when missing function"
config CU_RELINKER_ENABLE_CUSTOMIZED_CONFIGURATION_FILES
bool "Enable customized relinker configuration files"
default n
help
"Enable this option to use customized relinker configuration
files instead of default ones"
if CU_RELINKER_ENABLE_CUSTOMIZED_CONFIGURATION_FILES
config CU_RELINKER_CUSTOMIZED_CONFIGURATION_FILES_PATH
string "Customized relinker configuration files path"
default ""
help
"Customized relinker configuration files path. This path is
evaluated relative to the project root directory."
endif
endif
choice CU_DIAGNOSTICS_COLOR
prompt "Color in diagnostics"
default CU_DIAGNOSTICS_COLOR_ALWAYS
help
Use color in diagnostics. "never", "always", or "auto". If "always", GCC will output
with color defined in GCC_COLORS environment variable. If "never", only output plain
text. If "auto", only output with color when the standard error is a terminal and when
not executing in an emacs shell.
config CU_DIAGNOSTICS_COLOR_NEVER
bool "never"
config CU_DIAGNOSTICS_COLOR_ALWAYS
bool "always"
config CU_DIAGNOSTICS_COLOR_AUTO
bool "auto"
endchoice
config CU_GCC_LTO_ENABLE
bool "Enable GCC link time optimization(LTO)"
default n
help
"Enable this option, users can enable GCC link time optimization(LTO)
feature for target components or dependencies.
config CU_GCC_STRING_1BYTE_ALIGN
bool "GCC string 1-byte align"
default n
help
"Enable this option, user can make string in designated components align
by 1-byte instead 1-word(4-byte), this can reduce unnecessary filled data
so that to reduce firmware size."
endmenu

View file

@ -0,0 +1,31 @@
# Cmake utilities
[![Component Registry](https://components.espressif.com/components/espressif/cmake_utilities/badge.svg)](https://components.espressif.com/components/espressif/cmake_utilities)
This component is aiming to provide some useful CMake utilities outside of ESP-IDF.
## Use
1. Add dependency of this component in your component or project's idf_component.yml.
```yml
dependencies:
espressif/cmake_utilities: "0.*"
```
2. Include the CMake file you need in your component's CMakeLists.txt after `idf_component_register`, or in your project's CMakeLists.txt
```cmake
// Note: should remove .cmake postfix when using include(), otherwise the requested file will not found
// Note: should place this line after `idf_component_register` function
// only include the one you needed.
include(package_manager)
```
3. Then you can use the corresponding CMake function which is provided by the CMake file.
## Supported features
1. [relinker](https://github.com/espressif/esp-iot-solution/blob/master/tools/cmake_utilities/docs/relinker.md)
2. [gen_compressed_ota](https://github.com/espressif/esp-iot-solution/blob/master/tools/cmake_utilities/docs/gen_compressed_ota.md)
3. [GCC Optimization](https://github.com/espressif/esp-iot-solution/blob/master/tools/cmake_utilities/docs/gcc.md)

View file

@ -0,0 +1,7 @@
# Include all cmake modules
include(gcc)
include(gen_compressed_ota)
include(gen_single_bin)
include(package_manager)
include(relinker)

View file

@ -0,0 +1,108 @@
# Link Time Optimization(LTO)
Link time optimization(LTO) improves the optimization effect of GCC, such as reducing binary size, increasing performance, and so on. For more details please refer to related [GCC documents](https://gcc.gnu.org/onlinedocs/gccint/LTO.html).
## Use
To use this feature, you need to include the required CMake file in your project's CMakeLists.txt after `project(XXXX)`.
```cmake
include($ENV{IDF_PATH}/tools/cmake/project.cmake)
project(XXXX)
include(gcc)
```
The LTO feature is disabled by default. To use it, you should enable the option `CU_GCC_LTO_ENABLE` in menuconfig. Then specify target components or dependencies to be optimized by LTO after `include(gcc)` as follows:
```cmake
include(gcc)
cu_gcc_lto_set(COMPONENTS component_a component_b
DEPENDS dependence_a dependence_b)
cu_gcc_string_1byte_align(COMPONENTS component_c component_d
DEPENDS dependence_c dependence_d)
```
Based on your requirement, set compiling optimization level in the option `COMPILER_OPTIMIZATION`.
* Note
```
1. Reducing firmware size may decrease performance
2. Increasing performance may increase firmware size
3. Enable LTO cause compiling time cost increases a lot
4. Enable LTO may increase task stack cost
5. Enable string 1-byte align may decrease string process speed
```
## Limitation
At the linking stage, the LTO generates new function indexes instead of the file path as follows:
- LTO
```txt
.text 0x00000000420016f4 0x6 /tmp/ccdjwYMH.ltrans51.ltrans.o
0x00000000420016f4 app_main
```
- Without LTO
```txt
.text.app_main 0x00000000420016f4 0x6 esp-idf/main/libmain.a(app_main.c.obj)
0x00000000420016f4 app_main
```
So tools used to relink functions between flash and IRAM can't affect these optimized components and dependencies again. It is recommended that users had better optimize application components and dependencies than kernel and hardware driver ones.
## Example
The example applies LTO in `light` of `esp-matter` because its application code is much larger. Add LTO configuration into project script `CMakeLists.txt` as follows:
```cmake
project(light)
include(gcc)
# Add
set(app_lto_components main chip esp_matter)
# Add
set(idf_lto_components lwip wpa_supplicant nvs_flash)
# Add
set(lto_depends mbedcrypto)
# Add
cu_gcc_lto_set(COMPONENTS ${app_lto_components} ${idf_lto_components}
DEPENDS ${lto_depends})
```
Configure `ESP32-C2` as the target platform, enable `CU_GCC_LTO_ENABLE` and `CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_DISABLE`, set `COMPILER_OPTIMIZATION` to be `-Os`.
Increase the `main` task stack size to `5120` by option `ESP_MAIN_TASK_STACK_SIZE`.
Compile the project, and then you can see the firmware size decrease a lot:
Option | Firmware size | Stask cost
|:-:|:-:|:-:|
-Os | 1,113,376 | 2508
-Os + LTO | 1,020,640 | 4204
Then add `cu_gcc_string_1byte_align` after `cu_gcc_lto_set`:
```cmake
# Add
cu_gcc_lto_set(COMPONENTS ${app_lto_components} ${idf_lto_components}
DEPENDS ${lto_depends})
cu_gcc_string_1byte_align(COMPONENTS ${app_lto_components} ${idf_lto_components}
DEPENDS ${lto_depends})
```
Build the project and the firmware size is:
Option | Firmware size |
|:-:|:-:|
-Os + LTO | 1,020,640 |
-Os + LTO + string 1-byte align | 1,018,340 |

View file

@ -0,0 +1,41 @@
# Gen Compressed OTA
When using the compressed OTA, we need to generate the compressed app firmware. This document mainly describes how to generate the compressed app firmware.
For more information about compressed OTA, refer to [bootloader_support_plus](https://github.com/espressif/esp-iot-solution/tree/master/components/bootloader_support_plus).
## Use
In order to use this feature, you need to include the needed CMake file in your project's CMakeLists.txt after `project(XXXX)`.
```cmake
project(XXXX)
include(gen_compressed_ota)
```
Generate the compressed app firmware in an ESP-IDF "project" directory by running:
```plaintext
idf.py gen_compressed_ota
```
This command will compile your project first, then it will generate the compressed app firmware. For example, run the command under the project `simple_ota_examples` folder. If there are no errors, the `custom_ota_binaries` folder will be created and contains the following files:
```plaintext
simple_ota.bin.xz
simple_ota.bin.xz.packed
```
The file named `simple_ota.bin.xz.packed` is the actual compressed app binary file to be transferred.
In addition, if [secure boot](https://docs.espressif.com/projects/esp-idf/en/latest/esp32c3/security/secure-boot-v2.html) is enabled, the command will generate the signed compressed app binary file:
```plaintext
simple_ota.bin.xz.packed.signed
```
you can also use the script [gen_custom_ota.py](https://github.com/espressif/esp-iot-solution/tree/master/tools/cmake_utilities/scripts/gen_custom_ota.py) to compress the specified app:
```plaintext
python3 gen_custom_ota.py -i simple_ota.bin
```

View file

@ -0,0 +1,66 @@
# Relinker
In ESP-IDF, some functions are put in SRAM when link stage, the reason is that some functions are critical, we need to put them in SRAM to speed up the program, or the functions will be executed when the cache is disabled. But actually, some functions can be put into Flash, here, we provide a script to let the user set the functions which are located in SRAM by default to put them into Flash, in order to save more SRAM which can be used as heap region later. This happens in the linker stage, so we call it as relinker.
## Use
In order to use this feature, you need to include the needed CMake file in your project's CMakeLists.txt after `project(XXXX)`.
```cmake
project(XXXX)
include(relinker)
```
The relinker feature is disabled by default, in order to use it, you need to enable the option `CU_RELINKER_ENABLE` in menuconfig.
Here are the default configuration files in the folder `cmake_utilities/scripts/relinker/examples/esp32c2`, it's just used as a reference. If you would like to use your own configuration files, please enable option `CU_RELINKER_ENABLE_CUSTOMIZED_CONFIGURATION_FILES` and set the path of your configuration files as following, this path is evaluated relative to the project root directory:
```
[*] Enable customized relinker configuration files
(path of your configuration files) Customized relinker configuration files path
```
> Note: Currently only esp32c2 is supported.
## Configuration Files
You can refer to the files in the directory of `cmake_utilities/scripts/relinker/examples/esp32c2`:
- library.csv
- object.csv
- function.csv
For example, if you want to link function `__getreent` from SRAM to Flash, firstly you should add it to `function.csv` file as following:
```
libfreertos.a,tasks.c.obj,__getreent,
```
This means function `__getreent` is in object file `tasks.c.obj`, and object file `tasks.c.obj` is in library `libfreertos.a`.
If function `__getreent` depends on the option `FREERTOS_PLACE_FUNCTIONS_INTO_FLASH` in menuconfig, then it should be:
```
libfreertos.a,tasks.c.obj,__getreent,CONFIG_FREERTOS_PLACE_FUNCTIONS_INTO_FLASH
```
This means when only `FREERTOS_PLACE_FUNCTIONS_INTO_FLASH` is enabled in menuconfig, function `__getreent` will be linked from SRAM to Flash.
Next step you should add the path of the object file to `object.csv`:
```
libfreertos.a,tasks.c.obj,esp-idf/freertos/CMakeFiles/__idf_freertos.dir/FreeRTOS-Kernel/tasks.c.obj
```
This means the object file `tasks.c.obj` is in library `libfreertos.a` and its location is `esp-idf/freertos/CMakeFiles/__idf_freertos.dir/FreeRTOS-Kernel/tasks.c.obj` relative to directory of `build`.
Next step you should add path of library to `library.csv`:
```
libfreertos.a,./esp-idf/freertos/libfreertos.a
```
This means library `libfreertos.a`'s location is `./esp-idf/freertos/libfreertos.a` relative to `build`.
If above related data has exists in corresponding files, please don't add this repeatedly.

View file

@ -0,0 +1,84 @@
if(CONFIG_CU_GCC_LTO_ENABLE)
# Enable cmake interprocedural optimization(IPO) support to check if GCC supports link time optimization(LTO)
cmake_policy(SET CMP0069 NEW)
include(CheckIPOSupported)
# Compare to "ar" and "ranlib", "gcc-ar" and "gcc-ranlib" integrate GCC LTO plugin
set(CMAKE_AR ${_CMAKE_TOOLCHAIN_PREFIX}gcc-ar)
set(CMAKE_RANLIB ${_CMAKE_TOOLCHAIN_PREFIX}gcc-ranlib)
macro(cu_gcc_lto_set)
check_ipo_supported(RESULT result)
if(result)
message(STATUS "GCC link time optimization(LTO) is enable")
set(multi_value COMPONENTS DEPENDS)
cmake_parse_arguments(LTO "" "" "${multi_value}" ${ARGN})
# Use full format LTO object file
set(GCC_LTO_OBJECT_TYPE "-ffat-lto-objects")
# Set compression level 9(min:0, max:9)
set(GCC_LTO_COMPRESSION_LEVEL "-flto-compression-level=9")
# Set partition level max to removed used symbol
set(GCC_LTO_PARTITION_LEVEL "-flto-partition=max")
# Set mode "auto" to increase compiling speed
set(GCC_LTO_COMPILE_OPTIONS "-flto=auto"
${GCC_LTO_OBJECT_TYPE}
${GCC_LTO_COMPRESSION_LEVEL})
# Enable GCC LTO and plugin when linking stage
set(GCC_LTO_LINK_OPTIONS "-flto"
"-fuse-linker-plugin"
${GCC_LTO_OBJECT_TYPE}
${GCC_LTO_PARTITION_LEVEL})
message(STATUS "GCC LTO for components: ${LTO_COMPONENTS}")
foreach(c ${LTO_COMPONENTS})
idf_component_get_property(t ${c} COMPONENT_LIB)
target_compile_options(${t} PRIVATE ${GCC_LTO_COMPILE_OPTIONS})
endforeach()
message(STATUS "GCC LTO for dependencies: ${LTO_DEPENDS}")
foreach(d ${LTO_DEPENDS})
target_compile_options(${d} PRIVATE ${GCC_LTO_COMPILE_OPTIONS})
endforeach()
if("${IDF_VERSION_MAJOR}.${IDF_VERSION_MINOR}" VERSION_GREATER_EQUAL "4.4")
target_link_libraries(${project_elf} PRIVATE ${GCC_LTO_LINK_OPTIONS})
else()
target_link_libraries(${project_elf} ${GCC_LTO_LINK_OPTIONS})
endif()
else()
message(FATAL_ERROR "GCC link time optimization(LTO) is not supported")
endif()
endmacro()
else()
macro(cu_gcc_lto_set)
message(STATUS "GCC link time optimization(LTO) is not enable")
endmacro()
endif()
if(CONFIG_CU_GCC_STRING_1BYTE_ALIGN)
macro(cu_gcc_string_1byte_align)
message(STATUS "GCC string 1-byte align is enable")
set(multi_value COMPONENTS DEPENDS)
cmake_parse_arguments(STR_ALIGN "" "" "${multi_value}" ${ARGN})
message(STATUS "GCC string 1-byte align for components: ${STR_ALIGN_COMPONENTS}")
foreach(c ${STR_ALIGN_COMPONENTS})
idf_component_get_property(t ${c} COMPONENT_LIB)
target_compile_options(${t} PRIVATE "-malign-data=natural")
endforeach()
message(STATUS "GCC string 1-byte align for dependencies: ${STR_ALIGN_DEPENDS}")
foreach(d ${STR_ALIGN_DEPENDS})
target_compile_options(${d} PRIVATE "-malign-data=natural")
endforeach()
endmacro()
else()
macro(cu_gcc_string_1byte_align)
message(STATUS "GCC string 1-byte align is not enable")
endmacro()
endif()

View file

@ -0,0 +1,18 @@
if (NOT TARGET gen_compressed_ota)
add_custom_target(gen_compressed_ota)
if (CONFIG_SECURE_SIGNED_ON_UPDATE_NO_SECURE_BOOT OR CONFIG_SECURE_BOOT_V2_ENABLED)
set(COMPRESSED_OTA_BIN_SIGN_PARA --sign_key ${PROJECT_DIR}/${CONFIG_SECURE_BOOT_SIGNING_KEY})
else()
set(COMPRESSED_OTA_BIN_SIGN_PARA )
endif()
set(GEN_COMPRESSED_BIN_CMD ${CMAKE_CURRENT_LIST_DIR}/scripts/gen_custom_ota.py ${COMPRESSED_OTA_BIN_SIGN_PARA} --add_app_header)
add_custom_command(TARGET gen_compressed_ota
POST_BUILD
COMMAND ${PYTHON} ${GEN_COMPRESSED_BIN_CMD}
COMMENT "The gen compresssed bin cmd is: ${GEN_COMPRESSED_BIN_CMD}"
)
add_dependencies(gen_compressed_ota gen_project_binary)
endif()

View file

@ -0,0 +1,27 @@
# Extend command to idf.py
# Generate single bin with name ${CMAKE_PROJECT_NAME}_merged.bin
if (NOT TARGET gen_single_bin)
add_custom_target(
gen_single_bin
COMMAND ${CMAKE_COMMAND} -E echo "Merge bin files to ${CMAKE_PROJECT_NAME}_merged.bin"
COMMAND ${ESPTOOLPY} --chip ${IDF_TARGET} merge_bin -o ${CMAKE_PROJECT_NAME}_merged.bin @flash_args
COMMAND ${CMAKE_COMMAND} -E echo "Merge bin done"
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
DEPENDS gen_project_binary bootloader
VERBATIM USES_TERMINAL
)
endif()
# Flash bin ${CMAKE_PROJECT_NAME}_merged.bin to target chip
if (NOT TARGET flash_single_bin)
add_custom_target(
flash_single_bin
COMMAND ${CMAKE_COMMAND} -E echo "Flash merged bin ${CMAKE_PROJECT_NAME}_merged.bin to address 0x0"
COMMAND ${ESPTOOLPY} --chip ${IDF_TARGET} write_flash 0x0 ${CMAKE_PROJECT_NAME}_merged.bin
COMMAND ${CMAKE_COMMAND} -E echo "Flash merged bin done"
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
DEPENDS gen_single_bin
VERBATIM USES_TERMINAL
)
endif()

View file

@ -0,0 +1,7 @@
dependencies:
idf:
version: '>=4.1'
description: A collection of useful cmake utilities
issues: https://github.com/espressif/esp-iot-solution/issues
url: https://github.com/espressif/esp-iot-solution/tree/master/tools/cmake_utilities
version: 0.5.3

View file

@ -0,0 +1,202 @@
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "[]"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright [yyyy] [name of copyright owner]
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

View file

@ -0,0 +1,45 @@
# cu_pkg_get_version
#
# @brief Get the package's version information, the package is installed by component manager.
#
# @param[in] pkg_path the package's path, normally it's ${CMAKE_CURRENT_LIST_DIR}.
#
# @param[out] ver_major the major version of the package
# @param[out] ver_minor the minor version of the package
# @param[out] ver_patch the patch version of the package
function(cu_pkg_get_version pkg_path ver_major ver_minor ver_patch)
set(yml_file "${pkg_path}/idf_component.yml")
if(EXISTS ${yml_file})
file(READ ${yml_file} ver)
string(REGEX MATCH "(^|\n)version: \"?([0-9]+).([0-9]+).([0-9]+)\"?" _ ${ver})
set(${ver_major} ${CMAKE_MATCH_2} PARENT_SCOPE)
set(${ver_minor} ${CMAKE_MATCH_3} PARENT_SCOPE)
set(${ver_patch} ${CMAKE_MATCH_4} PARENT_SCOPE)
else()
message(WARNING " ${yml_file} not exist")
endif()
endfunction()
# cu_pkg_define_version
#
# @brief Add the package's version definitions using format ${NAME}_VER_MAJOR ${NAME}_VER_MINOR ${NAME}_VER_PATCH,
# the ${NAME} will be inferred from package path, and namespace like `espressif__` will be removed if the package download from esp-registry
# eg. espressif__usb_stream and usb_stream will generate same version definitions USB_STREAM_VER_MAJOR ...
#
# @param[in] pkg_path the package's path, normally it's ${CMAKE_CURRENT_LIST_DIR}.
#
macro(cu_pkg_define_version pkg_path)
cu_pkg_get_version(${pkg_path} ver_major ver_minor ver_patch)
get_filename_component(pkg_name ${pkg_path} NAME)
string(FIND ${pkg_name} "__" pkg_name_pos)
if(pkg_name_pos GREATER -1)
math(EXPR pkg_name_pos "${pkg_name_pos} + 2")
string(SUBSTRING ${pkg_name} ${pkg_name_pos} -1 pkg_name)
endif()
string(TOUPPER ${pkg_name} pkg_name)
string(REPLACE "-" "_" pkg_name ${pkg_name})
message(STATUS "${pkg_name}: ${ver_major}.${ver_minor}.${ver_patch}")
list(LENGTH pkg_name_list len)
target_compile_options(${COMPONENT_LIB} PUBLIC
-D${pkg_name}_VER_MAJOR=${ver_major} -D${pkg_name}_VER_MINOR=${ver_minor} -D${pkg_name}_VER_PATCH=${ver_patch})
endmacro()

View file

@ -0,0 +1,9 @@
set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_LIST_DIR} ${CMAKE_MODULE_PATH})
if(CONFIG_CU_DIAGNOSTICS_COLOR_ALWAYS)
add_compile_options(-fdiagnostics-color=always)
elseif(CONFIG_CU_DIAGNOSTICS_COLOR_AUTO)
add_compile_options(-fdiagnostics-color=auto)
elseif(CONFIG_CU_DIAGNOSTICS_COLOR_NEVER)
add_compile_options(-fdiagnostics-color=never)
endif()

View file

@ -0,0 +1,73 @@
# @brief Link designated functions from SRAM to Flash to save SRAM
if(CONFIG_CU_RELINKER_ENABLE)
# project_elf variable is only in project.cmake
if(NOT TARGET customer_sections AND DEFINED project_elf)
message(STATUS "Relinker is enabled.")
if(CONFIG_IDF_TARGET_ESP32C2)
set(target "esp32c2")
else()
message(FATAL_ERROR "Other targets are not supported.")
endif()
if(CONFIG_CU_RELINKER_ENABLE_CUSTOMIZED_CONFIGURATION_FILES)
idf_build_get_property(project_dir PROJECT_DIR)
get_filename_component(cfg_file_path "${CONFIG_CU_RELINKER_CUSTOMIZED_CONFIGURATION_FILES_PATH}"
ABSOLUTE BASE_DIR "${project_dir}")
if(NOT EXISTS "${cfg_file_path}")
message(FATAL_ERROR "Relinker Configuration files path ${cfg_file_path} is not found.")
endif()
else()
set(cfg_file_path ${PROJECT_DIR}/relinker/${target})
if(NOT EXISTS ${cfg_file_path})
set(cfg_file_path ${CMAKE_CURRENT_LIST_DIR}/scripts/relinker/examples/${target})
endif()
endif()
message(STATUS "Relinker configuration files: ${cfg_file_path}")
set(library_file "${cfg_file_path}/library.csv")
set(object_file "${cfg_file_path}/object.csv")
set(function_file "${cfg_file_path}/function.csv")
set(relinker_script "${CMAKE_CURRENT_LIST_DIR}/scripts/relinker/relinker.py")
set(cmake_objdump "${CMAKE_OBJDUMP}")
set(link_path "${CMAKE_BINARY_DIR}/esp-idf/esp_system/ld")
set(link_src_file "${link_path}/sections.ld")
set(link_dst_file "${link_path}/customer_sections.ld")
set(relinker_opts --input ${link_src_file}
--output ${link_dst_file}
--library ${library_file}
--object ${object_file}
--function ${function_file}
--sdkconfig ${sdkconfig}
--objdump ${cmake_objdump})
if(CONFIG_CU_RELINKER_ENABLE_PRINT_ERROR_INFO_WHEN_MISSING_FUNCTION)
list(APPEND relinker_opts --missing_function_info True)
endif()
idf_build_get_property(link_depends __LINK_DEPENDS)
add_custom_command(OUTPUT ${link_dst_file}
COMMAND ${python} -B ${relinker_script}
${relinker_opts}
COMMAND ${CMAKE_COMMAND} -E copy
${link_dst_file}
${link_src_file}
COMMAND ${CMAKE_COMMAND} -E echo
/*relinker*/ >>
${link_dst_file}
DEPENDS "${link_depends}"
"${library_file}"
"${object_file}"
"${function_file}"
VERBATIM)
add_custom_target(customer_sections DEPENDS ${link_dst_file})
add_dependencies(${project_elf} customer_sections)
endif()
else()
message(STATUS "Relinker isn't enabled.")
endif()

View file

@ -0,0 +1,243 @@
#!/usr/bin/env python
#
# SPDX-FileCopyrightText: 2022-2023 Espressif Systems (Shanghai) CO LTD
#
# SPDX-License-Identifier: Apache-2.0
import sys
import struct
import argparse
import binascii
import hashlib
import os
import subprocess
import shutil
import json
import lzma
# src_file = 'hello-world.bin'
# compressed_file = 'hello-world.bin.xz'
# packed_compressed_file = 'hello-world.bin.xz.packed'
# siged_packed_compressed_file = 'hello-world.bin.xz.packed.signed'
binary_compress_type = {'none': 0, 'xz':1}
header_version = {'v1': 1, 'v2': 2, 'v3': 3}
SCRIPT_VERSION = '1.0.0'
ORIGIN_APP_IMAGE_HEADER_LEN = 288 # sizeof(esp_image_header_t) + sizeof(esp_image_segment_header_t) + sizeof(esp_app_desc_t). See esp_app_format.h
# At present, we calculate the checksum of the first 4KB data of the old app.
OLD_APP_CHECK_DATA_SIZE = 4096
# v1 compressed data header:
# Note: Encryption_type field is deprecated, the field is reserved for compatibility.
# |------|---------|---------|----------|------------|------------|-----------|----------|----------------|----------------|--------------|------------|
# | | Magic | header | Compress | delta | Encryption | Reserved | Firmware | The length of | The MD5 of | The CRC32 for| compressed |
# | | number | version | type | type | type | | version | compressed data| compressed data| the header | data |
# |------|---------|---------|----------|------------|------------|-----------|----------|----------------|----------------|--------------|------------|
# | Size | 4 bytes | 1 byte | 4 bits | 4 bits | 1 bytes | 1 bytes | 32 bytes | 4 bytes | 32 bytes | 4 bytes | |
# |------|---------|---------|----------|------------|------------|-----------|----------|----------------|----------------|--------------|------------|
# | Data | String | | | | | | String | little-endian | byte string | little-endian| |
# | type | ended | | | | | | ended | integer | | integer | |
# | |with \0| | | | | | with \0| | | | Binary data|
# |------|---------|---------|----------|------------|------------|-----------|----------|----------------|----------------|--------------|------------|
# | Data | “ESP” | 1 | 0/1 | 0/1 | | | | | | | |
# |------|---------|---------|----------|------------|------------|-----------|----------|----------------|----------------|--------------|------------|
# v2 compressed data header
# Note: Encryption_type field is deprecated, the field is reserved for compatibility.
# |------|---------|---------|----------|------------|------------|-----------|----------|----------------|----------------|---------------|---------------|--------------|------------|
# | | Magic | header | Compress | delta | Encryption | Reserved | Firmware | The length of | The MD5 of | base app check| The CRC32 for | The CRC32 for| compressed |
# | | number | version | type | type | type | | version | compressed data| compressed data| data len | base app data | the header | data |
# |------|---------|---------|----------|------------|------------|-----------|----------|----------------|----------------|---------------|---------------|--------------|------------|
# | Size | 4 bytes | 1 byte | 4 bits | 4 bits | 1 bytes | 1 bytes | 32 bytes | 4 bytes | 32 bytes | 4 bytes | 4 bytes | 4 bytes | |
# |------|---------|---------|----------|------------|------------|-----------|----------|----------------|----------------|---------------|---------------|--------------|------------|
# | Data | String | | | | | | String | little-endian | byte string | little-endian | little-endian | little-endian| |
# | type | ended | | | | | | ended | integer | | integer | integer | integer | |
# | |with \0| | | | | | with \0| | | | | | Binary data|
# |------|---------|---------|----------|------------|------------|-----------|----------|----------------|----------------|---------------|---------------|--------------|------------|
# | Data | “ESP” | 1 | 0/1 | 0/1 | | | | | | | | | |
# |------|---------|---------|----------|------------|------------|-----------|----------|----------------|----------------|---------------|---------------|--------------|------------|
# v3 compressed data header:
# |------|---------|---------|----------|------------|-----------|----------------|----------------|--------------|------------|
# | | Magic | header | Compress | Reserved | Reserved | The length of | The MD5 of | The CRC32 for| compressed |
# | | number | version | type | | | compressed data| compressed data| the header | data |
# |------|---------|---------|----------|------------|-----------|----------------|----------------|--------------|------------|
# | Size | 4 bytes | 1 byte | 4 bits | 4 bits | 8 bytes | 4 bytes | 16 bytes | 4 bytes | |
# |------|---------|---------|----------|------------|-----------|----------------|----------------|--------------|------------|
# | Data | String | integer | | | | little-endian | byte string | little-endian| |
# | type | ended | | | | | integer | | integer | |
# | |with \0| | | | | | | | Binary data|
# |------|---------|---------|----------|------------|-----------|----------------|----------------|--------------|------------|
# | Data | “ESP” | 3 | 0/1 | | | | | | |
# |------|---------|---------|----------|------------|-----------|----------------|----------------|--------------|------------|
def xz_compress(store_directory, in_file):
compressed_file = ''.join([in_file,'.xz'])
if(os.path.exists(compressed_file)):
os.remove(compressed_file)
xz_compressor_filter = [
{"id": lzma.FILTER_LZMA2, "preset": 6, "dict_size": 64*1024},
]
with open(in_file, 'rb') as src_f:
data = src_f.read()
with lzma.open(compressed_file, "wb", format=lzma.FORMAT_XZ, check=lzma.CHECK_CRC32, filters=xz_compressor_filter) as f:
f.write(data)
f.close()
if not os.path.exists(os.path.join(store_directory, os.path.split(compressed_file)[1])):
shutil.copy(compressed_file, store_directory)
print('copy xz file done')
def secure_boot_sign(sign_key, in_file, out_file):
ret = subprocess.call('espsecure.py sign_data --version 2 --keyfile {} --output {} {}'.format(sign_key, out_file, in_file), shell = True)
if ret:
raise Exception('sign failed')
def get_app_name():
with open('flasher_args.json') as f:
try:
flasher_args = json.load(f)
return flasher_args['app']['file']
except Exception as e:
print(e)
return ''
def get_script_version():
return SCRIPT_VERSION
def main():
parser = argparse.ArgumentParser()
parser.add_argument('-hv', '--header_ver', nargs='?', choices = ['v1', 'v2', 'v3'],
default='v3', help='the version of the packed file header [default:v3]')
parser.add_argument('-c', '--compress_type', nargs= '?', choices = ['none', 'xz'],
default='xz', help='compressed type [default:xz]')
parser.add_argument('-i', '--in_file', nargs = '?',
default='', help='the new app firmware')
parser.add_argument('--sign_key', nargs = '?',
default='', help='the sign key used for secure boot')
parser.add_argument('-fv', '--fw_ver', nargs='?',
default='', help='the version of the compressed data(this field is deprecated in v3)')
parser.add_argument('--add_app_header', action="store_true", help='add app header to use native esp_ota_* & esp_https_ota_* APIs')
parser.add_argument('-v', '--version', action='version', version=get_script_version(), help='the version of the script')
args = parser.parse_args()
compress_type = args.compress_type
firmware_ver = args.fw_ver
src_file = args.in_file
sign_key = args.sign_key
header_ver = args.header_ver
add_app_header = args.add_app_header
if src_file == '':
origin_app_name = get_app_name()
if(origin_app_name == ''):
print('get origin app name fail')
return
if os.path.exists(origin_app_name):
src_file = origin_app_name
else:
print('origin app.bin not found')
return
print('src file is: {}'.format(src_file))
# rebuild the cpmpressed_app directroy
cpmoressed_app_directory = 'custom_ota_binaries'
if os.path.exists(cpmoressed_app_directory):
shutil.rmtree(cpmoressed_app_directory)
os.mkdir(cpmoressed_app_directory)
print('The compressed file will store in {}'.format(cpmoressed_app_directory))
#step1: compress
if compress_type == 'xz':
xz_compress(cpmoressed_app_directory, os.path.abspath(src_file))
origin_app_name = os.path.split(src_file)[1]
compressed_file_name = ''.join([origin_app_name, '.xz'])
compressed_file = os.path.join(cpmoressed_app_directory, compressed_file_name)
else:
compressed_file = ''.join(src_file)
print('compressed file is: {}'.format(compressed_file))
#step2: packet the compressed image header
with open(src_file, 'rb') as s_f:
src_image_header = bytearray(s_f.read(ORIGIN_APP_IMAGE_HEADER_LEN))
src_image_header[1] = 0x00
packed_file = ''.join([compressed_file,'.packed'])
with open(compressed_file, 'rb') as src_f:
data = src_f.read()
f_len = src_f.tell()
# magic number
bin_data = struct.pack('4s', b'ESP')
# header version
bin_data += struct.pack('B', header_version[header_ver])
# Compress type
bin_data += struct.pack('B', binary_compress_type[compress_type])
print('compressed type: {}'.format(binary_compress_type[compress_type]))
# in header v1/v2, there is a field "Encryption type", this field has been deprecated in v3
if (header_version[header_ver] < 3):
bin_data += struct.pack('B', 0)
# Reserved
bin_data += struct.pack('?', 0)
# Firmware version
bin_data += struct.pack('32s', firmware_ver.encode())
else:
# Reserved
bin_data += struct.pack('10s', b'0')
# The length of the compressed data
bin_data += struct.pack('<I', f_len)
print('compressed data len: {}'.format(f_len))
# The MD5 for the compressed data
if (header_version[header_ver] < 3):
bin_data += struct.pack('32s', hashlib.md5(data).digest())
if (header_version[header_ver] == 2):
# Todo, if it's diff OTA, write base app check data len
bin_data += struct.pack('<I', 0)
# Todo, if it's diff OTA, write base app crc32 checksum
bin_data += struct.pack('<I', 0)
else:
bin_data += struct.pack('16s', hashlib.md5(data).digest())
# The CRC32 for the header
bin_data += struct.pack('<I', binascii.crc32(bin_data, 0x0))
# write compressed data
bin_data += data
with open(packed_file, 'wb') as dst_f:
# write compressed image header and compressed dada
dst_f.write(bin_data)
print('packed file is: {}'.format(packed_file))
#step3: if need sign, then sign the packed image
if sign_key != '':
signed_file = ''.join([packed_file,'.signed'])
secure_boot_sign(sign_key, packed_file, signed_file)
print('signed_file is: {}'.format(signed_file))
else:
signed_file = ''.join(packed_file)
if (header_version[header_ver] == 3) and add_app_header:
with open(signed_file, 'rb+') as src_f:
packed_data = src_f.read()
src_f.seek(0)
# write origin app image header
src_f.write(src_image_header)
# write compressed image header and compressed dada
src_f.write(packed_data)
print('app image header has been added')
if __name__ == '__main__':
try:
main()
except Exception as e:
print(e)
sys.exit(2)

View file

@ -0,0 +1,211 @@
#!/usr/bin/env python3
#
# SPDX-FileCopyrightText: 2022-2023 Espressif Systems (Shanghai) CO LTD
# SPDX-License-Identifier: Apache-2.0
import argparse
import csv
import os
import subprocess
import sys
import re
from io import StringIO
OPT_MIN_LEN = 7
espidf_objdump = None
espidf_missing_function_info = True
class sdkconfig_c:
def __init__(self, path):
lines = open(path).read().splitlines()
config = dict()
for l in lines:
if len(l) > OPT_MIN_LEN and l[0] != '#':
mo = re.match( r'(.*)=(.*)', l, re.M|re.I)
if mo:
config[mo.group(1)]=mo.group(2).replace('"', '')
self.config = config
def index(self, i):
return self.config[i]
def check(self, options):
options = options.replace(' ', '')
if '&&' in options:
for i in options.split('&&'):
if i[0] == '!':
i = i[1:]
if i in self.config:
return False
else:
if i not in self.config:
return False
else:
i = options
if i[0] == '!':
i = i[1:]
if i in self.config:
return False
else:
if i not in self.config:
return False
return True
class object_c:
def read_dump_info(self, pathes):
new_env = os.environ.copy()
new_env['LC_ALL'] = 'C'
dumps = list()
print('pathes:', pathes)
for path in pathes:
try:
dump = StringIO(subprocess.check_output([espidf_objdump, '-t', path], env=new_env).decode())
dumps.append(dump.readlines())
except subprocess.CalledProcessError as e:
raise RuntimeError('cmd:%s result:%s'%(e.cmd, e.returncode))
return dumps
def get_func_section(self, dumps, func):
for dump in dumps:
for l in dump:
if ' %s'%(func) in l and '*UND*' not in l:
m = re.match(r'(\S*)\s*([glw])\s*([F|O])\s*(\S*)\s*(\S*)\s*(\S*)\s*', l, re.M|re.I)
if m and m[6] == func:
return m[4].replace('.text.', '')
if espidf_missing_function_info:
print('%s failed to find section'%(func))
return None
else:
raise RuntimeError('%s failed to find section'%(func))
def __init__(self, name, pathes, libray):
self.name = name
self.libray = libray
self.funcs = dict()
self.pathes = pathes
self.dumps = self.read_dump_info(pathes)
def append(self, func):
section = self.get_func_section(self.dumps, func)
if section != None:
self.funcs[func] = section
def functions(self):
nlist = list()
for i in self.funcs:
nlist.append(i)
return nlist
def sections(self):
nlist = list()
for i in self.funcs:
nlist.append(self.funcs[i])
return nlist
class library_c:
def __init__(self, name, path):
self.name = name
self.path = path
self.objs = dict()
def append(self, obj, path, func):
if obj not in self.objs:
self.objs[obj] = object_c(obj, path, self.name)
self.objs[obj].append(func)
class libraries_c:
def __init__(self):
self.libs = dict()
def append(self, lib, lib_path, obj, obj_path, func):
if lib not in self.libs:
self.libs[lib] = library_c(lib, lib_path)
self.libs[lib].append(obj, obj_path, func)
def dump(self):
for libname in self.libs:
lib = self.libs[libname]
for objname in lib.objs:
obj = lib.objs[objname]
print('%s, %s, %s, %s'%(libname, objname, obj.path, obj.funcs))
class paths_c:
def __init__(self):
self.paths = dict()
def append(self, lib, obj, path):
if '$IDF_PATH' in path:
path = path.replace('$IDF_PATH', os.environ['IDF_PATH'])
if lib not in self.paths:
self.paths[lib] = dict()
if obj not in self.paths[lib]:
self.paths[lib][obj] = list()
self.paths[lib][obj].append(path)
def index(self, lib, obj):
if lib not in self.paths:
return None
if '*' in self.paths[lib]:
obj = '*'
return self.paths[lib][obj]
def generator(library_file, object_file, function_file, sdkconfig_file, missing_function_info, objdump='riscv32-esp-elf-objdump'):
global espidf_objdump, espidf_missing_function_info
espidf_objdump = objdump
espidf_missing_function_info = missing_function_info
sdkconfig = sdkconfig_c(sdkconfig_file)
lib_paths = paths_c()
for p in csv.DictReader(open(library_file, 'r')):
lib_paths.append(p['library'], '*', p['path'])
obj_paths = paths_c()
for p in csv.DictReader(open(object_file, 'r')):
obj_paths.append(p['library'], p['object'], p['path'])
libraries = libraries_c()
for d in csv.DictReader(open(function_file, 'r')):
if d['option'] and sdkconfig.check(d['option']) == False:
print('skip %s(%s)'%(d['function'], d['option']))
continue
lib_path = lib_paths.index(d['library'], '*')
obj_path = obj_paths.index(d['library'], d['object'])
if not obj_path:
obj_path = lib_path
libraries.append(d['library'], lib_path[0], d['object'], obj_path, d['function'])
return libraries
def main():
argparser = argparse.ArgumentParser(description='Libraries management')
argparser.add_argument(
'--library', '-l',
help='Library description file',
type=str)
argparser.add_argument(
'--object', '-b',
help='Object description file',
type=str)
argparser.add_argument(
'--function', '-f',
help='Function description file',
type=str)
argparser.add_argument(
'--sdkconfig', '-s',
help='sdkconfig file',
type=str)
args = argparser.parse_args()
libraries = generator(args.library, args.object, args.function, args.sdkconfig)
# libraries.dump()
if __name__ == '__main__':
main()

View file

@ -0,0 +1,365 @@
library,object,function,option
libble_app.a,ble_hw.c.o,r_ble_hw_resolv_list_get_cur_entry,
libble_app.a,ble_ll_adv.c.o,r_ble_ll_adv_set_sched,
libble_app.a,ble_ll_adv.c.o,r_ble_ll_adv_sync_pdu_make,
libble_app.a,ble_ll_adv.c.o,r_ble_ll_adv_sync_calculate,
libble_app.a,ble_ll_conn.c.o,r_ble_ll_conn_is_dev_connected,
libble_app.a,ble_ll_ctrl.c.o,r_ble_ll_ctrl_tx_done,
libble_app.a,ble_lll_adv.c.o,r_ble_lll_adv_aux_scannable_pdu_payload_len,
libble_app.a,ble_lll_adv.c.o,r_ble_lll_adv_halt,
libble_app.a,ble_lll_adv.c.o,r_ble_lll_adv_periodic_schedule_next,
libble_app.a,ble_lll_conn.c.o,r_ble_lll_conn_cth_flow_free_credit,
libble_app.a,ble_lll_conn.c.o,r_ble_lll_conn_update_encryption,
libble_app.a,ble_lll_conn.c.o,r_ble_lll_conn_set_slave_flow_control,
libble_app.a,ble_lll_conn.c.o,r_ble_lll_init_rx_pkt_isr,
libble_app.a,ble_lll_conn.c.o,r_ble_lll_conn_get_rx_mbuf,
libble_app.a,ble_lll_rfmgmt.c.o,r_ble_lll_rfmgmt_enable,
libble_app.a,ble_lll_rfmgmt.c.o,r_ble_lll_rfmgmt_timer_reschedule,
libble_app.a,ble_lll_rfmgmt.c.o,r_ble_lll_rfmgmt_timer_exp,
libble_app.a,ble_lll_scan.c.o,r_ble_lll_scan_targeta_is_matched,
libble_app.a,ble_lll_scan.c.o,r_ble_lll_scan_rx_isr_on_legacy,
libble_app.a,ble_lll_scan.c.o,r_ble_lll_scan_rx_isr_on_aux,
libble_app.a,ble_lll_scan.c.o,r_ble_lll_scan_process_rsp_in_isr,
libble_app.a,ble_lll_scan.c.o,r_ble_lll_scan_rx_pkt_isr,
libble_app.a,ble_lll_sched.c.o,r_ble_lll_sched_execute_check,
libble_app.a,ble_lll_sync.c.o,r_ble_lll_sync_event_start_cb,
libble_app.a,ble_phy.c.o,r_ble_phy_set_rxhdr,
libble_app.a,ble_phy.c.o,r_ble_phy_update_conn_sequence,
libble_app.a,ble_phy.c.o,r_ble_phy_set_sequence_mode,
libble_app.a,ble_phy.c.o,r_ble_phy_txpower_round,
libble_app.a,os_mempool.c.obj,r_os_memblock_put,
libbootloader_support.a,bootloader_flash.c.obj,bootloader_read_flash_id,
libbootloader_support.a,flash_encrypt.c.obj,esp_flash_encryption_enabled,
libbt.a,bt_osi_mem.c.obj,bt_osi_mem_calloc,CONFIG_BT_ENABLED
libbt.a,bt_osi_mem.c.obj,bt_osi_mem_malloc,CONFIG_BT_ENABLED
libbt.a,bt_osi_mem.c.obj,bt_osi_mem_malloc_internal,CONFIG_BT_ENABLED
libbt.a,bt_osi_mem.c.obj,bt_osi_mem_free,CONFIG_BT_ENABLED
libbt.a,bt.c.obj,esp_reset_rpa_moudle,CONFIG_BT_ENABLED
libbt.a,bt.c.obj,osi_assert_wrapper,CONFIG_BT_ENABLED
libbt.a,bt.c.obj,osi_random_wrapper,CONFIG_BT_ENABLED
libbt.a,nimble_port.c.obj,nimble_port_run,CONFIG_BT_NIMBLE_ENABLED
libbt.a,nimble_port.c.obj,nimble_port_get_dflt_eventq,CONFIG_BT_NIMBLE_ENABLED
libbt.a,npl_os_freertos.c.obj,os_callout_timer_cb,CONFIG_BT_ENABLED && !CONFIG_BT_NIMBLE_USE_ESP_TIMER
libbt.a,npl_os_freertos.c.obj,npl_freertos_event_run,CONFIG_BT_ENABLED
libbt.a,npl_os_freertos.c.obj,npl_freertos_callout_stop,CONFIG_BT_ENABLED
libbt.a,npl_os_freertos.c.obj,npl_freertos_time_get,CONFIG_BT_ENABLED
libbt.a,npl_os_freertos.c.obj,npl_freertos_callout_reset,CONFIG_BT_ENABLED
libbt.a,npl_os_freertos.c.obj,npl_freertos_callout_is_active,CONFIG_BT_ENABLED
libbt.a,npl_os_freertos.c.obj,npl_freertos_callout_get_ticks,CONFIG_BT_ENABLED
libbt.a,npl_os_freertos.c.obj,npl_freertos_callout_remaining_ticks,CONFIG_BT_ENABLED
libbt.a,npl_os_freertos.c.obj,npl_freertos_time_delay,CONFIG_BT_ENABLED
libbt.a,npl_os_freertos.c.obj,npl_freertos_eventq_is_empty,CONFIG_BT_ENABLED
libbt.a,npl_os_freertos.c.obj,npl_freertos_mutex_pend,CONFIG_BT_ENABLED
libbt.a,npl_os_freertos.c.obj,npl_freertos_mutex_release,CONFIG_BT_ENABLED
libbt.a,npl_os_freertos.c.obj,npl_freertos_sem_init,CONFIG_BT_ENABLED
libbt.a,npl_os_freertos.c.obj,npl_freertos_sem_pend,CONFIG_BT_ENABLED
libbt.a,npl_os_freertos.c.obj,npl_freertos_sem_release,CONFIG_BT_ENABLED
libbt.a,npl_os_freertos.c.obj,npl_freertos_callout_init,CONFIG_BT_ENABLED
libbt.a,npl_os_freertos.c.obj,npl_freertos_callout_deinit,CONFIG_BT_ENABLED
libbt.a,npl_os_freertos.c.obj,npl_freertos_event_is_queued,CONFIG_BT_ENABLED
libbt.a,npl_os_freertos.c.obj,npl_freertos_event_get_arg,CONFIG_BT_ENABLED
libbt.a,npl_os_freertos.c.obj,npl_freertos_time_ms_to_ticks32,CONFIG_BT_ENABLED
libbt.a,npl_os_freertos.c.obj,npl_freertos_time_ticks_to_ms32,CONFIG_BT_ENABLED
libbt.a,npl_os_freertos.c.obj,npl_freertos_hw_is_in_critical,CONFIG_BT_ENABLED
libbt.a,npl_os_freertos.c.obj,npl_freertos_get_time_forever,CONFIG_BT_ENABLED
libbt.a,npl_os_freertos.c.obj,npl_freertos_os_started,CONFIG_BT_ENABLED
libbt.a,npl_os_freertos.c.obj,npl_freertos_get_current_task_id,CONFIG_BT_ENABLED
libbt.a,npl_os_freertos.c.obj,npl_freertos_event_reset,CONFIG_BT_ENABLED
libbt.a,npl_os_freertos.c.obj,npl_freertos_callout_mem_reset,CONFIG_BT_ENABLED
libbt.a,npl_os_freertos.c.obj,npl_freertos_event_init,CONFIG_BT_ENABLED
libbt.a,npl_os_freertos.c.obj,npl_freertos_sem_get_count,CONFIG_BT_ENABLED
libbt.a,npl_os_freertos.c.obj,npl_freertos_eventq_remove,CONFIG_BT_ENABLED
libbt.a,npl_os_freertos.c.obj,npl_freertos_hw_exit_critical,CONFIG_BT_ENABLED
libbt.a,npl_os_freertos.c.obj,npl_freertos_mutex_init,CONFIG_BT_ENABLED
libbt.a,npl_os_freertos.c.obj,npl_freertos_hw_enter_critical,CONFIG_BT_ENABLED
libbt.a,npl_os_freertos.c.obj,npl_freertos_eventq_put,CONFIG_BT_ENABLED
libbt.a,npl_os_freertos.c.obj,npl_freertos_eventq_get,CONFIG_BT_ENABLED
libbt.a,npl_os_freertos.c.obj,npl_freertos_sem_deinit,CONFIG_BT_ENABLED
libbt.a,npl_os_freertos.c.obj,npl_freertos_mutex_deinit,CONFIG_BT_ENABLED
libbt.a,npl_os_freertos.c.obj,npl_freertos_eventq_deinit,CONFIG_BT_ENABLED
libbt.a,npl_os_freertos.c.obj,npl_freertos_eventq_init,CONFIG_BT_ENABLED
libbt.a,npl_os_freertos.c.obj,npl_freertos_event_deinit,CONFIG_BT_ENABLED
libbt.a,npl_os_freertos.c.obj,npl_freertos_time_ticks_to_ms,CONFIG_BT_ENABLED
libbt.a,npl_os_freertos.c.obj,npl_freertos_time_ms_to_ticks,CONFIG_BT_ENABLED
libbt.a,npl_os_freertos.c.obj,npl_freertos_callout_set_arg,CONFIG_BT_ENABLED
libbt.a,npl_os_freertos.c.obj,npl_freertos_event_set_arg,CONFIG_BT_ENABLED
libbt.a,npl_os_freertos.c.obj,npl_freertos_eventq_put,CONFIG_BT_ENABLED
libdriver.a,gpio.c.obj,gpio_intr_service,
libesp_app_format.a,esp_app_desc.c.obj,esp_app_get_elf_sha256,
libesp_hw_support.a,cpu.c.obj,esp_cpu_wait_for_intr,
libesp_hw_support.a,cpu.c.obj,esp_cpu_reset,
libesp_hw_support.a,esp_clk.c.obj,esp_clk_cpu_freq,
libesp_hw_support.a,esp_clk.c.obj,esp_clk_apb_freq,
libesp_hw_support.a,esp_clk.c.obj,esp_clk_xtal_freq,
libesp_hw_support.a,esp_memory_utils.c.obj,esp_ptr_byte_accessible,
libesp_hw_support.a,hw_random.c.obj,esp_random,
libesp_hw_support.a,intr_alloc.c.obj,shared_intr_isr,
libesp_hw_support.a,intr_alloc.c.obj,esp_intr_noniram_disable,
libesp_hw_support.a,intr_alloc.c.obj,esp_intr_noniram_enable,
libesp_hw_support.a,intr_alloc.c.obj,esp_intr_enable,
libesp_hw_support.a,intr_alloc.c.obj,esp_intr_disable,
libesp_hw_support.a,periph_ctrl.c.obj,wifi_bt_common_module_enable,
libesp_hw_support.a,periph_ctrl.c.obj,wifi_bt_common_module_disable,
libesp_hw_support.a,regi2c_ctrl.c.obj,regi2c_ctrl_read_reg,
libesp_hw_support.a,regi2c_ctrl.c.obj,regi2c_ctrl_read_reg_mask,
libesp_hw_support.a,regi2c_ctrl.c.obj,regi2c_ctrl_write_reg,
libesp_hw_support.a,regi2c_ctrl.c.obj,regi2c_ctrl_write_reg_mask,
libesp_hw_support.a,regi2c_ctrl.c.obj,regi2c_enter_critical,
libesp_hw_support.a,regi2c_ctrl.c.obj,regi2c_exit_critical,
libesp_hw_support.a,regi2c_ctrl.c.obj,regi2c_analog_cali_reg_read,
libesp_hw_support.a,regi2c_ctrl.c.obj,regi2c_analog_cali_reg_write,
libesp_hw_support.a,rtc_clk.c.obj,rtc_clk_32k_enable_external,
libesp_hw_support.a,rtc_clk.c.obj,rtc_clk_fast_src_set,
libesp_hw_support.a,rtc_clk.c.obj,rtc_clk_slow_freq_get_hz,
libesp_hw_support.a,rtc_clk.c.obj,rtc_clk_slow_src_get,
libesp_hw_support.a,rtc_clk.c.obj,rtc_clk_slow_src_set,
libesp_hw_support.a,rtc_clk.c.obj,rtc_dig_clk8m_disable,
libesp_hw_support.a,rtc_clk.c.obj,rtc_clk_cpu_freq_set_config_fast,
libesp_hw_support.a,rtc_clk.c.obj,rtc_clk_8m_enable,
libesp_hw_support.a,rtc_clk.c.obj,rtc_clk_8md256_enabled,
libesp_hw_support.a,rtc_clk.c.obj,rtc_clk_bbpll_configure,
libesp_hw_support.a,rtc_clk.c.obj,rtc_clk_bbpll_enable,
libesp_hw_support.a,rtc_clk.c.obj,rtc_clk_cpu_freq_get_config,
libesp_hw_support.a,rtc_clk.c.obj,rtc_clk_cpu_freq_mhz_to_config,
libesp_hw_support.a,rtc_clk.c.obj,rtc_clk_cpu_freq_set_config,
libesp_hw_support.a,rtc_clk.c.obj,rtc_clk_cpu_freq_to_8m,
libesp_hw_support.a,rtc_clk.c.obj,rtc_clk_cpu_freq_to_pll_mhz,
libesp_hw_support.a,rtc_clk.c.obj,rtc_clk_cpu_freq_set_xtal,
libesp_hw_support.a,rtc_clk.c.obj,rtc_clk_xtal_freq_get,
libesp_hw_support.a,rtc_clk.c.obj,rtc_clk_cpu_freq_to_xtal,
libesp_hw_support.a,rtc_clk.c.obj,rtc_clk_bbpll_disable,
libesp_hw_support.a,rtc_clk.c.obj,rtc_clk_apb_freq_update,
libesp_hw_support.a,rtc_clk.c.obj,clk_ll_rtc_slow_get_src,FALSE
libesp_hw_support.a,rtc_init.c.obj,rtc_vddsdio_set_config,
libesp_hw_support.a,rtc_module.c.obj,rtc_isr,
libesp_hw_support.a,rtc_module.c.obj,rtc_isr_noniram_disable,
libesp_hw_support.a,rtc_module.c.obj,rtc_isr_noniram_enable,
libesp_hw_support.a,rtc_sleep.c.obj,rtc_sleep_pu,
libesp_hw_support.a,rtc_sleep.c.obj,rtc_sleep_finish,
libesp_hw_support.a,rtc_sleep.c.obj,rtc_sleep_get_default_config,
libesp_hw_support.a,rtc_sleep.c.obj,rtc_sleep_init,
libesp_hw_support.a,rtc_sleep.c.obj,rtc_sleep_low_init,
libesp_hw_support.a,rtc_sleep.c.obj,rtc_sleep_start,
libesp_hw_support.a,rtc_time.c.obj,rtc_clk_cal,
libesp_hw_support.a,rtc_time.c.obj,rtc_clk_cal_internal,
libesp_hw_support.a,rtc_time.c.obj,rtc_time_get,
libesp_hw_support.a,rtc_time.c.obj,rtc_time_us_to_slowclk,
libesp_hw_support.a,rtc_time.c.obj,rtc_time_slowclk_to_us,
libesp_hw_support.a,sleep_modes.c.obj,periph_ll_periph_enabled,
libesp_hw_support.a,sleep_modes.c.obj,flush_uarts,
libesp_hw_support.a,sleep_modes.c.obj,suspend_uarts,
libesp_hw_support.a,sleep_modes.c.obj,resume_uarts,
libesp_hw_support.a,sleep_modes.c.obj,esp_sleep_start,
libesp_hw_support.a,sleep_modes.c.obj,esp_deep_sleep_start,
libesp_hw_support.a,sleep_modes.c.obj,esp_light_sleep_inner,
libesp_phy.a,phy_init.c.obj,esp_phy_common_clock_enable,
libesp_phy.a,phy_init.c.obj,esp_phy_common_clock_disable,
libesp_phy.a,phy_init.c.obj,esp_wifi_bt_power_domain_on,
libesp_phy.a,phy_override.c.obj,phy_i2c_enter_critical,
libesp_phy.a,phy_override.c.obj,phy_i2c_exit_critical,
libesp_pm.a,pm_locks.c.obj,esp_pm_lock_acquire,
libesp_pm.a,pm_locks.c.obj,esp_pm_lock_release,
libesp_pm.a,pm_impl.c.obj,get_lowest_allowed_mode,
libesp_pm.a,pm_impl.c.obj,esp_pm_impl_switch_mode,
libesp_pm.a,pm_impl.c.obj,on_freq_update,
libesp_pm.a,pm_impl.c.obj,vApplicationSleep,CONFIG_FREERTOS_USE_TICKLESS_IDLE
libesp_pm.a,pm_impl.c.obj,do_switch,
libesp_ringbuf.a,ringbuf.c.obj,prvCheckItemAvail,
libesp_ringbuf.a,ringbuf.c.obj,prvGetFreeSize,
libesp_ringbuf.a,ringbuf.c.obj,prvReceiveGenericFromISR,
libesp_ringbuf.a,ringbuf.c.obj,xRingbufferGetMaxItemSize,
libesp_rom.a,esp_rom_systimer.c.obj,systimer_hal_init,
libesp_rom.a,esp_rom_systimer.c.obj,systimer_hal_set_alarm_period,
libesp_rom.a,esp_rom_systimer.c.obj,systimer_hal_set_alarm_target,
libesp_rom.a,esp_rom_systimer.c.obj,systimer_hal_set_tick_rate_ops,
libesp_rom.a,esp_rom_uart.c.obj,esp_rom_uart_set_clock_baudrate,
libesp_system.a,brownout.c.obj,rtc_brownout_isr_handler,
libesp_system.a,cache_err_int.c.obj,esp_cache_err_get_cpuid,
libesp_system.a,cpu_start.c.obj,call_start_cpu0,
libesp_system.a,crosscore_int.c.obj,esp_crosscore_int_send,
libesp_system.a,crosscore_int.c.obj,esp_crosscore_int_send_yield,
libesp_system.a,esp_system.c.obj,esp_restart,
libesp_system.a,esp_system.c.obj,esp_system_abort,
libesp_system.a,reset_reason.c.obj,esp_reset_reason_set_hint,
libesp_system.a,reset_reason.c.obj,esp_reset_reason_get_hint,
libesp_system.a,ubsan.c.obj,__ubsan_include,
libesp_timer.a,esp_timer.c.obj,esp_timer_get_next_alarm_for_wake_up,
libesp_timer.a,esp_timer.c.obj,timer_list_unlock,!CONFIG_ESP_TIMER_SUPPORTS_ISR_DISPATCH_METHOD
libesp_timer.a,esp_timer.c.obj,timer_list_lock,!CONFIG_ESP_TIMER_SUPPORTS_ISR_DISPATCH_METHOD
libesp_timer.a,esp_timer.c.obj,timer_armed,
libesp_timer.a,esp_timer.c.obj,timer_remove,
libesp_timer.a,esp_timer.c.obj,timer_insert,!CONFIG_ESP_TIMER_SUPPORTS_ISR_DISPATCH_METHOD
libesp_timer.a,esp_timer.c.obj,esp_timer_start_once,
libesp_timer.a,esp_timer.c.obj,esp_timer_start_periodic,
libesp_timer.a,esp_timer.c.obj,esp_timer_stop,
libesp_timer.a,esp_timer.c.obj,esp_timer_get_expiry_time,
libesp_timer.a,esp_timer_impl_systimer.c.obj,esp_timer_impl_get_time,!CONFIG_ESP_TIMER_SUPPORTS_ISR_DISPATCH_METHOD
libesp_timer.a,esp_timer_impl_systimer.c.obj,esp_timer_impl_set_alarm_id,!CONFIG_ESP_TIMER_SUPPORTS_ISR_DISPATCH_METHOD
libesp_timer.a,esp_timer_impl_systimer.c.obj,esp_timer_impl_update_apb_freq,
libesp_timer.a,esp_timer_impl_systimer.c.obj,esp_timer_impl_get_min_period_us,
libesp_timer.a,ets_timer_legacy.c.obj,timer_initialized,
libesp_timer.a,ets_timer_legacy.c.obj,ets_timer_arm_us,
libesp_timer.a,ets_timer_legacy.c.obj,ets_timer_arm,
libesp_timer.a,ets_timer_legacy.c.obj,ets_timer_disarm,
libesp_timer.a,system_time.c.obj,esp_system_get_time,
libesp_wifi.a,esp_adapter.c.obj,semphr_take_from_isr_wrapper,
libesp_wifi.a,esp_adapter.c.obj,wifi_realloc,
libesp_wifi.a,esp_adapter.c.obj,coex_event_duration_get_wrapper,
libesp_wifi.a,esp_adapter.c.obj,coex_schm_interval_set_wrapper,
libesp_wifi.a,esp_adapter.c.obj,esp_empty_wrapper,
libesp_wifi.a,esp_adapter.c.obj,wifi_calloc,
libesp_wifi.a,esp_adapter.c.obj,wifi_zalloc_wrapper,
libesp_wifi.a,esp_adapter.c.obj,env_is_chip_wrapper,
libesp_wifi.a,esp_adapter.c.obj,is_from_isr_wrapper,
libesp_wifi.a,esp_adapter.c.obj,semphr_give_from_isr_wrapper,
libesp_wifi.a,esp_adapter.c.obj,mutex_lock_wrapper,
libesp_wifi.a,esp_adapter.c.obj,mutex_unlock_wrapper,
libesp_wifi.a,esp_adapter.c.obj,task_ms_to_tick_wrapper,
libesp_wifi.a,esp_adapter.c.obj,wifi_apb80m_request_wrapper,
libesp_wifi.a,esp_adapter.c.obj,wifi_apb80m_release_wrapper,
libesp_wifi.a,esp_adapter.c.obj,timer_arm_wrapper,
libesp_wifi.a,esp_adapter.c.obj,wifi_malloc,
libesp_wifi.a,esp_adapter.c.obj,timer_disarm_wrapper,
libesp_wifi.a,esp_adapter.c.obj,timer_arm_us_wrapper,
libesp_wifi.a,esp_adapter.c.obj,wifi_rtc_enable_iso_wrapper,
libesp_wifi.a,esp_adapter.c.obj,wifi_rtc_disable_iso_wrapper,
libesp_wifi.a,esp_adapter.c.obj,malloc_internal_wrapper,
libesp_wifi.a,esp_adapter.c.obj,realloc_internal_wrapper,
libesp_wifi.a,esp_adapter.c.obj,calloc_internal_wrapper,
libesp_wifi.a,esp_adapter.c.obj,zalloc_internal_wrapper,
libesp_wifi.a,esp_adapter.c.obj,coex_status_get_wrapper,
libesp_wifi.a,esp_adapter.c.obj,coex_wifi_release_wrapper,
libfreertos.a,list.c.obj,uxListRemove,FALSE
libfreertos.a,list.c.obj,vListInitialise,CONFIG_FREERTOS_PLACE_FUNCTIONS_INTO_FLASH
libfreertos.a,list.c.obj,vListInitialiseItem,CONFIG_FREERTOS_PLACE_FUNCTIONS_INTO_FLASH
libfreertos.a,list.c.obj,vListInsert,CONFIG_FREERTOS_PLACE_FUNCTIONS_INTO_FLASH
libfreertos.a,list.c.obj,vListInsertEnd,FALSE
libfreertos.a,port.c.obj,vApplicationStackOverflowHook,FALSE
libfreertos.a,port.c.obj,vPortYieldOtherCore,FALSE
libfreertos.a,port.c.obj,vPortYield,
libfreertos.a,port_common.c.obj,xPortcheckValidStackMem,
libfreertos.a,port_common.c.obj,vApplicationGetTimerTaskMemory,
libfreertos.a,port_common.c.obj,esp_startup_start_app_common,
libfreertos.a,port_common.c.obj,xPortCheckValidTCBMem,
libfreertos.a,port_common.c.obj,vApplicationGetIdleTaskMemory,
libfreertos.a,port_systick.c.obj,vPortSetupTimer,
libfreertos.a,port_systick.c.obj,xPortSysTickHandler,FALSE
libfreertos.a,queue.c.obj,prvCopyDataFromQueue,
libfreertos.a,queue.c.obj,prvGetDisinheritPriorityAfterTimeout,
libfreertos.a,queue.c.obj,prvIsQueueEmpty,
libfreertos.a,queue.c.obj,prvNotifyQueueSetContainer,
libfreertos.a,queue.c.obj,xQueueReceive,
libfreertos.a,queue.c.obj,prvUnlockQueue,
libfreertos.a,queue.c.obj,xQueueSemaphoreTake,
libfreertos.a,queue.c.obj,xQueueReceiveFromISR,
libfreertos.a,queue.c.obj,uxQueueMessagesWaitingFromISR,
libfreertos.a,queue.c.obj,xQueueIsQueueEmptyFromISR,
libfreertos.a,queue.c.obj,xQueueGiveFromISR,
libfreertos.a,tasks.c.obj,__getreent,CONFIG_FREERTOS_PLACE_FUNCTIONS_INTO_FLASH
libfreertos.a,tasks.c.obj,pcTaskGetName,CONFIG_FREERTOS_PLACE_FUNCTIONS_INTO_FLASH
libfreertos.a,tasks.c.obj,prvAddCurrentTaskToDelayedList,CONFIG_FREERTOS_PLACE_FUNCTIONS_INTO_FLASH
libfreertos.a,tasks.c.obj,prvDeleteTLS,CONFIG_FREERTOS_PLACE_FUNCTIONS_INTO_FLASH
libfreertos.a,tasks.c.obj,pvTaskIncrementMutexHeldCount,CONFIG_FREERTOS_PLACE_FUNCTIONS_INTO_FLASH
libfreertos.a,tasks.c.obj,taskSelectHighestPriorityTaskSMP,FALSE
libfreertos.a,tasks.c.obj,taskYIELD_OTHER_CORE,FALSE
libfreertos.a,tasks.c.obj,vTaskGetSnapshot,CONFIG_FREERTOS_PLACE_SNAPSHOT_FUNS_INTO_FLASH
libfreertos.a,tasks.c.obj,vTaskInternalSetTimeOutState,CONFIG_FREERTOS_PLACE_FUNCTIONS_INTO_FLASH
libfreertos.a,tasks.c.obj,vTaskPlaceOnEventList,CONFIG_FREERTOS_PLACE_FUNCTIONS_INTO_FLASH
libfreertos.a,tasks.c.obj,vTaskPlaceOnEventListRestricted,CONFIG_FREERTOS_PLACE_FUNCTIONS_INTO_FLASH
libfreertos.a,tasks.c.obj,vTaskPlaceOnUnorderedEventList,CONFIG_FREERTOS_PLACE_FUNCTIONS_INTO_FLASH
libfreertos.a,tasks.c.obj,vTaskPriorityDisinheritAfterTimeout,CONFIG_FREERTOS_PLACE_FUNCTIONS_INTO_FLASH
libfreertos.a,tasks.c.obj,vTaskReleaseEventListLock,CONFIG_FREERTOS_PLACE_FUNCTIONS_INTO_FLASH
libfreertos.a,tasks.c.obj,vTaskTakeEventListLock,CONFIG_FREERTOS_PLACE_FUNCTIONS_INTO_FLASH
libfreertos.a,tasks.c.obj,xTaskCheckForTimeOut,CONFIG_FREERTOS_PLACE_FUNCTIONS_INTO_FLASH
libfreertos.a,tasks.c.obj,xTaskGetCurrentTaskHandle,CONFIG_FREERTOS_PLACE_FUNCTIONS_INTO_FLASH
libfreertos.a,tasks.c.obj,xTaskGetSchedulerState,CONFIG_FREERTOS_PLACE_FUNCTIONS_INTO_FLASH
libfreertos.a,tasks.c.obj,xTaskGetTickCount,CONFIG_FREERTOS_PLACE_FUNCTIONS_INTO_FLASH
libfreertos.a,tasks.c.obj,xTaskPriorityDisinherit,FALSE
libfreertos.a,tasks.c.obj,xTaskPriorityInherit,CONFIG_FREERTOS_PLACE_FUNCTIONS_INTO_FLASH
libfreertos.a,tasks.c.obj,prvGetExpectedIdleTime,FALSE
libfreertos.a,tasks.c.obj,vTaskStepTick,FALSE
libhal.a,brownout_hal.c.obj,brownout_hal_intr_clear,
libhal.a,efuse_hal.c.obj,efuse_hal_chip_revision,
libhal.a,efuse_hal.c.obj,efuse_hal_get_major_chip_version,
libhal.a,efuse_hal.c.obj,efuse_hal_get_minor_chip_version,
libheap.a,heap_caps.c.obj,dram_alloc_to_iram_addr,
libheap.a,heap_caps.c.obj,heap_caps_free,
libheap.a,heap_caps.c.obj,heap_caps_realloc_base,
libheap.a,heap_caps.c.obj,heap_caps_realloc,
libheap.a,heap_caps.c.obj,heap_caps_calloc_base,
libheap.a,heap_caps.c.obj,heap_caps_calloc,
libheap.a,heap_caps.c.obj,heap_caps_malloc_base,
libheap.a,heap_caps.c.obj,heap_caps_malloc,
libheap.a,heap_caps.c.obj,heap_caps_malloc_default,
libheap.a,heap_caps.c.obj,heap_caps_realloc_default,
libheap.a,heap_caps.c.obj,find_containing_heap,
libheap.a,multi_heap.c.obj,_multi_heap_lock,
libheap.a,multi_heap.c.obj,multi_heap_in_rom_init,
liblog.a,log_freertos.c.obj,esp_log_timestamp,
liblog.a,log_freertos.c.obj,esp_log_impl_lock,
liblog.a,log_freertos.c.obj,esp_log_impl_unlock,
liblog.a,log_freertos.c.obj,esp_log_impl_lock_timeout,
liblog.a,log_freertos.c.obj,esp_log_early_timestamp,
liblog.a,log.c.obj,esp_log_write,
libmbedcrypto.a,esp_mem.c.obj,esp_mbedtls_mem_calloc,!CONFIG_MBEDTLS_CUSTOM_MEM_ALLOC
libmbedcrypto.a,esp_mem.c.obj,esp_mbedtls_mem_free,!CONFIG_MBEDTLS_CUSTOM_MEM_ALLOC
libnewlib.a,assert.c.obj,__assert_func,
libnewlib.a,assert.c.obj,newlib_include_assert_impl,
libnewlib.a,heap.c.obj,_calloc_r,
libnewlib.a,heap.c.obj,_free_r,
libnewlib.a,heap.c.obj,_malloc_r,
libnewlib.a,heap.c.obj,_realloc_r,
libnewlib.a,heap.c.obj,calloc,
libnewlib.a,heap.c.obj,cfree,
libnewlib.a,heap.c.obj,free,
libnewlib.a,heap.c.obj,malloc,
libnewlib.a,heap.c.obj,newlib_include_heap_impl,
libnewlib.a,heap.c.obj,realloc,
libnewlib.a,locks.c.obj,_lock_try_acquire_recursive,
libnewlib.a,locks.c.obj,lock_release_generic,
libnewlib.a,locks.c.obj,_lock_release,
libnewlib.a,locks.c.obj,_lock_release_recursive,
libnewlib.a,locks.c.obj,__retarget_lock_init,
libnewlib.a,locks.c.obj,__retarget_lock_init_recursive,
libnewlib.a,locks.c.obj,__retarget_lock_close,
libnewlib.a,locks.c.obj,__retarget_lock_close_recursive,
libnewlib.a,locks.c.obj,check_lock_nonzero,
libnewlib.a,locks.c.obj,__retarget_lock_acquire,
libnewlib.a,locks.c.obj,lock_init_generic,
libnewlib.a,locks.c.obj,__retarget_lock_acquire_recursive,
libnewlib.a,locks.c.obj,__retarget_lock_try_acquire,
libnewlib.a,locks.c.obj,__retarget_lock_try_acquire_recursive,
libnewlib.a,locks.c.obj,__retarget_lock_release,
libnewlib.a,locks.c.obj,__retarget_lock_release_recursive,
libnewlib.a,locks.c.obj,_lock_close,
libnewlib.a,locks.c.obj,lock_acquire_generic,
libnewlib.a,locks.c.obj,_lock_acquire,
libnewlib.a,locks.c.obj,_lock_acquire_recursive,
libnewlib.a,locks.c.obj,_lock_try_acquire,
libnewlib.a,reent_init.c.obj,esp_reent_init,
libnewlib.a,time.c.obj,_times_r,
libnewlib.a,time.c.obj,_gettimeofday_r,
libpp.a,pp_debug.o,wifi_gpio_debug,
libpthread.a,pthread.c.obj,pthread_mutex_lock_internal,
libpthread.a,pthread.c.obj,pthread_mutex_lock,
libpthread.a,pthread.c.obj,pthread_mutex_unlock,
libriscv.a,interrupt.c.obj,intr_handler_get,
libriscv.a,interrupt.c.obj,intr_handler_set,
libriscv.a,interrupt.c.obj,intr_matrix_route,
libspi_flash.a,flash_brownout_hook.c.obj,spi_flash_needs_reset_check,FALSE
libspi_flash.a,flash_brownout_hook.c.obj,spi_flash_set_erasing_flag,FALSE
libspi_flash.a,flash_ops.c.obj,spi_flash_guard_set,CONFIG_SPI_FLASH_ROM_IMPL
libspi_flash.a,flash_ops.c.obj,spi_flash_malloc_internal,CONFIG_SPI_FLASH_ROM_IMPL
libspi_flash.a,flash_ops.c.obj,spi_flash_rom_impl_init,CONFIG_SPI_FLASH_ROM_IMPL
libspi_flash.a,flash_ops.c.obj,esp_mspi_pin_init,CONFIG_SPI_FLASH_ROM_IMPL
libspi_flash.a,flash_ops.c.obj,spi_flash_init_chip_state,CONFIG_SPI_FLASH_ROM_IMPL
libspi_flash.a,spi_flash_os_func_app.c.obj,delay_us,CONFIG_SPI_FLASH_ROM_IMPL
libspi_flash.a,spi_flash_os_func_app.c.obj,get_buffer_malloc,CONFIG_SPI_FLASH_ROM_IMPL
libspi_flash.a,spi_flash_os_func_app.c.obj,release_buffer_malloc,CONFIG_SPI_FLASH_ROM_IMPL
libspi_flash.a,spi_flash_os_func_app.c.obj,main_flash_region_protected,CONFIG_SPI_FLASH_ROM_IMPL
libspi_flash.a,spi_flash_os_func_app.c.obj,main_flash_op_status,CONFIG_SPI_FLASH_ROM_IMPL
libspi_flash.a,spi_flash_os_func_app.c.obj,spi1_flash_os_check_yield,CONFIG_SPI_FLASH_ROM_IMPL
libspi_flash.a,spi_flash_os_func_app.c.obj,spi1_flash_os_yield,CONFIG_SPI_FLASH_ROM_IMPL
libspi_flash.a,spi_flash_os_func_noos.c.obj,start,CONFIG_SPI_FLASH_ROM_IMPL
libspi_flash.a,spi_flash_os_func_noos.c.obj,end,CONFIG_SPI_FLASH_ROM_IMPL
libspi_flash.a,spi_flash_os_func_noos.c.obj,delay_us,CONFIG_SPI_FLASH_ROM_IMPL
1 library object function option
2 libble_app.a ble_hw.c.o r_ble_hw_resolv_list_get_cur_entry
3 libble_app.a ble_ll_adv.c.o r_ble_ll_adv_set_sched
4 libble_app.a ble_ll_adv.c.o r_ble_ll_adv_sync_pdu_make
5 libble_app.a ble_ll_adv.c.o r_ble_ll_adv_sync_calculate
6 libble_app.a ble_ll_conn.c.o r_ble_ll_conn_is_dev_connected
7 libble_app.a ble_ll_ctrl.c.o r_ble_ll_ctrl_tx_done
8 libble_app.a ble_lll_adv.c.o r_ble_lll_adv_aux_scannable_pdu_payload_len
9 libble_app.a ble_lll_adv.c.o r_ble_lll_adv_halt
10 libble_app.a ble_lll_adv.c.o r_ble_lll_adv_periodic_schedule_next
11 libble_app.a ble_lll_conn.c.o r_ble_lll_conn_cth_flow_free_credit
12 libble_app.a ble_lll_conn.c.o r_ble_lll_conn_update_encryption
13 libble_app.a ble_lll_conn.c.o r_ble_lll_conn_set_slave_flow_control
14 libble_app.a ble_lll_conn.c.o r_ble_lll_init_rx_pkt_isr
15 libble_app.a ble_lll_conn.c.o r_ble_lll_conn_get_rx_mbuf
16 libble_app.a ble_lll_rfmgmt.c.o r_ble_lll_rfmgmt_enable
17 libble_app.a ble_lll_rfmgmt.c.o r_ble_lll_rfmgmt_timer_reschedule
18 libble_app.a ble_lll_rfmgmt.c.o r_ble_lll_rfmgmt_timer_exp
19 libble_app.a ble_lll_scan.c.o r_ble_lll_scan_targeta_is_matched
20 libble_app.a ble_lll_scan.c.o r_ble_lll_scan_rx_isr_on_legacy
21 libble_app.a ble_lll_scan.c.o r_ble_lll_scan_rx_isr_on_aux
22 libble_app.a ble_lll_scan.c.o r_ble_lll_scan_process_rsp_in_isr
23 libble_app.a ble_lll_scan.c.o r_ble_lll_scan_rx_pkt_isr
24 libble_app.a ble_lll_sched.c.o r_ble_lll_sched_execute_check
25 libble_app.a ble_lll_sync.c.o r_ble_lll_sync_event_start_cb
26 libble_app.a ble_phy.c.o r_ble_phy_set_rxhdr
27 libble_app.a ble_phy.c.o r_ble_phy_update_conn_sequence
28 libble_app.a ble_phy.c.o r_ble_phy_set_sequence_mode
29 libble_app.a ble_phy.c.o r_ble_phy_txpower_round
30 libble_app.a os_mempool.c.obj r_os_memblock_put
31 libbootloader_support.a bootloader_flash.c.obj bootloader_read_flash_id
32 libbootloader_support.a flash_encrypt.c.obj esp_flash_encryption_enabled
33 libbt.a bt_osi_mem.c.obj bt_osi_mem_calloc CONFIG_BT_ENABLED
34 libbt.a bt_osi_mem.c.obj bt_osi_mem_malloc CONFIG_BT_ENABLED
35 libbt.a bt_osi_mem.c.obj bt_osi_mem_malloc_internal CONFIG_BT_ENABLED
36 libbt.a bt_osi_mem.c.obj bt_osi_mem_free CONFIG_BT_ENABLED
37 libbt.a bt.c.obj esp_reset_rpa_moudle CONFIG_BT_ENABLED
38 libbt.a bt.c.obj osi_assert_wrapper CONFIG_BT_ENABLED
39 libbt.a bt.c.obj osi_random_wrapper CONFIG_BT_ENABLED
40 libbt.a nimble_port.c.obj nimble_port_run CONFIG_BT_NIMBLE_ENABLED
41 libbt.a nimble_port.c.obj nimble_port_get_dflt_eventq CONFIG_BT_NIMBLE_ENABLED
42 libbt.a npl_os_freertos.c.obj os_callout_timer_cb CONFIG_BT_ENABLED && !CONFIG_BT_NIMBLE_USE_ESP_TIMER
43 libbt.a npl_os_freertos.c.obj npl_freertos_event_run CONFIG_BT_ENABLED
44 libbt.a npl_os_freertos.c.obj npl_freertos_callout_stop CONFIG_BT_ENABLED
45 libbt.a npl_os_freertos.c.obj npl_freertos_time_get CONFIG_BT_ENABLED
46 libbt.a npl_os_freertos.c.obj npl_freertos_callout_reset CONFIG_BT_ENABLED
47 libbt.a npl_os_freertos.c.obj npl_freertos_callout_is_active CONFIG_BT_ENABLED
48 libbt.a npl_os_freertos.c.obj npl_freertos_callout_get_ticks CONFIG_BT_ENABLED
49 libbt.a npl_os_freertos.c.obj npl_freertos_callout_remaining_ticks CONFIG_BT_ENABLED
50 libbt.a npl_os_freertos.c.obj npl_freertos_time_delay CONFIG_BT_ENABLED
51 libbt.a npl_os_freertos.c.obj npl_freertos_eventq_is_empty CONFIG_BT_ENABLED
52 libbt.a npl_os_freertos.c.obj npl_freertos_mutex_pend CONFIG_BT_ENABLED
53 libbt.a npl_os_freertos.c.obj npl_freertos_mutex_release CONFIG_BT_ENABLED
54 libbt.a npl_os_freertos.c.obj npl_freertos_sem_init CONFIG_BT_ENABLED
55 libbt.a npl_os_freertos.c.obj npl_freertos_sem_pend CONFIG_BT_ENABLED
56 libbt.a npl_os_freertos.c.obj npl_freertos_sem_release CONFIG_BT_ENABLED
57 libbt.a npl_os_freertos.c.obj npl_freertos_callout_init CONFIG_BT_ENABLED
58 libbt.a npl_os_freertos.c.obj npl_freertos_callout_deinit CONFIG_BT_ENABLED
59 libbt.a npl_os_freertos.c.obj npl_freertos_event_is_queued CONFIG_BT_ENABLED
60 libbt.a npl_os_freertos.c.obj npl_freertos_event_get_arg CONFIG_BT_ENABLED
61 libbt.a npl_os_freertos.c.obj npl_freertos_time_ms_to_ticks32 CONFIG_BT_ENABLED
62 libbt.a npl_os_freertos.c.obj npl_freertos_time_ticks_to_ms32 CONFIG_BT_ENABLED
63 libbt.a npl_os_freertos.c.obj npl_freertos_hw_is_in_critical CONFIG_BT_ENABLED
64 libbt.a npl_os_freertos.c.obj npl_freertos_get_time_forever CONFIG_BT_ENABLED
65 libbt.a npl_os_freertos.c.obj npl_freertos_os_started CONFIG_BT_ENABLED
66 libbt.a npl_os_freertos.c.obj npl_freertos_get_current_task_id CONFIG_BT_ENABLED
67 libbt.a npl_os_freertos.c.obj npl_freertos_event_reset CONFIG_BT_ENABLED
68 libbt.a npl_os_freertos.c.obj npl_freertos_callout_mem_reset CONFIG_BT_ENABLED
69 libbt.a npl_os_freertos.c.obj npl_freertos_event_init CONFIG_BT_ENABLED
70 libbt.a npl_os_freertos.c.obj npl_freertos_sem_get_count CONFIG_BT_ENABLED
71 libbt.a npl_os_freertos.c.obj npl_freertos_eventq_remove CONFIG_BT_ENABLED
72 libbt.a npl_os_freertos.c.obj npl_freertos_hw_exit_critical CONFIG_BT_ENABLED
73 libbt.a npl_os_freertos.c.obj npl_freertos_mutex_init CONFIG_BT_ENABLED
74 libbt.a npl_os_freertos.c.obj npl_freertos_hw_enter_critical CONFIG_BT_ENABLED
75 libbt.a npl_os_freertos.c.obj npl_freertos_eventq_put CONFIG_BT_ENABLED
76 libbt.a npl_os_freertos.c.obj npl_freertos_eventq_get CONFIG_BT_ENABLED
77 libbt.a npl_os_freertos.c.obj npl_freertos_sem_deinit CONFIG_BT_ENABLED
78 libbt.a npl_os_freertos.c.obj npl_freertos_mutex_deinit CONFIG_BT_ENABLED
79 libbt.a npl_os_freertos.c.obj npl_freertos_eventq_deinit CONFIG_BT_ENABLED
80 libbt.a npl_os_freertos.c.obj npl_freertos_eventq_init CONFIG_BT_ENABLED
81 libbt.a npl_os_freertos.c.obj npl_freertos_event_deinit CONFIG_BT_ENABLED
82 libbt.a npl_os_freertos.c.obj npl_freertos_time_ticks_to_ms CONFIG_BT_ENABLED
83 libbt.a npl_os_freertos.c.obj npl_freertos_time_ms_to_ticks CONFIG_BT_ENABLED
84 libbt.a npl_os_freertos.c.obj npl_freertos_callout_set_arg CONFIG_BT_ENABLED
85 libbt.a npl_os_freertos.c.obj npl_freertos_event_set_arg CONFIG_BT_ENABLED
86 libbt.a npl_os_freertos.c.obj npl_freertos_eventq_put CONFIG_BT_ENABLED
87 libdriver.a gpio.c.obj gpio_intr_service
88 libesp_app_format.a esp_app_desc.c.obj esp_app_get_elf_sha256
89 libesp_hw_support.a cpu.c.obj esp_cpu_wait_for_intr
90 libesp_hw_support.a cpu.c.obj esp_cpu_reset
91 libesp_hw_support.a esp_clk.c.obj esp_clk_cpu_freq
92 libesp_hw_support.a esp_clk.c.obj esp_clk_apb_freq
93 libesp_hw_support.a esp_clk.c.obj esp_clk_xtal_freq
94 libesp_hw_support.a esp_memory_utils.c.obj esp_ptr_byte_accessible
95 libesp_hw_support.a hw_random.c.obj esp_random
96 libesp_hw_support.a intr_alloc.c.obj shared_intr_isr
97 libesp_hw_support.a intr_alloc.c.obj esp_intr_noniram_disable
98 libesp_hw_support.a intr_alloc.c.obj esp_intr_noniram_enable
99 libesp_hw_support.a intr_alloc.c.obj esp_intr_enable
100 libesp_hw_support.a intr_alloc.c.obj esp_intr_disable
101 libesp_hw_support.a periph_ctrl.c.obj wifi_bt_common_module_enable
102 libesp_hw_support.a periph_ctrl.c.obj wifi_bt_common_module_disable
103 libesp_hw_support.a regi2c_ctrl.c.obj regi2c_ctrl_read_reg
104 libesp_hw_support.a regi2c_ctrl.c.obj regi2c_ctrl_read_reg_mask
105 libesp_hw_support.a regi2c_ctrl.c.obj regi2c_ctrl_write_reg
106 libesp_hw_support.a regi2c_ctrl.c.obj regi2c_ctrl_write_reg_mask
107 libesp_hw_support.a regi2c_ctrl.c.obj regi2c_enter_critical
108 libesp_hw_support.a regi2c_ctrl.c.obj regi2c_exit_critical
109 libesp_hw_support.a regi2c_ctrl.c.obj regi2c_analog_cali_reg_read
110 libesp_hw_support.a regi2c_ctrl.c.obj regi2c_analog_cali_reg_write
111 libesp_hw_support.a rtc_clk.c.obj rtc_clk_32k_enable_external
112 libesp_hw_support.a rtc_clk.c.obj rtc_clk_fast_src_set
113 libesp_hw_support.a rtc_clk.c.obj rtc_clk_slow_freq_get_hz
114 libesp_hw_support.a rtc_clk.c.obj rtc_clk_slow_src_get
115 libesp_hw_support.a rtc_clk.c.obj rtc_clk_slow_src_set
116 libesp_hw_support.a rtc_clk.c.obj rtc_dig_clk8m_disable
117 libesp_hw_support.a rtc_clk.c.obj rtc_clk_cpu_freq_set_config_fast
118 libesp_hw_support.a rtc_clk.c.obj rtc_clk_8m_enable
119 libesp_hw_support.a rtc_clk.c.obj rtc_clk_8md256_enabled
120 libesp_hw_support.a rtc_clk.c.obj rtc_clk_bbpll_configure
121 libesp_hw_support.a rtc_clk.c.obj rtc_clk_bbpll_enable
122 libesp_hw_support.a rtc_clk.c.obj rtc_clk_cpu_freq_get_config
123 libesp_hw_support.a rtc_clk.c.obj rtc_clk_cpu_freq_mhz_to_config
124 libesp_hw_support.a rtc_clk.c.obj rtc_clk_cpu_freq_set_config
125 libesp_hw_support.a rtc_clk.c.obj rtc_clk_cpu_freq_to_8m
126 libesp_hw_support.a rtc_clk.c.obj rtc_clk_cpu_freq_to_pll_mhz
127 libesp_hw_support.a rtc_clk.c.obj rtc_clk_cpu_freq_set_xtal
128 libesp_hw_support.a rtc_clk.c.obj rtc_clk_xtal_freq_get
129 libesp_hw_support.a rtc_clk.c.obj rtc_clk_cpu_freq_to_xtal
130 libesp_hw_support.a rtc_clk.c.obj rtc_clk_bbpll_disable
131 libesp_hw_support.a rtc_clk.c.obj rtc_clk_apb_freq_update
132 libesp_hw_support.a rtc_clk.c.obj clk_ll_rtc_slow_get_src FALSE
133 libesp_hw_support.a rtc_init.c.obj rtc_vddsdio_set_config
134 libesp_hw_support.a rtc_module.c.obj rtc_isr
135 libesp_hw_support.a rtc_module.c.obj rtc_isr_noniram_disable
136 libesp_hw_support.a rtc_module.c.obj rtc_isr_noniram_enable
137 libesp_hw_support.a rtc_sleep.c.obj rtc_sleep_pu
138 libesp_hw_support.a rtc_sleep.c.obj rtc_sleep_finish
139 libesp_hw_support.a rtc_sleep.c.obj rtc_sleep_get_default_config
140 libesp_hw_support.a rtc_sleep.c.obj rtc_sleep_init
141 libesp_hw_support.a rtc_sleep.c.obj rtc_sleep_low_init
142 libesp_hw_support.a rtc_sleep.c.obj rtc_sleep_start
143 libesp_hw_support.a rtc_time.c.obj rtc_clk_cal
144 libesp_hw_support.a rtc_time.c.obj rtc_clk_cal_internal
145 libesp_hw_support.a rtc_time.c.obj rtc_time_get
146 libesp_hw_support.a rtc_time.c.obj rtc_time_us_to_slowclk
147 libesp_hw_support.a rtc_time.c.obj rtc_time_slowclk_to_us
148 libesp_hw_support.a sleep_modes.c.obj periph_ll_periph_enabled
149 libesp_hw_support.a sleep_modes.c.obj flush_uarts
150 libesp_hw_support.a sleep_modes.c.obj suspend_uarts
151 libesp_hw_support.a sleep_modes.c.obj resume_uarts
152 libesp_hw_support.a sleep_modes.c.obj esp_sleep_start
153 libesp_hw_support.a sleep_modes.c.obj esp_deep_sleep_start
154 libesp_hw_support.a sleep_modes.c.obj esp_light_sleep_inner
155 libesp_phy.a phy_init.c.obj esp_phy_common_clock_enable
156 libesp_phy.a phy_init.c.obj esp_phy_common_clock_disable
157 libesp_phy.a phy_init.c.obj esp_wifi_bt_power_domain_on
158 libesp_phy.a phy_override.c.obj phy_i2c_enter_critical
159 libesp_phy.a phy_override.c.obj phy_i2c_exit_critical
160 libesp_pm.a pm_locks.c.obj esp_pm_lock_acquire
161 libesp_pm.a pm_locks.c.obj esp_pm_lock_release
162 libesp_pm.a pm_impl.c.obj get_lowest_allowed_mode
163 libesp_pm.a pm_impl.c.obj esp_pm_impl_switch_mode
164 libesp_pm.a pm_impl.c.obj on_freq_update
165 libesp_pm.a pm_impl.c.obj vApplicationSleep CONFIG_FREERTOS_USE_TICKLESS_IDLE
166 libesp_pm.a pm_impl.c.obj do_switch
167 libesp_ringbuf.a ringbuf.c.obj prvCheckItemAvail
168 libesp_ringbuf.a ringbuf.c.obj prvGetFreeSize
169 libesp_ringbuf.a ringbuf.c.obj prvReceiveGenericFromISR
170 libesp_ringbuf.a ringbuf.c.obj xRingbufferGetMaxItemSize
171 libesp_rom.a esp_rom_systimer.c.obj systimer_hal_init
172 libesp_rom.a esp_rom_systimer.c.obj systimer_hal_set_alarm_period
173 libesp_rom.a esp_rom_systimer.c.obj systimer_hal_set_alarm_target
174 libesp_rom.a esp_rom_systimer.c.obj systimer_hal_set_tick_rate_ops
175 libesp_rom.a esp_rom_uart.c.obj esp_rom_uart_set_clock_baudrate
176 libesp_system.a brownout.c.obj rtc_brownout_isr_handler
177 libesp_system.a cache_err_int.c.obj esp_cache_err_get_cpuid
178 libesp_system.a cpu_start.c.obj call_start_cpu0
179 libesp_system.a crosscore_int.c.obj esp_crosscore_int_send
180 libesp_system.a crosscore_int.c.obj esp_crosscore_int_send_yield
181 libesp_system.a esp_system.c.obj esp_restart
182 libesp_system.a esp_system.c.obj esp_system_abort
183 libesp_system.a reset_reason.c.obj esp_reset_reason_set_hint
184 libesp_system.a reset_reason.c.obj esp_reset_reason_get_hint
185 libesp_system.a ubsan.c.obj __ubsan_include
186 libesp_timer.a esp_timer.c.obj esp_timer_get_next_alarm_for_wake_up
187 libesp_timer.a esp_timer.c.obj timer_list_unlock !CONFIG_ESP_TIMER_SUPPORTS_ISR_DISPATCH_METHOD
188 libesp_timer.a esp_timer.c.obj timer_list_lock !CONFIG_ESP_TIMER_SUPPORTS_ISR_DISPATCH_METHOD
189 libesp_timer.a esp_timer.c.obj timer_armed
190 libesp_timer.a esp_timer.c.obj timer_remove
191 libesp_timer.a esp_timer.c.obj timer_insert !CONFIG_ESP_TIMER_SUPPORTS_ISR_DISPATCH_METHOD
192 libesp_timer.a esp_timer.c.obj esp_timer_start_once
193 libesp_timer.a esp_timer.c.obj esp_timer_start_periodic
194 libesp_timer.a esp_timer.c.obj esp_timer_stop
195 libesp_timer.a esp_timer.c.obj esp_timer_get_expiry_time
196 libesp_timer.a esp_timer_impl_systimer.c.obj esp_timer_impl_get_time !CONFIG_ESP_TIMER_SUPPORTS_ISR_DISPATCH_METHOD
197 libesp_timer.a esp_timer_impl_systimer.c.obj esp_timer_impl_set_alarm_id !CONFIG_ESP_TIMER_SUPPORTS_ISR_DISPATCH_METHOD
198 libesp_timer.a esp_timer_impl_systimer.c.obj esp_timer_impl_update_apb_freq
199 libesp_timer.a esp_timer_impl_systimer.c.obj esp_timer_impl_get_min_period_us
200 libesp_timer.a ets_timer_legacy.c.obj timer_initialized
201 libesp_timer.a ets_timer_legacy.c.obj ets_timer_arm_us
202 libesp_timer.a ets_timer_legacy.c.obj ets_timer_arm
203 libesp_timer.a ets_timer_legacy.c.obj ets_timer_disarm
204 libesp_timer.a system_time.c.obj esp_system_get_time
205 libesp_wifi.a esp_adapter.c.obj semphr_take_from_isr_wrapper
206 libesp_wifi.a esp_adapter.c.obj wifi_realloc
207 libesp_wifi.a esp_adapter.c.obj coex_event_duration_get_wrapper
208 libesp_wifi.a esp_adapter.c.obj coex_schm_interval_set_wrapper
209 libesp_wifi.a esp_adapter.c.obj esp_empty_wrapper
210 libesp_wifi.a esp_adapter.c.obj wifi_calloc
211 libesp_wifi.a esp_adapter.c.obj wifi_zalloc_wrapper
212 libesp_wifi.a esp_adapter.c.obj env_is_chip_wrapper
213 libesp_wifi.a esp_adapter.c.obj is_from_isr_wrapper
214 libesp_wifi.a esp_adapter.c.obj semphr_give_from_isr_wrapper
215 libesp_wifi.a esp_adapter.c.obj mutex_lock_wrapper
216 libesp_wifi.a esp_adapter.c.obj mutex_unlock_wrapper
217 libesp_wifi.a esp_adapter.c.obj task_ms_to_tick_wrapper
218 libesp_wifi.a esp_adapter.c.obj wifi_apb80m_request_wrapper
219 libesp_wifi.a esp_adapter.c.obj wifi_apb80m_release_wrapper
220 libesp_wifi.a esp_adapter.c.obj timer_arm_wrapper
221 libesp_wifi.a esp_adapter.c.obj wifi_malloc
222 libesp_wifi.a esp_adapter.c.obj timer_disarm_wrapper
223 libesp_wifi.a esp_adapter.c.obj timer_arm_us_wrapper
224 libesp_wifi.a esp_adapter.c.obj wifi_rtc_enable_iso_wrapper
225 libesp_wifi.a esp_adapter.c.obj wifi_rtc_disable_iso_wrapper
226 libesp_wifi.a esp_adapter.c.obj malloc_internal_wrapper
227 libesp_wifi.a esp_adapter.c.obj realloc_internal_wrapper
228 libesp_wifi.a esp_adapter.c.obj calloc_internal_wrapper
229 libesp_wifi.a esp_adapter.c.obj zalloc_internal_wrapper
230 libesp_wifi.a esp_adapter.c.obj coex_status_get_wrapper
231 libesp_wifi.a esp_adapter.c.obj coex_wifi_release_wrapper
232 libfreertos.a list.c.obj uxListRemove FALSE
233 libfreertos.a list.c.obj vListInitialise CONFIG_FREERTOS_PLACE_FUNCTIONS_INTO_FLASH
234 libfreertos.a list.c.obj vListInitialiseItem CONFIG_FREERTOS_PLACE_FUNCTIONS_INTO_FLASH
235 libfreertos.a list.c.obj vListInsert CONFIG_FREERTOS_PLACE_FUNCTIONS_INTO_FLASH
236 libfreertos.a list.c.obj vListInsertEnd FALSE
237 libfreertos.a port.c.obj vApplicationStackOverflowHook FALSE
238 libfreertos.a port.c.obj vPortYieldOtherCore FALSE
239 libfreertos.a port.c.obj vPortYield
240 libfreertos.a port_common.c.obj xPortcheckValidStackMem
241 libfreertos.a port_common.c.obj vApplicationGetTimerTaskMemory
242 libfreertos.a port_common.c.obj esp_startup_start_app_common
243 libfreertos.a port_common.c.obj xPortCheckValidTCBMem
244 libfreertos.a port_common.c.obj vApplicationGetIdleTaskMemory
245 libfreertos.a port_systick.c.obj vPortSetupTimer
246 libfreertos.a port_systick.c.obj xPortSysTickHandler FALSE
247 libfreertos.a queue.c.obj prvCopyDataFromQueue
248 libfreertos.a queue.c.obj prvGetDisinheritPriorityAfterTimeout
249 libfreertos.a queue.c.obj prvIsQueueEmpty
250 libfreertos.a queue.c.obj prvNotifyQueueSetContainer
251 libfreertos.a queue.c.obj xQueueReceive
252 libfreertos.a queue.c.obj prvUnlockQueue
253 libfreertos.a queue.c.obj xQueueSemaphoreTake
254 libfreertos.a queue.c.obj xQueueReceiveFromISR
255 libfreertos.a queue.c.obj uxQueueMessagesWaitingFromISR
256 libfreertos.a queue.c.obj xQueueIsQueueEmptyFromISR
257 libfreertos.a queue.c.obj xQueueGiveFromISR
258 libfreertos.a tasks.c.obj __getreent CONFIG_FREERTOS_PLACE_FUNCTIONS_INTO_FLASH
259 libfreertos.a tasks.c.obj pcTaskGetName CONFIG_FREERTOS_PLACE_FUNCTIONS_INTO_FLASH
260 libfreertos.a tasks.c.obj prvAddCurrentTaskToDelayedList CONFIG_FREERTOS_PLACE_FUNCTIONS_INTO_FLASH
261 libfreertos.a tasks.c.obj prvDeleteTLS CONFIG_FREERTOS_PLACE_FUNCTIONS_INTO_FLASH
262 libfreertos.a tasks.c.obj pvTaskIncrementMutexHeldCount CONFIG_FREERTOS_PLACE_FUNCTIONS_INTO_FLASH
263 libfreertos.a tasks.c.obj taskSelectHighestPriorityTaskSMP FALSE
264 libfreertos.a tasks.c.obj taskYIELD_OTHER_CORE FALSE
265 libfreertos.a tasks.c.obj vTaskGetSnapshot CONFIG_FREERTOS_PLACE_SNAPSHOT_FUNS_INTO_FLASH
266 libfreertos.a tasks.c.obj vTaskInternalSetTimeOutState CONFIG_FREERTOS_PLACE_FUNCTIONS_INTO_FLASH
267 libfreertos.a tasks.c.obj vTaskPlaceOnEventList CONFIG_FREERTOS_PLACE_FUNCTIONS_INTO_FLASH
268 libfreertos.a tasks.c.obj vTaskPlaceOnEventListRestricted CONFIG_FREERTOS_PLACE_FUNCTIONS_INTO_FLASH
269 libfreertos.a tasks.c.obj vTaskPlaceOnUnorderedEventList CONFIG_FREERTOS_PLACE_FUNCTIONS_INTO_FLASH
270 libfreertos.a tasks.c.obj vTaskPriorityDisinheritAfterTimeout CONFIG_FREERTOS_PLACE_FUNCTIONS_INTO_FLASH
271 libfreertos.a tasks.c.obj vTaskReleaseEventListLock CONFIG_FREERTOS_PLACE_FUNCTIONS_INTO_FLASH
272 libfreertos.a tasks.c.obj vTaskTakeEventListLock CONFIG_FREERTOS_PLACE_FUNCTIONS_INTO_FLASH
273 libfreertos.a tasks.c.obj xTaskCheckForTimeOut CONFIG_FREERTOS_PLACE_FUNCTIONS_INTO_FLASH
274 libfreertos.a tasks.c.obj xTaskGetCurrentTaskHandle CONFIG_FREERTOS_PLACE_FUNCTIONS_INTO_FLASH
275 libfreertos.a tasks.c.obj xTaskGetSchedulerState CONFIG_FREERTOS_PLACE_FUNCTIONS_INTO_FLASH
276 libfreertos.a tasks.c.obj xTaskGetTickCount CONFIG_FREERTOS_PLACE_FUNCTIONS_INTO_FLASH
277 libfreertos.a tasks.c.obj xTaskPriorityDisinherit FALSE
278 libfreertos.a tasks.c.obj xTaskPriorityInherit CONFIG_FREERTOS_PLACE_FUNCTIONS_INTO_FLASH
279 libfreertos.a tasks.c.obj prvGetExpectedIdleTime FALSE
280 libfreertos.a tasks.c.obj vTaskStepTick FALSE
281 libhal.a brownout_hal.c.obj brownout_hal_intr_clear
282 libhal.a efuse_hal.c.obj efuse_hal_chip_revision
283 libhal.a efuse_hal.c.obj efuse_hal_get_major_chip_version
284 libhal.a efuse_hal.c.obj efuse_hal_get_minor_chip_version
285 libheap.a heap_caps.c.obj dram_alloc_to_iram_addr
286 libheap.a heap_caps.c.obj heap_caps_free
287 libheap.a heap_caps.c.obj heap_caps_realloc_base
288 libheap.a heap_caps.c.obj heap_caps_realloc
289 libheap.a heap_caps.c.obj heap_caps_calloc_base
290 libheap.a heap_caps.c.obj heap_caps_calloc
291 libheap.a heap_caps.c.obj heap_caps_malloc_base
292 libheap.a heap_caps.c.obj heap_caps_malloc
293 libheap.a heap_caps.c.obj heap_caps_malloc_default
294 libheap.a heap_caps.c.obj heap_caps_realloc_default
295 libheap.a heap_caps.c.obj find_containing_heap
296 libheap.a multi_heap.c.obj _multi_heap_lock
297 libheap.a multi_heap.c.obj multi_heap_in_rom_init
298 liblog.a log_freertos.c.obj esp_log_timestamp
299 liblog.a log_freertos.c.obj esp_log_impl_lock
300 liblog.a log_freertos.c.obj esp_log_impl_unlock
301 liblog.a log_freertos.c.obj esp_log_impl_lock_timeout
302 liblog.a log_freertos.c.obj esp_log_early_timestamp
303 liblog.a log.c.obj esp_log_write
304 libmbedcrypto.a esp_mem.c.obj esp_mbedtls_mem_calloc !CONFIG_MBEDTLS_CUSTOM_MEM_ALLOC
305 libmbedcrypto.a esp_mem.c.obj esp_mbedtls_mem_free !CONFIG_MBEDTLS_CUSTOM_MEM_ALLOC
306 libnewlib.a assert.c.obj __assert_func
307 libnewlib.a assert.c.obj newlib_include_assert_impl
308 libnewlib.a heap.c.obj _calloc_r
309 libnewlib.a heap.c.obj _free_r
310 libnewlib.a heap.c.obj _malloc_r
311 libnewlib.a heap.c.obj _realloc_r
312 libnewlib.a heap.c.obj calloc
313 libnewlib.a heap.c.obj cfree
314 libnewlib.a heap.c.obj free
315 libnewlib.a heap.c.obj malloc
316 libnewlib.a heap.c.obj newlib_include_heap_impl
317 libnewlib.a heap.c.obj realloc
318 libnewlib.a locks.c.obj _lock_try_acquire_recursive
319 libnewlib.a locks.c.obj lock_release_generic
320 libnewlib.a locks.c.obj _lock_release
321 libnewlib.a locks.c.obj _lock_release_recursive
322 libnewlib.a locks.c.obj __retarget_lock_init
323 libnewlib.a locks.c.obj __retarget_lock_init_recursive
324 libnewlib.a locks.c.obj __retarget_lock_close
325 libnewlib.a locks.c.obj __retarget_lock_close_recursive
326 libnewlib.a locks.c.obj check_lock_nonzero
327 libnewlib.a locks.c.obj __retarget_lock_acquire
328 libnewlib.a locks.c.obj lock_init_generic
329 libnewlib.a locks.c.obj __retarget_lock_acquire_recursive
330 libnewlib.a locks.c.obj __retarget_lock_try_acquire
331 libnewlib.a locks.c.obj __retarget_lock_try_acquire_recursive
332 libnewlib.a locks.c.obj __retarget_lock_release
333 libnewlib.a locks.c.obj __retarget_lock_release_recursive
334 libnewlib.a locks.c.obj _lock_close
335 libnewlib.a locks.c.obj lock_acquire_generic
336 libnewlib.a locks.c.obj _lock_acquire
337 libnewlib.a locks.c.obj _lock_acquire_recursive
338 libnewlib.a locks.c.obj _lock_try_acquire
339 libnewlib.a reent_init.c.obj esp_reent_init
340 libnewlib.a time.c.obj _times_r
341 libnewlib.a time.c.obj _gettimeofday_r
342 libpp.a pp_debug.o wifi_gpio_debug
343 libpthread.a pthread.c.obj pthread_mutex_lock_internal
344 libpthread.a pthread.c.obj pthread_mutex_lock
345 libpthread.a pthread.c.obj pthread_mutex_unlock
346 libriscv.a interrupt.c.obj intr_handler_get
347 libriscv.a interrupt.c.obj intr_handler_set
348 libriscv.a interrupt.c.obj intr_matrix_route
349 libspi_flash.a flash_brownout_hook.c.obj spi_flash_needs_reset_check FALSE
350 libspi_flash.a flash_brownout_hook.c.obj spi_flash_set_erasing_flag FALSE
351 libspi_flash.a flash_ops.c.obj spi_flash_guard_set CONFIG_SPI_FLASH_ROM_IMPL
352 libspi_flash.a flash_ops.c.obj spi_flash_malloc_internal CONFIG_SPI_FLASH_ROM_IMPL
353 libspi_flash.a flash_ops.c.obj spi_flash_rom_impl_init CONFIG_SPI_FLASH_ROM_IMPL
354 libspi_flash.a flash_ops.c.obj esp_mspi_pin_init CONFIG_SPI_FLASH_ROM_IMPL
355 libspi_flash.a flash_ops.c.obj spi_flash_init_chip_state CONFIG_SPI_FLASH_ROM_IMPL
356 libspi_flash.a spi_flash_os_func_app.c.obj delay_us CONFIG_SPI_FLASH_ROM_IMPL
357 libspi_flash.a spi_flash_os_func_app.c.obj get_buffer_malloc CONFIG_SPI_FLASH_ROM_IMPL
358 libspi_flash.a spi_flash_os_func_app.c.obj release_buffer_malloc CONFIG_SPI_FLASH_ROM_IMPL
359 libspi_flash.a spi_flash_os_func_app.c.obj main_flash_region_protected CONFIG_SPI_FLASH_ROM_IMPL
360 libspi_flash.a spi_flash_os_func_app.c.obj main_flash_op_status CONFIG_SPI_FLASH_ROM_IMPL
361 libspi_flash.a spi_flash_os_func_app.c.obj spi1_flash_os_check_yield CONFIG_SPI_FLASH_ROM_IMPL
362 libspi_flash.a spi_flash_os_func_app.c.obj spi1_flash_os_yield CONFIG_SPI_FLASH_ROM_IMPL
363 libspi_flash.a spi_flash_os_func_noos.c.obj start CONFIG_SPI_FLASH_ROM_IMPL
364 libspi_flash.a spi_flash_os_func_noos.c.obj end CONFIG_SPI_FLASH_ROM_IMPL
365 libspi_flash.a spi_flash_os_func_noos.c.obj delay_us CONFIG_SPI_FLASH_ROM_IMPL

View file

@ -0,0 +1,24 @@
library,path
libble_app.a,$IDF_PATH/components/bt/controller/lib_esp32c2/esp32c2-bt-lib/libble_app.a
libpp.a,$IDF_PATH/components/esp_wifi/lib/esp32c2/libpp.a
libbootloader_support.a,./esp-idf/bootloader_support/libbootloader_support.a
libbt.a,./esp-idf/bt/libbt.a
libdriver.a,./esp-idf/driver/libdriver.a
libesp_app_format.a,./esp-idf/esp_app_format/libesp_app_format.a
libesp_hw_support.a,./esp-idf/esp_hw_support/libesp_hw_support.a
libesp_phy.a,./esp-idf/esp_phy/libesp_phy.a
libesp_pm.a,./esp-idf/esp_pm/libesp_pm.a
libesp_ringbuf.a,./esp-idf/esp_ringbuf/libesp_ringbuf.a
libesp_rom.a,./esp-idf/esp_rom/libesp_rom.a
libesp_system.a,./esp-idf/esp_system/libesp_system.a
libesp_timer.a,./esp-idf/esp_timer/libesp_timer.a
libesp_wifi.a,./esp-idf/esp_wifi/libesp_wifi.a
libfreertos.a,./esp-idf/freertos/libfreertos.a
libhal.a,./esp-idf/hal/libhal.a
libheap.a,./esp-idf/heap/libheap.a
liblog.a,./esp-idf/log/liblog.a
libmbedcrypto.a,./esp-idf/mbedtls/mbedtls/library/libmbedcrypto.a
libnewlib.a,./esp-idf/newlib/libnewlib.a
libpthread.a,./esp-idf/pthread/libpthread.a
libriscv.a,./esp-idf/riscv/libriscv.a
libspi_flash.a,./esp-idf/spi_flash/libspi_flash.a
1 library path
2 libble_app.a $IDF_PATH/components/bt/controller/lib_esp32c2/esp32c2-bt-lib/libble_app.a
3 libpp.a $IDF_PATH/components/esp_wifi/lib/esp32c2/libpp.a
4 libbootloader_support.a ./esp-idf/bootloader_support/libbootloader_support.a
5 libbt.a ./esp-idf/bt/libbt.a
6 libdriver.a ./esp-idf/driver/libdriver.a
7 libesp_app_format.a ./esp-idf/esp_app_format/libesp_app_format.a
8 libesp_hw_support.a ./esp-idf/esp_hw_support/libesp_hw_support.a
9 libesp_phy.a ./esp-idf/esp_phy/libesp_phy.a
10 libesp_pm.a ./esp-idf/esp_pm/libesp_pm.a
11 libesp_ringbuf.a ./esp-idf/esp_ringbuf/libesp_ringbuf.a
12 libesp_rom.a ./esp-idf/esp_rom/libesp_rom.a
13 libesp_system.a ./esp-idf/esp_system/libesp_system.a
14 libesp_timer.a ./esp-idf/esp_timer/libesp_timer.a
15 libesp_wifi.a ./esp-idf/esp_wifi/libesp_wifi.a
16 libfreertos.a ./esp-idf/freertos/libfreertos.a
17 libhal.a ./esp-idf/hal/libhal.a
18 libheap.a ./esp-idf/heap/libheap.a
19 liblog.a ./esp-idf/log/liblog.a
20 libmbedcrypto.a ./esp-idf/mbedtls/mbedtls/library/libmbedcrypto.a
21 libnewlib.a ./esp-idf/newlib/libnewlib.a
22 libpthread.a ./esp-idf/pthread/libpthread.a
23 libriscv.a ./esp-idf/riscv/libriscv.a
24 libspi_flash.a ./esp-idf/spi_flash/libspi_flash.a

View file

@ -0,0 +1,66 @@
library,object,path
libbootloader_support.a,bootloader_flash.c.obj,esp-idf/bootloader_support/CMakeFiles/__idf_bootloader_support.dir/bootloader_flash/src/bootloader_flash.c.obj
libbootloader_support.a,flash_encrypt.c.obj,esp-idf/bootloader_support/CMakeFiles/__idf_bootloader_support.dir/src/flash_encrypt.c.obj
libbt.a,bt_osi_mem.c.obj,esp-idf/bt/CMakeFiles/__idf_bt.dir/porting/mem/bt_osi_mem.c.obj
libbt.a,bt.c.obj,esp-idf/bt/CMakeFiles/__idf_bt.dir/controller/esp32c2/bt.c.obj
libbt.a,npl_os_freertos.c.obj,esp-idf/bt/CMakeFiles/__idf_bt.dir/porting/npl/freertos/src/npl_os_freertos.c.obj
libbt.a,nimble_port.c.obj,esp-idf/bt/CMakeFiles/__idf_bt.dir/host/nimble/nimble/porting/nimble/src/nimble_port.c.obj
libdriver.a,gpio.c.obj,esp-idf/driver/CMakeFiles/__idf_driver.dir/gpio/gpio.c.obj
libesp_app_format.a,esp_app_desc.c.obj,esp-idf/esp_app_format/CMakeFiles/__idf_esp_app_format.dir/esp_app_desc.c.obj
libesp_hw_support.a,cpu.c.obj,esp-idf/esp_hw_support/CMakeFiles/__idf_esp_hw_support.dir/cpu.c.obj
libesp_hw_support.a,esp_clk.c.obj,esp-idf/esp_hw_support/CMakeFiles/__idf_esp_hw_support.dir/esp_clk.c.obj
libesp_hw_support.a,esp_memory_utils.c.obj,esp-idf/esp_hw_support/CMakeFiles/__idf_esp_hw_support.dir/esp_memory_utils.c.obj
libesp_hw_support.a,hw_random.c.obj,esp-idf/esp_hw_support/CMakeFiles/__idf_esp_hw_support.dir/hw_random.c.obj
libesp_hw_support.a,intr_alloc.c.obj,esp-idf/esp_hw_support/CMakeFiles/__idf_esp_hw_support.dir/intr_alloc.c.obj
libesp_hw_support.a,periph_ctrl.c.obj,esp-idf/esp_hw_support/CMakeFiles/__idf_esp_hw_support.dir/periph_ctrl.c.obj
libesp_hw_support.a,regi2c_ctrl.c.obj,esp-idf/esp_hw_support/CMakeFiles/__idf_esp_hw_support.dir/regi2c_ctrl.c.obj
libesp_hw_support.a,rtc_clk.c.obj,esp-idf/esp_hw_support/CMakeFiles/__idf_esp_hw_support.dir/port/esp32c2/rtc_clk.c.obj
libesp_hw_support.a,rtc_init.c.obj,esp-idf/esp_hw_support/CMakeFiles/__idf_esp_hw_support.dir/port/esp32c2/rtc_init.c.obj
libesp_hw_support.a,rtc_module.c.obj,esp-idf/esp_hw_support/CMakeFiles/__idf_esp_hw_support.dir/rtc_module.c.obj
libesp_hw_support.a,rtc_sleep.c.obj,esp-idf/esp_hw_support/CMakeFiles/__idf_esp_hw_support.dir/port/esp32c2/rtc_sleep.c.obj
libesp_hw_support.a,rtc_time.c.obj,esp-idf/esp_hw_support/CMakeFiles/__idf_esp_hw_support.dir/port/esp32c2/rtc_time.c.obj
libesp_hw_support.a,sleep_modes.c.obj,esp-idf/esp_hw_support/CMakeFiles/__idf_esp_hw_support.dir/sleep_modes.c.obj
libesp_phy.a,phy_init.c.obj,esp-idf/esp_phy/CMakeFiles/__idf_esp_phy.dir/src/phy_init.c.obj
libesp_phy.a,phy_override.c.obj,esp-idf/esp_phy/CMakeFiles/__idf_esp_phy.dir/src/phy_override.c.obj
libesp_pm.a,pm_locks.c.obj,esp-idf/esp_pm/CMakeFiles/__idf_esp_pm.dir/pm_locks.c.obj
libesp_pm.a,pm_impl.c.obj,esp-idf/esp_pm/CMakeFiles/__idf_esp_pm.dir/pm_impl.c.obj
libesp_ringbuf.a,ringbuf.c.obj,esp-idf/esp_ringbuf/CMakeFiles/__idf_esp_ringbuf.dir/ringbuf.c.obj
libesp_rom.a,esp_rom_systimer.c.obj,esp-idf/esp_rom/CMakeFiles/__idf_esp_rom.dir/patches/esp_rom_systimer.c.obj
libesp_rom.a,esp_rom_uart.c.obj,esp-idf/esp_rom/CMakeFiles/__idf_esp_rom.dir/patches/esp_rom_uart.c.obj
libesp_system.a,brownout.c.obj,esp-idf/esp_system/CMakeFiles/__idf_esp_system.dir/port/brownout.c.obj
libesp_system.a,cache_err_int.c.obj,esp-idf/esp_system/CMakeFiles/__idf_esp_system.dir/port/soc/esp32c2/cache_err_int.c.obj
libesp_system.a,cpu_start.c.obj,esp-idf/esp_system/CMakeFiles/__idf_esp_system.dir/port/cpu_start.c.obj
libesp_system.a,crosscore_int.c.obj,esp-idf/esp_system/CMakeFiles/__idf_esp_system.dir/crosscore_int.c.obj
libesp_system.a,esp_system.c.obj,esp-idf/esp_system/CMakeFiles/__idf_esp_system.dir/esp_system.c.obj
libesp_system.a,reset_reason.c.obj,esp-idf/esp_system/CMakeFiles/__idf_esp_system.dir/port/soc/esp32c2/reset_reason.c.obj
libesp_system.a,ubsan.c.obj,esp-idf/esp_system/CMakeFiles/__idf_esp_system.dir/ubsan.c.obj
libesp_timer.a,esp_timer.c.obj,esp-idf/esp_timer/CMakeFiles/__idf_esp_timer.dir/src/esp_timer.c.obj
libesp_timer.a,esp_timer_impl_systimer.c.obj,esp-idf/esp_timer/CMakeFiles/__idf_esp_timer.dir/src/esp_timer_impl_systimer.c.obj
libesp_timer.a,ets_timer_legacy.c.obj,esp-idf/esp_timer/CMakeFiles/__idf_esp_timer.dir/src/ets_timer_legacy.c.obj
libesp_timer.a,system_time.c.obj,esp-idf/esp_timer/CMakeFiles/__idf_esp_timer.dir/src/system_time.c.obj
libesp_wifi.a,esp_adapter.c.obj,esp-idf/esp_wifi/CMakeFiles/__idf_esp_wifi.dir/esp32c2/esp_adapter.c.obj
libfreertos.a,list.c.obj,esp-idf/freertos/CMakeFiles/__idf_freertos.dir/FreeRTOS-Kernel/list.c.obj
libfreertos.a,port.c.obj,esp-idf/freertos/CMakeFiles/__idf_freertos.dir/FreeRTOS-Kernel/portable/riscv/port.c.obj
libfreertos.a,port_common.c.obj,esp-idf/freertos/CMakeFiles/__idf_freertos.dir/FreeRTOS-Kernel/portable/port_common.c.obj
libfreertos.a,port_systick.c.obj,esp-idf/freertos/CMakeFiles/__idf_freertos.dir/FreeRTOS-Kernel/portable/port_systick.c.obj
libfreertos.a,queue.c.obj,esp-idf/freertos/CMakeFiles/__idf_freertos.dir/FreeRTOS-Kernel/queue.c.obj
libfreertos.a,tasks.c.obj,esp-idf/freertos/CMakeFiles/__idf_freertos.dir/FreeRTOS-Kernel/tasks.c.obj
libhal.a,brownout_hal.c.obj,esp-idf/hal/CMakeFiles/__idf_hal.dir/esp32c2/brownout_hal.c.obj
libhal.a,efuse_hal.c.obj,esp-idf/hal/CMakeFiles/__idf_hal.dir/efuse_hal.c.obj
libhal.a,efuse_hal.c.obj,esp-idf/hal/CMakeFiles/__idf_hal.dir/esp32c2/efuse_hal.c.obj
libheap.a,heap_caps.c.obj,esp-idf/heap/CMakeFiles/__idf_heap.dir/heap_caps.c.obj
libheap.a,multi_heap.c.obj,./esp-idf/heap/CMakeFiles/__idf_heap.dir/multi_heap.c.obj
liblog.a,log_freertos.c.obj,esp-idf/log/CMakeFiles/__idf_log.dir/log_freertos.c.obj
liblog.a,log.c.obj,esp-idf/log/CMakeFiles/__idf_log.dir/log.c.obj
libmbedcrypto.a,esp_mem.c.obj,esp-idf/mbedtls/mbedtls/library/CMakeFiles/mbedcrypto.dir/$IDF_PATH/components/mbedtls/port/esp_mem.c.obj
libnewlib.a,assert.c.obj,esp-idf/newlib/CMakeFiles/__idf_newlib.dir/assert.c.obj
libnewlib.a,heap.c.obj,esp-idf/newlib/CMakeFiles/__idf_newlib.dir/heap.c.obj
libnewlib.a,locks.c.obj,esp-idf/newlib/CMakeFiles/__idf_newlib.dir/locks.c.obj
libnewlib.a,reent_init.c.obj,esp-idf/newlib/CMakeFiles/__idf_newlib.dir/reent_init.c.obj
libnewlib.a,time.c.obj,esp-idf/newlib/CMakeFiles/__idf_newlib.dir/time.c.obj
libpthread.a,pthread.c.obj,esp-idf/pthread/CMakeFiles/__idf_pthread.dir/pthread.c.obj
libriscv.a,interrupt.c.obj,esp-idf/riscv/CMakeFiles/__idf_riscv.dir/interrupt.c.obj
libspi_flash.a,flash_brownout_hook.c.obj,esp-idf/spi_flash/CMakeFiles/__idf_spi_flash.dir/flash_brownout_hook.c.obj
libspi_flash.a,flash_ops.c.obj,esp-idf/spi_flash/CMakeFiles/__idf_spi_flash.dir/flash_ops.c.obj
libspi_flash.a,spi_flash_os_func_app.c.obj,esp-idf/spi_flash/CMakeFiles/__idf_spi_flash.dir/spi_flash_os_func_app.c.obj
libspi_flash.a,spi_flash_os_func_noos.c.obj,esp-idf/spi_flash/CMakeFiles/__idf_spi_flash.dir/spi_flash_os_func_noos.c.obj
1 library object path
2 libbootloader_support.a bootloader_flash.c.obj esp-idf/bootloader_support/CMakeFiles/__idf_bootloader_support.dir/bootloader_flash/src/bootloader_flash.c.obj
3 libbootloader_support.a flash_encrypt.c.obj esp-idf/bootloader_support/CMakeFiles/__idf_bootloader_support.dir/src/flash_encrypt.c.obj
4 libbt.a bt_osi_mem.c.obj esp-idf/bt/CMakeFiles/__idf_bt.dir/porting/mem/bt_osi_mem.c.obj
5 libbt.a bt.c.obj esp-idf/bt/CMakeFiles/__idf_bt.dir/controller/esp32c2/bt.c.obj
6 libbt.a npl_os_freertos.c.obj esp-idf/bt/CMakeFiles/__idf_bt.dir/porting/npl/freertos/src/npl_os_freertos.c.obj
7 libbt.a nimble_port.c.obj esp-idf/bt/CMakeFiles/__idf_bt.dir/host/nimble/nimble/porting/nimble/src/nimble_port.c.obj
8 libdriver.a gpio.c.obj esp-idf/driver/CMakeFiles/__idf_driver.dir/gpio/gpio.c.obj
9 libesp_app_format.a esp_app_desc.c.obj esp-idf/esp_app_format/CMakeFiles/__idf_esp_app_format.dir/esp_app_desc.c.obj
10 libesp_hw_support.a cpu.c.obj esp-idf/esp_hw_support/CMakeFiles/__idf_esp_hw_support.dir/cpu.c.obj
11 libesp_hw_support.a esp_clk.c.obj esp-idf/esp_hw_support/CMakeFiles/__idf_esp_hw_support.dir/esp_clk.c.obj
12 libesp_hw_support.a esp_memory_utils.c.obj esp-idf/esp_hw_support/CMakeFiles/__idf_esp_hw_support.dir/esp_memory_utils.c.obj
13 libesp_hw_support.a hw_random.c.obj esp-idf/esp_hw_support/CMakeFiles/__idf_esp_hw_support.dir/hw_random.c.obj
14 libesp_hw_support.a intr_alloc.c.obj esp-idf/esp_hw_support/CMakeFiles/__idf_esp_hw_support.dir/intr_alloc.c.obj
15 libesp_hw_support.a periph_ctrl.c.obj esp-idf/esp_hw_support/CMakeFiles/__idf_esp_hw_support.dir/periph_ctrl.c.obj
16 libesp_hw_support.a regi2c_ctrl.c.obj esp-idf/esp_hw_support/CMakeFiles/__idf_esp_hw_support.dir/regi2c_ctrl.c.obj
17 libesp_hw_support.a rtc_clk.c.obj esp-idf/esp_hw_support/CMakeFiles/__idf_esp_hw_support.dir/port/esp32c2/rtc_clk.c.obj
18 libesp_hw_support.a rtc_init.c.obj esp-idf/esp_hw_support/CMakeFiles/__idf_esp_hw_support.dir/port/esp32c2/rtc_init.c.obj
19 libesp_hw_support.a rtc_module.c.obj esp-idf/esp_hw_support/CMakeFiles/__idf_esp_hw_support.dir/rtc_module.c.obj
20 libesp_hw_support.a rtc_sleep.c.obj esp-idf/esp_hw_support/CMakeFiles/__idf_esp_hw_support.dir/port/esp32c2/rtc_sleep.c.obj
21 libesp_hw_support.a rtc_time.c.obj esp-idf/esp_hw_support/CMakeFiles/__idf_esp_hw_support.dir/port/esp32c2/rtc_time.c.obj
22 libesp_hw_support.a sleep_modes.c.obj esp-idf/esp_hw_support/CMakeFiles/__idf_esp_hw_support.dir/sleep_modes.c.obj
23 libesp_phy.a phy_init.c.obj esp-idf/esp_phy/CMakeFiles/__idf_esp_phy.dir/src/phy_init.c.obj
24 libesp_phy.a phy_override.c.obj esp-idf/esp_phy/CMakeFiles/__idf_esp_phy.dir/src/phy_override.c.obj
25 libesp_pm.a pm_locks.c.obj esp-idf/esp_pm/CMakeFiles/__idf_esp_pm.dir/pm_locks.c.obj
26 libesp_pm.a pm_impl.c.obj esp-idf/esp_pm/CMakeFiles/__idf_esp_pm.dir/pm_impl.c.obj
27 libesp_ringbuf.a ringbuf.c.obj esp-idf/esp_ringbuf/CMakeFiles/__idf_esp_ringbuf.dir/ringbuf.c.obj
28 libesp_rom.a esp_rom_systimer.c.obj esp-idf/esp_rom/CMakeFiles/__idf_esp_rom.dir/patches/esp_rom_systimer.c.obj
29 libesp_rom.a esp_rom_uart.c.obj esp-idf/esp_rom/CMakeFiles/__idf_esp_rom.dir/patches/esp_rom_uart.c.obj
30 libesp_system.a brownout.c.obj esp-idf/esp_system/CMakeFiles/__idf_esp_system.dir/port/brownout.c.obj
31 libesp_system.a cache_err_int.c.obj esp-idf/esp_system/CMakeFiles/__idf_esp_system.dir/port/soc/esp32c2/cache_err_int.c.obj
32 libesp_system.a cpu_start.c.obj esp-idf/esp_system/CMakeFiles/__idf_esp_system.dir/port/cpu_start.c.obj
33 libesp_system.a crosscore_int.c.obj esp-idf/esp_system/CMakeFiles/__idf_esp_system.dir/crosscore_int.c.obj
34 libesp_system.a esp_system.c.obj esp-idf/esp_system/CMakeFiles/__idf_esp_system.dir/esp_system.c.obj
35 libesp_system.a reset_reason.c.obj esp-idf/esp_system/CMakeFiles/__idf_esp_system.dir/port/soc/esp32c2/reset_reason.c.obj
36 libesp_system.a ubsan.c.obj esp-idf/esp_system/CMakeFiles/__idf_esp_system.dir/ubsan.c.obj
37 libesp_timer.a esp_timer.c.obj esp-idf/esp_timer/CMakeFiles/__idf_esp_timer.dir/src/esp_timer.c.obj
38 libesp_timer.a esp_timer_impl_systimer.c.obj esp-idf/esp_timer/CMakeFiles/__idf_esp_timer.dir/src/esp_timer_impl_systimer.c.obj
39 libesp_timer.a ets_timer_legacy.c.obj esp-idf/esp_timer/CMakeFiles/__idf_esp_timer.dir/src/ets_timer_legacy.c.obj
40 libesp_timer.a system_time.c.obj esp-idf/esp_timer/CMakeFiles/__idf_esp_timer.dir/src/system_time.c.obj
41 libesp_wifi.a esp_adapter.c.obj esp-idf/esp_wifi/CMakeFiles/__idf_esp_wifi.dir/esp32c2/esp_adapter.c.obj
42 libfreertos.a list.c.obj esp-idf/freertos/CMakeFiles/__idf_freertos.dir/FreeRTOS-Kernel/list.c.obj
43 libfreertos.a port.c.obj esp-idf/freertos/CMakeFiles/__idf_freertos.dir/FreeRTOS-Kernel/portable/riscv/port.c.obj
44 libfreertos.a port_common.c.obj esp-idf/freertos/CMakeFiles/__idf_freertos.dir/FreeRTOS-Kernel/portable/port_common.c.obj
45 libfreertos.a port_systick.c.obj esp-idf/freertos/CMakeFiles/__idf_freertos.dir/FreeRTOS-Kernel/portable/port_systick.c.obj
46 libfreertos.a queue.c.obj esp-idf/freertos/CMakeFiles/__idf_freertos.dir/FreeRTOS-Kernel/queue.c.obj
47 libfreertos.a tasks.c.obj esp-idf/freertos/CMakeFiles/__idf_freertos.dir/FreeRTOS-Kernel/tasks.c.obj
48 libhal.a brownout_hal.c.obj esp-idf/hal/CMakeFiles/__idf_hal.dir/esp32c2/brownout_hal.c.obj
49 libhal.a efuse_hal.c.obj esp-idf/hal/CMakeFiles/__idf_hal.dir/efuse_hal.c.obj
50 libhal.a efuse_hal.c.obj esp-idf/hal/CMakeFiles/__idf_hal.dir/esp32c2/efuse_hal.c.obj
51 libheap.a heap_caps.c.obj esp-idf/heap/CMakeFiles/__idf_heap.dir/heap_caps.c.obj
52 libheap.a multi_heap.c.obj ./esp-idf/heap/CMakeFiles/__idf_heap.dir/multi_heap.c.obj
53 liblog.a log_freertos.c.obj esp-idf/log/CMakeFiles/__idf_log.dir/log_freertos.c.obj
54 liblog.a log.c.obj esp-idf/log/CMakeFiles/__idf_log.dir/log.c.obj
55 libmbedcrypto.a esp_mem.c.obj esp-idf/mbedtls/mbedtls/library/CMakeFiles/mbedcrypto.dir/$IDF_PATH/components/mbedtls/port/esp_mem.c.obj
56 libnewlib.a assert.c.obj esp-idf/newlib/CMakeFiles/__idf_newlib.dir/assert.c.obj
57 libnewlib.a heap.c.obj esp-idf/newlib/CMakeFiles/__idf_newlib.dir/heap.c.obj
58 libnewlib.a locks.c.obj esp-idf/newlib/CMakeFiles/__idf_newlib.dir/locks.c.obj
59 libnewlib.a reent_init.c.obj esp-idf/newlib/CMakeFiles/__idf_newlib.dir/reent_init.c.obj
60 libnewlib.a time.c.obj esp-idf/newlib/CMakeFiles/__idf_newlib.dir/time.c.obj
61 libpthread.a pthread.c.obj esp-idf/pthread/CMakeFiles/__idf_pthread.dir/pthread.c.obj
62 libriscv.a interrupt.c.obj esp-idf/riscv/CMakeFiles/__idf_riscv.dir/interrupt.c.obj
63 libspi_flash.a flash_brownout_hook.c.obj esp-idf/spi_flash/CMakeFiles/__idf_spi_flash.dir/flash_brownout_hook.c.obj
64 libspi_flash.a flash_ops.c.obj esp-idf/spi_flash/CMakeFiles/__idf_spi_flash.dir/flash_ops.c.obj
65 libspi_flash.a spi_flash_os_func_app.c.obj esp-idf/spi_flash/CMakeFiles/__idf_spi_flash.dir/spi_flash_os_func_app.c.obj
66 libspi_flash.a spi_flash_os_func_noos.c.obj esp-idf/spi_flash/CMakeFiles/__idf_spi_flash.dir/spi_flash_os_func_noos.c.obj

View file

@ -0,0 +1,311 @@
#!/usr/bin/env python3
#
# SPDX-FileCopyrightText: 2022-2023 Espressif Systems (Shanghai) CO LTD
# SPDX-License-Identifier: Apache-2.0
import logging
import argparse
import csv
import os
import subprocess
import sys
import re
from io import StringIO
import configuration
sys.path.append(os.environ['IDF_PATH'] + '/tools/ldgen')
sys.path.append(os.environ['IDF_PATH'] + '/tools/ldgen/ldgen')
from entity import EntityDB
espidf_objdump = None
def lib_secs(lib, file, lib_path):
new_env = os.environ.copy()
new_env['LC_ALL'] = 'C'
dump = StringIO(subprocess.check_output([espidf_objdump, '-h', lib_path], env=new_env).decode())
dump.name = lib
sections_infos = EntityDB()
sections_infos.add_sections_info(dump)
secs = sections_infos.get_sections(lib, file.split('.')[0] + '.c')
if len(secs) == 0:
secs = sections_infos.get_sections(lib, file.split('.')[0])
if len(secs) == 0:
raise ValueError('Failed to get sections from lib %s'%(lib_path))
return secs
def filter_secs(secs_a, secs_b):
new_secs = list()
for s_a in secs_a:
for s_b in secs_b:
if s_b in s_a:
new_secs.append(s_a)
return new_secs
def strip_secs(secs_a, secs_b):
secs = list(set(secs_a) - set(secs_b))
secs.sort()
return secs
def func2sect(func):
if ' ' in func:
func_l = func.split(' ')
else:
func_l = list()
func_l.append(func)
secs = list()
for l in func_l:
if '.iram1.' not in l:
secs.append('.literal.%s'%(l,))
secs.append('.text.%s'%(l, ))
else:
secs.append(l)
return secs
class filter_c:
def __init__(self, file):
lines = open(file).read().splitlines()
self.libs_desc = ''
self.libs = ''
for l in lines:
if ') .iram1 EXCLUDE_FILE(*' in l and ') .iram1.*)' in l:
desc = '\(EXCLUDE_FILE\((.*)\) .iram1 '
self.libs_desc = re.search(desc, l)[1]
self.libs = self.libs_desc.replace('*', '')
return
def match(self, lib):
if lib in self.libs:
print('Remove lib %s'%(lib))
return True
return False
def add(self):
return self.libs_desc
class target_c:
def __init__(self, lib, lib_path, file, fsecs):
self.lib = lib
self.file = file
self.lib_path = lib_path
self.fsecs = func2sect(fsecs)
self.desc = '*%s:%s.*'%(lib, file.split('.')[0])
secs = lib_secs(lib, file, lib_path)
if '.iram1.' in self.fsecs[0]:
self.secs = filter_secs(secs, ('.iram1.', ))
else:
self.secs = filter_secs(secs, ('.iram1.', '.text.', '.literal.'))
self.isecs = strip_secs(self.secs, self.fsecs)
def __str__(self):
s = 'lib=%s\nfile=%s\lib_path=%s\ndesc=%s\nsecs=%s\nfsecs=%s\nisecs=%s\n'%(\
self.lib, self.file, self.lib_path, self.desc, self.secs, self.fsecs,\
self.isecs)
return s
class relink_c:
def __init__(self, input, library_file, object_file, function_file, sdkconfig_file, missing_function_info):
self.filter = filter_c(input)
libraries = configuration.generator(library_file, object_file, function_file, sdkconfig_file, missing_function_info, espidf_objdump)
self.targets = list()
for i in libraries.libs:
lib = libraries.libs[i]
if self.filter.match(lib.name):
continue
for j in lib.objs:
obj = lib.objs[j]
self.targets.append(target_c(lib.name, lib.path, obj.name,
' '.join(obj.sections())))
# for i in self.targets:
# print(i)
self.__transform__()
def __transform__(self):
iram1_exclude = list()
iram1_include = list()
flash_include = list()
for t in self.targets:
secs = filter_secs(t.fsecs, ('.iram1.', ))
if len(secs) > 0:
iram1_exclude.append(t.desc)
secs = filter_secs(t.isecs, ('.iram1.', ))
if len(secs) > 0:
iram1_include.append(' %s(%s)'%(t.desc, ' '.join(secs)))
secs = t.fsecs
if len(secs) > 0:
flash_include.append(' %s(%s)'%(t.desc, ' '.join(secs)))
self.iram1_exclude = ' *(EXCLUDE_FILE(%s %s) .iram1.*) *(EXCLUDE_FILE(%s %s) .iram1)' % \
(self.filter.add(), ' '.join(iram1_exclude), \
self.filter.add(), ' '.join(iram1_exclude))
self.iram1_include = '\n'.join(iram1_include)
self.flash_include = '\n'.join(flash_include)
logging.debug('IRAM1 Exclude: %s'%(self.iram1_exclude))
logging.debug('IRAM1 Include: %s'%(self.iram1_include))
logging.debug('Flash Include: %s'%(self.flash_include))
def __replace__(self, lines):
def is_iram_desc(l):
if '*(.iram1 .iram1.*)' in l or (') .iram1 EXCLUDE_FILE(*' in l and ') .iram1.*)' in l):
return True
return False
iram_start = False
flash_done = False
for i in range(0, len(lines) - 1):
l = lines[i]
if '.iram0.text :' in l:
logging.debug('start to process .iram0.text')
iram_start = True
elif '.dram0.data :' in l:
logging.debug('end to process .iram0.text')
iram_start = False
elif is_iram_desc(l):
if iram_start:
lines[i] = '%s\n%s\n'%(self.iram1_exclude, self.iram1_include)
elif '(.stub .gnu.warning' in l:
if not flash_done:
lines[i] = '%s\n\n%s'%(self.flash_include, l)
elif self.flash_include in l:
flash_done = True
else:
if iram_start:
new_l = self._replace_func(l)
if new_l:
lines[i] = new_l
return lines
def _replace_func(self, l):
for t in self.targets:
if t.desc in l:
S = '.literal .literal.* .text .text.*'
if S in l:
if len(t.isecs) > 0:
return l.replace(S, ' '.join(t.isecs))
else:
return ' '
S = '%s(%s)'%(t.desc, ' '.join(t.fsecs))
if S in l:
return ' '
replaced = False
for s in t.fsecs:
s2 = s + ' '
if s2 in l:
l = l.replace(s2, '')
replaced = True
s2 = s + ')'
if s2 in l:
l = l.replace(s2, ')')
replaced = True
if '( )' in l or '()' in l:
return ' '
if replaced:
return l
else:
index = '*%s:(EXCLUDE_FILE'%(t.lib)
if index in l and t.file.split('.')[0] not in l:
for m in self.targets:
index = '*%s:(EXCLUDE_FILE'%(m.lib)
if index in l and m.file.split('.')[0] not in l:
l = l.replace('EXCLUDE_FILE(', 'EXCLUDE_FILE(%s '%(m.desc))
if len(m.isecs) > 0:
l += '\n %s(%s)'%(m.desc, ' '.join(m.isecs))
return l
return False
def save(self, input, output):
lines = open(input).read().splitlines()
lines = self.__replace__(lines)
open(output, 'w+').write('\n'.join(lines))
def main():
argparser = argparse.ArgumentParser(description='Relinker script generator')
argparser.add_argument(
'--input', '-i',
help='Linker template file',
type=str)
argparser.add_argument(
'--output', '-o',
help='Output linker script',
type=str)
argparser.add_argument(
'--library', '-l',
help='Library description directory',
type=str)
argparser.add_argument(
'--object', '-b',
help='Object description file',
type=str)
argparser.add_argument(
'--function', '-f',
help='Function description file',
type=str)
argparser.add_argument(
'--sdkconfig', '-s',
help='sdkconfig file',
type=str)
argparser.add_argument(
'--objdump', '-g',
help='GCC objdump command',
type=str)
argparser.add_argument(
'--debug', '-d',
help='Debug level(option is \'debug\')',
default='no',
type=str)
argparser.add_argument(
'--missing_function_info',
help='Print error information instead of throwing exception when missing function',
default=False,
type=bool)
args = argparser.parse_args()
if args.debug == 'debug':
logging.basicConfig(level=logging.DEBUG)
logging.debug('input: %s'%(args.input))
logging.debug('output: %s'%(args.output))
logging.debug('library: %s'%(args.library))
logging.debug('object: %s'%(args.object))
logging.debug('function: %s'%(args.function))
logging.debug('sdkconfig:%s'%(args.sdkconfig))
logging.debug('objdump: %s'%(args.objdump))
logging.debug('debug: %s'%(args.debug))
logging.debug('missing_function_info: %s'%(args.missing_function_info))
global espidf_objdump
espidf_objdump = args.objdump
relink = relink_c(args.input, args.library, args.object, args.function, args.sdkconfig, args.missing_function_info)
relink.save(args.input, args.output)
if __name__ == '__main__':
main()

View file

@ -0,0 +1,8 @@
# The following lines of boilerplate have to be in your project's CMakeLists
# in this exact order for cmake to work correctly
cmake_minimum_required(VERSION 3.5)
set(EXTRA_COMPONENT_DIRS "$ENV{IDF_PATH}/tools/unit-test-app/components"
"../../cmake_utilities")
include($ENV{IDF_PATH}/tools/cmake/project.cmake)
project(cmake_utilities_test_apps)

View file

@ -0,0 +1,10 @@
idf_component_register( SRC_DIRS "."
INCLUDE_DIRS "."
REQUIRES cmake_utilities)
include(gcc)
include(gen_compressed_ota)
include(gen_single_bin)
include(package_manager)
include(relinker)
cu_pkg_define_version(${CMAKE_CURRENT_LIST_DIR})

View file

@ -0,0 +1,6 @@
version: "3.2.1"
description: Test2 for cmake utilities
url: https://github.com/espressif/esp-iot-solution/tree/master/tools/cmake_utilities
issues: https://github.com/espressif/esp-iot-solution/issues
dependencies:
idf: ">=4.1"

View file

@ -0,0 +1,16 @@
#include <stdio.h>
int test_component2_version_major()
{
return TEST_COMPONENT2_VER_MAJOR;
}
int test_component2_version_minor()
{
return TEST_COMPONENT2_VER_MINOR;
}
int test_component2_version_patch()
{
return TEST_COMPONENT2_VER_PATCH;
}

View file

@ -0,0 +1,14 @@
#include <stdio.h>
#pragma once
#ifdef __cplusplus
extern "C" {
#endif
int test_component2_version_major();
int test_component2_version_minor();
int test_component2_version_patch();
#ifdef __cplusplus
}
#endif

View file

@ -0,0 +1,10 @@
idf_component_register( SRC_DIRS "."
INCLUDE_DIRS "."
REQUIRES cmake_utilities)
include(gcc)
include(gen_compressed_ota)
include(gen_single_bin)
include(package_manager)
include(relinker)
cu_pkg_define_version(${CMAKE_CURRENT_LIST_DIR})

View file

@ -0,0 +1,6 @@
version: "1.2.3"
description: Test1 for cmake utilities
url: https://github.com/espressif/esp-iot-solution/tree/master/tools/cmake_utilities
issues: https://github.com/espressif/esp-iot-solution/issues
dependencies:
idf: ">=4.1"

View file

@ -0,0 +1,16 @@
#include <stdio.h>
int test_component1_version_major()
{
return TEST_COMPONENT1_VER_MAJOR;
}
int test_component1_version_minor()
{
return TEST_COMPONENT1_VER_MINOR;
}
int test_component1_version_patch()
{
return TEST_COMPONENT1_VER_PATCH;
}

View file

@ -0,0 +1,14 @@
#include <stdio.h>
#pragma once
#ifdef __cplusplus
extern "C" {
#endif
int test_component1_version_major();
int test_component1_version_minor();
int test_component1_version_patch();
#ifdef __cplusplus
}
#endif

View file

@ -0,0 +1,3 @@
idf_component_register(SRC_DIRS "."
INCLUDE_DIRS "."
REQUIRES unity test_utils test_component1 TEST-component2)

View file

@ -0,0 +1,59 @@
/*
* SPDX-FileCopyrightText: 2022-2023 Espressif Systems (Shanghai) CO LTD
*
* SPDX-License-Identifier: Apache-2.0
*/
#include <stdio.h>
#include <inttypes.h>
#include "freertos/FreeRTOS.h"
#include "esp_system.h"
#include "esp_log.h"
#include "unity.h"
#include "test_component1.h"
#include "test_component2.h"
/* USB PIN fixed in esp32-s2, can not use io matrix */
#define TEST_MEMORY_LEAK_THRESHOLD (-400)
TEST_CASE("Test package manager version", "[cmake_utilities][package_manager]")
{
esp_log_level_set("*", ESP_LOG_INFO);
TEST_ASSERT_EQUAL_INT(test_component1_version_major(), 1);
TEST_ASSERT_EQUAL_INT(test_component1_version_minor(), 2);
TEST_ASSERT_EQUAL_INT(test_component1_version_patch(), 3);
TEST_ASSERT_EQUAL_INT(test_component2_version_major(), 3);
TEST_ASSERT_EQUAL_INT(test_component2_version_minor(), 2);
TEST_ASSERT_EQUAL_INT(test_component2_version_patch(), 1);
}
static size_t before_free_8bit;
static size_t before_free_32bit;
static void check_leak(size_t before_free, size_t after_free, const char *type)
{
ssize_t delta = after_free - before_free;
printf("MALLOC_CAP_%s: Before %u bytes free, After %u bytes free (delta %d)\n", type, before_free, after_free, delta);
TEST_ASSERT_MESSAGE(delta >= TEST_MEMORY_LEAK_THRESHOLD, "memory leak");
}
void setUp(void)
{
before_free_8bit = heap_caps_get_free_size(MALLOC_CAP_8BIT);
before_free_32bit = heap_caps_get_free_size(MALLOC_CAP_32BIT);
}
void tearDown(void)
{
size_t after_free_8bit = heap_caps_get_free_size(MALLOC_CAP_8BIT);
size_t after_free_32bit = heap_caps_get_free_size(MALLOC_CAP_32BIT);
check_leak(before_free_8bit, after_free_8bit, "8BIT");
check_leak(before_free_32bit, after_free_32bit, "32BIT");
}
void app_main(void)
{
printf("Cmake Utilities TEST \n");
unity_run_menu();
}

View file

@ -0,0 +1,20 @@
'''
Steps to run these cases:
- Build
- . ${IDF_PATH}/export.sh
- pip install idf_build_apps
- python tools/build_apps.py tools/cmake_utilities/test_apps -t esp32s2
- Test
- pip install -r tools/requirements/requirement.pytest.txt
- pytest tools/cmake_utilities/test_apps --target esp32s2
'''
import pytest
from pytest_embedded import Dut
@pytest.mark.target('esp32s3')
@pytest.mark.env('generic')
def test_cmake_utilities(dut: Dut)-> None:
dut.expect_exact('Press ENTER to see the list of tests.')
dut.write('*')
dut.expect_unity_test_output(timeout = 1000)