Files
esp-idf/examples/system/llvm_opt/README.md
2026-09-03 13:02:58 +08:00

1.4 KiB

Supported Targets ESP32-P4

LLVM optimization (component scope)

Minimal example for the ESP-IDF LLVM optimization framework. It shows how to apply the LLVM optimizations selected in menuconfig to an entire component with the ENABLE_LLVM_OPT argument of idf_component_register:

idf_component_register(SRCS "llvm_opt_main.c"
                       INCLUDE_DIRS ""
                       ENABLE_LLVM_OPT)

Enable the option in menuconfig: Compiler options > LLVM optimizations > Optimize memcpy with PIE. On ESP32-P4 with the Clang toolchain, ESP-IDF then injects the corresponding compiler flags into every source file of this component.

With the default GCC toolchain the example still builds (for CI board smoke tests); ENABLE_LLVM_OPT is ignored and CMake prints a warning. Use Clang for real LLVM opt flags:

Build and run

Activate the Clang toolchain before configuring the project:

cd "$IDF_PATH/examples/system/llvm_opt"
IDF_TOOLCHAIN=clang idf.py set-target esp32p4
IDF_TOOLCHAIN=clang idf.py build flash monitor

CONFIG_COMPILER_LLVM_MEMCPY_OPTIMIZATION is enabled by sdkconfig.defaults and can be changed with idf.py menuconfig.

For the file-level API (idf_component_enable_llvm_opt) and a memcpy benchmark comparing optimized and baseline sources, see the llvm_memcpy_opt example.