From 2c974a9ae01c07afe0fff94c2e5c10e0ba06d8fa Mon Sep 17 00:00:00 2001 From: Gabe Black Date: Tue, 1 May 2018 17:50:59 -0700 Subject: [PATCH] systemc: Add a stubbed out sc_object class. Also add a SConsopt variable USE_SYSTEMC to hide systemc support until it's usable. Change-Id: Ibb37483432b147ee690a36bb5c8dd74f1c4c7ae4 Reviewed-on: https://gem5-review.googlesource.com/10821 Reviewed-by: Giacomo Travaglini Maintainer: Gabe Black --- src/systemc/SConscript | 33 ++++++++ src/systemc/SConsopts | 34 ++++++++ src/systemc/SystemC.py | 49 +++++++++++ src/systemc/sc_object.cc | 178 +++++++++++++++++++++++++++++++++++++++ src/systemc/sc_object.hh | 80 ++++++++++++++++++ 5 files changed, 374 insertions(+) create mode 100644 src/systemc/SConscript create mode 100644 src/systemc/SConsopts create mode 100644 src/systemc/SystemC.py create mode 100644 src/systemc/sc_object.cc create mode 100644 src/systemc/sc_object.hh diff --git a/src/systemc/SConscript b/src/systemc/SConscript new file mode 100644 index 000000000..40ad8fc15 --- /dev/null +++ b/src/systemc/SConscript @@ -0,0 +1,33 @@ +# Copyright 2018 Google, Inc. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer; +# redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution; +# neither the name of the copyright holders nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +# Authors: Gabe Black + +Import('*') + +if env['USE_SYSTEMC']: + SimObject('SystemC.py') + + Source('sc_object.cc') diff --git a/src/systemc/SConsopts b/src/systemc/SConsopts new file mode 100644 index 000000000..f3da63dc8 --- /dev/null +++ b/src/systemc/SConsopts @@ -0,0 +1,34 @@ +# Copyright 2018 Google, Inc. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer; +# redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution; +# neither the name of the copyright holders nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +# Authors: Gabe Black + +Import('*') + +sticky_vars.AddVariables( + BoolVariable('USE_SYSTEMC', 'Enable SystemC API support', False) + ) + +export_vars.append('USE_SYSTEMC') diff --git a/src/systemc/SystemC.py b/src/systemc/SystemC.py new file mode 100644 index 000000000..07ca84bd0 --- /dev/null +++ b/src/systemc/SystemC.py @@ -0,0 +1,49 @@ +# Copyright 2018 Google, Inc. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer; +# redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution; +# neither the name of the copyright holders nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +# Authors: Gabe Black + +from m5.SimObject import SimObject + +# This class represents systemc sc_object instances in python config files. It +# inherits from SimObject in python, but the c++ version, sc_core::sc_object, +# doesn't inherit from gem5's c++ SimObject class. +class SystemC_ScObject(SimObject): + type = 'SystemC_ScObject' + abstract = True + cxx_class = 'sc_core::sc_object' + cxx_header = 'systemc/sc_object.hh' + + # Clear cxx_base to stop the c++ binding code from assuming + # sc_core::sc_object inherits from SimObject, even though SystemC_ScObject + # does on the python side. + cxx_base = None + + # Hide the cxx_exports from SimObject since we don't inherit from + # SimObject on the c++ side and so don't have those methods to call down + # into. + locals().update({ + method.name: (lambda *a, **k: None) for method in SimObject.cxx_exports + }) diff --git a/src/systemc/sc_object.cc b/src/systemc/sc_object.cc new file mode 100644 index 000000000..6b9fc251c --- /dev/null +++ b/src/systemc/sc_object.cc @@ -0,0 +1,178 @@ +/* + * Copyright 2018 Google, Inc. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer; + * redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution; + * neither the name of the copyright holders nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * Authors: Gabe Black + */ + +#include "systemc/sc_object.hh" + +#include "base/logging.hh" + +namespace sc_core +{ + +const char * +sc_object::name() const +{ + warn("%s not implemented.\n", __PRETTY_FUNCTION__); + return "sc_object"; +} + +const char * +sc_object::basename() const +{ + warn("%s not implemented.\n", __PRETTY_FUNCTION__); + return "sc_object"; +} + +const char * +sc_object::kind() const +{ + return "sc_object"; +} + +void +sc_object::print(std::ostream &out) const +{ + warn("%s not implemented.\n", __PRETTY_FUNCTION__); +} + +void +sc_object::dump(std::ostream &out) const +{ + warn("%s not implemented.\n", __PRETTY_FUNCTION__); +} + +const std::vector & +sc_object::get_child_objects() const +{ + warn("%s not implemented.\n", __PRETTY_FUNCTION__); + return *(const std::vector *)nullptr; +} + +const std::vector & +sc_object::get_child_events() const +{ + warn("%s not implemented.\n", __PRETTY_FUNCTION__); + return *(const std::vector *)nullptr; +} + +sc_object * +sc_object::get_parent_object() const +{ + warn("%s not implemented.\n", __PRETTY_FUNCTION__); + return NULL; +} + +bool +sc_object::add_attribute(sc_attr_base &) +{ + warn("%s not implemented.\n", __PRETTY_FUNCTION__); + return false; +} + +sc_attr_base * +sc_object::get_attribute(const std::string &) +{ + warn("%s not implemented.\n", __PRETTY_FUNCTION__); + return NULL; +} + +sc_attr_base * +sc_object::remove_attribute(const std::string &) +{ + warn("%s not implemented.\n", __PRETTY_FUNCTION__); + return NULL; +} + +void +sc_object::remove_all_attributes() +{ + warn("%s not implemented.\n", __PRETTY_FUNCTION__); +} + +int +sc_object::num_attributes() const +{ + warn("%s not implemented.\n", __PRETTY_FUNCTION__); + return 0; +} + +sc_attr_cltn & +sc_object::attr_cltn() +{ + warn("%s not implemented.\n", __PRETTY_FUNCTION__); + return *(sc_attr_cltn *)NULL; +} + +const sc_attr_cltn & +sc_object::attr_cltn() const +{ + warn("%s not implemented.\n", __PRETTY_FUNCTION__); + return *(sc_attr_cltn *)NULL; +} + +sc_object::sc_object() +{ + warn("%s not implemented.\n", __PRETTY_FUNCTION__); +} + +sc_object::sc_object(const char *name) +{ + warn("%s not implemented.\n", __PRETTY_FUNCTION__); +} + +sc_object::sc_object(const sc_object &arg) +{ + warn("%s not implemented.\n", __PRETTY_FUNCTION__); +} + +sc_object & +sc_object::operator = (const sc_object &) +{ + return *this; +} + +sc_object::~sc_object() +{ + warn("%s not implemented.\n", __PRETTY_FUNCTION__); +} + +const std::vector & +sc_get_top_level_objects() +{ + warn("%s not implemented.\n", __PRETTY_FUNCTION__); + return *(const std::vector *)nullptr; +} + +sc_object * +sc_find_object(const char *) +{ + warn("%s not implemented.\n", __PRETTY_FUNCTION__); + return NULL; +} + +} // namespace sc_core diff --git a/src/systemc/sc_object.hh b/src/systemc/sc_object.hh new file mode 100644 index 000000000..51ca19759 --- /dev/null +++ b/src/systemc/sc_object.hh @@ -0,0 +1,80 @@ +/* + * Copyright 2018 Google, Inc. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer; + * redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution; + * neither the name of the copyright holders nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * Authors: Gabe Black + */ + +#ifndef __SYSTEMC_SC_OBJECT_HH__ +#define __SYSTEMC_SC_OBJECT_HH__ + +#include +#include +#include + +namespace sc_core +{ + +class sc_event; +class sc_attr_base; +class sc_attr_cltn; + +class sc_object +{ + public: + const char *name() const; + const char *basename() const; + + virtual const char *kind() const; + + virtual void print(std::ostream & =std::cout) const; + virtual void dump(std::ostream & =std::cout) const; + + virtual const std::vector &get_child_objects() const; + virtual const std::vector &get_child_events() const; + sc_object *get_parent_object() const; + + bool add_attribute(sc_attr_base &); + sc_attr_base *get_attribute(const std::string &); + sc_attr_base *remove_attribute(const std::string &); + void remove_all_attributes(); + int num_attributes() const; + sc_attr_cltn &attr_cltn(); + const sc_attr_cltn &attr_cltn() const; + + protected: + sc_object(); + sc_object(const char *); + sc_object(const sc_object &); + sc_object &operator = (const sc_object &); + virtual ~sc_object(); +}; + +const std::vector &sc_get_top_level_objects(); +sc_object *sc_find_object(const char *); + +} // namespace sc_core + +#endif //__SYSTEMC_SC_OBJECT_HH__ -- 2.30.2