diff --git a/.gitmodules b/.gitmodules
new file mode 100644
index 00000000..f7e31e93
--- /dev/null
+++ b/.gitmodules
@@ -0,0 +1,3 @@
+[submodule "submodules/vcpkg"]
+ path = extern/vcpkg
+ url = https://github.com/Microsoft/vcpkg.git
diff --git a/extern/vcpkg b/extern/vcpkg
new file mode 160000
index 00000000..f93ba152
--- /dev/null
+++ b/extern/vcpkg
@@ -0,0 +1 @@
+Subproject commit f93ba152d55e1d243160e690bc302ffe8638358e
diff --git a/internal/frontend/bridge-gui/CMakeLists.txt b/internal/frontend/bridge-gui/CMakeLists.txt
index f1c3ae3a..e07cc397 100644
--- a/internal/frontend/bridge-gui/CMakeLists.txt
+++ b/internal/frontend/bridge-gui/CMakeLists.txt
@@ -17,9 +17,15 @@
cmake_minimum_required(VERSION 3.22)
-#We rely on vcpkg for to get gRPC+Protobuf
-if (NOT DEFINED ENV{VCPKG_ROOT})
- message(FATAL_ERROR "vcpkg is required. Install vcpkg and define VCPKG_ROOT to point the the vcpkg installation folder. (e.g. ~/vcpkg/")
+# We rely on vcpkg for to get gRPC / Protobuf
+# run build.sh / build.ps1 to get gRPC / Protobuf and dependencies installed.
+
+set(VCPKG_ROOT "${CMAKE_CURRENT_SOURCE_DIR}/../../../extern/vcpkg")
+message(STATUS "VCPKG_ROOT is ${VCPKG_ROOT}")
+if (WIN32)
+ find_program(VCPKG_EXE "${VCPKG_ROOT}/vcpkg.exe")
+else()
+ find_program(VCPKG_EXE "${VCPKG_ROOT}/vcpkg")
endif()
@@ -42,9 +48,10 @@ if (APPLE)
endif()
if (WIN32)
+ message(STATUS "Building for Intel x64 Windows computers")
set(VCPKG_TARGET_TRIPLET x64-windows)
endif()
-set(CMAKE_TOOLCHAIN_FILE "$ENV{VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake" CACHE STRING "toolchain")
+set(CMAKE_TOOLCHAIN_FILE "${VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake" CACHE STRING "toolchain")
project(bridge-gui LANGUAGES CXX)
@@ -88,7 +95,7 @@ find_package(Qt6 COMPONENTS
Qml
QuickControls2
REQUIRED)
-message(STATUS "Using Qt ${Qt5_VERSION}")
+message(STATUS "Using Qt ${Qt6_VERSION}")
find_program(PROTOC_EXE protoc REQUIRED)
message(STATUS "protoc found ${PROTOC_EXE}")
diff --git a/internal/frontend/bridge-gui/GRPC/bridge.pb.h b/internal/frontend/bridge-gui/GRPC/bridge.pb.h
index 53b14275..16c8613e 100644
--- a/internal/frontend/bridge-gui/GRPC/bridge.pb.h
+++ b/internal/frontend/bridge-gui/GRPC/bridge.pb.h
@@ -13,7 +13,7 @@
#error incompatible with your Protocol Buffer headers. Please update
#error your headers.
#endif
-#if 3021002 < PROTOBUF_MIN_PROTOC_VERSION
+#if 3021003 < PROTOBUF_MIN_PROTOC_VERSION
#error This file was generated by an older version of protoc which is
#error incompatible with your Protocol Buffer headers. Please
#error regenerate this file with a newer version of protoc.
diff --git a/internal/frontend/bridge-gui/build.ps1 b/internal/frontend/bridge-gui/build.ps1
new file mode 100644
index 00000000..ca7214eb
--- /dev/null
+++ b/internal/frontend/bridge-gui/build.ps1
@@ -0,0 +1,35 @@
+# Copyright (c) 2022 Proton AG
+#
+# This file is part of Proton Mail Bridge.
+#
+# Proton Mail Bridge is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# Proton Mail Bridge is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with Proton Mail Bridge. If not, see .
+
+#!/bin/bash
+
+$ErrorActionPreference = "Stop"
+
+$cmakeExe = "C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\bin\cmake.exe" # Hardcoded for now.
+$bridgeVersion = ($env:BRIDGE_APP_VERSION ??= "2.2.1+") # TODO get the version number from a unified location.
+$buildConfig = ($env:BRIDGE_GUI_BUILD_CONFIG ??= "Debug")
+$buildDir=(Join-Path $PSScriptRoot "cmake-build-$buildConfig-visual-studio".ToLower())
+$vcpkgRoot = (Join-Path $PSScriptRoot "../../../extern/vcpkg" -Resolve)
+$vcpkgExe = (Join-Path $vcpkgRoot "vcpkg.exe")
+$vcpkgBootstrap = (Join-Path $vcpkgRoot "bootstrap-vcpkg.bat")
+
+git submodule update --init --recursive $vcpkgRoot
+. $vcpkgBootstrap -disableMetrics
+. $vcpkgExe install grpc:x64-windows
+. $vcpkgExe upgrade --no-dry-run
+. $cmakeExe -G "Visual Studio 17 2022" -DCMAKE_BUILD_TYPE="$buildConfig" -DBRIDGE_APP_VERSION="$bridgeVersion" -S . -B $buildDir
+. $cmakeExe --build $buildDir
diff --git a/internal/frontend/bridge-gui/build.sh b/internal/frontend/bridge-gui/build.sh
index adef0cec..f77b91b4 100755
--- a/internal/frontend/bridge-gui/build.sh
+++ b/internal/frontend/bridge-gui/build.sh
@@ -1,3 +1,4 @@
+#!/bin/bash
# Copyright (c) 2022 Proton AG
#
# This file is part of Proton Mail Bridge.
@@ -16,8 +17,48 @@
# along with Proton Mail Bridge. If not, see .
-#!/bin/bash
-BRIDGE_APP_VERSION=${BRIDGE_APP_VERSION:-2.2.1+git}
-BUILD_DIR="./cmake-build-debug"
-cmake -DCMAKE_BUILD_TYPE=Debug -DBRIDGE_APP_VERSION=${BRIDGE_APP_VERSION} -G Ninja -S . -B ${BUILD_DIR}
-ninja -C ${BUILD_DIR}
+BRIDGE_APP_VERSION=${BRIDGE_APP_VERSION:-2.2.1+git} # TODO get the version number from a unified location.
+BUILD_CONFIG=${BRIDGE_GUI_BUILD_CONFIG:-Debug}
+BUILD_DIR=$(echo "./cmake-build-${BUILD_CONFIG}" | tr '[:upper:]' '[:lower:]')
+VCPKG_ROOT="../../../extern/vcpkg"
+VCPKG_EXE="${VCPKG_ROOT}/vcpkg"
+VCPKG_BOOTSTRAP="${VCPKG_ROOT}/bootstrap-vcpkg.sh"
+
+check_exit() {
+ # shellcheck disable=SC2181
+ if [ $? -ne 0 ]; then
+ echo "Process failed: $1"
+ rm -r "$BUILD_DIR"
+ exit 1
+ fi
+}
+
+git submodule update --init --recursive ${VCPKG_ROOT}
+check_exit "Failed to initialize vcpkg as a submodule."
+
+${VCPKG_BOOTSTRAP} -disableMetrics
+check_exit "Failed to bootstrap vcpkg."
+
+if [[ "$OSTYPE" == "darwin"* ]]; then
+ if [[ "$(uname -m)" == "arm64" ]]; then
+ ${VCPKG_EXE} install grpc:arm64-osx
+ check_exit "Failed installing gRPC for macOS / Apple Silicon"
+ fi
+ ${VCPKG_EXE} install grpc:x64-osx
+ check_exit "Failed installing gRPC for macOS / Intel x64"
+elif [[ "$OSTYPE" == "linux"* ]]; then
+ ${VCPKG_EXE} install grpc:x64-linux
+ check_exit "Failed installing gRPC for Linux / Intel x64"
+
+else
+ echo "For Windows, use the build.ps1 Powershell script."
+ exit 1
+fi
+
+${VCPKG_EXE} upgrade --no-dry-run
+
+cmake -DCMAKE_BUILD_TYPE="${BUILD_CONFIG}" -DBRIDGE_APP_VERSION="${BRIDGE_APP_VERSION}" -G Ninja -S . -B "${BUILD_DIR}"
+check_exit "CMake failed"
+
+cmake --build "${BUILD_DIR}"
+check_exit "build failed"
\ No newline at end of file