From e5fb198adc124ec850f3d345892650996aeccdd6 Mon Sep 17 00:00:00 2001 From: Sudeep Mohanty Date: Fri, 24 May 2024 07:45:31 +0200 Subject: [PATCH] fix(linux): Fixed linux target build failure in esp_app_format for MacOS This commit fixes a build failure in the esp_app_format component for the linux target when built on a MacOS machine. --- components/esp_app_format/CMakeLists.txt | 8 +++++++- components/esp_app_format/esp_app_desc.c | 4 ++++ 2 files changed, 11 insertions(+), 1 deletion(-) 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 = "",