kassane / zig-esp-idf-sample

Run Zig on esp-idf
Apache License 2.0
25 stars 1 forks source link
clang esp-idf esp-idf-framework esp-idf-sample esp-idf-sys esp32-idf espressif freertos libcxx zig

Using Zig Language & Toolchain with ESP-IDF

Supported Targets ESP32 ESP32-C2 ESP32-C3 ESP32-C6 ESP32-H2 ESP32-P4 ESP32-S2 ESP32-S3

STATUS: Experimental

Description

This project aims to integrate Zig language and toolchain with the Espressif IoT Development Framework for enhanced development capabilities on ESP32 and its variants.

Prerequisites

Targets Allowed

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
esp32-h2/c5/c6 -Dtarget=riscv32-freestanding-none -Dcpu=generic_rv32+a+c+m
esp32-p4 -Dtarget=riscv32-freestanding-eabihf -Dcpu=generic_rv32+a+c+f+m


[!WARNING] Zig upstream (LLVM-Codegen) does not have xtensa support. Like esp-rs, it is necessary to use the zig-xtensa - toolchain forked.


Key Features:

About Allocators

[!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 with std.heap.ArenaAllocator for example and is more optimal in such a case than std.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)

License

This project is licensed twice: