diff --git a/PyScModule.cpp b/PyScModule.cpp index 08ed7e0..2ec2da7 100644 --- a/PyScModule.cpp +++ b/PyScModule.cpp @@ -6,7 +6,7 @@ #include "PyScModule.h" #define PY_SSIZE_T_CLEAN -#include +#include class TPyScriptThreadLocker { PyGILState_STATE m_state; diff --git a/README.md b/README.md index 126f814..8941b02 100644 --- a/README.md +++ b/README.md @@ -4,26 +4,64 @@ A Python 3 package to use SystemC from Python ## 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 python3 -m venv pysysc-env -# and enable it +# and avtivate it . 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 -# 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 # clone of PySysC git clone https://git.minres.com/SystemC/PySysC.git # install PySysC, for development PySysC use 'python3 -m pip install -e` -python3 -m pip install -e PySysC +SYSTEMC_HOME= 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 diff --git a/pysysc/sccppyy.py b/pysysc/sccppyy.py index 0194a71..2dbe526 100644 --- a/pysysc/sccppyy.py +++ b/pysysc/sccppyy.py @@ -138,6 +138,16 @@ def _load_pythonization_lib(): if os.path.isfile(full_path): cppyy.include(full_path) 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): diff --git a/pysysc/structural.py b/pysysc/structural.py index a5bfb3f..49be921 100644 --- a/pysysc/structural.py +++ b/pysysc/structural.py @@ -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_actions(cpp.sc_core.SC_ID_MORE_THAN_ONE_SIGNAL_DRIVER_, cpp.sc_core.SC_DO_NOTHING); - try: - cpp.scc.init_cci("GlobalBroker") - except Exception: - pass + #try: + # cpp.scc.init_cci("GlobalBroker") + #except Exception: + # pass @staticmethod def configure(name="", enable_vcd=False): diff --git a/setup.py b/setup.py index 025efca..5f272da 100644 --- a/setup.py +++ b/setup.py @@ -18,7 +18,7 @@ pysyscsc = Extension('pysyscsc', extra_compile_args = ['-std=c++11'], include_dirs = [sysc_home+'/include'], libraries = ['systemc'], - library_dirs = [sysc_home+'/lib'], + library_dirs = [sysc_home+'/lib64', sysc_home+'/lib'], sources = ['PyScModule.cpp'], depends = ['PyScModule.h']) diff --git a/tests/router_example.py b/tests/router_example.py index 921dd4e..aa0d12a 100644 --- a/tests/router_example.py +++ b/tests/router_example.py @@ -13,7 +13,7 @@ from cppyy import gbl as cpp proj_home='../../PySysC-SC' conan_res = scpy.read_config_from_conan(os.path.join(proj_home, 'conanfile.txt')) 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_include_path(os.path.join(proj_home, 'components')) scpy.add_library('components.h', os.path.join(proj_home, 'build/Debug/lib/libcomponents.so')) diff --git a/tests/test_pysysc.py b/tests/test_pysysc.py index e5adc37..a358311 100644 --- a/tests/test_pysysc.py +++ b/tests/test_pysysc.py @@ -22,7 +22,7 @@ class Test(unittest.TestCase): conan_path=os.path.join(proj_home, 'conanfile.txt') conan_res = scpy.read_config_from_conan(conan_path) 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_include_path(os.path.join(proj_home, 'components')) scpy.add_library('components.h', os.path.join(proj_home, 'build/Debug/lib/libcomponents.so'))