diff --git a/components/esp_app_format/CMakeLists.txt b/components/esp_app_format/CMakeLists.txt index 95e20d0341..27a3d2ffd6 100644 --- a/components/esp_app_format/CMakeLists.txt +++ b/components/esp_app_format/CMakeLists.txt @@ -11,7 +11,13 @@ idf_component_register(SRCS ${src} 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. - target_link_libraries(${COMPONENT_LIB} INTERFACE "-u esp_app_desc") + 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) diff --git a/components/esp_app_format/esp_app_desc.c b/components/esp_app_format/esp_app_desc.c index 60d5bbd823..e40c9fd5a7 100644 --- a/components/esp_app_format/esp_app_desc.c +++ b/components/esp_app_format/esp_app_desc.c @@ -20,7 +20,11 @@ static const char *TAG = "app_init"; #endif // Application version info +#if defined(__APPLE__) && CONFIG_IDF_TARGET_LINUX +const __attribute__((weak)) __attribute__((section("__RODATA_DESC,.rodata_desc"))) esp_app_desc_t esp_app_desc = { +#else const __attribute__((weak)) __attribute__((section(".rodata_desc"))) esp_app_desc_t esp_app_desc = { +#endif /* #if defined(__APPLE__) && CONFIG_IDF_TARGET_LINUX */ .magic_word = ESP_APP_DESC_MAGIC_WORD, #ifdef CONFIG_APP_EXCLUDE_PROJECT_VER_VAR .version = "",