Merge pull request #1831 from boqwxp/cleanup_sat_eval
[yosys.git] / frontends / verilog / preproc.h
1 /*
2 * yosys -- Yosys Open SYnthesis Suite
3 *
4 * Copyright (C) 2012 Clifford Wolf <clifford@clifford.at>
5 *
6 * Permission to use, copy, modify, and/or distribute this software for any
7 * purpose with or without fee is hereby granted, provided that the above
8 * copyright notice and this permission notice appear in all copies.
9 *
10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
17 *
18 * ---
19 *
20 * The Verilog preprocessor.
21 *
22 */
23 #ifndef VERILOG_PREPROC_H
24 #define VERILOG_PREPROC_H
25
26 #include "kernel/yosys.h"
27
28 #include <iosfwd>
29 #include <list>
30 #include <memory>
31 #include <string>
32
33 YOSYS_NAMESPACE_BEGIN
34
35 struct define_body_t;
36 struct arg_map_t;
37
38 struct define_map_t
39 {
40 define_map_t();
41 ~ define_map_t();
42
43 // Add a definition, overwriting any existing definition for name.
44 void add(const std::string &name, const std::string &txt, const arg_map_t *args = nullptr);
45
46 // Merge in another map of definitions (which take precedence
47 // over anything currently defined).
48 void merge(const define_map_t &map);
49
50 // Find a definition by name. If no match, returns null.
51 const define_body_t *find(const std::string &name) const;
52
53 // Erase a definition by name (no effect if not defined).
54 void erase(const std::string &name);
55
56 // Clear any existing definitions
57 void clear();
58
59 // Print a list of definitions, using the log function
60 void log() const;
61
62 std::map<std::string, std::unique_ptr<define_body_t>> defines;
63 };
64
65
66 struct define_map_t;
67
68 std::string
69 frontend_verilog_preproc(std::istream &f,
70 std::string filename,
71 const define_map_t &pre_defines,
72 define_map_t &global_defines_cache,
73 const std::list<std::string> &include_dirs);
74
75 YOSYS_NAMESPACE_END
76
77 #endif