PandA-2024.02
write_technology.cpp
Go to the documentation of this file.
1 /*
2  *
3  * _/_/_/ _/_/ _/ _/ _/_/_/ _/_/
4  * _/ _/ _/ _/ _/_/ _/ _/ _/ _/ _/
5  * _/_/_/ _/_/_/_/ _/ _/_/ _/ _/ _/_/_/_/
6  * _/ _/ _/ _/ _/ _/ _/ _/ _/
7  * _/ _/ _/ _/ _/ _/_/_/ _/ _/
8  *
9  * ***********************************************
10  * PandA Project
11  * URL: http://panda.dei.polimi.it
12  * Politecnico di Milano - DEIB
13  * System Architectures Group
14  * ***********************************************
15  * Copyright (C) 2004-2024 Politecnico di Milano
16  *
17  * This file is part of the PandA framework.
18  *
19  * The PandA framework is free software; you can redistribute it and/or modify
20  * it under the terms of the GNU General Public License as published by
21  * the Free Software Foundation; either version 3 of the License, or
22  * (at your option) any later version.
23  *
24  * This program is distributed in the hope that it will be useful,
25  * but WITHOUT ANY WARRANTY; without even the implied warranty of
26  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
27  * GNU General Public License for more details.
28  *
29  * You should have received a copy of the GNU General Public License
30  * along with this program. If not, see <http://www.gnu.org/licenses/>.
31  *
32  */
40 #include "write_technology.hpp"
41 #include "Parameter.hpp"
42 #include "dbgPrintHelper.hpp" // for DEBUG_LEVEL_
43 #include "fileIO.hpp"
44 #include "generic_device.hpp"
45 #include "library_manager.hpp"
46 #include "technology_manager.hpp"
47 #include "technology_xml.hpp"
48 #include "xml_document.hpp"
49 
51  const DesignFlowManagerConstRef _design_flow_manager,
52  const ParameterConstRef _parameters)
53  : TechnologyFlowStep(_TM, _target, _design_flow_manager, TechnologyFlowStep_Type::WRITE_TECHNOLOGY, _parameters)
54 {
55 }
56 
58 
60 {
61  try
62  {
63  const auto output_file = parameters->isOption(OPT_output_file) ?
64  parameters->getOption<std::string>(OPT_output_file) :
65  GetPath("technology_out.xml");
66  const auto libraries = TM->get_library_list();
67  xml_document document;
68  xml_element* nodeRoot = document.create_root_node("target");
69 
70  target->xwrite(nodeRoot);
71  xml_element* tmRoot = nodeRoot->add_child_element("technology");
72 
73  TM->xwrite(tmRoot);
74  document.write_to_file_formatted(output_file);
75  INDENT_OUT_MEX(OUTPUT_LEVEL_VERY_PEDANTIC, output_level, "---Writing " + output_file);
76  for(const auto& library : libraries)
77  {
78  TM->get_library_manager(library)->set_info(library_manager::XML, output_file);
79  }
80  }
81  catch(const char* msg)
82  {
83  PRINT_OUT_MEX(0, 0, msg);
84  }
85  catch(const std::string& msg)
86  {
87  PRINT_OUT_MEX(0, 0, msg);
88  }
89  catch(const std::exception& ex)
90  {
91  PRINT_OUT_MEX(0, 0, std::string("Exception caught: ") + ex.what());
92  }
93  catch(...)
94  {
95  PRINT_OUT_MEX(0, 0, std::string("Unknown excetpion"));
96  }
98 }
99 
102 {
104  switch(relationship_type)
105  {
107  {
108  break;
109  }
111  {
112  break;
113  }
115  {
116  relationships.insert(TechnologyFlowStep_Type::FIX_CHARACTERIZATION);
119  relationships.insert(TechnologyFlowStep_Type::LOAD_FILE_TECHNOLOGY);
120  break;
121  }
122  default:
123  {
124  THROW_UNREACHABLE("");
125  }
126  }
127  return relationships;
128 }
File containing functions and utilities to support the printing of debug messagges.
xml nodes used in technology libraries files
void xwrite(xml_element *rootnode, const CustomOrderedSet< std::string > &libraries=CustomOrderedSet< std::string >())
add library elements operation node to an xml tree.
const int output_level
The output level.
void set_info(unsigned int type, const std::string &information)
RelationshipType
The relationship type.
Source must be executed to satisfy target.
#define INDENT_OUT_MEX(outLevel, curOutLevel, mex)
const std::vector< std::string > & get_library_list() const
Return the list of the libraries.
Class specification of the manager of the technology library data structures.
#define THROW_UNREACHABLE(str_expr)
helper function used to specify that some points should never be reached
Definition: exceptions.hpp:292
void write_to_file_formatted(const std::filesystem::path &filename)
Write the document to a file.
const technology_managerRef TM
The technology manager.
xml_element * create_root_node(const std::string &_name)
Creates the root node.
utility function used to read files.
WriteTechnology(const technology_managerRef TM, const generic_deviceRef target, const DesignFlowManagerConstRef design_flow_manager, const ParameterConstRef parameters)
Constructor.
const ParameterConstRef parameters
Set of input parameters.
DesignFlowStep_Status
The status of a step.
TechnologyFlowStep_Type
std::string GetPath(std::filesystem::path path)
Definition: fileIO.hpp:140
#define OUTPUT_LEVEL_VERY_PEDANTIC
verbose debugging print is performed.
Step to writes technology as xml file.
const CustomUnorderedSet< TechnologyFlowStep_Type > ComputeTechnologyRelationships(const DesignFlowStep::RelationshipType relationship_type) const override
Return the set of analyses in relationship with this design step.
this class is used to manage the command-line or XML options.
Generic device description.
Class specification of the manager for each library.
#define PRINT_OUT_MEX(profLevel, curprofLevel, mex)
xml_element * add_child_element(const std::string &name)
Add a child element to this node.
Definition: xml_node.cpp:54
library_managerRef get_library_manager(const std::string &Name) const
Return the library data structure corresponding to the given library id.
DesignFlowStep_Status Exec() override
Execute the step.
~WriteTechnology() override
Destructor.
const generic_deviceRef target
The target device.

Generated on Mon Feb 12 2024 13:02:51 for PandA-2024.02 by doxygen 1.8.13