From b4b998df0801989b2c99c1d9b10d85beea3a4fcf Mon Sep 17 00:00:00 2001 From: Xavier Michelon Date: Sat, 8 Oct 2022 09:43:54 +0200 Subject: [PATCH] Other: macOS 11 support. Other: added option to force build arch on macOS. Other: got rid of linker warnings when building go with macOS 11 compatibility. --- Makefile | 7 ++++--- internal/frontend/bridge-gui/BridgeSetup.cmake | 7 +++++-- internal/frontend/bridge-gui/bridge-gui/build.sh | 13 ++++++++++--- .../vcpkg/triplets/arm64-osx-min-11-0.cmake | 8 ++++++++ .../vcpkg/triplets/x64-osx-min-11-0.cmake | 7 +++++++ .../frontend/bridge-gui/bridgepp/CMakeLists.txt | 2 +- 6 files changed, 35 insertions(+), 9 deletions(-) create mode 100644 internal/frontend/bridge-gui/bridge-gui/vcpkg/triplets/arm64-osx-min-11-0.cmake create mode 100644 internal/frontend/bridge-gui/bridge-gui/vcpkg/triplets/x64-osx-min-11-0.cmake diff --git a/Makefile b/Makefile index ec902815..45bca3a1 100644 --- a/Makefile +++ b/Makefile @@ -21,12 +21,14 @@ SRC_SVG:=bridge.svg EXE_NAME:=proton-bridge REVISION:=$(shell git rev-parse --short=10 HEAD) BUILD_TIME:=$(shell date +%FT%T%z) +MACOS_MIN_VERSION=11.0 BUILD_FLAGS:=-tags='${BUILD_TAGS}' BUILD_FLAGS_LAUNCHER:=${BUILD_FLAGS} BUILD_FLAGS_GUI:=-tags='${BUILD_TAGS} build_qt' GO_LDFLAGS:=$(addprefix -X github.com/ProtonMail/proton-bridge/v2/internal/constants., Version=${APP_VERSION} Revision=${REVISION} BuildTime=${BUILD_TIME}) GO_LDFLAGS+=-X "github.com/ProtonMail/proton-bridge/v2/internal/constants.FullAppName=${APP_FULL_NAME}" + ifneq "${BUILD_LDFLAGS}" "" GO_LDFLAGS+=${BUILD_LDFLAGS} endif @@ -39,7 +41,6 @@ endif BUILD_FLAGS+=-ldflags '${GO_LDFLAGS}' BUILD_FLAGS_GUI+=-ldflags "${GO_LDFLAGS}" BUILD_FLAGS_LAUNCHER+=-ldflags '${GO_LDFLAGS_LAUNCHER}' - DEPLOY_DIR:=cmd/${TARGET_CMD}/deploy DIRNAME:=$(shell basename ${CURDIR}) @@ -84,8 +85,8 @@ go-build=go build $(1) -o $(2) $(3) go-build-finalize=${go-build} ifeq "${GOOS}-$(shell uname -m)" "darwin-arm64" go-build-finalize= \ - CGO_ENABLED=1 GOARCH=arm64 $(call go-build,$(1),$(2)_arm,$(3)) && \ - CGO_ENABLED=1 GOARCH=amd64 $(call go-build,$(1),$(2)_amd,$(3)) && \ + MACOSX_DEPLOYMENT_TARGET=${MACOS_MIN_VERSION} CGO_ENABLED=1 CGO_CFLAGS="-mmacosx-version-min=${MACOS_MIN_VERSION}" GOARCH=arm64 $(call go-build,$(1),$(2)_arm,$(3)) && \ + MACOSX_DEPLOYMENT_TARGET=${MACOS_MIN_VERSION} CGO_ENABLED=1 CGO_CFLAGS="-mmacosx-version-min=${MACOS_MIN_VERSION}" GOARCH=amd64 $(call go-build,$(1),$(2)_amd,$(3)) && \ lipo -create -output $(2) $(2)_arm $(2)_amd && rm -f $(2)_arm $(2)_amd endif diff --git a/internal/frontend/bridge-gui/BridgeSetup.cmake b/internal/frontend/bridge-gui/BridgeSetup.cmake index 31d5a98d..0ac865b7 100644 --- a/internal/frontend/bridge-gui/BridgeSetup.cmake +++ b/internal/frontend/bridge-gui/BridgeSetup.cmake @@ -19,6 +19,9 @@ include_guard() +set(CMAKE_OSX_DEPLOYMENT_TARGET 11.0) + + if (NOT DEFINED BRIDGE_REPO_ROOT) message(FATAL_ERROR "BRIDGE_REPO_ROOT is not defined.") endif() @@ -71,10 +74,10 @@ if (APPLE) if (CMAKE_OSX_ARCHITECTURES STREQUAL "arm64") message(STATUS "Building for Apple Silicon Mac computers") - set(VCPKG_TARGET_TRIPLET arm64-osx) + set(VCPKG_TARGET_TRIPLET arm64-osx-min-11-0) elseif (CMAKE_OSX_ARCHITECTURES STREQUAL "x86_64") message(STATUS "Building for Intel based Mac computers") - set(VCPKG_TARGET_TRIPLET x64-osx) + set(VCPKG_TARGET_TRIPLET x64-osx-min-11-0) else () message(FATAL_ERROR "Unknown value for CMAKE_OSX_ARCHITECTURE. Please use one of \"arm64\" and \"x86_64\". Multiple architectures are not supported.") endif () diff --git a/internal/frontend/bridge-gui/bridge-gui/build.sh b/internal/frontend/bridge-gui/bridge-gui/build.sh index 587469d6..1ea98ebc 100755 --- a/internal/frontend/bridge-gui/bridge-gui/build.sh +++ b/internal/frontend/bridge-gui/bridge-gui/build.sh @@ -54,6 +54,7 @@ BRIDGE_APP_FULL_NAME=${BRIDGE_APP_FULL_NAME:-"Proton Mail Bridge"} BRIDGE_VENDOR=${BRIDGE_VENDOR:-"Proton AG"} BUILD_CONFIG=${BRIDGE_GUI_BUILD_CONFIG:-Debug} BUILD_DIR=$(echo "./cmake-build-${BUILD_CONFIG}" | tr '[:upper:]' '[:lower:]') +VCPKG_OSX_DEPLOYMENT_TARGET=11.0 VCPKG_ROOT="${BRIDGE_REPO_ROOT}/extern/vcpkg" git submodule update --init --recursive ${VCPKG_ROOT} @@ -70,10 +71,10 @@ check_exit "Failed to bootstrap vcpkg." if [[ "$OSTYPE" == "darwin"* ]]; then if [[ "$(uname -m)" == "arm64" ]]; then - ${VCPKG_EXE} install grpc:arm64-osx --clean-after-build + ${VCPKG_EXE} install grpc:arm64-osx-min-11-0 --overlay-triplets=vcpkg/triplets --clean-after-build check_exit "Failed installing gRPC for macOS / Apple Silicon" fi - ${VCPKG_EXE} install grpc:x64-osx --clean-after-build + ${VCPKG_EXE} install grpc:x64-osx-min-11-0 --overlay-triplets=vcpkg/triplets --clean-after-build check_exit "Failed installing gRPC for macOS / Intel x64" elif [[ "$OSTYPE" == "linux"* ]]; then ${VCPKG_EXE} install grpc:x64-linux --clean-after-build @@ -85,11 +86,17 @@ fi ${VCPKG_EXE} upgrade --no-dry-run +if [[ "$OSTYPE" == "darwin"* ]]; then + BRIDGE_CMAKE_MACOS_OPTS="-DCMAKE_OSX_ARCHITECTURES=${BRIDGE_MACOS_ARCH:-$(uname -m)}" +else + BRIDGE_CMAKE_MACOS_OPTS="" +fi + cmake \ -DCMAKE_BUILD_TYPE="${BUILD_CONFIG}" \ -DBRIDGE_APP_FULL_NAME="${BRIDGE_APP_FULL_NAME}" \ -DBRIDGE_VENDOR="${BRIDGE_VENDOR}" \ - -DBRIDGE_APP_VERSION="${BRIDGE_APP_VERSION}" \ + -DBRIDGE_APP_VERSION="${BRIDGE_APP_VERSION}" "${BRIDGE_CMAKE_MACOS_OPTS}" \ -G Ninja \ -S . \ -B "${BUILD_DIR}" diff --git a/internal/frontend/bridge-gui/bridge-gui/vcpkg/triplets/arm64-osx-min-11-0.cmake b/internal/frontend/bridge-gui/bridge-gui/vcpkg/triplets/arm64-osx-min-11-0.cmake new file mode 100644 index 00000000..227f621a --- /dev/null +++ b/internal/frontend/bridge-gui/bridge-gui/vcpkg/triplets/arm64-osx-min-11-0.cmake @@ -0,0 +1,8 @@ +set(VCPKG_TARGET_ARCHITECTURE arm64) +set(VCPKG_CRT_LINKAGE dynamic) +set(VCPKG_LIBRARY_LINKAGE static) + +set(VCPKG_CMAKE_SYSTEM_NAME Darwin) +set(VCPKG_OSX_ARCHITECTURES arm64) +set(VCPKG_OSX_DEPLOYMENT_TARGET "11.0") + diff --git a/internal/frontend/bridge-gui/bridge-gui/vcpkg/triplets/x64-osx-min-11-0.cmake b/internal/frontend/bridge-gui/bridge-gui/vcpkg/triplets/x64-osx-min-11-0.cmake new file mode 100644 index 00000000..d60cb352 --- /dev/null +++ b/internal/frontend/bridge-gui/bridge-gui/vcpkg/triplets/x64-osx-min-11-0.cmake @@ -0,0 +1,7 @@ +set(VCPKG_TARGET_ARCHITECTURE x64) +set(VCPKG_CRT_LINKAGE dynamic) +set(VCPKG_LIBRARY_LINKAGE static) + +set(VCPKG_CMAKE_SYSTEM_NAME Darwin) +set(VCPKG_OSX_ARCHITECTURES x86_64) +set(VCPKG_OSX_DEPLOYMENT_TARGET "11.0") diff --git a/internal/frontend/bridge-gui/bridgepp/CMakeLists.txt b/internal/frontend/bridge-gui/bridgepp/CMakeLists.txt index 4bf30e0b..2fd3f608 100644 --- a/internal/frontend/bridge-gui/bridgepp/CMakeLists.txt +++ b/internal/frontend/bridge-gui/bridgepp/CMakeLists.txt @@ -59,7 +59,7 @@ message(STATUS "protoc found ${PROTOC_EXE}") message(STATUS "grpc_cpp_plugin ${grpc_cpp_plugin}") -find_program(GRPC_CPP_PLUGIN grpc_cpp_plugin) +find_program(GRPC_CPP_PLUGIN grpc_cpp_plugin HINTS "${VCPKG_ROOT}/installed/arm64-osx/tools/grpc" "${VCPKG_ROOT}/installed/x64-osx/tools/grpc") if (NOT GRPC_CPP_PLUGIN) message(FATAL_ERROR "grpc_cpp_plugin exe could not be found. Please add it to your path. it should be located in \${VCPKG_ROOT}/installed/arm64-osx/tools/grpc") else ()