Supported Targets | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-C6 | ESP32-H2 | ESP32-P4 | ESP32-S2 | ESP32-S3 |
---|
This project aims to integrate Zig language and toolchain with the Espressif IoT Development Framework for enhanced development capabilities on ESP32 and its variants.
target | commands |
---|---|
esp32 | -Dtarget=xtensa-freestanding-none -Dcpu=esp32 |
esp32-s2 | -Dtarget=xtensa-freestanding-none -Dcpu=esp32s2 |
esp32-s3 | -Dtarget=xtensa-freestanding-none -Dcpu=esp32s3 |
esp32-c2/c3 | -Dtarget=riscv32-freestanding-none -Dcpu=generic_rv32+c+m+zicsr+zifencei |
esp32-h2/c5/c6 | -Dtarget=riscv32-freestanding-none -Dcpu=generic_rv32+a+c+m+zicsr+zifencei |
esp32-p4 | -Dtarget=riscv32-freestanding-eabihf -Dcpu=esp32p4 |
Warning
Zig upstream (LLVM-Codegen) does not have xtensa support. Like esp-rs, it is necessary to use the zig-xtensa - toolchain forked.
-
Zig Language Integration: Use the Zig programming language to write firmware code. It provides modern language features such as comptime, meta-programming, and error handling.
-
Zig Toolchain Integration: The Zig toolchain can be used to build zig libraries and executables, and can also be integrated with the ESP-IDF build system. Also, system compiler and linker can be replaced to
zig cc
/zig c++
.- Note: For C++ support, zig toolchain uses
llvm-libc++
ABI by default.
- Note: For C++ support, zig toolchain uses
-
ESP-IDF Compatibility: Seamlessly integrate Zig with the ESP-IDF framework, allowing developers to leverage the rich set of APIs and functionalities provided by ESP-IDF for IoT development.
-
Build System Configuration: Using CMake to build Zig libraries allows easy integration with existing ESP-IDF projects while providing efficient dependency management and build configuration.
-
Cross-Platform Development: Facilitate development across various ESP32 variants including ESP32-C2, ESP32-C3, ESP32-C5, ESP32-C6, ESP32-H2, ESP32-P4, ESP32-S2, and ESP32-S3, ensuring broad compatibility and versatility.
Note
Asserts allocations are within @alignOf(std.c.max_align_t)
and directly calls
malloc
/free
. Does not attempt to utilize malloc_usable_size
.
-
std.heap.raw_c_allocator
allocator is safe to use as the backing allocator withstd.heap.ArenaAllocator
for example and is more optimal in such a case thanstd.heap.c_allocator
. - ref.: std-doc -
std.heap.ArenaAllocator
takes an existing allocator, wraps it, and provides an interface where you can allocate without freeing, and then free it all together. - ref.: std-doc
Custom Allocators (based on std.heap.raw_c_allocator
)
idf.heap.HeapCapsAllocator
- ref.: espressif-docidf.heap.MultiHeapAllocator
- ref.: espressif-docidf.heap.vPortAllocator
- ref.: FreeRTOS-doc
This project is licensed twice: