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