139 lines
3.7 KiB
Bash
Executable File
139 lines
3.7 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
set -e
|
|
|
|
# source the common build functions
|
|
SCRIPT_DIR=$(dirname "$0")
|
|
source "${SCRIPT_DIR}/ios_build_functions.sh"
|
|
|
|
function setup ()
|
|
{
|
|
if [ "${ROOT_PATH}/External/libgit2-ios/libgit2.xcframework" -nt "${ROOT_PATH}/External/libgit2" ]
|
|
then
|
|
echo "No update needed."
|
|
exit 0
|
|
fi
|
|
|
|
LIBRARY_NAME="libgit2"
|
|
LIB_PATH="${ROOT_PATH}/External/libgit2-ios"
|
|
rm -rf "${LIB_PATH}"
|
|
|
|
pushd "${ROOT_PATH}/External/libgit2" > /dev/null
|
|
}
|
|
|
|
function build_libgit2 ()
|
|
{
|
|
rm -rf "build"
|
|
mkdir "build"
|
|
|
|
pushd "build" > /dev/null
|
|
|
|
# LOL Cmake
|
|
if [ "${ARCH}" != "i386" ] && [ "${ARCH}" != "x86_64" ]
|
|
then
|
|
SYS_ROOT="-DCMAKE_OSX_SYSROOT=${SDKROOT}"
|
|
fi
|
|
|
|
# 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 \
|
|
-DCMAKE_C_COMPILER_WORKS:BOOL=ON \
|
|
-DBUILD_SHARED_LIBS:BOOL=OFF \
|
|
-DCMAKE_PREFIX_PATH:PATH="${ROOT_PATH}/External/libssh2-ios/bin/${SDKNAME}-${ARCH}.sdk" \
|
|
-DPKG_CONFIG_USE_CMAKE_PREFIX_PATH:BOOL=ON \
|
|
-DCMAKE_INSTALL_PREFIX:PATH="${INSTALL_PREFIX}/" \
|
|
-DBUILD_CLAR:BOOL=OFF \
|
|
-DBUILD_TESTS:BOOL=OFF \
|
|
-DREGEX_BACKEND:STRING="builtin" \
|
|
-DTHREADSAFE:BOOL=ON \
|
|
-DCURL:BOOL=OFF \
|
|
-DCMAKE_C_FLAGS:STRING="-fembed-bitcode" \
|
|
"${SYS_ROOT}" \
|
|
-DCMAKE_OSX_ARCHITECTURES:STRING="${ARCH}" \
|
|
-DCMAKE_OSX_DEPLOYMENT_TARGET:STRING="${IPHONEOS_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 for simulator..."
|
|
|
|
# Collect all simulator build paths
|
|
for path in "${BUILT_LIB_PATHS[@]}"
|
|
do
|
|
case "$path" in
|
|
*libgit2-ios/iphonesimulator* )
|
|
SIMULATOR_LIB_PATHS+=("$path")
|
|
# Remember one header location (headers are the same, so overwriting doesn't matter)
|
|
base_dir=$(dirname $(dirname "${path}"))
|
|
HEADER_PATH="${base_dir}/include/git2.h"
|
|
;;
|
|
* )
|
|
# Ignore libs build for the actual phone
|
|
;;
|
|
esac
|
|
done
|
|
|
|
SIMULATOR_LIB_DIR="${ROOT_PATH}/External/libgit2-ios/iphonesimulator"
|
|
mkdir -p "${SIMULATOR_LIB_DIR}"
|
|
|
|
echo "... from ${SIMULATOR_LIB_PATHS[@]}"
|
|
lipo -create "${SIMULATOR_LIB_PATHS[@]}" -output "${SIMULATOR_LIB_DIR}/libgit2.a"
|
|
|
|
echo "Copying shared simulator header from ${HEADER_PATH}"
|
|
cp "${HEADER_PATH}" "${SIMULATOR_LIB_DIR}/libgit2.h"
|
|
|
|
echo "Building done."
|
|
}
|
|
|
|
function xcframework ()
|
|
{
|
|
echo "Building XCFramework..."
|
|
|
|
for path in "${BUILT_LIB_PATHS[@]}"
|
|
do
|
|
case "$path" in
|
|
*libgit2-ios/iphonesimulator* )
|
|
# Skip simulator library binaries
|
|
;;
|
|
* )
|
|
args+=("-library" "${path}")
|
|
base_dir=$(dirname $(dirname "${path}"))
|
|
args+=("-headers" "${base_dir}/include/git2.h")
|
|
;;
|
|
esac
|
|
done
|
|
|
|
args+=("-library" "${SIMULATOR_LIB_DIR}/libgit2.a")
|
|
args+=("-headers" "${SIMULATOR_LIB_DIR}/libgit2.h")
|
|
|
|
echo "... from ${args[@]}"
|
|
xcodebuild -create-xcframework \
|
|
"${args[@]}" \
|
|
-output "${ROOT_PATH}/External/libgit2-ios/libgit2.xcframework"
|
|
|
|
echo "Building done."
|
|
}
|
|
|
|
|
|
function combine_all_the_binaries ()
|
|
{
|
|
fat_binary
|
|
xcframework
|
|
|
|
popd > /dev/null
|
|
}
|
|
|
|
build_all_archs setup build_libgit2 combine_all_the_binaries
|