From a7c6b37abf3e4628dd921bb12f77987d1f94c45f Mon Sep 17 00:00:00 2001 From: Clifford Wolf Date: Wed, 30 Jul 2014 14:10:15 +0200 Subject: [PATCH] Added "kernel/yosys.h" and "kernel/yosys.cc" --- Makefile | 2 +- kernel/driver.cc | 4 +-- kernel/log.cc | 24 +------------ kernel/log.h | 6 ++-- kernel/register.h | 18 ---------- kernel/rtlil.h | 14 ++------ kernel/yosys.cc | 40 ++++++++++++++++++++++ kernel/yosys.h | 86 +++++++++++++++++++++++++++++++++++++++++++++++ 8 files changed, 133 insertions(+), 61 deletions(-) create mode 100644 kernel/yosys.cc create mode 100644 kernel/yosys.h diff --git a/Makefile b/Makefile index 462861c8a..73d448337 100644 --- a/Makefile +++ b/Makefile @@ -121,7 +121,7 @@ S = endif OBJS += kernel/driver.o kernel/register.o kernel/rtlil.o kernel/log.o kernel/calc.o -OBJS += kernel/compatibility.o +OBJS += kernel/compatibility.o kernel/yosys.o OBJS += libs/bigint/BigIntegerAlgorithms.o libs/bigint/BigInteger.o libs/bigint/BigIntegerUtils.o OBJS += libs/bigint/BigUnsigned.o libs/bigint/BigUnsignedInABase.o diff --git a/kernel/driver.cc b/kernel/driver.cc index 2e56f9a33..c20be1dc1 100644 --- a/kernel/driver.cc +++ b/kernel/driver.cc @@ -30,9 +30,7 @@ #include #include -#include "kernel/rtlil.h" -#include "kernel/register.h" -#include "kernel/log.h" +#include "kernel/yosys.h" bool fgetline(FILE *f, std::string &buffer) { diff --git a/kernel/log.cc b/kernel/log.cc index 8036b2360..5fe0d0863 100644 --- a/kernel/log.cc +++ b/kernel/log.cc @@ -17,10 +17,7 @@ * */ -#include "kernel/log.h" -#include "kernel/rtlil.h" -#include "kernel/register.h" -#include "kernel/compatibility.h" +#include "kernel/yosys.h" #include "backends/ilang/ilang_backend.h" #include @@ -43,25 +40,6 @@ std::list string_buf; static struct timeval initial_tv = { 0, 0 }; static bool next_print_log = false; -std::string stringf(const char *fmt, ...) -{ - std::string string; - char *str = NULL; - va_list ap; - - va_start(ap, fmt); - if (vasprintf(&str, fmt, ap) < 0) - str = NULL; - va_end(ap); - - if (str != NULL) { - string = str; - free(str); - } - - return string; -} - void logv(const char *format, va_list ap) { if (log_time) { diff --git a/kernel/log.h b/kernel/log.h index 3152fc5af..803365b39 100644 --- a/kernel/log.h +++ b/kernel/log.h @@ -17,6 +17,8 @@ * */ +#include "kernel/yosys.h" + #ifndef LOG_H #define LOG_H @@ -26,10 +28,6 @@ #include #include -#include -#include -#include - #define S__LINE__sub2(x) #x #define S__LINE__sub1(x) S__LINE__sub2(x) #define S__LINE__ S__LINE__sub1(__LINE__) diff --git a/kernel/register.h b/kernel/register.h index 73875e968..68f09c822 100644 --- a/kernel/register.h +++ b/kernel/register.h @@ -26,24 +26,6 @@ #include #include -#ifdef YOSYS_ENABLE_TCL -#include -extern Tcl_Interp *yosys_get_tcl_interp(); -#endif - -// from kernel/version_*.o (cc source generated from Makefile) -extern const char *yosys_version_str; - -// implemented in driver.cc -extern RTLIL::Design *yosys_get_design(); -extern std::string proc_self_dirname(); -extern std::string proc_share_dirname(); -extern const char *create_prompt(RTLIL::Design *design, int recursion_counter); - -// from passes/cmds/design.cc -extern std::map saved_designs; -extern std::vector pushed_designs; - struct Pass { std::string pass_name, short_help; diff --git a/kernel/rtlil.h b/kernel/rtlil.h index 1f25542f3..d6acb5bcc 100644 --- a/kernel/rtlil.h +++ b/kernel/rtlil.h @@ -17,21 +17,11 @@ * */ +#include "kernel/yosys.h" + #ifndef RTLIL_H #define RTLIL_H -#include -#include -#include -#include - -#include "kernel/log.h" -#include - -// various helpers (unrelated to RTLIL) -std::string stringf(const char *fmt, ...); -#define SIZE(__obj) int(__obj.size()) - namespace RTLIL { enum State : unsigned char { diff --git a/kernel/yosys.cc b/kernel/yosys.cc new file mode 100644 index 000000000..d25443826 --- /dev/null +++ b/kernel/yosys.cc @@ -0,0 +1,40 @@ +/* + * yosys -- Yosys Open SYnthesis Suite + * + * Copyright (C) 2012 Clifford Wolf + * + * 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. + * + */ + +#include "kernel/yosys.h" + +std::string stringf(const char *fmt, ...) +{ + std::string string; + char *str = NULL; + va_list ap; + + va_start(ap, fmt); + if (vasprintf(&str, fmt, ap) < 0) + str = NULL; + va_end(ap); + + if (str != NULL) { + string = str; + free(str); + } + + return string; +} + diff --git a/kernel/yosys.h b/kernel/yosys.h new file mode 100644 index 000000000..67629d9b1 --- /dev/null +++ b/kernel/yosys.h @@ -0,0 +1,86 @@ +/* + * yosys -- Yosys Open SYnthesis Suite + * + * Copyright (C) 2012 Clifford Wolf + * + * 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". + + +#ifndef YOSYS_H +#define YOSYS_H + +#include +#include +#include +#include +#include + +#if 0 +# define YOSYS_NAMESPACE_BEGIN namespace Yosys { +# define YOSYS_NAMESPACE_END } +#else +# define YOSYS_NAMESPACE_BEGIN +# define YOSYS_NAMESPACE_END +#endif + +YOSYS_NAMESPACE_BEGIN + +std::string stringf(const char *fmt, ...); + +#define SIZE(__obj) int(__obj.size()) + +YOSYS_NAMESPACE_END + +#include "kernel/log.h" +#include "kernel/rtlil.h" +#include "kernel/register.h" +#include "kernel/compatibility.h" + +YOSYS_NAMESPACE_BEGIN + +#ifdef YOSYS_ENABLE_TCL +#include +extern Tcl_Interp *yosys_get_tcl_interp(); +#endif + +// from kernel/version_*.o (cc source generated from Makefile) +extern const char *yosys_version_str; + +// implemented in driver.cc +extern RTLIL::Design *yosys_get_design(); +extern std::string proc_self_dirname(); +extern std::string proc_share_dirname(); +extern const char *create_prompt(RTLIL::Design *design, int recursion_counter); + +// from passes/cmds/design.cc +extern std::map saved_designs; +extern std::vector pushed_designs; + +YOSYS_NAMESPACE_END + +#endif -- 2.30.2