#!/bin/bash set -e # augment path to help it find cmake via homebrew PATH="/opt/homebrew/bin:/usr/local/bin:$PATH" SCRIPT_DIR=$(dirname "$0") source "${SCRIPT_DIR}/xcode_functions.sh" function setup_build_environment () { pushd "$SCRIPT_DIR/.." > /dev/null ROOT_PATH="$PWD" popd > /dev/null CLANG="/usr/bin/xcrun clang" CC="${CLANG}" CPP="${CLANG} -E" MACOSX_DEPLOYMENT_TARGET="10.13" XCODE_MAJOR_VERSION=$(xcode_major_version) XCODE_MINOR_VERSION=$(xcode_minor_version) if [ "${XCODE_MAJOR_VERSION}" -lt "14" ] then echo "Requires Xcode 14 or newer." exit 1 fi ARCHS="x86_64 arm64" } function setup () { if [ "${ROOT_PATH}/External/libgit2-mac/libgit2-mac.a" -nt "${ROOT_PATH}/External/libgit2" ] then echo "No update needed." exit 0 fi LIBRARY_NAME="libgit2" LIB_PATH="${ROOT_PATH}/External/libgit2-mac" rm -rf "${LIB_PATH}" pushd "${ROOT_PATH}/External/libgit2" > /dev/null } function build_libgit2 () { rm -rf "build" mkdir "build" pushd "build" > /dev/null # install the each built arch somewhere sane INSTALL_PREFIX="${LIB_PATH}/${SDKNAME}-${ARCH}.sdk" mkdir -p "${INSTALL_PREFIX}" LOG="${INSTALL_PREFIX}/build-libgit2.log" echo "$LOG" cmake \ -DBUILD_SHARED_LIBS:BOOL=OFF \ -DCMAKE_PREFIX_PATH:PATH="${ROOT_PATH}/External/libssh2-mac/bin/${SDKNAME}-${ARCH}.sdk" \ -DCMAKE_INSTALL_PREFIX:PATH="${INSTALL_PREFIX}/" \ -DBUILD_CLAR:BOOL=OFF \ -DTHREADSAFE:BOOL=ON \ -DCMAKE_OSX_ARCHITECTURES:STRING="${ARCH}" \ -DCMAKE_OSX_DEPLOYMENT_TARGET:STRING="${MACOSX_DEPLOYMENT_TARGET}" \ .. >> "${LOG}" 2>&1 cmake --build . --target install >> "${LOG}" 2>&1 # push the built library into the list BUILT_LIB_PATHS+=("${INSTALL_PREFIX}/lib/libgit2.a") popd > /dev/null } function fat_binary () { echo "Building fat binary..." lipo -create "${BUILT_LIB_PATHS[@]}" -output "${ROOT_PATH}/External/libgit2-mac/libgit2-mac.a" echo "Building done." popd > /dev/null } setup_build_environment setup echo "Building for ${ARCHS}" for ARCH in ${ARCHS} do PLATFORM="macosx" SDKVERSION=$(macos_sdk_version) SDKNAME="${PLATFORM}${SDKVERSION}" SDKROOT="$(sdk_path ${SDKNAME})" echo "Building ${LIBRARY_NAME} for ${SDKNAME} ${ARCH}" echo "Please stand by..." # run the per arch build command build_libgit2 done fat_binary echo "libgit2 has been updated."