idf_build_get_property(target IDF_TARGET)

if(NOT BOOTLOADER_BUILD)
    set(src "esp_app_desc.c")
else()
    set(src "")
endif()
idf_component_register(SRCS ${src}
                    INCLUDE_DIRS "include")

if(NOT BOOTLOADER_BUILD)
    # esp_app_desc structure is added as an undefined symbol because otherwise the
    # linker will ignore this structure as it has no other files depending on it.
    if(CONFIG_IDF_TARGET_LINUX AND CMAKE_HOST_SYSTEM_NAME STREQUAL "Darwin")
        # On MacOS, the linker expects the exact mangled symbol name (with leading underscore)
        # to be present in the object file.
        target_link_libraries(${COMPONENT_LIB} INTERFACE "-u _esp_app_desc")
    else()
        target_link_libraries(${COMPONENT_LIB} INTERFACE "-u esp_app_desc")
    endif()

    if(CONFIG_APP_PROJECT_VER_FROM_CONFIG)
        # Ignore current PROJECT_VER (which was set in project.cmake)
        # Gets the version from the CONFIG_APP_PROJECT_VER.
        idf_build_set_property(PROJECT_VER "${CONFIG_APP_PROJECT_VER}")
    endif()

    # cut PROJECT_VER and PROJECT_NAME to required 32 characters.
    idf_build_get_property(project_ver PROJECT_VER)
    idf_build_get_property(project_name PROJECT_NAME)
    string(SUBSTRING "${project_ver}" 0 31 PROJECT_VER_CUT)
    string(SUBSTRING "${project_name}" 0 31 PROJECT_NAME_CUT)
    message(STATUS "App \"${PROJECT_NAME_CUT}\" version: ${PROJECT_VER_CUT}")

    set_source_files_properties(
        SOURCE "esp_app_desc.c"
        PROPERTIES COMPILE_DEFINITIONS
        "PROJECT_VER=\"${PROJECT_VER_CUT}\"; PROJECT_NAME=\"${PROJECT_NAME_CUT}\"")
endif()
