Quick Start for Contributors
This guide provides short information for developers to start to work with NIKA quickly. You can always learn more about the NIKA's build system.
Install NIKA submodules
To clone repository, run:
git clone https://github.com/NikitaZotov/nika
cd nika
git checkout feat/migrate_to_0.10.0
git submodule update --init --recursive
Check CMake
Install pipx first using pipx installation guide if not already installed.
Ensure you are using CMake version 3.24 or newer. Verify your version with:
To upgrade CMake, run:
# Use pipx to install cmake if not already installed
pipx install cmake
pipx ensurepath
# relaunch your shell after installation
exec $SHELL
Install Ninja generator for CMake, to use CMake presets:
# Use pipx to install ninja if not already installed
pipx install ninja
pipx ensurepath
# relaunch your shell after installation
exec $SHELL
Start develop C++ problem solver of NIKA with Conan
Install Conan
Install Conan, to build C++ problem solver dependencies with Conan-provided dependencies:
# Use pipx to install conan if not already installed
pipx install conan
pipx ensurepath
# relaunch your shell after installation
exec $SHELL
Use C++ problem solver in Debug
Install dependencies with Conan
C++ problem solver of NIKA is an extension to sc-machine, so sc-machine is main dependency for C++ problem solver. To install it, run in the root of the project:
Build C++ problem solver in Debug
To build C++ problem solver in debug mode using Conan-provided dependencies, run:
Note
By default, configure preset debug
enables building C++ problem solver tests.
Run C++ problem solver tests in Debug
After that, you can go to build/Debug
and run tests via ctest
:
You can also check code formatting. To learn more, go to the CMake flags page.
Use C++ problem solver in Release
Install dependencies with Conan
To install it, run in the root of the project:
Build C++ problem solver in Release
To build C++ problem solver in release mode using Conan-provided dependencies, run:
To build C++ problem solver with tests in release mode using Conan-provided dependencies, run:
# release build type with tests
cmake --preset release-with-tests-conan
cmake --build --preset release
Run C++ problem solver tests in Release
After that, you can run tests:
You can also check code formatting. To learn more, go to the CMake flags page.
Start develop sc-web interface
Install dependencies with npm
To install dependencies, go to the sc-web
directory and run:
Build sc-web interface
To build sc-web, run:
Run sc-web interface
After run:
Start develop Python problem solver of NIKA
Install dependencies with pip3
To install dependencies, run:
python3 -m venv problem-solver/py/.venv
source problem-solver/py/.venv/bin/activate
pip3 install -r problem-solver/py/requirements.txt
Run Python problem solver tests
Running Python problem solver requires C++ problem solver to be running. Run C++ problem solver:
./path/to/sc-machine/binary -s kb.bin -c nika.ini \
-e "path/to/nika/lib/extensions;path/to/sc-machine/lib/extensions;path/to/scl-machine/lib/extensions"
and after that, run Python problem-solver tests in new terminal:
Run Python problem solver
Run C++ problem solver:
./path/to/sc-machine/binary -s kb.bin -c nika.ini \
-e "path/to/nika/lib/extensions;path/to/sc-machine/lib/extensions;path/to/scl-machine/lib/extensions"
and after that, run Python problem-solver in new terminal:
Start develop interface of NIKA
Install dependencies with npm
To install dependencies, go to the interface
directory and run:
Build interface
To build interface, run:
Run interface
After run:
Run NIKA
Before launching NIKA, extract sc-machine from GitHub Releases or build it.
Firstly, build knowledge base:
After run C++ problem solver:
./path/to/sc-machine/binary -s kb.bin -c nika.ini \
-e "path/to/nika/lib/extensions;path/to/sc-machine/lib/extensions;path/to/scl-machine/lib/extensions"
# if several paths to extensions are provided then they should be separated
# by semicolon and wrapped in double quotes
Run sc-web interface in new terminal:
Run Python problem solver in new terminal:
And run interface in new terminal:
Contributing
To contribute changes to the project, you need to create Pull Request.