diff --git a/.githooks/pre-commit b/.githooks/pre-commit
index df8c02d42..8a241e48b 100755
--- a/.githooks/pre-commit
+++ b/.githooks/pre-commit
@@ -33,4 +33,4 @@ for file in $modified_files; do
   fi
 done;
 
-return ${FAIL}
+exit ${FAIL}
diff --git a/environment/.gitignore b/environment/.gitignore
deleted file mode 100644
index 365d034c0..000000000
--- a/environment/.gitignore
+++ /dev/null
@@ -1,2 +0,0 @@
-archives
-build
diff --git a/environment/README.md b/environment/README.md
index cc9d90073..8654d7d4a 100644
--- a/environment/README.md
+++ b/environment/README.md
@@ -1,5 +1,10 @@
 # Memgraph Operating Environments
 
+## Issues related to build toolchain
+
+* GCC 11.2 (toolchain-v4) doesn't compile on Fedora 38, multiple definitions of enum issue
+* spdlog 1.10/11 doesn't work with fmt 10.0.0
+
 ## os
 
 Under the `os` directory, you can find scripts to install all required system
diff --git a/environment/os/amzn-2.sh b/environment/os/amzn-2.sh
index 92e3ff3be..dc0467bc3 100755
--- a/environment/os/amzn-2.sh
+++ b/environment/os/amzn-2.sh
@@ -18,7 +18,7 @@ TOOLCHAIN_BUILD_DEPS=(
     curl libcurl-devel # for cmake
     readline-devel # for cmake and llvm
     libffi-devel libxml2-devel # for llvm
-    libedit-devel pcre-devel automake bison # for swig
+    libedit-devel pcre-devel pcre2-devel automake bison # for swig
     file
     openssl-devel
     gmp-devel
diff --git a/environment/os/centos-7.sh b/environment/os/centos-7.sh
index 622dd4315..df16fbc73 100755
--- a/environment/os/centos-7.sh
+++ b/environment/os/centos-7.sh
@@ -20,7 +20,7 @@ TOOLCHAIN_BUILD_DEPS=(
     curl # snappy
     readline-devel # cmake and llvm
     libffi-devel libxml2-devel perl-Digest-MD5 # llvm
-    libedit-devel pcre-devel automake bison # swig
+    libedit-devel pcre-devel pcre2-devel automake bison # swig
     file
     openssl-devel
     gmp-devel
diff --git a/environment/os/centos-9.sh b/environment/os/centos-9.sh
index c20185d87..8a431807e 100755
--- a/environment/os/centos-9.sh
+++ b/environment/os/centos-9.sh
@@ -17,7 +17,7 @@ TOOLCHAIN_BUILD_DEPS=(
     expat-devel xz-devel python3-devel texinfo libbabeltrace-devel # for gdb
     readline-devel # for cmake and llvm
     libffi-devel libxml2-devel # for llvm
-    libedit-devel pcre-devel automake bison # for swig
+    libedit-devel pcre-devel pcre2-devel automake bison # for swig
     file
     openssl-devel
     gmp-devel
diff --git a/environment/os/debian-10.sh b/environment/os/debian-10.sh
index cfd2849f8..4c1deda42 100755
--- a/environment/os/debian-10.sh
+++ b/environment/os/debian-10.sh
@@ -24,7 +24,7 @@ TOOLCHAIN_BUILD_DEPS=(
     libgmp-dev # for gdb
     gperf # for proxygen
     git # for fbthrift
-    libedit-dev libpcre3-dev automake bison # for swig
+    libedit-dev libpcre2-dev libpcre3-dev automake bison # for swig
 )
 
 TOOLCHAIN_RUN_DEPS=(
diff --git a/environment/os/debian-11-arm.sh b/environment/os/debian-11-arm.sh
index bc973a08f..c8a3cca1c 100755
--- a/environment/os/debian-11-arm.sh
+++ b/environment/os/debian-11-arm.sh
@@ -18,7 +18,7 @@ TOOLCHAIN_BUILD_DEPS=(
     libcurl4-openssl-dev # for cmake
     libreadline-dev # for cmake and llvm
     libffi-dev libxml2-dev # for llvm
-    libedit-dev libpcre3-dev automake bison # for swig
+    libedit-dev libpcre2-dev libpcre3-dev automake bison # for swig
     curl # snappy
     file # for libunwind
     libssl-dev # for libevent
diff --git a/environment/os/debian-11.sh b/environment/os/debian-11.sh
index 740432125..c7e82b52c 100755
--- a/environment/os/debian-11.sh
+++ b/environment/os/debian-11.sh
@@ -18,7 +18,7 @@ TOOLCHAIN_BUILD_DEPS=(
     libcurl4-openssl-dev # for cmake
     libreadline-dev # for cmake and llvm
     libffi-dev libxml2-dev # for llvm
-    libedit-dev libpcre3-dev automake bison # for swig
+    libedit-dev libpcre2-dev libpcre3-dev automake bison # for swig
     curl # snappy
     file # for libunwind
     libssl-dev # for libevent
diff --git a/environment/os/fedora-36.sh b/environment/os/fedora-36.sh
index decd263b2..f7bd0c53a 100755
--- a/environment/os/fedora-36.sh
+++ b/environment/os/fedora-36.sh
@@ -18,7 +18,7 @@ TOOLCHAIN_BUILD_DEPS=(
     curl libcurl-devel # for cmake
     readline-devel # for cmake and llvm
     libffi-devel libxml2-devel # for llvm
-    libedit-devel pcre-devel automake bison # for swig
+    libedit-devel pcre-devel pcre2-devel automake bison # for swig
     file
     openssl-devel
     gmp-devel
diff --git a/environment/os/fedora-38.sh b/environment/os/fedora-38.sh
new file mode 100755
index 000000000..7837f018b
--- /dev/null
+++ b/environment/os/fedora-38.sh
@@ -0,0 +1,108 @@
+#!/bin/bash
+
+set -Eeuo pipefail
+
+DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
+source "$DIR/../util.sh"
+
+check_operating_system "fedora-38"
+check_architecture "x86_64"
+
+TOOLCHAIN_BUILD_DEPS=(
+    coreutils-common gcc gcc-c++ make # generic build tools
+    wget # used for archive download
+    gnupg2 # used for archive signature verification
+    tar gzip bzip2 xz unzip # used for archive unpacking
+    zlib-devel # zlib library used for all builds
+    expat-devel xz-devel python3-devel texinfo libbabeltrace-devel # for gdb
+    curl libcurl-devel # for cmake
+    readline-devel # for cmake and llvm
+    libffi-devel libxml2-devel # for llvm
+    libedit-devel pcre-devel pcre2-devel automake bison # for swig
+    file
+    openssl-devel
+    gmp-devel
+    gperf
+    diffutils
+    libipt libipt-devel # intel
+    patch
+    perl # for openssl
+)
+
+TOOLCHAIN_RUN_DEPS=(
+    make # generic build tools
+    tar gzip bzip2 xz # used for archive unpacking
+    zlib # zlib library used for all builds
+    expat xz-libs python3 # for gdb
+    readline # for cmake and llvm
+    libffi libxml2 # for llvm
+    openssl-devel
+)
+
+MEMGRAPH_BUILD_DEPS=(
+    git # source code control
+    make pkgconf-pkg-config # build system
+    wget # for downloading libs
+    libuuid-devel java-11-openjdk # required by antlr
+    readline-devel # for memgraph console
+    python3-devel # for query modules
+    openssl-devel
+    libseccomp-devel
+    python3 python3-pip python3-virtualenv python3-virtualenvwrapper python3-pyyaml nmap-ncat # for tests
+    libcurl-devel # mg-requests
+    rpm-build rpmlint # for RPM package building
+    doxygen graphviz # source documentation generators
+    which nodejs golang zip unzip java-11-openjdk-devel # for driver tests
+    sbcl # for custom Lisp C++ preprocessing
+    autoconf # for jemalloc code generation
+    libtool  # for protobuf code generation
+)
+
+list() {
+    echo "$1"
+}
+
+check() {
+    if [ -v LD_LIBRARY_PATH ]; then
+      # On Fedora 38 yum/dnf and python11 use newer glibc which is not compatible
+      # with ours, so we need to momentarely disable env
+      local OLD_LD_LIBRARY_PATH=${LD_LIBRARY_PATH}
+      LD_LIBRARY_PATH=""
+    fi
+    local missing=""
+    for pkg in $1; do
+        if ! dnf list installed "$pkg" >/dev/null 2>/dev/null; then
+            missing="$pkg $missing"
+        fi
+    done
+    if [ "$missing" != "" ]; then
+        echo "MISSING PACKAGES: $missing"
+        exit 1
+    fi
+    if [ -v OLD_LD_LIBRARY_PATH ]; then
+      echo "Restoring LD_LIBRARY_PATH..."
+      LD_LIBRARY_PATH=${OLD_LD_LIBRARY_PATH}
+    fi
+}
+
+install() {
+    cd "$DIR"
+    if [ "$EUID" -ne 0 ]; then
+        echo "Please run as root."
+        exit 1
+    fi
+    # If GitHub Actions runner is installed, append LANG to the environment.
+    # Python related tests don't work without the LANG export.
+    if [ -d "/home/gh/actions-runner" ]; then
+        echo "LANG=en_US.utf8" >> /home/gh/actions-runner/.env
+    else
+        echo "NOTE: export LANG=en_US.utf8"
+    fi
+    dnf update -y
+    for pkg in $1; do
+        dnf install -y "$pkg"
+    done
+}
+
+deps=$2"[*]"
+"$1" "${!deps}"
diff --git a/environment/os/ubuntu-18.04.sh b/environment/os/ubuntu-18.04.sh
index b599c0336..27d876e4f 100755
--- a/environment/os/ubuntu-18.04.sh
+++ b/environment/os/ubuntu-18.04.sh
@@ -25,7 +25,7 @@ TOOLCHAIN_BUILD_DEPS=(
     libgmp-dev # for gdb
     gperf # for proxygen
     libssl-dev
-    libedit-dev libpcre3-dev automake bison # swig
+    libedit-dev libpcre2-dev libpcre3-dev automake bison # swig
 )
 
 TOOLCHAIN_RUN_DEPS=(
diff --git a/environment/os/ubuntu-20.04.sh b/environment/os/ubuntu-20.04.sh
index 8a562c063..8a308406e 100755
--- a/environment/os/ubuntu-20.04.sh
+++ b/environment/os/ubuntu-20.04.sh
@@ -24,7 +24,7 @@ TOOLCHAIN_BUILD_DEPS=(
     libgmp-dev # for gdb
     gperf # for proxygen
     libssl-dev
-    libedit-dev libpcre3-dev automake bison # for swig
+    libedit-dev libpcre2-dev libpcre3-dev automake bison # for swig
 )
 
 TOOLCHAIN_RUN_DEPS=(
diff --git a/environment/os/ubuntu-22.04-arm.sh b/environment/os/ubuntu-22.04-arm.sh
index 9a0af5a27..45a4f3d4c 100755
--- a/environment/os/ubuntu-22.04-arm.sh
+++ b/environment/os/ubuntu-22.04-arm.sh
@@ -24,7 +24,7 @@ TOOLCHAIN_BUILD_DEPS=(
     libgmp-dev # for gdb
     gperf # for proxygen
     libssl-dev
-    libedit-dev libpcre3-dev automake bison # for swig
+    libedit-dev libpcre2-dev libpcre3-dev automake bison # for swig
 )
 
 TOOLCHAIN_RUN_DEPS=(
diff --git a/environment/os/ubuntu-22.04.sh b/environment/os/ubuntu-22.04.sh
index 586dde744..59361dd81 100755
--- a/environment/os/ubuntu-22.04.sh
+++ b/environment/os/ubuntu-22.04.sh
@@ -24,7 +24,7 @@ TOOLCHAIN_BUILD_DEPS=(
     libgmp-dev # for gdb
     gperf # for proxygen
     libssl-dev
-    libedit-dev libpcre3-dev automake bison # for swig
+    libedit-dev libpcre2-dev libpcre3-dev automake bison # for swig
 )
 
 TOOLCHAIN_RUN_DEPS=(
diff --git a/environment/toolchain/.gitignore b/environment/toolchain/.gitignore
index 335ec9573..e75f93b12 100644
--- a/environment/toolchain/.gitignore
+++ b/environment/toolchain/.gitignore
@@ -1 +1,4 @@
+archives
+build
+output
 *.tar.gz
diff --git a/environment/toolchain/v1.sh b/environment/toolchain/v1/build.sh
similarity index 100%
rename from environment/toolchain/v1.sh
rename to environment/toolchain/v1/build.sh
diff --git a/environment/toolchain/v2.sh b/environment/toolchain/v2/build.sh
similarity index 98%
rename from environment/toolchain/v2.sh
rename to environment/toolchain/v2/build.sh
index 6288093f9..49a9c372e 100755
--- a/environment/toolchain/v2.sh
+++ b/environment/toolchain/v2/build.sh
@@ -7,7 +7,7 @@ DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
 CPUS=$( grep -c processor < /proc/cpuinfo )
 cd "$DIR"
 
-source "$DIR/../util.sh"
+source "$DIR/../../util.sh"
 DISTRO="$(operating_system)"
 
 # toolchain version
@@ -30,10 +30,10 @@ LLVM_VERSION=11.0.0
 SWIG_VERSION=4.0.2 # used only for LLVM compilation
 
 # Check for the dependencies.
-echo "ALL BUILD PACKAGES: $($DIR/../os/$DISTRO.sh list TOOLCHAIN_BUILD_DEPS)"
-$DIR/../os/$DISTRO.sh check TOOLCHAIN_BUILD_DEPS
-echo "ALL RUN PACKAGES: $($DIR/../os/$DISTRO.sh list TOOLCHAIN_RUN_DEPS)"
-$DIR/../os/$DISTRO.sh check TOOLCHAIN_RUN_DEPS
+echo "ALL BUILD PACKAGES: $($DIR/../../os/$DISTRO.sh list TOOLCHAIN_BUILD_DEPS)"
+$DIR/../../os/$DISTRO.sh check TOOLCHAIN_BUILD_DEPS
+echo "ALL RUN PACKAGES: $($DIR/../../os/$DISTRO.sh list TOOLCHAIN_RUN_DEPS)"
+$DIR/../../os/$DISTRO.sh check TOOLCHAIN_RUN_DEPS
 
 # check installation directory
 NAME=toolchain-v$TOOLCHAIN_VERSION
@@ -442,7 +442,7 @@ In order to be able to run all of these tools you should install the following
 packages:
 
 \`\`\`
-$($DIR/../os/$DISTRO.sh list TOOLCHAIN_RUN_DEPS)
+$($DIR/../../os/$DISTRO.sh list TOOLCHAIN_RUN_DEPS)
 \`\`\`
 
 ## Usage
diff --git a/environment/toolchain/v3.sh b/environment/toolchain/v3/build.sh
similarity index 98%
rename from environment/toolchain/v3.sh
rename to environment/toolchain/v3/build.sh
index 75214064e..78823eae0 100755
--- a/environment/toolchain/v3.sh
+++ b/environment/toolchain/v3/build.sh
@@ -7,7 +7,7 @@ DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
 CPUS=$( grep -c processor < /proc/cpuinfo )
 cd "$DIR"
 
-source "$DIR/../util.sh"
+source "$DIR/../../util.sh"
 DISTRO="$(operating_system)"
 
 # toolchain version
@@ -31,10 +31,10 @@ LLVM_VERSION_LONG=12.0.1-rc4
 SWIG_VERSION=4.0.2 # used only for LLVM compilation
 
 # Check for the dependencies.
-echo "ALL BUILD PACKAGES: $($DIR/../os/$DISTRO.sh list TOOLCHAIN_BUILD_DEPS)"
-$DIR/../os/$DISTRO.sh check TOOLCHAIN_BUILD_DEPS
-echo "ALL RUN PACKAGES: $($DIR/../os/$DISTRO.sh list TOOLCHAIN_RUN_DEPS)"
-$DIR/../os/$DISTRO.sh check TOOLCHAIN_RUN_DEPS
+echo "ALL BUILD PACKAGES: $($DIR/../../os/$DISTRO.sh list TOOLCHAIN_BUILD_DEPS)"
+$DIR/../../os/$DISTRO.sh check TOOLCHAIN_BUILD_DEPS
+echo "ALL RUN PACKAGES: $($DIR/../../os/$DISTRO.sh list TOOLCHAIN_RUN_DEPS)"
+$DIR/../../os/$DISTRO.sh check TOOLCHAIN_RUN_DEPS
 
 # check installation directory
 NAME=toolchain-v$TOOLCHAIN_VERSION
@@ -452,7 +452,7 @@ In order to be able to run all of these tools you should install the following
 packages:
 
 \`\`\`
-$($DIR/../os/$DISTRO.sh list TOOLCHAIN_RUN_DEPS)
+$($DIR/../../os/$DISTRO.sh list TOOLCHAIN_RUN_DEPS)
 \`\`\`
 
 ## Usage
diff --git a/environment/toolchain/v4.sh b/environment/toolchain/v4/build.sh
similarity index 99%
rename from environment/toolchain/v4.sh
rename to environment/toolchain/v4/build.sh
index 2ac92441f..540dd65e1 100755
--- a/environment/toolchain/v4.sh
+++ b/environment/toolchain/v4/build.sh
@@ -7,7 +7,7 @@ DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
 CPUS=$( grep -c processor < /proc/cpuinfo )
 cd "$DIR"
 
-source "$DIR/../util.sh"
+source "$DIR/../../util.sh"
 DISTRO="$(operating_system)"
 
 function log_tool_name () {
@@ -51,17 +51,13 @@ CPPCHECK_VERSION=2.6
 LLVM_VERSION=13.0.0
 SWIG_VERSION=4.0.2 # used only for LLVM compilation
 
-# Set the right env script
-ENV_SCRIPT="$DIR/../os/$DISTRO.sh"
+# Set the right operating system setup script.
+ENV_SCRIPT="$DIR/../../os/$DISTRO.sh"
 if [[ "$for_arm" = true ]]; then
-    ENV_SCRIPT="$DIR/../os/$DISTRO-arm.sh"
+    ENV_SCRIPT="$DIR/../../os/$DISTRO-arm.sh"
 fi
-
-# Check for the toolchain build dependencies.
 echo "ALL BUILD PACKAGES: $(${ENV_SCRIPT} list TOOLCHAIN_BUILD_DEPS)"
 ${ENV_SCRIPT} check TOOLCHAIN_BUILD_DEPS
-
-# Check for the toolchain run dependencies.
 echo "ALL RUN PACKAGES: $(${ENV_SCRIPT} list TOOLCHAIN_RUN_DEPS)"
 ${ENV_SCRIPT} check TOOLCHAIN_RUN_DEPS
 
@@ -658,7 +654,7 @@ In order to be able to run all of these tools you should install the following
 packages:
 
 \`\`\`
-$($DIR/../os/$ENV_SCRIPT.sh list TOOLCHAIN_RUN_DEPS)
+$($DIR/../../os/$ENV_SCRIPT.sh list TOOLCHAIN_RUN_DEPS)
 \`\`\`
 
 ## Usage
diff --git a/environment/toolchain/folly.patch b/environment/toolchain/v4/folly.patch
similarity index 100%
rename from environment/toolchain/folly.patch
rename to environment/toolchain/v4/folly.patch
diff --git a/environment/toolchain/proxygen.patch b/environment/toolchain/v4/proxygen.patch
similarity index 100%
rename from environment/toolchain/proxygen.patch
rename to environment/toolchain/v4/proxygen.patch
diff --git a/environment/toolchain/snappy.patch b/environment/toolchain/v4/snappy.patch
similarity index 99%
rename from environment/toolchain/snappy.patch
rename to environment/toolchain/v4/snappy.patch
index d5fd9296f..4016bfd89 100644
--- a/environment/toolchain/snappy.patch
+++ b/environment/toolchain/v4/snappy.patch
@@ -4,7 +4,7 @@ diff -ur a/CMakeLists.txt b/CMakeLists.txt
 @@ -52,9 +52,9 @@
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /EHs-c-")
    add_definitions(-D_HAS_EXCEPTIONS=0)
- 
+
 -  # Disable RTTI.
 -  string(REGEX REPLACE "/GR" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
 -  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /GR-")
@@ -17,7 +17,7 @@ diff -ur a/CMakeLists.txt b/CMakeLists.txt
 @@ -77,9 +77,9 @@
    string(REGEX REPLACE "-fexceptions" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-exceptions")
- 
+
 -  # Disable RTTI.
 -  string(REGEX REPLACE "-frtti" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
 -  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-rtti")
@@ -25,5 +25,5 @@ diff -ur a/CMakeLists.txt b/CMakeLists.txt
 +  # string(REGEX REPLACE "-frtti" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
 +  # set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-rtti")
  endif(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
- 
+
  # BUILD_SHARED_LIBS is a standard CMake variable, but we declare it here to make
diff --git a/environment/toolchain/xz_pgp.txt b/environment/toolchain/v4/xz_pgp.txt
similarity index 100%
rename from environment/toolchain/xz_pgp.txt
rename to environment/toolchain/v4/xz_pgp.txt
diff --git a/environment/toolchain/v5/build.sh b/environment/toolchain/v5/build.sh
new file mode 100755
index 000000000..b6c1ff6d8
--- /dev/null
+++ b/environment/toolchain/v5/build.sh
@@ -0,0 +1,1280 @@
+#!/bin/bash -e
+
+# helpers
+pushd () { command pushd "$@" > /dev/null; }
+popd () { command popd "$@" > /dev/null; }
+DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
+CPUS=$( grep -c processor < /proc/cpuinfo )
+cd "$DIR"
+source "$DIR/../../util.sh"
+DISTRO="$(operating_system)"
+
+function log_tool_name () {
+    echo ""
+    echo ""
+    echo "#### $1 ####"
+    echo ""
+    echo ""
+}
+
+for_arm=false
+if [[ "$#" -eq 1 ]]; then
+    if [[ "$1" == "--for-arm" ]]; then
+        for_arm=true
+    else
+        echo "Invalid argument received. Use '--for-arm' if you want to build the toolchain for ARM based CPU."
+        exit 1
+   fi
+fi
+TOOLCHAIN_STDCXX="${TOOLCHAIN_STDCXX:-libstdc++}"
+if [[ "$TOOLCHAIN_STDCXX" != "libstdc++" && "$TOOLCHAIN_STDCXX" != "libc++" ]]; then
+    echo "Only GCC (libstdc++) or LLVM (libc++) C++ standard library implementations are supported."
+    exit 1
+fi
+# TODO(gitbuda): Make LLVM linker configurable -DLLVM_ENABLE_LLD=ON + -fuse-ld=lld (gold vs lld).
+# TODO(gitbuda): Add --skip-gpg and somehow make gpg check configurable per OS.
+TOOLCHAIN_VERSION=5
+# package versions used
+GCC_VERSION=13.2.0
+BINUTILS_VERSION=2.41
+case "$DISTRO" in
+    centos-7) # because GDB >= 9 does NOT compile with readline6.
+        GDB_VERSION=8.3
+    ;;
+    *)
+        GDB_VERSION=13.2
+    ;;
+esac
+CMAKE_VERSION=3.27.7
+CPPCHECK_VERSION=2.12.1
+LLVM_VERSION=17.0.2
+SWIG_VERSION=4.1.1 # used only for LLVM compilation
+# define the name used to make the toolchain archive
+DISTRO_FULL_NAME=${DISTRO}
+if [[ "${DISTRO}" == centos* ]]; then
+    if [[ "$for_arm" = "true" ]]; then
+        DISTRO_FULL_NAME="$DISTRO_FULL_NAME-aarch64"
+    else
+        DISTRO_FULL_NAME="$DISTRO_FULL_NAME-x86_64"
+    fi
+else
+    if [[ "$for_arm" = "true" ]]; then
+        DISTRO_FULL_NAME="$DISTRO_FULL_NAME-arm64"
+    else
+        DISTRO_FULL_NAME="$DISTRO_FULL_NAME-amd64"
+    fi
+fi
+if [ "$TOOLCHAIN_STDCXX" = "libstdc++" ]; then
+    # Pass because infra scripts assume there is not C++ standard lib in the name.
+    echo "NOTE: Not adding anything to the archive name, GCC C++ standard lib is used to build libraries."
+else
+    echo "NOTE: Adding libc++ to the archive name, all libraries are built with LLVM standard C++ library."
+    DISTRO_FULL_NAME="$DISTRO_FULL_NAME-libc++"
+fi
+
+# Set the right operating system setup script.
+ENV_SCRIPT_RELATIVE="environment/os/$DISTRO.sh"
+if [[ "$for_arm" = true ]]; then
+    ENV_SCRIPT_RELATIVE="environment/os/$DISTRO-arm.sh"
+fi
+ENV_SCRIPT="$DIR/../../../$ENV_SCRIPT_RELATIVE"
+echo "ALL BUILD PACKAGES: $(${ENV_SCRIPT} list TOOLCHAIN_BUILD_DEPS)"
+${ENV_SCRIPT} check TOOLCHAIN_BUILD_DEPS
+echo "ALL RUN PACKAGES: $(${ENV_SCRIPT} list TOOLCHAIN_RUN_DEPS)"
+${ENV_SCRIPT} check TOOLCHAIN_RUN_DEPS
+
+# check installation directory
+NAME=toolchain-v$TOOLCHAIN_VERSION
+PREFIX=/opt/$NAME
+mkdir -p $PREFIX >/dev/null 2>/dev/null || true
+if [ ! -d $PREFIX ] || [ ! -w $PREFIX ]; then
+    echo "Please make sure that the directory '$PREFIX' exists and is writable by the current user!"
+    echo
+    echo "If unsure, execute these commands as root:"
+    echo "    mkdir $PREFIX && chown $USER:$USER $PREFIX"
+    echo
+    echo "Press <return> when you have created the directory and granted permissions."
+    # wait for the directory to be created
+    while true; do
+        read
+        if [ ! -d $PREFIX ] || [ ! -w $PREFIX ]; then
+            echo
+            echo "You can't continue before you have created the directory and granted permissions!"
+            echo
+            echo "Press <return> when you have created the directory and granted permissions."
+        else
+            break
+        fi
+    done
+fi
+
+# create archives directory
+mkdir -p archives && pushd archives
+# download all archives
+if [ ! -f gcc-$GCC_VERSION.tar.gz ]; then
+    wget https://ftp.gnu.org/gnu/gcc/gcc-$GCC_VERSION/gcc-$GCC_VERSION.tar.gz
+fi
+if [ ! -f binutils-$BINUTILS_VERSION.tar.gz ]; then
+    wget https://ftp.gnu.org/gnu/binutils/binutils-$BINUTILS_VERSION.tar.gz
+fi
+if [ ! -f gdb-$GDB_VERSION.tar.gz ]; then
+    wget https://ftp.gnu.org/gnu/gdb/gdb-$GDB_VERSION.tar.gz
+fi
+if [ ! -f cmake-$CMAKE_VERSION.tar.gz ]; then
+    wget https://github.com/Kitware/CMake/releases/download/v$CMAKE_VERSION/cmake-$CMAKE_VERSION.tar.gz
+fi
+if [ ! -f cppcheck-$CPPCHECK_VERSION.tar.gz ]; then
+    wget https://github.com/danmar/cppcheck/archive/refs/tags/$CPPCHECK_VERSION.tar.gz -O cppcheck-$CPPCHECK_VERSION.tar.gz
+fi
+if [ ! -d llvmorg-$LLVM_VERSION ]; then
+    git clone --depth 1 --branch llvmorg-$LLVM_VERSION https://github.com/llvm/llvm-project.git llvmorg-$LLVM_VERSION
+fi
+if [ ! -f pahole-gdb-master.zip ]; then
+    wget https://github.com/PhilArmstrong/pahole-gdb/archive/master.zip -O pahole-gdb-master.zip
+fi
+if [ ! -f swig-$SWIG_VERSION.tar.gz ]; then
+    wget https://github.com/swig/swig/archive/refs/tags/v$SWIG_VERSION.tar.gz -O swig-$SWIG_VERSION.tar.gz
+fi
+
+# verify all archives
+# NOTE: Verification can fail if the archive is signed by another developer. I
+# haven't added commands to download all developer GnuPG keys because the
+# download is very slow. If the verification fails for you, figure out who has
+# signed the archive and download their public key instead.
+GPG="gpg --homedir .gnupg"
+KEYSERVER="hkp://keyserver.ubuntu.com"
+mkdir -p .gnupg
+chmod 700 .gnupg
+
+popd
+# create build directory
+mkdir -p build
+pushd build
+
+log_tool_name "GCC $GCC_VERSION"
+if [ ! -f $PREFIX/bin/gcc ]; then
+    if [ -d gcc-$GCC_VERSION ]; then
+        rm -rf gcc-$GCC_VERSION
+    fi
+    tar -xvf ../archives/gcc-$GCC_VERSION.tar.gz
+    pushd gcc-$GCC_VERSION
+    ./contrib/download_prerequisites
+    mkdir build && pushd build
+    # influenced by: https://buildd.debian.org/status/fetch.php?pkg=gcc-11&arch=arm64&ver=11.2.0-14&stamp=1642052446&raw=0
+    if [[ "$for_arm" = true ]]; then
+        ../configure -v \
+            --prefix=$PREFIX \
+            --disable-multilib \
+            --with-system-zlib \
+            --enable-languages=c,c++,fortran \
+            --enable-gold=yes \
+            --enable-ld=yes \
+            --disable-vtable-verify \
+            --enable-libmpx \
+            --without-cuda-driver \
+            --enable-shared \
+            --enable-linker-build-id \
+            --without-included-gettext \
+            --enable-threads=posix \
+            --enable-nls \
+            --enable-bootstrap \
+            --enable-clocale=gnu \
+            --enable-libstdcxx-debug \
+            --enable-libstdcxx-time=yes \
+            --with-default-libstdcxx-abi=new \
+            --enable-gnu-unique-object \
+            --disable-libquadmath \
+            --disable-libquadmath-support \
+            --enable-plugin \
+            --enable-default-pie \
+            --with-system-zlib \
+            --enable-libphobos-checking=release \
+            --with-target-system-zlib=auto \
+            --enable-objc-gc=auto \
+            --enable-multiarch \
+            --enable-fix-cortex-a53-843419 \
+            --disable-werror \
+            --enable-checking=release \
+            --build=aarch64-linux-gnu \
+            --host=aarch64-linux-gnu \
+            --target=aarch64-linux-gnu \
+            --with-build-config=bootstrap-lto-lean \
+            --enable-link-serialization=4
+    else
+        # influenced by: https://buildd.debian.org/status/fetch.php?pkg=gcc-8&arch=amd64&ver=8.3.0-6&stamp=1554588545
+        ../configure -v \
+            --build=x86_64-linux-gnu \
+            --host=x86_64-linux-gnu \
+            --target=x86_64-linux-gnu \
+            --prefix=$PREFIX \
+            --disable-multilib \
+            --with-system-zlib \
+            --enable-checking=release \
+            --enable-languages=c,c++,fortran \
+            --enable-gold=yes \
+            --enable-ld=yes \
+            --enable-lto \
+            --enable-bootstrap \
+            --disable-vtable-verify \
+            --disable-werror \
+            --without-included-gettext \
+            --enable-threads=posix \
+            --enable-nls \
+            --enable-clocale=gnu \
+            --enable-libstdcxx-debug \
+            --enable-libstdcxx-time=yes \
+            --enable-gnu-unique-object \
+            --enable-libmpx \
+            --enable-plugin \
+            --enable-default-pie \
+            --with-target-system-zlib \
+            --with-tune=generic \
+            --without-cuda-driver
+            #--program-suffix=$( printf "$GCC_VERSION" | cut -d '.' -f 1,2 ) \
+    fi
+    make -j$CPUS
+    # make -k check # run test suite
+    make install
+    popd && popd
+fi
+
+# activate toolchain
+export PATH=$PREFIX/bin:$PATH
+export LD_LIBRARY_PATH=$PREFIX/lib64
+
+log_tool_name "binutils $BINUTILS_VERSION"
+if [ ! -f $PREFIX/bin/ld.gold ]; then
+    if [ -d binutils-$BINUTILS_VERSION ]; then
+        rm -rf binutils-$BINUTILS_VERSION
+    fi
+    tar -xvf ../archives/binutils-$BINUTILS_VERSION.tar.gz
+    pushd binutils-$BINUTILS_VERSION
+    mkdir build && pushd build
+    if [[ "$for_arm" = true ]]; then
+        # influenced by: https://buildd.debian.org/status/fetch.php?pkg=binutils&arch=arm64&ver=2.37.90.20220130-2&stamp=1643576183&raw=0
+        env \
+            CC=gcc \
+            CXX=g++ \
+            CFLAGS="-g -O2" \
+            CXXFLAGS="-g -O2" \
+            LDFLAGS="" \
+            ../configure \
+                --build=aarch64-linux-gnu \
+                --host=aarch64-linux-gnu \
+                --prefix=$PREFIX \
+                --enable-ld=default \
+                --enable-gold \
+                --enable-lto \
+                --enable-pgo-build=lto \
+                --enable-plugins \
+                --enable-shared \
+                --enable-threads \
+                --with-system-zlib \
+                --enable-deterministic-archives \
+                --disable-compressed-debug-sections \
+                --disable-x86-used-note \
+                --enable-obsolete \
+                --enable-new-dtags \
+                --disable-werror
+    else
+        # influenced by: https://buildd.debian.org/status/fetch.php?pkg=binutils&arch=amd64&ver=2.32-7&stamp=1553247092
+        env \
+            CC=gcc \
+            CXX=g++ \
+            CFLAGS="-g -O2" \
+            CXXFLAGS="-g -O2" \
+            LDFLAGS="" \
+            ../configure \
+                --build=x86_64-linux-gnu \
+                --host=x86_64-linux-gnu \
+                --prefix=$PREFIX \
+                --enable-ld=default \
+                --enable-gold \
+                --enable-lto \
+                --enable-plugins \
+                --enable-shared \
+                --enable-threads \
+                --with-system-zlib \
+                --enable-deterministic-archives \
+                --disable-compressed-debug-sections \
+                --enable-new-dtags \
+                --disable-werror
+    fi
+    make -j$CPUS
+    # make -k check # run test suite
+    make install
+    popd && popd
+fi
+
+log_tool_name "GDB $GDB_VERSION"
+if [ ! -f $PREFIX/bin/gdb ]; then
+    if [ -d gdb-$GDB_VERSION ]; then
+        rm -rf gdb-$GDB_VERSION
+    fi
+    tar -xvf ../archives/gdb-$GDB_VERSION.tar.gz
+    pushd gdb-$GDB_VERSION
+    mkdir build && pushd build
+    if [[ "$for_arm" = true ]]; then
+        # https://buildd.debian.org/status/fetch.php?pkg=gdb&arch=arm64&ver=10.1-2&stamp=1614889767&raw=0
+        env \
+            CC=gcc \
+            CXX=g++ \
+            CFLAGS="-g -O2 -fstack-protector-strong -Wformat -Werror=format-security" \
+            CXXFLAGS="-g -O2 -fstack-protector-strong -Wformat -Werror=format-security" \
+            CPPFLAGS="-Wdate-time -D_FORTIFY_SOURCE=2 -fPIC" \
+            LDFLAGS="-Wl,-z,relro" \
+            PYTHON="" \
+            ../configure \
+                --build=aarch64-linux-gnu \
+                --host=aarch64-linux-gnu \
+                --prefix=$PREFIX \
+                --disable-maintainer-mode \
+                --disable-dependency-tracking \
+                --disable-silent-rules \
+                --disable-gdbtk \
+                --disable-shared \
+                --without-guile \
+                --with-system-gdbinit=$PREFIX/etc/gdb/gdbinit \
+                --with-system-readline \
+                --with-expat \
+                --with-system-zlib \
+                --with-lzma \
+                --without-babeltrace \
+                --enable-tui \
+                --with-python=python3
+    else
+        # https://buildd.debian.org/status/fetch.php?pkg=gdb&arch=amd64&ver=8.2.1-2&stamp=1550831554&raw=0
+        env \
+            CC=gcc \
+            CXX=g++ \
+            CFLAGS="-g -O2 -fstack-protector-strong -Wformat -Werror=format-security" \
+            CXXFLAGS="-g -O2 -fstack-protector-strong -Wformat -Werror=format-security" \
+            CPPFLAGS="-Wdate-time -D_FORTIFY_SOURCE=2 -fPIC" \
+            LDFLAGS="-Wl,-z,relro" \
+            PYTHON="" \
+            ../configure \
+                --build=x86_64-linux-gnu \
+                --host=x86_64-linux-gnu \
+                --prefix=$PREFIX \
+                --disable-maintainer-mode \
+                --disable-dependency-tracking \
+                --disable-silent-rules \
+                --disable-gdbtk \
+                --disable-shared \
+                --without-guile \
+                --with-system-gdbinit=$PREFIX/etc/gdb/gdbinit \
+                --with-system-readline \
+                --with-expat \
+                --with-system-zlib \
+                --with-lzma \
+                --with-babeltrace \
+                --with-intel-pt \
+                --enable-tui \
+                --with-python=python3
+    fi
+    make -j$CPUS
+    make install
+    popd && popd
+fi
+
+log_tool_name "install pahole"
+if [ ! -d $PREFIX/share/pahole-gdb ]; then
+    unzip ../archives/pahole-gdb-master.zip
+    mv pahole-gdb-master $PREFIX/share/pahole-gdb
+fi
+
+log_tool_name "setup system gdbinit"
+if [ ! -f $PREFIX/etc/gdb/gdbinit ]; then
+    mkdir -p $PREFIX/etc/gdb
+    cat >$PREFIX/etc/gdb/gdbinit <<EOF
+# improve formatting
+set print pretty on
+set print object on
+set print static-members on
+set print vtbl on
+set print demangle on
+set demangle-style gnu-v3
+set print sevenbit-strings off
+
+# load libstdc++ pretty printers
+add-auto-load-scripts-directory $PREFIX/lib64
+add-auto-load-safe-path $PREFIX
+
+# load pahole
+python
+sys.path.insert(0, "$PREFIX/share/pahole-gdb")
+import offsets
+import pahole
+end
+EOF
+fi
+
+log_tool_name "cmake $CMAKE_VERSION"
+if [ ! -f $PREFIX/bin/cmake ]; then
+    if [ -d cmake-$CMAKE_VERSION ]; then
+        rm -rf cmake-$CMAKE_VERSION
+    fi
+    tar -xvf ../archives/cmake-$CMAKE_VERSION.tar.gz
+    pushd cmake-$CMAKE_VERSION
+    # influenced by: https://buildd.debian.org/status/fetch.php?pkg=cmake&arch=amd64&ver=3.13.4-1&stamp=1549799837
+    echo 'set(CMAKE_SKIP_RPATH ON CACHE BOOL "Skip rpath" FORCE)' >> build-flags.cmake
+    echo 'set(CMAKE_USE_RELATIVE_PATHS ON CACHE BOOL "Use relative paths" FORCE)' >> build-flags.cmake
+    echo 'set(CMAKE_C_FLAGS "-g -O2 -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2" CACHE STRING "C flags" FORCE)' >> build-flags.cmake
+    echo 'set(CMAKE_CXX_FLAGS "-g -O2 -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2" CACHE STRING "C++ flags" FORCE)' >> build-flags.cmake
+    echo 'set(CMAKE_SKIP_BOOTSTRAP_TEST ON CACHE BOOL "Skip BootstrapTest" FORCE)' >> build-flags.cmake
+    echo 'set(BUILD_CursesDialog ON CACHE BOOL "Build curses GUI" FORCE)' >> build-flags.cmake
+    mkdir build && pushd build
+    ../bootstrap \
+        --prefix=$PREFIX \
+        --init=../build-flags.cmake \
+        --parallel=$CPUS \
+        --system-curl
+    make -j$CPUS
+    # make test # run test suite
+    make install
+    popd && popd
+fi
+
+log_tool_name "cppcheck $CPPCHECK_VERSION"
+if [ ! -f $PREFIX/bin/cppcheck ]; then
+    if [ -d cppcheck-$CPPCHECK_VERSION ]; then
+        rm -rf cppcheck-$CPPCHECK_VERSION
+    fi
+    tar -xvf ../archives/cppcheck-$CPPCHECK_VERSION.tar.gz
+    pushd cppcheck-$CPPCHECK_VERSION
+    env \
+        CC=gcc \
+        CXX=g++ \
+        PREFIX=$PREFIX \
+        FILESDIR=$PREFIX/share/cppcheck \
+        CFGDIR=$PREFIX/share/cppcheck/cfg \
+            make -j$CPUS
+    env \
+        CC=gcc \
+        CXX=g++ \
+        PREFIX=$PREFIX \
+        FILESDIR=$PREFIX/share/cppcheck \
+        CFGDIR=$PREFIX/share/cppcheck/cfg \
+            make install
+    popd
+fi
+
+log_tool_name "swig $SWIG_VERSION"
+if [ ! -d swig-$SWIG_VERSION/install ]; then
+    if [ -d swig-$SWIG_VERSION ]; then
+        rm -rf swig-$SWIG_VERSION
+    fi
+    tar -xvf ../archives/swig-$SWIG_VERSION.tar.gz
+    pushd swig-$SWIG_VERSION
+    ./autogen.sh
+    mkdir build && pushd build
+    ../configure --prefix=$DIR/build/swig-$SWIG_VERSION/install
+    make -j$CPUS
+    make install
+    popd && popd
+fi
+
+log_tool_name "LLVM $LLVM_VERSION"
+if [ ! -f $PREFIX/bin/clang ]; then
+    if [ -d llvmorg-$LLVM_VERSION ]; then
+        rm -rf llvmorg-$LLVM_VERSION
+    fi
+    cp -r ../archives/llvmorg-$LLVM_VERSION ./llvmorg-$LLVM_VERSION
+
+    # NOTE: Go under llvmorg-$LLVM_VERSION/llvm/CMakeLists.txt to see all
+    #       options, docs pages are not up to date.
+    TOOLCHAIN_LLVM_ENABLE_PROJECTS="clang;clang-tools-extra;compiler-rt;lldb;lld"
+    TOOLCHAIN_LLVM_ENABLE_RUNTIMES="libunwind"
+    if [ "$TOOLCHAIN_STDCXX" = "libc++" ]; then
+        TOOLCHAIN_LLVM_ENABLE_RUNTIMES="$TOOLCHAIN_LLVM_ENABLE_RUNTIMES;libcxx;libcxxabi"
+    fi
+
+    pushd llvmorg-$LLVM_VERSION
+    # activate swig
+    export PATH=$DIR/build/swig-$SWIG_VERSION/install/bin:$PATH
+    # influenced by: https://buildd.debian.org/status/fetch.php?pkg=llvm-toolchain-7&arch=amd64&ver=1%3A7.0.1%7E%2Brc2-1%7Eexp1&stamp=1541506173&raw=0
+    cmake -S llvm -B build -G "Unix Makefiles" \
+        -DCMAKE_INSTALL_PREFIX="$PREFIX" \
+        -DCMAKE_C_COMPILER=$PREFIX/bin/gcc \
+        -DCMAKE_CXX_COMPILER=$PREFIX/bin/g++ \
+        -DCMAKE_CXX_LINK_FLAGS="-L$PREFIX/lib64 -Wl,-rpath,$PREFIX/lib64" \
+        -DCMAKE_INSTALL_PREFIX=$PREFIX \
+        -DCMAKE_BUILD_TYPE=RelWithDebInfo \
+        -DCMAKE_CXX_FLAGS_RELWITHDEBINFO="-O2 -DNDEBUG" \
+        -DCMAKE_CXX_FLAGS=' -fuse-ld=gold -fPIC -Wno-unused-command-line-argument -Wno-unknown-warning-option' \
+        -DCMAKE_C_FLAGS=' -fuse-ld=gold -fPIC -Wno-unused-command-line-argument -Wno-unknown-warning-option' \
+        -DLLVM_ENABLE_PROJECTS="$TOOLCHAIN_LLVM_ENABLE_PROJECTS" \
+        -DLLVM_ENABLE_RUNTIMES="$TOOLCHAIN_LLVM_ENABLE_RUNTIMES" \
+        -DLLVM_LINK_LLVM_DYLIB=ON \
+        -DLLVM_INSTALL_UTILS=ON \
+        -DLLVM_VERSION_SUFFIX= \
+        -DLLVM_BUILD_LLVM_DYLIB=ON \
+        -DLLVM_ENABLE_RTTI=ON \
+        -DLLVM_ENABLE_FFI=ON \
+        -DLLVM_BINUTILS_INCDIR=$PREFIX/include/ \
+        -DLLVM_INCLUDE_BENCHMARKS=OFF \
+        -DLLVM_USE_PERF=yes \
+        -DCOMPILER_RT_INCLUDE_TESTS=OFF \
+        -DLIBCXX_INCLUDE_BENCHMARKS=OFF
+    pushd build
+    make -j$CPUS
+    if [[ "$for_arm" = false ]]; then
+        make -j$CPUS check-clang # run clang test suite
+        # ldd is not used
+        # make -j$CPUS check-lld # run lld test suite
+    fi
+    make install
+    popd && popd
+fi
+
+popd
+
+# create README
+if [ ! -f $PREFIX/README.md ]; then
+    cat >$PREFIX/README.md <<EOF
+# Memgraph Toolchain v$TOOLCHAIN_VERSION
+
+## Included tools
+
+ - GCC $GCC_VERSION
+ - Binutils $BINUTILS_VERSION
+ - GDB $GDB_VERSION
+ - CMake $CMAKE_VERSION
+ - Cppcheck $CPPCHECK_VERSION
+ - LLVM (clang;clang-tools-extra;compiler-rt;libunwind;lldb[;libcxx;libcxxabi]) $LLVM_VERSION
+
+## Required libraries
+
+In order to be able to run all of these tools you should install the following
+packages:
+\`\`\`
+./$ENV_SCRIPT_RELATIVE list TOOLCHAIN_RUN_DEPS)
+\`\`\`
+by executing:
+\`\`\`
+./$ENV_SCRIPT_RELATIVE install TOOLCHAIN_RUN_DEPS)
+\`\`\`
+
+## Usage
+
+In order to use the toolchain you just have to source the activation script:
+
+\`\`\`
+source $PREFIX/activate
+\`\`\`
+
+On the other hand, \`deactivate\` will get back your original setup by restoring
+the initial environment variables.
+EOF
+fi
+
+# create activation script
+if [ ! -f $PREFIX/activate ]; then
+    cat >$PREFIX/activate <<EOF
+# This file must be used with "source $PREFIX/activate" *from bash*
+# You can't run it directly!
+
+env_error="You already have an active virtual environment!"
+
+# zsh does not recognize the option -t of the command type
+# therefore we use the alternative whence -w
+if [[ "\$ZSH_NAME" == "zsh" ]]; then
+    # check for active virtual environments
+    if [ "\$( whence -w deactivate )" != "deactivate: none" ]; then
+        echo \$env_error
+        return 0;
+    fi
+# any other shell
+else
+    # check for active virtual environments
+    if [ "\$( type -t deactivate )" != "" ]; then
+        echo \$env_error
+        return 0
+    fi
+fi
+
+# check that we aren't root
+if [[ "\$USER" == "root" ]]; then
+    echo "You shouldn't use the toolchain as root!"
+    return 0
+fi
+
+# save original environment
+export ORIG_PATH=\$PATH
+export ORIG_PS1=\$PS1
+export ORIG_LD_LIBRARY_PATH=\$LD_LIBRARY_PATH
+export ORIG_CXXFLAGS=\$CXXFLAGS
+export ORIG_CFLAGS=\$CFLAGS
+
+# activate new environment
+export PATH=$PREFIX:$PREFIX/bin:\$PATH
+export PS1="($NAME) \$PS1"
+export LD_LIBRARY_PATH=$PREFIX/lib:$PREFIX/lib64
+export CXXFLAGS=-isystem\ $PREFIX/include\ \$CXXFLAGS
+export CFLAGS=-isystem\ $PREFIX/include\ \$CFLAGS
+
+# disable root
+function su () {
+    echo "You don't want to use root functions while using the toolchain!"
+    return 1
+}
+function sudo () {
+    echo "You don't want to use root functions while using the toolchain!"
+    return 1
+}
+
+# create deactivation function
+function deactivate() {
+    export PATH=\$ORIG_PATH
+    export PS1=\$ORIG_PS1
+    export LD_LIBRARY_PATH=\$ORIG_LD_LIBRARY_PATH
+    export CXXFLAGS=\$ORIG_CXXFLAGS
+    export CFLAGS=\$ORIG_CFLAGS
+    unset ORIG_PATH ORIG_PS1 ORIG_LD_LIBRARY_PATH ORIG_CXXFLAGS ORIG_CFLAGS
+    unset -f su sudo deactivate
+}
+EOF
+fi
+
+###################################
+#                                 #
+# Third-party library compilation #
+#                                 #
+###################################
+# variable:
+#   * architecture    : ARM, x86
+#   * operating system: Lin, Mac, Win (many distros and versions)
+#   * compiler        : clang, gcc
+#   * standard lib    : libstdc++, libc++
+# options:
+#   * extreme 1 -> move all libs + Memgraph compilation here, have one giant script
+#   * extreme 2 -> build a granular package manager, each lib (for all variable) separated
+BOOST_SHA256=205666dea9f6a7cfed87c7a6dfbeb52a2c1b9de55712c9c1a87735d7181452b6
+BOOST_VERSION=1.81.0
+BOOST_VERSION_UNDERSCORES=`echo "${BOOST_VERSION//./_}"`
+BZIP2_SHA256=a2848f34fcd5d6cf47def00461fcb528a0484d8edef8208d6d2e2909dc61d9cd
+BZIP2_VERSION=1.0.6
+DOUBLE_CONVERSION_SHA256=8a79e87d02ce1333c9d6c5e47f452596442a343d8c3e9b234e8a62fce1b1d49c
+DOUBLE_CONVERSION_VERSION=3.1.6
+
+# NOTE: At some point Folly stopped supporting OpenSSL 1.0 which is critical
+# for CentOS7. If you decide to bump FBLIBS_VERSION drop Folly of stop
+# supporting CentOS7.
+FBLIBS_VERSION=2022.01.31.00
+# FBLIBS_VERSION=2023.09.25.00
+FIZZ_SHA256=32a60e78d41ea2682ce7e5d741b964f0ea83642656e42d4fea90c0936d6d0c7d
+# FIZZ_SHA256=002949ec9e57e2b205e43a7ca4e2acd8730923ad124dba8ecbe4c0dc44e4627b
+FOLLY_SHA256=7b8d5dd2eb51757858247af0ad27af2e3e93823f84033a628722b01e06cd68a9
+# FOLLY_SHA256=195712d6ff7e08d64e1340ad8d21e39a261114da0119920e747f5d43b1b47aac
+PROXYGEN_SHA256=5360a8ccdfb2f5a6c7b3eed331ec7ab0e2c792d579c6fff499c85c516c11fe14
+# PROXYGEN_SHA256=7a0d9f048c1d8b0ffbf59ab401fe6970a39e88bf6293cf5c296e9eab4ca2a69e
+WANGLE_SHA256=1002e9c32b6f4837f6a760016e3b3e22f3509880ef3eaad191c80dc92655f23f
+# WANGLE_SHA256=0e493c03572bb27fe9ca03a9da5023e52fde99c95abdcaa919bb6190e7e69532
+
+FLEX_VERSION=2.6.4
+FMT_SHA256=78b8c0a72b1c35e4443a7e308df52498252d1cefc2b08c9a97bc9ee6cfe61f8b
+FMT_VERSION=10.1.1
+# NOTE: spdlog depends on exact fmt versions -> UPGRADE fmt and spdlog TOGETHER.
+SPDLOG_SHA256=4dccf2d10f410c1e2feaff89966bfc49a1abb29ef6f08246335b110e001e09a9
+SPDLOG_VERSION=1.12.0
+GFLAGS_COMMIT_HASH=b37ceb03a0e56c9f15ce80409438a555f8a67b7c
+GLOG_SHA256=eede71f28371bf39aa69b45de23b329d37214016e2055269b3b5e7cfd40b59f5
+GLOG_VERSION=0.5.0
+JEMALLOC_VERSION=5.2.1 # Some people complained about 5.3.0 performance.
+LIBAIO_VERSION=0.3.112
+LIBEVENT_VERSION=2.1.12-stable
+LIBSODIUM_VERSION=1.0.18
+LIBUNWIND_VERSION=1.6.2
+LZ4_SHA256=0b0e3aa07c8c063ddf40b082bdf7e37a1562bda40a0ff5272957f3e987e0e54b
+LZ4_VERSION=1.9.4
+SNAPPY_SHA256=75c1fbb3d618dd3a0483bff0e26d0a92b495bbe5059c8b4f1c962b478b6e06e7
+SNAPPY_VERSION=1.1.9
+XZ_VERSION=5.2.5 # for LZMA
+ZLIB_VERSION=1.3
+ZSTD_VERSION=1.5.0
+
+pushd archives
+if [ ! -f boost_$BOOST_VERSION_UNDERSCORES.tar.gz ]; then
+    # do not redirect the download into a file, because it will download the file into a ".1" postfixed file
+    # I am not sure why this is happening, but I think because of some redirects that happens during the download
+    wget https://boostorg.jfrog.io/artifactory/main/release/$BOOST_VERSION/source/boost_$BOOST_VERSION_UNDERSCORES.tar.gz -O boost_$BOOST_VERSION_UNDERSCORES.tar.gz
+fi
+if [ ! -f bzip2-$BZIP2_VERSION.tar.gz ]; then
+    wget https://sourceforge.net/projects/bzip2/files/bzip2-$BZIP2_VERSION.tar.gz -O bzip2-$BZIP2_VERSION.tar.gz
+fi
+if [ ! -f double-conversion-$DOUBLE_CONVERSION_VERSION.tar.gz ]; then
+    wget https://github.com/google/double-conversion/archive/refs/tags/v$DOUBLE_CONVERSION_VERSION.tar.gz -O double-conversion-$DOUBLE_CONVERSION_VERSION.tar.gz
+fi
+if [ ! -f fizz-$FBLIBS_VERSION.tar.gz ]; then
+    wget https://github.com/facebookincubator/fizz/releases/download/v$FBLIBS_VERSION/fizz-v$FBLIBS_VERSION.tar.gz -O fizz-$FBLIBS_VERSION.tar.gz
+fi
+if [ ! -f flex-$FLEX_VERSION.tar.gz ]; then
+    wget https://github.com/westes/flex/releases/download/v$FLEX_VERSION/flex-$FLEX_VERSION.tar.gz -O flex-$FLEX_VERSION.tar.gz
+fi
+if [ ! -f fmt-$FMT_VERSION.tar.gz ]; then
+    wget https://github.com/fmtlib/fmt/archive/refs/tags/$FMT_VERSION.tar.gz -O fmt-$FMT_VERSION.tar.gz
+fi
+if [ ! -f spdlog-$SPDLOG_VERSION.tar.gz ]; then
+    wget https://github.com/gabime/spdlog/archive/refs/tags/v$SPDLOG_VERSION.tar.gz -O spdlog-$SPDLOG_VERSION.tar.gz
+fi
+if [ ! -d folly-$FBLIBS_VERSION ]; then
+    git clone --depth 1 --branch v$FBLIBS_VERSION https://github.com/facebook/folly.git folly-$FBLIBS_VERSION
+fi
+if [ ! -f glog-$GLOG_VERSION.tar.gz ]; then
+    wget https://github.com/google/glog/archive/refs/tags/v$GLOG_VERSION.tar.gz -O glog-$GLOG_VERSION.tar.gz
+fi
+if [ ! -f libaio-$LIBAIO_VERSION.tar.gz ]; then
+    wget https://releases.pagure.org/libaio/libaio-$LIBAIO_VERSION.tar.gz -O libaio-$LIBAIO_VERSION.tar.gz
+fi
+if [ ! -f libevent-$LIBEVENT_VERSION.tar.gz ]; then
+    wget https://github.com/libevent/libevent/releases/download/release-$LIBEVENT_VERSION/libevent-$LIBEVENT_VERSION.tar.gz -O libevent-$LIBEVENT_VERSION.tar.gz
+fi
+if [ ! -f libsodium-$LIBSODIUM_VERSION.tar.gz ]; then
+    curl https://download.libsodium.org/libsodium/releases/libsodium-$LIBSODIUM_VERSION.tar.gz -o libsodium-$LIBSODIUM_VERSION.tar.gz
+fi
+if [ ! -f libunwind-$LIBUNWIND_VERSION.tar.gz ]; then
+    wget https://github.com/libunwind/libunwind/releases/download/v$LIBUNWIND_VERSION/libunwind-$LIBUNWIND_VERSION.tar.gz -O libunwind-$LIBUNWIND_VERSION.tar.gz
+fi
+if [ ! -f lz4-$LZ4_VERSION.tar.gz ]; then
+    wget https://github.com/lz4/lz4/archive/v$LZ4_VERSION.tar.gz -O lz4-$LZ4_VERSION.tar.gz
+fi
+if [ ! -f proxygen-$FBLIBS_VERSION.tar.gz ]; then
+    wget https://github.com/facebook/proxygen/releases/download/v$FBLIBS_VERSION/proxygen-v$FBLIBS_VERSION.tar.gz -O proxygen-$FBLIBS_VERSION.tar.gz
+fi
+if [ ! -f snappy-$SNAPPY_VERSION.tar.gz ]; then
+    wget https://github.com/google/snappy/archive/refs/tags/$SNAPPY_VERSION.tar.gz -O snappy-$SNAPPY_VERSION.tar.gz
+fi
+if [ ! -f xz-$XZ_VERSION.tar.gz ]; then
+    wget https://tukaani.org/xz/xz-$XZ_VERSION.tar.gz -O xz-$XZ_VERSION.tar.gz
+fi
+if [ ! -f zlib-$ZLIB_VERSION.tar.gz ]; then
+    wget https://zlib.net/zlib-$ZLIB_VERSION.tar.gz -O zlib-$ZLIB_VERSION.tar.gz
+fi
+if [ ! -f zstd-$ZSTD_VERSION.tar.gz ]; then
+    wget https://github.com/facebook/zstd/releases/download/v$ZSTD_VERSION/zstd-$ZSTD_VERSION.tar.gz -O zstd-$ZSTD_VERSION.tar.gz
+fi
+if [ ! -f wangle-$FBLIBS_VERSION.tar.gz ]; then
+    wget https://github.com/facebook/wangle/releases/download/v$FBLIBS_VERSION/wangle-v$FBLIBS_VERSION.tar.gz -O wangle-$FBLIBS_VERSION.tar.gz
+fi
+
+# verify boost
+echo "$BOOST_SHA256 boost_$BOOST_VERSION_UNDERSCORES.tar.gz" | sha256sum -c
+# verify bzip2
+echo "$BZIP2_SHA256 bzip2-$BZIP2_VERSION.tar.gz" | sha256sum -c
+# verify double-conversion
+echo "$DOUBLE_CONVERSION_SHA256 double-conversion-$DOUBLE_CONVERSION_VERSION.tar.gz" | sha256sum -c
+# verify fizz
+echo "$FIZZ_SHA256 fizz-$FBLIBS_VERSION.tar.gz" | sha256sum -c
+# verify flex
+if [ ! -f flex-$FLEX_VERSION.tar.gz.sig ]; then
+    wget https://github.com/westes/flex/releases/download/v$FLEX_VERSION/flex-$FLEX_VERSION.tar.gz.sig
+fi
+if false; then
+    $GPG --keyserver $KEYSERVER --recv-keys 0xE4B29C8D64885307
+    $GPG --verify flex-$FLEX_VERSION.tar.gz.sig flex-$FLEX_VERSION.tar.gz
+fi
+# verify fmt
+echo "$FMT_SHA256 fmt-$FMT_VERSION.tar.gz" | sha256sum -c
+# verify spdlog
+echo "$SPDLOG_SHA256 spdlog-$SPDLOG_VERSION.tar.gz" | sha256sum -c
+# verify folly
+# echo "$FOLLY_SHA256 folly-$FBLIBS_VERSION.tar.gz" | sha256sum -c
+# verify glog
+echo "$GLOG_SHA256  glog-$GLOG_VERSION.tar.gz" | sha256sum -c
+# verify libaio
+if [ ! -f libaio-CHECKSUMS ]; then
+    wget https://releases.pagure.org/libaio/CHECKSUMS -O libaio-CHECKSUMS
+fi
+cat libaio-CHECKSUMS | grep "SHA256 (libaio-$LIBAIO_VERSION.tar.gz)" | sha256sum -c
+# verify libevent
+if [ ! -f libevent-$LIBEVENT_VERSION.tar.gz.asc ]; then
+    wget https://github.com/libevent/libevent/releases/download/release-$LIBEVENT_VERSION/libevent-$LIBEVENT_VERSION.tar.gz.asc
+fi
+if false; then
+    $GPG --keyserver $KEYSERVER --recv-keys 0x9E3AC83A27974B84D1B3401DB86086848EF8686D
+    $GPG --verify libevent-$LIBEVENT_VERSION.tar.gz.asc libevent-$LIBEVENT_VERSION.tar.gz
+fi
+# verify libsodium
+if [ ! -f libsodium-$LIBSODIUM_VERSION.tar.gz.sig ]; then
+    curl https://download.libsodium.org/libsodium/releases/libsodium-$LIBSODIUM_VERSION.tar.gz.sig -o libsodium-$LIBSODIUM_VERSION.tar.gz.sig
+fi
+if false; then
+    $GPG --keyserver $KEYSERVER --recv-keys 0x0C7983A8FD9A104C623172CB62F25B592B6F76DA
+    $GPG --verify libsodium-$LIBSODIUM_VERSION.tar.gz.sig libsodium-$LIBSODIUM_VERSION.tar.gz
+fi
+# verify libunwind
+if [ ! -f libunwind-$LIBUNWIND_VERSION.tar.gz.sig ]; then
+    wget https://github.com/libunwind/libunwind/releases/download/v$LIBUNWIND_VERSION/libunwind-$LIBUNWIND_VERSION.tar.gz.sig
+fi
+if false; then
+    $GPG --keyserver $KEYSERVER --recv-keys 0x75D2CFC56CC2E935A4143297015A268A17D55FA4
+    $GPG --verify libunwind-$LIBUNWIND_VERSION.tar.gz.sig libunwind-$LIBUNWIND_VERSION.tar.gz
+fi
+# verify lz4
+echo "$LZ4_SHA256  lz4-$LZ4_VERSION.tar.gz" | sha256sum -c
+# verify proxygen
+echo "$PROXYGEN_SHA256 proxygen-$FBLIBS_VERSION.tar.gz" | sha256sum -c
+# verify snappy
+echo "$SNAPPY_SHA256  snappy-$SNAPPY_VERSION.tar.gz" | sha256sum -c
+# verify xz
+if [ ! -f xz-$XZ_VERSION.tar.gz.sig ]; then
+    wget https://tukaani.org/xz/xz-$XZ_VERSION.tar.gz.sig
+fi
+if false; then
+    $GPG --import ../xz_pgp.txt
+    $GPG --verify xz-$XZ_VERSION.tar.gz.sig xz-$XZ_VERSION.tar.gz
+fi
+# verify zlib
+if [ ! -f zlib-$ZLIB_VERSION.tar.gz.asc ]; then
+    wget https://zlib.net/zlib-$ZLIB_VERSION.tar.gz.asc
+fi
+if false; then
+    $GPG --keyserver $KEYSERVER --recv-keys 0x783FCD8E58BCAFBA
+    $GPG --verify zlib-$ZLIB_VERSION.tar.gz.asc zlib-$ZLIB_VERSION.tar.gz
+fi
+#verify zstd
+if [ ! -f zstd-$ZSTD_VERSION.tar.gz.sig ]; then
+    wget https://github.com/facebook/zstd/releases/download/v$ZSTD_VERSION/zstd-$ZSTD_VERSION.tar.gz.sig
+fi
+if false; then
+    $GPG --keyserver $KEYSERVER --recv-keys 0xEF8FE99528B52FFD
+    $GPG --verify zstd-$ZSTD_VERSION.tar.gz.sig zstd-$ZSTD_VERSION.tar.gz
+fi
+# verify wangle
+echo "$WANGLE_SHA256 wangle-$FBLIBS_VERSION.tar.gz" | sha256sum -c
+popd
+
+pushd build
+source $PREFIX/activate
+export CC=$PREFIX/bin/clang
+export CXX=$PREFIX/bin/clang++
+export CFLAGS="$CFLAGS -fPIC"
+if [ "$TOOLCHAIN_STDCXX" = "libstdc++" ]; then
+    export CXXFLAGS="$CXXFLAGS -fPIC"
+else
+    export CXXFLAGS="$CXXFLAGS -fPIC -stdlib=libc++"
+fi
+COMMON_CMAKE_FLAGS="-DCMAKE_INSTALL_PREFIX=$PREFIX
+                    -DCMAKE_PREFIX_PATH=$PREFIX
+                    -DCMAKE_BUILD_TYPE=Release
+                    -DCMAKE_C_COMPILER=$CC
+                    -DCMAKE_CXX_COMPILER=$CXX
+                    -DBUILD_SHARED_LIBS=OFF
+                    -DCMAKE_CXX_STANDARD=20
+                    -DBUILD_TESTING=OFF
+                    -DCMAKE_REQUIRED_INCLUDES=$PREFIX/include
+                    -DCMAKE_POSITION_INDEPENDENT_CODE=ON"
+COMMON_CONFIGURE_FLAGS="--enable-shared=no --prefix=$PREFIX"
+COMMON_MAKE_INSTALL_FLAGS="-j$CPUS BUILD_SHARED=no PREFIX=$PREFIX install"
+
+log_tool_name "bzip2 $BZIP2_VERSION"
+if [ ! -f $PREFIX/include/bzlib.h ]; then
+    if [ -d bzip2-$BZIP2_VERSION ]; then
+        rm -rf bzip2-$BZIP2_VERSION
+    fi
+    tar -xzf ../archives/bzip2-$BZIP2_VERSION.tar.gz
+    pushd bzip2-$BZIP2_VERSION
+    make $COMMON_MAKE_INSTALL_FLAGS
+    popd
+fi
+
+log_tool_name "fmt $FMT_VERSION"
+if [ ! -d $PREFIX/include/fmt ]; then
+    if [ -d fmt-$FMT_VERSION ]; then
+        rm -rf fmt-$FMT_VERSION
+    fi
+    tar -xzf ../archives/fmt-$FMT_VERSION.tar.gz
+    pushd fmt-$FMT_VERSION
+    mkdir build && pushd build
+    cmake .. $COMMON_CMAKE_FLAGS -DFMT_TEST=OFF
+    make -j$CPUS install
+    popd && popd
+fi
+
+log_tool_name "spdlog $SPDLOG_VERSION"
+if [ ! -d $PREFIX/include/spdlog ]; then
+    if [ -d spdlog-$SPDLOG_VERSION ]; then
+        rm -rf spdlog-$SPDLOG_VERSION
+    fi
+    tar -xzf ../archives/spdlog-$SPDLOG_VERSION.tar.gz
+    pushd spdlog-$SPDLOG_VERSION
+    mkdir build && pushd build
+    cmake .. $COMMON_CMAKE_FLAGS
+    make -j$CPUS install
+    popd && popd
+fi
+
+log_tool_name "lz4 $LZ4_VERSION"
+if [ ! -f $PREFIX/include/lz4.h ]; then
+    if [ -d lz4-$LZ4_VERSION ]; then
+        rm -rf lz4-$LZ4_VERSION
+    fi
+    tar -xzf ../archives/lz4-$LZ4_VERSION.tar.gz
+    pushd lz4-$LZ4_VERSION
+    make $COMMON_MAKE_INSTALL_FLAGS
+    popd
+fi
+
+log_tool_name "xz $XZ_VERSION"
+if [ ! -f $PREFIX/include/lzma.h ]; then
+    if [ -d xz-$XZ_VERSION ]; then
+        rm -rf xz-$XZ_VERSION
+    fi
+    tar -xzf ../archives/xz-$XZ_VERSION.tar.gz
+    pushd xz-$XZ_VERSION
+    ./configure $COMMON_CONFIGURE_FLAGS
+    make -j$CPUS install
+    popd
+fi
+
+log_tool_name "zlib $ZLIB_VERSION"
+if [ ! -f $PREFIX/include/zlib.h ]; then
+    if [ -d zlib-$ZLIB_VERSION ]; then
+        rm -rf zlib-$ZLIB_VERSION
+    fi
+    tar -xzf ../archives/zlib-$ZLIB_VERSION.tar.gz
+    pushd zlib-$ZLIB_VERSION
+    mkdir build && pushd build
+    cmake .. $COMMON_CMAKE_FLAGS
+    make -j$CPUS install
+    rm $PREFIX/lib/libz.so*
+    popd && popd
+fi
+
+log_tool_name "zstd $ZSTD_VERSION"
+if [ ! -f $PREFIX/include/zstd.h ]; then
+    if [ -d zstd-$ZSTD_VERSION ]; then
+        rm -rf zstd-$ZSTD_VERSION
+    fi
+    tar -xzf ../archives/zstd-$ZSTD_VERSION.tar.gz
+    pushd zstd-$ZSTD_VERSION
+    # build is used by facebook builder
+    mkdir _build
+    pushd _build
+    cmake ../build/cmake $COMMON_CMAKE_FLAGS -DZSTD_BUILD_SHARED=OFF
+    make -j$CPUS install
+    popd && popd
+fi
+
+log_tool_name "jmalloc $JEMALLOC_VERSION"
+if [ ! -d $PREFIX/include/jemalloc ]; then
+    if [ -d jemalloc ]; then
+        rm -rf jemalloc
+    fi
+    git clone https://github.com/jemalloc/jemalloc.git jemalloc
+    pushd jemalloc
+    git checkout $JEMALLOC_VERSION
+    ./autogen.sh
+    MALLOC_CONF="retain:false,percpu_arena:percpu,oversize_threshold:0,muzzy_decay_ms:5000,dirty_decay_ms:5000" \
+    ./configure \
+         --disable-cxx \
+         $COMMON_CONFIGURE_FLAGS \
+         --with-malloc-conf="retain:false,percpu_arena:percpu,oversize_threshold:0,muzzy_decay_ms:5000,dirty_decay_ms:5000"
+    make -j$CPUS install
+    # NOTE: Old jmalloc config (toolchain-v4 and before).
+    # ./autogen.sh --with-malloc-conf="percpu_arena:percpu,oversize_threshold:0,muzzy_decay_ms:5000,dirty_decay_ms:5000"
+    # env \
+    #     EXTRA_FLAGS="-DJEMALLOC_NO_PRIVATE_NAMESPACE -D_GNU_SOURCE -Wno-redundant-decls" \
+    #     ./configure $COMMON_CONFIGURE_FLAGS --disable-cxx
+    # make -j$CPUS install
+    popd
+fi
+
+log_tool_name "BOOST $BOOST_VERSION"
+if [ ! -d $PREFIX/include/boost ]; then
+    if [ -d boost_$BOOST_VERSION_UNDERSCORES ]; then
+        rm -rf boost_$BOOST_VERSION_UNDERSCORES
+    fi
+    tar -xzf ../archives/boost_$BOOST_VERSION_UNDERSCORES.tar.gz
+    pushd boost_$BOOST_VERSION_UNDERSCORES
+    ./bootstrap.sh --prefix=$PREFIX --with-toolset=clang --with-python=python3  --without-icu
+    if [ "$TOOLCHAIN_STDCXX" = "libstdc++" ]; then
+        ./b2 toolset=clang -j$CPUS install variant=release link=static cxxstd=20 --disable-icu \
+            -sZLIB_SOURCE="$PREFIX" -sZLIB_INCLUDE="$PREFIX/include" -sZLIB_LIBPATH="$PREFIX/lib" \
+            -sBZIP2_SOURCE="$PREFIX" -sBZIP2_INCLUDE="$PREFIX/include" -sBZIP2_LIBPATH="$PREFIX/lib" \
+            -sLZMA_SOURCE="$PREFIX" -sLZMA_INCLUDE="$PREFIX/include" -sLZMA_LIBPATH="$PREFIX/lib" \
+            -sZSTD_SOURCE="$PREFIX" -sZSTD_INCLUDE="$PREFIX/include" -sZSTD_LIBPATH="$PREFIX/lib"
+    else
+        ./b2 toolset=clang -j$CPUS install variant=release link=static cxxstd=20 --disable-icu \
+            cxxflags="-stdlib=libc++" linkflags="-stdlib=libc++" \
+            -sZLIB_SOURCE="$PREFIX" -sZLIB_INCLUDE="$PREFIX/include" -sZLIB_LIBPATH="$PREFIX/lib" \
+            -sBZIP2_SOURCE="$PREFIX" -sBZIP2_INCLUDE="$PREFIX/include" -sBZIP2_LIBPATH="$PREFIX/lib" \
+            -sLZMA_SOURCE="$PREFIX" -sLZMA_INCLUDE="$PREFIX/include" -sLZMA_LIBPATH="$PREFIX/lib" \
+            -sZSTD_SOURCE="$PREFIX" -sZSTD_INCLUDE="$PREFIX/include" -sZSTD_LIBPATH="$PREFIX/lib"
+    fi
+    popd
+fi
+
+log_tool_name "double-conversion $DOUBLE_CONVERSION_VERSION"
+if [ ! -d $PREFIX/include/double-conversion ]; then
+    if [ -d double-conversion-$DOUBLE_CONVERSION_VERSION ]; then
+        rm -rf double-conversion-$DOUBLE_CONVERSION_VERSION
+    fi
+    tar -xzf ../archives/double-conversion-$DOUBLE_CONVERSION_VERSION.tar.gz
+    pushd double-conversion-$DOUBLE_CONVERSION_VERSION
+    # build is used by facebook builder
+    mkdir build
+    pushd build
+    cmake .. $COMMON_CMAKE_FLAGS
+    make -j$CPUS install
+    popd && popd
+fi
+
+log_tool_name "gflags (memgraph fork $GFLAGS_COMMIT_HASH)"
+if [ ! -d $PREFIX/include/gflags ]; then
+    if [ -d gflags ]; then
+        rm -rf gflags
+    fi
+
+    git clone https://github.com/memgraph/gflags.git gflags
+    pushd gflags
+    git checkout $GFLAGS_COMMIT_HASH
+    mkdir build
+    pushd build
+    cmake .. $COMMON_CMAKE_FLAGS \
+        -DREGISTER_INSTALL_PREFIX=OFF \
+        -DBUILD_gflags_nothreads_LIB=OFF \
+        -DGFLAGS_NO_FILENAMES=0
+    make -j$CPUS install
+    popd && popd
+fi
+
+log_tool_name "libunwind $LIBUNWIND_VERSION"
+if [ ! -f $PREFIX/include/libunwind.h ]; then
+    if [ -d libunwind-$LIBUNWIND_VERSION ]; then
+        rm -rf libunwind-$LIBUNWIND_VERSION
+    fi
+    tar -xzf ../archives/libunwind-$LIBUNWIND_VERSION.tar.gz
+    pushd libunwind-$LIBUNWIND_VERSION
+    ./configure $COMMON_CONFIGURE_FLAGS \
+        --disable-minidebuginfo # disable LZMA usage to not depend on libLZMA
+    make -j$CPUS install
+    popd
+fi
+
+log_tool_name "glog $GLOG_VERSION"
+if [ ! -d $PREFIX/include/glog ]; then
+    if [ -d glog-$GLOG_VERSION ]; then
+        rm -rf glog-$GLOG_VERSION
+    fi
+    tar -xzf ../archives/glog-$GLOG_VERSION.tar.gz
+    pushd glog-$GLOG_VERSION
+    mkdir build
+    pushd build
+    cmake .. $COMMON_CMAKE_FLAGS -DGFLAGS_NOTHREADS=OFF
+    make -j$CPUS install
+    popd && popd
+fi
+
+log_tool_name "libevent $LIBEVENT_VERSION"
+if [ ! -d $PREFIX/include/event2 ]; then
+    if [ -d libevent-$LIBEVENT_VERSION ]; then
+        rm -rf libevent-$LIBEVENT_VERSION
+    fi
+    tar -xzf ../archives/libevent-$LIBEVENT_VERSION.tar.gz
+    pushd libevent-$LIBEVENT_VERSION
+    mkdir build
+    pushd build
+    cmake .. $COMMON_CMAKE_FLAGS \
+        -DEVENT__DISABLE_BENCHMARK=ON \
+        -DEVENT__DISABLE_REGRESS=ON \
+        -DEVENT__DISABLE_SAMPLES=ON \
+        -DEVENT__DISABLE_TESTS=ON \
+        -DEVENT__LIBRARY_TYPE="STATIC"
+    make -j$CPUS install
+    popd && popd
+fi
+
+log_tool_name "snappy $SNAPPY_VERSION"
+if [ ! -f $PREFIX/include/snappy.h ]; then
+    if [ -d snappy-$SNAPPY_VERSION ]; then
+        rm -rf snappy-$SNAPPY_VERSION
+    fi
+    tar -xzf ../archives/snappy-$SNAPPY_VERSION.tar.gz
+    pushd snappy-$SNAPPY_VERSION
+    patch -p1 <  $DIR/snappy.patch
+    mkdir build
+    pushd build
+    cmake .. $COMMON_CMAKE_FLAGS \
+        -DSNAPPY_BUILD_TESTS=OFF \
+        -DSNAPPY_BUILD_BENCHMARKS=OFF \
+        -DSNAPPY_FUZZING_BUILD=OFF
+    make -j$CPUS install
+    popd && popd
+fi
+
+log_tool_name "libsodium $LIBSODIUM_VERSION"
+if [ ! -f $PREFIX/include/sodium.h ]; then
+    if [ -d libsodium-$LIBSODIUM_VERSION ]; then
+        rm -rf libsodium-$LIBSODIUM_VERSION
+    fi
+    tar -xzf ../archives/libsodium-$LIBSODIUM_VERSION.tar.gz
+    pushd libsodium-$LIBSODIUM_VERSION
+    ./configure $COMMON_CONFIGURE_FLAGS
+    make -j$CPUS install
+    popd
+fi
+
+log_tool_name "libaio $LIBAIO_VERSION"
+if [ ! -f $PREFIX/include/libaio.h ]; then
+    if [ -d libaio-$LIBAIO_VERSION ]; then
+        rm -rf libaio-$LIBAIO_VERSION
+    fi
+    tar -xzf ../archives/libaio-$LIBAIO_VERSION.tar.gz
+    pushd libaio-$LIBAIO_VERSION
+    make prefix=$PREFIX ENABLE_SHARED=0 -j$CPUS install
+    popd
+fi
+
+# NOTE: Skip FBLIBS -> only used on project-pineapples
+#   * older versions don't compile on the latest GCC
+#   * newer versions don't work with OpenSSL 1.0 which is critical for CentOS7
+if false; then
+  log_tool_name "folly $FBLIBS_VERSION"
+  if [ ! -d $PREFIX/include/folly ]; then
+      if [ -d folly-$FBLIBS_VERSION ]; then
+          rm -rf folly-$FBLIBS_VERSION
+      fi
+      cp -r ../archives/folly-$FBLIBS_VERSION ./folly-$FBLIBS_VERSION
+      pushd folly-$FBLIBS_VERSION
+      git apply $DIR/folly-$FBLIBS_VERSION.patch
+      # build is used by facebook builder
+      mkdir _build
+      pushd _build
+      cmake .. $COMMON_CMAKE_FLAGS \
+          -DBOOST_LINK_STATIC=ON \
+          -DBUILD_TESTS=OFF \
+          -DGFLAGS_NOTHREADS=OFF \
+          -DCXX_STD="c++20"
+      make -j$CPUS install
+      popd && popd
+  fi
+
+  log_tool_name "fizz $FBLIBS_VERSION"
+  if [ ! -d $PREFIX/include/fizz ]; then
+      if [ -d fizz-$FBLIBS_VERSION ]; then
+          rm -rf fizz-$FBLIBS_VERSION
+      fi
+      mkdir fizz-$FBLIBS_VERSION
+      tar -xzf ../archives/fizz-$FBLIBS_VERSION.tar.gz -C fizz-$FBLIBS_VERSION
+      pushd fizz-$FBLIBS_VERSION
+      # build is used by facebook builder
+      mkdir _build
+      pushd _build
+      cmake ../fizz $COMMON_CMAKE_FLAGS \
+          -DBUILD_TESTS=OFF \
+          -DBUILD_EXAMPLES=OFF \
+          -DGFLAGS_NOTHREADS=OFF
+      make -j$CPUS install
+      popd && popd
+  fi
+
+  log_tool_name "wangle FBLIBS_VERSION"
+  if [ ! -d $PREFIX/include/wangle ]; then
+      if [ -d wangle-$FBLIBS_VERSION ]; then
+          rm -rf wangle-$FBLIBS_VERSION
+      fi
+      mkdir wangle-$FBLIBS_VERSION
+      tar -xzf ../archives/wangle-$FBLIBS_VERSION.tar.gz -C wangle-$FBLIBS_VERSION
+      pushd wangle-$FBLIBS_VERSION
+      # build is used by facebook builder
+      mkdir _build
+      pushd _build
+      cmake ../wangle $COMMON_CMAKE_FLAGS \
+          -DBUILD_TESTS=OFF \
+          -DBUILD_EXAMPLES=OFF \
+          -DGFLAGS_NOTHREADS=OFF
+      make -j$CPUS install
+      popd && popd
+  fi
+
+  log_tool_name "proxygen $FBLIBS_VERSION"
+  if [ ! -d $PREFIX/include/proxygen ]; then
+      if [ -d proxygen-$FBLIBS_VERSION ]; then
+          rm -rf proxygen-$FBLIBS_VERSION
+      fi
+      mkdir proxygen-$FBLIBS_VERSION
+      tar -xzf ../archives/proxygen-$FBLIBS_VERSION.tar.gz -C proxygen-$FBLIBS_VERSION
+      pushd proxygen-$FBLIBS_VERSION
+      # build is used by facebook builder
+      mkdir _build
+      pushd _build
+      cmake .. $COMMON_CMAKE_FLAGS \
+          -DBUILD_TESTS=OFF \
+          -DBUILD_SAMPLES=OFF \
+          -DGFLAGS_NOTHREADS=OFF \
+          -DBUILD_QUIC=OFF
+      make -j$CPUS install
+      popd && popd
+  fi
+
+  log_tool_name "fbthrift $FBLIBS_VERSION"
+  if [ ! -d $PREFIX/include/thrift ]; then
+      if [ -d fbthrift-$FBLIBS_VERSION ]; then
+          rm -rf fbthrift-$FBLIBS_VERSION
+      fi
+      git clone --depth 1 --branch v$FBLIBS_VERSION https://github.com/facebook/fbthrift.git fbthrift-$FBLIBS_VERSION
+      pushd fbthrift-$FBLIBS_VERSION
+      # build is used by facebook builder
+      mkdir _build
+      pushd _build
+      if [ "$TOOLCHAIN_STDCXX" = "libstdc++" ]; then
+          CMAKE_CXX_FLAGS="-fsized-deallocation"
+      else
+          CMAKE_CXX_FLAGS="-fsized-deallocation -stdlib=libc++"
+      fi
+      cmake .. $COMMON_CMAKE_FLAGS \
+          -Denable_tests=OFF \
+          -DGFLAGS_NOTHREADS=OFF \
+          -DCMAKE_CXX_FLAGS="$CMAKE_CXX_FLAGS"
+      make -j$CPUS install
+      popd
+  fi
+fi
+
+log_tool_name "flex $FLEX_VERSION"
+if [ ! -f $PREFIX/include/FlexLexer.h ]; then
+    if [ -d flex-$FLEX_VERSION ]; then
+        rm -rf flex-$FLEX_VERSION
+    fi
+    tar -xzf ../archives/flex-$FLEX_VERSION.tar.gz
+    pushd flex-$FLEX_VERSION
+    ./configure $COMMON_CONFIGURE_FLAGS
+    make -j$CPUS install
+    popd
+fi
+
+popd
+# NOTE: It's important/clean (e.g., easier upload to S3) to have a separated
+# folder to the output archive.
+mkdir -p output
+pushd output
+# Create the toolchain archive.
+if [ ! -f $NAME-binaries-$DISTRO_FULL_NAME.tar.gz ]; then
+    tar --owner=root --group=root -cpvzf $NAME-binaries-$DISTRO_FULL_NAME.tar.gz -C /opt $NAME
+else
+  echo "NOTE: Skipping archiving because the file already exists"
+fi
+
+# output final instructions
+echo -e "\n\n"
+echo "All tools have been built. They are installed in '$PREFIX'."
+echo "In order to distribute the tools to someone else, an archive with the toolchain was created in the 'build' directory."
+echo "If you want to install the packed tools you should execute the following command:"
+echo
+echo "    tar -xvzf output/$NAME-binaries.tar.gz -C /opt"
+echo
+echo "Because the tools were built on this machine, you should probably change the permissions of the installation directory using:"
+echo
+echo "    OPTIONAL: chown -R root:root $PREFIX"
+echo
+echo "In order to use all of the newly compiled tools you should use the prepared activation script:"
+echo
+echo "    source $PREFIX/activate"
+echo
+echo "Or, for more advanced uses, you can add the following lines to your script:"
+echo
+echo "    export PATH=$PREFIX/bin:\$PATH"
+echo "    export LD_LIBRARY_PATH=$PREFIX/lib:$PREFIX/lib64"
+echo
+echo "Enjoy!"
diff --git a/environment/toolchain/v5/clean.sh b/environment/toolchain/v5/clean.sh
new file mode 100755
index 000000000..15394aed2
--- /dev/null
+++ b/environment/toolchain/v5/clean.sh
@@ -0,0 +1,42 @@
+#!/bin/bash -ex
+DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
+PREFIX=/opt/toolchain-v5
+
+# NOTE: Often times when versions in the build script are changes, something
+# doesn't work. To avoid rebuild of the whole toolchain but rebuild specific
+# lib from 0, just comment specific line under this cript and run it. Don't
+# forget to comment back to avoid unnecessary deletes next time your run this
+# cript.
+
+# rm -rf "$DIR/build"
+# rm -rf "$DIR/output"
+
+# rm -rf "$PREFIX/bin/gcc"
+# rm -rf "$PREFIX/bin/ld.gold"
+# rm -rf "$PREFIX/bin/gdb"
+# rm -rf "$PREFIX/bin/cmake"
+# rm -rf "$PREFIX/bin/clang"
+# rm -rf "$PREFIX/include/bzlib.h"
+# rm -rf "$PREFIX/include/fmt"
+# rm -rf "$PREFIX/include/lz4.h"
+# rm -rf "$PREFIX/include/lzma.h"
+# rm -rf "$PREFIX/include/zlib.h"
+# rm -rf "$PREFIX/include/zstd.h"
+# rm -rf "$PREFIX/include/jemalloc"
+# rm -rf "$PREFIX/include/boost"
+# rm -rf "$PREFIX/include/double-conversion"
+# rm -rf "$PREFIX/include/gflags"
+# rm -rf "$PREFIX/include/libunwind.h"
+# rm -rf "$PREFIX/include/glog"
+# rm -rf "$PREFIX/include/event2"
+# rm -rf "$PREFIX/include/sodium.h"
+# rm -rf "$PREFIX/include/libaio.h"
+# rm -rf "$PREFIX/include/FlexLexer.h"
+# rm -rf "$PREFIX/include/snappy.h"
+# rm -rf "$PREFIX/include/fizz"
+# rm -rf "$PREFIX/include/folly"
+# rm -rf "$PREFIX/include/proxygen"
+# rm -rf "$PREFIX/include/wangle"
+# rm -rf "$PREFIX/include/thrift"
+
+# rm -rf "$PREFIX"
diff --git a/environment/toolchain/v5/folly-2022.01.31.00.patch b/environment/toolchain/v5/folly-2022.01.31.00.patch
new file mode 100644
index 000000000..481412502
--- /dev/null
+++ b/environment/toolchain/v5/folly-2022.01.31.00.patch
@@ -0,0 +1,41 @@
+diff -ur a/folly/CMakeLists.txt b/folly/CMakeLists.txt
+--- a/folly/CMakeLists.txt	2021-12-12 23:10:42.000000000 +0100
++++ b/folly/CMakeLists.txt	2022-02-03 15:19:41.349693134 +0100
+@@ -28,7 +28,6 @@
+ )
+
+ add_subdirectory(experimental/exception_tracer)
+-add_subdirectory(logging/example)
+
+ if (PYTHON_EXTENSIONS)
+   # Create tree of symbolic links in structure required for successful
+diff -ur a/folly/experimental/exception_tracer/ExceptionTracerLib.cpp b/folly/experimental/exception_tracer/ExceptionTracerLib.cpp
+--- a/folly/experimental/exception_tracer/ExceptionTracerLib.cpp	2021-12-12 23:10:42.000000000 +0100
++++ b/folly/experimental/exception_tracer/ExceptionTracerLib.cpp	2022-02-03 15:19:11.003368891 +0100
+@@ -96,6 +96,7 @@
+ #define __builtin_unreachable()
+ #endif
+
++#if 0
+ namespace __cxxabiv1 {
+
+ void __cxa_throw(
+@@ -154,5 +155,5 @@
+ }
+
+ } // namespace std
+-
++#endif
+ #endif // defined(__GLIBCXX__)
+diff -ur a/folly/Portability.h b/folly/Portability.h
+--- a/folly/Portability.h	2021-12-12 23:10:42.000000000 +0100
++++ b/folly/Portability.h	2022-02-03 15:19:11.003368891 +0100
+@@ -566,7 +566,7 @@
+ #define FOLLY_HAS_COROUTINES 0
+ #elif (__cpp_coroutines >= 201703L || __cpp_impl_coroutine >= 201902L) && \
+     (__has_include(<coroutine>) || __has_include(<experimental/coroutine>))
+-#define FOLLY_HAS_COROUTINES 1
++#define FOLLY_HAS_COROUTINES 0
+ // This is mainly to workaround bugs triggered by LTO, when stack allocated
+ // variables in await_suspend end up on a coroutine frame.
+ #define FOLLY_CORO_AWAIT_SUSPEND_NONTRIVIAL_ATTRIBUTES FOLLY_NOINLINE
diff --git a/environment/toolchain/v5/folly-2023.09.25.00.patch b/environment/toolchain/v5/folly-2023.09.25.00.patch
new file mode 100644
index 000000000..0c06cb329
--- /dev/null
+++ b/environment/toolchain/v5/folly-2023.09.25.00.patch
@@ -0,0 +1,26 @@
+diff --git a/folly/CMakeLists.txt b/folly/CMakeLists.txt
+index e0e16df..471131e 100644
+--- a/folly/CMakeLists.txt
++++ b/folly/CMakeLists.txt
+@@ -28,7 +28,7 @@ install(
+ )
+ 
+ add_subdirectory(experimental/exception_tracer)
+-add_subdirectory(logging/example)
++# add_subdirectory(logging/example)
+ 
+ if (PYTHON_EXTENSIONS)
+   # Create tree of symbolic links in structure required for successful
+diff --git a/folly/Portability.h b/folly/Portability.h
+index 365ef1b..42d24b8 100644
+--- a/folly/Portability.h
++++ b/folly/Portability.h
+@@ -560,7 +560,7 @@ constexpr auto kCpplibVer = 0;
+     (defined(__cpp_coroutines) && __cpp_coroutines >= 201703L) ||          \
+     (defined(__cpp_impl_coroutine) && __cpp_impl_coroutine >= 201902L)) && \
+     (__has_include(<coroutine>) || __has_include(<experimental/coroutine>))
+-#define FOLLY_HAS_COROUTINES 1
++#define FOLLY_HAS_COROUTINES 0
+ // This is mainly to workaround bugs triggered by LTO, when stack allocated
+ // variables in await_suspend end up on a coroutine frame.
+ #define FOLLY_CORO_AWAIT_SUSPEND_NONTRIVIAL_ATTRIBUTES FOLLY_NOINLINE
diff --git a/environment/toolchain/v5/snappy.patch b/environment/toolchain/v5/snappy.patch
new file mode 100644
index 000000000..4016bfd89
--- /dev/null
+++ b/environment/toolchain/v5/snappy.patch
@@ -0,0 +1,29 @@
+diff -ur a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2021-05-05 00:53:34.000000000 +0200
++++ b/CMakeLists.txt	2022-01-27 17:18:34.758302398 +0100
+@@ -52,9 +52,9 @@
+   set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /EHs-c-")
+   add_definitions(-D_HAS_EXCEPTIONS=0)
+
+-  # Disable RTTI.
+-  string(REGEX REPLACE "/GR" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
+-  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /GR-")
++  # # Disable RTTI.
++  # string(REGEX REPLACE "/GR" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
++  # set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /GR-")
+ else(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
+   # Use -Wall for clang and gcc.
+   if(NOT CMAKE_CXX_FLAGS MATCHES "-Wall")
+@@ -77,9 +77,9 @@
+   string(REGEX REPLACE "-fexceptions" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
+   set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-exceptions")
+
+-  # Disable RTTI.
+-  string(REGEX REPLACE "-frtti" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
+-  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-rtti")
++  # # Disable RTTI.
++  # string(REGEX REPLACE "-frtti" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
++  # set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-rtti")
+ endif(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
+
+ # BUILD_SHARED_LIBS is a standard CMake variable, but we declare it here to make
diff --git a/environment/toolchain/v5/xz_pgp.txt b/environment/toolchain/v5/xz_pgp.txt
new file mode 100644
index 000000000..44e17c173
--- /dev/null
+++ b/environment/toolchain/v5/xz_pgp.txt
@@ -0,0 +1,75 @@
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+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
+MlVin9BQPTpdA+PpRiJvKJgVDeAFOg==
+=asTC
+-----END PGP PUBLIC KEY BLOCK-----
diff --git a/src/license/license_sender.cpp b/src/license/license_sender.cpp
index ac20c23a2..ac93565e8 100644
--- a/src/license/license_sender.cpp
+++ b/src/license/license_sender.cpp
@@ -1,4 +1,4 @@
-// Copyright 2022 Memgraph Ltd.
+// Copyright 2023 Memgraph Ltd.
 //
 // Use of this software is governed by the Business Source License
 // included in the file licenses/BSL.txt; by using this file, you agree to be bound by the terms of the Business Source
diff --git a/src/license/license_sender.hpp b/src/license/license_sender.hpp
index 0adbd147c..6c936846f 100644
--- a/src/license/license_sender.hpp
+++ b/src/license/license_sender.hpp
@@ -1,4 +1,4 @@
-// Copyright 2022 Memgraph Ltd.
+// Copyright 2023 Memgraph Ltd.
 //
 // Use of this software is governed by the Business Source License
 // included in the file licenses/BSL.txt; by using this file, you agree to be bound by the terms of the Business Source
diff --git a/src/query/plan/read_write_type_checker.hpp b/src/query/plan/read_write_type_checker.hpp
index 34222c52c..87a9f81b2 100644
--- a/src/query/plan/read_write_type_checker.hpp
+++ b/src/query/plan/read_write_type_checker.hpp
@@ -1,4 +1,4 @@
-// Copyright 2022 Memgraph Ltd.
+// Copyright 2023 Memgraph Ltd.
 //
 // Use of this software is governed by the Business Source License
 // included in the file licenses/BSL.txt; by using this file, you agree to be bound by the terms of the Business Source
diff --git a/tests/integration/env_variable_check/tester.cpp b/tests/integration/env_variable_check/tester.cpp
index 1d9aedc5c..df7dfe757 100644
--- a/tests/integration/env_variable_check/tester.cpp
+++ b/tests/integration/env_variable_check/tester.cpp
@@ -1,4 +1,4 @@
-// Copyright 2022 Memgraph Ltd.
+// Copyright 2023 Memgraph Ltd.
 //
 // Use of this software is governed by the Business Source License
 // included in the file licenses/BSL.txt; by using this file, you agree to be bound by the terms of the Business Source
diff --git a/tests/integration/flag_check/flag_check.cpp b/tests/integration/flag_check/flag_check.cpp
index cf44333f3..3b266b9c9 100644
--- a/tests/integration/flag_check/flag_check.cpp
+++ b/tests/integration/flag_check/flag_check.cpp
@@ -1,4 +1,4 @@
-// Copyright 2022 Memgraph Ltd.
+// Copyright 2023 Memgraph Ltd.
 //
 // Use of this software is governed by the Business Source License
 // included in the file licenses/BSL.txt; by using this file, you agree to be bound by the terms of the Business Source
diff --git a/tests/integration/flag_check/tester.cpp b/tests/integration/flag_check/tester.cpp
index 1d9aedc5c..df7dfe757 100644
--- a/tests/integration/flag_check/tester.cpp
+++ b/tests/integration/flag_check/tester.cpp
@@ -1,4 +1,4 @@
-// Copyright 2022 Memgraph Ltd.
+// Copyright 2023 Memgraph Ltd.
 //
 // Use of this software is governed by the Business Source License
 // included in the file licenses/BSL.txt; by using this file, you agree to be bound by the terms of the Business Source
diff --git a/tests/integration/license_info/client.cpp b/tests/integration/license_info/client.cpp
index 2f0f00364..9b6977a5a 100644
--- a/tests/integration/license_info/client.cpp
+++ b/tests/integration/license_info/client.cpp
@@ -1,4 +1,4 @@
-// Copyright 2022 Memgraph Ltd.
+// Copyright 2023 Memgraph Ltd.
 //
 // Use of this software is governed by the Business Source License
 // included in the file licenses/BSL.txt; by using this file, you agree to be bound by the terms of the Business Source
diff --git a/tests/unit/utils_memory.cpp b/tests/unit/utils_memory.cpp
index 983d09acb..5173a5f7b 100644
--- a/tests/unit/utils_memory.cpp
+++ b/tests/unit/utils_memory.cpp
@@ -1,4 +1,4 @@
-// Copyright 2022 Memgraph Ltd.
+// Copyright 2023 Memgraph Ltd.
 //
 // Use of this software is governed by the Business Source License
 // included in the file licenses/BSL.txt; by using this file, you agree to be bound by the terms of the Business Source