#!/bin/bash set -e CLANG_BIN=@CLANG_BIN@ BITCODE_DIR=@BITCODE_DIR@ OPENCL_INCLUDE=`echo | ${CLANG_BIN}/clang -v -x c++ -c - |& grep clang | tail -n1` CLANG=${CLANG_BIN}/clang LLVM_LINK=${CLANG_BIN}/llvm-link TRIPLE=@TRIPLE@ gfxip=803 while (( "$#" )) do arg="$1" case "$arg" in -o) shift output_file=$1 ;; -mcpu=gfx*) gfxip=${1##*gfx} ;& [-\+]*) options="${options} $1" ;; *) input_file=$1 ;; esac shift done # Support new device-lib suffix .bc if [ -e $BITCODE_DIR/opencl.amdgcn.bc ]; then BC_SUFFIX="amdgcn.bc" else BC_SUFFIX="bc" fi BITCODE_ARGS="$BITCODE_DIR/opencl.$BC_SUFFIX \ $BITCODE_DIR/ocml.$BC_SUFFIX \ $BITCODE_DIR/ockl.$BC_SUFFIX \ $BITCODE_DIR/oclc_correctly_rounded_sqrt_off.$BC_SUFFIX \ $BITCODE_DIR/oclc_daz_opt_on.$BC_SUFFIX \ $BITCODE_DIR/oclc_finite_only_off.$BC_SUFFIX \ $BITCODE_DIR/oclc_isa_version_${gfxip}.$BC_SUFFIX \ $BITCODE_DIR/oclc_unsafe_math_off.$BC_SUFFIX" ${CLANG} -c -emit-llvm \ -target $TRIPLE -x cl \ -D__AMD__=1 \ -D__gfx${gfxip}__=1 \ -D__gfx${gfxip}=1 \ -D__OPENCL_VERSION__=120 \ -D__IMAGE_SUPPORT__=1 \ -O3 \ -m64 \ -cl-kernel-arg-info \ -nogpulib \ -cl-std=CL1.2 \ -mllvm -amdgpu-early-inline-all \ -Xclang -cl-ext=+cl_khr_fp64,+cl_khr_global_int32_base_atomics,+cl_khr_global_int32_extended_atomics,+cl_khr_local_int32_base_atomics,+cl_khr_local_int32_extended_atomics,+cl_khr_int64_base_atomics,+cl_khr_int64_extended_atomics,+cl_khr_3d_image_writes,+cl_khr_byte_addressable_store,+cl_khr_gl_sharing,+cl_amd_media_ops,+cl_amd_media_ops2,+cl_khr_subgroups \ -include ${OPENCL_INCLUDE}/opencl-c.h \ ${options} -o ${output_file}.orig.bc ${input_file} ${LLVM_LINK} -f -o ${output_file}.linked.bc ${output_file}.orig.bc \ ${BITCODE_ARGS} |& tee ${output_file}.linked.bc.out # Fail on warnings if grep -qi warning ${output_file}.linked.bc.out; then echo "llvm-link failed!" exit 1 fi ${CLANG} \ -target $TRIPLE \ -O3 \ -m64 \ -cl-kernel-arg-info \ -nogpulib \ -mllvm -amdgpu-internalize-symbols -mllvm -amdgpu-early-inline-all \ ${options} -o ${output_file} ${output_file}.linked.bc # Remove extra files rm ${output_file}.linked.bc*