2023-08-08 05:07 AM - edited 2023-08-08 05:22 AM
Hello everyone.
I am trying to build my project using the Link Time Optimization. For this propouse, I added -flto to "Other flags" list in Miscellaneous either for "MCU GCC Compiler" and "MCU G++ Compiler". The problem is that during the link proccess, the folowing error message is displayed and link fails.
../TouchGFX/generated/texts/src/Texts.cpp:280:28: error: 'indicesPt_br' causes a section type conflict with 'texts_all_languages'
I realized that either "indicesPt_br" and "texts_all_languages" are declared using TEXT_LOCATION_FLASH_PRAGMA and TEXT_LOCATION_FLASH_ATTRIBUTE macros.These macros are located at "[..]\touchgfx\framework\include\touchgfx\hal\Config.h" as showed bellow:
/** A macro for placing Font Glyph in memory. */
#define FONT_GLYPH_LOCATION_FLASH_PRAGMA LOCATION_PRAGMA("FontFlashSection")
/** A macro for placing Font Glyph attribute in memory. */
#define FONT_GLYPH_LOCATION_FLASH_ATTRIBUTE LOCATION_ATTRIBUTE("FontFlashSection")
/** A macro for placing Font table in memory. */
#define FONT_TABLE_LOCATION_FLASH_PRAGMA LOCATION_PRAGMA("FontFlashSection")
/** A macro for placing Font table attribute in memory. */
#define FONT_TABLE_LOCATION_FLASH_ATTRIBUTE LOCATION_ATTRIBUTE("FontFlashSection")
/** A macro for placing Font lookup table in memory. */
#define FONT_SEARCHTABLE_LOCATION_FLASH_PRAGMA LOCATION_PRAGMA("FontSearchFlashSection")
/** A macro for placing Font table attribute in memory. */
#define FONT_SEARCHTABLE_LOCATION_FLASH_ATTRIBUTE LOCATION_ATTRIBUTE("FontSearchFlashSection")
/** A macro for placing Font kerning in memory. */
#define FONT_KERNING_LOCATION_FLASH_PRAGMA LOCATION_PRAGMA("FontSearchFlashSection")
/** A macro for placing Font kerning attribute in memory. */
#define FONT_KERNING_LOCATION_FLASH_ATTRIBUTE LOCATION_ATTRIBUTE("FontSearchFlashSection")
/** A macro for placing Text kerning in memory. */
#define TEXT_LOCATION_FLASH_PRAGMA LOCATION_PRAGMA("TextFlashSection")
/** A macro for placing Text attribute in memory. */
#define TEXT_LOCATION_FLASH_ATTRIBUTE LOCATION_ATTRIBUTE("TextFlashSection")
/** A generic macro for placing an element in memory. */
#define LOCATION_EXTFLASH_PRAGMA LOCATION_PRAGMA("ExtFlashSection")
/** A generic macro for placing an element attribute in memory. */
#define LOCATION_EXTFLASH_ATTRIBUTE LOCATION_ATTRIBUTE("ExtFlashSection")
I tried to modify this file to not define "FontFlashSection", "TextFlashSection", etc. So the macros now are defined as follows:
** A macro for placing Font Glyph in memory. */
#define FONT_GLYPH_LOCATION_FLASH_PRAGMA //LOCATION_PRAGMA("FontFlashSection")
/** A macro for placing Font Glyph attribute in memory. */
#define FONT_GLYPH_LOCATION_FLASH_ATTRIBUTE //LOCATION_ATTRIBUTE("FontFlashSection")
/** A macro for placing Font table in memory. */
#define FONT_TABLE_LOCATION_FLASH_PRAGMA //LOCATION_PRAGMA("FontFlashSection")
/** A macro for placing Font table attribute in memory. */
#define FONT_TABLE_LOCATION_FLASH_ATTRIBUTE //LOCATION_ATTRIBUTE("FontFlashSection")
/** A macro for placing Font lookup table in memory. */
#define FONT_SEARCHTABLE_LOCATION_FLASH_PRAGMA //LOCATION_PRAGMA("FontSearchFlashSection")
/** A macro for placing Font table attribute in memory. */
#define FONT_SEARCHTABLE_LOCATION_FLASH_ATTRIBUTE //LOCATION_ATTRIBUTE("FontSearchFlashSection")
/** A macro for placing Font kerning in memory. */
#define FONT_KERNING_LOCATION_FLASH_PRAGMA //LOCATION_PRAGMA("FontSearchFlashSection")
/** A macro for placing Font kerning attribute in memory. */
#define FONT_KERNING_LOCATION_FLASH_ATTRIBUTE //LOCATION_ATTRIBUTE("FontSearchFlashSection")
/** A macro for placing Text kerning in memory. */
#define TEXT_LOCATION_FLASH_PRAGMA //LOCATION_PRAGMA("TextFlashSection")
/** A macro for placing Text attribute in memory. */
#define TEXT_LOCATION_FLASH_ATTRIBUTE //LOCATION_ATTRIBUTE("TextFlashSection")
/** A generic macro for placing an element in memory. */
#define LOCATION_EXTFLASH_PRAGMA //LOCATION_PRAGMA("ExtFlashSection")
/** A generic macro for placing an element attribute in memory. */
#define LOCATION_EXTFLASH_ATTRIBUTE //LOCATION_ATTRIBUTE("ExtFlashSection")
These way, "FontFlashSection", "FontSearchFlashSection", "TextFlashSection", "ExtFlashSection" are not created anymore, but the build and link proccess are complete succesfully.
Is there any way to resolve the section type conflict or any other workaound to make LTO TouchGFX project build using LTO?
I am using TouchGFX version 4.22.
Thanks in advance.
Murilo Machado Pinto.
2023-08-08 06:23 AM
I realized that when I don't define "FontFlashSection", "FontSearchFlashSection", "TextFlashSection" and "ExtFlashSection", all my texts are not displayed at GUI when running code. Does TouchGFX lib looks for these sections?