#!/bin/sh

cd $(dirname $0) ; CWD=$(pwd)
PKGNAM=llvm_amd-common
#VERSION=${VERSION:-$(echo $PKGNAM-*.tar.?z* | rev | cut -f 3- -d . | cut -f 1 -d - | rev)}
VERSION=2.10.0
BUILD=${BUILD:-1}

# Automatically determine the architecture we're building on:
if [ -z "$ARCH" ]; then
  case "$( uname -m )" in
    i?86) export ARCH=i586 ;;
    arm*) export ARCH=arm ;;
    # Unless $ARCH is already set, use uname -m for all other archs:
       *) export ARCH=$( uname -m ) ;;
  esac
fi

if [ "$ARCH" = "i586" ]; then
  SLKCFLAGS="-O2 -march=i586 -mtune=i686"
  LIBDIRSUFFIX=""
elif [ "$ARCH" = "s390" ]; then
  SLKCFLAGS="-O2"
  LIBDIRSUFFIX=""
elif [ "$ARCH" = "x86_64" ]; then
  SLKCFLAGS="-O3 -march=znver1 -fPIC"
  LIBDIRSUFFIX="64"
else
  SLKCFLAGS="-O2"
  LIBDIRSUFFIX=""
fi


TMP=${TMP:-/tmp}
mkdir -p $TMP

#we need to build a temp llvm
SOURCE_DIR=`mktemp -d`
ROCM_TEMP_LLVM_DIR=${TMP}/llvm_temp_install
rm -rf ${ROCM_TEMP_LLVM_DIR}
mkdir -p ${ROCM_TEMP_LLVM_DIR}

cp -a $CWD/llvm_amd-common ${SOURCE_DIR}
cd ${SOURCE_DIR}/llvm_amd-common

cp -a clang tools
cp -a lld tools

mkdir -p build
cd build

export CMAKE_BUILD_TYPE="Release"
export CMAKE_DEBUG_TRACE=0

#CC=/usr/bin/clang CXX=/usr/bin/clang++ \
CXXFLAGS="$SLKCFLAGS" \
CFLAGS="$SLKCFLAGS" \

export TARGETS="AMDGPU;X86"
cmake -DCMAKE_BUILD_TYPE="Release" -DCMAKE_INSTALL_PREFIX=${ROCM_TEMP_LLVM_DIR} -DLLVM_TARGETS_TO_BUILD=${TARGETS} -DLLVM_USE_LINKER=gold -DLLVM_ENABLE_ASSERTIONS=No .. || exit 1
unset TARGETS
    MEM_AVAIL=`cat /proc/meminfo | grep MemTotal | awk {'print $2'}`
    AVAIL_THREADS=`nproc`

    # Give about 4 GB to each building thread
    MAX_THREADS=`echo $(( ${MEM_AVAIL} / $(( 1024 * 1024 * 4 )) ))`
    if [ ${MAX_THREADS} -lt ${AVAIL_THREADS} ]; then
        NUM_BUILD_THREADS=${MAX_THREADS}
    else
        NUM_BUILD_THREADS=${AVAIL_THREADS}
    fi
    if [ ${NUM_BUILD_THREADS} -lt 1 ]; then
        NUM_BUILD_THREADS=1
    fi

    make -j ${NUM_BUILD_THREADS} || exit 1
    make install || exit 1



unset CMAKE_BUILD_TYPE
unset CMAKE_DEBUG_TRACE

