mirror of
https://github.com/YosysHQ/yosys
synced 2025-04-05 09:04:08 +00:00
This adjusts the way the headers kernel/{yosys,rtlil,register,log}.h include each other to avoid the need of including headers outside of include guards as well as avoiding the inclusion of rtlil.h in the middle of yosys.h with rtlil.h depending on the prefix of yosys.h, and the suffix of yosys.h depending on rtlil.h. To do this I moved some of the declaration in yosys.h into a new header yosys_common.h. I'm not sure if that is strictly necessary. Including any of these files still results in the declarations of all these headers being included, so this shouldn't be a breaking change for any passes or external plugins. My main motivation for this is that ccls's (clang based language server) include guard handling gets confused by the previous way the includes were done. It often ends up treating the include guard as a generic disabled preprocessor conditional, breaking navigation and highlighting for the core RTLIL data structures. Additionally I think avoiding cyclic includes in the middle of header files that depend on includes being outside of include guards will also be less confusing for developers reading the code, not only for tools like ccls.
101 lines
3.3 KiB
C++
101 lines
3.3 KiB
C++
/* -*- c++ -*-
|
|
* yosys -- Yosys Open SYnthesis Suite
|
|
*
|
|
* Copyright (C) 2012 Claire Xenia Wolf <claire@yosyshq.com>
|
|
*
|
|
* Permission to use, copy, modify, and/or distribute this software for any
|
|
* purpose with or without fee is hereby granted, provided that the above
|
|
* copyright notice and this permission notice appear in all copies.
|
|
*
|
|
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
|
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
|
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
|
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
|
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
|
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
|
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
|
*
|
|
*/
|
|
|
|
|
|
// *** NOTE TO THE READER ***
|
|
//
|
|
// Maybe you have just opened this file in the hope to learn more about the
|
|
// Yosys API. Let me congratulate you on this great decision! ;)
|
|
//
|
|
// If you want to know how the design is represented by Yosys in the memory,
|
|
// you should read "kernel/rtlil.h".
|
|
//
|
|
// If you want to know how to register a command with Yosys, you could read
|
|
// "kernel/register.h", but it would be easier to just look at a simple
|
|
// example instead. A simple one would be "passes/cmds/log.cc".
|
|
//
|
|
// This header is very boring. It just defines some general things that
|
|
// belong nowhere else and includes the interesting headers.
|
|
//
|
|
// Find more information in the "guidelines/GettingStarted" file.
|
|
|
|
|
|
#ifndef YOSYS_H
|
|
#define YOSYS_H
|
|
|
|
#include "kernel/yosys_common.h"
|
|
|
|
#include "kernel/log.h"
|
|
#include "kernel/rtlil.h"
|
|
#include "kernel/register.h"
|
|
|
|
YOSYS_NAMESPACE_BEGIN
|
|
|
|
void yosys_setup();
|
|
|
|
#ifdef WITH_PYTHON
|
|
bool yosys_already_setup();
|
|
#endif
|
|
|
|
void yosys_shutdown();
|
|
|
|
#ifdef YOSYS_ENABLE_TCL
|
|
Tcl_Interp *yosys_get_tcl_interp();
|
|
#endif
|
|
|
|
extern RTLIL::Design *yosys_design;
|
|
|
|
RTLIL::Design *yosys_get_design();
|
|
std::string proc_self_dirname();
|
|
std::string proc_share_dirname();
|
|
std::string proc_program_prefix();
|
|
const char *create_prompt(RTLIL::Design *design, int recursion_counter);
|
|
std::vector<std::string> glob_filename(const std::string &filename_pattern);
|
|
void rewrite_filename(std::string &filename);
|
|
|
|
void run_pass(std::string command, RTLIL::Design *design = nullptr);
|
|
bool run_frontend(std::string filename, std::string command, RTLIL::Design *design = nullptr, std::string *from_to_label = nullptr);
|
|
void run_backend(std::string filename, std::string command, RTLIL::Design *design = nullptr);
|
|
void shell(RTLIL::Design *design);
|
|
|
|
// journal of all input and output files read (for "yosys -E")
|
|
extern std::set<std::string> yosys_input_files, yosys_output_files;
|
|
|
|
// from kernel/version_*.o (cc source generated from Makefile)
|
|
extern const char *yosys_version_str;
|
|
|
|
// from passes/cmds/design.cc
|
|
extern std::map<std::string, RTLIL::Design*> saved_designs;
|
|
extern std::vector<RTLIL::Design*> pushed_designs;
|
|
|
|
// from passes/cmds/pluginc.cc
|
|
extern std::map<std::string, void*> loaded_plugins;
|
|
#ifdef WITH_PYTHON
|
|
extern std::map<std::string, void*> loaded_python_plugins;
|
|
#endif
|
|
extern std::map<std::string, std::string> loaded_plugin_aliases;
|
|
void load_plugin(std::string filename, std::vector<std::string> aliases);
|
|
|
|
extern std::string yosys_share_dirname;
|
|
extern std::string yosys_abc_executable;
|
|
|
|
YOSYS_NAMESPACE_END
|
|
|
|
#endif
|