15 #include "cerata/vhdl/design.h"
18 #include <unordered_map>
22 #include "cerata/logging.h"
23 #include "cerata/vhdl/resolve.h"
24 #include "cerata/vhdl/declaration.h"
25 #include "cerata/vhdl/architecture.h"
54 std::unordered_map<std::string, std::vector<std::string>> libs_and_packages;
56 if (c->meta().count(meta::PRIMITIVE) > 0) {
57 if (c->meta().at(meta::PRIMITIVE) ==
"true") {
58 std::string lib = c->meta().at(meta::LIBRARY);
59 std::string pkg = c->meta().at(meta::PACKAGE);
61 if (libs_and_packages.count(lib) == 0) {
62 libs_and_packages[lib] = std::vector<std::string>({pkg});
64 libs_and_packages.at(lib).push_back(pkg);
71 for (
auto &v : libs_and_packages) {
73 std::sort(vec.begin(), vec.end());
74 vec.erase(std::unique(vec.begin(), vec.end()), vec.end());
78 for (
const auto &kv : libs_and_packages) {
79 incl <<
Line(
"library " + kv.first +
";");
80 for (
const auto &pkg : kv.second) {
82 incl <<
Line(
"use " + kv.first +
"." + pkg +
".all;");