#!/bin/bash # Copyright (c) 2020-2021 Advanced Micro Devices, Inc. All rights reserved. # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. printUsage() { echo echo "Usage: $(basename "$0") HIP_BUILD_INC_DIR HIP_INC_DIR LLVM_DIR [option] [RTC_LIB_OUTPUT]" echo echo "Options:" echo " -p, --generate_pch Generate pre-compiled header (default)" echo " -r, --generate_rtc Generate preprocessor expansion (hiprtc_header.o)" echo " -h, --help Prints this help" echo echo return 0 } if [ "$1" == "" ]; then printUsage exit 0 fi HIP_BUILD_INC_DIR="$1" HIP_INC_DIR="$2" LLVM_DIR="$3" # By default, generate pch TARGET="generatepch" while [ "$4" != "" ]; do case "$4" in -h | --help ) printUsage ; exit 0 ;; -p | --generate_pch ) TARGET="generatepch" ; break ;; -r | --generate_rtc ) TARGET="generatertc" ; break ;; *) echo " UNEXPECTED ERROR Parm : [$4] ">&2 ; exit 20 ;; esac shift 1 done # Allow hiprtc lib name to be set by argument 6 if [[ "$5" != "" ]]; then rtc_shared_lib_out="$5" else if [[ "$OSTYPE" == cygwin ]]; then rtc_shared_lib_out=hiprtc-builtins64.dll else rtc_shared_lib_out=libhiprtc-builtins.so fi fi if [[ "$OSTYPE" == cygwin || "$OSTYPE" == msys ]]; then isWindows=1 tmpdir=. else isWindows=0 tmpdir=/tmp fi generate_pch() { tmp=$tmpdir/hip_pch.$$ mkdir -p $tmp cat >$tmp/hip_macros.h <$tmp/hip_pch.h <$tmp/hip_pch.mcin <$tmp/pch.cui && cat $tmp/hip_macros.h >> $tmp/pch.cui && $LLVM_DIR/bin/clang -cc1 -O3 -emit-pch -triple amdgcn-amd-amdhsa -aux-triple x86_64-unknown-linux-gnu -fcuda-is-device -std=c++17 -fgnuc-version=4.2.1 -o $tmp/hip.pch -x hip-cpp-output - <$tmp/pch.cui && $LLVM_DIR/bin/llvm-mc -o hip_pch.o $tmp/hip_pch.mcin --filetype=obj && rm -rf $tmp } generate_rtc_header() { tmp=$tmpdir/hip_rtc.$$ mkdir -p $tmp local headerFile="$tmp/hipRTC_header.h" local mcinFile="$tmp/hipRTC_header.mcin" cat >$headerFile < $mcinFile if [[ $isWindows -eq 0 ]]; then echo " .type __hipRTC_header,@object" >> $mcinFile fi cat >>$mcinFile <