#!/bin/bash

# Turn on verbose debugging output
set -x
# Make errors fatal
set -e

MESHOPT_VERSION="0.24"
MESHOPT_SOURCE_URL="https://github.com/zeux/meshoptimizer/archive/refs/tags/v$MESHOPT_VERSION.tar.gz"
MESHOPT_SOURCE_DIR="meshoptimizer-$MESHOPT_VERSION"
MESHOPT_ARCHIVE="meshoptimizer-$MESHOPT_VERSION.tar.gz"

arch=`uname -m`
if [ "$arch" == "x86_64" ] ; then
	OS="linux64"
	BUILD_ARCH_FLAGS="-m64"
	BUILD_OPT_FLAGS="-msse2 -mfpmath=sse"
elif [ "$arch" == "aarch64" ] ; then
	OS="linux-arm64"
	BUILD_ARCH_FLAGS=""
	BUILD_OPT_FLAGS="-march=armv8-a+fp+simd"
else
	echo "Sorry, 64 bits builds only, from now on !"
	exit 1
fi

script=`readlink -f "$0" || echo "$0"`
top=`dirname "$script" || echo .`
stage="$top/stage"

cd $top
rm -rf build/ stage/
mkdir -p build "$stage/lib/release" "$stage/include" "$stage/LICENSES"

if ! [ -d "$MESHOPT_SOURCE_DIR" ] ; then
	if ! [ -f "$MESHOPT_ARCHIVE" ] ; then
		wget "$MESHOPT_SOURCE_URL" -O "$MESHOPT_ARCHIVE"
	fi
	tar xzf "$MESHOPT_ARCHIVE"
fi

let jobs=2
ncores=`cat /proc/cpuinfo | grep processor | wc -l`
if (( $ncores > 1 )) ; then
	jobs=$(($ncores / 2 + $ncores))
fi

pushd build
compileflags="-std=c++11 $BUILD_ARCH_FLAGS -fPIC -g -O2 -fomit-frame-pointer -frename-registers -fweb -fexpensive-optimizations -fno-strict-aliasing -fvisibility=hidden $BUILD_OPT_FLAGS -fno-math-errno -fno-trapping-math -fno-stack-protector"
cmake	-G "Unix Makefiles" \
		-DCMAKE_INSTALL_PREFIX="$stage" \
		-DCMAKE_CXX_FLAGS:STRING="$compileflags" \
		"../$MESHOPT_SOURCE_DIR"
make -j$jobs
make install
popd
rm -rf build/
cp -a "$MESHOPT_SOURCE_DIR/LICENSE.md" "$stage/LICENSES/meshoptimizer.txt"

pushd "$stage"
# NOTE: depending on the distro, either of lib or lib64 may be in use...
if [ -d lib64 ] ; then
	rm -rf lib64/cmake/
	mv -f lib64/* lib/release/
	rm -rf lib64/
else
	rm -rf lib/cmake/
	mv -f lib/*.a lib/release/
fi
DATE=`date +%Y%m%d`
tarball="meshoptimizer-$MESHOPT_VERSION-$OS-$DATE.tar.bz2"
tar cjf "../$tarball" .
popd
md5sum "$tarball"

