#!/bin/sh

cd $(dirname $0) ; CWD=$(pwd)
PKGNAM=ROCm-CompilerSupport
#VERSION=${VERSION:-$(echo $PKGNAM-*.tar.?z* | rev | cut -f 3- -d . | cut -f 1 -d - | rev)}
VERSION=5.1.1
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="-O2 -fPIC"
  LIBDIRSUFFIX="64"
else
  SLKCFLAGS="-O2"
  LIBDIRSUFFIX=""
fi


NUMJOBS=${NUMJOBS:-" -j$(expr $(nproc) + 1) "}


# Set to 1 if you'd like to install/upgrade package as they are built.
# This is recommended.
#INST=1

TMP=${TMP:-/tmp}
PKG=$TMP/package-${PKGNAM}
rm -rf $PKG
mkdir -p $TMP $PKG
#cp -a $CWD/${PKGNAM} 

#cd $TMP || exit 1
#rm -rf ${PKGNAM}-${VERSION}
#tar xvf $CWD/${PKGNAM}-$VERSION.tar.?z* || exit 1
#cp -a $CWD/${PKGNAM} ${PKGNAM}-$VERSION
#cd ${PKGNAM}-$VERSION || exit 1

#chown -R root:root .
#find . \
# \( -perm 777 -o -perm 775 -o -perm 711 -o -perm 555 -o -perm 511 \) \
# -exec chmod 755 {} \; -o \
# \( -perm 666 -o -perm 664 -o -perm 600 -o -perm 444 -o -perm 440 -o -perm 400 \) \
# -exec chmod 644 {} \;

# Build, and install ROCt
#cd ${SOURCE_DIR}/ROCT-Thunk-Interface/
#mkdir -p build
#cd build


#export CMAKE_PREFIX_PATH=${ROCM_INPUT_DIR}/include/hsa:${ROCM_INPUT_DIR}/lib

#export CMAKE_BUILD_TYPE="Release"
#export CMAKE_DEBUG_TRACE=0


#cmake .. -DCMAKE_BUILD_TYPE=${ROCM_CMAKE_BUILD_TYPE} -DCMAKE_INSTALL_PREFIX=${ROCM_OUTPUT_DIR}/ -DCPACK_PACKAGING_INSTALL_PREFIX=${ROCM_OUTPUT_DIR}/ -DCPACK_GENERATOR=RPM ${ROCM_CPACK_RPM_PERMISSIONS}
#make -j `nproc`
#make -j `nproc` build-dev


#we need to build a temp llvm
#SOURCE_DIR=`mktemp -d`
#ROCM_TEMP_LLVM_DIR=${SOURCE_DIR}/llvm_temp_install
#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

#CC=/usr/bin/clang CXX=/usr/bin/clang++ \
#CXXFLAGS="$SLKCFLAGS" \
#CFLAGS="$SLKCFLAGS" \
#cmake -DCMAKE_BUILD_TYPE="Release" -DCMAKE_INSTALL_PREFIX=${ROCM_TEMP_LLVM_DIR} -DLLVM_TARGETS_TO_BUILD="AMDGPU;X86" -DLLVM_USE_LINKER=gold -DCLANG_ANALYZER_ENABLE_Z3_SOLVER=OFF -DLLVM_ENABLE_ASSERTIONS=No .. || exit 1

#    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



cd $TMP || exit 1
rm -rf ${PKGNAM}-${VERSION}
cp -a $CWD/${PKGNAM} ${PKGNAM}-$VERSION
cd ${PKGNAM}-$VERSION || exit 1

chown -R root:root .
find . \
 \( -perm 777 -o -perm 775 -o -perm 711 -o -perm 555 -o -perm 511 \) \
 -exec chmod 755 {} \; -o \
 \( -perm 666 -o -perm 664 -o -perm 600 -o -perm 444 -o -perm 440 -o -perm 400 \) \
 -exec chmod 644 {} \;

# Build, and install ROCt
#cd ${SOURCE_DIR}/ROCT-Thunk-Interface/
#cd lib/comgr/

#cd lib
cd $TMP/${PKGNAM}-$VERSION/lib/comgr/
#mkdir -p build
#cd build


#mkdir -p ${PKGNAM}-$VERSION/src/build/temp_device_libs
#cp -f ${ROCM_INPUT_DIR}/lib/*.bc ${SOURCE_DIR}/atmi/src/build/temp_device_libs/
#cp -f /tmp/ROCm-Device-Libs-2.4.0/build/irif/irif.amdgcn.bc ${PKGNAM}-$VERSION/src/build/temp_device_libs/

#sed -i 's#${ROCM_DEVICE_PATH}/lib/#'${PKGNAM}-$VERSION/src/build/temp_device_libs/'#' ${PKGNAM}-$VERSION/src/device_runtime/bc.cmake


#export GFXLIST="gfx701 gfx801 gfx802 gfx803 gfx900 gfx906"
#export LLVM_BUILD="/tmp/ROCm-OpenCL-Runtime-2.4.0/build/compiler/llvm/"
#export LLVM_BUILD="/usr/hcc/bin/"


#export LLVM_BUILD=${ROCM_TEMP_LLVM_DIR}
#CC=$LLVM_BUILD/bin/clang cmake -DLLVM_DIR=${LLVM_BUILD} -DCMAKE_INSTALL_PREFIX=${ROCM_OUTPUT_DIR}/ -DCMAKE_BUILD_TYPE=${ROCM_CMAKE_BUILD_TYPE} -DCPACK_PACKAGING_INSTALL_PREFIX=${ROCM_OUTPUT_DIR}/ -DCPACK_GENERATOR=RPM ${ROCM_CPACK_RPM_PERMISSIONS} ..
#cmake -DCMAKE_INSTALL_PREFIX=${ROCM_OUTPUT_DIR}/atmi -DCMAKE_BUILD_TYPE=${ROCM_CMAKE_BUILD_TYPE} -DLLVM_DIR=${ROCM_LLVM_DIR} -DDEVICE_LIB_DIR=${SOURCE_DIR}/atmi/src/build/temp_device_libs/ -DHSA_DIR=${ROCM_INPUT_DIR}/ -DATMI_HSA_INTEROP=ON -DATMI_DEVICE_RUNTIME=ON -DATMI_C_EXTENSION=OFF
#CC=$LLVM_BUILD/bin/clang \
#cmake -DCMAKE_BUILD_TYPE=${ROCM_CMAKE_BUILD_TYPE} -DCMAKE_PREFIX_PATH="${ROCM_LLVM_DIR};${ROCM_INPUT_DIR}/lib" -DLLVM_DIR=${ROCM_LLVM_DIR} -DCMAKE_INSTALL_PREFIX=${ROCM_OUTPUT_DIR}/ -DCPACK_PACKAGING_INSTALL_PREFIX=${ROCM_OUTPUT_DIR}/ -DCPACK_GENERATOR=RPM ${ROCM_CPACK_RPM_PERMISSIONS} ..

#cmake ..
#cp -a ../CMakeLists.txt .


#INTERNAL_LLD_INCLUDE_DIRS



#------------LLVM_DIR: /tmp/llvm_temp_install/lib/cmake/llvm
#---LLVM_INCLUDE_DIRS: /tmp/llvm_temp_install/include
#---LLVM_LIBRARY_DIRS: /tmp/llvm_temp_install/lib
#-----------Clang_DIR: /usr/lib64/cmake/clang
#--CLANG_INCLUDE_DIRS: /usr/include
#----LLD_INCLUDE_DIRS: 
#---AMDDeviceLibs_DIR: /usr/lib64/cmake/AMDDeviceLibs




#export LLVM_BUILD=/usr/lib64/cmake/llvm
export LLVM_BUILD=${TMP}/llvm_temp_install/lib/cmake
export SPECIAL_PATH="${LLVM_BUILD};/usr/lib64;/usr/hcc/lib/"
#export Clang_DIR="/usr/hcc/lib64/clang/"

#ln -s /usr/hcc/lib64/clang/ /usr/hcc/lib64/cmake/clang

#-DCMAKE_INSTALL_PREFIX=/usr/ \ -DCMAKE_BUILD_TYPE="Release" \
#CC=$LLVM_BUILD/bin/clang \
#CXX=$LLVM_BUILD/bin/clang++ \

#/usr/hip/
#rm -rf /tmp/temp_device_libs
#mkdir /tmp/temp_device_libs
#cp -a /usr/hip/lib /tmp/temp_device_libs

#-DCMAKE_PREFIX_PATH=${SPECIAL_PATH} \

#  -DHSA_DIR=/usr/hsa \
#  -DHCC_HOME=/usr/hcc/ \
#   -DCMAKE_PREFIX_PATH=${SPECIAL_PATH} \

CXXFLAGS="$SLKCFLAGS" \
CFLAGS="$SLKCFLAGS" \
cmake \
  -DLLVM_DIR=${LLVM_BUILD}/llvm/ \
  -DClang_DIR=${LLVM_BUILD}/clang/ \
  -DCMAKE_INSTALL_PREFIX=/opt/rocm/ \
  -DCMAKE_LIBRARY_PATH=${PKGNAM}-$VERSION/lib${LIBDIRSUFFIX} \
  -DCMAKE_BUILD_TYPE=Release \
  -DATMI_HSA_INTEROP=ON -DATMI_DEVICE_RUNTIME=ON -DATMI_C_EXTENSION=OFF .|| exit 1
# .. || exit 1

#sed -i 's|/lib/cmake|/lib64/cmake|g' amd_comgr-config.cmake.install

#sed -i 's|/usr/lib/hip.amdgcn.bc|/usr/hcc/lib/hip.amdgcn.bc|g' CMakeFiles/hip_lib_header.dir/build.make
#sed -i 's|/usr/lib/opencl.amdgcn.bc|/usr/hcc/lib/opencl.amdgcn.bc|g' CMakeFiles/opencl_lib_header.dir/build.make
#sed -i 's|/usr/lib/ockl.amdgcn.bc|/usr/hcc/lib/ockl.amdgcn.bc|g' CMakeFiles/ockl_lib_header.dir/build.make
#sed -i 's|/usr/lib/ocml.amdgcn.bc|/usr/hcc/lib/ocml.amdgcn.bc|g' CMakeFiles/ocml_lib_header.dir/build.make
#sed -i 's|/usr/lib/oclc_unsafe_math_off.amdgcn.bc|/usr/hcc/lib/oclc_unsafe_math_off.amdgcn.bc|g'  CMakeFiles/oclc_unsafe_math_off_lib_header.dir/build.make

#sed -i 's|/usr/lib|/usr/hcc/lib|g' CMakeFiles/*/build.make

#sed -i 's|/usr/lib/|/usr/lib64/|g' CMakeFiles/*/build.make

make -j ${NUMJOBS} || exit 1

make install DESTDIR=$PKG || exit 1

#unset GFXLIST
unset LLVM_BUILD
unset SPECIAL_PATH
#rm -rf ${SOURCE_DIR}

#mv $PKG/usr/lib $PKG/usr/lib64

#cmake --build . --target install

# Back to source tarball root directory:
cd $CWD

find $PKG | xargs file | grep -e "executable" -e "shared object" | grep ELF \
  | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null


cd $PKG
/sbin/makepkg -l y -c n $TMP/${PKGNAM}-$VERSION-$ARCH-$BUILD.txz

