Files
status-desktop/mobile/scripts/buildStatusKeycardQt.sh

92 lines
3.3 KiB
Bash
Executable File

#!/usr/bin/env bash
set -ef pipefail
BASEDIR=$(dirname "$0")
# Load common config variables
source "${BASEDIR}/commonCmakeConfig.sh"
STATUS_KEYCARD_QT=${STATUS_KEYCARD_QT:="../vendors/status-desktop"}
KEYCARD_QT=${KEYCARD_QT:=""}
LIB_DIR=${LIB_DIR}
LIB_EXT=${LIB_EXT:=".a"}
BUILD_DIR=${BUILD_DIR:="${STATUS_KEYCARD_QT}/build/${OS}/${ARCH}"}
BUILD_SHARED_LIBS=ON
if [[ "${LIB_EXT}" == ".a" ]]; then
BUILD_SHARED_LIBS=OFF
fi
echo "Building status-keycard-qt for ${ARCH} using compiler: ${CC}"
echo "BUILD_SHARED_LIBS=${BUILD_SHARED_LIBS}"
printf 'COMMON_CMAKE_CONFIG: %s\n' "${COMMON_CMAKE_CONFIG[@]}"
# Set OpenSSL paths (REQUIRED for key derivation in session_manager.cpp)
MOBILE_ROOT="$(cd "${BASEDIR}/.." && pwd)"
if [[ "$OS" == "android" ]]; then
OPENSSL_BUILD_DIR="${MOBILE_ROOT}/build/${OS}/qt6/openssl-${OS}-${ARCH}"
elif [[ "$OS" == "ios" ]]; then
# iOS OpenSSL is built per-architecture
OPENSSL_BUILD_DIR="${MOBILE_ROOT}/build/${OS}/qt6/openssl-${OS}-${ARCH}"
else
OPENSSL_BUILD_DIR="${MOBILE_ROOT}/build/${OS}/openssl-${OS}-${ARCH}"
fi
OPENSSL_BUILD_INCLUDE_DIR="${OPENSSL_BUILD_DIR}/include"
OPENSSL_SOURCE_INCLUDE_DIR="${MOBILE_ROOT}/vendors/openssl/include"
OPENSSL_CRYPTO_LIBRARY="${LIB_DIR}/libcrypto_3${LIB_EXT}"
echo "OpenSSL paths:"
echo " Build include dir: ${OPENSSL_BUILD_INCLUDE_DIR}"
echo " Source include dir: ${OPENSSL_SOURCE_INCLUDE_DIR}"
echo " Crypto library: ${OPENSSL_CRYPTO_LIBRARY}"
# Configure with CMake
# Use local keycard-qt for faster development builds (FetchContent will use this)
# If KEYCARD_QT path doesn't exist, FetchContent will clone from GitHub
if [[ -d "${KEYCARD_QT}" ]]; then
echo "Using local keycard-qt from: ${KEYCARD_QT}"
KEYCARD_QT_SOURCE_DIR_ARG="-DKEYCARD_QT_SOURCE_DIR=${KEYCARD_QT}"
else
echo "Local keycard-qt not found, will fetch from GitHub"
KEYCARD_QT_SOURCE_DIR_ARG=""
fi
cmake -S "${STATUS_KEYCARD_QT}" -B "${BUILD_DIR}" \
"${COMMON_CMAKE_CONFIG[@]}" \
-DBUILD_TESTING=OFF \
-DBUILD_EXAMPLES=OFF \
-DBUILD_SHARED_LIBS=${BUILD_SHARED_LIBS} \
${KEYCARD_QT_SOURCE_DIR_ARG} \
-DOPENSSL_BUILD_INCLUDE_DIR="${OPENSSL_BUILD_INCLUDE_DIR}" \
-DOPENSSL_SOURCE_INCLUDE_DIR="${OPENSSL_SOURCE_INCLUDE_DIR}" \
-DOPENSSL_CRYPTO_LIBRARY="${OPENSSL_CRYPTO_LIBRARY}"
# Build the library
make -C "${BUILD_DIR}" status-keycard-qt -j "$(nproc 2>/dev/null || sysctl -n hw.ncpu 2>/dev/null || echo 4)"
# Create lib directory
mkdir -p "${LIB_DIR}"
# Find and copy the built library
# Note: keycard-qt is built as a static library and linked into libstatus-keycard-qt,
# so we only need to copy one library file
STATUS_KEYCARD_QT_LIB=$(find "${BUILD_DIR}" -name "libstatus-keycard-qt${LIB_EXT}" -o -name "libstatus-keycard-qt.dylib" | grep -v "\.so\." | head -n 1)
if [[ -z "${STATUS_KEYCARD_QT_LIB}" ]]; then
# Try alternative patterns for static library
STATUS_KEYCARD_QT_LIB=$(find "${BUILD_DIR}" -name "libstatus-keycard-qt.a" | head -n 1)
fi
if [[ -z "${STATUS_KEYCARD_QT_LIB}" ]]; then
echo "Error: Could not find status-keycard-qt library in ${BUILD_DIR}"
echo "Build directory contents:"
find "${BUILD_DIR}" -name "*.so" -o -name "*.a" -o -name "*.dylib" | head -20
exit 1
fi
cp "${STATUS_KEYCARD_QT_LIB}" "${LIB_DIR}/libstatus-keycard-qt${LIB_EXT}"
echo "Copied ${STATUS_KEYCARD_QT_LIB} to ${LIB_DIR}/libstatus-keycard-qt${LIB_EXT}"