mirror of
https://github.com/veracrypt/VeraCrypt.git
synced 2026-05-21 21:30:48 -05:00
5055382f08
Local macOS builds disable universal binaries. On Apple Silicon, that means the regular objects are built for arm64 only, but Volume.make still selected the macOS assembly bundle. Several of those assembly outputs are x86_64 only, which makes ranlib reject Volume.a because it contains mixed cputypes. Make local arm64 macOS builds use the existing arm64 crypto object path and have the macOS build wrapper export CPU_ARCH/COMPILE_ASM consistently for local builds.
153 lines
4.9 KiB
Bash
Executable File
153 lines
4.9 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
#
|
|
# Copyright (c) 2013-2025 AM Crypto
|
|
# Governed by the Apache License 2.0 the full text of which is contained
|
|
# in the file License.txt included in VeraCrypt binary and source
|
|
# code distribution packages.
|
|
#
|
|
|
|
# Exit immediately if a command exits with a non-zero status
|
|
set -e
|
|
|
|
# Absolute path this script is in
|
|
SCRIPTPATH=$(cd "$(dirname "$0")" && pwd)
|
|
# source directory which contains the Makefile
|
|
SOURCEPATH=$(cd "$(dirname "$SCRIPTPATH/../.")" && pwd)
|
|
# directory where the VeraCrypt project has been checked out
|
|
PARENTDIR=$(cd "$(dirname "$SCRIPTPATH/../../../.")" && pwd)
|
|
|
|
# Default wxWidgets version
|
|
DEFAULT_WX_VERSION="3.2.5"
|
|
WX_VERSION="$DEFAULT_WX_VERSION"
|
|
|
|
# Initialize flags
|
|
brew=false
|
|
package=false
|
|
fuset=false
|
|
local_build=false
|
|
|
|
# Function to display usage information
|
|
usage() {
|
|
echo "Usage: $0 [options]"
|
|
echo "Options:"
|
|
echo " -b Use Homebrew to build with precompiled packages"
|
|
echo " -p Create a package after building"
|
|
echo " -f Build with FUSE-T support"
|
|
echo " -l Use local wxWidgets and disable universal binaries"
|
|
echo " -v <version> Specify wxWidgets version (default: $DEFAULT_WX_VERSION)"
|
|
echo " -h Display this help message"
|
|
exit 1
|
|
}
|
|
|
|
# Parse command-line options
|
|
while getopts "bpflv:h" flag
|
|
do
|
|
case "${flag}" in
|
|
b) brew=true;;
|
|
p) package=true;;
|
|
f) fuset=true;;
|
|
l) local_build=true;;
|
|
v)
|
|
if [ -z "$OPTARG" ]; then
|
|
echo "Error: -v requires a version argument."
|
|
usage
|
|
fi
|
|
WX_VERSION=${OPTARG}
|
|
;;
|
|
h) usage;;
|
|
*) usage;;
|
|
esac
|
|
done
|
|
|
|
export VC_OSX_FUSET=$([ "$fuset" = true ] && echo 1 || echo 0)
|
|
|
|
if [ "$fuset" = true ]; then
|
|
echo "Building VeraCrypt with FUSE-T support"
|
|
else
|
|
echo "Building VeraCrypt with MacFUSE support"
|
|
fi
|
|
|
|
if [ "$brew" = true ]; then
|
|
if ! command -v brew &> /dev/null; then
|
|
echo "Homebrew is not installed. Please install Homebrew or run without the -b flag."
|
|
exit 1
|
|
fi
|
|
|
|
export VC_OSX_SDK=$(xcrun --show-sdk-version) # use the latest version installed, this might fail
|
|
export VC_OSX_TARGET=${VC_OSX_SDK}
|
|
echo "Using MacOSX SDK $VC_OSX_SDK with target set to $VC_OSX_TARGET"
|
|
cd "$SOURCEPATH"
|
|
|
|
echo "Building VeraCrypt with precompiled homebrew packages"
|
|
cellar=$(brew --cellar "wxwidgets")
|
|
version=$(brew list --versions "wxwidgets" | head -1 | awk '{print $2}')
|
|
export WX_BUILD_DIR="$cellar/$version/bin"
|
|
# skip signing and build only for local arch
|
|
export LOCAL_DEVELOPMENT_BUILD=true
|
|
# set the correct CPU arch for Makefile
|
|
export CPU_ARCH=$(uname -m)
|
|
export AS=$(which yasm)
|
|
export COMPILE_ASM=$( if [[ "$CPU_ARCH" != "arm64" ]]; then echo true; else echo false; fi )
|
|
make clean
|
|
make
|
|
if [ "$package" = true ]; then
|
|
make package
|
|
fi
|
|
exit 0
|
|
fi
|
|
|
|
if [ "$local_build" = true ]; then
|
|
echo "Building VeraCrypt with local wxWidgets support and no universal binary"
|
|
export LOCAL_DEVELOPMENT_BUILD=true
|
|
export CPU_ARCH=$(uname -m)
|
|
export COMPILE_ASM=$( if [[ "$CPU_ARCH" != "arm64" ]]; then echo true; else echo false; fi )
|
|
fi
|
|
|
|
# Check the condition of wxBuildConsole and wxWidgets-$WX_VERSION in the original PARENTDIR
|
|
if [ -d "$PARENTDIR/wxBuildConsole" ]; then
|
|
echo "Using existing PARENTDIR: $PARENTDIR, wxBuildConsole is present."
|
|
elif [ -d "$PARENTDIR/wxWidgets-$WX_VERSION" ]; then
|
|
echo "Using existing PARENTDIR: $PARENTDIR, wxWidgets-$WX_VERSION is present."
|
|
else
|
|
# Change PARENTDIR to /tmp and check conditions again
|
|
export PARENTDIR="/tmp"
|
|
if [ -d "$PARENTDIR/wxBuildConsole" ]; then
|
|
echo "Switched to PARENTDIR: /tmp, wxBuildConsole is present in /tmp."
|
|
elif [ -d "$PARENTDIR/wxWidgets-$WX_VERSION" ]; then
|
|
echo "Switched to PARENTDIR: /tmp, wxWidgets-$WX_VERSION is present in /tmp."
|
|
else
|
|
echo "Error: Neither wxBuildConsole nor wxWidgets-$WX_VERSION found in /tmp. Exiting."
|
|
exit 1
|
|
fi
|
|
fi
|
|
|
|
# The sources of wxWidgets $WX_VERSION must be extracted to the parent directory
|
|
export WX_ROOT="$PARENTDIR/wxWidgets-$WX_VERSION"
|
|
|
|
# this will be the temporary wxWidgets directory
|
|
export WX_BUILD_DIR="$PARENTDIR/wxBuild-$WX_VERSION"
|
|
|
|
# define the SDK version to use and OSX minimum target. We target 12 by default
|
|
export VC_OSX_TARGET=12
|
|
export VC_OSX_SDK=$(xcrun --show-sdk-version) #use the latest version installed
|
|
echo "Using MacOSX SDK $VC_OSX_SDK with target set to $VC_OSX_TARGET"
|
|
|
|
cd "$SOURCEPATH"
|
|
|
|
echo "Building VeraCrypt"
|
|
# Check if wx-config exists in WX_BUILD_DIR
|
|
if [ -L "${WX_BUILD_DIR}/wx-config" ]; then
|
|
echo "wx-config already exists in ${WX_BUILD_DIR}. Skipping wxbuild."
|
|
else
|
|
echo "Using wxWidgets sources in $WX_ROOT"
|
|
make WXSTATIC=FULL wxbuild
|
|
fi
|
|
make WXSTATIC=FULL clean
|
|
make WXSTATIC=FULL
|
|
if [ "$package" = true ]; then
|
|
make WXSTATIC=FULL package
|
|
fi
|
|
|
|
echo "VeraCrypt build completed successfully."
|