Last active
February 17, 2023 08:19
-
-
Save Wizermil/1b8144e4f67511c1f7d6 to your computer and use it in GitHub Desktop.
Script to compile jemalloc static library for iOS
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #!/bin/bash | |
| JEMALLOC_VERSION="5.2.0" | |
| ARCHS=("i386" "armv7" "armv7s" "arm64" "arm64e" "x86_64") | |
| SDK_VERSION="12.2" | |
| ROOT_DIR=$(pwd) | |
| WORKER=$(getconf _NPROCESSORS_ONLN) | |
| BUILD_DIR="build/ios/jemalloc" | |
| LOG_FILE="$ROOT_DIR/$BUILD_DIR/build.log" | |
| if [ -d "$BUILD_DIR/download" ]; then | |
| rm -rf "$BUILD_DIR/download" | |
| fi | |
| if [ -d "$BUILD_DIR/source" ]; then | |
| rm -rf "$BUILD_DIR/source" | |
| fi | |
| if [ -f "$LOG_FILE" ]; then | |
| rm "$LOG_FILE" | |
| touch "$LOG_FILE" | |
| fi | |
| mkdir -p "$BUILD_DIR/download" | |
| mkdir -p "$BUILD_DIR/source" | |
| error() { | |
| echo -e "$@" 1>&2 | |
| } | |
| fail() { | |
| error "$@" | |
| exit 1 | |
| } | |
| echo "Downloading: jemalloc" | |
| curl -Lo "$BUILD_DIR/download/jemalloc-$JEMALLOC_VERSION.tar.bz2" "https://github.com/jemalloc/jemalloc/releases/download/$JEMALLOC_VERSION/jemalloc-$JEMALLOC_VERSION.tar.bz2" >> "$LOG_FILE" 2>&1 || fail "Error download jemalloc $BUILD_DIR/download" | |
| echo "Downloaded: jemalloc" | |
| echo "Uncompressing: jemalloc" | |
| tar xjf "$BUILD_DIR/download/jemalloc-$JEMALLOC_VERSION.tar.bz2" -C "$BUILD_DIR/source" >> "$LOG_FILE" 2>&1 || fail "Error uncompress jemalloc" | |
| echo "Uncompressed: jemalloc" | |
| for ARCH in "${ARCHS[@]}"; do | |
| echo " " | |
| cd "$ROOT_DIR" || exit | |
| if [ -d "$BUILD_DIR/output/$ARCH" ]; then | |
| rm -rf "$BUILD_DIR/output/$ARCH" | |
| fi | |
| mkdir -p "$BUILD_DIR/output/$ARCH" | |
| cp -R "$BUILD_DIR/source/jemalloc-$JEMALLOC_VERSION/" "$BUILD_DIR/output/$ARCH" | |
| if [ -d "$BUILD_DIR/install/$ARCH" ]; then | |
| rm -rf "$BUILD_DIR/install/$ARCH" | |
| fi | |
| mkdir -p "$BUILD_DIR/install/$ARCH" | |
| if [ "$ARCH" == "i386" ] || [ "$ARCH" == "x86_64" ]; then | |
| PLATFORM="iPhoneSimulator" | |
| MIN_VERSION="-mios-simulator-version-min" | |
| else | |
| PLATFORM="iPhoneOS" | |
| MIN_VERSION="-mios-version-min" | |
| fi | |
| BUILD_SDKROOT="/Applications/Xcode.app/Contents/Developer/Platforms/$PLATFORM.platform/Developer/SDKs/${PLATFORM}${SDK_VERSION}.sdk" | |
| export LDFLAGS="-arch $ARCH -pipe -isysroot $BUILD_SDKROOT $MIN_VERSION=10.0 -Os" | |
| export CFLAGS="-arch $ARCH -pipe -isysroot $BUILD_SDKROOT -fembed-bitcode $MIN_VERSION=10.0 -Os" | |
| export CPPFLAGS="$CFLAGS" | |
| export CXXFLAGS="$CFLAGS" | |
| export CC="clang" | |
| export CPP="clang -E" | |
| export CXX="clang++" | |
| cd "$ROOT_DIR/$BUILD_DIR/output/$ARCH" || exit | |
| if [ -d "$BUILD_DIR/download" ]; then | |
| rm -rf "$BUILD_DIR/download" | |
| fi | |
| if [ "$ARCH" == "arm64" ] || [ "$ARCH" == "arm64e" ]; then | |
| HOST="aarch64" | |
| else | |
| HOST="$ARCH" | |
| fi | |
| echo "Configuring: jemalloc $ARCH" | |
| ./configure --host="$HOST-apple-darwin" \ | |
| --prefix="$ROOT_DIR/$BUILD_DIR/install/$ARCH" \ | |
| --enable-fill \ | |
| --enable-cxx \ | |
| --enable-debug >> "$LOG_FILE" 2>&1 || fail "Error configuration jemalloc $ARCH" | |
| echo "Configured: jemalloc $ARCH" | |
| echo "Compiling: jemalloc $ARCH" | |
| make -j "$WORKER" >> "$LOG_FILE" 2>&1 || fail "Error compilation jemalloc $ARCH" | |
| echo "Compiled: jemalloc $ARCH" | |
| echo "Installing: jemalloc $ARCH" | |
| make install >> "$LOG_FILE" 2>&1 || fail "Error installation jemalloc $ARCH" | |
| echo "Installed: jemalloc $ARCH" | |
| done | |
| cd "$ROOT_DIR/$BUILD_DIR" || exit 1 | |
| if [ -f "libjemalloc.a" ]; then | |
| rm -f "libjemalloc.a" | |
| fi | |
| echo " " | |
| echo "Creating Flat Lib: libjemalloc" | |
| LIPO_CMD="lipo -create" | |
| for ARCH in "${ARCHS[@]}"; do | |
| if [ -f "$ROOT_DIR/$BUILD_DIR/install/$ARCH/lib/libjemalloc.a" ]; then | |
| LIPO_CMD="$LIPO_CMD $ROOT_DIR/$BUILD_DIR/install/$ARCH/lib/libjemalloc.a" | |
| fi | |
| done | |
| LIPO_CMD="$LIPO_CMD -output libjemalloc.a" | |
| eval "$LIPO_CMD" >> "$LOG_FILE" 2>&1 || fail "Error creation flat jemalloc" | |
| echo "Created Flat Lib: jemalloc" |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment