# Using Build Event Callbacks

A component can register a callback that the build system invokes at a specific point in the build. This is the v2 way to run a custom step on the linked application, for example running a tool on the executable, without relying on internal build targets or properties.

## Registering a Callback

A component registers a callback in its `project_include.cmake` with idf_component_register_build_event_callback. The callback must be a CMake function defined in the same file. At the specified event, the build system invokes the callback and passes the relevant CMake target as the first argument.

project_include.cmake

    function(my_post_elf_hook target)
        add_custom_command(TARGET ${target} POST_BUILD
            COMMAND my_tool "$<TARGET_FILE:${target}>"
            COMMENT "Running my_tool on the executable")
    endfunction()

    idf_component_register_build_event_callback(EVENT POST_ELF CALLBACK my_post_elf_hook)

## Supported Events

`POST_ELF`

  Fired after the executable target is created and linked, but before the binary (`.bin`) image is generated. The callback receives the executable target name. Use it to act on the ELF, for example by attaching a `POST_BUILD` command to the executable with `add_custom_command(TARGET ... POST_BUILD ...)`, or to add custom targets that depend on the executable.

`POST_ELF` is currently the only supported event. Additional events may be added in the future when required.

In v1, this kind of post-link step used `idf_build_add_post_elf_dependency`, which is not available in v2; see idf_build_add_post_elf_dependency and idf_build_get_post_elf_dependencies are Unavailable.

Was this page helpful?

- Thank you! We received your feedback.
- If you have any comments, fill in Espressif Documentation Feedback Form.

- We value your feedback.
- Let us know how we can improve this page by filling in Espressif Documentation Feedback Form.