python.cc revision 13038:7bf84150855b
16145Snate@binkert.org/* 26154Snate@binkert.org * Copyright 2018 Google, Inc. 36145Snate@binkert.org * 46285Snate@binkert.org * Redistribution and use in source and binary forms, with or without 56285Snate@binkert.org * modification, are permitted provided that the following conditions are 66145Snate@binkert.org * met: redistributions of source code must retain the above copyright 76285Snate@binkert.org * notice, this list of conditions and the following disclaimer; 86285Snate@binkert.org * redistributions in binary form must reproduce the above copyright 96285Snate@binkert.org * notice, this list of conditions and the following disclaimer in the 106285Snate@binkert.org * documentation and/or other materials provided with the distribution; 116285Snate@binkert.org * neither the name of the copyright holders nor the names of its 126285Snate@binkert.org * contributors may be used to endorse or promote products derived from 136285Snate@binkert.org * this software without specific prior written permission. 146145Snate@binkert.org * 156285Snate@binkert.org * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 166145Snate@binkert.org * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 17 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 18 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 19 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 20 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 21 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 22 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 23 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 25 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 26 * 27 * Authors: Gabe Black 28 */ 29 30#include "systemc/core/python.hh" 31 32#include <vector> 33 34#include "python/pybind11/pybind.hh" 35#include "sim/init.hh" 36 37namespace sc_gem5 38{ 39 40namespace 41{ 42 43std::vector<PythonReadyFunc *> pythonReadyFuncs; 44std::vector<PythonInitFunc *> pythonInitFuncs; 45 46void 47python_ready(pybind11::args args) 48{ 49 for (auto &func: pythonReadyFuncs) 50 func->run(); 51} 52 53void 54systemc_pybind(pybind11::module &m_internal) 55{ 56 pybind11::module m = m_internal.def_submodule("systemc"); 57 m.def("python_ready", &python_ready); 58 for (auto &func: pythonInitFuncs) 59 func->run(m); 60} 61EmbeddedPyBind embed_("systemc", &systemc_pybind); 62 63} // anonymous namespace 64 65PythonReadyFunc::PythonReadyFunc() 66{ 67 pythonReadyFuncs.push_back(this); 68} 69 70PythonInitFunc::PythonInitFunc() 71{ 72 pythonInitFuncs.push_back(this); 73} 74 75} // namespace sc_gem5 76