Skip to content

Commit b5277bf

Browse files
[rtemodel, projmgr] Recreate constructed files unconditionally
1 parent d55a79e commit b5277bf

File tree

6 files changed

+39
-29
lines changed

6 files changed

+39
-29
lines changed

libs/rtemodel/src/RteProject.cpp

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
*/
77
/******************************************************************************/
88
/*
9-
* Copyright (c) 2020-2024 Arm Limited. All rights reserved.
9+
* Copyright (c) 2020-2025 Arm Limited. All rights reserved.
1010
*
1111
* SPDX-License-Identifier: Apache-2.0
1212
*/
@@ -1090,9 +1090,6 @@ void RteProject::UpdateRte() {
10901090
}
10911091

10921092
void RteProject::GenerateRteHeaders() {
1093-
if (!ShouldUpdateRte())
1094-
return;
1095-
10961093
// generate header files for all targets
10971094
for (auto itt : m_targets) {
10981095
RteTarget* target = itt.second;

libs/rtemodel/src/RteTarget.cpp

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
*/
77
/******************************************************************************/
88
/*
9-
* Copyright (c) 2020-2024 Arm Limited. All rights reserved.
9+
* Copyright (c) 2020-2025 Arm Limited. All rights reserved.
1010
*
1111
* SPDX-License-Identifier: Apache-2.0
1212
*/
@@ -1991,12 +1991,11 @@ bool RteTarget::GenerateRteHeaderFile(const string& headerName, const string& co
19911991
}
19921992
// construct head comment
19931993
ostringstream oss;
1994+
RteCallback* callback = GetCallback();
1995+
if (!callback) {
1996+
return false;
1997+
}
19941998
if (!bRegionsHeader) {
1995-
RteCallback* callback = GetCallback();
1996-
if (!callback) {
1997-
return false;
1998-
}
1999-
20001999
bool foundToolInfo = false;
20012000
auto kernel = callback->GetRteKernel();
20022001
if (kernel) {
@@ -2050,8 +2049,10 @@ bool RteTarget::GenerateRteHeaderFile(const string& headerName, const string& co
20502049
}
20512050

20522051
// file does not exist or its content is different
2053-
RteFsUtils::CopyBufferToFile(headerFile, oss.str(), false); // write file
2054-
2052+
if (RteFsUtils::CopyBufferToFile(headerFile, oss.str(), false) // write file
2053+
&& !GetProject()->ShouldUpdateRte() && !bRegionsHeader) {
2054+
callback->OutputMessage("Constructed file " + headerFile + " was recreated");
2055+
}
20552056
return true;
20562057
}
20572058
// End of RteTarget.cpp

tools/projmgr/include/ProjMgrWorker.h

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2020-2024 Arm Limited. All rights reserved.
2+
* Copyright (c) 2020-2025 Arm Limited. All rights reserved.
33
*
44
* SPDX-License-Identifier: Apache-2.0
55
*/
@@ -782,6 +782,12 @@ class ProjMgrWorker {
782782
*/
783783
void CollectUnusedPacks();
784784

785+
/**
786+
* @brief check rte errors
787+
* @return true if there is no error
788+
*/
789+
bool CheckRteErrors(void);
790+
785791
protected:
786792
ProjMgrParser* m_parser = nullptr;
787793
ProjMgrKernel* m_kernel = nullptr;
@@ -824,7 +830,6 @@ class ProjMgrWorker {
824830
bool LoadPacks(ContextItem& context);
825831
bool CheckMissingPackRequirements(const std::string& contextName);
826832
bool CollectRequiredPdscFiles(ContextItem& context, const std::string& packRoot);
827-
bool CheckRteErrors(void);
828833
bool CheckBoardDeviceInLayer(const ContextItem& context, const ClayerItem& clayer);
829834
bool CheckCompiler(const std::vector<std::string>& forCompiler, const std::string& selectedCompiler);
830835
bool CheckType(const TypeFilter& typeFilter, const std::vector<TypePair>& typeVec);

tools/projmgr/src/ProjMgr.cpp

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -655,15 +655,19 @@ bool ProjMgr::Configure() {
655655

656656
bool ProjMgr::UpdateRte() {
657657
// Update the RTE files
658-
if (m_updateRteFiles) {
659-
for (auto& contextItem : m_processedContexts) {
660-
if (contextItem->rteActiveProject != nullptr) {
658+
for (auto& contextItem : m_processedContexts) {
659+
if (contextItem->rteActiveProject != nullptr) {
660+
if (m_updateRteFiles) {
661661
contextItem->rteActiveProject->SetAttribute("update-rte-files", "1");
662662
contextItem->rteActiveProject->UpdateRte();
663+
} else {
664+
contextItem->rteActiveProject->GenerateRteHeaders();
663665
}
664666
}
665667
}
666-
bool result = true;
668+
669+
bool result = m_worker.CheckRteErrors();
670+
667671
for (auto& contextItem : m_processedContexts) {
668672
// Check PLM files
669673
if (!m_worker.CheckConfigPLMFiles(*contextItem)) {

tools/projmgr/test/src/ProjMgrGeneratorUnitTests.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2020-2021 Arm Limited. All rights reserved.
2+
* Copyright (c) 2020-2025 Arm Limited. All rights reserved.
33
*
44
* SPDX-License-Identifier: Apache-2.0
55
*/
@@ -200,7 +200,7 @@ TEST_F(ProjMgrGeneratorUnitTests, DryRun) {
200200
ProjMgrTestEnv::CompareFile(testinput_folder + "/TestSolution/ref/TestProject3_1.Debug+TypeA.cbuild-gen.yml", generatorInputFile, stripAbsoluteFunc);
201201

202202
EXPECT_EQ(true, std::filesystem::exists(generatorInputFile));
203-
EXPECT_EQ(false, std::filesystem::exists(rteDir));
203+
EXPECT_EQ(false, std::filesystem::exists(rteDir + "/Device"));
204204
EXPECT_EQ(false, std::filesystem::exists(targetGPDSC));
205205
EXPECT_EQ(false, std::filesystem::exists(generatorDestination));
206206

tools/projmgr/test/src/ProjMgrUnitTests.cpp

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2020-2024 Arm Limited. All rights reserved.
2+
* Copyright (c) 2020-2025 Arm Limited. All rights reserved.
33
*
44
* SPDX-License-Identifier: Apache-2.0
55
*/
@@ -1057,21 +1057,21 @@ TEST_F(ProjMgrUnitTests, RunProjMgrSolution_LockPackFrozen) {
10571057
EXPECT_NE(0, RunProjMgr(8, argv, m_envp));
10581058
EXPECT_NE(streamRedirect.GetErrorString().find(cbuildPack + " - error csolution: file not allowed to be updated"), string::npos);
10591059
ProjMgrTestEnv::CompareFile(expectedCbuildPack, cbuildPack);
1060-
EXPECT_FALSE(RteFsUtils::Exists(rtePath));
1060+
EXPECT_FALSE(RteFsUtils::Exists(rtePath + "/Device"));
10611061

10621062
// 2nd run to verify that the cbuild-pack.yml content is stable
10631063
streamRedirect.ClearStringStreams();
10641064
EXPECT_NE(0, RunProjMgr(8, argv, m_envp));
10651065
EXPECT_NE(streamRedirect.GetErrorString().find(cbuildPack + " - error csolution: file not allowed to be updated"), string::npos);
10661066
ProjMgrTestEnv::CompareFile(expectedCbuildPack, cbuildPack);
1067-
EXPECT_FALSE(RteFsUtils::Exists(rtePath));
1067+
EXPECT_FALSE(RteFsUtils::Exists(rtePath + "/Device"));
10681068

10691069
// 3rd run without --frozen-packs to verify that the list can be updated
10701070
streamRedirect.ClearStringStreams();
10711071
EXPECT_EQ(0, RunProjMgr(7, argv, m_envp));
10721072
EXPECT_NE(streamRedirect.GetOutString().find(cbuildPack + " - info csolution: file generated successfully"), string::npos);
10731073
ProjMgrTestEnv::CompareFile(expectedCbuildPackRef, cbuildPack);
1074-
EXPECT_TRUE(RteFsUtils::Exists(rtePath));
1074+
EXPECT_TRUE(RteFsUtils::Exists(rtePath + "/Device"));
10751075

10761076
EXPECT_TRUE(RteFsUtils::Exists(testinput_folder + "/TestSolution/PackLocking/RTE/_CM3/RTE_Components.h"));
10771077
EXPECT_TRUE(RteFsUtils::Exists(testinput_folder + "/TestSolution/PackLocking/RTE/Device/RteTest_ARMCM3/gcc_arm.ld"));
@@ -3812,9 +3812,9 @@ TEST_F(ProjMgrUnitTests, RunProjMgr_NoUpdateRTEFiles) {
38123812
char* argv[8];
38133813
const string csolutionFile = UpdateTestSolutionFile("./TestProject4/test.cproject.yml");
38143814
const string rteFolder = RteFsUtils::ParentPath(csolutionFile) + "/TestProject4/RTE";
3815-
set<string> rteFilesBefore, rteFilesAfter;
3815+
set<string> rteFiles;
38163816
RteFsUtils::RemoveDir(rteFolder);
3817-
GetFilesInTree(rteFolder, rteFilesBefore);
3817+
StdStreamRedirect streamRedirect;
38183818

38193819
argv[1] = (char*)"convert";
38203820
argv[2] = (char*)"--solution";
@@ -3825,9 +3825,12 @@ TEST_F(ProjMgrUnitTests, RunProjMgr_NoUpdateRTEFiles) {
38253825
argv[7] = (char*)"--cbuildgen";
38263826
EXPECT_EQ(1, RunProjMgr(8, argv, m_envp));
38273827

3828-
// The RTE folder should be left untouched
3829-
GetFilesInTree(rteFolder, rteFilesAfter);
3830-
EXPECT_EQ(rteFilesBefore, rteFilesAfter);
3828+
EXPECT_NE(streamRedirect.GetErrorString().find("RTE/_TEST_TARGET/RTE_Components.h was recreated"), string::npos);
3829+
3830+
// Only constructed files are created in the RTE folder
3831+
GetFilesInTree(rteFolder, rteFiles);
3832+
const set<string> expected = { "RTE_Components.h", "_TEST_TARGET" };
3833+
EXPECT_EQ(expected, rteFiles);
38313834

38323835
// CPRJ should still be generated
38333836
ProjMgrTestEnv:: CompareFile(testoutput_folder + "/test+TEST_TARGET.cprj",

0 commit comments

Comments
 (0)