-
Notifications
You must be signed in to change notification settings - Fork 93
Dev: Building on WSL & Windows
This is a quick guide for how to develop ArcticDB in a fresh WSL installation.
Create %USERPROFILE%/.wslconfig
file with that specifies enough memory for the build, eg:
# Settings apply across all Linux distros running on WSL 2
[wsl2]
# Limits VM memory
memory=48GB
Install WSL https://learn.microsoft.com/en-us/windows/wsl/install WSL 2, Ubuntu 22.04
The WSL clock seems to lose sync with the hardware clock. This thread describes the issue and offers a fix https://stackoverflow.com/questions/65086856/wsl2-clock-is-out-of-sync-with-windows
Open a WSL Ubuntu 22.04 shell.
# SSH key
ssh-keygen
>>> copy ~/.ssh/id_rsa.pub key to your Github account
# Clone
mkdir ~/source && cd ~/source
git clone git@github.com:man-group/ArcticDB.git
cd ~/source/ArcticDB
git submodule update --init --recursive
# Install C++ toolchain
sudo apt update
sudo apt-get install build-essential gcc-11 cmake gdb
# Required shared libraries and tools
sudo apt-get install zip pkg-config flex bison libkrb5-dev libsasl2-dev libcurl4-openssl-dev
# Install Python and create venv
# AS the default python is 3.12 following step WILL NOT WORK (GRusev)
<~not relevant~> sudo apt-get install python3-dev python3 python3-pip python3-venv
# Use following commands:
# based on : https://docs.vultr.com/how-to-install-python-and-pip-on-ubuntu-24-04
sudo add-apt-repository ppa:deadsnakes/ppa
sudo apt update
sudo apt install python3.10
sudo apt install python3.10-dev
sudo apt install python3.10-venv
#Just in cse there is another python on the system we will make link to proper one for us
/usr/local/bin$ sudo ln -s /usr/bin/python3.10 /usr/local/bin/python
# Create python virtual environment
python -m venv ~/venvs/310
# Activate the venv
source ~/venvs/310/bin/activate
# Get all Python dependencies - very hacky, should be improved
# Remove `dataclasses` from `setup.cfg`
pip install wheel
pip install setuptools
python setup.py egg_info
# Remove `[Testing]` line and '[:python_version < "3.7"]' line from ./python/arcticdb.egg-info/requires.txt
pip install -r ./python/arcticdb.egg-info/requires.txt
# Install test dependencies
# For CLion in WSL users, please start CLion in WSL terminal
# Starting directly in Windows will run CLion in non-interactive mode,
# Which .bashrc will not be source and mess up the enviromental setting of below dependencies
# Install mongodb
# Install community edition
# Please follow https://www.mongodb.com/docs/manual/tutorial/install-mongodb-on-ubuntu/
# Install azurite
# 1. Install nvm
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
source ~/.bashrc
# 2. Install npm using nvm
nvm install 16
# 3. Install azurite using npm
npm install -g azurite
# Install x-11 libs, needed for clion UI
sudo apt-get install libxi-dev libxtst6 libxrender1
# Install a browser (useful for clion to open links)
sudo apt-get install firefox
sudo snap install clion --classic
and run with clion &
Create `arcticdb/cpp/CMakeUserPresets.json with contents:
{
"version": 3,
"configurePresets": [
{
"name": "linux-gcc-debug",
"cacheVariables": {
"CMAKE_MAKE_PROGRAM": "make",
"CMAKE_C_COMPILER": "gcc",
"CMAKE_CXX_COMPILER": "g++"
},
"inherits": ["linux-debug"]
},
{
"name": "linux-gcc-release",
"cacheVariables": {
"CMAKE_MAKE_PROGRAM": "make",
"CMAKE_C_COMPILER": "gcc",
"CMAKE_CXX_COMPILER": "g++"
},
"inherits": ["linux-release"]
}
],
"buildPresets": [
{"name": "linux-debug-build", "configurePreset": "linux-gcc-debug", "targets": "arcticdb_ext", "jobs": <n> },
{"name": "linux-release-build", "configurePreset": "linux-gcc-release", "targets": "arcticdb_ext", "jobs": <n> }
]
}
where <n>
is a suitable number of cores to build on for your machine. 12 works well on the Man Group machines.
Choose the python interpreter
File -> Settings -> Build, Execution, Deployment -> Python interpreter -> Add interpreter and add the Python venv created earlier.
You can generate the protobuf Python stubs with:
python setup.py protoc --build-lib python
Right click cpp/CMakeLists.txt in the file explorer, and click Load CMake project. This will fail.
You will need to choose the correct cmake preset.
File -> Settings -> Build, Execution, Deployment -> CMake, disable the Debug project and enable the linux-gcc-debug - linux-debug-build preset. Reload the CMake project and build the arcticdb_ext target.
Create the symlink in the python folder
ln -s ../cpp/out/linux-gcc-debug-build/arcticdb/arcticdb_ext.cpython-310-x86_64-linux-gnu.so arcticdb_ext.so
Create a custom run configuration like the below. Consider saving it as a project file in your working copy. Then put a breakpoint in the C++ code and run the configuration in debug mode (select it, then Shift+F9).
- Install VS Code outside of WSL
- After it is installed, within WSL run
code .
in theArcticDB
- this will download the VS Code Server on WSL - To build, run the following command:
ARCTIC_CMAKE_PRESET=linux-debug pip install -ve .
- preset can also be
linux-release
- NOTE: check the version of gcc, it it 13, you will need to downgrade it to 10 or 11 otherwise some warnings will fail the build
- IMPORTANT: if you get the following error or similar:
Could NOT find Python (missing: Development.Module)
try to delete your build directory(cpp/out) and rebuild
- To debug, you need to create a
launch.json
file in the.vscode
folder and you can use the following example json:
{
"version": "0.2.0",
"configurations": [
{
"name": "(gdb) Launch",
"type": "cppdbg",
"request": "launch",
"program": "/path/to/your/python",
"args": [
"python/test-arctic.py"
],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
},
{
"description": "Set Disassembly Flavor to Intel",
"text": "-gdb-set disassembly-flavor intel",
"ignoreFailures": true
}
]
}
]
}
- Make sure to change
program
andargs
fields to suit your needs - You can Debug with F5
- To setup python tests (execute and debug in vscode) do: invoke Control Palette Alt+Ctrl+P > Python: Configure Tests > Select 'python'
It's easiest to just download the wheel from the CI build. See how here. Still if you need/want to do it locally:
You'll need a python venv with the correct version (if you want a Python 3.10 wheel you can use the ~/venvs/310 setup earlier). If you e.g. want a 3.11 wheel you can set up the venv by:
# Install python 3.11
sudo apt-get install python3.11-dev python3.11 python3.11-venv
python3.11 -m venv ~/venvs/311
# Install the required packages in the venv (repeat the steps from above)
Then you can build the wheel with:
cd ~/source/ArcticDB
# Remove stale `CMakeCache.txt` if you're changing venv
rm cpp/out/linux-release-build/CMakeCache.txt
source ~/venvs/311/bin/activate
python setup.py bdist_wheel
Do not share the same files across Windows and WSL as the filesystem performance is rubbish.
Download and run the Visual Studio installer, select "Desktop development with C++" and click "Install".
Use the "Windows 64 Installer (64-bit)" link to install the Python versions you want to develop against from https://www.python.org/downloads/windows/. This guide will assume Python 3.10 installed in the default location.
Optional: Add Python to your PATH from Control Panel "Edit environment variables for your account" (e.g. C:\Users\<username>\AppData\Local\Programs\Python\Python310
) above the .../WindowsApps
variable (otherwise the Microsoft Store will open from the terminal).
Open PowerShell:
# SSH key
ssh-keygen.exe
>>> copy ~/.ssh/id_rsa.pub key to your Github account
# Clone
mkdir ~/source && cd ~/source
git clone git@github.com:man-group/ArcticDB.git
cd ~/source/ArcticDB
git submodule update --init --recursive
# Create venv - Python version can be changed in the obvious way. This step requires PowerShell to be running with admin privileges.
C:\Users\<username>\AppData\Local\Programs\Python\Python310\python.exe -m venv --symlinks ..\venvs\310
# This step requires PowerShell to be running with admin privileges
cd .\cpp\third_party\lmdbcxx\ & .\symlink_srcs.ps1
# Activate the venv
..\venvs\310\Scripts\Activate.ps1
# Get all Python dependencies - very hacky, should be improved
# Remove `dataclasses` from `setup.cfg`
pip install wheel
python.exe setup.py egg_info
# Remove `[Testing]` line from .\python\arcticdb.egg-info\requires.txt
pip install -r .\python\arcticdb.egg-info\requires.txt
# Generate the Python protobuf files
python.exe setup.py protoc --build-lib python
Download and run the CLion installer.
Open the ArcticDB directory from the CLion launcher screen.
On Toolchains selection, select Visual Studio, set the architecture to amd64, and set it as the default by using the up arrow to move it above MinGW.
In cpp/CMakeLists.txt
, add the lines:
set(Python_EXECUTABLE "C:/Users/<username>/AppData/Local/Programs/Python/Python310/python.exe")
immediately after the cmake_minimum_required
line. Also in CMakePresets.json, update the relevant buildPresets
array element:
{"name": "windows-cl-debug", "configurePreset": "windows-cl-debug", "targets": "arcticdb_ext", "jobs": <n> }
where <n>
is a suitable number of cores to build on for your machine.
File -> Settings -> Build, Execution, Deployment -> Python interpreter -> Add interpreter and add the Python venv created earlier.
Right click cpp/CMakeLists.txt
in the file explorer, and click Load CMake project
. This will fail.
File -> Settings -> Build, Execution, Deployment -> CMake, disable the Debug
project and enable the windows-cl-debug - windows-cl-debug
preset. Reload the CMake project and build the arcticdb_ext
target.
Run the following command in an admin PowerShell terminal for the Python tests to work :
# Modify 310 to other Python versions as appropriate
New-Item -Path .\python\arcticdb_ext.cp310-win_amd64.pyd -ItemType SymbolicLink -Value .\cpp\out\windows-cl-debug-build\arcticdb\arcticdb_ext.cp310-win_amd64.pyd
- Install git
- Install VS 2022. In the installer under Desktop & Mobile select "Desktop Development with C++". The defaults should work.
- Install CMake (check https://github.com/man-group/ArcticDB/blob/master/cpp/CMakeLists.txt for the minimal required version)
- Install Python. Note Prefer downloading and installing it through https://www.python.org/downloads/ rather than Microsoft Store. The latter has some know issues such as
venv --symlink
not working. Important when installing Python also install the debug symbols, the installer has a checkbox for this.
You can skip this if you are using another method to access GitHub (e.g. HTTPS + PAT) or if you have already setup SSH key for your account. Otherwise follow this GitHub tutorial.
Open GitBash and type
git clone git@github.com:man-group/ArcticDB.git
cd ArcticDB
git submodule update --init --recursive
- Open PowerShell as admin and type
# Create venv
C:\Users\<username>\AppData\Local\Programs\Python\Python310\python.exe -m venv --symlinks <path_to_venv>
- Open PowerShell as regular user and type
# Activate venv
<path_to_venv>/Scripts/Activate.ps1
# Get all Python dependencies - very hacky, should be improved
# Remove `dataclasses` from `setup.cfg`
pip install wheel
python.exe setup.py egg_info
# Remove `[Testing]` line from .\python\arcticdb.egg_info\requires.txt
pip install -r .\python\arcticdb.egg_info\requires.txt
# Generate the Python protobuf files
python.exe setup.py protoc --build-lib python
The most straightforward way to setup VS 2022 build is to use the windows-vs-2022
preset.
This step has to be performed only once. Open PowerShell as admin and type:
cd <arctic_repo_location>/ArcticDB/cpp/third_party/lmdbcxx/ & ./symlinks_srcs.ps1
# Activate venv
<path_to_venv>/Scripts\Activate.ps1
# Generate
cd <arctic_repo_location>/ArcticDB/cpp
cmake --preset windows-vs-2022 ./
This will create a project located in <arctic_repo_location>/ArcticDB/cpp/out/windows-vs-2022-build
.
Note the preset enables /MT
by default, you might need to lower the threads used by MSBuild in case of insufficient RAM.
After generating a project
- Go to
View -> Solution Explorer
. Right click onarcticdb_ext
project and selectSet as startup project
. - Right click on
arcticdb_ext
.Properties -> Debugging
-
Command
set the absolute path to python from your virtual environment -
Command Arguments
set to-m pytest <absolute_path_to_tests>
-
Now running the code in Debug will be hitting breakpoints in code.
ArcticDB Wiki