hipgenisa.sh: Refactor to handle multiple source files

Change-Id: Icc212c43b3bf8c33fb856cd6fc5be7bbebb38d42
This commit is contained in:
Maneesh Gupta
2016-09-06 17:45:59 +05:30
parent 380a6c412b
commit 2c69d602c4
+38 -14
Vedi File
@@ -1,38 +1,62 @@
#!/bin/bash #!/bin/bash
function die {
echo "${1-Died}." >&2
exit 1
}
if [ $# = 0 ]; then if [ $# = 0 ]; then
>&2 echo "$(basename $0): Invalid number of arguments" && exit 1 die "$(basename $0): Invalid number of arguments"
fi fi
: ${ROCM_PATH:=/opt/rocm} : ${ROCM_PATH:=/opt/rocm}
: ${ROCM_TARGET:=fiji} : ${ROCM_TARGET:=fiji}
GEN_ISA=$1 INPUT_FILES=""
FILE_NAMES=$2 OUTPUT_FILE=""
OUT=$3 while [[ $# -gt 1 ]]; do
OUTPUT_FILE=$4 key="$1"
case $key in
-o)
OUTPUT_FILE="$2"
shift
;;
*)
INPUT_FILES="$INPUT_FILES $key"
esac
shift
done
[ INPUT_FILES != "" ] || die "No source files specified"
[ OUTPUT_FILE != "" ] || die "Output file not specified"
SOURCE="${BASH_SOURCE[0]}" SOURCE="${BASH_SOURCE[0]}"
HIP_PATH="$( command cd -P "$( dirname "$SOURCE" )/.." && pwd )" HIP_PATH="$( command cd -P "$( dirname "$SOURCE" )/.." && pwd )"
export KMDUMPISA=1 export KMDUMPISA=1
export KMDUMPLLVM=1 export KMDUMPLLVM=1
hipgenisa_dir=`mktemp -d --tmpdir=/tmp hip.XXXXXXXX`; hipgenisa_dir=`mktemp -d --tmpdir=/tmp hip.XXXXXXXX`
sed 's/extern \+"C" \+//g' $FILE_NAMES > $FILE_NAMES.kernel.tmp.cpp hipgenisa_main=`mktemp src.XXXXXXXX.cpp`
echo " hipgenisa_files="$hipgenisa_main"
int main(){}
" >> $FILE_NAMES.kernel.tmp.cpp for inputfile in $INPUT_FILES; do
$HIP_PATH/bin/hipcc $FILE_NAMES.kernel.tmp.cpp -o $hipgenisa_dir/a.out sed 's/extern \+"C" \+//g' $inputfile > $inputfile.kernel.tmp.cpp
hipgenisa_files="$hipgenisa_files $inputfile.kernel.tmp.cpp"
done
printf "\nint main(){}\n" >> $hipgenisa_main
$HIP_PATH/bin/hipcc $hipgenisa_files -o $hipgenisa_dir/a.out
mv dump.* $hipgenisa_dir mv dump.* $hipgenisa_dir
$ROCM_PATH/hcc-lc/bin/llvm-mc -arch=amdgcn -mcpu=$ROCM_TARGET -filetype=obj $hipgenisa_dir/dump.isa -o $hipgenisa_dir/dump.o $ROCM_PATH/hcc-lc/bin/llvm-mc -arch=amdgcn -mcpu=$ROCM_TARGET -filetype=obj $hipgenisa_dir/dump.isa -o $hipgenisa_dir/dump.o
$ROCM_PATH/llvm/bin/clang -target amdgcn--amdhsa $hipgenisa_dir/dump.o -o $hipgenisa_dir/dump.co $ROCM_PATH/llvm/bin/clang -target amdgcn--amdhsa $hipgenisa_dir/dump.o -o $hipgenisa_dir/dump.co
map_sym="" map_sym=""
kernels=$(objdump -t $hipgenisa_dir/dump.co | grep grid_launch_parm | sed 's/ \+/ /g; s/\t/ /g' | cut -d" " -f6) kernels=$(objdump -t $hipgenisa_dir/dump.co | grep grid_launch_parm | sed 's/ \+/ /g; s/\t/ /g' | cut -d" " -f6)
for mangled_sym in $kernels for mangled_sym in $kernels; do
do
real_sym=$(c++filt $(c++filt _$mangled_sym | cut -d: -f3 | sed 's/_functor//g') | cut -d\( -f1) real_sym=$(c++filt $(c++filt _$mangled_sym | cut -d: -f3 | sed 's/_functor//g') | cut -d\( -f1)
map_sym="--redefine-sym $mangled_sym=$real_sym $map_sym" map_sym="--redefine-sym $mangled_sym=$real_sym $map_sym"
done done
objcopy -F elf64-little $map_sym $hipgenisa_dir/dump.co $OUTPUT_FILE objcopy -F elf64-little $map_sym $hipgenisa_dir/dump.co $OUTPUT_FILE
rm $FILE_NAMES.kernel.tmp.cpp
rm $hipgenisa_files
rm -r $hipgenisa_dir rm -r $hipgenisa_dir