Skip to content

Commit e8d22f3

Browse files
authored
Merge branch 'main' into outbound/cbuild-run-implement-extensions
2 parents 65510f2 + 3256e32 commit e8d22f3

File tree

3 files changed

+72
-18
lines changed

3 files changed

+72
-18
lines changed

tools/projmgr/include/ProjMgrWorker.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -900,6 +900,7 @@ class ProjMgrWorker {
900900
std::vector<ConnectPtrVec>& combinations, const ConnectPtrVec& previous = ConnectPtrVec());
901901
void PushBackUniquely(ConnectionsCollectionVec& vec, const ConnectionsCollection& value);
902902
void PushBackUniquely(std::vector<ToolchainItem>& vec, const ToolchainItem& value);
903+
void GetRegisteredToolchainEnvVars(void);
903904
void GetRegisteredToolchains(void);
904905
bool GetLatestToolchain(ToolchainItem& toolchain);
905906
bool GetToolchainConfig(const std::string& name, const std::string& version, std::string& configPath, std::string& selectedConfigVersion);

tools/projmgr/src/ProjMgrWorker.cpp

Lines changed: 25 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1723,7 +1723,7 @@ bool ProjMgrWorker::ProcessToolchain(ContextItem& context) {
17231723

17241724
context.toolchain = GetToolchain(context.compiler);
17251725

1726-
GetRegisteredToolchains();
1726+
GetRegisteredToolchainEnvVars();
17271727
if (!m_regToolchainsEnvVars.empty()) {
17281728
// check if the required environment variable is set
17291729
auto itr = std::find_if(m_regToolchainsEnvVars.begin(), m_regToolchainsEnvVars.end(), [&context](const auto& item) {
@@ -4490,18 +4490,21 @@ bool ProjMgrWorker::IsContextSelected(const string& context) {
44904490
}
44914491

44924492
bool ProjMgrWorker::ListToolchains(vector<ToolchainItem>& toolchains) {
4493+
// If list toolchains command is fired
4494+
if (m_selectedContexts[0].empty()) {
4495+
// list registered toolchains
4496+
GetRegisteredToolchains();
4497+
if (m_toolchains.empty()) {
4498+
return false;
4499+
}
4500+
toolchains = m_toolchains;
4501+
return true;
4502+
}
4503+
44934504
bool allSupported = true;
44944505
for (const auto& selectedContext : m_selectedContexts) {
44954506
ContextItem& context = m_contexts[selectedContext];
4496-
if (selectedContext.empty()) {
4497-
// list registered toolchains
4498-
GetRegisteredToolchains();
4499-
if (m_toolchains.empty()) {
4500-
return false;
4501-
}
4502-
toolchains = m_toolchains;
4503-
return true;
4504-
}
4507+
45054508
// list required toolchains for selected contexts
45064509
if (!LoadPacks(context)) {
45074510
return false;
@@ -4525,10 +4528,7 @@ bool ProjMgrWorker::ListEnvironment(EnvironmentList& env) {
45254528
return true;
45264529
}
45274530

4528-
void ProjMgrWorker::GetRegisteredToolchains(void) {
4529-
if (!m_toolchains.empty()) {
4530-
return;
4531-
}
4531+
void ProjMgrWorker::GetRegisteredToolchainEnvVars(void) {
45324532
// extract toolchain info from environment variables
45334533
static const regex regEx = regex("(\\w+)_TOOLCHAIN_(\\d+)_(\\d+)_(\\d+)=(.*)");
45344534
for (const auto& envVar : m_envVars) {
@@ -4540,6 +4540,17 @@ void ProjMgrWorker::GetRegisteredToolchains(void) {
45404540
m_regToolchainsEnvVars[sm[1]][string(sm[2]) + '.' + string(sm[3]) + '.' + string(sm[4])] = sm[5];
45414541
}
45424542
}
4543+
4544+
if (m_regToolchainsEnvVars.empty()) {
4545+
m_toolchainErrors[MessageType::Warning].insert("no compiler registered. Add path to compiler 'bin' directory with environment variable <name>_TOOLCHAIN_<major>_<minor>_<patch>. <name> is one of AC6, GCC, IAR, CLANG");
4546+
}
4547+
}
4548+
4549+
void ProjMgrWorker::GetRegisteredToolchains(void) {
4550+
if (!m_toolchains.empty()) {
4551+
return;
4552+
}
4553+
GetRegisteredToolchainEnvVars();
45434554
// iterate over registered toolchains
45444555
for (const auto& [toolchainName, toolchainVersions] : m_regToolchainsEnvVars) {
45454556
for (const auto& [toolchainVersion, toolchainRoot] : toolchainVersions) {
@@ -4552,10 +4563,6 @@ void ProjMgrWorker::GetRegisteredToolchains(void) {
45524563
}
45534564
}
45544565
}
4555-
4556-
if (m_regToolchainsEnvVars.empty()) {
4557-
m_toolchainErrors[MessageType::Warning].insert("no compiler registered. Add path to compiler 'bin' directory with environment variable <name>_TOOLCHAIN_<major>_<minor>_<patch>. <name> is one of AC6, GCC, IAR, CLANG");
4558-
}
45594566
}
45604567

45614568
bool ProjMgrWorker::GetLatestToolchain(ToolchainItem& toolchain) {

tools/projmgr/test/src/ProjMgrUnitTests.cpp

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1926,6 +1926,52 @@ TEST_F(ProjMgrUnitTests, ListToolchainsSolution) {
19261926
EXPECT_EQ(outStr2, expected2);
19271927
}
19281928

1929+
TEST_F(ProjMgrUnitTests, ListToolchains_with_unknown_toolchain) {
1930+
StdStreamRedirect streamRedirect;
1931+
char* envp[4];
1932+
string ac6 = "AC6_TOOLCHAIN_6_18_0=" + testinput_folder;
1933+
string gcc = "GCC_TOOLCHAIN_11_3_1=" + testinput_folder;
1934+
string unknown = "UNKNOWN_TOOLCHAIN_1_2_3=" + testinput_folder;
1935+
envp[0] = (char*)ac6.c_str();
1936+
envp[1] = (char*)gcc.c_str();
1937+
envp[2] = (char*)unknown.c_str();
1938+
envp[3] = (char*)'\0';
1939+
char* argv[5];
1940+
const string& csolution = testinput_folder + "/TestSolution/toolchain.csolution.yml";
1941+
argv[1] = (char*)"list";
1942+
argv[2] = (char*)"toolchains";
1943+
argv[3] = (char*)"--solution";
1944+
argv[4] = (char*)csolution.c_str();
1945+
1946+
// Test listing required toolchains
1947+
EXPECT_EQ(0, RunProjMgr(5, argv, envp));
1948+
const string& expected = "AC6@>=0.0.0\nAC6@>=6.18.0\n[email protected]\n";
1949+
const string& outStr = streamRedirect.GetOutString();
1950+
const string& errStr = streamRedirect.GetErrorString();
1951+
EXPECT_EQ(outStr, expected);
1952+
EXPECT_TRUE(errStr.empty());
1953+
1954+
// Test with no input solution
1955+
streamRedirect.ClearStringStreams();
1956+
EXPECT_EQ(1, RunProjMgr(3, argv, envp));
1957+
const string& expected2 = "[email protected]\n[email protected]\n";
1958+
const string& outStr2 = streamRedirect.GetOutString();
1959+
const string& errStr2 = streamRedirect.GetErrorString();
1960+
EXPECT_EQ(outStr2, expected2);
1961+
EXPECT_TRUE(errStr2.find("error csolution: no toolchain cmake files found for 'UNKNOWN' in") != std::string::npos);
1962+
1963+
// Test with converting the solution
1964+
streamRedirect.ClearStringStreams();
1965+
argv[1] = (char*)"convert";
1966+
argv[2] = (char*)"--solution";
1967+
argv[3] = (char*)csolution.c_str();
1968+
1969+
// Test listing required toolchains
1970+
EXPECT_EQ(0, RunProjMgr(4, argv, envp));
1971+
const string& errStr3 = streamRedirect.GetErrorString();
1972+
EXPECT_TRUE(errStr3.empty());
1973+
}
1974+
19291975
TEST_F(ProjMgrUnitTests, ListLayersUniquelyCompatibleBoard) {
19301976
StdStreamRedirect streamRedirect;
19311977
char* argv[8];

0 commit comments

Comments
 (0)