1#!/bin/sh -e 2abspath() { 3 if [ -d "$1" ]; then 4 (cd "$1"; pwd) 5 elif [ -f "$1" ]; then 6 if [ -z "${1##*/*}" ]; then 7 echo "$(cd "${1%/*}"; pwd)/${1##*/}" 8 else 9 echo "$(pwd)/$1" 10 fi 11 elif [ -d "$(dirname "$1")" ]; then 12 echo "$(cd "$(dirname "$1")"; pwd)/$(basename "$1")" 13 fi 14} 15 16REPO="$(abspath "$1")" 17BUILD="$(abspath "$2")" 18BINARY_NAME="${3:-mmseqs}" 19CPUS=${4:-$(nproc --all 2>/dev/null || sysctl -n hw.ncpu)} 20 21if [ ! -d "$REPO" ]; then 22 echo "${BINARY_NAME} repository missing" 23 exit 1 24fi 25 26export MACOSX_DEPLOYMENT_TARGET=10.12 27 28mkdir -p "$BUILD/build_libomp" && cd "$BUILD/build_libomp" 29wget -qO- http://github.com/llvm/llvm-project/releases/download/llvmorg-11.0.0/openmp-11.0.0.src.tar.xz | tar xvf - 30cd openmp-11.0.0.src 31wget https://raw.githubusercontent.com/Homebrew/formula-patches/7e2ee1d7/libomp/arm.patch 32patch -p1 < arm.patch 33 34mkdir -p "$BUILD/build_libomp/openmp-11.0.0.src/build-amd64" && cd "$BUILD/build_libomp/openmp-11.0.0.src/build-amd64" 35cmake -DLIBOMP_ENABLE_SHARED=OFF -DLIBOMP_INSTALL_ALIASES=OFF -DLIBOMP_ARCH=x86_64 -DCMAKE_CXX_FLAGS="-arch x86_64" .. 36make -j${CPUS} 37export LIBOMP_AMD64="$BUILD/build_libomp/openmp-11.0.0.src/build-amd64/runtime/src" 38 39mkdir -p "$BUILD/build_sse41" && cd "$BUILD/build_sse41" 40cmake -DCMAKE_BUILD_TYPE=Release -DHAVE_TESTS=0 -DHAVE_MPI=0 -DHAVE_SSE4_1=1 -DCMAKE_C_FLAGS="-arch x86_64" -DCMAKE_CXX_FLAGS="-arch x86_64" -DBUILD_SHARED_LIBS=OFF -DCMAKE_FIND_LIBRARY_SUFFIXES=".a" -DOpenMP_C_FLAGS="-Xpreprocessor -fopenmp -I${LIBOMP_AMD64}" -DOpenMP_C_LIB_NAMES=omp -DOpenMP_CXX_FLAGS="-Xpreprocessor -fopenmp -I${LIBOMP_AMD64}" -DOpenMP_CXX_LIB_NAMES=omp -DOpenMP_omp_LIBRARY=${LIBOMP_AMD64}/libomp.a "$REPO" 41make -j${CPUS} 42 43if [ "$(echo $(otool -L "src/${BINARY_NAME}" | wc -l))" != 5 ]; then 44 echo "Too many linked libraries found in ${BINARY_NAME} binary. Build is not static!" 45 exit 1 46fi 47 48mkdir -p "$BUILD/build_avx2" && cd "$BUILD/build_avx2" 49cmake -DCMAKE_BUILD_TYPE=Release -DHAVE_TESTS=0 -DHAVE_MPI=0 -DHAVE_AVX2=1 -DCMAKE_C_FLAGS="-arch x86_64h" -DCMAKE_CXX_FLAGS="-arch x86_64h" -DBUILD_SHARED_LIBS=OFF -DCMAKE_FIND_LIBRARY_SUFFIXES=".a" -DOpenMP_C_FLAGS="-Xpreprocessor -fopenmp -I${LIBOMP_AMD64}" -DOpenMP_C_LIB_NAMES=omp -DOpenMP_CXX_FLAGS="-Xpreprocessor -fopenmp -I${LIBOMP_AMD64}" -DOpenMP_CXX_LIB_NAMES=omp -DOpenMP_omp_LIBRARY=${LIBOMP_AMD64}/libomp.a "$REPO" 50make -j${CPUS} 51 52if [ "$(echo $(otool -L "src/${BINARY_NAME}" | wc -l))" != 5 ]; then 53 echo "Too many linked libraries found in ${BINARY_NAME} binary. Build is not static!" 54 exit 1 55fi 56 57export MACOSX_DEPLOYMENT_TARGET=11.0 58 59mkdir -p "$BUILD/build_libomp/openmp-11.0.0.src/build-arm64" && cd "$BUILD/build_libomp/openmp-11.0.0.src/build-arm64" 60cmake -DLIBOMP_ENABLE_SHARED=OFF -DLIBOMP_INSTALL_ALIASES=OFF -DLIBOMP_ARCH=aarch64 -DCMAKE_CXX_FLAGS="-arch arm64" -DLIBOMP_ASMFLAGS="-arch arm64" .. 61make -j${CPUS} 62export LIBOMP_AARCH64="$BUILD/build_libomp/openmp-11.0.0.src/build-arm64/runtime/src" 63 64mkdir -p "$BUILD/build_arm64" && cd "$BUILD/build_arm64" 65cmake -DCMAKE_BUILD_TYPE=Release -DHAVE_TESTS=0 -DHAVE_MPI=0 -DHAVE_ARM8=1 -DCMAKE_C_FLAGS="-arch arm64" -DCMAKE_CXX_FLAGS="-arch arm64" -DBUILD_SHARED_LIBS=OFF -DCMAKE_FIND_LIBRARY_SUFFIXES=".a" -DOpenMP_C_FLAGS="-Xpreprocessor -fopenmp -I${LIBOMP_AARCH64}" -DOpenMP_C_LIB_NAMES=omp -DOpenMP_CXX_FLAGS="-Xpreprocessor -fopenmp -I${LIBOMP_AARCH64}" -DOpenMP_CXX_LIB_NAMES=omp -DOpenMP_omp_LIBRARY=${LIBOMP_AARCH64}/libomp.a "$REPO" 66make -j${CPUS} 67if [ "$(echo $(otool -L "src/${BINARY_NAME}" | wc -l))" != 5 ]; then 68 echo "Too many linked libraries found in ${BINARY_NAME} binary. Build is not static!" 69 exit 1 70fi 71 72lipo -create -arch x86_64 "$BUILD/build_sse41/src/${BINARY_NAME}" -arch x86_64h "$BUILD/build_avx2/src/${BINARY_NAME}" -arch arm64 "$BUILD/build_arm64/src/${BINARY_NAME}" -output "$BUILD/${BINARY_NAME}" 73