@@ -455,6 +455,94 @@ bool ValidateSemantic::FileIsHeader(const std::string& name)
455455 return RteFsUtils::FileCategoryFromExtension (name) == " header" ;
456456}
457457
458+ /* *
459+ * @brief Check device attributes. Tests if all attributes like Dtz, Ddsp, ... are set
460+ * @param device RteDeviceItem to run on
461+ * @return passed / failed
462+ */
463+
464+ const map<string, list<string>> processorFeaturesMap = {
465+ // { "ARMV81MML" , { "Dfpu", "Dmpu", "Dtz", "Ddsp", "Dmve", "Dcdecp", "Dpacbti", "Dendian", "Dclock","DcoreVersion" } },
466+ { " Cortex-M0" , { " Dfpu" , " Dmpu" , " Ddsp" , " Dendian" , " Dclock" ," DcoreVersion" } },
467+ { " Cortex-M0+" , { " Dfpu" , " Dmpu" , " Ddsp" , " Dendian" , " Dclock" ," DcoreVersion" } },
468+ { " Cortex-M1" , { " Dfpu" , " Dmpu" , " Ddsp" , " Dendian" , " Dclock" ," DcoreVersion" } },
469+ { " Cortex-M3" , { " Dfpu" , " Dmpu" , " Ddsp" , " Dendian" , " Dclock" ," DcoreVersion" } },
470+ { " Cortex-M4" , { " Dfpu" , " Dmpu" , " Ddsp" , " Dendian" , " Dclock" ," DcoreVersion" } },
471+ { " Cortex-M7" , { " Dfpu" , " Dmpu" , " Ddsp" , " Dendian" , " Dclock" ," DcoreVersion" } },
472+ { " Cortex-M23" , { " Dfpu" , " Dmpu" , " Dtz" , " Ddsp" , " Dendian" , " Dclock" ," DcoreVersion" } },
473+ { " Cortex-M33" , { " Dfpu" , " Dmpu" , " Dtz" , " Ddsp" , " Dendian" , " Dclock" ," DcoreVersion" } },
474+ { " Cortex-M35P" , { " Dfpu" , " Dmpu" , " Dtz" , " Ddsp" , " Dmve" , " Dendian" , " Dclock" ," DcoreVersion" } },
475+ { " Cortex-M52" , { " Dfpu" , " Dmpu" , " Dtz" , " Ddsp" , " Dmve" , " Dendian" , " Dclock" ," DcoreVersion" } },
476+ { " Cortex-M55" , { " Dfpu" , " Dmpu" , " Dtz" , " Ddsp" , " Dmve" , " Dendian" , " Dclock" ," DcoreVersion" } },
477+ { " Cortex-M85" , { " Dfpu" , " Dmpu" , " Dtz" , " Ddsp" , " Dmve" , " Dendian" , " Dclock" ," DcoreVersion" } },
478+ { " Star-MC1" , { " Dfpu" , " Dmpu" , " Dtz" , " Ddsp" , " Dmve" , " Dendian" , " Dclock" ," DcoreVersion" } },
479+ { " SC000" , { " Dfpu" , " Dmpu" , " Dtz" , " Ddsp" , " Dendian" , " Dclock" ," DcoreVersion" } },
480+ { " SC300" , { " Dfpu" , " Dmpu" , " Dtz" , " Ddsp" , " Dendian" , " Dclock" ," DcoreVersion" } },
481+ { " ARMV8MBL" , { " Dfpu" , " Dmpu" , " Dtz" , " Ddsp" , " Dendian" , " Dclock" ," DcoreVersion" } },
482+ { " ARMV8MML" , { " Dfpu" , " Dmpu" , " Dtz" , " Ddsp" , " Dendian" , " Dclock" ," DcoreVersion" } },
483+ { " ARMV81MML" , { " Dfpu" , " Dmpu" , " Dtz" , " Ddsp" , " Dmve" , " Dendian" , " Dclock" ," DcoreVersion" } },
484+ /* Currently unchecked
485+ { "Cortex-R4" , { "Dfpu", "Dmpu", "Dtz", "Ddsp", "Dmve", "Dcdecp", "Dpacbti", "Dendian", "Dclock","DcoreVersion" } },
486+ { "Cortex-R5" , { "Dfpu", "Dmpu", "Dtz", "Ddsp", "Dmve", "Dcdecp", "Dpacbti", "Dendian", "Dclock","DcoreVersion" } },
487+ { "Cortex-R7" , { "Dfpu", "Dmpu", "Dtz", "Ddsp", "Dmve", "Dcdecp", "Dpacbti", "Dendian", "Dclock","DcoreVersion" } },
488+ { "Cortex-R8" , { "Dfpu", "Dmpu", "Dtz", "Ddsp", "Dmve", "Dcdecp", "Dpacbti", "Dendian", "Dclock","DcoreVersion" } },
489+ { "Cortex-A5" , { "Dfpu", "Dmpu", "Dtz", "Ddsp", "Dmve", "Dcdecp", "Dpacbti", "Dendian", "Dclock","DcoreVersion" } },
490+ { "Cortex-A7" , { "Dfpu", "Dmpu", "Dtz", "Ddsp", "Dmve", "Dcdecp", "Dpacbti", "Dendian", "Dclock","DcoreVersion" } },
491+ { "Cortex-A8" , { "Dfpu", "Dmpu", "Dtz", "Ddsp", "Dmve", "Dcdecp", "Dpacbti", "Dendian", "Dclock","DcoreVersion" } },
492+ { "Cortex-A9" , { "Dfpu", "Dmpu", "Dtz", "Ddsp", "Dmve", "Dcdecp", "Dpacbti", "Dendian", "Dclock","DcoreVersion" } },
493+ { "Cortex-A15" , { "Dfpu", "Dmpu", "Dtz", "Ddsp", "Dmve", "Dcdecp", "Dpacbti", "Dendian", "Dclock","DcoreVersion" } },
494+ { "Cortex-A17" , { "Dfpu", "Dmpu", "Dtz", "Ddsp", "Dmve", "Dcdecp", "Dpacbti", "Dendian", "Dclock","DcoreVersion" } },
495+ { "Cortex-A32" , { "Dfpu", "Dmpu", "Dtz", "Ddsp", "Dmve", "Dcdecp", "Dpacbti", "Dendian", "Dclock","DcoreVersion" } },
496+ { "Cortex-A35" , { "Dfpu", "Dmpu", "Dtz", "Ddsp", "Dmve", "Dcdecp", "Dpacbti", "Dendian", "Dclock","DcoreVersion" } },
497+ { "Cortex-A53" , { "Dfpu", "Dmpu", "Dtz", "Ddsp", "Dmve", "Dcdecp", "Dpacbti", "Dendian", "Dclock","DcoreVersion" } },
498+ { "Cortex-A57" , { "Dfpu", "Dmpu", "Dtz", "Ddsp", "Dmve", "Dcdecp", "Dpacbti", "Dendian", "Dclock","DcoreVersion" } },
499+ { "Cortex-A72" , { "Dfpu", "Dmpu", "Dtz", "Ddsp", "Dmve", "Dcdecp", "Dpacbti", "Dendian", "Dclock","DcoreVersion" } },
500+ { "Cortex-A73" , { "Dfpu", "Dmpu", "Dtz", "Ddsp", "Dmve", "Dcdecp", "Dpacbti", "Dendian", "Dclock","DcoreVersion" } },
501+ */
502+ };
503+
504+ const list<string> processorMulticoreFeaturesList = {
505+ " Pname" ,
506+ };
507+
508+ bool ValidateSemantic::CheckDeviceAttributes (RteDeviceItem *device)
509+ {
510+ if (!device) {
511+ return true ;
512+ }
513+
514+ bool bOk = false ;
515+ int lineNo = device->GetLineNumber ();
516+ const auto processors = device->GetProcessors ();
517+ for (const auto & [core, processor] : processors) {
518+ const auto & Dcore = processor->GetAttribute (" Dcore" );
519+ const auto & processorFeatures = processorFeaturesMap.find (Dcore);
520+ if (processorFeatures == processorFeaturesMap.end ()) {
521+ LogMsg (" M604" , NAME (Dcore), lineNo); // Dcore not found in list for feature check
522+ return true ;
523+ }
524+
525+ const auto & features = processorFeatures->second ;
526+ for (const auto & feature : features) {
527+ if (processor->GetEffectiveAttribute (feature) == " " ) {
528+ LogMsg (" M605" , NAME (Dcore), NAME2 (feature), lineNo); // Required processor feature '%NAME%' not found.
529+ bOk = false ;
530+ }
531+ }
532+
533+ // Test dependant features (if one is found, all the others must be present as well)
534+ if (processors.size () > 1 ) {
535+ for (const auto & requiredMulticoreFeature : processorMulticoreFeaturesList) {
536+ if (processor->GetEffectiveAttribute (requiredMulticoreFeature) == " " ) {
537+ LogMsg (" M605" , NAME (Dcore), NAME2 (requiredMulticoreFeature), lineNo); // Required processor feature '%NAME%' not found.
538+ bOk = false ;
539+ }
540+ }
541+ }
542+ }
543+
544+ return bOk;
545+ }
458546
459547/* *
460548 * @brief Check device dependencies. Tests if all dependencies are solved and a minimum
@@ -737,6 +825,7 @@ bool ValidateSemantic::TestMcuDependencies(RtePackage* pKg)
737825 pKg->GetEffectiveDeviceItems (devices);
738826 for (auto device : devices) {
739827 CheckDeviceDependencies (device, rteProject);
828+ CheckDeviceAttributes (device);
740829 }
741830
742831 model.DeleteProject (1 );
0 commit comments