Skip to content

Commit 62efff7

Browse files
authored
[projmgr] Add link-time-optimize handling
1 parent aaa99e5 commit 62efff7

File tree

14 files changed

+100
-0
lines changed

14 files changed

+100
-0
lines changed

tools/buildmgr/cbuildgen/config/AC6.6.16.2.cmake

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -679,6 +679,7 @@ set(CC_CPU "--target=${ARMCLANG_TARGET} ${ARMCLANG_CPU}")
679679
set(CC_DEFINES ${ASM_DEFINES})
680680
set(CC_BYTE_ORDER ${ASM_BYTE_ORDER})
681681
set(CC_FLAGS ${ASM_FLAGS})
682+
set(CC_LTO "-flto")
682683
set(_PI "-include ")
683684
set(_ISYS "-isystem ")
684685
set(CC_OPTIONS_FLAGS)
@@ -704,6 +705,7 @@ set(CXX_BYTE_ORDER "${CC_BYTE_ORDER}")
704705
set(CXX_SECURE "${CC_SECURE}")
705706
set(CXX_BRANCHPROT "${CC_BRANCHPROT}")
706707
set(CXX_FLAGS "${CC_FLAGS}")
708+
set(CXX_LTO "${CC_LTO}")
707709
set(CXX_OPTIONS_FLAGS)
708710
cbuild_set_options_flags(CXX "${OPTIMIZE}" "${DEBUG}" "${WARNINGS}" "${LANGUAGE_CXX}" CXX_OPTIONS_FLAGS)
709711

@@ -721,6 +723,7 @@ if(SECURE STREQUAL "Secure")
721723
set(LD_SECURE "--import-cmse-lib-out \"${OUT_DIR}/${CMSE_LIB}\"")
722724
endif()
723725

726+
set(LD_LTO "--lto")
724727
set(LD_FLAGS "")
725728
set(LD_OPTIONS_FLAGS)
726729
cbuild_set_options_flags(LD "${OPTIMIZE}" "${DEBUG}" "${WARNINGS}" "" LD_OPTIONS_FLAGS)

tools/buildmgr/cbuildgen/config/CLANG.17.0.1.cmake

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -388,6 +388,7 @@ set(CC_CPU "${CLANG_CPU}")
388388
set(CC_DEFINES ${ASM_DEFINES})
389389
set(CC_BYTE_ORDER ${ASM_BYTE_ORDER})
390390
set(CC_FLAGS "")
391+
set(CC_LTO "-flto")
391392
set(_PI "-include ")
392393
set(_ISYS "-isystem ")
393394
set(CC_OPTIONS_FLAGS)
@@ -409,6 +410,7 @@ set(CXX_BYTE_ORDER "${CC_BYTE_ORDER}")
409410
set(CXX_SECURE "${CC_SECURE}")
410411
set(CXX_BRANCHPROT "${CC_BRANCHPROT}")
411412
set(CXX_FLAGS "${CC_FLAGS}")
413+
set(CXX_LTO "${CC_LTO}")
412414
set(CXX_OPTIONS_FLAGS)
413415
cbuild_set_options_flags(CXX "${OPTIMIZE}" "${DEBUG}" "${WARNINGS}" "${LANGUAGE_CXX}" CXX_OPTIONS_FLAGS)
414416

@@ -421,6 +423,7 @@ if(SECURE STREQUAL "Secure")
421423
set(LD_SECURE "-Wl,--cmse-implib -Wl,--out-implib=\"${OUT_DIR}/${CMSE_LIB}\"")
422424
endif()
423425

426+
set(LD_LTO "-flto")
424427
set(LD_FLAGS)
425428
set(LD_OPTIONS_FLAGS)
426429
cbuild_set_options_flags(LD "${OPTIMIZE}" "${DEBUG}" "${WARNINGS}" "" LD_OPTIONS_FLAGS)

tools/buildmgr/cbuildgen/config/CLANG_TI.4.0.1.cmake

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -155,6 +155,7 @@ set(CC_CPU "${TIARMCLANG_CPU}")
155155
set(CC_DEFINES ${ASM_DEFINES})
156156
set(CC_BYTE_ORDER ${ASM_BYTE_ORDER})
157157
set(CC_FLAGS "")
158+
set(CC_LTO "-flto")
158159
set(_PI "-include ")
159160
set(_ISYS "-isystem ")
160161
set(CC_OPTIONS_FLAGS)
@@ -176,6 +177,7 @@ set(CXX_BYTE_ORDER "${CC_BYTE_ORDER}")
176177
set(CXX_SECURE "${CC_SECURE}")
177178
set(CXX_BRANCHPROT "${CC_BRANCHPROT}")
178179
set(CXX_FLAGS "${CC_FLAGS}")
180+
set(CXX_LTO "${CC_LTO}")
179181
set(CXX_OPTIONS_FLAGS)
180182
cbuild_set_options_flags(CXX "${OPTIMIZE}" "${DEBUG}" "${WARNINGS}" "${LANGUAGE_CXX}" CXX_OPTIONS_FLAGS)
181183

@@ -188,6 +190,7 @@ if(SECURE STREQUAL "Secure")
188190
set(LD_SECURE "-Wl,--import_cmse_lib_out=\"${OUT_DIR}/${CMSE_LIB}\"")
189191
endif()
190192

193+
set(LD_LTO "-flto")
191194
set(LD_FLAGS)
192195
set(LD_OPTIONS_FLAGS)
193196
cbuild_set_options_flags(LD "${OPTIMIZE}" "${DEBUG}" "${WARNINGS}" "" LD_OPTIONS_FLAGS)

tools/buildmgr/cbuildgen/config/GCC.10.3.1.cmake

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -258,6 +258,7 @@ set(CC_CPU "${GNUASM_CPU}")
258258
set(CC_DEFINES ${ASM_DEFINES})
259259
set(CC_BYTE_ORDER ${ASM_BYTE_ORDER})
260260
set(CC_FLAGS)
261+
set(CC_LTO "-flto")
261262
set(_PI "-include ")
262263
set(_ISYS "-isystem ")
263264
set(CC_OPTIONS_FLAGS)
@@ -285,6 +286,7 @@ set(CXX_BYTE_ORDER "${CC_BYTE_ORDER}")
285286
set(CXX_SECURE "${CC_SECURE}")
286287
set(CXX_BRANCHPROT "${CC_BRANCHPROT}")
287288
set(CXX_FLAGS "${CC_FLAGS}")
289+
set(CXX_LTO "${CC_LTO}")
288290
set(CXX_OPTIONS_FLAGS)
289291
cbuild_set_options_flags(CXX "${OPTIMIZE}" "${DEBUG}" "${WARNINGS}" "${LANGUAGE_CXX}" CXX_OPTIONS_FLAGS)
290292

@@ -304,6 +306,7 @@ if(SECURE STREQUAL "Secure")
304306
set(LD_SECURE "-Wl,--cmse-implib -Wl,--out-implib=\"${OUT_DIR}/${CMSE_LIB}\"")
305307
endif()
306308

309+
set(LD_LTO "-flto")
307310
set(LD_FLAGS)
308311
set(LD_OPTIONS_FLAGS)
309312
cbuild_set_options_flags(LD "${OPTIMIZE}" "${DEBUG}" "${WARNINGS}" "" LD_OPTIONS_FLAGS)

tools/projmgr/include/ProjMgrParser.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -199,6 +199,7 @@ struct BuildType {
199199
std::string warnings;
200200
std::string languageC;
201201
std::string languageCpp;
202+
bool lto = false;
202203
std::vector<std::string> defines;
203204
std::vector<std::string> definesAsm;
204205
std::vector<std::string> undefines;

tools/projmgr/include/ProjMgrYamlParser.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,7 @@ static constexpr const char* YAML_LICENSE = "license";
146146
static constexpr const char* YAML_LICENSES = "licenses";
147147
static constexpr const char* YAML_LICENSE_AGREEMENT = "license-agreement";
148148
static constexpr const char* YAML_LINKER = "linker";
149+
static constexpr const char* YAML_LINK_TIME_OPTIMIZE = "link-time-optimize";
149150
static constexpr const char* YAML_MAP = "map";
150151
static constexpr const char* YAML_MASK = "mask";
151152
static constexpr const char* YAML_MEMORY = "memory";

tools/projmgr/schemas/common.schema.json

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -235,6 +235,11 @@
235235
"enum": [ "size", "speed", "balanced", "none", "debug" ],
236236
"description": "Generic optimization levels for code generation (size, speed, balanced, none, debug)."
237237
},
238+
"LinkTimeOptimizeType": {
239+
"title": "link-time-optimize:",
240+
"type": ["null", "boolean"],
241+
"description": "Enable Link Time Optimization (LTO)"
242+
},
238243
"DebugType": {
239244
"title": "debug:\nDocumentation: https://open-cmsis-pack.github.io/cmsis-toolbox/YML-Input-Format/#debug",
240245
"enum": [ "on", "off" ],
@@ -577,6 +582,7 @@
577582
"device": { "$ref": "#/definitions/DeviceType" },
578583
"language-C": { "$ref": "#/definitions/LanguageCType" },
579584
"language-CPP": { "$ref": "#/definitions/LanguageCppType" },
585+
"link-time-optimize": { "$ref": "#/definitions/LinkTimeOptimizeType" },
580586
"misc": { "$ref": "#/definitions/MiscTypes" },
581587
"memory": { "$ref": "#/definitions/MemoryType" },
582588
"optimize": { "$ref": "#/definitions/OptimizeType" },
@@ -615,6 +621,7 @@
615621
"del-path": { "$ref": "#/definitions/DelpathsType" },
616622
"language-C": { "$ref": "#/definitions/LanguageCType" },
617623
"language-CPP": { "$ref": "#/definitions/LanguageCppType" },
624+
"link-time-optimize": { "$ref": "#/definitions/LinkTimeOptimizeType" },
618625
"misc": { "$ref": "#/definitions/MiscTypes" },
619626
"optimize": { "$ref": "#/definitions/OptimizeType" },
620627
"processor": { "$ref": "#/definitions/ProcessorType" },
@@ -745,6 +752,7 @@
745752
"groups": { "$ref": "#/definitions/GroupsType" },
746753
"language-C": { "$ref": "#/definitions/LanguageCType" },
747754
"language-CPP": { "$ref": "#/definitions/LanguageCppType" },
755+
"link-time-optimize": { "$ref": "#/definitions/LinkTimeOptimizeType" },
748756
"misc": { "$ref": "#/definitions/MiscTypes" },
749757
"not-for-context": { "$ref": "#/definitions/NotForContext" },
750758
"optimize": { "$ref": "#/definitions/OptimizeType" },
@@ -781,6 +789,7 @@
781789
"warnings": { "$ref": "#/definitions/WarningsType" },
782790
"language-C": { "$ref": "#/definitions/LanguageCType" },
783791
"language-CPP": { "$ref": "#/definitions/LanguageCppType" },
792+
"link-time-optimize": { "$ref": "#/definitions/LinkTimeOptimizeType" },
784793
"define": { "$ref": "#/definitions/DefinesType" },
785794
"define-asm": { "$ref": "#/definitions/DefinesAsmType" },
786795
"undefine": { "$ref": "#/definitions/UndefinesType" },
@@ -849,6 +858,7 @@
849858
"language": { "$ref": "#/definitions/FileLanguageType" },
850859
"language-C": { "$ref": "#/definitions/LanguageCType" },
851860
"language-CPP": { "$ref": "#/definitions/LanguageCppType" },
861+
"link-time-optimize": { "$ref": "#/definitions/LinkTimeOptimizeType" },
852862
"misc": { "$ref": "#/definitions/MiscTypes" },
853863
"not-for-context": { "$ref": "#/definitions/NotForContext" },
854864
"optimize": { "$ref": "#/definitions/OptimizeType" },
@@ -968,6 +978,7 @@
968978
"instances": { "$ref": "#/definitions/InstancesType" },
969979
"language-C": { "$ref": "#/definitions/LanguageCType" },
970980
"language-CPP": { "$ref": "#/definitions/LanguageCppType" },
981+
"link-time-optimize": { "$ref": "#/definitions/LinkTimeOptimizeType" },
971982
"misc": { "$ref": "#/definitions/MiscTypes" },
972983
"not-for-context": { "$ref": "#/definitions/NotForContext" },
973984
"optimize": { "$ref": "#/definitions/OptimizeType" },
@@ -1127,6 +1138,7 @@
11271138
"generators": { "$ref": "#/definitions/GeneratorsOutputType" },
11281139
"language-C": { "$ref": "#/definitions/LanguageCType" },
11291140
"language-CPP": { "$ref": "#/definitions/LanguageCppType" },
1141+
"link-time-optimize": { "$ref": "#/definitions/LinkTimeOptimizeType" },
11301142
"misc": { "$ref": "#/definitions/MiscTypes" },
11311143
"optimize": { "$ref": "#/definitions/OptimizeType" },
11321144
"output-dirs": { "$ref": "#/definitions/OutputDirectoriesType" },
@@ -1173,6 +1185,7 @@
11731185
"language-CPP": { "$ref": "#/definitions/LanguageCppType" },
11741186
"layers": { "$ref": "#/definitions/LayersType" },
11751187
"linker": { "$ref": "#/definitions/LinkersType" },
1188+
"link-time-optimize": { "$ref": "#/definitions/LinkTimeOptimizeType" },
11761189
"misc": { "$ref": "#/definitions/MiscTypes" },
11771190
"optimize": { "$ref": "#/definitions/OptimizeType" },
11781191
"output": { "$ref": "#/definitions/OutputType" },
@@ -1373,6 +1386,7 @@
13731386
"warnings": { "$ref": "#/definitions/WarningsType" },
13741387
"language-C": { "$ref": "#/definitions/LanguageCType" },
13751388
"language-CPP": { "$ref": "#/definitions/LanguageCppType" },
1389+
"link-time-optimize": { "$ref": "#/definitions/LinkTimeOptimizeType" },
13761390
"misc": { "$ref": "#/definitions/MiscType" },
13771391
"define": { "$ref": "#/definitions/BuildDefinesType" },
13781392
"define-asm": { "$ref": "#/definitions/BuildDefinesType" },
@@ -1455,6 +1469,7 @@
14551469
"language-C": { "$ref": "#/definitions/LanguageCType" },
14561470
"language-CPP": { "$ref": "#/definitions/LanguageCppType" },
14571471
"linker": { "$ref": "#/definitions/LinkersType" },
1472+
"link-time-optimize": { "$ref": "#/definitions/LinkTimeOptimizeType" },
14581473
"misc": { "$ref": "#/definitions/MiscTypes" },
14591474
"packs": { "$ref": "#/definitions/PacksType" },
14601475
"processor": { "$ref": "#/definitions/ProcessorType" },
@@ -1629,6 +1644,7 @@
16291644
"warnings": { "$ref": "#/definitions/WarningsType" },
16301645
"language-C": { "$ref": "#/definitions/LanguageCType" },
16311646
"language-CPP": { "$ref": "#/definitions/LanguageCppType" },
1647+
"link-time-optimize": { "$ref": "#/definitions/LinkTimeOptimizeType" },
16321648
"define": { "$ref": "#/definitions/DefinesType" },
16331649
"define-asm": { "$ref": "#/definitions/DefinesType" },
16341650
"undefine": { "$ref": "#/definitions/UndefinesType" },
@@ -1697,6 +1713,7 @@
16971713
"language-C": { "$ref": "#/definitions/LanguageCType" },
16981714
"language-CPP": { "$ref": "#/definitions/LanguageCppType" },
16991715
"linker": { "$ref": "#/definitions/LinkersType" },
1716+
"link-time-optimize": { "$ref": "#/definitions/LinkTimeOptimizeType" },
17001717
"misc": { "$ref": "#/definitions/MiscTypes" },
17011718
"not-for-context": { "$ref": "#/definitions/NotForContext" },
17021719
"optimize": { "$ref": "#/definitions/OptimizeType" },

tools/projmgr/src/ProjMgrCbuild.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -460,6 +460,9 @@ void ProjMgrCbuild::SetControlsNode(YAML::Node node, const ContextItem* context,
460460
SetNodeValue(node[YAML_WARNINGS], controls.warnings);
461461
SetNodeValue(node[YAML_LANGUAGE_C], controls.languageC);
462462
SetNodeValue(node[YAML_LANGUAGE_CPP], controls.languageCpp);
463+
if (controls.lto) {
464+
node[YAML_LINK_TIME_OPTIMIZE] = true;
465+
}
463466
SetMiscNode(node[YAML_MISC], controls.misc);
464467
SetDefineNode(node[YAML_DEFINE], controls.defines);
465468
SetDefineNode(node[YAML_DEFINE_ASM], controls.definesAsm);

tools/projmgr/src/ProjMgrWorker.cpp

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2923,6 +2923,19 @@ bool ProjMgrWorker::ProcessPrecedences(ContextItem& context, BoardOrDevice proce
29232923
error |= true;
29242924
}
29252925

2926+
// Link Time Optimize
2927+
context.controls.processed.lto =
2928+
context.controls.cproject.lto ||
2929+
context.controls.csolution.lto ||
2930+
context.controls.target.lto ||
2931+
context.controls.build.lto;
2932+
for (auto& setup : context.controls.setups) {
2933+
context.controls.processed.lto |= setup.lto;
2934+
}
2935+
for (auto& [_, clayer] : context.controls.clayers) {
2936+
context.controls.processed.lto |= clayer.lto;
2937+
}
2938+
29262939
// Misc
29272940
vector<vector<MiscItem>*> miscVec = {
29282941
&context.controls.cproject.misc,

tools/projmgr/src/ProjMgrYamlParser.cpp

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -960,6 +960,7 @@ bool ProjMgrYamlParser::ParseBuildType(const YAML::Node& parent, const string& f
960960
for (const auto& item : buildChildren) {
961961
ParseString(parent, item.first, item.second);
962962
}
963+
buildType.lto = parent[YAML_LINK_TIME_OPTIMIZE].IsDefined();
963964
ParseProcessor(parent, buildType.processor);
964965
ParseMisc(parent, buildType.misc);
965966
if (!ParseDefine(parent[YAML_DEFINE], buildType.defines)) {
@@ -1089,6 +1090,7 @@ const set<string> solutionKeys = {
10891090
YAML_WARNINGS,
10901091
YAML_LANGUAGE_C,
10911092
YAML_LANGUAGE_CPP,
1093+
YAML_LINK_TIME_OPTIMIZE,
10921094
YAML_DEFINE,
10931095
YAML_DEFINE_ASM,
10941096
YAML_UNDEFINE,
@@ -1123,6 +1125,7 @@ const set<string> projectKeys = {
11231125
YAML_WARNINGS,
11241126
YAML_LANGUAGE_C,
11251127
YAML_LANGUAGE_CPP,
1128+
YAML_LINK_TIME_OPTIMIZE,
11261129
YAML_DEFINE,
11271130
YAML_DEFINE_ASM,
11281131
YAML_UNDEFINE,
@@ -1152,6 +1155,7 @@ const set<string> setupKeys = {
11521155
YAML_WARNINGS,
11531156
YAML_LANGUAGE_C,
11541157
YAML_LANGUAGE_CPP,
1158+
YAML_LINK_TIME_OPTIMIZE,
11551159
YAML_DEFINE,
11561160
YAML_DEFINE_ASM,
11571161
YAML_UNDEFINE,
@@ -1178,6 +1182,7 @@ const set<string> layerKeys = {
11781182
YAML_WARNINGS,
11791183
YAML_LANGUAGE_C,
11801184
YAML_LANGUAGE_CPP,
1185+
YAML_LINK_TIME_OPTIMIZE,
11811186
YAML_DEFINE,
11821187
YAML_DEFINE_ASM,
11831188
YAML_UNDEFINE,
@@ -1215,6 +1220,7 @@ const set<string> targetTypeKeys = {
12151220
YAML_WARNINGS,
12161221
YAML_LANGUAGE_C,
12171222
YAML_LANGUAGE_CPP,
1223+
YAML_LINK_TIME_OPTIMIZE,
12181224
YAML_DEFINE,
12191225
YAML_DEFINE_ASM,
12201226
YAML_UNDEFINE,
@@ -1236,6 +1242,7 @@ const set<string> buildTypeKeys = {
12361242
YAML_WARNINGS,
12371243
YAML_LANGUAGE_C,
12381244
YAML_LANGUAGE_CPP,
1245+
YAML_LINK_TIME_OPTIMIZE,
12391246
YAML_DEFINE,
12401247
YAML_DEFINE_ASM,
12411248
YAML_UNDEFINE,
@@ -1317,6 +1324,7 @@ const set<string> componentsKeys = {
13171324
YAML_WARNINGS,
13181325
YAML_LANGUAGE_C,
13191326
YAML_LANGUAGE_CPP,
1327+
YAML_LINK_TIME_OPTIMIZE,
13201328
YAML_DEFINE,
13211329
YAML_DEFINE_ASM,
13221330
YAML_UNDEFINE,
@@ -1366,6 +1374,7 @@ const set<string> groupsKeys = {
13661374
YAML_WARNINGS,
13671375
YAML_LANGUAGE_C,
13681376
YAML_LANGUAGE_CPP,
1377+
YAML_LINK_TIME_OPTIMIZE,
13691378
YAML_DEFINE,
13701379
YAML_DEFINE_ASM,
13711380
YAML_UNDEFINE,
@@ -1387,6 +1396,7 @@ const set<string> filesKeys = {
13871396
YAML_WARNINGS,
13881397
YAML_LANGUAGE_C,
13891398
YAML_LANGUAGE_CPP,
1399+
YAML_LINK_TIME_OPTIMIZE,
13901400
YAML_DEFINE,
13911401
YAML_DEFINE_ASM,
13921402
YAML_UNDEFINE,

0 commit comments

Comments
 (0)