Skip to content

Commit

Permalink
[projmgr] Introduce connections replacing interfaces
Browse files Browse the repository at this point in the history
  • Loading branch information
grasci-arm committed Dec 20, 2022
1 parent 2db1be7 commit ea958c1
Show file tree
Hide file tree
Showing 27 changed files with 638 additions and 366 deletions.
4 changes: 2 additions & 2 deletions libs/rtemodel/test/src/RteModelTest.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -211,9 +211,9 @@ TEST_F(RteModelPrjTest, LoadCprj) {
EXPECT_EQ(boardName, "RteTest Test board");
// get layers
auto& allLayerDescriptors = rteKernel.GetGlobalModel()->GetLayerDescriptors();
EXPECT_EQ(allLayerDescriptors.size(), 6);
EXPECT_EQ(allLayerDescriptors.size(), 8);
auto& filteredLayerDescriptors = activeTarget->GetFilteredModel()->GetLayerDescriptors();
EXPECT_EQ(filteredLayerDescriptors.size(), 4);
EXPECT_EQ(filteredLayerDescriptors.size(), 6);

const string rteDir = RteUtils::ExtractFilePath(RteTestM3_cprj, true) + "RTE/";
const string CompConfig_0_Base_Version = rteDir + "RteTest/" + "ComponentLevelConfig_0.h.base@0.0.1";
Expand Down
8 changes: 7 additions & 1 deletion test/packs/ARM/RteTest_DFP/0.2.0/ARM.RteTest_DFP.pdsc
Original file line number Diff line number Diff line change
Expand Up @@ -502,7 +502,13 @@
</clayer>
<clayer name="PdscType" type="PdscType" file="Layers/pdsc-type-mismatch.clayer.yml">
<description>"Test pdsc type mismatch"</description>
</clayer>
</clayer>
<clayer name="Config1" type="Config1" file="Layers/config1.clayer.yml">
<description>"Test board layer with shield"</description>
</clayer>
<clayer name="Config2" type="Config2" file="Layers/config2.clayer.yml">
<description>"Test board layer with shield"</description>
</clayer>
</clayers>

</package>
19 changes: 10 additions & 9 deletions test/packs/ARM/RteTest_DFP/0.2.0/Layers/board1.clayer.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,13 @@ layer:
components:
- component: Board:Test:Rev1

interfaces:
provides:
- MultipleProvided # same interface is provided multiple times with identical values
consumes:
- ExactMatch: 42 # both key and value exact match
- EmptyConsumedValue # key exact match, consumed value is empty
- EmptyValues # key exact match, both values empty
- AddedValueLessThanProvided: +49 # added consumed values are less than provided
- AddedValueEqualToProvided: +499 # added consumed values are equal to provided
connections:
- connect: Board1 Connections
provides:
- MultipleProvided # same connection is provided multiple times with identical values
consumes:
- ExactMatch: 42 # both key and value exact match
- EmptyConsumedValue # key exact match, consumed value is empty
- EmptyValues # key exact match, both values empty
- AddedValueLessThanProvided: +49 # added consumed values are less than provided
- AddedValueEqualToProvided: +499 # added consumed values are equal to provided
19 changes: 10 additions & 9 deletions test/packs/ARM/RteTest_DFP/0.2.0/Layers/board2.clayer.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,13 @@ layer:
components:
- component: Board:Test:Rev2

interfaces:
provides:
- MultipleProvided # same interface is provided multiple times with identical values
consumes:
- ExactMatch: 42 # both key and value exact match
- EmptyConsumedValue # key exact match, consumed value is empty
- EmptyValues # key exact match, both values empty
- AddedValueLessThanProvided: +49 # added consumed values are less than provided
- AddedValueEqualToProvided: +499 # added consumed values are equal to provided
connections:
- connect: Board2 Connections
provides:
- MultipleProvided # same connection is provided multiple times with identical values
consumes:
- ExactMatch: 42 # both key and value exact match
- EmptyConsumedValue # key exact match, consumed value is empty
- EmptyValues # key exact match, both values empty
- AddedValueLessThanProvided: +49 # added consumed values are less than provided
- AddedValueEqualToProvided: +499 # added consumed values are equal to provided
19 changes: 10 additions & 9 deletions test/packs/ARM/RteTest_DFP/0.2.0/Layers/board3.clayer.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,13 @@ layer:
components:
- component: Dependency:Board

interfaces:
provides:
- MultipleProvided # same interface is provided multiple times with identical values
consumes:
- ExactMatch: 42 # both key and value exact match
- EmptyConsumedValue # key exact match, consumed value is empty
- EmptyValues # key exact match, both values empty
- AddedValueLessThanProvided: +49 # added consumed values are less than provided
- AddedValueEqualToProvided: +499 # added consumed values are equal to provided
connections:
- connect: Board3 Connections
provides:
- MultipleProvided # same connection is provided multiple times with identical values
consumes:
- ExactMatch: 42 # both key and value exact match
- EmptyConsumedValue # key exact match, consumed value is empty
- EmptyValues # key exact match, both values empty
- AddedValueLessThanProvided: +49 # added consumed values are less than provided
- AddedValueEqualToProvided: +499 # added consumed values are equal to provided
37 changes: 37 additions & 0 deletions test/packs/ARM/RteTest_DFP/0.2.0/Layers/config1.clayer.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
# yaml-language-server: $schema=https://raw.githubusercontent.com/Open-CMSIS-Pack/devtools/main/tools/projmgr/schemas/clayer.schema.json

layer:

type: Config1

components:
- component: Board:Test:Rev1

connections:
- connect: connect A
set: set1.select1
info: set 1 select 1
provides:
- connectA

- connect: connect B
set: set1.select2
info: set 1 select 2
provides:
- connectB

- connect: connect C
set: set2.select1
info: set 2 select 1
provides:
- connectC

- connect: connect D
set: set2.select2
info: set 2 select 2
provides:
- connectD

- connect: "test connect common E"
provides:
- connectE
25 changes: 25 additions & 0 deletions test/packs/ARM/RteTest_DFP/0.2.0/Layers/config2.clayer.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
# yaml-language-server: $schema=https://raw.githubusercontent.com/Open-CMSIS-Pack/devtools/main/tools/projmgr/schemas/clayer.schema.json

layer:

type: Config2

components:
- component: Board:Test:Rev2

connections:
- connect: connect F
set: set1.select1
info: set 1 select 1
provides:
- connectF

- connect: connect G
set: set1.select2
info: set 1 select 2
provides:
- connectG

- connect: "test connect common H"
provides:
- connectH
17 changes: 9 additions & 8 deletions test/packs/ARM/RteTest_DFP/0.2.0/Layers/incompatible.clayer.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,12 @@ layer:
components:
- component: Device:Test variant

interfaces:
provides:
- MultipleProvidedNonIdentical0: 111 # same interface is provided multiple times with non identical values
- MultipleProvidedNonIdentical1: 222 # same interface is provided multiple times with non identical values
consumes:
- ProvidedDontMatch: -1 # consumed interface doesn't match provided one
- ProvidedEmpty: 123 # consumed interface doesn't match empty provided one
- AddedValueHigherThanProvided: +100 # added consumed values are equal to provided
connections:
- connect: Incompatible Connections
provides:
- MultipleProvidedNonIdentical0: 111 # same connection is provided multiple times with non identical values
- MultipleProvidedNonIdentical1: 222 # same connection is provided multiple times with non identical values
consumes:
- ProvidedDontMatch: -1 # consumed connection doesn't match provided one
- ProvidedEmpty: 123 # consumed connection doesn't match empty provided one
- AddedValueHigherThanProvided: +100 # added consumed values are equal to provided
13 changes: 7 additions & 6 deletions test/packs/ARM/RteTest_DFP/0.2.0/Layers/testvariant.clayer.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,10 @@ layer:
components:
- component: Device:Test variant

interfaces:
provides:
- MultipleProvided # same interface is provided multiple times with identical values
consumes:
- AddedValueLessThanProvided: +49 # added consumed values are less than provided
- AddedValueEqualToProvided: +499 # added consumed values are equal to provided
connections:
- connect: Test variant Connections
provides:
- MultipleProvided # same connection is provided multiple times with identical values
consumes:
- AddedValueLessThanProvided: +49 # added consumed values are less than provided
- AddedValueEqualToProvided: +499 # added consumed values are equal to provided
23 changes: 15 additions & 8 deletions tools/projmgr/include/ProjMgrParser.h
Original file line number Diff line number Diff line change
Expand Up @@ -170,11 +170,17 @@ struct LayerItem {
};

/**
* @brief interfaces item containing
* vector of provided interfaces pairs,
* vector of consumed interfaces pairs
* @brief connect item containing
* connect functionality description
* set <config-id>.<select> value for config option identification
* info display description
* vector of provided connections pairs,
* vector of consumed connections pairs
*/
struct InterfacesItem {
struct ConnectItem {
std::string connect;
std::string set;
std::string info;
std::vector<std::pair<std::string, std::string>> provides;
std::vector<std::pair<std::string, std::string>> consumes;
};
Expand Down Expand Up @@ -288,7 +294,8 @@ struct CsolutionItem {
* list of required components,
* list of user groups,
* list of layers,
* list of setups
* list of setups,
* list of connections
*/
struct CprojectItem {
std::string name;
Expand All @@ -301,7 +308,7 @@ struct CprojectItem {
std::vector<GroupNode> groups;
std::vector<LayerItem> clayers;
std::vector<SetupItem> setups;
InterfacesItem interfaces;
std::vector<ConnectItem> connections;
};

/**
Expand All @@ -314,7 +321,7 @@ struct CprojectItem {
* layer target properties,
* list of required components,
* list of user groups,
* list of interfaces
* list of connections
*/
struct ClayerItem {
std::string name;
Expand All @@ -326,7 +333,7 @@ struct ClayerItem {
std::vector<RteDirItem> rteDirs;
std::vector<ComponentItem> components;
std::vector<GroupNode> groups;
InterfacesItem interfaces;
std::vector<ConnectItem> connections;
};

/**
Expand Down
2 changes: 1 addition & 1 deletion tools/projmgr/include/ProjMgrUtils.h
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ typedef std::vector<StrPair> StrPairVec;
/**
* @brief vector of string pair pointer
*/
typedef std::vector<StrPair*> StrPairPtrVec;
typedef std::vector<const StrPair*> StrPairPtrVec;

/**
* @brief map of string vector
Expand Down
66 changes: 56 additions & 10 deletions tools/projmgr/include/ProjMgrWorker.h
Original file line number Diff line number Diff line change
Expand Up @@ -12,21 +12,58 @@
#include "ProjMgrUtils.h"

/**
* @brief interfaces validation result containing
* @brief vector of ConnectItem pointers
*/
typedef std::vector<const ConnectItem*> ConnectPtrVec;

/**
* @brief connections collection item containing
* filename pointer
* layer type
* vector of ConnectItem pointers
*/
struct ConnectionsCollection {
const std::string* filename;
std::string type;
ConnectPtrVec connections;
};

/**
* @brief vector of ConnectionsCollection
*/
typedef std::vector<ConnectionsCollection> ConnectionsCollectionVec;

/**
* @brief map of ConnectionsCollection
*/
typedef std::map<std::string, ConnectionsCollectionVec> ConnectionsCollectionMap;

/**
* @brief connections validation result containing
* boolean valid,
* conflicted interfaces,
* overflowed interfaces,
* incompatible interfaces,
* provided interfaces
* conflicted connections,
* overflowed connections,
* incompatible connections,
* provided connections
*/
struct InterfacesValidationResult {
struct ConnectionsValidationResult {
bool valid;
StrVec conflicts;
StrPairVec overflows;
StrPairVec incompatibles;
StrPairPtrVec provides;
};

/**
* @brief connections lists
* list of consumes
* list of provides
*/
struct ConnectionsList {
StrPairPtrVec consumes;
StrPairPtrVec provides;
};

/**
* @brief toolchain item containing
* toolchain name,
Expand Down Expand Up @@ -170,7 +207,11 @@ struct TranslationControl {
* list of user groups,
* map of absolute file paths,
* map of generators,
* map of compatible layers,
* valid connections,
* linker script,
* map of variables,
* boolean processed precedences
*/
struct ContextItem {
CdefaultItem* cdefault = nullptr;
Expand Down Expand Up @@ -207,6 +248,7 @@ struct ContextItem {
std::map<std::string, RteGenerator*> generators;
std::map<std::string, std::pair<std::string, std::string>> gpdscs;
StrVecMap compatibleLayers;
std::vector<ConnectionsCollectionVec> validConnections;
std::string linkerScript;
std::map<std::string, std::string> variables;
bool precedences;
Expand Down Expand Up @@ -461,7 +503,6 @@ class ProjMgrWorker {
bool ProcessConfigFiles(ContextItem& context);
bool ProcessComponentFiles(ContextItem& context);
bool ProcessGroups(ContextItem& context);
bool ProcessInterfaces(ContextItem& context);
bool ProcessSequencesRelatives(ContextItem& context);
bool ProcessSequencesRelatives(ContextItem& context, std::vector<std::string>& src, const std::string& ref = std::string());
bool ProcessSequencesRelatives(ContextItem& context, BuildType& build, const std::string& ref = std::string());
Expand Down Expand Up @@ -491,11 +532,16 @@ class ProjMgrWorker {
std::vector<PackageItem> GetFilteredPacks(const PackageItem& packItem, const std::string& rtePath) const;
ToolchainItem GetToolchain(const std::string& compiler);
bool IsPreIncludeByTarget(const RteTarget* activeTarget, const std::string& preInclude);
InterfacesValidationResult ValidateInterfaces(ContextItem& context, const StrVec& genericLayers = StrVec());
void PrintInterfaceValidation(InterfacesValidationResult result);
void PrintConnectionsValidation(ConnectionsValidationResult result);
bool CollectLayersFromPacks(ContextItem& context, StrVecMap& clayers);
bool DiscoverMatchingLayers(ContextItem& context);
void GetAllCombinations(const StrVecMap& src, const StrVecMap::iterator it, std::vector<StrVec>& combinations, const StrVec& previous = StrVec());
void CollectConnections(ContextItem& context, ConnectionsCollectionVec& connections);
void GetConsumesProvides(const ConnectionsCollectionVec& collection, ConnectionsList& connections);
ConnectionsCollectionMap ClassifyConnections(const ConnectionsCollectionVec& connections);
ConnectionsValidationResult ValidateConnections(ConnectionsList& connections);
void GetAllCombinations(const ConnectionsCollectionMap& src, const ConnectionsCollectionMap::iterator it,
std::vector<ConnectionsCollectionVec>& combinations, const ConnectionsCollectionVec& previous = ConnectionsCollectionVec());
void PushBackUniquely(ConnectionsCollectionVec& vec, const ConnectionsCollection& value);
std::string ExpandString(const std::string& src, const StrMap& variables);
void ListLatestToolchains(StrMap& toolchains, const std::string& localDir);
};
Expand Down
Loading

0 comments on commit ea958c1

Please sign in to comment.