develop #2
|
@ -6,7 +6,7 @@
|
||||||
|
|
||||||
#include "PyScModule.h"
|
#include "PyScModule.h"
|
||||||
#define PY_SSIZE_T_CLEAN
|
#define PY_SSIZE_T_CLEAN
|
||||||
#include <python3.6/Python.h>
|
#include <Python.h>
|
||||||
|
|
||||||
class TPyScriptThreadLocker {
|
class TPyScriptThreadLocker {
|
||||||
PyGILState_STATE m_state;
|
PyGILState_STATE m_state;
|
||||||
|
|
52
README.md
52
README.md
|
@ -4,26 +4,64 @@ A Python 3 package to use SystemC from Python
|
||||||
|
|
||||||
## How to setup the environment
|
## How to setup the environment
|
||||||
|
|
||||||
The installation for PySysC is as follows (using bash shell):
|
The installation for PySysC is as follows (using bash shell). The process has
|
||||||
|
been tested under CentOS7 and Ubuntu 20.04. Make sure a newer version of gcc
|
||||||
|
is in your path (tested with gcc-6.3.0). Also the SystemC installation has to
|
||||||
|
be reference with the environment variable SYSTEMC_HOME.
|
||||||
|
|
||||||
|
If you get an error complaining about
|
||||||
|
missing Python.h, you need to install Python development headers. See the
|
||||||
|
articel under https://blog.ducthinh.net/gcc-no-such-file-python-h.
|
||||||
|
|
||||||
```
|
```
|
||||||
# create virtual environment
|
# create virtual environment
|
||||||
python3 -m venv pysysc-env
|
python3 -m venv pysysc-env
|
||||||
# and enable it
|
# and avtivate it
|
||||||
. pysysc-env/bin/activate
|
. pysysc-env/bin/activate
|
||||||
# install needed packages
|
# update pip to mekae sure we have the newest version
|
||||||
|
python3 -m pip install --upgrade pip
|
||||||
|
# install wheel package
|
||||||
python3 -m pip install wheel
|
python3 -m pip install wheel
|
||||||
# install cppyy, C++ std version needs to match the version used to build the SystemC library
|
# install cppyy, C++ std version needs to match the version used when building the SystemC library
|
||||||
STDCXX=11 python3 -m pip install cppyy
|
STDCXX=11 python3 -m pip install cppyy
|
||||||
# clone of PySysC
|
# clone of PySysC
|
||||||
git clone https://git.minres.com/SystemC/PySysC.git
|
git clone https://git.minres.com/SystemC/PySysC.git
|
||||||
# install PySysC, for development PySysC use 'python3 -m pip install -e`
|
# install PySysC, for development PySysC use 'python3 -m pip install -e`
|
||||||
python3 -m pip install -e PySysC
|
SYSTEMC_HOME=<path to SystemC> python3 -m pip install -e PySysC
|
||||||
```
|
```
|
||||||
|
|
||||||
## Testing (preliminary)
|
## Running the example
|
||||||
|
|
||||||
To use the tests you also need to clone and build the PySysC-SC repo as sibling of PySysC. It contains the the code and libraries being used in the test.
|
To run the example you also need to clone and build the PySysC-SC repo. It contains the the code and libraries being used in the example. This project uses Conan.io as package manager so it should be installed (see down below).
|
||||||
|
To deactivate conan and use a SystemC installation just comment out the line `setup_conan()` in CMakeLists.txt and set the environment variable SYSTEMC_HOME.
|
||||||
|
|
||||||
|
### Run the router_eample.py
|
||||||
|
|
||||||
|
```
|
||||||
|
# get the PySysC-SC repo
|
||||||
|
git clone --recursive https://git.minres.com/SystemC/PySysC-SC.git
|
||||||
|
# build the project libraries as shared libs
|
||||||
|
cd PySysC-SC
|
||||||
|
mkdir -p build/Debug
|
||||||
|
cd build/Debug
|
||||||
|
cmake -DCMAKE_BUILD_TYPE=Debug -DBUILD_SHARED_LIBS=ON ../..
|
||||||
|
make -j components
|
||||||
|
cd ../..
|
||||||
|
# now we are ready to run the example
|
||||||
|
python3 router_eample.py
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
### Installing conan
|
||||||
|
|
||||||
|
```
|
||||||
|
# install conan into our virtual environment pysysc-env
|
||||||
|
python3 -m pip install conan
|
||||||
|
# create the default profile
|
||||||
|
conan profile new default --detect
|
||||||
|
# add the repo for SystemC packages used in the project
|
||||||
|
conan remote add minres https://api.bintray.com/conan/minres/conan-repo
|
||||||
|
```
|
||||||
|
|
||||||
## TODO
|
## TODO
|
||||||
|
|
||||||
|
|
|
@ -138,6 +138,16 @@ def _load_pythonization_lib():
|
||||||
if os.path.isfile(full_path):
|
if os.path.isfile(full_path):
|
||||||
cppyy.include(full_path)
|
cppyy.include(full_path)
|
||||||
return
|
return
|
||||||
|
# could not be found in sintall, maybe development environment
|
||||||
|
pkgDir = os.path.join(os.path.dirname( os.path.realpath(__file__)), '..')
|
||||||
|
for file in os.listdir(pkgDir):
|
||||||
|
if re.match(r'pysyscsc.*\.so', file):
|
||||||
|
cppyy.load_library(os.path.join(pkgDir, file))
|
||||||
|
full_path = os.path.join(pkgDir, 'PyScModule.h')
|
||||||
|
if os.path.isfile(full_path):
|
||||||
|
cppyy.include(full_path)
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def add_library(file, lib):
|
def add_library(file, lib):
|
||||||
|
|
|
@ -94,10 +94,10 @@ class Simulation(object):
|
||||||
}
|
}
|
||||||
cpp.sc_core.sc_report_handler.set_verbosity_level(verb_lut[log_level]);
|
cpp.sc_core.sc_report_handler.set_verbosity_level(verb_lut[log_level]);
|
||||||
cpp.sc_core.sc_report_handler.set_actions(cpp.sc_core.SC_ID_MORE_THAN_ONE_SIGNAL_DRIVER_, cpp.sc_core.SC_DO_NOTHING);
|
cpp.sc_core.sc_report_handler.set_actions(cpp.sc_core.SC_ID_MORE_THAN_ONE_SIGNAL_DRIVER_, cpp.sc_core.SC_DO_NOTHING);
|
||||||
try:
|
#try:
|
||||||
cpp.scc.init_cci("GlobalBroker")
|
# cpp.scc.init_cci("GlobalBroker")
|
||||||
except Exception:
|
#except Exception:
|
||||||
pass
|
# pass
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def configure(name="", enable_vcd=False):
|
def configure(name="", enable_vcd=False):
|
||||||
|
|
2
setup.py
2
setup.py
|
@ -18,7 +18,7 @@ pysyscsc = Extension('pysyscsc',
|
||||||
extra_compile_args = ['-std=c++11'],
|
extra_compile_args = ['-std=c++11'],
|
||||||
include_dirs = [sysc_home+'/include'],
|
include_dirs = [sysc_home+'/include'],
|
||||||
libraries = ['systemc'],
|
libraries = ['systemc'],
|
||||||
library_dirs = [sysc_home+'/lib'],
|
library_dirs = [sysc_home+'/lib64', sysc_home+'/lib'],
|
||||||
sources = ['PyScModule.cpp'],
|
sources = ['PyScModule.cpp'],
|
||||||
depends = ['PyScModule.h'])
|
depends = ['PyScModule.h'])
|
||||||
|
|
||||||
|
|
|
@ -13,7 +13,7 @@ from cppyy import gbl as cpp
|
||||||
proj_home='../../PySysC-SC'
|
proj_home='../../PySysC-SC'
|
||||||
conan_res = scpy.read_config_from_conan(os.path.join(proj_home, 'conanfile.txt'))
|
conan_res = scpy.read_config_from_conan(os.path.join(proj_home, 'conanfile.txt'))
|
||||||
scpy.load_systemc()
|
scpy.load_systemc()
|
||||||
scpy.add_include_path(os.path.join(proj_home, 'sc-components/incl'))
|
scpy.add_include_path(os.path.join(proj_home, 'scc/incl'))
|
||||||
scpy.add_library('scc.h', os.path.join(proj_home, 'build/Debug/lib/libscc.so'))
|
scpy.add_library('scc.h', os.path.join(proj_home, 'build/Debug/lib/libscc.so'))
|
||||||
scpy.add_include_path(os.path.join(proj_home, 'components'))
|
scpy.add_include_path(os.path.join(proj_home, 'components'))
|
||||||
scpy.add_library('components.h', os.path.join(proj_home, 'build/Debug/lib/libcomponents.so'))
|
scpy.add_library('components.h', os.path.join(proj_home, 'build/Debug/lib/libcomponents.so'))
|
||||||
|
|
|
@ -22,7 +22,7 @@ class Test(unittest.TestCase):
|
||||||
conan_path=os.path.join(proj_home, 'conanfile.txt')
|
conan_path=os.path.join(proj_home, 'conanfile.txt')
|
||||||
conan_res = scpy.read_config_from_conan(conan_path)
|
conan_res = scpy.read_config_from_conan(conan_path)
|
||||||
scpy.load_systemc()
|
scpy.load_systemc()
|
||||||
scpy.add_include_path(os.path.join(proj_home, 'sc-components/incl'))
|
scpy.add_include_path(os.path.join(proj_home, 'scc/incl'))
|
||||||
scpy.add_library('scc.h', os.path.join(proj_home, 'build/Debug/lib/libscc.so'))
|
scpy.add_library('scc.h', os.path.join(proj_home, 'build/Debug/lib/libscc.so'))
|
||||||
scpy.add_include_path(os.path.join(proj_home, 'components'))
|
scpy.add_include_path(os.path.join(proj_home, 'components'))
|
||||||
scpy.add_library('components.h', os.path.join(proj_home, 'build/Debug/lib/libcomponents.so'))
|
scpy.add_library('components.h', os.path.join(proj_home, 'build/Debug/lib/libcomponents.so'))
|
||||||
|
|
Loading…
Reference in New Issue