diff --git a/bin/aomp_common_vars b/bin/aomp_common_vars index 4a7133948..bd1215a26 100644 --- a/bin/aomp_common_vars +++ b/bin/aomp_common_vars @@ -11,12 +11,15 @@ # already set. If not, it assigns it the value following the :- # --- Start standard header to set AOMP environment variables ---- -realpath=`realpath $0` -thisdir=`dirname $realpath` +realpath=$(realpath "$0") +thisdir=$(dirname "$realpath") # Individual scripts will determine what generator to use unset CMAKE_GENERATOR +# If running under osh, set strict options. +shopt -s strict:all 2>/dev/null || true + # The AOMP_COMPILER_NAME is used whenever version is queried. # FIXME: More work is needed to propogate the use of AOMP_COMPILER_NAME. AOMP_COMPILER_NAME=${AOMP_COMPILER_NAME:-AOMP} @@ -62,23 +65,25 @@ fi # all the test repositories in a different directory. AOMP_REPOS_TEST=${AOMP_REPOS_TEST:-$HOME/git/aomp-test} -_ccache_bin=`which ccache` +_ccache_bin=$(which ccache) if [ "$_ccache_bin" == "" ] ; then AOMP_USE_CCACHE=${AOMP_USE_CCACHE:-0} else AOMP_USE_CCACHE=${AOMP_USE_CCACHE:-1} fi +declare -a AOMP_CCACHE_OPTS if [ "$AOMP_USE_CCACHE" == 0 ] ; then - AOMP_CCACHE_OPTS="" + AOMP_CCACHE_OPTS=() else - _ccache_bin=`which ccache` + _ccache_bin=$(which ccache) if [ "$_ccache_bin" == "" ] ; then echo "ERROR: AOMP_USE_CCACHE is $AOMP_USE_CCACHE but no ccache bin found in PATH" echo " Either fix path, install ccache, or set AOMP_USE_CCACHE=0" echo exit 1 fi - AOMP_CCACHE_OPTS="-DCMAKE_C_COMPILER_LAUNCHER=$_ccache_bin -DCMAKE_CXX_COMPILER_LAUNCHER=$_ccache_bin" + AOMP_CCACHE_OPTS=(-DCMAKE_C_COMPILER_LAUNCHER="$_ccache_bin" + -DCMAKE_CXX_COMPILER_LAUNCHER="$_ccache_bin") fi AOMP_SKIP_FLANG=${AOMP_SKIP_FLANG:-1} @@ -136,8 +141,8 @@ CUDABIN=${CUDABIN:-$CUDA/bin} # unless overridden with AOMP_CMAKE, get CMAKE from the # prerequisite supplemental component cmake. AOMP_CMAKE=${AOMP_CMAKE:-$AOMP_SUPP/cmake/bin/cmake} -if [ ! -f $AOMP_CMAKE ] ; then - AOMP_CMAKE=`which cmake` +if [ ! -f "$AOMP_CMAKE" ] ; then + AOMP_CMAKE=$(which cmake) if [ "$AOMP_CMAKE" == "" ] ; then echo "ERROR: finding cmake in aomp_common_vars." echo " Missing prerequisite supplemental component cmake." @@ -160,21 +165,21 @@ AOMP_USE_NINJA=${AOMP_USE_NINJA:-0} if [ "$AOMP_USE_NINJA" == 0 ] ; then AOMP_NINJA_BIN="make" else - AOMP_NINJA_BIN=`which ninja` - if [ AOMP_NINJA_BIN == "" ] ; then + AOMP_NINJA_BIN=$(which ninja) + if [ "$AOMP_NINJA_BIN" == "" ] ; then echo "ERROR: AOMP_USE_NINJA is $AOMP_USE_NINJA but no ninja bin found in PATH" echo " Either install ninja in PATH or set AOMP_USE_NINJA=0" echo exit 1 fi fi -AOMP_PROC=`uname -m` +AOMP_PROC=$(uname -m) if [ "$AOMP_PROC" == "unknown" ] ; then - AOMP_PROC=`uname -a | awk '{print $(NF-1)}'` + AOMP_PROC=$(uname -a | awk '{print $(NF-1)}') fi -GCC=`which gcc` -GCCXX=`which g++` +GCC=$(which gcc) +GCCXX=$(which g++) AOMP_CC_COMPILER=${AOMP_CC_COMPILER:-$GCC} AOMP_CXX_COMPILER=${AOMP_CXX_COMPILER:-$GCCXX} @@ -191,8 +196,8 @@ fi # Otherwise default to installed AOMP. If not yet installed, try rocm clang. _clang_compiler=$LLVM_INSTALL_LOC/bin/clang _clangxx_compiler=$LLVM_INSTALL_LOC/bin/clang++ -[ ! -f $_clang_compiler ] && _clang_compiler=/opt/rocm/llvm/bin/clang -[ ! -f $_clangxx_compiler ] && _clangxx_compiler=/opt/rocm/llvm/bin/clang++ +[ ! -f "$_clang_compiler" ] && _clang_compiler=/opt/rocm/llvm/bin/clang +[ ! -f "$_clangxx_compiler" ] && _clangxx_compiler=/opt/rocm/llvm/bin/clang++ AOMP_CLANG_COMPILER=${AOMP_CLANG_COMPILER:-$_clang_compiler} AOMP_CLANGXX_COMPILER=${AOMP_CLANGXX_COMPILER:-$_clangxx_compiler} @@ -211,7 +216,7 @@ if [ "$AOMP_PROC" == "ppc64le" ] ; then fi AOMP_BUILD_DEBUG=${AOMP_BUILD_DEBUG:-1} -if [ $AOMP_STANDALONE_BUILD == 1 ] ; then +if [ "$AOMP_STANDALONE_BUILD" == 1 ] ; then # Default is to build nvptx for STANDALONE build AOMP_BUILD_CUDA=${AOMP_BUILD_CUDA:-1} AOMP_BUILD_PERF=${AOMP_BUILD_PERF:-1} @@ -228,6 +233,32 @@ else fi fi +# Quote argument list suitable for passing as a single (string) argument to +# cmake. Result can be used within a double-quoted string, i.e. using +# "$(cmquot ...)". +function cmquot() { + local escaped_flags + local escaped_flag + local flag + escaped_flags=() + for flag in "$@"; do + escaped_flag=$(printf "%s" "$flag" | sed 's/\\/\\\\/g; s/\$/\\$/g; s/ /\\ /g; s/"/\\"/g') + escaped_flags+=("$escaped_flag") + done + echo "${escaped_flags[*]}" +} + +# Quote argument list suitable for passing back to the shell as a string. +# Useful for e.g. dumping argument lists in such a way that they can be safely +# copy & pasted into the user's terminal. Output should not be further quoted. +function shquot() { + local -a output + output=() + for arg in "$@"; do + output+=(\'${arg//\'/\'\\\'\'}\') + done + printf '%s' "${output[*]}" +} # AOMP uses RPATH (not) RUNPATH because LD_LIBRARY_PATH is a user feature for # user lib development. We do not want the compiler runtime to search user paths @@ -240,28 +271,37 @@ fi # Spliting options with AOMP_ORIGIN_NO_DTAGS is no longer necessary. AOMP_ORIGIN_RPATH_LIST="\$ORIGIN:\$ORIGIN/../lib:\$ORIGIN/../lib64:\$ORIGIN/../../../lib:\$ORIGIN/../llvm/lib" -AOMP_ORIGIN_RPATH="-DCMAKE_SHARED_LINKER_FLAGS='-Wl,--disable-new-dtags' -DCMAKE_INSTALL_RPATH_USE_LINK_PATH=ON -DCMAKE_INSTALL_RPATH=$AOMP_ORIGIN_RPATH_LIST" +AOMP_ORIGIN_RPATH=(-DCMAKE_SHARED_LINKER_FLAGS='-Wl,--disable-new-dtags' + -DCMAKE_INSTALL_RPATH_USE_LINK_PATH=ON + -DCMAKE_INSTALL_RPATH="$AOMP_ORIGIN_RPATH_LIST") AOMP_DEBUG_ORIGIN_RPATH_LIST="\$ORIGIN:\$ORIGIN/../lib-debug:\$ORIGIN/../lib64:\$ORIGIN/../../../lib-debug" -AOMP_DEBUG_ORIGIN_RPATH="-DCMAKE_SHARED_LINKER_FLAGS='-Wl,--disable-new-dtags' -DCMAKE_INSTALL_RPATH_USE_LINK_PATH=ON -DCMAKE_INSTALL_RPATH=$AOMP_DEBUG_ORIGIN_RPATH_LIST" +AOMP_DEBUG_ORIGIN_RPATH=(-DCMAKE_SHARED_LINKER_FLAGS='-Wl,--disable-new-dtags' + -DCMAKE_INSTALL_RPATH_USE_LINK_PATH=ON + -DCMAKE_INSTALL_RPATH="$AOMP_DEBUG_ORIGIN_RPATH_LIST") # Libraries and Binaries need different RUNPATH as below if [ "$AOMP_BUILD_SANITIZER" == 1 ]; then ## Below 3 lines are actually only required for AOMP ASan RPATH Cmake configuration. AOMP_ASAN_ORIGIN_RPATH_LIST="\$ORIGIN:\$ORIGIN/../../lib:\$ORIGIN/../lib:\$ORIGIN/../lib64:\$ORIGIN/../../../../lib/asan:\$ORIGIN/../lib/llvm" - AOMP_ASAN_ORIGIN_RPATH="-DCMAKE_SHARED_LINKER_FLAGS='-Wl,--disable-new-dtags' -DCMAKE_INSTALL_RPATH_USE_LINK_PATH=OFF -DCMAKE_INSTALL_RPATH=$AOMP_ASAN_ORIGIN_RPATH_LIST" + AOMP_ASAN_ORIGIN_RPATH=(-DCMAKE_SHARED_LINKER_FLAGS='-Wl,--disable-new-dtags' + -DCMAKE_INSTALL_RPATH_USE_LINK_PATH=OFF + -DCMAKE_INSTALL_RPATH="$AOMP_ASAN_ORIGIN_RPATH_LIST") # Please note below lines are only setup for ROCm ASan integration with AOMP. # Relative RUNPATH for ASAN binaries and libraries - OPENMP_EXTRAS_LIB_RPATH='$ORIGIN:$ORIGIN/../../../lib/asan:$ORIGIN/../../../lib:$ORIGIN/../../../../lib/asan:$ORIGIN/../../../../lib' - OPENMP_EXTRAS_EXE_RPATH='$ORIGIN/../lib/asan:$ORIGIN/../lib:$ORIGIN/../../lib/asan:$ORIGIN/../../lib:$ORIGIN/../../../lib/asan:$ORIGIN/../../../lib' + OPENMP_EXTRAS_LIB_RPATH="\$ORIGIN:\$ORIGIN/../../../lib/asan:\$ORIGIN/../../../lib:\$ORIGIN/../../../../lib/asan:\$ORIGIN/../../../../lib" + OPENMP_EXTRAS_EXE_RPATH="\$ORIGIN/../lib/asan:\$ORIGIN/../lib:\$ORIGIN/../../lib/asan:\$ORIGIN/../../lib:\$ORIGIN/../../../lib/asan:\$ORIGIN/../../../lib" else # Relative RUNPATH for non-ASAN binaries and libraries - OPENMP_EXTRAS_LIB_RPATH='$ORIGIN:$ORIGIN/../lib:$ORIGIN/../../lib:$ORIGIN/../../../lib' - OPENMP_EXTRAS_EXE_RPATH='$ORIGIN/../lib:$ORIGIN/../../lib:$ORIGIN/../../../lib' + OPENMP_EXTRAS_LIB_RPATH="\$ORIGIN:\$ORIGIN/../lib:\$ORIGIN/../../lib:\$ORIGIN/../../../lib" + OPENMP_EXTRAS_EXE_RPATH="\$ORIGIN/../lib:\$ORIGIN/../../lib:\$ORIGIN/../../../lib" fi -OPENMP_EXTRAS_SHARED_LINKER_FLAGS="-Wl,--enable-new-dtags,--build-id=sha1,--rpath,$OPENMP_EXTRAS_LIB_RPATH" -OPENMP_EXTRAS_EXE_LINKER_FLAGS="-Wl,--enable-new-dtags,--build-id=sha1,--rpath,$OPENMP_EXTRAS_EXE_RPATH" -OPENMP_EXTRAS_ORIGIN_RPATH="-DCMAKE_SKIP_INSTALL_RPATH=TRUE -DCMAKE_SHARED_LINKER_FLAGS_INIT=${OPENMP_EXTRAS_SHARED_LINKER_FLAGS} -DCMAKE_EXE_LINKER_FLAGS_INIT=${OPENMP_EXTRAS_EXE_LINKER_FLAGS} -DCMAKE_MODULE_LINKER_FLAGS_INIT=${OPENMP_EXTRAS_SHARED_LINKER_FLAGS}" +OPENMP_EXTRAS_SHARED_LINKER_FLAGS=("-Wl,--enable-new-dtags,--build-id=sha1,--rpath,$OPENMP_EXTRAS_LIB_RPATH") +OPENMP_EXTRAS_EXE_LINKER_FLAGS=("-Wl,--enable-new-dtags,--build-id=sha1,--rpath,$OPENMP_EXTRAS_EXE_RPATH") +OPENMP_EXTRAS_ORIGIN_RPATH=(-DCMAKE_SKIP_INSTALL_RPATH=TRUE + -DCMAKE_SHARED_LINKER_FLAGS_INIT="$(cmquot "${OPENMP_EXTRAS_SHARED_LINKER_FLAGS[@]}")" + -DCMAKE_EXE_LINKER_FLAGS_INIT="$(cmquot "${OPENMP_EXTRAS_EXE_LINKER_FLAGS[@]}")" + -DCMAKE_MODULE_LINKER_FLAGS_INIT="$(cmquot "${OPENMP_EXTRAS_SHARED_LINKER_FLAGS[@]}")") # Regardless, turn off AOMP_BUILD_CUDA if CUDA not available if [ ! -d "$CUDABIN" ] ; then @@ -278,10 +318,12 @@ if [ "$AOMP_BUILD_CUDA" == 1 ] ; then NVPTXGPUS_DEFAULT="35,37,50,52,53,60,61,62,70,72,75,80,86" # Developers should override NVPTXGPUS to shorten build time. NVPTXGPUS=${NVPTXGPUS:-"${NVPTXGPUS_DEFAULT}"} + # shellcheck disable=2034 AOMP_NVPTX_TARGET="NVPTX;" else NVPTXGPUS_DEFAULT="" NVPTXGPUS="" + # shellcheck disable=2034 AOMP_NVPTX_TARGET="" fi @@ -304,8 +346,9 @@ done # Calculate the number of threads to use for make COMP_THREADS=1 -if [ ! -z `which "getconf"` ]; then - COMP_THREADS=$(`which "getconf"` _NPROCESSORS_ONLN) +GETCONF=$(which getconf) +if [ -n "$GETCONF" ]; then + COMP_THREADS=$($GETCONF _NPROCESSORS_ONLN) if [ "$AOMP_PROC" == "ppc64le" ] ; then COMP_THREADS=$(( COMP_THREADS / 6)) fi @@ -337,14 +380,16 @@ AOMP_GIT_INTERNAL_IP="git@github-ent" GITROC="https://github.com/ROCm" GITGERRIT="ssh://$USER@gerrit-git.amd.com:29418" GITKHRONOS="https://github.com/KhronosGroup" +# shellcheck disable=2034 GITHWLOC="https://github.com/open-mpi" GITLIGHTNINGINTERNAL="$AOMP_GIT_INTERNAL_IP:AMD-Lightning-Internal" GITPROJECT=$GITROCDEV +# shellcheck disable=2034 POWERINFER_REPO="https://github.com/SJTU-IPADS" if [ "$AOMP_STANDALONE_BUILD" == 1 ]; then AOMP_PROJECT_REPO_NAME=${AOMP_PROJECT_REPO_NAME:-llvm-project} else - AOMP_PROJECT_REPO_NAME=${AOMP_PROJECT_REPO_NAME:-$(basename $LLVM_PROJECT_ROOT)} + AOMP_PROJECT_REPO_NAME=${AOMP_PROJECT_REPO_NAME:-$(basename "$LLVM_PROJECT_ROOT")} if [ ! -d "$AOMP_REPOS/$AOMP_PROJECT_REPO_NAME" ]; then AOMP_PROJECT_REPO_NAME="../llvm-project" fi @@ -354,7 +399,7 @@ AOMP_FLANG_REPO_NAME=${AOMP_FLANG_REPO_NAME:-flang} # Last version of rocm (5.5) that supports the legacy driver (command generation) # The archives are built during flang-classic. AOMP_FLANG_CLASSIC_REL=${AOMP_FLANG_CLASSIC_REL:-${AOMP_REPOS}/${AOMP_FLANG_REPO_NAME}/flang-classic} -if [ -d $AOMP_FLANG_CLASSIC_REL/llvm-classic ] ; then +if [ -d "$AOMP_FLANG_CLASSIC_REL/llvm-classic" ] ; then AOMP_BUILD_FLANG_CLASSIC=1 else AOMP_BUILD_FLANG_CLASSIC=0 @@ -392,45 +437,57 @@ AOMP_PROF_REGISTER_REPO_NAME=${AOMP_PROF_REGISTER_REPO_NAME:-rocprofiler-registe AOMP_TRACE_REPO_NAME=${AOMP_TRACE_REPO_NAME:-roctracer} # These are test repositories +# shellcheck disable=2034 GITNEKBONE="https://github.com/AMDComputeLibraries" AOMP_NEKBONE_REPO_NAME=${AOMP_NEKBONE_REPO_NAME:-Nekbone} AOMP_APPS_REPO_NAME=${AOMP_APPS_REPO_NAME:-openmpapps} +# shellcheck disable=2034 GITOPENMPVV="https://github.com/OpenMP-Validation-and-Verification" AOMP_OPENMPVV_REPO_NAME=${AOMP_OPENMPVV_REPO_NAME:-OpenMP_VV} +# shellcheck disable=2034 GITSOLVV="https://github.com/SOLLVE" AOMP_SOLVV_REPO_NAME=${AOMP_SOLVV_REPO_NAME:-sollve_vv} AOMP_APPS_REPO_NAME=${AOMP_APPS_REPO_NAME:-openmpapps} +# shellcheck disable=2034 GITLLNL="https://github.com/llnl" AOMP_RAJA_REPO_NAME=${AOMP_RAJA_REPO_NAME:-raja} AOMP_RAJAPERF_REPO_NAME=${AOMP_RAJAPERF_REPO_NAME:-RAJAPerf} +# shellcheck disable=2034 GITKOKKOS="https://github.com/kokkos" AOMP_KOKKOS_REPO_NAME=${AOMP_KOKKOS_REPO_NAME:-kokkos} AOMP_INTERNAL_IP="gitlab1.amd.com" +# shellcheck disable=2034 GITINTERNAL="http://${AOMP_INTERNAL_IP}/dmcdouga" # This will change soon +# shellcheck disable=2034 GITOVO="https://github.com/TApplencourt" AOMP_OVO_REPO_NAME=${AOMP_OVO_REPO_NAME:-OvO} +# shellcheck disable=2034 GITOMPTESTS="https://github.com/doru1004" AOMP_OMPTESTS_REPO_NAME=${AOMP_OMPTESTS_REPO_NAME:-omptests} +# shellcheck disable=2034 GITQMCPACK="https://github.com/QMCPACK" AOMP_QMCPACK_REPO_NAME=${AOMP_QMCPACK_REPO_NAME:-qmcpack} +# shellcheck disable=2034 GITOPENLIBM="https://github.com/JuliaMath" AOMP_OPENLIBM_REPO_NAME=${AOMP_OPENLIBM_REPO_NAME:-openlibm} +# shellcheck disable=2034 GITLLNLGOULASH="https://github.com/LLNL" AOMP_GOULASH_REPO_NAME=${AOMP_GOULASH_REPO_NAME:-goulash} AOMP_BABELSTREAM_REPO_NAME=${AOMP_BABELSTREAM_REPO_NAME:-babelstream} +# shellcheck disable=2034 GITUMT="https://github.com/LLNL" AOMP_UMT_REPO_NAME=${AOMP_UMT_REPO_NAME:-UMT} # We dont use this yet, waiting for trunk merge AOMP_F18_REPO_NAME=${AOMP_F18_REPO_NAME:-f18} -if [ -d $AOMP_REPOS/$AOMP_TRACE_REPO_NAME ] ; then - pushd $AOMP_REPOS/$AOMP_TRACE_REPO_NAME > /dev/null - roctracer_branch=`git branch --list | grep "\*" | cut -d" " -f2` +if [ -d "$AOMP_REPOS/$AOMP_TRACE_REPO_NAME" ] ; then + pushd "$AOMP_REPOS/$AOMP_TRACE_REPO_NAME" > /dev/null || exit + roctracer_branch=$(git branch --list | grep "\*" | cut -d" " -f2) if [ "$roctracer_branch" == "rocm-4.0.x" ] ; then AOMP_PATCH_CONTROL_FILE="${AOMP_REPOS}/${AOMP_REPO_NAME}/bin/patches/patch-control-file_4.0.txt" fi - popd > /dev/null + popd > /dev/null || exit fi AOMP_PATCH_CONTROL_FILE=${AOMP_PATCH_CONTROL_FILE:-${AOMP_REPOS}/${AOMP_REPO_NAME}/bin/patches/patch-control-file.txt} @@ -450,11 +507,12 @@ fi # The cmake and make builds are actually done in # BUILD_AOMP/build, not the actual repos. BUILD_AOMP=${BUILD_AOMP:-$AOMP_REPOS} +# shellcheck disable=2034 BUILD_DIR=$BUILD_AOMP # Here is where we define different behaviors for STANDALONE build # and the new ROCm integrated build. The default is STANDALONE build. -if [ $AOMP_STANDALONE_BUILD == 1 ] ; then +if [ "$AOMP_STANDALONE_BUILD" == 1 ] ; then # Standalone build gets ROCm components from the AOMP Installation. # As a result their is an order to component builds. ROCM_DIR=${ROCM_DIR:-$AOMP_INSTALL_DIR} @@ -468,11 +526,13 @@ else AOMP_INSTALL_DIR=${AOMP} fi +declare -a ASAN_FLAGS + if [ "$AOMP_BUILD_SANITIZER" == 1 ]; then if [ -f "${LLVM_INSTALL_LOC}/bin/clang" ]; then ASAN_LIB=$(${LLVM_INSTALL_LOC}/bin/clang --print-file-name=libclang_rt.asan-x86_64.so) ASAN_LIB_PATH=$(dirname "$ASAN_LIB") - if [ ! -d $ASAN_LIB_PATH ]; then + if [ ! -d "$ASAN_LIB_PATH" ]; then #Suppose above search path fails then via 'LLVM_ENABLE_PER_TARGET_RUNTIME_DIR=ON' the host asan library would lose the suffix ASAN_LIB=$(${LLVM_INSTALL_LOC}/bin/clang --print-file-name=libclang_rt.asan.so) ASAN_LIB_PATH=$(dirname "$ASAN_LIB") @@ -481,20 +541,37 @@ if [ "$AOMP_BUILD_SANITIZER" == 1 ]; then # no compiler at $AOMP so set where we expect ASAN_LIP_PATH to be ASAN_LIB_PATH=${LLVM_INSTALL_LOC}/lib/clang/${AOMP_MAJOR_VERSION}/lib/linux fi - ASAN_FLAGS="-g -fsanitize=address -shared-libasan -Wl,-rpath=$ASAN_LIB_PATH -L$ASAN_LIB_PATH" + ASAN_FLAGS=(-g -fsanitize=address -shared-libasan + "-Wl,-rpath=$ASAN_LIB_PATH" -L"$ASAN_LIB_PATH") if [ "$AOMP_STANDALONE_BUILD" == 0 ]; then - ASAN_FLAGS="$ASAN_FLAGS -I$ROCM_DIR/include -I$ROCM_DIR/include/hsa" + ASAN_FLAGS+=(-I"$ROCM_DIR/include" -I"$ROCM_DIR/include/hsa") fi fi +function check_writable_installdir() { + local action=$1 + local installdir=$2 + + # Make sure we can update the install directory + if [ "$action" == "install" ] ; then + $SUDO mkdir -p "$installdir" + + if ! $SUDO touch "$installdir/testfile"; then + echo "ERROR: No update access to $installdir" + exit 1 + fi + $SUDO rm "$installdir/testfile" + fi +} + # TO use this function set variables patchdir and patchfile function patchrepo(){ patchdir=$1 if [ "$AOMP_APPLY_ROCM_PATCHES" == 1 ] && [ -d "$patchdir" ] ; then patches="" - cd $patchdir + cd "$patchdir" || exit if [[ "$2" =~ "postinstall" ]]; then - getpatchlist $2 + getpatchlist "$2" else getpatchlist fi @@ -502,10 +579,10 @@ if [ "$AOMP_APPLY_ROCM_PATCHES" == 1 ] && [ -d "$patchdir" ] ; then #loop through list of patches to apply if [ "$patches" != "" ] ; then patchloc=${AOMP_PATCH_CONTROL_FILE%/*} - echo patchloc=$patchloc + echo "patchloc=$patchloc" for patch in $patches; do patchfile=$patchloc/$patch - if [ ! -f $patchfile ] ; then + if [ ! -f "$patchfile" ] ; then echo echo "ERROR: Patch $patchfile does not exist" echo " It is referenced in ${AOMP_PATCH_CONTROL_FILE}" @@ -515,12 +592,10 @@ if [ "$AOMP_APPLY_ROCM_PATCHES" == 1 ] && [ -d "$patchdir" ] ; then echo "Testing patch $patchfile to $patchdir" applypatch="yes" - patch -p1 -t -N --dry-run <$patchfile >/dev/null - if [ $? != 0 ] ; then + if ! patch -p1 -t -N --dry-run <"$patchfile" >/dev/null; then applypatch="no" # Check to see if reverse patch applies cleanly - patch -p1 -R --dry-run -t <$patchfile >/dev/null - if [ $? == 0 ] ; then + if patch -p1 -R --dry-run -t <"$patchfile" >/dev/null; then echo "patch $patchfile was already applied to $patchdir" else echo @@ -533,7 +608,7 @@ if [ "$AOMP_APPLY_ROCM_PATCHES" == 1 ] && [ -d "$patchdir" ] ; then fi if [ "$applypatch" == "yes" ] ; then echo "Applying patch $patchfile to $patchdir" - patch -p1 --no-backup-if-mismatch <$patchfile + patch -p1 --no-backup-if-mismatch <"$patchfile" fi done fi @@ -545,7 +620,7 @@ function removepatch(){ patchdir=$1 if [ "$AOMP_APPLY_ROCM_PATCHES" == 1 ] && [ -d "$patchdir" ] ; then patches="" - cd $patchdir + cd "$patchdir" || exit getpatchlist if [ "$patches" != "" ] ; then echo "Patchdir $patchdir" @@ -558,14 +633,14 @@ if [ "$AOMP_APPLY_ROCM_PATCHES" == 1 ] && [ -d "$patchdir" ] ; then echo "Testing reverse patch $patchfile to $patchdir" reversepatch="yes" # Check to see if reverse patch applies cleanly - patch -p1 -R --dry-run -f <$patchfile >/dev/null - if [ $? != 0 ] ; then + + if ! patch -p1 -R --dry-run -f <"$patchfile" >/dev/null; then echo "patch $patchfile was NOT applied $patchdir, no patch to reverse" reversepatch="no" fi if [ "$reversepatch" == "yes" ] ; then echo "Reversing patch $patchfile to $patchdir" - patch -p1 -R -f --no-backup-if-mismatch <$patchfile + patch -p1 -R -f --no-backup-if-mismatch <"$patchfile" fi done fi @@ -574,14 +649,14 @@ fi function getpatchlist(){ currdir=$(pwd) - basedir=$(basename $currdir) + basedir=$(basename "$currdir") if [[ "$1" =~ "postinstall" ]]; then reporegex="(^$1:\s)" else reporegex="(^$basedir:\s)" fi - echo FILE: $AOMP_PATCH_CONTROL_FILE - echo regex $reporegex + echo "FILE: $AOMP_PATCH_CONTROL_FILE" + echo "regex $reporegex" #read patch control file and look for correct patches while read -r line; do if [[ "$line" =~ $reporegex ]]; then @@ -596,23 +671,23 @@ function getpatchlist(){ function setaompgpu (){ if [[ -e "$AOMP/../../bin/rocm_agent_enumerator" ]]; then echo Set AOMP_GPU with ../.. rocm_agent_enumerator. - detected_gpu=$($AOMP/../../bin/rocm_agent_enumerator | grep -m 1 -E gfx[^0]{1}.{2}) + detected_gpu=$("$AOMP"/../../bin/rocm_agent_enumerator | grep -m 1 -E 'gfx[^0]{1}.{2}') elif [[ -e "$AOMP/../bin/rocm_agent_enumerator" ]]; then echo Set AOMP_GPU with .. rocm_agent_enumerator. - detected_gpu=$($AOMP/../bin/rocm_agent_enumerator | grep -m 1 -E gfx[^0]{1}.{2}) + detected_gpu=$("$AOMP"/../bin/rocm_agent_enumerator | grep -m 1 -E 'gfx[^0]{1}.{2}') elif [[ "$AOMP" =~ "opt" ]]; then echo Set AOMP_GPU with rocm_agent_enumerator. - detected_gpu=$($AOMP/../bin/rocm_agent_enumerator | grep -m 1 -E gfx[^0]{1}.{2}) + detected_gpu=$("$AOMP"/../bin/rocm_agent_enumerator | grep -m 1 -E 'gfx[^0]{1}.{2}') else echo Set AOMP_GPU with rocm_agent_enumerator. - if [ -a $AOMP/bin/rocm_agent_enumerator ]; then - detected_gpu=$($AOMP/bin/rocm_agent_enumerator | grep -m 1 -E gfx[^0]{1}.{2}) - elif [ -a $AOMP/bin/amdgpu-arch ]; then - detected_gpu=$($AOMP/bin/amdgpu-arch) - detected_gpu=$(echo $detected_gpu | awk '{print $1,$5}') - detected_gpu=`echo $detected_gpu | cut -d" " -f1` # pick first found - elif [ -e $AOMP/../bin/mygpu ]; then - detected_gpu=$($AOMP/../bin/mygpu) + if [ -a "$AOMP"/bin/rocm_agent_enumerator ]; then + detected_gpu=$("$AOMP"/bin/rocm_agent_enumerator | grep -m 1 -E 'gfx[^0]{1}.{2}') + elif [ -a "$AOMP"/bin/amdgpu-arch ]; then + detected_gpu=$("$AOMP"/bin/amdgpu-arch) + detected_gpu=$(echo "$detected_gpu" | awk '{print $1,$5}') + detected_gpu=$(echo "$detected_gpu" | cut -d" " -f1) # pick first found + elif [ -e "$AOMP"/../bin/mygpu ]; then + detected_gpu=$("$AOMP"/../bin/mygpu) else echo "Error: in setaompgpu, could not find rocm_agent_enumerator" echo " Set AOMP_GPU, AOMP, or install ROCm" @@ -622,8 +697,8 @@ function setaompgpu (){ AOMP_GPU=${AOMP_GPU:-$detected_gpu} export AOMP_GPU - echo AOMP_GPU = $AOMP_GPU - echo AOMP = $AOMP + echo "AOMP_GPU = $AOMP_GPU" + echo "AOMP = $AOMP" if [ "$AOMP_GPU" == "" ] || [ "$AOMP_GPU" == "unknown" ]; then echo Error: AOMP_GPU not properly set...exiting. diff --git a/bin/build-deb-aomp.sh b/bin/build-deb-aomp.sh index ef79ee200..3643d2bc1 100755 --- a/bin/build-deb-aomp.sh +++ b/bin/build-deb-aomp.sh @@ -1,4 +1,4 @@ -#/bin/bash +#!/bin/bash # # build-deb-aomp.sh: Using debhelper and alien, build the aomp debian and rpm packages # This script is tested on amd64 and ppc64le linux architectures. @@ -10,14 +10,14 @@ # # --- Start standard header to set AOMP environment variables ---- -realpath=`realpath $0` -thisdir=`dirname $realpath` -. $thisdir/aomp_common_vars +realpath=$(realpath "$0") +thisdir=$(dirname "$realpath") +. "$thisdir/aomp_common_vars" # --- end standard header ---- . /etc/lsb-release -RELSTRING=`echo $DISTRIB_ID$DISTRIB_RELEASE | tr -d "."` -echo RELSTRING=$RELSTRING +RELSTRING=$(echo $DISTRIB_ID$DISTRIB_RELEASE | tr -d ".") +echo "RELSTRING=$RELSTRING" if [ "$1" == aomp-hip-libraries ]; then pkgname=aomp-hip-libraries @@ -25,7 +25,7 @@ else pkgname=aomp fi -echo Building $pkgname package +echo "Building $pkgname package" dirname="aomp_${AOMP_VERSION_STRING}" sourcedir="/usr/lib/$dirname" @@ -35,7 +35,7 @@ DEBFULLNAME="Greg Rodgers" DEBEMAIL="Gregory.Rodgers@amd.com" export DEBFULLNAME DEBEMAIL -DEBARCH=`uname -m` +DEBARCH=$(uname -m) if [ "$DEBARCH" == "x86_64" ] ; then DEBARCH="amd64" fi @@ -46,115 +46,123 @@ if [ "$DEBARCH" == "aarch64" ] ; then DEBARCH="arm64" fi -tmpdir=/tmp/$USER/build-deb -builddir=$tmpdir/$pkgname -if [ -d $builddir ] ; then +tmpdir="/tmp/$USER/build-deb" +builddir="$tmpdir/$pkgname" +if [ -d "$builddir" ] ; then echo echo "--- CLEANUP LAST BUILD: rm -rf $builddir" - sudo rm -rf $builddir + sudo rm -rf "$builddir" fi debdir=$PWD/debian -froot=$builddir/$pkgname-$AOMP_VERSION -mkdir -p $froot$installdir -mkdir -p $froot/usr/share/doc/$dirname +froot="$builddir/$pkgname-$AOMP_VERSION" +mkdir -p "$froot$installdir" +mkdir -p "$froot/usr/share/doc/$dirname" echo echo "--- PREPARING fake root directory $froot" -sed -i -e "s|//|/|g" $BUILD_DIR/build/rocmlibs/installed_files.txt +sed -i -e "s|//|/|g" "$BUILD_DIR/build/rocmlibs/installed_files.txt" if [ "$pkgname" == "aomp-hip-libraries" ]; then - cat $BUILD_DIR/build/rocmlibs/installed_files.txt | xargs -I {} cp -d --parents {} $froot + xargs -I {} cp -d --parents {} "$froot" < "$BUILD_DIR/build/rocmlibs/installed_files.txt" else # Create a temporary file to exclude math libraries if present - if [ -f $BUILD_DIR/build/rocmlibs/installed_files.txt ]; then + if [ -f "$BUILD_DIR/build/rocmlibs/installed_files.txt" ]; then tmpfile=/tmp/tmp_installed_files.txt - rm -f $tmpfile - cp $BUILD_DIR/build/rocmlibs/installed_files.txt $tmpfile - sed -i -e "s/\/usr\/lib\/$dirname\///g" $tmpfile - echo "rocblas" >> $tmpfile - echo "lib/rocblas" >> $tmpfile + rm -f "$tmpfile" + cp "$BUILD_DIR/build/rocmlibs/installed_files.txt" "$tmpfile" + sed -i -e "s/\/usr\/lib\/$dirname\///g" "$tmpfile" + echo "rocblas" >> "$tmpfile" + echo "lib/rocblas" >> "$tmpfile" fi - rsync -a $sourcedir"/" --exclude ".*" --exclude "rocblas" --exclude "rocsparse" --exclude "rocprim" --exclude "hipblas" --exclude "rocsolver" --exclude "hipblas-common" --exclude-from=$tmpfile $froot$installdir + rsync -a "$sourcedir/" --exclude ".*" --exclude "rocblas" --exclude "rocsparse" --exclude "rocprim" --exclude "hipblas" --exclude "rocsolver" --exclude "hipblas-common" --exclude-from="$tmpfile" "$froot$installdir" fi if [ "$pkgname" == "aomp-hip-libraries" ]; then - mkdir -p $froot/usr/share/doc/${pkgname}_${AOMP_VERSION_STRING} - cp $debdir/copyright $froot/usr/share/doc/${pkgname}_${AOMP_VERSION_STRING}/. - cp $debdir/LICENSE.TXT $froot/usr/share/doc/${pkgname}_${AOMP_VERSION_STRING}/. + mkdir -p "$froot/usr/share/doc/${pkgname}_${AOMP_VERSION_STRING}" + cp "$debdir/copyright" "$froot/usr/share/doc/${pkgname}_${AOMP_VERSION_STRING}/." + cp "$debdir/LICENSE.TXT" "$froot/usr/share/doc/${pkgname}_${AOMP_VERSION_STRING}/." else - cp $debdir/copyright $froot/usr/share/doc/$dirname/. - cp $debdir/LICENSE.TXT $froot/usr/share/doc/$dirname/. + cp "$debdir/copyright" "$froot/usr/share/doc/$dirname/." + cp "$debdir/LICENSE.TXT" "$froot/usr/share/doc/$dirname/." fi -cp -rp $debdir $froot/debian +cp -rp "$debdir" "$froot/debian" if [ "$DEBARCH" != "amd64" ] ; then - echo sed -i -e"s/amd64/$DEBARCH/" $froot/debian/control - sed -i -e"s/amd64/$DEBARCH/" $froot/debian/control + echo "sed -i -e\"s/amd64/$DEBARCH/\" $froot/debian/control" + sed -i -e"s/amd64/$DEBARCH/" "$froot/debian/control" fi if [ "$pkgname" == "aomp-hip-libraries" ]; then - echo sed -i -e"s/Source: aomp/Source: $pkgname/" $froot/debian/control - sed -i -e"s/Source: aomp/Source: $pkgname/" $froot/debian/control - echo sed -i -e"s/Package: aomp/Package: $pkgname/" $froot/debian/control - sed -i -e"s/Package: aomp/Package: $pkgname/" $froot/debian/control + echo "sed -i -e\"s/Source: aomp/Source: $pkgname/\" $froot/debian/control" + sed -i -e"s/Source: aomp/Source: $pkgname/" "$froot/debian/control" + echo "sed -i -e\"s/Package: aomp/Package: $pkgname/\" $froot/debian/control" + sed -i -e"s/Package: aomp/Package: $pkgname/" "$froot/debian/control" fi # Make the install and links file version specific if [ "$pkgname" == "aomp-hip-libraries" ]; then - echo "usr/lib/$dirname" > $froot/debian/$pkgname.install - echo "usr/share/doc/${pkgname}_${AOMP_VERSION_STRING}" >> $froot/debian/$pkgname.install + { + echo "usr/lib/$dirname" + echo "usr/share/doc/${pkgname}_${AOMP_VERSION_STRING}" + } > "$froot/debian/$pkgname.install" else - echo "usr/lib/$dirname usr/lib/aomp" > $froot/debian/$pkgname.links - echo "usr/lib/$dirname/bin/aompExtractRegion /usr/bin/aompExtractRegion" >> $froot/debian/$pkgname.links - echo "usr/lib/$dirname/bin/cloc.sh /usr/bin/cloc.sh" >> $froot/debian/$pkgname.links - echo "usr/lib/$dirname/bin/mymcpu /usr/bin/mymcpu" >> $froot/debian/$pkgname.links - echo "usr/lib/$dirname/bin/mygpu /usr/bin/mygpu" >> $froot/debian/$pkgname.links - echo "usr/lib/$dirname/bin/aompversion /usr/bin/aompversion" >> $froot/debian/$pkgname.links - echo "usr/lib/$dirname/bin/aompcc /usr/bin/aompcc" >> $froot/debian/$pkgname.links - echo "usr/lib/$dirname/bin/gpurun /usr/bin/gpurun" >> $froot/debian/$pkgname.links - echo "usr/lib/$dirname" > $froot/debian/$pkgname.install - echo "usr/share/doc/$dirname" >> $froot/debian/$pkgname.install + { + echo "usr/lib/$dirname usr/lib/aomp" + echo "usr/lib/$dirname/bin/aompExtractRegion /usr/bin/aompExtractRegion" + echo "usr/lib/$dirname/bin/cloc.sh /usr/bin/cloc.sh" + echo "usr/lib/$dirname/bin/mymcpu /usr/bin/mymcpu" + echo "usr/lib/$dirname/bin/mygpu /usr/bin/mygpu" + echo "usr/lib/$dirname/bin/aompversion /usr/bin/aompversion" + echo "usr/lib/$dirname/bin/aompcc /usr/bin/aompcc" + echo "usr/lib/$dirname/bin/gpurun /usr/bin/gpurun" + } > "$froot/debian/$pkgname.links" + { + echo "usr/lib/$dirname" + echo "usr/share/doc/$dirname" + } > "$froot/debian/$pkgname.install" fi echo echo "--- BUILDING SOURCE TARBALL $builddir/${pkgname}_$AOMP_VERSION.orig.tar.gz " echo " FROM FAKEROOT: $froot " -cd $builddir -tar -czf $builddir/${pkgname}_$AOMP_VERSION.orig.tar.gz ${pkgname}-$AOMP_VERSION +cd "$builddir" || exit +tar -czf "$builddir/${pkgname}_$AOMP_VERSION.orig.tar.gz" "${pkgname}-$AOMP_VERSION" echo " DONE BUILDING TARBALL" echo echo "--- RUNNING dch TO MANANGE CHANGELOG " -cd $froot +cd "$froot" || exit # Skip changelog editor for docker release builds. -echo dch -v ${AOMP_VERSION_STRING} -e --package $pkgname +echo "dch -v ${AOMP_VERSION_STRING} -e --package $pkgname" if [ "$DOCKER" == "1" ]; then - dch -v ${AOMP_VERSION_STRING} --package $pkgname "" + dch -v "${AOMP_VERSION_STRING}" --package "$pkgname" "" else - dch -v ${AOMP_VERSION_STRING} --package $pkgname + dch -v "${AOMP_VERSION_STRING}" --package "$pkgname" fi # Backup the debian changelog to git repo, be sure to commit this -cp -p $froot/debian/changelog $debdir/. +cp -p "$froot/debian/changelog" "$debdir/." -debuildargs="-us -uc -rsudo --lintian-opts -X files,changelog-file,fields" +declare -a debuildargs + +debuildargs=(-us -uc -rsudo --lintian-opts -X "files,changelog-file,fields") echo -echo "--- BUILDING DEB: debuild $debuildargs " -debuild $debuildargs +echo "--- BUILDING DEB: debuild" "${debuildargs[@]}" +debuild "${debuildargs[@]}" dbrc=$? echo " DONE BUILDING DEB WITH RC: $dbrc" if [ "$dbrc" != "0" ] ; then echo "ERROR during debuild" - exit $dbrc + exit "$dbrc" fi # Backup debhelper log to git repo , be sure to commit this -cp -p $froot/debian/${pkgname}.debhelper.log $debdir/. +cp -p "$froot/debian/${pkgname}.debhelper.log" "$debdir/." -mkdir -p $tmpdir/debs -if [ -f $tmpdir/debs/${pkgname}_${AOMP_VERSION_STRING}_$DEBARCH.deb ] ; then - rm -f $tmpdir/debs/${pkgname}_${AOMP_VERSION_STRING}_$DEBARCH.deb +mkdir -p "$tmpdir/debs" +if [ -f "$tmpdir/debs/${pkgname}_${AOMP_VERSION_STRING}_$DEBARCH.deb" ] ; then + rm -f "$tmpdir/debs/${pkgname}_${AOMP_VERSION_STRING}_$DEBARCH.deb" fi # Insert the os release name -cp -p $builddir/${pkgname}_${AOMP_VERSION_STRING}_$DEBARCH.deb $tmpdir/debs/${pkgname}_${RELSTRING}_${AOMP_VERSION_STRING}_$DEBARCH.deb +cp -p "$builddir/${pkgname}_${AOMP_VERSION_STRING}_$DEBARCH.deb" "$tmpdir/debs/${pkgname}_${RELSTRING}_${AOMP_VERSION_STRING}_$DEBARCH.deb" echo echo "DONE Debian package is in $tmpdir/debs/${pkgname}_${AOMP_VERSION_STRING}_$DEBARCH.deb" echo diff --git a/bin/build-rpm.sh b/bin/build-rpm.sh index 4253c7809..64f5870ea 100755 --- a/bin/build-rpm.sh +++ b/bin/build-rpm.sh @@ -4,9 +4,9 @@ # # --- Start standard header to set AOMP environment variables ---- -realpath=`realpath $0` -thisdir=`dirname $realpath` -. $thisdir/aomp_common_vars +realpath=$(realpath "$0") +thisdir=$(dirname "$realpath") +. "$thisdir/aomp_common_vars" # --- end standard header ---- if [ "$1" == aomp-hip-libraries ]; then @@ -15,8 +15,8 @@ else pkgname=aomp fi -osname=$(cat /etc/os-release | grep -e ^NAME=) -version=$(cat /etc/os-release | grep -e ^VERSION=) +osname=$(grep -e ^NAME= < /etc/os-release) +version=$(grep -e ^VERSION= < /etc/os-release) rpmname="Not_Found" if [[ $osname =~ "Red Hat" ]]; then echo "Red Hat found!!!" @@ -41,110 +41,110 @@ fi echo "rpmname: $rpmname" +# For the life of this script, change home directory +curdir=$PWD +tmphome="/tmp/$USER/home" +savehome=$HOME +export HOME=$tmphome + # Ensure the rpmbuild tool from rpm-build package is available -rpmbuild_loc=`which rpmbuild 2>/dev/null` +rpmbuild_loc=$(which rpmbuild 2>/dev/null) if [ -z "$rpmbuild_loc" ];then echo echo "ERROR: You need to install rpm-build for $0" echo export HOME=$savehome - cd $curdir + cd "$curdir" || exit exit 1 fi -# For the life of this script, change home directory -curdir=$PWD -tmphome="/tmp/$USER/home" -savehome=$HOME -export HOME=$tmphome - -echo --- checking for $tmphome/rpmbuild +echo "--- checking for $tmphome/rpmbuild" if [ -d "$tmphome/rpmbuild" ] ; then - echo --- cleanup from previous call to $0 - echo --- rm -rf $tmphome/rpmbuild - rm -rf $tmphome/rpmbuild + echo "--- cleanup from previous call to $0" + echo "--- rm -rf $tmphome/rpmbuild" + rm -rf "$tmphome/rpmbuild" fi -dirname=aomp_${AOMP_VERSION_STRING} -echo --- mkdir -p $tmphome/rpmbuild/SOURCES/$rpmname/usr/lib -mkdir -p $tmphome/rpmbuild/SOURCES/$rpmname/usr/lib/$dirname +dirname="aomp_${AOMP_VERSION_STRING}" +echo "--- mkdir -p $tmphome/rpmbuild/SOURCES/$rpmname/usr/lib" +mkdir -p "$tmphome/rpmbuild/SOURCES/$rpmname/usr/lib/$dirname" if [ "$pkgname" == "aomp-hip-libraries" ]; then echo "cat $BUILD_DIR/build/rocmlibs/installed_files.txt | xargs -I {} cp -d --parents {} ~/rpmbuild/SOURCES/$rpmname" - cat $BUILD_DIR/build/rocmlibs/installed_files.txt | xargs -I {} cp -d --parents {} ~/rpmbuild/SOURCES/$rpmname + xargs -I {} cp -d --parents {} "$HOME/rpmbuild/SOURCES/$rpmname" < "$BUILD_DIR/build/rocmlibs/installed_files.txt" else # Create a temporary file to exclude math libraries if present - if [ -f $BUILD_DIR/build/rocmlibs/installed_files.txt ]; then + if [ -f "$BUILD_DIR/build/rocmlibs/installed_files.txt" ]; then tmpfile=/tmp/tmp_installed_files.txt - rm -f $tmpfile - cp $BUILD_DIR/build/rocmlibs/installed_files.txt $tmpfile - sed -i -e "s/\/usr\/lib\/$dirname\///g" $tmpfile + rm -f "$tmpfile" + cp "$BUILD_DIR/build/rocmlibs/installed_files.txt" "$tmpfile" + sed -i -e "s/\/usr\/lib\/$dirname\///g" "$tmpfile" # Avoid copying empty rocblas folders - echo "rocblas" >> $tmpfile - echo "lib/rocblas" >> $tmpfile + echo "rocblas" >> "$tmpfile" + echo "lib/rocblas" >> "$tmpfile" fi # Exclude hidden files and math libraries from aomp package - echo rsync -a --delete /usr/lib/$dirname/ --exclude ".*" --exclude-from=$tmpfile ~/rpmbuild/SOURCES/$rpmname/usr/lib/$dirname - rsync -a --delete /usr/lib/$dirname"/" --exclude ".*" --exclude-from=$tmpfile ~/rpmbuild/SOURCES/$rpmname/usr/lib/$dirname + echo "rsync -a --delete /usr/lib/$dirname/ --exclude ".*" --exclude-from=$tmpfile ~/rpmbuild/SOURCES/$rpmname/usr/lib/$dirname" + rsync -a --delete "/usr/lib/$dirname/" --exclude ".*" --exclude-from="$tmpfile" "$HOME/rpmbuild/SOURCES/$rpmname/usr/lib/$dirname" fi -echo --- mkdir -p $tmphome/rpmbuild/SPECS -mkdir -p $tmphome/rpmbuild/SPECS +echo "--- mkdir -p $tmphome/rpmbuild/SPECS" +mkdir -p "$tmphome/rpmbuild/SPECS" -tmpspecfile=$tmphome/rpmbuild/SPECS/aomp.spec -echo --- cp $thisdir/aomp.spec $tmpspecfile -cp $thisdir/aomp.spec $tmpspecfile -echo --- sed -ie "s/__VERSION1/$AOMP_VERSION/" $tmpspecfile -sed -ie "s/__VERSION1/$AOMP_VERSION/" $tmpspecfile -sed -ie "s/__VERSION2_STRING/$AOMP_VERSION_STRING/" $tmpspecfile -sed -ie "s/__VERSION3_MOD/$AOMP_VERSION_MOD/" $tmpspecfile +tmpspecfile="$tmphome/rpmbuild/SPECS/aomp.spec" +echo "--- cp $thisdir/aomp.spec $tmpspecfile" +cp "$thisdir/aomp.spec" "$tmpspecfile" +echo "--- sed -ie \"s/__VERSION1/$AOMP_VERSION/\" $tmpspecfile" +sed -ie "s/__VERSION1/$AOMP_VERSION/" "$tmpspecfile" +sed -ie "s/__VERSION2_STRING/$AOMP_VERSION_STRING/" "$tmpspecfile" +sed -ie "s/__VERSION3_MOD/$AOMP_VERSION_MOD/" "$tmpspecfile" # Replace rpmname place holder with actual $rpmname -sed -ie "s/Name: \$rpmname/Name: $rpmname/" $tmpspecfile -sed -ie "s/\$rpmname.tar.gz/$rpmname.tar.gz/" $tmpspecfile -cat $thisdir/debian/changelog | grep -v " --" | grep -v "UNRELEASED" >>$tmpspecfile - -echo --- cd ~/rpmbuild/SOURCES -cd ~/rpmbuild/SOURCES - -if [ ! -d ${rpmname} ] ; then - echo - echo "ERROR: Missing directory $tmphome/rpmbuild/SOURCES/${rpmname}" - echo - export HOME=$savehome - cd $curdir - exit 1 +sed -ie "s/Name: \$rpmname/Name: $rpmname/" "$tmpspecfile" +sed -ie "s/\$rpmname.tar.gz/$rpmname.tar.gz/" "$tmpspecfile" +grep -v " --" < "$thisdir/debian/changelog" | grep -v "UNRELEASED" >>"$tmpspecfile" + +echo "--- cd ~/rpmbuild/SOURCES" +cd ~/rpmbuild/SOURCES || exit + +if [ ! -d "${rpmname}" ] ; then + echo + echo "ERROR: Missing directory $tmphome/rpmbuild/SOURCES/${rpmname}" + echo + export HOME=$savehome + cd "$curdir" || exit + exit 1 fi # tar and zip the package contents -echo --- rm -f ${rpmname}.tar.gz -rm -f ${rpmname}.tar.gz -echo --- tar zcf ${rpmname}.tar.gz ${rpmname} -tar zcf ${rpmname}.tar.gz ${rpmname} -echo --- ls -l $PWD/${rpmname}.tar.gz -ls -l $PWD/${rpmname}.tar.gz -echo --- done tar +echo "--- rm -f ${rpmname}.tar.gz" +rm -f "${rpmname}.tar.gz" +echo "--- tar zcf ${rpmname}.tar.gz ${rpmname}" +tar zcf "${rpmname}.tar.gz" "${rpmname}" +echo "--- ls -l $PWD/${rpmname}.tar.gz" +ls -l "$PWD/${rpmname}.tar.gz" +echo "--- done tar" # build the package echo -echo ------ STARTING rpmbuild ----- +echo "------ STARTING rpmbuild -----" echo -echo rpmbuild --define "_topdir $tmphome/rpmbuild" -ba -v ../SPECS/aomp.spec +echo "rpmbuild --define \"_topdir $tmphome/rpmbuild\" -ba -v ../SPECS/aomp.spec" rpmbuild --define "_topdir $tmphome/rpmbuild" -ba -v ../SPECS/aomp.spec rc=$? -echo ------ DONE rpmbuild rc is $rc ----- +echo "------ DONE rpmbuild rc is $rc -----" if [ $rc != 0 ] ; then echo echo "ERROR during rpmbuild" echo export HOME=$savehome - cd $curdir + cd "$curdir" || exit exit 1 fi outfile="$tmphome/rpmbuild/RPMS/x86_64/${rpmname}-${AOMP_VERSION_STRING}.x86_64.rpm" echo " --- The output rpm file is $outfile." echo "--- ls -lh $outfile" -ls -lh $outfile +ls -lh "$outfile" echo export HOME=$savehome -cd $curdir +cd "$curdir" || exit diff --git a/bin/build_amdsmi.sh b/bin/build_amdsmi.sh index ae52cd9da..ffa078e5e 100755 --- a/bin/build_amdsmi.sh +++ b/bin/build_amdsmi.sh @@ -29,9 +29,9 @@ # SOFTWARE. # --- Start standard header to set AOMP environment variables ---- -realpath=`realpath $0` -thisdir=`dirname $realpath` -. $thisdir/aomp_common_vars +realpath=$(realpath "$0") +thisdir=$(dirname "$realpath") +. "$thisdir/aomp_common_vars" # --- end standard header ---- RSMILIB_REPO_DIR=$AOMP_REPOS/amdsmi @@ -50,12 +50,12 @@ if [ "$1" == "-h" ] || [ "$1" == "help" ] || [ "$1" == "-help" ] ; then exit fi -if [ ! -d $RSMILIB_REPO_DIR ] ; then +if [ ! -d "$RSMILIB_REPO_DIR" ] ; then echo "ERROR: Missing repository $RSMILIB_REPO_DIR/" exit 1 fi -if [ ! -f $LLVM_INSTALL_LOC/bin/clang ] ; then +if [ ! -f "$LLVM_INSTALL_LOC/bin/clang" ] ; then echo "ERROR: Missing file $AOMP/bin/clang" echo " Build the AOMP llvm compiler in $AOMP first" echo " This is needed to build the device libraries" @@ -63,38 +63,35 @@ if [ ! -f $LLVM_INSTALL_LOC/bin/clang ] ; then exit 1 fi -# Make sure we can update the install directory -if [ "$1" == "install" ] ; then - $SUDO mkdir -p $AOMP_INSTALL_DIR - $SUDO touch $AOMP_INSTALL_DIR/testfile - if [ $? != 0 ] ; then - echo "ERROR: No update access to $AOMP_INSTALL_DIR" - exit 1 - fi - $SUDO rm $AOMP_INSTALL_DIR/testfile -fi +check_writable_installdir "$1" "$AOMP_INSTALL_DIR" -patchrepo $AOMP_REPOS/amdsmi +patchrepo "$AOMP_REPOS/amdsmi" if [ "$1" != "nocmake" ] && [ "$1" != "install" ] ; then if [ -d "$BUILD_DIR/build/amdsmi" ] ; then echo echo "FRESH START , CLEANING UP FROM PREVIOUS BUILD" - echo rm -rf $BUILD_DIR/build/amdsmi - rm -rf $BUILD_DIR/build/amdsmi + echo "rm -rf $BUILD_DIR/build/amdsmi" + rm -rf "$BUILD_DIR/build/amdsmi" fi - MYCMAKEOPTS="$AOMP_ORIGIN_RPATH -DCMAKE_BUILD_TYPE=$BUILDTYPE -DCMAKE_INSTALL_PREFIX=$AOMP_INSTALL_DIR -DCMAKE_BUILD_WITH_INSTALL_RPATH=ON -DCMAKE_INSTALL_RPATH='\$ORIGIN/../lib' -DCMAKE_EXE_LINKER_FLAGS='-Wl,--disable-new-dtags'" + declare -a MYCMAKEOPTS - mkdir -p $BUILD_DIR/build/amdsmi - cd $BUILD_DIR/build/amdsmi + MYCMAKEOPTS=("${AOMP_ORIGIN_RPATH[@]}" -DCMAKE_BUILD_TYPE="$BUILDTYPE" + -DCMAKE_INSTALL_PREFIX="$AOMP_INSTALL_DIR" + -DCMAKE_BUILD_WITH_INSTALL_RPATH=ON + -DCMAKE_INSTALL_RPATH="\$ORIGIN/../lib" + -DCMAKE_EXE_LINKER_FLAGS='-Wl,--disable-new-dtags') + + mkdir -p "$BUILD_DIR/build/amdsmi" + cd "$BUILD_DIR/build/amdsmi" || exit echo echo " -----Running amdsmi cmake ---- " - echo ${AOMP_CMAKE} $MYCMAKEOPTS $RSMILIB_REPO_DIR - ${AOMP_CMAKE} $MYCMAKEOPTS $RSMILIB_REPO_DIR - if [ $? != 0 ] ; then + echo "${AOMP_CMAKE} $(shquot "${MYCMAKEOPTS[@]}") $RSMILIB_REPO_DIR" + + if ! ${AOMP_CMAKE} "${MYCMAKEOPTS[@]}" "$RSMILIB_REPO_DIR"; then echo "ERROR amdsmi cmake failed. Cmake flags" - echo " $MYCMAKEOPTS" + echo " $(shquot "${MYCMAKEOPTS[@]}")" exit 1 fi fi @@ -103,11 +100,11 @@ if [ "$1" = "cmake" ]; then exit 0 fi -cd $BUILD_DIR/build/amdsmi +cd "$BUILD_DIR/build/amdsmi" || exit echo echo " -----Running make for amdsmi ---- " -make -j $AOMP_JOB_THREADS -if [ $? != 0 ] ; then + +if ! make -j "$AOMP_JOB_THREADS"; then echo " " echo "ERROR: make -j $AOMP_JOB_THREADS FAILED" echo "To restart:" @@ -125,13 +122,12 @@ fi # ----------- Install only if asked ---------------------------- if [ "$1" == "install" ] ; then - cd $BUILD_DIR/build/amdsmi + cd "$BUILD_DIR/build/amdsmi" || exit echo echo " -----Installing to $AOMP_INSTALL_DIR ----- " - $SUDO make install - if [ $? != 0 ] ; then + if ! $SUDO make install; then echo "ERROR make install failed " exit 1 fi - removepatch $AOMP_REPOS/amdsmi + removepatch "$AOMP_REPOS/amdsmi" fi diff --git a/bin/build_aomp.sh b/bin/build_aomp.sh index ce46351a0..9f1db2a05 100755 --- a/bin/build_aomp.sh +++ b/bin/build_aomp.sh @@ -4,19 +4,20 @@ # # --- Start standard header to set AOMP environment variables ---- -realpath=`realpath $0` -thisdir=`dirname $realpath` -. $thisdir/aomp_common_vars +realpath=$(realpath "$0") +thisdir=$(dirname "$realpath") +. "$thisdir/aomp_common_vars" # --- end standard header ---- function build_aomp_component() { - osversion=$(cat /etc/os-release | grep -e ^VERSION_ID) + osversion=$(grep -e ^VERSION_ID < /etc/os-release) - if [[ $osversion =~ '"7.' ]]; then - echo "OS version 7 found `cat /etc/os-release`" + if [[ $osversion =~ \"7\. ]]; then + echo "OS version 7 found $(cat /etc/os-release)" + # shellcheck disable=1091 [ -f /opt/rh/devtoolset-7/enable ] && . /opt/rh/devtoolset-7/enable - elif [[ $osversion =~ '"8' ]]; then - echo "OS version 8 found `cat /etc/os-release`" + elif [[ $osversion =~ \"8\. ]]; then + echo "OS version 8 found $(cat /etc/os-release)" echo echo "Get updated gcc 8: export PATH=/usr/bin:\$PATH" export PATH=/usr/bin:$PATH @@ -24,38 +25,38 @@ function build_aomp_component() { fi _stats_dir=$AOMP_INSTALL_DIR/.aomp_component_stats - mkdir -p $_stats_dir - touch $_stats_dir/.${COMPONENT}.ts - start_date=`date` - start_secs=`date +%s` + mkdir -p "$_stats_dir" + touch "$_stats_dir/.${COMPONENT}.ts" + start_date=$(date) + start_secs=$(date +%s) - $AOMP_REPOS/$AOMP_REPO_NAME/bin/build_$COMPONENT.sh "$@" + "$AOMP_REPOS/$AOMP_REPO_NAME/bin/build_$COMPONENT.sh" "$@" rc=$? if [ $rc != 0 ] ; then echo " !!! build_aomp.sh: BUILD FAILED FOR COMPONENT $COMPONENT !!!" exit $rc fi if [ $# -eq 0 ] ; then - $AOMP_REPOS/$AOMP_REPO_NAME/bin/build_$COMPONENT.sh install + "$AOMP_REPOS/$AOMP_REPO_NAME/bin/build_$COMPONENT.sh" install rc=$? if [ $rc != 0 ] ; then echo " !!! build_aomp.sh: INSTALL FAILED FOR COMPONENT $COMPONENT !!!" exit $rc fi # gather stats on artifacts installed with this component build - end_date=`date` - end_secs=`date +%s` - find $AOMP_INSTALL_DIR -type f -newercc $_stats_dir/.${COMPONENT}.ts | xargs wc -c >$_stats_dir/$COMPONENT.files - echo "COMPONENT $COMPONENT START : $start_date " >$_stats_dir/$COMPONENT.stats - echo "COMPONENT $COMPONENT END : $end_date" >>$_stats_dir/$COMPONENT.stats - echo "COMPONENT $COMPONENT TIME : $(( $end_secs - $start_secs )) seconds" >> $_stats_dir/$COMPONENT.stats - file_count=`wc -l $_stats_dir/$COMPONENT.files | cut -d" " -f1` + end_date=$(date) + end_secs=$(date +%s) + find "$AOMP_INSTALL_DIR" -type f -newercc "$_stats_dir/.${COMPONENT}.ts" -exec wc -c {} \; > "$_stats_dir/$COMPONENT.files" + echo "COMPONENT $COMPONENT START : $start_date " >"$_stats_dir/$COMPONENT.stats" + echo "COMPONENT $COMPONENT END : $end_date" >>"$_stats_dir/$COMPONENT.stats" + echo "COMPONENT $COMPONENT TIME : $(( end_secs - start_secs )) seconds" >> "$_stats_dir/$COMPONENT.stats" + file_count=$(wc -l "$_stats_dir/$COMPONENT.files" | cut -d" " -f1) file_count=$(( file_count -1 )) - echo "COMPONENT $COMPONENT FILES : $file_count " >> $_stats_dir/$COMPONENT.stats - new_bytes=`grep " total" $_stats_dir/$COMPONENT.files | cut -d" " -f1 | awk '{sum += $1} END {print sum}'` + echo "COMPONENT $COMPONENT FILES : $file_count " >> "$_stats_dir/$COMPONENT.stats" + new_bytes=$(grep " total" "$_stats_dir/$COMPONENT.files" | cut -d" " -f1 | awk '{sum += $1} END {print sum}') k_bytes=$(( new_bytes / 1024 )) m_bytes=$(( k_bytes / 1024 )) - echo "COMPONENT $COMPONENT SIZE : $k_bytes KB $m_bytes MB " >> $_stats_dir/$COMPONENT.stats + echo "COMPONENT $COMPONENT SIZE : $k_bytes KB $m_bytes MB " >> "$_stats_dir/$COMPONENT.stats" fi } @@ -69,23 +70,23 @@ fi # Test update access to AOMP_INSTALL_DIR # This should be done early to ensure sudo (if set) does not prompt for password later -$TOPSUDO mkdir -p $AOMP_INSTALL_DIR -if [ $? != 0 ] ; then + +if ! $TOPSUDO mkdir -p "$AOMP_INSTALL_DIR"; then echo "ERROR: $TOPSUDO mkdir failed, No update access to $AOMP_INSTALL_DIR" exit 1 fi -$TOPSUDO touch $AOMP_INSTALL_DIR/testfile -if [ $? != 0 ] ; then + +if ! $TOPSUDO touch "$AOMP_INSTALL_DIR/testfile"; then echo "ERROR: $TOPSUDO touch failed, No update access to $AOMP_INSTALL_DIR" exit 1 fi -$TOPSUDO rm $AOMP_INSTALL_DIR/testfile +$TOPSUDO rm "$AOMP_INSTALL_DIR/testfile" #Check for gawk on Ubuntu, which is needed for the flang build. GAWK=$(gawk --version | grep "^GNU Awk") -OS=$(cat /etc/os-release | grep "^NAME=") +OS=$(grep "^NAME=" < /etc/os-release) -if [[ -z $GAWK ]] && [[ "$OS" == *"Ubuntu"* ]] ; then +if [[ -z "$GAWK" ]] && [[ "$OS" == *"Ubuntu"* ]] ; then echo echo "Build Error: gawk was not found and is required for building flang! Please run 'sudo apt-get install gawk' and run build_aomp.sh again." echo @@ -104,7 +105,7 @@ components="$AOMP_COMPONENT_LIST" if [ "$AOMP_STANDALONE_BUILD" == 1 ] ; then components="$components rocprofiler-register rocr openmp offload extras comgr rocminfo rocm_smi_lib amdsmi" - _hostarch=`uname -m` + _hostarch=$(uname -m) # The rocclr architecture is very x86 centric so it will not build on ppc64. Without # rocclr, we have no HIP or OpenCL for ppc64 :-( However, rocr works for ppc64 so AOMP works. if [ "$_hostarch" == "x86_64" ] ; then @@ -120,7 +121,7 @@ if [ "$AOMP_STANDALONE_BUILD" == 1 ] ; then fi # ROCdbgapi requires atleast g++ 7 - GPPVERS=`g++ --version | grep g++ | cut -d")" -f2 | cut -d"." -f1` + GPPVERS=$(g++ --version | grep g++ | cut -d")" -f2 | cut -d"." -f1) if [ "$AOMP_BUILD_DEBUG" == "1" ] && [ "$GPPVERS" -ge 7 ]; then components="$components rocdbgapi rocgdb" fi @@ -142,7 +143,7 @@ else components="$components offload" fi if [ "$AOMP_SKIP_FLANG" == 0 ] ; then - if [ "$SANITIZER" == 1 ] && [ -f $AOMP/bin/flang-classic ] ; then + if [ "$SANITIZER" == 1 ] && [ -f "$AOMP/bin/flang-classic" ] ; then components="$components pgmath flang flang_runtime" else components="$components llvm-classic flang-classic pgmath flang flang_runtime" @@ -154,10 +155,11 @@ echo "COMPONENTS:$components" #Partial build options. Check if argument was given. if [ -n "$1" ] ; then found=0 + list="" #Start build from given component (./build_aomp.sh continue openmp) if [ "$1" == 'continue' ] ; then for COMPONENT in $components ; do - if [ $COMPONENT == "$2" ] ; then + if [ "$COMPONENT" == "$2" ] ; then found=1 fi if [[ $found -eq 1 ]] ; then @@ -173,8 +175,8 @@ if [ -n "$1" ] ; then #Select which components to build(./build_aomp.sh select libdevice extras) elif [ "$1" == 'select' ] ; then - for ARGUMENT in $@ ; do - if [ $ARGUMENT != "$1" ] ; then + for ARGUMENT in "$@" ; do + if [ "$ARGUMENT" != "$1" ] ; then list+="$ARGUMENT " fi done @@ -202,8 +204,8 @@ echo " ================= END build_aomp.sh ===================" echo if [ "$AOMP_STANDALONE_BUILD" -eq 0 ]; then - cd $BUILD_DIR/build - classic_version=`ls flang-classic` + cd "$BUILD_DIR/build" || exit + classic_version=$(ls flang-classic) classic_install_manifest=$classic_version/install_manifest.txt if [ "$SANITIZER" == 1 ]; then install_manifest_orig=asan/install_manifest.txt @@ -212,20 +214,20 @@ if [ "$AOMP_STANDALONE_BUILD" -eq 0 ]; then fi # Clean file log - rm -f $BUILD_DIR/build/installed_files.txt + rm -f "$BUILD_DIR/build/installed_files.txt" for directory in ./*/; do - pushd $directory > /dev/null + pushd "$directory" > /dev/null || exit if [[ "$directory" =~ "flang-classic" ]]; then install_manifest=$classic_install_manifest else - install_manifest=$install_manifest_orig + install_manifest="$install_manifest_orig" fi if [ -f "$install_manifest" ]; then - cat $install_manifest >> $BUILD_DIR/build/installed_files.txt - echo "" >> $BUILD_DIR/build/installed_files.txt + cat "$install_manifest" >> "$BUILD_DIR/build/installed_files.txt" + echo "" >> "$BUILD_DIR/build/installed_files.txt" fi - popd > /dev/null + popd > /dev/null || exit done fi exit 0 diff --git a/bin/build_aomp_docker_release.sh b/bin/build_aomp_docker_release.sh index e071bea69..2231f5469 100755 --- a/bin/build_aomp_docker_release.sh +++ b/bin/build_aomp_docker_release.sh @@ -20,14 +20,14 @@ PATCHLOC=${PATCHLOC:-$DOCKERX/changelog.patch} host_packages=$HOME/aomp-docker-release/$AOMP_VERSION_STRING/packages #mkdir -p $docker_home; mkdir -p $docker_home/$AOMP_VERSION_STRING/packages -mkdir -p $host_packages +mkdir -p "$host_packages" declare -A url_array declare -A prereq_array # Populate url arrays with dockers -if [ -f $DOCKERX_HOST/docker-urls.txt ]; then +if [ -f "$DOCKERX_HOST/docker-urls.txt" ]; then while read -r line; do if [[ "$line" =~ "ubuntu-base" ]]; then url_array["ubuntu1804"]=$line @@ -50,7 +50,7 @@ if [ -f $DOCKERX_HOST/docker-urls.txt ]; then elif [[ "$line" =~ "suse" ]]; then url_array["sles15"]=$line fi - done < $DOCKERX_HOST/docker-urls.txt + done < "$DOCKERX_HOST/docker-urls.txt" else echo "Error: $DOCKERX_HOST/docker-urls.txt not found, exiting." exit 1 @@ -68,7 +68,7 @@ pip_install_2404="python3 -m venv /opt/venv; PATH=/opt/venv/bin:$PATH python3 -m # Populate prereq arrays prereq_array["ubuntu1804"]="apt-get -y update && apt-get install -y git cmake wget vim openssl libssl-dev libelf-dev kmod pciutils gcc g++ pkg-config libpci-dev libnuma-dev libffi-dev git python libopenmpi-dev gawk mesa-common-dev libtool python3 texinfo libbison-dev bison flex libbabeltrace-dev python3-pip libncurses5-dev liblzma-dev python3-setuptools python3-dev libpython3.8-dev libudev-dev libgmp-dev debianutils devscripts cli-common-dev rsync sudo && $pip_install" -p2rereq_array["ubuntu2004"]="apt-get -y update && apt-get install -y git cmake wget vim openssl libssl-dev libelf-dev kmod pciutils gcc g++ pkg-config libpci-dev libnuma-dev libffi-dev git python libopenmpi-dev gawk mesa-common-dev libtool python3 texinfo libbison-dev bison flex libbabeltrace-dev python3-pip libncurses5-dev liblzma-dev python3-setuptools python3-dev libpython3.8-dev libudev-dev libgmp-dev debianutils devscripts cli-common-dev rsync libsystemd-dev libdw-dev libgtest-dev sudo ccache libgmp-dev libmpfr-dev && $pip_install" +prereq_array["ubuntu2004"]="apt-get -y update && apt-get install -y git cmake wget vim openssl libssl-dev libelf-dev kmod pciutils gcc g++ pkg-config libpci-dev libnuma-dev libffi-dev git python libopenmpi-dev gawk mesa-common-dev libtool python3 texinfo libbison-dev bison flex libbabeltrace-dev python3-pip libncurses5-dev liblzma-dev python3-setuptools python3-dev libpython3.8-dev libudev-dev libgmp-dev debianutils devscripts cli-common-dev rsync libsystemd-dev libdw-dev libgtest-dev sudo ccache libgmp-dev libmpfr-dev && $pip_install" prereq_array["ubuntu2204"]="apt-get -y update && apt-get install -y git cmake wget vim openssl libssl-dev libelf-dev kmod pciutils gcc g++ pkg-config libpci-dev libnuma-dev libffi-dev git libopenmpi-dev gawk mesa-common-dev libtool python3 texinfo libbison-dev bison flex libbabeltrace-dev python3-pip libncurses5-dev liblzma-dev python3-setuptools python3-dev libpython3.10-dev libudev-dev libgmp-dev debianutils devscripts cli-common-dev rsync libsystemd-dev libdw-dev libgtest-dev libstdc++-12-dev sudo python3-lxml ccache libgmp-dev libmpfr-dev ocl-icd-opencl-dev libfmt-dev libmsgpack-dev python3-venv && $pip_install_2204" @@ -95,7 +95,7 @@ exports="export HOME=/home/release; export AOMP=/usr/lib/aomp; export AOMP_REPOS function getcontainer(){ echo docker ps -aqf "name=$docker_name" container=$(docker ps -aqf "name=$docker_name") - echo $container + echo "$container" } function setup(){ @@ -104,73 +104,73 @@ function setup(){ fi # Pull docker and start - docker pull ${url_array[$system]} - docker run -d -it --name="$docker_name" --network=host --privileged --group-add video --cap-add=SYS_PTRACE --device=/dev/kfd --device=/dev/dri --security-opt seccomp=unconfined --ipc=host -v $DOCKERX_HOST:$DOCKERX ${url_array[$system]} + docker pull "${url_array[$system]}" + docker run -d -it --name="$docker_name" --network=host --privileged --group-add video --cap-add=SYS_PTRACE --device=/dev/kfd --device=/dev/dri --security-opt seccomp=unconfined --ipc=host -v "$DOCKERX_HOST:$DOCKERX" "${url_array[$system]}" getcontainer - docker exec -i $docker_name /bin/bash -c "mkdir -p /home/release/git/aomp$AOMP_VERSION" + docker exec -i "$docker_name" /bin/bash -c "mkdir -p /home/release/git/aomp$AOMP_VERSION" if [ "$system" == "centos7" ]; then # Support for centos7 has reached EOL. Many of the repos no longer use the mirror list url and need switched to baseurl with vault url. - docker exec -i $docker_name /bin/bash -c "sed -i 's/mirrorlist=/#mirrorlist=/g' /etc/yum.repos.d/CentOS-*.repo; sed -i 's/#\s*baseurl=/baseurl=/g' /etc/yum.repos.d/CentOS-*.repo; sed -i 's/mirror\./vault\./g' /etc/yum.repos.d/CentOS-*.repo" - docker exec -i $docker_name /bin/bash -c "yum install -y epel-release centos-release-scl" - docker exec -i $docker_name /bin/bash -c "sed -i 's/mirrorlist=/#mirrorlist=/g' /etc/yum.repos.d/CentOS-*.repo; sed -i 's/#\s*baseurl=/baseurl=/g' /etc/yum.repos.d/CentOS-*.repo; sed -i 's/mirror\./vault\./g' /etc/yum.repos.d/CentOS-*.repo" + docker exec -i "$docker_name" /bin/bash -c "sed -i 's/mirrorlist=/#mirrorlist=/g' /etc/yum.repos.d/CentOS-*.repo; sed -i 's/#\s*baseurl=/baseurl=/g' /etc/yum.repos.d/CentOS-*.repo; sed -i 's/mirror\./vault\./g' /etc/yum.repos.d/CentOS-*.repo" + docker exec -i "$docker_name" /bin/bash -c "yum install -y epel-release centos-release-scl" + docker exec -i "$docker_name" /bin/bash -c "sed -i 's/mirrorlist=/#mirrorlist=/g' /etc/yum.repos.d/CentOS-*.repo; sed -i 's/#\s*baseurl=/baseurl=/g' /etc/yum.repos.d/CentOS-*.repo; sed -i 's/mirror\./vault\./g' /etc/yum.repos.d/CentOS-*.repo" fi # Change repos for Centos 8 to enable yum functionality again as it has been vaulted. if [ "$system" == "centos8" ]; then - docker exec -i $docker_name /bin/bash -c "cd /etc/yum.repos.d/; sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-*; sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-*" + docker exec -i "$docker_name" /bin/bash -c "cd /etc/yum.repos.d/; sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-*; sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-*" elif [ "$system" == "sles15" ]; then # Create symbolic link for libquadmath and rename /usr/src/packages as that prevents rpmbuild from getting the correct source directory. - docker exec -i $docker_name /bin/bash -c "ln -s /usr/lib64/libquadmath.so.0 /usr/lib64/libquadmath.so" - docker exec -i $docker_name /bin/bash -c "mv /usr/src/packages /usr/src/packages-temp" + docker exec -i "$docker_name" /bin/bash -c "ln -s /usr/lib64/libquadmath.so.0 /usr/lib64/libquadmath.so" + docker exec -i "$docker_name" /bin/bash -c "mv /usr/src/packages /usr/src/packages-temp" elif [ "$system" == "rhel8" ]; then - docker exec -i $docker_name /bin/bash -c "sed -i 's%^enabled = .*%enabled = 0%' /etc/yum.repos.d/ubi.repo" - docker cp $DOCKERX_HOST/rhel8.repo $container:/etc/yum.repos.d/redhat-partner.repo - docker exec -i $docker_name /bin/bash -c "yum -y install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm && rpm -ql epel-release" + docker exec -i "$docker_name" /bin/bash -c "sed -i 's%^enabled = .*%enabled = 0%' /etc/yum.repos.d/ubi.repo" + docker cp "$DOCKERX_HOST/rhel8.repo" "$container:/etc/yum.repos.d/redhat-partner.repo" + docker exec -i "$docker_name" /bin/bash -c "yum -y install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm && rpm -ql epel-release" elif [ "$system" == "rhel9" ]; then - docker exec -i $docker_name /bin/bash -c "sed -i 's%^enabled = .*%enabled = 0%' /etc/yum.repos.d/ubi.repo" - docker cp $DOCKERX_HOST/rhel9.repo $container:/etc/yum.repos.d/redhat-partner.repo - docker exec -i $docker_name /bin/bash -c "dnf install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm https://dl.fedoraproject.org/pub/epel/epel-next-release-latest-9.noarch.rpm && rpm -ql epel-release" - docker exec -i $docker_name /bin/bash -c "echo 'timeout=300' >> /etc/yum.conf" + docker exec -i "$docker_name" /bin/bash -c "sed -i 's%^enabled = .*%enabled = 0%' /etc/yum.repos.d/ubi.repo" + docker cp "$DOCKERX_HOST/rhel9.repo" "$container:/etc/yum.repos.d/redhat-partner.repo" + docker exec -i "$docker_name" /bin/bash -c "dnf install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm https://dl.fedoraproject.org/pub/epel/epel-next-release-latest-9.noarch.rpm && rpm -ql epel-release" + docker exec -i "$docker_name" /bin/bash -c "echo 'timeout=300' >> /etc/yum.conf" fi # Setup directory structure - docker exec -i $docker_name /bin/bash -c "$exports; mkdir -p $DOCKER_AOMP_REPOS; mkdir -p $DOCKER_HOME/logs" + docker exec -i "$docker_name"/bin/bash -c "$exports; mkdir -p $DOCKER_AOMP_REPOS; mkdir -p $DOCKER_HOME/logs" # Hardcode timezone for tzdata install to avoid an interactive prompt - docker exec -i $docker_name /bin/bash -c "$exports; ln -fs /usr/share/zoneinfo/America/Chicago /etc/localtime" + docker exec -i "$docker_name" /bin/bash -c "$exports; ln -fs /usr/share/zoneinfo/America/Chicago /etc/localtime" # Install prerequisite system packages if [ "$system" == "sles15" ]; then set +e - docker exec -i $docker_name /bin/bash -c "zypper refresh" - docker exec -i $docker_name /bin/bash -c "zypper addrepo https://download.opensuse.org/repositories/science/SLE_15_SP5/science.repo" - docker exec -i $docker_name /bin/bash -c "zypper addrepo https://download.opensuse.org/repositories/openSUSE:/Backports:/SLE-15-SP4/standard/openSUSE:Backports:SLE-15-SP4.repo" - docker exec -i $docker_name /bin/bash -c "zypper addrepo https://download.opensuse.org/repositories/openSUSE:/Backports:/SLE-15-SP3/standard/openSUSE:Backports:SLE-15-SP3.repo && zypper --gpg-auto-import-keys refresh" - docker exec -i $docker_name /bin/bash -c "$exports; ${prereq_array[$system]} 2>&1 | tee $DOCKER_HOME/logs/$system-preq.out" + docker exec -i "$docker_name" /bin/bash -c "zypper refresh" + docker exec -i "$docker_name" /bin/bash -c "zypper addrepo https://download.opensuse.org/repositories/science/SLE_15_SP5/science.repo" + docker exec -i "$docker_name" /bin/bash -c "zypper addrepo https://download.opensuse.org/repositories/openSUSE:/Backports:/SLE-15-SP4/standard/openSUSE:Backports:SLE-15-SP4.repo" + docker exec -i "$docker_name" /bin/bash -c "zypper addrepo https://download.opensuse.org/repositories/openSUSE:/Backports:/SLE-15-SP3/standard/openSUSE:Backports:SLE-15-SP3.repo && zypper --gpg-auto-import-keys refresh" + docker exec -i "$docker_name" /bin/bash -c "$exports; ${prereq_array[$system]} 2>&1 | tee $DOCKER_HOME/logs/$system-preq.out" set -e #docker exec -i $docker_name /bin/bash -c "zypper install -y --force libncurses6=6.1-150000.5.15.1; zypper install -y ncurses-devel" - docker exec -i $docker_name /bin/bash -c "mkdir /tmp/googletest; cd /tmp/googletest; git clone -b v1.14.0 https://github.com/google/googletest; cd googletest; mkdir build; cd build; cmake -DCMAKE_POSITION_INDEPENDENT_CODE=ON ..; make -j16; make -j16 install" + docker exec -i "$docker_name" /bin/bash -c "mkdir /tmp/googletest; cd /tmp/googletest; git clone -b v1.14.0 https://github.com/google/googletest; cd googletest; mkdir build; cd build; cmake -DCMAKE_POSITION_INDEPENDENT_CODE=ON ..; make -j16; make -j16 install" else - docker exec -i $docker_name /bin/bash -c "$exports; DEBIAN_FRONTEND=noninteractive ${prereq_array[$system]} 2>&1 | tee -a $DOCKER_HOME/logs/$system-preq.out" + docker exec -i "$docker_name" /bin/bash -c "$exports; DEBIAN_FRONTEND=noninteractive ${prereq_array[$system]} 2>&1 | tee -a $DOCKER_HOME/logs/$system-preq.out" fi if [ "$system" == "centos7" ]; then exports="$exports; source /opt/rh/devtoolset-9/enable" - docker exec -i $docker_name /bin/bash -c "$exports; cd /home/release; wget https://www.python.org/ftp/python/3.8.13/Python-3.8.13.tgz; tar xf Python-3.8.13.tgz; cd Python-3.8.13; ./configure --enable-optimizations --enable-shared; make altinstall; ln -s /usr/local/bin/python3.8 /usr/bin/python3; $pip_install_centos7" - docker exec -i $docker_name /bin/bash -c "$exports; cd /home/release; wget https://github.com/git/git/archive/refs/tags/v2.19.0.tar.gz; tar xzf v2.19.0.tar.gz; cd git-2.19.0; make -j16 prefix=/usr/local install" + docker exec -i "$docker_name" /bin/bash -c "$exports; cd /home/release; wget https://www.python.org/ftp/python/3.8.13/Python-3.8.13.tgz; tar xf Python-3.8.13.tgz; cd Python-3.8.13; ./configure --enable-optimizations --enable-shared; make altinstall; ln -s /usr/local/bin/python3.8 /usr/bin/python3; $pip_install_centos7" + docker exec -i "$docker_name" /bin/bash -c "$exports; cd /home/release; wget https://github.com/git/git/archive/refs/tags/v2.19.0.tar.gz; tar xzf v2.19.0.tar.gz; cd git-2.19.0; make -j16 prefix=/usr/local install" fi if [ "$system" == "sles15" ]; then - docker exec -i $docker_name /bin/bash -c "$exports; cd /home/release; wget https://www.python.org/ftp/python/3.8.13/Python-3.8.13.tgz; tar xf Python-3.8.13.tgz; cd Python-3.8.13; ./configure --enable-optimizations --enable-shared; make altinstall; rm /usr/bin/python3; ln -s /usr/local/bin/python3.8 /usr/bin/python3; $pip_install_sles15" + docker exec -i "$docker_name" /bin/bash -c "$exports; cd /home/release; wget https://www.python.org/ftp/python/3.8.13/Python-3.8.13.tgz; tar xf Python-3.8.13.tgz; cd Python-3.8.13; ./configure --enable-optimizations --enable-shared; make altinstall; rm /usr/bin/python3; ln -s /usr/local/bin/python3.8 /usr/bin/python3; $pip_install_sles15" fi # Run build_prerequisites.sh to build cmake, hwloc, rocmsmi, etc - docker exec -i $docker_name /bin/bash -c "$exports; cd $DOCKER_AOMP_REPOS; git clone -b aomp-$AOMP_VERSION_STRING https://github.com/ROCm-Developer-Tools/aomp; cd aomp/bin; ./build_prereq.sh 2>&1 | tee $DOCKER_HOME/logs/$system-prereq.out" + docker exec -i "$docker_name" /bin/bash -c "$exports; cd $DOCKER_AOMP_REPOS; git clone -b aomp-$AOMP_VERSION_STRING https://github.com/ROCm-Developer-Tools/aomp; cd aomp/bin; ./build_prereq.sh 2>&1 | tee $DOCKER_HOME/logs/$system-prereq.out" # Clone repos - docker exec -i $docker_name /bin/bash -c "$exports; cd $DOCKER_AOMP_REPOS/aomp/bin; SINGLE_BRANCH=1 ./clone_aomp.sh 2>&1 | tee $DOCKER_HOME/logs/$system-clone.out" + docker exec -i "$docker_name" /bin/bash -c "$exports; cd $DOCKER_AOMP_REPOS/aomp/bin; SINGLE_BRANCH=1 ./clone_aomp.sh 2>&1 | tee $DOCKER_HOME/logs/$system-clone.out" if [ "$AOMP_HIP_LIBRARIES" == "1" ]; then - docker exec -i $docker_name /bin/bash -c "$exports; cd $DOCKER_AOMP_REPOS/aomp/bin/rocmlibs; SINGLE_BRANCH=1 ./clone_rocmlibs.sh 2>&1 | tee $DOCKER_HOME/logs/$system-clone-rocmlibs.out" + docker exec -i "$docker_name" /bin/bash -c "$exports; cd $DOCKER_AOMP_REPOS/aomp/bin/rocmlibs; SINGLE_BRANCH=1 ./clone_rocmlibs.sh 2>&1 | tee $DOCKER_HOME/logs/$system-clone-rocmlibs.out" fi } @@ -178,44 +178,43 @@ function build(){ if [ "$system" == "ubuntu2404" ]; then exports="$exports; PATH=/opt/venv/bin:$PATH; python3 -m venv /opt/venv" fi - docker exec -i $docker_name /bin/bash -c "$exports; cd $DOCKER_AOMP_REPOS/aomp/bin; ./build_aomp.sh 2>&1 | tee $DOCKER_HOME/logs/$system-build.out" - docker exec -i $docker_name /bin/bash -c "$exports; cd $DOCKER_AOMP_REPOS/aomp/bin; AOMP=/usr/lib/aomp/llvm ./build_llvm-flang-rt-host-dev.sh 2>&1 | tee -a $DOCKER_HOME/logs/$system-build.out" + docker exec -i "$docker_name" /bin/bash -c "$exports; cd $DOCKER_AOMP_REPOS/aomp/bin; ./build_aomp.sh 2>&1 | tee $DOCKER_HOME/logs/$system-build.out" + docker exec -i "$docker_name" /bin/bash -c "$exports; cd $DOCKER_AOMP_REPOS/aomp/bin; AOMP=/usr/lib/aomp/llvm ./build_llvm-flang-rt-host-dev.sh 2>&1 | tee -a $DOCKER_HOME/logs/$system-build.out" if [ "$AOMP_HIP_LIBRARIES" == "1" ]; then - docker exec -i $docker_name /bin/bash -c "$exports; cd $DOCKER_AOMP_REPOS/aomp/bin/rocmlibs; ./build_rocmlibs.sh 2>&1 | tee $DOCKER_HOME/logs/$system-build-rocmlibs.out" + docker exec -i "$docker_name" /bin/bash -c "$exports; cd $DOCKER_AOMP_REPOS/aomp/bin/rocmlibs; ./build_rocmlibs.sh 2>&1 | tee $DOCKER_HOME/logs/$system-build-rocmlibs.out" fi } function package(){ getcontainer - docker exec -i $docker_name /bin/bash -c "grep 'END build_aomp' $DOCKER_HOME/logs/$system-build.out" - if [ "$?" -eq 0 ]; then + if docker exec -i "$docker_name" /bin/bash -c "grep 'END build_aomp' $DOCKER_HOME/logs/$system-build.out"; then if [[ "$system" =~ "ubuntu" ]]; then # Update changelog with user patch - docker exec -i $docker_name /bin/bash -c "$exports; cd $DOCKER_AOMP_REPOS/aomp/bin; patch debian/changelog /dockerx/changelog.patch" + docker exec -i "$docker_name" /bin/bash -c "$exports; cd $DOCKER_AOMP_REPOS/aomp/bin; patch debian/changelog /dockerx/changelog.patch" # Build aomp debian - docker exec -i $docker_name /bin/bash -c "$exports; cd $DOCKER_AOMP_REPOS/aomp/bin; ./build_fixups.sh; DOCKER=1 ./build-deb-aomp.sh 2>&1 | tee $DOCKER_HOME/logs/$system-package.out; git checkout debian/changelog" + docker exec -i "$docker_name" /bin/bash -c "$exports; cd $DOCKER_AOMP_REPOS/aomp/bin; ./build_fixups.sh; DOCKER=1 ./build-deb-aomp.sh 2>&1 | tee $DOCKER_HOME/logs/$system-package.out; git checkout debian/changelog" if [ "$AOMP_HIP_LIBRARIES" == "1" ]; then # Build aomp-hip-libraries debian - docker exec -i $docker_name /bin/bash -c "$exports; cd $DOCKER_AOMP_REPOS/aomp/bin; ./build_fixups.sh; DOCKER=1 ./build-deb-aomp.sh aomp-hip-libraries 2>&1 | tee $DOCKER_HOME/logs/$system-package-hip-libraries.out" + docker exec -i "$docker_name" /bin/bash -c "$exports; cd $DOCKER_AOMP_REPOS/aomp/bin; ./build_fixups.sh; DOCKER=1 ./build-deb-aomp.sh aomp-hip-libraries 2>&1 | tee $DOCKER_HOME/logs/$system-package-hip-libraries.out" fi # Copy to host - docker cp $container:/tmp/build-deb/debs/. $host_packages + docker cp "$container:/tmp/build-deb/debs/." "$host_packages" else # Update changelog with user patch and change aomp version header - docker exec -i $docker_name /bin/bash -c "$exports; cd $DOCKER_AOMP_REPOS/aomp/bin; patch debian/changelog /dockerx/changelog.patch; sed -i -e 's/aomp (.*)/aomp ($AOMP_VERSION_STRING)/g' debian/changelog" + docker exec -i "$docker_name" /bin/bash -c "$exports; cd $DOCKER_AOMP_REPOS/aomp/bin; patch debian/changelog /dockerx/changelog.patch; sed -i -e 's/aomp (.*)/aomp ($AOMP_VERSION_STRING)/g' debian/changelog" # Build aomp rpm if [ "$system" == "centos7" ]; then - docker exec -i $docker_name /bin/bash -c "$exports; cd $DOCKER_AOMP_REPOS/aomp/bin; ./build_fixups.sh; DOCKER=1 ./build-rpm.sh aomp_CENTOS_7 2>&1 | tee $DOCKER_HOME/logs/$system-package.out" + docker exec -i "$docker_name" /bin/bash -c "$exports; cd $DOCKER_AOMP_REPOS/aomp/bin; ./build_fixups.sh; DOCKER=1 ./build-rpm.sh aomp_CENTOS_7 2>&1 | tee $DOCKER_HOME/logs/$system-package.out" else - docker exec -i $docker_name /bin/bash -c "$exports; cd $DOCKER_AOMP_REPOS/aomp/bin; ./build_fixups.sh; DOCKER=1 ./build-rpm.sh 2>&1 | tee $DOCKER_HOME/logs/$system-package.out" + docker exec -i "$docker_name" /bin/bash -c "$exports; cd $DOCKER_AOMP_REPOS/aomp/bin; ./build_fixups.sh; DOCKER=1 ./build-rpm.sh 2>&1 | tee $DOCKER_HOME/logs/$system-package.out" # Copy to host - docker cp $container:/tmp/home/rpmbuild/RPMS/x86_64/. $host_packages + docker cp "$container:/tmp/home/rpmbuild/RPMS/x86_64/." "$host_packages" # Build aomp-hip-libraries rpm if [ "$AOMP_HIP_LIBRARIES" == "1" ]; then - docker exec -i $docker_name /bin/bash -c "$exports; cd $DOCKER_AOMP_REPOS/aomp/bin; ./build_fixups.sh; DOCKER=1 ./build-rpm.sh aomp-hip-libraries 2>&1 | tee $DOCKER_HOME/logs/$system-package-hip-libraries.out" + docker exec -i "$docker_name" /bin/bash -c "$exports; cd $DOCKER_AOMP_REPOS/aomp/bin; ./build_fixups.sh; DOCKER=1 ./build-rpm.sh aomp-hip-libraries 2>&1 | tee $DOCKER_HOME/logs/$system-package-hip-libraries.out" # Copy to host - docker cp $container:/tmp/home/rpmbuild/RPMS/x86_64/. $host_packages + docker cp "$container:/tmp/home/rpmbuild/RPMS/x86_64/." "$host_packages" fi fi fi @@ -256,7 +255,7 @@ do echo "---------------------------------------------------------------" exit ;; *) - echo $1 option not recognized ; exit 1 ;; + echo "$1 option not recognized"; exit 1 ;; esac shift 1 done @@ -265,7 +264,7 @@ done for system in $OS; do # Verify operating system is supported if [ "${prereq_array[$system]}" == "" ]; then - echo $system is not a supported os. Choose from: $default_os. + echo "$system is not a supported os. Choose from: $default_os." exit 1 fi echo "Building AOMP in $system docker." @@ -273,7 +272,7 @@ for system in $OS; do docker_name="$system-$AOMP_VERSION_STRING" # Setup/Build/Package for step in $target; do - echo Executing Step: $step + echo "Executing Step: $step" $step done done diff --git a/bin/build_bolt.sh b/bin/build_bolt.sh index 148a43134..cd95b11f3 100755 --- a/bin/build_bolt.sh +++ b/bin/build_bolt.sh @@ -28,9 +28,9 @@ # SOFTWARE. # --- Start standard header to set AOMP environment variables ---- -realpath=`realpath $0` -thisdir=`dirname $realpath` -. $thisdir/aomp_common_vars +realpath=$(realpath "$0") +thisdir=$(dirname "$realpath") +. "$thisdir/aomp_common_vars" # --- end standard header ---- REPO_DIR=$AOMP_REPOS/bolt @@ -47,7 +47,7 @@ if [ "$1" == "-h" ] || [ "$1" == "help" ] || [ "$1" == "-help" ] ; then exit fi -if [ ! -d $REPO_DIR ] ; then +if [ ! -d "$REPO_DIR" ] ; then echo "ERROR: Missing repository $REPO_DIR/" echo " Try these commands till bolt is part of the AOMP manifest:" echo @@ -57,7 +57,7 @@ if [ ! -d $REPO_DIR ] ; then exit 1 fi -if [ ! -f $AOMP/bin/clang ] ; then +if [ ! -f "$AOMP/bin/clang" ] ; then echo "ERROR: Missing file $AOMP/bin/clang" echo " Build the AOMP llvm compiler in $AOMP first" echo " This is needed to build the bolt libraries" @@ -65,49 +65,41 @@ if [ ! -f $AOMP/bin/clang ] ; then exit 1 fi -# Make sure we can update the install directory -if [ "$1" == "install" ] ; then - $SUDO mkdir -p $BOLT_INSTALL_DIR - $SUDO touch $BOLT_INSTALL_DIR/testfile - if [ $? != 0 ] ; then - echo "ERROR: No update access to $BOLT_INSTALL_DIR" - exit 1 - fi - $SUDO rm $BOLT_INSTALL_DIR/testfile -fi +check_writable_installdir "$1" "$BOLT_INSTALL_DIR" -patchrepo $AOMP_REPOS/bolt +patchrepo "$AOMP_REPOS/bolt" if [ "$1" != "nocmake" ] && [ "$1" != "install" ] ; then if [ -d "$BUILD_DIR/build/bolt" ] ; then echo echo "FRESH START , CLEANING UP FROM PREVIOUS BUILD" - echo rm -rf $BUILD_DIR/build/bolt - rm -rf $BUILD_DIR/build/bolt + echo "rm -rf $BUILD_DIR/build/bolt" + rm -rf "$BUILD_DIR/build/bolt" fi -MYCMAKEOPTS=" \ --DCMAKE_INSTALL_PREFIX=$BOLT_INSTALL_DIR \ -$AOMP_ORIGIN_RPATH \ --DCMAKE_C_COMPILER=$AOMP_CC_COMPILER \ --DCMAKE_CXX_COMPILER=$AOMP_CXX_COMPILER \ --DOPENMP_TEST_C_COMPILER=$AOMP_CC_COMPILER \ --DOPENMP_TEST_CXX_COMPILER=$AOMP_CXX_COMPILER \ --DCMAKE_BUILD_TYPE=Release \ --DOPENMP_ENABLE_LIBOMPTARGET=OFF \ --DLIBOMP_HEADERS_INSTALL_PATH=include/bolt \ --DLIBOMP_INSTALL_ALIASES=OFF \ --DLIBOMP_USE_ARGOBOTS=on" - - mkdir -p $BUILD_DIR/build/bolt - cd $BUILD_DIR/build/bolt +declare -a MYCMAKEOPTS + +MYCMAKEOPTS=(-DCMAKE_INSTALL_PREFIX="$BOLT_INSTALL_DIR" + "${AOMP_ORIGIN_RPATH[@]}" + -DCMAKE_C_COMPILER="$AOMP_CC_COMPILER" + -DCMAKE_CXX_COMPILER="$AOMP_CXX_COMPILER" + -DOPENMP_TEST_C_COMPILER="$AOMP_CC_COMPILER" + -DOPENMP_TEST_CXX_COMPILER="$AOMP_CXX_COMPILER" + -DCMAKE_BUILD_TYPE=Release + -DOPENMP_ENABLE_LIBOMPTARGET=OFF + -DLIBOMP_HEADERS_INSTALL_PATH=include/bolt + -DLIBOMP_INSTALL_ALIASES=OFF + -DLIBOMP_USE_ARGOBOTS=on) + + mkdir -p "$BUILD_DIR/build/bolt" + cd "$BUILD_DIR/build/bolt" || exit echo echo " -----Running bolt cmake ---- " - echo ${AOMP_CMAKE} $MYCMAKEOPTS $REPO_DIR - ${AOMP_CMAKE} $MYCMAKEOPTS $REPO_DIR - if [ $? != 0 ] ; then + echo "${AOMP_CMAKE} $(shquot "${MYCMAKEOPTS[@]}") $REPO_DIR" + + if ! ${AOMP_CMAKE} "${MYCMAKEOPTS[@]}" "$REPO_DIR"; then echo "ERROR bolt cmake failed. Cmake flags" - echo " $MYCMAKEOPTS" + echo " $(shquot "${MYCMAKEOPTS[@]}")" exit 1 fi fi @@ -116,11 +108,11 @@ if [ "$1" = "cmake" ]; then exit 0 fi -cd $BUILD_DIR/build/bolt +cd "$BUILD_DIR/build/bolt" || exit echo echo " -----Running make for bolt ---- " -make -j $AOMP_JOB_THREADS -if [ $? != 0 ] ; then + +if ! make -j "$AOMP_JOB_THREADS"; then echo " " echo "ERROR: make -j $AOMP_JOB_THREADS FAILED" echo "To restart:" @@ -138,13 +130,13 @@ fi # ----------- Install only if asked ---------------------------- if [ "$1" == "install" ] ; then - cd $BUILD_DIR/build/bolt + cd "$BUILD_DIR/build/bolt" || exit echo echo " -----Installing to $BOLT_INSTALL_DIR ----- " - $SUDO make install - if [ $? != 0 ] ; then + + if ! $SUDO make install; then echo "ERROR make install failed " exit 1 fi - removepatch $AOMP_REPOS/bolt + removepatch "$AOMP_REPOS/bolt" fi diff --git a/bin/build_comgr.sh b/bin/build_comgr.sh index 385f8ba52..109bebf24 100755 --- a/bin/build_comgr.sh +++ b/bin/build_comgr.sh @@ -4,9 +4,9 @@ # # --- Start standard header to set AOMP environment variables ---- -realpath=`realpath $0` -thisdir=`dirname $realpath` -. $thisdir/aomp_common_vars +realpath=$(realpath "$0") +thisdir=$(dirname "$realpath") +. "$thisdir/aomp_common_vars" # --- end standard header ---- INSTALL_COMGR=${INSTALL_COMGR:-$AOMP_INSTALL_DIR} @@ -30,31 +30,23 @@ if [ "$1" == "-h" ] || [ "$1" == "help" ] || [ "$1" == "-help" ] ; then exit fi -if [ ! -d $AOMP_REPOS/$AOMP_PROJECT_REPO_NAME/amd/$AOMP_COMGR_REPO_NAME ] ; then +if [ ! -d "$AOMP_REPOS/$AOMP_PROJECT_REPO_NAME/amd/$AOMP_COMGR_REPO_NAME" ] ; then echo "ERROR: Missing repository $AOMP_REPOS/$AOMP_PROJECT_REPO_NAME/amd/$AOMP_COMGR_REPO_NAME" echo " Are environment variables AOMP_REPOS and AOMP_COMGR_REPO_NAME set correctly?" exit 1 fi -# Make sure we can update the install directory -if [ "$1" == "install" ] ; then - $SUDO mkdir -p $INSTALL_COMGR - $SUDO touch $INSTALL_COMGR/testfile - if [ $? != 0 ] ; then - echo "ERROR: No update access to $INSTALL_COMGR" - exit 1 - fi - $SUDO rm $INSTALL_COMGR/testfile -fi +check_writable_installdir "$1" "$INSTALL_COMGR" osversion=$(cat /etc/os-release) #if [ "$AOMP_MAJOR_VERSION" != "12" ] && [[ "$osversion" =~ "Ubuntu 16" ]]; then - patchrepo $REPO_DIR + patchrepo "$REPO_DIR" #fi -if [ "$AOMP_BUILD_SANITIZER" == 1 ] ; then - LDFLAGS="-fuse-ld=lld $ASAN_FLAGS" -fi +#if [ "$AOMP_BUILD_SANITIZER" == 1 ] ; then + #LDFLAGS=$(shquot '-fuse-ld=lld' "${ASAN_FLAGS[@]}") + #export LDFLAGS +#fi if [ "$1" != "nocmake" ] && [ "$1" != "install" ] ; then @@ -63,40 +55,58 @@ if [ "$1" != "nocmake" ] && [ "$1" != "install" ] ; then echo "Use ""$0 nocmake"" or ""$0 install"" to avoid FRESH START." BUILDTYPE="Release" - echo $SUDO rm -rf $BUILD_AOMP/build/comgr - $SUDO rm -rf $BUILD_AOMP/build/comgr + echo $SUDO rm -rf "$BUILD_AOMP/build/comgr" + $SUDO rm -rf "$BUILD_AOMP/build/comgr" export LLVM_DIR=$AOMP_INSTALL_DIR export Clang_DIR=$AOMP_INSTALL_DIR - mkdir -p $BUILD_AOMP/build/comgr - cd $BUILD_AOMP/build/comgr + mkdir -p "$BUILD_AOMP/build/comgr" + cd "$BUILD_AOMP/build/comgr" || exit echo " -----Running comgr cmake ---- " DEVICELIBS_BUILD_PATH=$AOMP_REPOS/build/AOMP_LIBDEVICE_REPO_NAME PACKAGE_ROOT=$AOMP_REPOS/$AOMP_PROJECT_REPO_NAME/amd/$AOMP_COMGR_REPO_NAME COMMON_PREFIX_PATH="$AOMP/include/amd_comgr;$DEVICELIBS_BUILD_PATH;$PACKAGE_ROOT;$LLVM_INSTALL_LOC" - MYCMAKEOPTS=" - -DCMAKE_INSTALL_PREFIX='$INSTALL_COMGR' - -DCMAKE_BUILD_TYPE=$BUILDTYPE + MYCMAKEOPTS=( + -DCMAKE_INSTALL_PREFIX="$INSTALL_COMGR" + -DCMAKE_BUILD_TYPE="$BUILDTYPE" -DBUILD_TESTING=OFF - -DROCM_DIR=$AOMP_INSTALL_DIR - -DLLVM_DIR=$AOMP_INSTALL_DIR - -DClang_DIR=$AOMP_INSTALL_DIR" - echo ${AOMP_CMAKE} ${MYCMAKEOPTS} -DCMAKE_PREFIX_PATH="$AOMP/lib/cmake;$COMMON_PREFIX_PATH" -DCMAKE_INSTALL_LIBDIR=lib $AOMP_ORIGIN_RPATH $AOMP_REPOS/$AOMP_PROJECT_REPO_NAME/amd/$AOMP_COMGR_REPO_NAME - ${AOMP_CMAKE} ${MYCMAKEOPTS} -DCMAKE_PREFIX_PATH="$AOMP/lib/cmake;$COMMON_PREFIX_PATH" -DCMAKE_INSTALL_LIBDIR=lib $AOMP_ORIGIN_RPATH $AOMP_REPOS/$AOMP_PROJECT_REPO_NAME/amd/$AOMP_COMGR_REPO_NAME - if [ $? != 0 ] ; then + -DROCM_DIR="$AOMP_INSTALL_DIR" + -DLLVM_DIR="$AOMP_INSTALL_DIR" + -DClang_DIR="$AOMP_INSTALL_DIR") + echo "${AOMP_CMAKE}" "$(shquot "${MYCMAKEOPTS[@]}")" \ + -DCMAKE_PREFIX_PATH="$AOMP/lib/cmake;$COMMON_PREFIX_PATH" \ + -DCMAKE_INSTALL_LIBDIR=lib "${AOMP_ORIGIN_RPATH[@]}" \ + "$AOMP_REPOS/$AOMP_PROJECT_REPO_NAME/amd/$AOMP_COMGR_REPO_NAME" + + if ! ${AOMP_CMAKE} "${MYCMAKEOPTS[@]}" \ + -DCMAKE_PREFIX_PATH="$AOMP/lib/cmake;$COMMON_PREFIX_PATH" \ + -DCMAKE_INSTALL_LIBDIR=lib "${AOMP_ORIGIN_RPATH[@]}" \ + "$AOMP_REPOS/$AOMP_PROJECT_REPO_NAME/amd/$AOMP_COMGR_REPO_NAME"; then echo "ERROR comgr cmake failed. cmake flags" exit 1 fi if [ "$AOMP_BUILD_SANITIZER" == 1 ] ; then - mkdir -p $BUILD_AOMP/build/comgr/asan - cd $BUILD_AOMP/build/comgr/asan + mkdir -p "$BUILD_AOMP/build/comgr/asan" + cd "$BUILD_AOMP/build/comgr/asan" || exit echo " -----Running comgr-asan cmake ----- " - ASAN_CMAKE_OPTS="$MYCMAKEOPTS -DCMAKE_C_COMPILER=$LLVM_INSTALL_LOC/bin/clang -DCMAKE_CXX_COMPILER=$LLVM_INSTALL_LOC/bin/clang++" - echo ${AOMP_CMAKE} ${ASAN_CMAKE_OPTS} -DCMAKE_PREFIX_PATH="$AOMP/lib/asan/cmake;$COMMON_PREFIX_PATH:$AOMP/lib/cmake" -DCMAKE_INSTALL_LIBDIR=lib/asan $AOMP_ASAN_ORIGIN_RPATH -DCMAKE_C_FLAGS="'$ASAN_FLAGS'" -DCMAKE_CXX_FLAGS="'$ASAN_FLAGS'" $AOMP_ASAN_ORIGIN_RPATH $AOMP_REPOS/$AOMP_PROJECT_REPO_NAME/amd/$AOMP_COMGR_REPO_NAME - ${AOMP_CMAKE} ${ASAN_CMAKE_OPTS} -DCMAKE_PREFIX_PATH="$AOMP/lib/asan/cmake;$COMMON_PREFIX_PATH;$AOMP/lib/cmake" -DCMAKE_INSTALL_LIBDIR=lib/asan $AOMP_ASAN_ORIGIN_RPATH -DCMAKE_C_FLAGS="'$ASAN_FLAGS'" -DCMAKE_CXX_FLAGS="'$ASAN_FLAGS'" $AOMP_REPOS/$AOMP_PROJECT_REPO_NAME/amd/$AOMP_COMGR_REPO_NAME - if [ $? != 0 ] ; then + ASAN_CMAKE_OPTS=("${MYCMAKEOPTS[@]}" + -DCMAKE_C_COMPILER="$LLVM_INSTALL_LOC/bin/clang" + -DCMAKE_CXX_COMPILER="$LLVM_INSTALL_LOC/bin/clang++") + echo "${AOMP_CMAKE}" "$(shquot "${ASAN_CMAKE_OPTS[@]}")" \ + -DCMAKE_PREFIX_PATH="$AOMP/lib/asan/cmake;$COMMON_PREFIX_PATH:$AOMP/lib/cmake" \ + -DCMAKE_INSTALL_LIBDIR=lib/asan "$(shquot "${AOMP_ASAN_ORIGIN_RPATH[@]}")" \ + -DCMAKE_C_FLAGS="\"$(cmquot "${ASAN_FLAGS[@]}")\"" \ + -DCMAKE_CXX_FLAGS="\"$(cmquot "${ASAN_FLAGS[@]}")\"" \ + "$AOMP_REPOS/$AOMP_PROJECT_REPO_NAME/amd/$AOMP_COMGR_REPO_NAME" + + if ! ${AOMP_CMAKE} "${ASAN_CMAKE_OPTS[@]}" \ + -DCMAKE_PREFIX_PATH="$AOMP/lib/asan/cmake;$COMMON_PREFIX_PATH;$AOMP/lib/cmake" \ + -DCMAKE_INSTALL_LIBDIR=lib/asan "${AOMP_ASAN_ORIGIN_RPATH[@]}" \ + -DCMAKE_C_FLAGS="$(cmquot "${ASAN_FLAGS[@]}")" \ + -DCMAKE_CXX_FLAGS="$(cmquot "${ASAN_FLAGS[@]}")" \ + "$AOMP_REPOS/$AOMP_PROJECT_REPO_NAME/amd/$AOMP_COMGR_REPO_NAME"; then echo "ERROR comgr-asan cmake failed. cmake flags" exit 1 fi @@ -107,11 +117,11 @@ if [ "$1" = "cmake" ]; then exit 0 fi -cd $BUILD_AOMP/build/comgr +cd "$BUILD_AOMP/build/comgr" || exit echo echo " -----Running make for comgr ---- " -make -j $AOMP_JOB_THREADS -if [ $? != 0 ] ; then + +if ! make -j "$AOMP_JOB_THREADS"; then echo " " echo "ERROR: make -j $AOMP_JOB_THREADS FAILED" echo "To restart:" @@ -121,10 +131,10 @@ if [ $? != 0 ] ; then fi if [ "$AOMP_BUILD_SANITIZER" == 1 ] ; then - cd $BUILD_AOMP/build/comgr/asan + cd "$BUILD_AOMP/build/comgr/asan" || exit echo " -----Running make for comgr-asan ---- " - make -j $AOMP_JOB_THREADS - if [ $? != 0 ] ; then + + if ! make -j "$AOMP_JOB_THREADS"; then echo " " echo "ERROR: make -j $AOMP_JOB_THREADS FAILED" echo "To restart:" @@ -135,27 +145,27 @@ if [ "$AOMP_BUILD_SANITIZER" == 1 ] ; then fi # ----------- Install only if asked ---------------------------- -if [ "$1" == "install" ] ; then - cd $BUILD_AOMP/build/comgr +if [ "$1" == "install" ] ; then + cd "$BUILD_AOMP/build/comgr" || exit echo " -----Installing to $INSTALL_COMGR/lib ----- " - $SUDO make install - if [ $? != 0 ] ; then + + if ! $SUDO make install; then echo "ERROR make install failed " exit 1 fi if [ "$AOMP_BUILD_SANITIZER" == 1 ] ; then - cd $BUILD_AOMP/build/comgr/asan + cd "$BUILD_AOMP/build/comgr/asan" || exit echo " -----Installing to $INSTALL_COMGR/lib/asan ----" - $SUDO make install - if [ $? != 0 ] ; then + + if ! $SUDO make install; then echo "ERROR make install failed" exit 1 fi fi # amd_comgr.h is now in amd_comgr/amd_comgr.h, so remove depracated file - [ -f $INSTALL_COMGR/include/amd_comgr.h ] && rm $INSTALL_COMGR/include/amd_comgr.h + [ -f "$INSTALL_COMGR/include/amd_comgr.h" ] && rm "$INSTALL_COMGR/include/amd_comgr.h" if [ "$AOMP_MAJOR_VERSION" != "12" ] && [[ "$osversion" =~ "Ubuntu 16" ]]; then - removepatch $REPO_DIR + removepatch "$REPO_DIR" fi fi diff --git a/bin/build_extras.sh b/bin/build_extras.sh index 745428cb3..78df1e164 100755 --- a/bin/build_extras.sh +++ b/bin/build_extras.sh @@ -30,9 +30,9 @@ # SOFTWARE. # --- Start standard header to set AOMP environment variables ---- -realpath=`realpath $0` -thisdir=`dirname $realpath` -. $thisdir/aomp_common_vars +realpath=$(realpath "$0") +thisdir=$(dirname "$realpath") +. "$thisdir/aomp_common_vars" # --- end standard header ---- AOMP_REPO_DIR=$AOMP_REPOS/$AOMP_REPO_NAME @@ -42,7 +42,7 @@ BUILD_DIR=${BUILD_AOMP} INSTALL_EXTRAS=${INSTALL_EXTRAS:-$LLVM_INSTALL_LOC} export LLVM_DIR=$LLVM_INSTALL_LOC -if [ $AOMP_STANDALONE_BUILD == 1 ] ; then +if [ "$AOMP_STANDALONE_BUILD" == 1 ] ; then install_list="gpurun rebundle_hip_lib.sh raja_build.sh kokkos_build.sh aompversion blt.patch raja.patch modulefile" else install_list="gpurun" @@ -58,52 +58,44 @@ if [ "$1" == "-h" ] || [ "$1" == "help" ] || [ "$1" == "-help" ] ; then fi # Make sure we can update the install directory -if [ "$1" == "install" ] ; then - $SUDO mkdir -p $INSTALL_EXTRAS - $SUDO touch $INSTALL_EXTRAS/testfile - if [ $? != 0 ] ; then - echo "ERROR: No update access to $INSTALL_EXTRAS" - exit 1 -fi - $SUDO rm $INSTALL_EXTRAS/testfile -fi +check_writable_installdir "$1" "$INSTALL_EXTRAS" if [ "$1" != "install" ] ; then if [ -d "$BUILD_DIR/build/extras" ] ; then echo echo "FRESH START , CLEANING UP FROM PREVIOUS BUILD" - echo rm -rf $BUILD_DIR/build/extras - rm -rf $BUILD_DIR/build/extras + echo "rm -rf $BUILD_DIR/build/extras" + rm -rf "$BUILD_DIR/build/extras" fi - if [ $AOMP_STANDALONE_BUILD == 0 ] ; then + if [ "$AOMP_STANDALONE_BUILD" == 0 ] ; then export AOMP_VERSION_STRING=$ROCM_VERSION fi - mkdir -p $BUILD_DIR/build/extras - cd $BUILD_DIR/build/extras + mkdir -p "$BUILD_DIR/build/extras" + cd "$BUILD_DIR/build/extras" || exit - if [ $AOMP_STANDALONE_BUILD == 0 ] ; then - SED_INSTALL_DIR=`echo /opt/rocm/llvm | sed -e 's/\//\\\\\//g' ` + if [ "$AOMP_STANDALONE_BUILD" == 0 ] ; then + SED_INSTALL_DIR=$(echo /opt/rocm/llvm | sed -e 's,/,\\/,g') else - SED_INSTALL_DIR=`echo $INSTALL_EXTRAS | sed -e 's/\//\\\\\//g' ` + SED_INSTALL_DIR="${INSTALL_EXTRAS//\//\\/}" fi export SED_INSTALL_DIR echo "----- Copy util scripts to $BUILD_DIR/build/extras -----" - cp $AOMP_REPO_DIR/utils/* $BUILD_DIR/build/extras + cp "$AOMP_REPO_DIR"/utils/* "$BUILD_DIR"/build/extras for util in $install_list; do if [ "$util" == "rebundle_hip_lib.sh" ]; then - /bin/sed -i -e "s/X\\.Y\\-Z/${AOMP_VERSION_STRING}/g" -e "s/_LLVM_INSTALL_DIR_/${SED_INSTALL_DIR}/g" $util + /bin/sed -i -e "s/X\\.Y\\-Z/${AOMP_VERSION_STRING}/g" -e "s/_LLVM_INSTALL_DIR_/${SED_INSTALL_DIR}/g" "$util" else - /bin/sed -i -e "s/X\\.Y\\-Z/${AOMP_VERSION_STRING}/g" -e "s/_AOMP_INSTALL_DIR_/${SED_INSTALL_DIR}/g" $util + /bin/sed -i -e "s/X\\.Y\\-Z/${AOMP_VERSION_STRING}/g" -e "s/_AOMP_INSTALL_DIR_/${SED_INSTALL_DIR}/g" "$util" fi done fi -cd $BUILD_DIR/build/extras +cd "$BUILD_DIR/build/extras" || exit echo if [ "$1" != "install" ] ; then echo @@ -114,7 +106,7 @@ fi # ----------- Install only if asked ---------------------------- if [ "$1" == "install" ] ; then - cd $BUILD_DIR/build/extras + cd "$BUILD_DIR/build/extras" || exit echo " -----Installing to $INSTALL_EXTRAS/bin ----- " for util in $install_list; do echo "-- Installing: $INSTALL_EXTRAS/bin/$util" diff --git a/bin/build_fixups.sh b/bin/build_fixups.sh index 54a547491..1b464462b 100755 --- a/bin/build_fixups.sh +++ b/bin/build_fixups.sh @@ -5,54 +5,54 @@ # # --- Start standard header to set AOMP environment variables ---- -realpath=`realpath $0` -thisdir=`dirname $realpath` -. $thisdir/aomp_common_vars +realpath=$(realpath "$0") +thisdir=$(dirname "$realpath") +. "$thisdir/aomp_common_vars" # --- end standard header ---- # Copy examples -if [ -d $AOMP/examples ] ; then - $SUDO rm -rf $AOMP/examples +if [ -d "$AOMP/examples" ]; then + $SUDO rm -rf "$AOMP/examples" fi -echo $SUDO cp -rp $AOMP_REPOS/$AOMP_REPO_NAME/examples $AOMP -$SUDO cp -rp $AOMP_REPOS/$AOMP_REPO_NAME/examples $AOMP +echo $SUDO cp -rp "$AOMP_REPOS/$AOMP_REPO_NAME/examples" "$AOMP" +$SUDO cp -rp "$AOMP_REPOS/$AOMP_REPO_NAME/examples" "$AOMP" if [ "$AOMP_STANDALONE_BUILD" == 1 ] ; then # Licenses - echo mkdir -p $AOMP/share/doc/aomp - mkdir -p $AOMP/share/doc/aomp - echo $SUDO cp $AOMP_REPOS/$AOMP_REPO_NAME/LICENSE $AOMP/share/doc/aomp/LICENSE.apache2 - $SUDO cp $AOMP_REPOS/$AOMP_REPO_NAME/LICENSE $AOMP/share/doc/aomp/LICENSE.apache2 - echo $SUDO cp $AOMP_REPOS/$AOMP_EXTRAS_REPO_NAME/LICENSE $AOMP/share/doc/aomp/LICENSE.mit - $SUDO cp $AOMP_REPOS/$AOMP_EXTRAS_REPO_NAME/LICENSE $AOMP/share/doc/aomp/LICENSE.mit - echo $SUDO cp $AOMP_REPOS/$AOMP_FLANG_REPO_NAME/LICENSE.txt $AOMP/share/doc/aomp/LICENSE.flang - $SUDO cp $AOMP_REPOS/$AOMP_FLANG_REPO_NAME/LICENSE.txt $AOMP/share/doc/aomp/LICENSE.flang + echo mkdir -p "$AOMP/share/doc/aomp" + mkdir -p "$AOMP/share/doc/aomp" + echo $SUDO cp "$AOMP_REPOS/$AOMP_REPO_NAME/LICENSE" "$AOMP/share/doc/aomp/LICENSE.apache2" + $SUDO cp "$AOMP_REPOS/$AOMP_REPO_NAME/LICENSE" "$AOMP/share/doc/aomp/LICENSE.apache2" + echo $SUDO cp "$AOMP_REPOS/$AOMP_EXTRAS_REPO_NAME/LICENSE" "$AOMP/share/doc/aomp/LICENSE.mit" + $SUDO cp "$AOMP_REPOS/$AOMP_EXTRAS_REPO_NAME/LICENSE" "$AOMP/share/doc/aomp/LICENSE.mit" + echo $SUDO cp "$AOMP_REPOS/$AOMP_FLANG_REPO_NAME/LICENSE.txt" "$AOMP/share/doc/aomp/LICENSE.flang" + $SUDO cp "$AOMP_REPOS/$AOMP_FLANG_REPO_NAME/LICENSE.txt" "$AOMP/share/doc/aomp/LICENSE.flang" fi echo Cleaning AOMP Directory... #examples -$SUDO rm -f $AOMP/examples/hip/*.txt -$SUDO rm -f $AOMP/examples/hip/*.sh -$SUDO rm -f $AOMP/examples/openmp/*.txt -$SUDO rm -f $AOMP/examples/openmp/*.sh -$SUDO rm -f $AOMP/examples/cloc/*.txt -$SUDO rm -f $AOMP/examples/cloc/*.sh -$SUDO rm -f $AOMP/examples/fortran/*.txt -$SUDO rm -f $AOMP/examples/fortran/*.sh -$SUDO rm -f $AOMP/examples/*.sh -$SUDO rm -f $AOMP/examples/raja/*.txt -$SUDO rm -f $AOMP/examples/raja/*.sh +$SUDO rm -f "$AOMP"/examples/hip/*.txt +$SUDO rm -f "$AOMP"/examples/hip/*.sh +$SUDO rm -f "$AOMP"/examples/openmp/*.txt +$SUDO rm -f "$AOMP"/examples/openmp/*.sh +$SUDO rm -f "$AOMP"/examples/cloc/*.txt +$SUDO rm -f "$AOMP"/examples/cloc/*.sh +$SUDO rm -f "$AOMP"/examples/fortran/*.txt +$SUDO rm -f "$AOMP"/examples/fortran/*.sh +$SUDO rm -f "$AOMP"/examples/*.sh +$SUDO rm -f "$AOMP"/examples/raja/*.txt +$SUDO rm -f "$AOMP"/examples/raja/*.sh # Clean libexec, for now just delete files not directories # rocprofiler installs some needed python scripts in # libexec/rocprofiler. -$SUDO find $AOMP/libexec -maxdepth 1 -type f -delete +$SUDO find "$AOMP"/libexec -maxdepth 1 -type f -delete # Clean src -$SUDO rm -rf $AOMP/src -$SUDO rm -rf $AOMP/rocclr +$SUDO rm -rf "$AOMP"/src +$SUDO rm -rf "$AOMP"/rocclr # Clean llvm-lit -$SUDO rm -f $AOMP/bin/llvm-lit +$SUDO rm -f "$AOMP"/bin/llvm-lit echo "Done with $0" diff --git a/bin/build_flang-classic.sh b/bin/build_flang-classic.sh index 897b8e18a..4ad0a1d2f 100755 --- a/bin/build_flang-classic.sh +++ b/bin/build_flang-classic.sh @@ -12,12 +12,12 @@ BUILD_TYPE=${BUILD_TYPE:-Release} # --- Start standard header to set AOMP environment variables ---- -realpath=`realpath $0` -thisdir=`dirname $realpath` -. $thisdir/aomp_common_vars +realpath=$(realpath "$0") +thisdir=$(dirname "$realpath") +. "$thisdir/aomp_common_vars" # --- end standard header ---- -if [ $AOMP_BUILD_FLANG_CLASSIC == 0 ] ; then +if [ "$AOMP_BUILD_FLANG_CLASSIC" == 0 ] ; then if [ "$1" != "install" ] ; then echo "WARNING: ROCM install for $AOMP_FLANG_CLASSIC_REL/llvm-classic not found." echo " This build will skip build of flang-classic." @@ -25,24 +25,17 @@ if [ $AOMP_BUILD_FLANG_CLASSIC == 0 ] ; then fi exit fi -TARGETS_TO_BUILD="AMDGPU;${AOMP_NVPTX_TARGET}X86" - -if [ $AOMP_STANDALONE_BUILD == 1 ] ; then - standalone_word="_STANDALONE" -else - standalone_word="" -fi if [ "$AOMP_USE_NINJA" == 0 ] ; then - AOMP_SET_NINJA_GEN="" + AOMP_SET_NINJA_GEN=() else - AOMP_SET_NINJA_GEN="-G Ninja" + AOMP_SET_NINJA_GEN=(-G Ninja) fi -osversion=$(cat /etc/os-release | grep -e ^VERSION_ID) -if [[ $osversion =~ '"7.' ]] || [[ $osversion =~ '"8' ]]; then - _cxx_flag="-DCMAKE_CXX_FLAGS='-D_GLIBCXX_USE_CXX11_ABI=0'" +osversion=$(grep -e ^VERSION_ID < /etc/os-release) +if [[ $osversion =~ \"7\. ]] || [[ $osversion =~ \"8\. ]]; then + _cxx_flag=(-DCMAKE_CXX_FLAGS='-D_GLIBCXX_USE_CXX11_ABI=0') else - _cxx_flag="" + _cxx_flag=() fi # We need a version of ROCM llvm that supports flang-classic @@ -50,9 +43,6 @@ fi # This will enable removal of flang-classic driver support # from clang to make way for flang -# Options for llvm-classic cmake. -TARGETS_TO_BUILD="AMDGPU;X86" - # Do not change the AOMP_LFL_DIR default because it is the subdirectory # from where we build the flang-classic driver binary. This is the # Last Frozen LLVM (LFL) for which there is amd-only clang driver support @@ -63,20 +53,22 @@ AOMP_LFL_DIR=${AOMP_LFL_DIR:-"17.0-4"} # comment out above line and uncomment next line for new LFL #AOMP_LFL_DIR=${AOMP_LFL_DIR:-17.0-4} -MYCMAKEOPTS="\ --DCMAKE_BUILD_TYPE=$BUILD_TYPE \ --DCMAKE_C_COMPILER=$LLVM_INSTALL_LOC/bin/clang \ --DCMAKE_CXX_COMPILER=$LLVM_INSTALL_LOC/bin/clang++ \ -$_cxx_flag \ --DCMAKE_CXX_STANDARD=17 \ --DCMAKE_INSTALL_PREFIX=$LLVM_INSTALL_LOC \ -$AOMP_SET_NINJA_GEN \ -" - -if [ $AOMP_STANDALONE_BUILD == 1 ] ; then - MYCMAKEOPTS="$MYCMAKEOPTS -DBUILD_SHARED_LIBS=ON $AOMP_ORIGIN_RPATH" +declare -a MYCMAKEOPTS + +MYCMAKEOPTS=(-DCMAKE_BUILD_TYPE="$BUILD_TYPE" + -DCMAKE_C_COMPILER="$LLVM_INSTALL_LOC/bin/clang" + -DCMAKE_CXX_COMPILER="$LLVM_INSTALL_LOC/bin/clang++" + "${_cxx_flag[@]}" + -DCMAKE_CXX_STANDARD=17 + -DCMAKE_INSTALL_PREFIX="$LLVM_INSTALL_LOC" + "${AOMP_SET_NINJA_GEN[@]}") + +if [ "$AOMP_STANDALONE_BUILD" == 1 ] ; then + MYCMAKEOPTS=("${MYCMAKEOPTS[@]}" -DBUILD_SHARED_LIBS=ON + "${AOMP_ORIGIN_RPATH[@]}") else - MYCMAKEOPTS="$MYCMAKEOPTS -DBUILD_SHARED_LIBS=OFF $OPENMP_EXTRAS_ORIGIN_RPATH" + MYCMAKEOPTS=("${MYCMAKEOPTS[@]}" -DBUILD_SHARED_LIBS=OFF + "${OPENMP_EXTRAS_ORIGIN_RPATH[@]}") fi @@ -84,27 +76,16 @@ if [ "$1" == "-h" ] || [ "$1" == "help" ] || [ "$1" == "-help" ] ; then help_build_aomp fi -if [ $AOMP_STANDALONE_BUILD == 1 ] ; then - if [ ! -L $AOMP ] ; then - if [ -d $AOMP ] ; then - echo "ERROR: Directory $AOMP is a physical directory." - echo " It must be a symbolic link or not exist" - exit 1 - fi - fi -fi - -# Make sure we can update the install directory -if [ "$1" == "install" ] ; then - $SUDO mkdir -p $AOMP_INSTALL_DIR - $SUDO touch $AOMP_INSTALL_DIR/testfile - if [ $? != 0 ] ; then - echo "ERROR: No update access to $AOMP_INSTALL_DIR" +if [ "$AOMP_STANDALONE_BUILD" == 1 ] ; then + if [ ! -L "$AOMP" ] && [ -d "$AOMP" ] ; then + echo "ERROR: Directory $AOMP is a physical directory." + echo " It must be a symbolic link or not exist" exit 1 fi - $SUDO rm $AOMP_INSTALL_DIR/testfile fi +check_writable_installdir "$1" "$AOMP_INSTALL_DIR" + # Allow extglobs -- seems like this must be set before bash starts parsing # the 'if' block below. shopt -s extglob @@ -121,7 +102,7 @@ if [ "$1" != "nocmake" ] && [ "$1" != "install" ] ; then exit 1 fi else - if [ ! -d $BUILD_DIR/build/flang-classic/$AOMP_LFL_DIR ] ; then + if [ ! -d "$BUILD_DIR/build/flang-classic/$AOMP_LFL_DIR" ] ; then echo "ERROR: The build directory $BUILD_DIR/build/flang-classic/$AOMP_LFL_DIR does not exist" echo " run $0 without nocmake or install options. " exit 1 @@ -131,13 +112,13 @@ fi echo # Cmake flang-classic. if [ "$1" != "nocmake" ] && [ "$1" != "install" ] ; then - cd $BUILD_DIR/build/flang-classic/$AOMP_LFL_DIR + cd "$BUILD_DIR/build/flang-classic/$AOMP_LFL_DIR" || exit echo " -----Running cmake ---- " - echo ${AOMP_CMAKE} $MYCMAKEOPTS $AOMP_REPOS/$AOMP_FLANG_REPO_NAME/flang-classic/$AOMP_LFL_DIR - ${AOMP_CMAKE} $MYCMAKEOPTS $AOMP_REPOS/$AOMP_FLANG_REPO_NAME/flang-classic/$AOMP_LFL_DIR 2>&1 - if [ $? != 0 ] ; then + echo "${AOMP_CMAKE}" "$(shquot "${MYCMAKEOPTS[@]}")" "$AOMP_REPOS/$AOMP_FLANG_REPO_NAME/flang-classic/$AOMP_LFL_DIR" + + if ! ${AOMP_CMAKE} "${MYCMAKEOPTS[@]}" "$AOMP_REPOS/$AOMP_FLANG_REPO_NAME/flang-classic/$AOMP_LFL_DIR" 2>&1; then echo "ERROR cmake failed. Cmake flags" - echo " $MYCMAKEOPTS" + echo " $(shquot "${MYCMAKEOPTS[@]}")" exit 1 fi fi @@ -150,9 +131,9 @@ echo # Build flang-classic. echo " --- Running $AOMP_NINJA_BIN for $BUILD_DIR/build/flang-classic/$AOMP_LFL_DIR ---- " -cd $BUILD_DIR/build/flang-classic/$AOMP_LFL_DIR -$AOMP_NINJA_BIN -j $AOMP_JOB_THREADS -if [ $? != 0 ] ; then +cd "$BUILD_DIR/build/flang-classic/$AOMP_LFL_DIR" || exit + +if ! $AOMP_NINJA_BIN -j "$AOMP_JOB_THREADS"; then echo " " echo "ERROR: $AOMP_NINJA_BIN -j $AOMP_JOB_THREADS FAILED" echo "To restart:" @@ -163,8 +144,8 @@ fi if [ "$1" == "install" ] ; then echo " -----Installing to $AOMP_INSTALL_DIR ---- " - $SUDO ${AOMP_CMAKE} --build . -j $AOMP_JOB_THREADS --target install - if [ $? != 0 ] ; then + + if ! $SUDO "${AOMP_CMAKE}" --build . -j "$AOMP_JOB_THREADS" --target install; then echo "ERROR make install failed " exit 1 fi diff --git a/bin/build_flang.sh b/bin/build_flang.sh index 551a77eb4..74f9162b2 100755 --- a/bin/build_flang.sh +++ b/bin/build_flang.sh @@ -6,9 +6,9 @@ BUILD_TYPE=${BUILD_TYPE:-Release} # --- Start standard header to set AOMP environment variables ---- -realpath=`realpath $0` -thisdir=`dirname $realpath` -. $thisdir/aomp_common_vars +realpath=$(realpath "$0") +thisdir=$(dirname "$realpath") +. "$thisdir/aomp_common_vars" # --- end standard header ---- INSTALL_FLANG=${INSTALL_FLANG:-$AOMP_INSTALL_DIR} @@ -26,74 +26,73 @@ fi REPO_DIR=$AOMP_REPOS/$AOMP_FLANG_REPO_NAME COMP_INC_DIR=$REPO_DIR/runtime/libpgmath/lib/common -MYCMAKEOPTS="-DCMAKE_BUILD_TYPE=$BUILD_TYPE \ - -DCMAKE_INSTALL_PREFIX=$LLVM_INSTALL_LOC \ - -DLLVM_ENABLE_ASSERTIONS=ON \ - -DLLVM_CONFIG=$LLVM_INSTALL_LOC/bin/llvm-config \ - -DCMAKE_CXX_COMPILER=$LLVM_INSTALL_LOC/bin/clang++ \ - -DCMAKE_C_COMPILER=$LLVM_INSTALL_LOC/bin/clang \ - -DCMAKE_Fortran_COMPILER=gfortran \ - -DLLVM_TARGETS_TO_BUILD=$TARGETS_TO_BUILD \ - -DFLANG_OPENMP_GPU_AMD=ON \ - -DFLANG_OPENMP_GPU_NVIDIA=ON \ - -DLLVM_INSTALL_TOOLCHAIN_ONLY=ON \ - -DFLANG_INCLUDE_TESTS=OFF" +declare -a MYCMAKEOPTS + +MYCMAKEOPTS=(-DCMAKE_BUILD_TYPE="$BUILD_TYPE" + -DCMAKE_INSTALL_PREFIX="$LLVM_INSTALL_LOC" + -DLLVM_ENABLE_ASSERTIONS=ON + -DLLVM_CONFIG="$LLVM_INSTALL_LOC/bin/llvm-config" + -DCMAKE_CXX_COMPILER="$LLVM_INSTALL_LOC/bin/clang++" + -DCMAKE_C_COMPILER="$LLVM_INSTALL_LOC/bin/clang" + -DCMAKE_Fortran_COMPILER=gfortran + -DLLVM_TARGETS_TO_BUILD="$TARGETS_TO_BUILD" + -DFLANG_OPENMP_GPU_AMD=ON + -DFLANG_OPENMP_GPU_NVIDIA=ON + -DLLVM_INSTALL_TOOLCHAIN_ONLY=ON + -DFLANG_INCLUDE_TESTS=OFF) + +declare -a ASAN_CMAKE_OPTS if [ "$AOMP_BUILD_SANITIZER" == 1 ]; then - ASAN_FLAGS="$ASAN_FLAGS -I$COMP_INC_DIR" - ASAN_CMAKE_OPTS="$MYCMAKEOPTS -DCMAKE_PREFIX_PATH=$AOMP/lib/asan/cmake $AOMP_ASAN_ORIGIN_RPATH -DLLVM_ENABLE_PER_TARGET_RUNTIME_DIR=OFF -DCMAKE_INSTALL_LIBDIR=lib/asan" + ASAN_FLAGS=("${ASAN_FLAGS[@]}" "-I$COMP_INC_DIR") + ASAN_CMAKE_OPTS=("${MYCMAKEOPTS[@]}" + -DCMAKE_PREFIX_PATH="$AOMP/lib/asan/cmake" + "${AOMP_ASAN_ORIGIN_RPATH[@]}" + -DLLVM_ENABLE_PER_TARGET_RUNTIME_DIR=OFF + -DCMAKE_INSTALL_LIBDIR=lib/asan) if [ "$AOMP_STANDALONE_BUILD" == 1 ]; then - ASAN_CMAKE_OPTS="$ASAN_CMAKE_OPTS -DCMAKE_INSTALL_BINDIR=bin/asan" + ASAN_CMAKE_OPTS=("${ASAN_CMAKE_OPTS[@]}" -DCMAKE_INSTALL_BINDIR=bin/asan) fi fi if [ "$AOMP_STANDALONE_BUILD" == 1 ]; then - MYCMAKEOPTS="$MYCMAKEOPTS $AOMP_ORIGIN_RPATH" + MYCMAKEOPTS=("${MYCMAKEOPTS[@]}" "${AOMP_ORIGIN_RPATH[@]}") else - MYCMAKEOPTS="$MYCMAKEOPTS $OPENMP_EXTRAS_ORIGIN_RPATH" + MYCMAKEOPTS=("${MYCMAKEOPTS[@]}" "${OPENMP_EXTRAS_ORIGIN_RPATH[@]}") fi -MYCMAKEOPTS="$MYCMAKEOPTS -DCMAKE_PREFIX_PATH=$AOMP/lib/cmake" +MYCMAKEOPTS=("${MYCMAKEOPTS[@]}" "-DCMAKE_PREFIX_PATH=$AOMP/lib/cmake") if [ "$1" == "-h" ] || [ "$1" == "help" ] || [ "$1" == "-help" ] ; then help_build_aomp fi -# Make sure we can update the install directory -if [ "$1" == "install" ] ; then - $SUDO mkdir -p $INSTALL_FLANG - $SUDO touch $INSTALL_FLANG/testfile - if [ $? != 0 ] ; then - echo "ERROR: No update access to $INSTALL_FLANG" - exit 1 - fi - $SUDO rm $INSTALL_FLANG/testfile -fi +check_writable_installdir "$1" "$INSTALL_FLANG" # Skip synchronization from git repos if nocmake or install are specified if [ "$1" != "nocmake" ] && [ "$1" != "install" ] ; then echo echo "This is a FRESH START. ERASING any previous builds in $BUILD_DIR/build/$AOMP_FLANG_REPO_NAME" echo "Use ""$0 nocmake"" or ""$0 install"" to avoid FRESH START." - rm -rf $BUILD_DIR/build/$AOMP_FLANG_REPO_NAME - mkdir -p $BUILD_DIR/build/$AOMP_FLANG_REPO_NAME + rm -rf "$BUILD_DIR/build/$AOMP_FLANG_REPO_NAME" + mkdir -p "$BUILD_DIR/build/$AOMP_FLANG_REPO_NAME" if [ "$AOMP_BUILD_SANITIZER" == 1 ]; then - mkdir -p $BUILD_DIR/build/$AOMP_FLANG_REPO_NAME/asan + mkdir -p "$BUILD_DIR/build/$AOMP_FLANG_REPO_NAME/asan" fi else - if [ ! -d $BUILD_DIR/build/$AOMP_FLANG_REPO_NAME ] ; then + if [ ! -d "$BUILD_DIR/build/$AOMP_FLANG_REPO_NAME" ] ; then echo "ERROR: The build directory $BUILD_DIR/build/$AOMP_FLANG_REPO_NAME does not exist" echo " run $0 without nocmake or install options. " exit 1 fi - if [ "$AOMP_BUILD_SANITIZER" == 1 ] && [ ! -d $BUILD_DIR/build/$AOMP_FLANG_REPO_NAME/asan ] ; then + if [ "$AOMP_BUILD_SANITIZER" == 1 ] && [ ! -d "$BUILD_DIR/build/$AOMP_FLANG_REPO_NAME/asan" ] ; then echo "ERROR: The build directory $BUILD_DIR/build/$AOMP_FLANG_REPO_NAME/asan does not exist" echo " run $0 without nocmake or install options. " exit 1 fi fi -cd $BUILD_DIR/build/$AOMP_FLANG_REPO_NAME +cd "$BUILD_DIR/build/$AOMP_FLANG_REPO_NAME" || exit # Need llvm-config to come from previous LLVM build export PATH=$AOMP_INSTALL_DIR/bin:$PATH @@ -102,38 +101,37 @@ if [ "$1" != "nocmake" ] && [ "$1" != "install" ] ; then if [ "$SANITIZER" != 1 ]; then echo echo " -----Running cmake ---- " - echo ${AOMP_CMAKE} $MYCMAKEOPTS \ + echo "${AOMP_CMAKE}" "$(shquot "${MYCMAKEOPTS[@]}")" \ -DCMAKE_C_FLAGS="$CFLAGS -I$COMP_INC_DIR" \ -DCMAKE_CXX_FLAGS="$CXXFLAGS -I$COMP_INC_DIR" \ - $AOMP_REPOS/$AOMP_FLANG_REPO_NAME + "$AOMP_REPOS/$AOMP_FLANG_REPO_NAME" - ${AOMP_CMAKE} $MYCMAKEOPTS \ - -DCMAKE_C_FLAGS="$CFLAGS -I$COMP_INC_DIR" \ - -DCMAKE_CXX_FLAGS="$CXXFLAGS -I$COMP_INC_DIR" \ - $AOMP_REPOS/$AOMP_FLANG_REPO_NAME 2>&1 - if [ $? != 0 ] ; then + if ! ${AOMP_CMAKE} "${MYCMAKEOPTS[@]}" \ + -DCMAKE_C_FLAGS="$CFLAGS -I$COMP_INC_DIR" \ + -DCMAKE_CXX_FLAGS="$CXXFLAGS -I$COMP_INC_DIR" \ + "$AOMP_REPOS/$AOMP_FLANG_REPO_NAME" 2>&1; then echo "ERROR cmake failed. Cmake flags" - echo " $MYCMAKEOPTS" + echo " $(shquot "${MYCMAKEOPTS[@]}")" exit 1 fi fi if [ "$AOMP_BUILD_SANITIZER" == 1 ]; then - cd $BUILD_DIR/build/$AOMP_FLANG_REPO_NAME/asan + cd "$BUILD_DIR/build/$AOMP_FLANG_REPO_NAME/asan" || exit echo echo " ----Running cmake for flang-asan ----- " - echo ${AOMP_CMAKE} $ASAN_CMAKE_OPTS \ - -DCMAKE_C_FLAGS="$CFLAGS $ASAN_FLAGS" \ - -DCMAKE_CXX_FLAGS="$CXXFLAGS $ASAN_FLAGS" \ - $BUILD_DIR/build/$AOMP_FLANG_REPO_NAME - - ${AOMP_CMAKE} $ASAN_CMAKE_OPTS \ - -DCMAKE_C_FLAGS="$CFLAGS $ASAN_FLAGS" \ - -DCMAKE_CXX_FLAGS="$CXXFLAGS $ASAN_FLAGS" \ - $AOMP_REPOS/$AOMP_FLANG_REPO_NAME 2>&1 - if [ $? != 0 ] ; then + echo "${AOMP_CMAKE}" "$(shquot "${ASAN_CMAKE_OPTS[@]}")" \ + -DCMAKE_C_FLAGS="\"$CFLAGS $(cmquot "${ASAN_FLAGS[@]}")\"" \ + -DCMAKE_CXX_FLAGS="\"$CXXFLAGS $(cmquot "${ASAN_FLAGS[@]}")\"" \ + "$BUILD_DIR/build/$AOMP_FLANG_REPO_NAME" + + + if ! ${AOMP_CMAKE} "${ASAN_CMAKE_OPTS[@]}" \ + -DCMAKE_C_FLAGS="$CFLAGS $(cmquot "${ASAN_FLAGS[@]}")" \ + -DCMAKE_CXX_FLAGS="$CXXFLAGS $(cmquot "${ASAN_FLAGS[@]}")" \ + "$AOMP_REPOS/$AOMP_FLANG_REPO_NAME" 2>&1; then echo "ERROR flang-asan cmake failed. Cmake flags" - echo " $ASAN_CMAKE_OPTS" + echo " $(shquot "${ASAN_CMAKE_OPTS[@]}")" exit 1 fi fi @@ -146,22 +144,22 @@ fi echo if [ "$SANITIZER" != 1 ]; then echo " ----- Running make ---- " - cd $BUILD_DIR/build/$AOMP_FLANG_REPO_NAME - echo make -j $AOMP_JOB_THREADS - make -j $AOMP_JOB_THREADS - if [ $? != 0 ] ; then + cd "$BUILD_DIR/build/$AOMP_FLANG_REPO_NAME" || exit + echo "make -j $AOMP_JOB_THREADS" + + if ! make -j "$AOMP_JOB_THREADS"; then echo "ERROR make -j $AOMP_JOB_THREADS failed" exit 1 fi fi if [ "$AOMP_BUILD_SANITIZER" == 1 ]; then - cd $BUILD_DIR/build/$AOMP_FLANG_REPO_NAME/asan + cd "$BUILD_DIR/build/$AOMP_FLANG_REPO_NAME/asan" || exit echo echo " ----- Running make for flang-asan ---- " - echo make -j $AOMP_JOB_THREADS - make -j $AOMP_JOB_THREADS - if [ $? != 0 ] ; then + echo "make -j $AOMP_JOB_THREADS" + + if ! make -j "$AOMP_JOB_THREADS"; then echo "ERROR make -j $AOMP_JOB_THREADS failed" exit 1 fi @@ -169,10 +167,10 @@ fi if [ "$1" == "install" ] ; then if [ "$SANITIZER" != 1 ]; then - cd $BUILD_DIR/build/$AOMP_FLANG_REPO_NAME + cd "$BUILD_DIR/build/$AOMP_FLANG_REPO_NAME" || exit echo " -----Installing to $INSTALL_FLANG ---- " - $SUDO make install - if [ $? != 0 ] ; then + + if ! $SUDO make install; then echo "ERROR make install failed " exit 1 fi @@ -181,10 +179,10 @@ if [ "$1" == "install" ] ; then echo if [ "$AOMP_BUILD_SANITIZER" == 1 ]; then - cd $BUILD_DIR/build/$AOMP_FLANG_REPO_NAME/asan + cd "$BUILD_DIR/build/$AOMP_FLANG_REPO_NAME/asan" || exit echo " -----Installing to $INSTALL_FLANG/lib/asan ---- " - $SUDO make install - if [ $? != 0 ] ; then + + if ! $SUDO make install; then echo "ERROR make install failed " exit 1 fi diff --git a/bin/build_flang_runtime.sh b/bin/build_flang_runtime.sh index 4de2a71f6..1bddf1538 100755 --- a/bin/build_flang_runtime.sh +++ b/bin/build_flang_runtime.sh @@ -6,9 +6,9 @@ BUILD_TYPE=${BUILD_TYPE:-Release} # --- Start standard header to set AOMP environment variables ---- -realpath=`realpath $0` -thisdir=`dirname $realpath` -. $thisdir/aomp_common_vars +realpath=$(realpath "$0") +thisdir=$(dirname "$realpath") +. "$thisdir/aomp_common_vars" # --- end standard header ---- INSTALL_FLANG=${INSTALL_FLANG:-$AOMP_INSTALL_DIR} @@ -23,7 +23,7 @@ else fi fi -COMP_INC_DIR=$(ls -d $AOMP_INSTALL_DIR/lib/llvm/lib/clang/*/include ) +COMP_INC_DIR=$(ls -d "$AOMP_INSTALL_DIR"/lib/llvm/lib/clang/*/include ) REPO_DIR=$AOMP_REPOS/$AOMP_FLANG_REPO_NAME COMP_INC_DIR=$REPO_DIR/runtime/libpgmath/lib/common @@ -37,87 +37,93 @@ if [ "$AOMP_STANDALONE_BUILD" == 0 ]; then CMAKE_PREFIX_PATH=$BUILD_DIR/build/pgmath fi else - if [ -d $BUILD_DIR/build/openmp/runtime/src ] ; then + if [ -d "$BUILD_DIR/build/openmp/runtime/src" ] ; then openmp_build_runtime_src="$BUILD_DIR/build/openmp/runtime/src" else openmp_build_runtime_src="$BUILD_DIR/build/llvm-project/runtimes/runtimes-bins/openmp/runtime/src" fi - if [ "$AOMP_BUILD_SANITIZER" == 1 ] && [ -d $BUILD_DIR/build/openmp/asan/runtime/src ]; then + if [ "$AOMP_BUILD_SANITIZER" == 1 ] && [ -d "$BUILD_DIR/build/openmp/asan/runtime/src" ]; then openmp_build_runtime_src="$BUILD_DIR/build/openmp/asan/runtime/src" fi fi -MYCMAKEOPTS="-DCMAKE_BUILD_TYPE=$BUILD_TYPE \ - -DCMAKE_INSTALL_PREFIX=$LLVM_INSTALL_LOC \ - -DLLVM_ENABLE_ASSERTIONS=ON \ - -DLLVM_CONFIG=$LLVM_INSTALL_LOC/bin/llvm-config \ - -DCMAKE_CXX_COMPILER=$LLVM_INSTALL_LOC/bin/clang++ \ - -DCMAKE_C_COMPILER=$LLVM_INSTALL_LOC/bin/clang \ - -DCMAKE_Fortran_COMPILER=$LLVM_INSTALL_LOC/bin/flang-classic \ - -DLLVM_TARGETS_TO_BUILD=$TARGETS_TO_BUILD \ - -DLLVM_INSTALL_RUNTIME=ON \ - -DFLANG_BUILD_RUNTIME=ON \ - -DOPENMP_BUILD_DIR=$openmp_build_runtime_src \ - -DFLANG_INCLUDE_TESTS=OFF" +declare -a MYCMAKEOPTS + +MYCMAKEOPTS=(-DCMAKE_BUILD_TYPE="$BUILD_TYPE" + -DCMAKE_INSTALL_PREFIX="$LLVM_INSTALL_LOC" + -DLLVM_ENABLE_ASSERTIONS=ON + -DLLVM_CONFIG="$LLVM_INSTALL_LOC/bin/llvm-config" + -DCMAKE_CXX_COMPILER="$LLVM_INSTALL_LOC/bin/clang++" + -DCMAKE_C_COMPILER="$LLVM_INSTALL_LOC/bin/clang" + -DCMAKE_Fortran_COMPILER="$LLVM_INSTALL_LOC/bin/flang-classic" + -DLLVM_TARGETS_TO_BUILD="$TARGETS_TO_BUILD" + -DLLVM_INSTALL_RUNTIME=ON + -DFLANG_BUILD_RUNTIME=ON + -DOPENMP_BUILD_DIR="$openmp_build_runtime_src" + -DFLANG_INCLUDE_TESTS=OFF) # Note this variable is used only for AOMP ASan-ROCm builds don't remove it. # This is not used for AOMP-ASan standalone build. if [ "$SANITIZER" == 1 ]; then - MYCMAKEOPTS="$MYCMAKEOPTS -DSANITIZER=$SANITIZER" + MYCMAKEOPTS=("${MYCMAKEOPTS[@]}" -DSANITIZER="$SANITIZER") fi +declare -a ASAN_CMAKE_OPTS + if [ "$AOMP_BUILD_SANITIZER" == 1 ]; then - ASAN_FLAGS="$ASAN_FLAGS -I$COMP_INC_DIR" - ASAN_CMAKE_OPTS="$MYCMAKEOPTS -DLLVM_ENABLE_PER_TARGET_RUNTIME_DIR=OFF -DCMAKE_INSTALL_BINDIR=bin/asan -DCMAKE_INSTALL_LIBDIR=lib/asan" + ASAN_FLAGS=("${ASAN_FLAGS[@]}" -I"$COMP_INC_DIR") + ASAN_CMAKE_OPTS=("${MYCMAKEOPTS[@]}" + -DLLVM_ENABLE_PER_TARGET_RUNTIME_DIR=OFF + -DCMAKE_INSTALL_BINDIR=bin/asan + -DCMAKE_INSTALL_LIBDIR=lib/asan) if [ "$AOMP_STANDALONE_BUILD" == 1 ]; then - ASAN_CMAKE_OPTS="$ASAN_CMAKE_OPTS -DCMAKE_PREFIX_PATH=$AOMP/lib/asan/cmake;$AOMP/lib/asan $AOMP_ASAN_ORIGIN_RPATH" + ASAN_CMAKE_OPTS=("${ASAN_CMAKE_OPTS[@]}" + -DCMAKE_PREFIX_PATH="$AOMP/lib/asan/cmake;$AOMP/lib/asan" + "${AOMP_ASAN_ORIGIN_RPATH[@]}") else - ASAN_CMAKE_OPTS="$ASAN_CMAKE_OPTS -DCMAKE_PREFIX_PATH="$CMAKE_PREFIX_PATH;$INSTALL_PREFIX/lib/asan/cmake" $OPENMP_EXTRAS_ORIGIN_RPATH -DOPENMP_EXTRAS_SHARED_LINKER_FLAGS=$OPENMP_EXTRAS_SHARED_LINKER_FLAGS" + ASAN_CMAKE_OPTS=("${ASAN_CMAKE_OPTS[@]}" + -DCMAKE_PREFIX_PATH="$CMAKE_PREFIX_PATH;$INSTALL_PREFIX/lib/asan/cmake" + "${OPENMP_EXTRAS_ORIGIN_RPATH[@]}" + -DOPENMP_EXTRAS_SHARED_LINKER_FLAGS="$(cmquot "${OPENMP_EXTRAS_SHARED_LINKER_FLAGS[@]}")") fi fi if [ "$AOMP_STANDALONE_BUILD" == 1 ]; then - MYCMAKEOPTS="$MYCMAKEOPTS -DCMAKE_PREFIX_PATH=$AOMP/lib/cmake;$AOMP_INSTALL_DIR/lib $AOMP_ORIGIN_RPATH" + MYCMAKEOPTS=("${MYCMAKEOPTS[@]}" + -DCMAKE_PREFIX_PATH="$AOMP/lib/cmake;$AOMP_INSTALL_DIR/lib" + "${AOMP_ORIGIN_RPATH[@]}") else - MYCMAKEOPTS="$MYCMAKEOPTS -DCMAKE_PREFIX_PATH=$INSTALL_PREFIX/lib/asan/cmake - -DOPENMP_EXTRAS_SHARED_LINKER_FLAGS=$OPENMP_EXTRAS_SHARED_LINKER_FLAGS - -DAOMP_BUILD_SANITIZER=$AOMP_BUILD_SANITIZER - -DCMAKE_PREFIX_PATH=$CMAKE_PREFIX_PATH - $OPENMP_EXTRAS_ORIGIN_RPATH" + MYCMAKEOPTS=("${MYCMAKEOPTS[@]}" + -DCMAKE_PREFIX_PATH="$INSTALL_PREFIX/lib/asan/cmake" + -DOPENMP_EXTRAS_SHARED_LINKER_FLAGS="$(cmquot "${OPENMP_EXTRAS_SHARED_LINKER_FLAGS[@]}")" + -DAOMP_BUILD_SANITIZER="$AOMP_BUILD_SANITIZER" + -DCMAKE_PREFIX_PATH="$CMAKE_PREFIX_PATH" + "${OPENMP_EXTRAS_ORIGIN_RPATH[@]}") fi if [ "$1" == "-h" ] || [ "$1" == "help" ] || [ "$1" == "-help" ] ; then help_build_aomp fi -# Make sure we can update the install directory -if [ "$1" == "install" ] ; then - $SUDO mkdir -p $INSTALL_FLANG - $SUDO touch $INSTALL_FLANG/testfile - if [ $? != 0 ] ; then - echo "ERROR: No update access to $INSTALL_FLANG" - exit 1 - fi - $SUDO rm $INSTALL_FLANG/testfile -fi +check_writable_installdir "$1" "$INSTALL_FLANG" # Skip synchronization from git repos if nocmake or install are specified if [ "$1" != "nocmake" ] && [ "$1" != "install" ] ; then echo echo "This is a FRESH START. ERASING any previous builds in $BUILD_DIR/build/flang_runtime" echo "Use ""$0 nocmake"" or ""$0 install"" to avoid FRESH START." - rm -rf $BUILD_DIR/build/flang_runtime - mkdir -p $BUILD_DIR/build/flang_runtime + rm -rf "$BUILD_DIR/build/flang_runtime" + mkdir -p "$BUILD_DIR/build/flang_runtime" if [ "$AOMP_BUILD_SANITIZER" == 1 ]; then - mkdir -p $BUILD_DIR/build/flang_runtime/asan + mkdir -p "$BUILD_DIR/build/flang_runtime/asan" fi else - if [ ! -d $BUILD_DIR/build/flang_runtime ] ; then + if [ ! -d "$BUILD_DIR/build/flang_runtime" ] ; then echo "ERROR: The build directory $BUILD_DIR/build/flang_runtime does not exist" echo " run $0 without nocmake or install options. " exit 1 fi - if [ "$AOMP_BUILD_SANITIZER" == 1 ] && [ ! -d $BUILD_DIR/build/flang_runtime/asan ]; then + if [ "$AOMP_BUILD_SANITIZER" == 1 ] && [ ! -d "$BUILD_DIR/build/flang_runtime/asan" ]; then echo "ERROR: The build directory $BUILD_DIR/build/flang_runtime/asan does not exist" echo " run $0 without nocmake or install options. " exit 1 @@ -125,49 +131,45 @@ else fi # Need llvm-config to come from previous LLVM build -export PATH=$AOMP_INSTALL_DIR/bin:$PATH +export PATH="$AOMP_INSTALL_DIR/bin":$PATH # Old CMAKE uses FC env variable to find fortran compiler -export FC=$AOMP_INSTALL_DIR/bin/flang +export FC="$AOMP_INSTALL_DIR/bin/flang" if [ "$1" != "nocmake" ] && [ "$1" != "install" ] ; then if [ "$SANITIZER" != 1 ]; then - cd $BUILD_DIR/build/flang_runtime + cd "$BUILD_DIR/build/flang_runtime" || exit echo echo " -----Running cmake ---- " - echo ${AOMP_CMAKE} $MYCMAKEOPTS \ + echo "${AOMP_CMAKE}" "$(shquot "${MYCMAKEOPTS[@]}")" \ -DCMAKE_C_FLAGS="$CFLAGS -I$COMP_INC_DIR" \ -DCMAKE_CXX_FLAGS="$CXXFLAGS -I$COMP_INC_DIR" \ - $AOMP_REPOS/$AOMP_FLANG_REPO_NAME - - ${AOMP_CMAKE} $MYCMAKEOPTS \ - -DCMAKE_C_FLAGS="$CFLAGS -I$COMP_INC_DIR" \ - -DCMAKE_CXX_FLAGS="$CXXFLAGS -I$COMP_INC_DIR" \ - $AOMP_REPOS/$AOMP_FLANG_REPO_NAME 2>&1 + "$AOMP_REPOS/$AOMP_FLANG_REPO_NAME" - if [ $? != 0 ] ; then + if ! ${AOMP_CMAKE} "${MYCMAKEOPTS[@]}" \ + -DCMAKE_C_FLAGS="$CFLAGS -I$COMP_INC_DIR" \ + -DCMAKE_CXX_FLAGS="$CXXFLAGS -I$COMP_INC_DIR" \ + "$AOMP_REPOS/$AOMP_FLANG_REPO_NAME" 2>&1; then echo "ERROR cmake failed. Cmake flags" - echo " $MYCMAKEOPTS" + echo " $(shquot "${MYCMAKEOPTS[@]}")" exit 1 fi fi if [ "$AOMP_BUILD_SANITIZER" == 1 ]; then - cd $BUILD_DIR/build/flang_runtime/asan + cd "$BUILD_DIR/build/flang_runtime/asan" || exit echo echo " -----Running cmake flang_runtime-asan ---- " - echo ${AOMP_CMAKE} $ASAN_CMAKE_OPTS \ - -DCMAKE_C_FLAGS="$CFLAGS $ASAN_FLAGS" \ - -DCMAKE_CXX_FLAGS="$CXXFLAGS $ASAN_FLAGS" \ - $AOMP_REPOS/$AOMP_FLANG_REPO_NAME - - ${AOMP_CMAKE} $ASAN_CMAKE_OPTS \ - -DCMAKE_C_FLAGS="$CFLAGS $ASAN_FLAGS" \ - -DCMAKE_CXX_FLAGS="$CXXFLAGS $ASAN_FLAGS" \ - $AOMP_REPOS/$AOMP_FLANG_REPO_NAME 2>&1 - - if [ $? != 0 ] ; then + echo "${AOMP_CMAKE}" "$(shquot "${ASAN_CMAKE_OPTS[@]}")" \ + -DCMAKE_C_FLAGS="\"$CFLAGS $(cmquot "${ASAN_FLAGS[@]}")\"" \ + -DCMAKE_CXX_FLAGS="\"$CXXFLAGS $(cmquot "${ASAN_FLAGS[@]}")\"" \ + "$AOMP_REPOS/$AOMP_FLANG_REPO_NAME" + + if ! ${AOMP_CMAKE} "${ASAN_CMAKE_OPTS[@]}" \ + -DCMAKE_C_FLAGS="$CFLAGS $(cmquot "${ASAN_FLAGS[@]}")" \ + -DCMAKE_CXX_FLAGS="$CXXFLAGS $(cmquot "${ASAN_FLAGS[@]}")" \ + "$AOMP_REPOS/$AOMP_FLANG_REPO_NAME" 2>&1; then echo "ERROR flang_runtime-asan cmake failed. Cmake flags" - echo " $ASAN_CMAKE_OPTS" + echo " $(shquot "${ASAN_CMAKE_OPTS[@]}")" exit 1 fi fi @@ -180,10 +182,10 @@ fi echo if [ "$SANITIZER" != 1 ]; then echo " -----Running make ---- " - cd $BUILD_DIR/build/flang_runtime - echo make -j $AOMP_JOB_THREADS - make -j $AOMP_JOB_THREADS - if [ $? != 0 ] ; then + cd "$BUILD_DIR/build/flang_runtime" || exit + echo make -j "$AOMP_JOB_THREADS" + + if ! make -j "$AOMP_JOB_THREADS"; then echo "ERROR make -j $AOMP_JOB_THREADS failed" exit 1 fi @@ -192,10 +194,10 @@ fi if [ "$AOMP_BUILD_SANITIZER" == 1 ]; then echo echo " -----Running make ---- " - cd $BUILD_DIR/build/flang_runtime/asan - echo make -j $AOMP_JOB_THREADS - make -j $AOMP_JOB_THREADS - if [ $? != 0 ] ; then + cd "$BUILD_DIR/build/flang_runtime/asan" || exit + echo make -j "$AOMP_JOB_THREADS" + + if ! make -j "$AOMP_JOB_THREADS"; then echo "ERROR make -j $AOMP_JOB_THREADS failed" exit 1 fi @@ -203,10 +205,10 @@ fi if [ "$1" == "install" ] ; then if [ "$SANITIZER" != 1 ]; then - cd $BUILD_DIR/build/flang_runtime + cd "$BUILD_DIR/build/flang_runtime" || exit echo " -----Installing to $INSTALL_FLANG ---- " - $SUDO make install - if [ $? != 0 ] ; then + + if ! $SUDO make install; then echo "ERROR make install failed " exit 1 fi @@ -215,10 +217,10 @@ if [ "$1" == "install" ] ; then fi if [ "$AOMP_BUILD_SANITIZER" == 1 ]; then - cd $BUILD_DIR/build/flang_runtime/asan + cd "$BUILD_DIR/build/flang_runtime/asan" || exit echo " -----Installing to $INSTALL_FLANG/lib/asan ---- " - $SUDO make install - if [ $? != 0 ] ; then + + if ! $SUDO make install; then echo "ERROR make install failed " exit 1 fi diff --git a/bin/build_hipamd.sh b/bin/build_hipamd.sh index 196ffd1aa..4ead364ea 100755 --- a/bin/build_hipamd.sh +++ b/bin/build_hipamd.sh @@ -28,9 +28,9 @@ # CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. # --- Start standard header to set AOMP environment variables ---- -realpath=`realpath $0` -thisdir=`dirname $realpath` -. $thisdir/aomp_common_vars +realpath=$(realpath "$0") +thisdir=$(dirname "$realpath") +. "$thisdir/aomp_common_vars" # --- end standard header ---- export HIPAMD_DIR=$AOMP_REPOS/clr @@ -48,7 +48,6 @@ export HIP_CLANG_PATH=$AOMP_INSTALL_DIR/bin export DEVICE_LIB_PATH=$AOMP_INSTALL_DIR/lib export LLVM_DIR=$LLVM_INSTALL_LOC -HIP_PATH=$AOMP_INSTALL_DIR BUILD_DIR=${BUILD_AOMP} BUILDTYPE="Release" @@ -62,23 +61,15 @@ if [ "$1" == "-h" ] || [ "$1" == "help" ] || [ "$1" == "-help" ] ; then exit fi -# Make sure we can update the install directory -if [ "$1" == "install" ] ; then - $SUDO mkdir -p $AOMP_INSTALL_DIR - $SUDO touch $AOMP_INSTALL_DIR/testfile - if [ $? != 0 ] ; then - echo "ERROR: No update access to $AOMP_INSTALL_DIR" - exit 1 - fi - $SUDO rm $AOMP_INSTALL_DIR/testfile -fi +check_writable_installdir "$1" "$AOMP_INSTALL_DIR" -patchrepo $AOMP_REPOS/hipamd -patchrepo $AOMP_REPOS/clr +patchrepo "$AOMP_REPOS/hipamd" +patchrepo "$AOMP_REPOS/clr" -if [ "$AOMP_BUILD_SANITIZER" == 1 ] ; then - LDFLAGS="-fuse-ld=lld $ASAN_FLAGS" -fi +#if [ "$AOMP_BUILD_SANITIZER" == 1 ] ; then + #LDFLAGS=$(shquot '-fuse-ld=lld' "${ASAN_FLAGS[@]}")" + #export LDFLAGS +#fi _ompd_src_dir="$LLVM_INSTALL_LOC/share/gdb/python/ompd/src" @@ -87,72 +78,96 @@ if [ "$1" != "nocmake" ] && [ "$1" != "install" ] ; then if [ -d "$BUILD_DIR/build/hipamd" ] ; then echo echo "FRESH START , CLEANING UP FROM PREVIOUS BUILD" - echo rm -rf $BUILD_DIR/build/hipamd - rm -rf $BUILD_DIR/build/hipamd + echo rm -rf "$BUILD_DIR/build/hipamd" + rm -rf "$BUILD_DIR/build/hipamd" fi - MYCMAKEOPTS="-DCMAKE_BUILD_TYPE=$BUILDTYPE \ - -DCMAKE_INSTALL_PREFIX=$AOMP_INSTALL_DIR \ - -DHIP_COMMON_DIR=$HIP_DIR \ - -DHIP_PLATFORM=amd \ - -DHIP_COMPILER=clang \ - -DCMAKE_HIP_ARCHITECTURES=OFF \ - -DCLR_BUILD_HIP=ON -DCLR_BUILD_OCL=ON \ - -DHIPCC_BIN_DIR=$BUILD_DIR/build/hipcc \ - -DROCM_PATH=$ROCM_PATH" + declare -a MYCMAKEOPTS + + MYCMAKEOPTS=(-DCMAKE_BUILD_TYPE="$BUILDTYPE" + -DCMAKE_INSTALL_PREFIX="$AOMP_INSTALL_DIR" + -DHIP_COMMON_DIR="$HIP_DIR" + -DHIP_PLATFORM=amd + -DHIP_COMPILER=clang + -DCMAKE_HIP_ARCHITECTURES=OFF + -DCLR_BUILD_HIP=ON -DCLR_BUILD_OCL=ON + -DHIPCC_BIN_DIR="$BUILD_DIR/build/hipcc" + -DROCM_PATH="$ROCM_PATH") # If this machine does not have an actvie amd GPU, tell hipamd # to use first in GFXLIST or gfx90a if no GFXLIST - if [ -f $LLVM_INSTALL_LOC/bin/amdgpu-arch ] ; then - $LLVM_INSTALL_LOC/bin/amdgpu-arch >/dev/null - if [ $? != 0 ] ; then - if [ ! -z "$GFXLIST" ] ; then - amdgpu=`echo $GFXLIST | cut -d" " -f1` + if [ -f "$LLVM_INSTALL_LOC/bin/amdgpu-arch" ] ; then + if ! "$LLVM_INSTALL_LOC/bin/amdgpu-arch" >/dev/null; then + if [ -n "$GFXLIST" ] ; then + amdgpu=$(echo "$GFXLIST" | cut -d" " -f1) else amdgpu=gfx90a - fi - MYCMAKEOPTS+=" -DOFFLOAD_ARCH_STR=$amdgpu" + fi + MYCMAKEOPTS=("${MYCMAKEOPTS[@]}" "-DOFFLOAD_ARCH_STR=$amdgpu") fi fi if [ "$AOMP_BUILD_SANITIZER" == 1 ]; then - ASAN_FLAGS="$ASAN_FLAGS -I$SANITIZER_COMGR_INCLUDE_PATH -Wno-error=deprecated-declarations" - ASAN_CMAKE_OPTS="$MYCMAKEOPTS $AOMP_ASAN_ORIGIN_RPATH -DCMAKE_PREFIX_PATH=$AOMP_INSTALL_DIR/lib/asan/cmake;$AOMP_INSTALL_DIR;$HOME/local/openclicdloader -DCMAKE_INSTALL_LIBDIR=lib/asan -DCMAKE_C_COMPILER=$LLVM_INSTALL_LOC/bin/clang -DCMAKE_CXX_COMPILER=$LLVM_INSTALL_LOC/bin/clang++ -DHIP_LLVM_ROOT=$LLVM_INSTALL_LOC" + ASAN_FLAGS=("${ASAN_FLAGS[@]}" -I"$SANITIZER_COMGR_INCLUDE_PATH" -Wno-error=deprecated-declarations) + ASAN_CMAKE_OPTS=("${MYCMAKEOPTS[@]}" "${AOMP_ASAN_ORIGIN_RPATH[@]}" + -DCMAKE_PREFIX_PATH="$AOMP_INSTALL_DIR/lib/asan/cmake;$AOMP_INSTALL_DIR;$HOME/local/openclicdloader" + -DCMAKE_INSTALL_LIBDIR=lib/asan + -DCMAKE_C_COMPILER="$LLVM_INSTALL_LOC/bin/clang" + -DCMAKE_CXX_COMPILER="$LLVM_INSTALL_LOC/bin/clang++" + -DHIP_LLVM_ROOT="$LLVM_INSTALL_LOC") fi if [ "$AOMP_BUILD_DEBUG" == 1 ]; then - HIPAMD_DEBUG_CMAKE_OPTS="$MYCMAKEOPTS $AOMP_DEBUG_ORIGIN_RPATH -DCMAKE_BUILD_TYPE=DEBUG -DCMAKE_PREFIX_PATH=$AOMP_INSTALL_DIR;$HOME/local/openclicdloader -DCMAKE_INSTALL_LIBDIR=lib-debug -DCMAKE_C_COMPILER=$LLVM_INSTALL_LOC/bin/clang -DCMAKE_CXX_COMPILER=$LLVM_INSTALL_LOC/bin/clang++ -DHIP_LLVM_ROOT=$LLVM_INSTALL_LOC" + HIPAMD_DEBUG_CMAKE_OPTS=("${MYCMAKEOPTS[@]}" + "${AOMP_DEBUG_ORIGIN_RPATH[@]}" + -DCMAKE_BUILD_TYPE=DEBUG + -DCMAKE_PREFIX_PATH="$AOMP_INSTALL_DIR;$HOME/local/openclicdloader" + -DCMAKE_INSTALL_LIBDIR=lib-debug + -DCMAKE_C_COMPILER="$LLVM_INSTALL_LOC/bin/clang" + -DCMAKE_CXX_COMPILER="$LLVM_INSTALL_LOC/bin/clang++" + -DHIP_LLVM_ROOT="$LLVM_INSTALL_LOC") fi - HIPAMD_CMAKE_OPTS="$MYCMAKEOPTS -DCMAKE_PREFIX_PATH=$AOMP_INSTALL_DIR;$HOME/local/openclicdloader -DCMAKE_INSTALL_LIBDIR=lib -DCMAKE_CXX_FLAGS=-I${AOMP_INSTALL_DIR}/include/amd_comgr -DCMAKE_CXX_FLAGS=-Wno-error=deprecated-declarations -DCMAKE_C_FLAGS=-Wno-error=deprecated-declarations -DHIP_LLVM_ROOT=$LLVM_INSTALL_LOC $AOMP_ORIGIN_RPATH" + HIPAMD_CMAKE_OPTS=("${MYCMAKEOPTS[@]}" + -DCMAKE_PREFIX_PATH="$AOMP_INSTALL_DIR;$HOME/local/openclicdloader" + -DCMAKE_INSTALL_LIBDIR=lib + -DCMAKE_CXX_FLAGS=-I"${AOMP_INSTALL_DIR}/include/amd_comgr" + -DCMAKE_CXX_FLAGS=-Wno-error=deprecated-declarations + -DCMAKE_C_FLAGS=-Wno-error=deprecated-declarations + -DHIP_LLVM_ROOT="$LLVM_INSTALL_LOC" + "${AOMP_ORIGIN_RPATH[@]}") - echo mkdir -p $BUILD_DIR/build/hipamd - mkdir -p $BUILD_DIR/build/hipamd - echo cd $BUILD_DIR/build/hipamd - cd $BUILD_DIR/build/hipamd + echo "mkdir -p $BUILD_DIR/build/hipamd" + mkdir -p "$BUILD_DIR/build/hipamd" + echo "cd $BUILD_DIR/build/hipamd" + cd "$BUILD_DIR/build/hipamd" || exit echo echo " -----Running hipamd cmake ---- " - echo ${AOMP_CMAKE} $HIPAMD_CMAKE_OPTS $HIPAMD_DIR - ${AOMP_CMAKE} $HIPAMD_CMAKE_OPTS $HIPAMD_DIR - if [ $? != 0 ] ; then + echo "${AOMP_CMAKE}" "${HIPAMD_CMAKE_OPTS[@]}" "$HIPAMD_DIR" + + if ! ${AOMP_CMAKE} "${HIPAMD_CMAKE_OPTS[@]}" "$HIPAMD_DIR"; then echo "ERROR hipamd cmake failed. Cmake flags" - echo " $HIPAMD_CMAKE_OPTS" + echo " $(shquot "${HIPAMD_CMAKE_OPTS[@]}")" exit 1 fi if [ "$AOMP_BUILD_SANITIZER" == 1 ]; then export ROCM_RPATH="$AOMP_ORIGIN_RPATH_LIST" - echo mkdir -p $BUILD_DIR/build/hipamd/asan - mkdir -p $BUILD_DIR/build/hipamd/asan - echo cd $BUILD_DIR/build/hipamd/asan - cd $BUILD_DIR/build/hipamd/asan + echo "mkdir -p $BUILD_DIR/build/hipamd/asan" + mkdir -p "$BUILD_DIR/build/hipamd/asan" + echo "cd $BUILD_DIR/build/hipamd/asan" + cd "$BUILD_DIR/build/hipamd/asan" || exit echo echo " -----Running hipamd-asan cmake -----" - echo ${AOMP_CMAKE} $ASAN_CMAKE_OPTS -DCMAKE_CXX_FLAGS="$ASAN_FLAGS" $HIPAMD_DIR - ${AOMP_CMAKE} $ASAN_CMAKE_OPTS -DCMAKE_CXX_FLAGS="$ASAN_FLAGS" $HIPAMD_DIR - if [ $? != 0 ] ; then + echo "${AOMP_CMAKE}" "${ASAN_CMAKE_OPTS[@]}" \ + -DCMAKE_CXX_FLAGS=\""$(cmquot "${ASAN_FLAGS[@]}")\"" + "$HIPAMD_DIR" + + if ! ${AOMP_CMAKE} "${ASAN_CMAKE_OPTS[@]}" \ + -DCMAKE_CXX_FLAGS="$(cmquot "${ASAN_FLAGS[@]}")" \ + "$HIPAMD_DIR"; then echo "ERROR hipamd-asan cmake failed. Cmake flags" - echo " $ASAN_CMAKE_OPTS" + echo " $(shquot "${ASAN_CMAKE_OPTS[@]}")" exit 1 fi fi @@ -160,22 +175,28 @@ if [ "$1" != "nocmake" ] && [ "$1" != "install" ] ; then if [ -d "$BUILD_DIR/build/hipamd_debug" ] ; then echo echo "FRESH START , CLEANING UP FROM PREVIOUS BUILD" - echo rm -rf $BUILD_DIR/build/hipamd_debug - rm -rf $BUILD_DIR/build/hipamd_debug + echo "rm -rf $BUILD_DIR/build/hipamd_debug" + rm -rf "$BUILD_DIR/build/hipamd_debug" fi - echo mkdir -p $BUILD_DIR/build/hipamd_debug - mkdir -p $BUILD_DIR/build/hipamd_debug - echo cd $BUILD_DIR/build/hipamd_debug - cd $BUILD_DIR/build/hipamd_debug + echo "mkdir -p $BUILD_DIR/build/hipamd_debug" + mkdir -p "$BUILD_DIR/build/hipamd_debug" + echo "cd $BUILD_DIR/build/hipamd_debug" + cd "$BUILD_DIR/build/hipamd_debug" || exit echo echo " -----Running hipamd-debug cmake -----" - _prefix_map="\""-fdebug-prefix-map=$HIPAMD_DIR=$_ompd_src_dir/clr"\"" - echo ${AOMP_CMAKE} $HIPAMD_DEBUG_CMAKE_OPTS -DCMAKE_CXX_FLAGS="-g $_prefix_map" -DCMAKE_C_FLAGS="-g $_prefix_map" $HIPAMD_DIR - ${AOMP_CMAKE} $HIPAMD_DEBUG_CMAKE_OPTS -DCMAKE_CXX_FLAGS="-g $_prefix_map" -DCMAKE_C_FLAGS="-g $_prefix_map" $HIPAMD_DIR - if [ $? != 0 ] ; then + _prefix_map=(-fdebug-prefix-map="$HIPAMD_DIR=$_ompd_src_dir/clr") + echo "${AOMP_CMAKE}" "${HIPAMD_DEBUG_CMAKE_OPTS[@]}" \ + -DCMAKE_CXX_FLAGS="\"$(cmquot -g "${_prefix_map[@]}")\"" \ + -DCMAKE_C_FLAGS="\"$(cmquot -g "${_prefix_map[@]}")\"" \ + "$HIPAMD_DIR" + + if ! ${AOMP_CMAKE} "${HIPAMD_DEBUG_CMAKE_OPTS[@]}" \ + -DCMAKE_CXX_FLAGS="$(cmquot -g "${_prefix_map[@]}")" \ + -DCMAKE_C_FLAGS="$(cmquot -g "${_prefix_map[@]}")" \ + "$HIPAMD_DIR"; then echo "ERROR hipamd-debug cmake failed. Cmake flags" - echo " $HIPAMD_DEBUG_CMAKE_OPTS" + echo " $(shquot "${HIPAMD_DEBUG_CMAKE_OPTS[@]}")" exit 1 fi fi @@ -185,12 +206,12 @@ if [ "$1" = "cmake" ]; then exit 0 fi -cd $BUILD_DIR/build/hipamd +cd "$BUILD_DIR/build/hipamd" || exit echo echo " -----Running make for hipamd ---- " -make -j $AOMP_JOB_THREADS -if [ $? != 0 ] ; then + +if ! make -j "$AOMP_JOB_THREADS"; then echo " " echo "ERROR: make -j $AOMP_JOB_THREADS FAILED" echo "To restart:" @@ -207,11 +228,11 @@ else fi if [ "$AOMP_BUILD_SANITIZER" == 1 ] ; then - cd $BUILD_DIR/build/hipamd/asan + cd "$BUILD_DIR/build/hipamd/asan" || exit echo echo " -----Running make for hipamd-asan ----- " - make -j $AOMP_JOB_THREADS - if [ $? != 0 ] ; then + + if ! make -j "$AOMP_JOB_THREADS"; then echo " " echo "ERROR: make -j $AOMP_JOB_THREADS FAILED" echo "To restart:" @@ -228,11 +249,11 @@ if [ "$AOMP_BUILD_SANITIZER" == 1 ] ; then fi fi if [ "$AOMP_BUILD_DEBUG" == 1 ] ; then - cd $BUILD_DIR/build/hipamd_debug + cd "$BUILD_DIR/build/hipamd_debug" || exit echo echo " -----Running make for hipamd-debug ----- " - make -j $AOMP_JOB_THREADS amdhip64 - if [ $? != 0 ] ; then + + if ! make -j "$AOMP_JOB_THREADS" amdhip64; then echo " " echo "ERROR: make -j $AOMP_JOB_THREADS FAILED" echo "To restart:" @@ -250,69 +271,64 @@ if [ "$AOMP_BUILD_DEBUG" == 1 ] ; then fi function edit_installed_hip_file(){ - if [ -f $installed_hip_file_to_edit ] ; then + local installed_file_to_edit="$1" + if [ -f "$installed_file_to_edit" ] ; then # In hipvars.pm HIP_PATH is determined by parent directory of hipcc location. # Set ROCM_PATH using HIP_PATH - $SUDO sed -i -e "s/\"\/opt\/rocm\"/\"\$HIP_PATH\"/" $installed_file_to_edit + $SUDO sed -i -e "s/\"\/opt\/rocm\"/\"\$HIP_PATH\"/" "$installed_file_to_edit" # Set HIP_CLANG_PATH using ROCM_PATH/bin - $SUDO sed -i -e "s/\"\$ROCM_PATH\/llvm\/bin\"/\"\$ROCM_PATH\/bin\"/" $installed_file_to_edit + $SUDO sed -i -e "s/\"\$ROCM_PATH\/llvm\/bin\"/\"\$ROCM_PATH\/bin\"/" "$installed_file_to_edit" fi } # ----------- Install only if asked ---------------------------- if [ "$1" == "install" ] ; then - cd $BUILD_DIR/build/hipamd + cd "$BUILD_DIR/build/hipamd" || exit echo echo " -----Installing to $AOMP_INSTALL_DIR ----- " - $SUDO make install - if [ $? != 0 ] ; then + + if ! $SUDO make install; then echo "ERROR make install failed " exit 1 fi if [ "$AOMP_BUILD_SANITIZER" == 1 ] ; then - cd $BUILD_DIR/build/hipamd/asan + cd "$BUILD_DIR/build/hipamd/asan" || exit echo echo " -----Installing to $AOMP_INSTALL_DIR/lib/asan" - $SUDO make install - if [ $? != 0 ] ; then + + if ! $SUDO make install; then echo "ERROR make install failed " exit 1 fi fi if [ "$AOMP_BUILD_DEBUG" == 1 ] ; then - cd $BUILD_DIR/build/hipamd_debug + cd "$BUILD_DIR/build/hipamd_debug" || exit echo echo " -----Installing to $AOMP_INSTALL_DIR/lib-debug" - $SUDO make install - if [ $? != 0 ] ; then + + if ! $SUDO make install; then echo "ERROR make install failed " exit 1 fi - $SUDO mkdir -p $_ompd_src_dir - echo cp -r $HIPAMD_DIR/hipamd $_ompd_src_dir - $SUDO cp -r $HIPAMD_DIR/hipamd $_ompd_src_dir - echo cp -r $HIPAMD_DIR/opencl $_ompd_src_dir - $SUDO cp -r $HIPAMD_DIR/opencl $_ompd_src_dir - echo cp -r $HIPAMD_DIR/rocclr $_ompd_src_dir - $SUDO cp -r $HIPAMD_DIR/rocclr $_ompd_src_dir + $SUDO mkdir -p "$_ompd_src_dir" + echo "cp -r $HIPAMD_DIR/hipamd $_ompd_src_dir" + $SUDO cp -r "$HIPAMD_DIR/hipamd" "$_ompd_src_dir" + echo "cp -r $HIPAMD_DIR/opencl $_ompd_src_dir" + $SUDO cp -r "$HIPAMD_DIR/opencl" "$_ompd_src_dir" + echo cp -r "$HIPAMD_DIR/rocclr" "$_ompd_src_dir" + $SUDO cp -r "$HIPAMD_DIR/rocclr" "$_ompd_src_dir" fi - removepatch $AOMP_REPOS/hipamd - removepatch $AOMP_REPOS/clr + removepatch "$AOMP_REPOS/hipamd" + removepatch "$AOMP_REPOS/clr" - # The hip perl scripts have /opt/rocm hardcoded, so fix them after then are installed + # The hip perl scripts have /opt/rocm hardcoded, so fix them after then are installed # but only if not installing to rocm. - if [ $AOMP_INSTALL_DIR != "/opt/rocm/llvm" ] ; then - SED_INSTALL_DIR=`echo $AOMP_INSTALL_DIR | sed -e 's/\//\\\\\//g' ` - installed_file_to_edit=$AOMP_INSTALL_DIR/bin/hipcc - $(edit_installed_hip_file) - installed_file_to_edit=$AOMP_INSTALL_DIR/bin/hipvars.pm - $(edit_installed_hip_file) + if [ "$AOMP_INSTALL_DIR" != "/opt/rocm/llvm" ] ; then + edit_installed_hip_file "$AOMP_INSTALL_DIR/bin/hipcc" + edit_installed_hip_file "$AOMP_INSTALL_DIR/bin/hipvars.pm" # nothing to change in hipconfig but in case something is added in future, try to fix it - installed_file_to_edit=$AOMP_INSTALL_DIR/bin/hipconfig - $(edit_installed_hip_file) + edit_installed_hip_file "$AOMP_INSTALL_DIR/bin/hipconfig" fi - - fi diff --git a/bin/build_hipcc.sh b/bin/build_hipcc.sh index 3a71dd797..7ad2314c4 100755 --- a/bin/build_hipcc.sh +++ b/bin/build_hipcc.sh @@ -24,9 +24,9 @@ # SOFTWARE. # --- Start standard header to set AOMP environment variables ---- -realpath=`realpath $0` -thisdir=`dirname $realpath` -. $thisdir/aomp_common_vars +realpath=$(realpath "$0") +thisdir=$(dirname "$realpath") +. "$thisdir/aomp_common_vars" # --- end standard header ---- HIPCC_REPO_DIR=$AOMP_REPOS/$AOMP_PROJECT_REPO_NAME/amd/hipcc @@ -47,12 +47,12 @@ if [ "$1" == "-h" ] || [ "$1" == "help" ] || [ "$1" == "-help" ] ; then exit fi -if [ ! -d $EXTRAS_REPO_DIR ] ; then - echo "ERROR: Missing repository $EXTRAS_REPO_DIR/" +if [ ! -d "$HIPCC_REPO_DIR" ] ; then + echo "ERROR: Missing repository $HIPCC_REPO_DIR/" exit 1 fi -if [ ! -f $LLVM_INSTALL_LOC/bin/clang ] ; then +if [ ! -f "$LLVM_INSTALL_LOC/bin/clang" ] ; then echo "ERROR: Missing file $LLVM_INSTALL_LOC/bin/clang" echo " Build and install the AOMP clang compiler in $AOMP first" echo " This is needed to build hipcc " @@ -60,39 +60,33 @@ if [ ! -f $LLVM_INSTALL_LOC/bin/clang ] ; then exit 1 fi -# Make sure we can update the install directory -if [ "$1" == "install" ] ; then - $SUDO mkdir -p $INSTALL_HIPCC - $SUDO touch $INSTALL_HIPCC/testfile - if [ $? != 0 ] ; then - echo "ERROR: No update access to $INSTALL_HIPCC" - exit 1 - fi - $SUDO rm $INSTALL_HIPCC/testfile -fi +check_writable_installdir "$1" "$INSTALL_HIPCC" if [ "$1" != "nocmake" ] && [ "$1" != "install" ] ; then if [ -d "$BUILD_DIR/build/hipcc" ] ; then echo echo "FRESH START , CLEANING UP FROM PREVIOUS BUILD" - echo rm -rf $BUILD_DIR/build/hipcc - rm -rf $BUILD_DIR/build/hipcc + echo "rm -rf $BUILD_DIR/build/hipcc" + rm -rf "$BUILD_DIR/build/hipcc" fi - MYCMAKEOPTS="-DCMAKE_BUILD_TYPE=$BUILDTYPE -DCMAKE_INSTALL_PREFIX=$AOMP_INSTALL_DIR" + declare -a MYCMAKEOPTS + + MYCMAKEOPTS=(-DCMAKE_BUILD_TYPE="$BUILDTYPE" + -DCMAKE_INSTALL_PREFIX="$AOMP_INSTALL_DIR") - mkdir -p $BUILD_DIR/build/hipcc - cd $BUILD_DIR/build/hipcc + mkdir -p "$BUILD_DIR/build/hipcc" + cd "$BUILD_DIR/build/hipcc" || exit export SED_INSTALL_DIR echo echo " -----Running cmake ---- " - echo ${AOMP_CMAKE} $MYCMAKEOPTS $HIPCC_REPO_DIR - ${AOMP_CMAKE} $MYCMAKEOPTS $HIPCC_REPO_DIR - if [ $? != 0 ] ; then + echo "${AOMP_CMAKE}" "$(shquot "${MYCMAKEOPTS[@]}")" "$HIPCC_REPO_DIR" + + if ! ${AOMP_CMAKE} "${MYCMAKEOPTS[@]}" "$HIPCC_REPO_DIR"; then echo "ERROR hipcc cmake failed. Cmake flags" - echo " $MYCMAKEOPTS" + echo " $(shquot "${MYCMAKEOPTS[@]}")" exit 1 fi fi @@ -101,11 +95,11 @@ if [ "$1" = "cmake" ]; then exit 0 fi -cd $BUILD_DIR/build/hipcc +cd "$BUILD_DIR/build/hipcc" || exit echo echo " -----Running make for hipcc ---- " -make -j $AOMP_JOB_THREADS -if [ $? != 0 ] ; then + +if ! make -j "$AOMP_JOB_THREADS"; then echo " " echo "ERROR: make -j $AOMP_JOB_THREADS FAILED" echo "To restart:" @@ -123,11 +117,11 @@ fi # ----------- Install only if asked ---------------------------- if [ "$1" == "install" ] ; then - cd $BUILD_DIR/build/hipcc + cd "$BUILD_DIR/build/hipcc" || exit echo echo " -----Installing to $INSTALL_HIPCC ----- " - $SUDO make install - if [ $? != 0 ] ; then + + if ! $SUDO make install; then echo "ERROR make install failed " exit 1 fi diff --git a/bin/build_hipfort.sh b/bin/build_hipfort.sh index b371c4cb8..83e584bbf 100755 --- a/bin/build_hipfort.sh +++ b/bin/build_hipfort.sh @@ -28,9 +28,9 @@ # SOFTWARE. # --- Start standard header to set AOMP environment variables ---- -realpath=`realpath $0` -thisdir=`dirname $realpath` -. $thisdir/aomp_common_vars +realpath=$(realpath "$0") +thisdir=$(dirname "$realpath") +. "$thisdir/aomp_common_vars" # --- end standard header ---- REPO_DIR=$AOMP_REPOS/hipfort @@ -47,60 +47,53 @@ if [ "$1" == "-h" ] || [ "$1" == "help" ] || [ "$1" == "-help" ] ; then exit fi -if [ ! -d $REPO_DIR ] ; then +if [ ! -d "$REPO_DIR" ] ; then echo "ERROR: Missing repository $REPO_DIR/" exit 1 fi -if [ ! -f $AOMP/bin/clang ] ; then - if [ ! -f $AOMP/lib/llvm/bin/clang ] ; then +if [ ! -f "$AOMP/bin/clang" ] ; then + if [ ! -f "$AOMP/lib/llvm/bin/clang" ] ; then echo "ERROR: Missing file $AOMP/lib/llvm/bin/clang" echo " " exit 1 fi fi -# Make sure we can update the install directory -if [ "$1" == "install" ] ; then - $SUDO mkdir -p $HIPFORT_INSTALL_DIR - $SUDO touch $HIPFORT_INSTALL_DIR/testfile - if [ $? != 0 ] ; then - echo "ERROR: No update access to $HIPFORT_INSTALL_DIR" - exit 1 - fi - $SUDO rm $HIPFORT_INSTALL_DIR/testfile -fi +check_writable_installdir "$1" "$HIPFORT_INSTALL_DIR" -patchrepo $AOMP_REPOS/hipfort +patchrepo "$AOMP_REPOS/hipfort" if [ "$1" != "nocmake" ] && [ "$1" != "install" ] ; then if [ -d "$BUILD_DIR/build/hipfort" ] ; then echo echo "FRESH START , CLEANING UP FROM PREVIOUS BUILD" - echo rm -rf $BUILD_DIR/build/hipfort - rm -rf $BUILD_DIR/build/hipfort + echo "rm -rf $BUILD_DIR/build/hipfort" + rm -rf "$BUILD_DIR/build/hipfort" fi - MYCMAKEOPTS=" \ --DCMAKE_INSTALL_PREFIX=$HIPFORT_INSTALL_DIR \ --DCMAKE_BUILD_TYPE=Release \ --DHIPFORT_COMPILER=$LLVM_INSTALL_LOC/bin/flang \ --DHIPFORT_COMPILER_FLAGS="-cpp" \ --DCMAKE_Fortran_FLAGS_DEBUG="" \ --DCMAKE_PREFIX_PATH=$AOMP_INSTALL_DIR/lib/cmake \ --DHIPFORT_AR=$LLVM_INSTALL_LOC/bin/llvm-ar \ --DHIPFORT_RANLIB=$LLVM_INSTALL_LOC/bin/llvm-ranlib " - - mkdir -p $BUILD_DIR/build/hipfort - cd $BUILD_DIR/build/hipfort + declare -a MYCMAKEOPTS + + MYCMAKEOPTS=(-DCMAKE_INSTALL_PREFIX="$HIPFORT_INSTALL_DIR" + -DCMAKE_BUILD_TYPE=Release + -DHIPFORT_COMPILER="$LLVM_INSTALL_LOC/bin/flang" + -DHIPFORT_COMPILER_FLAGS="-cpp" + -DCMAKE_Fortran_FLAGS_DEBUG="" + -DCMAKE_PREFIX_PATH="$AOMP_INSTALL_DIR/lib/cmake" + -DHIPFORT_AR="$LLVM_INSTALL_LOC/bin/llvm-ar" + -DHIPFORT_RANLIB="$LLVM_INSTALL_LOC/bin/llvm-ranlib") + + mkdir -p "$BUILD_DIR/build/hipfort" + cd "$BUILD_DIR/build/hipfort" || exit echo echo " -----Running hipfort cmake ---- " - echo ${AOMP_CMAKE} $MYCMAKEOPTS -DCMAKE_Fortran_FLAGS="-ffree-form -fPIC" $REPO_DIR - ${AOMP_CMAKE} $MYCMAKEOPTS -DCMAKE_Fortran_FLAGS="-ffree-form -fPIC" $REPO_DIR + echo "${AOMP_CMAKE}" "$(shquot "${MYCMAKEOPTS[@]}")" -DCMAKE_Fortran_FLAGS=\"-ffree-form -fPIC\" "$REPO_DIR" - if [ $? != 0 ] ; then + if ! ${AOMP_CMAKE} "${MYCMAKEOPTS[@]}" \ + -DCMAKE_Fortran_FLAGS="-ffree-form -fPIC" \ + "$REPO_DIR"; then echo "ERROR hipfort cmake failed. Cmake flags" - echo " $MYCMAKEOPTS" + echo " $(shquot "${MYCMAKEOPTS[@]}")" exit 1 fi fi @@ -109,11 +102,11 @@ if [ "$1" = "cmake" ]; then exit 0 fi -cd $BUILD_DIR/build/hipfort +cd "$BUILD_DIR/build/hipfort" || exit echo echo " -----Running make for hipfort ---- " -make -j $AOMP_JOB_THREADS -if [ $? != 0 ] ; then + +if ! make -j "$AOMP_JOB_THREADS"; then echo " " echo "ERROR: make -j $AOMP_JOB_THREADS FAILED" echo "To restart:" @@ -131,13 +124,12 @@ fi # ----------- Install only if asked ---------------------------- if [ "$1" == "install" ] ; then - cd $BUILD_DIR/build/hipfort + cd "$BUILD_DIR/build/hipfort" || exit echo echo " -----Installing to $HIPFORT_INSTALL_DIR ----- " - $SUDO make install - if [ $? != 0 ] ; then + if ! $SUDO make install; then echo "ERROR make install failed " exit 1 fi - removepatch $AOMP_REPOS/hipfort + removepatch "$AOMP_REPOS/hipfort" fi diff --git a/bin/build_libdevice.sh b/bin/build_libdevice.sh index 8e861b14d..511bfe416 100755 --- a/bin/build_libdevice.sh +++ b/bin/build_libdevice.sh @@ -5,9 +5,9 @@ # # --- Start standard header to set AOMP environment variables ---- -realpath=`realpath $0` -thisdir=`dirname $realpath` -. $thisdir/aomp_common_vars +realpath=$(realpath "$0") +thisdir=$(dirname "$realpath") +. "$thisdir/aomp_common_vars" # --- end standard header ---- # We now pickup HSA from the AOMP install directory because it is built @@ -20,62 +20,66 @@ INSTALL_DIR=$INSTALL_ROOT_DIR export LLVM_DIR=$AOMP_INSTALL_DIR export LLVM_BUILD=$AOMP_INSTALL_DIR -SOURCEDIR=$AOMP_REPOS/$AOMP_PROJECT_REPO_NAME/amd/$AOMP_LIBDEVICE_REPO_NAME REPO_DIR=$AOMP_REPOS/$AOMP_PROJECT_REPO_NAME/amd/$AOMP_LIBDEVICE_REPO_NAME -MYCMAKEOPTS="-DLLVM_DIR=$LLVM_DIR -DCMAKE_INSTALL_LIBDIR=lib" +declare -a MYCMAKEOPTS -if [ ! -d $AOMP_INSTALL_DIR/lib ] ; then +MYCMAKEOPTS=(-DLLVM_DIR="$LLVM_DIR" -DCMAKE_INSTALL_LIBDIR=lib) + +if [ ! -d "$AOMP_INSTALL_DIR/lib" ]; then echo "ERROR: Directory $AOMP/lib is missing" echo " AOMP must be installed in $AOMP_INSTALL_DIR to continue" exit 1 fi export LLVM_BUILD HSA_DIR -export PATH=$LLVM_BUILD/bin:$PATH +export PATH="$LLVM_BUILD/bin":$PATH -patchrepo $REPO_DIR +patchrepo "$REPO_DIR" -if [ "$1" != "install" && "$1" != "nocmake" ]; then +if [ "$1" != "install" ] && [ "$1" != "nocmake" ]; then builddir_libdevice=$BUILD_DIR/build/libdevice - if [ -d $builddir_libdevice ] ; then - echo rm -rf $builddir_libdevice + if [ -d "$builddir_libdevice" ]; then + echo rm -rf "$builddir_libdevice" # need SUDO because a previous make install was done with sudo - $SUDO rm -rf $builddir_libdevice + $SUDO rm -rf "$builddir_libdevice" fi - mkdir -p $builddir_libdevice - cd $builddir_libdevice + mkdir -p "$builddir_libdevice" + cd "$builddir_libdevice" || exit echo - echo DOING BUILD in Directory $builddir_libdevice + echo "DOING BUILD in Directory $builddir_libdevice" echo CC="$LLVM_BUILD/bin/clang" export CC - echo "${AOMP_CMAKE} $MYCMAKEOPTS -DCMAKE_INSTALL_PREFIX=$INSTALL_DIR $AOMP_REPOS/$AOMP_PROJECT_REPO_NAME/amd/$AOMP_LIBDEVICE_REPO_NAME" - ${AOMP_CMAKE} $MYCMAKEOPTS -DCMAKE_INSTALL_PREFIX=$INSTALL_DIR $AOMP_REPOS/$AOMP_PROJECT_REPO_NAME/amd/$AOMP_LIBDEVICE_REPO_NAME - if [ $? != 0 ] ; then - echo "ERROR cmake failed command was \n" - echo " ${AOMP_CMAKE} $MYCMAKEOPTS -DCMAKE_INSTALL_PREFIX=$INSTALL_DIR $BUILD_DIR/$AOMP_LIBDEVICE_REPO_NAME" + echo "${AOMP_CMAKE}" "$(shquot "${MYCMAKEOPTS[@]}")" \ + "-DCMAKE_INSTALL_PREFIX=$INSTALL_DIR" \ + "$AOMP_REPOS/$AOMP_PROJECT_REPO_NAME/amd/$AOMP_LIBDEVICE_REPO_NAME" + + if ! ${AOMP_CMAKE} "${MYCMAKEOPTS[@]}" \ + -DCMAKE_INSTALL_PREFIX="$INSTALL_DIR" \ + "$AOMP_REPOS/$AOMP_PROJECT_REPO_NAME/amd/$AOMP_LIBDEVICE_REPO_NAME"; then + echo "ERROR cmake failed command was:" + echo " ${AOMP_CMAKE} $(shquot "${MYCMAKEOPTS[@]}") -DCMAKE_INSTALL_PREFIX=$INSTALL_DIR $BUILD_DIR/$AOMP_LIBDEVICE_REPO_NAME" exit 1 fi fi if [ "$1" = "cmake" ]; then - removepatch $REPO_DIR + removepatch "$REPO_DIR" exit 0 fi if [ "$1" != "install" ]; then echo "make -j $AOMP_JOB_THREADS" - make -j $AOMP_JOB_THREADS - if [ $? != 0 ] ; then + + if ! make -j "$AOMP_JOB_THREADS"; then echo "ERROR make failed " exit 1 fi - echo echo " Done with all makes" echo " Please run ./build_libdevice.sh install " @@ -83,7 +87,7 @@ if [ "$1" != "install" ]; then if [ "$SKIPTEST" != "YES" ] ; then builddir_libdevice=$BUILD_DIR/build/libdevice - cd $builddir_libdevice + cd "$builddir_libdevice" || exit echo "running tests in $builddir_libdevice" make test echo @@ -95,14 +99,14 @@ fi if [ "$1" == "install" ] ; then echo - echo mkdir -p $INSTALL_DIR/include - $SUDO mkdir -p $INSTALL_DIR/include - $SUDO mkdir -p $INSTALL_DIR/lib + echo mkdir -p "$INSTALL_DIR/include" + $SUDO mkdir -p "$INSTALL_DIR/include" + $SUDO mkdir -p "$INSTALL_DIR/lib" builddir_libdevice=$BUILD_DIR/build/libdevice echo "running make install from $builddir_libdevice" - cd $builddir_libdevice - echo $SUDO make -j $AOMP_JOB_THREADS install - $SUDO make -j $AOMP_JOB_THREADS install + cd "$builddir_libdevice" || exit + echo "$SUDO make -j $AOMP_JOB_THREADS install" + $SUDO make -j "$AOMP_JOB_THREADS" install # rocm-device-lib cmake installs to lib dir, move all bc files up one level # and cleanup unused oclc_isa_version bc files and link correct one @@ -120,5 +124,5 @@ if [ "$1" == "install" ] ; then echo echo " $0 Installation complete into $INSTALL_DIR" echo - removepatch $REPO_DIR + removepatch "$REPO_DIR" fi diff --git a/bin/build_llvm-classic.sh b/bin/build_llvm-classic.sh index 2cb1cb8b1..b4fa8a6dc 100755 --- a/bin/build_llvm-classic.sh +++ b/bin/build_llvm-classic.sh @@ -12,12 +12,12 @@ BUILD_TYPE=${BUILD_TYPE:-Release} # --- Start standard header to set AOMP environment variables ---- -realpath=`realpath $0` -thisdir=`dirname $realpath` -. $thisdir/aomp_common_vars +realpath=$(realpath "$0") +thisdir=$(dirname "$realpath") +. "$thisdir/aomp_common_vars" # --- end standard header ---- -if [ $AOMP_BUILD_FLANG_CLASSIC == 0 ] ; then +if [ "$AOMP_BUILD_FLANG_CLASSIC" == 0 ] ; then if [ "$1" != "install" ] ; then echo "WARNING: ROCM install for $AOMP_FLANG_CLASSIC_REL/llvm-classic not found." echo " This build will skip build of flang-classic." @@ -27,29 +27,23 @@ if [ $AOMP_BUILD_FLANG_CLASSIC == 0 ] ; then fi TARGETS_TO_BUILD="AMDGPU;${AOMP_NVPTX_TARGET}X86" -if [ $AOMP_STANDALONE_BUILD == 1 ] ; then - standalone_word="_STANDALONE" -else - standalone_word="" -fi - if [ "$AOMP_USE_NINJA" == 0 ] ; then - AOMP_SET_NINJA_GEN="" + AOMP_SET_NINJA_GEN=() else - AOMP_SET_NINJA_GEN="-G Ninja" + AOMP_SET_NINJA_GEN=(-G Ninja) fi -osversion=$(cat /etc/os-release | grep -e ^VERSION_ID) -if [[ $osversion =~ '"7.' ]] || [[ $osversion =~ '"8' ]]; then - _cxx_flag="-DCMAKE_CXX_FLAGS='-D_GLIBCXX_USE_CXX11_ABI=0'" +osversion=$(grep -e ^VERSION_ID < /etc/os-release) +if [[ $osversion =~ \"7\. ]] || [[ $osversion =~ \"8\. ]]; then + _cxx_flag=(-DCMAKE_CXX_FLAGS='-D_GLIBCXX_USE_CXX11_ABI=0') else - _cxx_flag="" + _cxx_flag=() fi # Legacy Flang dosen't support building of compiler-rt so it # utilizes the clang runtime libraries build/install using build_project.sh. # The LLVM_VERSION_MAJOR of classic flang driver has to match with the clang # binaries generated from build_project.sh. -LLVM_VERSION_MAJOR=$(${LLVM_INSTALL_LOC}/bin/clang --version | grep -oP '(?<=clang version )[0-9]+') +LLVM_VERSION_MAJOR=$("${LLVM_INSTALL_LOC}"/bin/clang --version | grep -oP '(?<=clang version )[0-9]+') # We need a version of ROCM llvm that supports flang-classic # via the link from flang to clang. rocm 5.5 would be best. @@ -69,58 +63,48 @@ AOMP_LFL_DIR=${AOMP_LFL_DIR:-"17.0-4"} # comment out above line and uncomment next line for new LFL #AOMP_LFL_DIR=${AOMP_LFL_DIR:-17.0-4} -LLVMCMAKEOPTS="\ --DLLVM_ENABLE_PROJECTS=clang \ --DCMAKE_BUILD_TYPE=Release \ --DLLVM_ENABLE_ASSERTIONS=ON \ --DLLVM_TARGETS_TO_BUILD=$TARGETS_TO_BUILD \ --DCLANG_DEFAULT_LINKER=lld \ --DLLVM_VERSION_MAJOR="$LLVM_VERSION_MAJOR" \ --DLLVM_INCLUDE_BENCHMARKS=0 \ --DLLVM_INCLUDE_RUNTIMES=0 \ --DLLVM_INCLUDE_EXAMPLES=0 \ --DLLVM_INCLUDE_TESTS=0 \ --DLLVM_INCLUDE_DOCS=0 \ --DLLVM_INCLUDE_UTILS=0 \ --DCLANG_DEFAULT_PIE_ON_LINUX=0 \ --DLLVM_ENABLE_ZSTD=OFF \ -$_cxx_flag \ -$AOMP_SET_NINJA_GEN" +declare -a LLVMCMAKEOPTS + +LLVMCMAKEOPTS=(-DLLVM_ENABLE_PROJECTS=clang + -DCMAKE_BUILD_TYPE=Release + -DLLVM_ENABLE_ASSERTIONS=ON + -DLLVM_TARGETS_TO_BUILD="$TARGETS_TO_BUILD" + -DCLANG_DEFAULT_LINKER=lld + -DLLVM_VERSION_MAJOR="$LLVM_VERSION_MAJOR" + -DLLVM_INCLUDE_BENCHMARKS=0 + -DLLVM_INCLUDE_RUNTIMES=0 + -DLLVM_INCLUDE_EXAMPLES=0 + -DLLVM_INCLUDE_TESTS=0 + -DLLVM_INCLUDE_DOCS=0 + -DLLVM_INCLUDE_UTILS=0 + -DCLANG_DEFAULT_PIE_ON_LINUX=0 + -DLLVM_ENABLE_ZSTD=OFF + "${_cxx_flag[@]}" + "${AOMP_SET_NINJA_GEN[@]}") if [ "$1" == "-h" ] || [ "$1" == "help" ] || [ "$1" == "-help" ] ; then help_build_aomp fi -if [ $AOMP_STANDALONE_BUILD == 1 ] ; then - if [ ! -L $AOMP ] ; then - if [ -d $AOMP ] ; then - echo "ERROR: Directory $AOMP is a physical directory." - echo " It must be a symbolic link or not exist" - exit 1 - fi - fi -fi - -# Make sure we can update the install directory -if [ "$1" == "install" ] ; then - $SUDO mkdir -p $AOMP_INSTALL_DIR - $SUDO touch $AOMP_INSTALL_DIR/testfile - if [ $? != 0 ] ; then - echo "ERROR: No update access to $AOMP_INSTALL_DIR" +if [ "$AOMP_STANDALONE_BUILD" == 1 ] ; then + if [ ! -L "$AOMP" ] && [ -d "$AOMP" ] ; then + echo "ERROR: Directory $AOMP is a physical directory." + echo " It must be a symbolic link or not exist" exit 1 fi - $SUDO rm $AOMP_INSTALL_DIR/testfile fi +check_writable_installdir "$1" "$AOMP_INSTALL_DIR" + if [ "$1" != "nocmake" ] && [ "$1" != "install" ] ; then echo echo "This is a FRESH START. ERASING any previous builds in $BUILD_DIR/build/flang-classic/$AOMP_LFL_DIR" echo "Use ""$0 nocmake"" or ""$0 install"" to avoid FRESH START." - rm -rf $BUILD_DIR/build/flang-classic/$AOMP_LFL_DIR/llvm-classic - mkdir -p $BUILD_DIR/build/flang-classic/$AOMP_LFL_DIR - mkdir -p $BUILD_DIR/build/flang-classic/$AOMP_LFL_DIR/llvm-classic + rm -rf "$BUILD_DIR/build/flang-classic/$AOMP_LFL_DIR/llvm-classic" + mkdir -p "$BUILD_DIR/build/flang-classic/$AOMP_LFL_DIR" + mkdir -p "$BUILD_DIR/build/flang-classic/$AOMP_LFL_DIR/llvm-classic" else - if [ ! -d $BUILD_DIR/build/flang-classic/$AOMP_LFL_DIR ] ; then + if [ ! -d "$BUILD_DIR/build/flang-classic/$AOMP_LFL_DIR" ] ; then echo "ERROR: The build directory $BUILD_DIR/build/flang-classic/$AOMP_LFL_DIR does not exist" echo " run $0 without nocmake or install options. " exit 1 @@ -129,13 +113,14 @@ fi # Cmake for llvm classic (ROCm 5.5). if [ "$1" != "nocmake" ] && [ "$1" != "install" ] ; then - cd $BUILD_DIR/build/flang-classic/$AOMP_LFL_DIR/llvm-classic + cd "$BUILD_DIR/build/flang-classic/$AOMP_LFL_DIR/llvm-classic" || exit echo " -----Running cmake ---- " - echo ${AOMP_CMAKE} $LLVMCMAKEOPTS $AOMP_REPOS/$AOMP_FLANG_REPO_NAME/flang-classic/$AOMP_LFL_DIR/llvm-classic/llvm - ${AOMP_CMAKE} $LLVMCMAKEOPTS $AOMP_REPOS/$AOMP_FLANG_REPO_NAME/flang-classic/$AOMP_LFL_DIR/llvm-classic/llvm 2>&1 - if [ $? != 0 ] ; then + echo "${AOMP_CMAKE}" "${LLVMCMAKEOPTS[@]}" "$AOMP_REPOS/$AOMP_FLANG_REPO_NAME/flang-classic/$AOMP_LFL_DIR/llvm-classic/llvm" + + if ! ${AOMP_CMAKE} "${LLVMCMAKEOPTS[@]}" \ + "$AOMP_REPOS/$AOMP_FLANG_REPO_NAME/flang-classic/$AOMP_LFL_DIR/llvm-classic/llvm" 2>&1; then echo "ERROR cmake failed. Cmake flags" - echo " $LLVMCMAKEOPTS" + echo " $(shquot "${LLVMCMAKEOPTS[@]}")" exit 1 fi echo @@ -147,9 +132,9 @@ fi # Build llvm classic. echo " --- Running $AOMP_NINJA_BIN for $BUILD_DIR/build/flang-classic/$AOMP_LFL_DIR/llvm-classic ---- " -cd $BUILD_DIR/build/flang-classic/$AOMP_LFL_DIR/llvm-classic -$AOMP_NINJA_BIN -j $AOMP_JOB_THREADS -if [ $? != 0 ] ; then +cd "$BUILD_DIR/build/flang-classic/$AOMP_LFL_DIR/llvm-classic" || exit + +if ! $AOMP_NINJA_BIN -j "$AOMP_JOB_THREADS"; then echo " " echo "ERROR: $AOMP_NINJA_BIN -j $AOMP_JOB_THREADS FAILED" echo "To restart:" diff --git a/bin/build_llvm-flang-rt-host-dev.sh b/bin/build_llvm-flang-rt-host-dev.sh index 740d8355d..739234a6f 100755 --- a/bin/build_llvm-flang-rt-host-dev.sh +++ b/bin/build_llvm-flang-rt-host-dev.sh @@ -13,9 +13,9 @@ # https://github.com/llvm/llvm-project/blob/main/flang/docs/GettingStarted.md # # --- Start standard header to set AOMP environment variables ---- -realpath=`realpath $0` -thisdir=`dirname $realpath` -. $thisdir/aomp_common_vars +realpath=$(realpath "$0") +thisdir=$(dirname "$realpath") +. "$thisdir/aomp_common_vars" # --- end standard header ---- echo "-----------------------------------------------------------------------------" @@ -35,18 +35,18 @@ if [ -z ${AOMP_REPOS+x} ]; then echo "Error: AOMP_REPOS must be defined" exit 0 fi -if [ ! -x $CMAKE_C_COMPILER ]; then +if [ ! -x "$CMAKE_C_COMPILER" ]; then # try again by adding the llvm subdirectory AOMP="$AOMP/llvm" CMAKE_C_COMPILER="$AOMP/bin/clang" CMAKE_CXX_COMPILER="$AOMP/bin/clang++" - if [ ! -x $CMAKE_C_COMPILER ]; then + if [ ! -x "$CMAKE_C_COMPILER" ]; then echo "Error: $CMAKE_C_COMPILER not found" exit 0 fi fi -if [ ! -x $CMAKE_CXX_COMPILER ]; then +if [ ! -x "$CMAKE_CXX_COMPILER" ]; then echo "Error: $CMAKE_CXX_COMPILER not found" exit 0 fi @@ -57,7 +57,7 @@ OMPRUNTIME_DIR=$BUILD_DIR/runtimes/runtimes-bins/openmp/runtime/src INSTALL_DIR=$AOMP # generate ARCH_LIST from GFXLIST -ARCH_LIST=`echo $GFXLIST | tr ' ' ','` +ARCH_LIST=$(echo "$GFXLIST" | tr ' ' ',') echo "BUILD_DIR = $BUILD_DIR" echo "BUILD_DIR_FRT = $BUILD_DIR_FRT" @@ -70,44 +70,44 @@ echo "GFXLIST = $GFXLIST" echo "Sleeping 5 sec..." sleep 5 -mkdir -p $BUILD_AOMP -cd $BUILD_AOMP +mkdir -p "$BUILD_AOMP" +cd "$BUILD_AOMP" || exit mkdir -p build -cd build +cd build || exit rm -rf flang-runtime mkdir flang-runtime -cd flang-runtime +cd flang-runtime || exit if [ "$AOMP_USE_NINJA" == 0 ] ; then - AOMP_SET_NINJA_GEN="" + AOMP_SET_NINJA_GEN=() else - AOMP_SET_NINJA_GEN="-G Ninja" + AOMP_SET_NINJA_GEN=(-G Ninja) fi # Notes: # -DFLANG_RT_INCLUDE_TESTS=OFF # avoids needing CUDA toolchain # -${AOMP_CMAKE} $AOMP_SET_NINJA_GEN \ +${AOMP_CMAKE} "${AOMP_SET_NINJA_GEN[@]}" \ -DLLVM_ENABLE_RUNTIMES=flang-rt \ -DFLANG_RT_EXPERIMENTAL_OFFLOAD_SUPPORT="OpenMP" \ -DFLANG_RT_INCLUDE_TESTS=OFF \ - -DCMAKE_C_COMPILER=$CMAKE_C_COMPILER \ - -DCMAKE_CXX_COMPILER=$CMAKE_CXX_COMPILER \ + -DCMAKE_C_COMPILER="$CMAKE_C_COMPILER" \ + -DCMAKE_CXX_COMPILER="$CMAKE_CXX_COMPILER" \ -DFLANG_RT_DEVICE_ARCHITECTURES="$ARCH_LIST" \ -DCMAKE_EXPORT_COMPILE_COMMANDS=ON \ - $AOMP_REPOS/llvm-project/runtimes + "$AOMP_REPOS/llvm-project/runtimes" $AOMP_NINJA_BIN --version -$AOMP_NINJA_BIN -j $AOMP_JOB_THREADS flang-rt +$AOMP_NINJA_BIN -j "$AOMP_JOB_THREADS" flang-rt mystat=$? -allstat=$(($allstat+$mystat)) +allstat=$((allstat+mystat)) echo "status: $mystat" cmd="cp $BUILD_DIR_FRT/libflang_rt.runtime.a $INSTALL_DIR/lib/libflang_rt.hostdevice.a" -echo $cmd +echo "$cmd" $cmd mystat=$? -allstat=$(($allstat+$mystat)) +allstat=$((allstat+mystat)) echo "status: $mystat" echo "allstat: $allstat" diff --git a/bin/build_offload.sh b/bin/build_offload.sh index 63eb8c09e..bedc4a6c1 100755 --- a/bin/build_offload.sh +++ b/bin/build_offload.sh @@ -5,9 +5,9 @@ # # --- Start standard header to set AOMP environment variables ---- -realpath=`realpath $0` -thisdir=`dirname $realpath` -. $thisdir/aomp_common_vars +realpath=$(realpath "$0") +thisdir=$(dirname "$realpath") +. "$thisdir/aomp_common_vars" # --- end standard header ---- if [ "$1" == "-h" ] || [ "$1" == "help" ] || [ "$1" == "-help" ] ; then @@ -18,9 +18,9 @@ REPO_DIR=$AOMP_REPOS/$AOMP_PROJECT_REPO_NAME _ompd_src_dir="$LLVM_INSTALL_LOC/share/gdb/python/ompd/src" if [ "$AOMP_BUILD_CUDA" == 1 ] ; then - CUDAH=`find $CUDAT -type f -name "cuda.h" 2>/dev/null` + CUDAH=$(find "$CUDAT" -type f -name "cuda.h" 2>/dev/null) if [ "$CUDAH" == "" ] ; then - CUDAH=`find $CUDAINCLUDE -type f -name "cuda.h" 2>/dev/null` + CUDAH=$(find "$CUDAINCLUDE" -type f -name "cuda.h" 2>/dev/null) fi if [ "$CUDAH" == "" ] ; then echo @@ -34,74 +34,69 @@ if [ "$AOMP_BUILD_CUDA" == 1 ] ; then export CUDAFE_FLAGS="-w" fi -if [ ! -d $AOMP_REPOS/$AOMP_PROJECT_REPO_NAME ] ; then +if [ ! -d "$AOMP_REPOS/$AOMP_PROJECT_REPO_NAME" ] ; then echo "ERROR: Missing repository $AOMP_REPOS/$AOMP_PROJECT_REPO_NAME " echo " Consider setting env variables AOMP_REPOS and/or AOMP_PROJECT_REPO_NAME " exit 1 fi -# Make sure we can update the install directory -if [ "$1" == "install" ] ; then - $SUDO mkdir -p $LLVM_INSTALL_LOC - $SUDO touch $LLVM_INSTALL_LOC/testfile - if [ $? != 0 ] ; then - echo "ERROR: No update access to $LLVM_INSTALL_LOC" - exit 1 - fi - $SUDO rm $LLVM_INSTALL_LOC/testfile -fi +check_writable_installdir "$1" "$LLVM_INSTALL_LOC" if [ "$AOMP_BUILD_CUDA" == 1 ] ; then - if [ -f $CUDABIN/nvcc ] ; then - CUDAVER=`$CUDABIN/nvcc --version | grep compilation | cut -d" " -f5 | cut -d"." -f1 ` + if [ -f "$CUDABIN/nvcc" ] ; then + CUDAVER=$("$CUDABIN"/nvcc --version | grep compilation | cut -d" " -f5 | cut -d"." -f1) echo "CUDA VERSION IS $CUDAVER" fi fi if [ "$AOMP_USE_NINJA" == 0 ] ; then - AOMP_SET_NINJA_GEN="" + AOMP_SET_NINJA_GEN=() else - AOMP_SET_NINJA_GEN="-G Ninja" + AOMP_SET_NINJA_GEN=(-G Ninja) fi export LLVM_DIR=$AOMP_INSTALL_DIR -GFXSEMICOLONS=`echo $GFXLIST | tr ' ' ';' ` +GFXSEMICOLONS=$(echo "$GFXLIST" | tr ' ' ';') ALTAOMP=${ALTAOMP:-$LLVM_INSTALL_LOC} -COMMON_CMAKE_OPTS="$AOMP_SET_NINJA_GEN -DOPENMP_ENABLE_LIBOMPTARGET=1 --DCMAKE_INSTALL_PREFIX=$LLVM_INSTALL_LOC --DOPENMP_TEST_C_COMPILER=$LLVM_INSTALL_LOC/bin/clang --DOPENMP_TEST_CXX_COMPILER=$LLVM_INSTALL_LOC/bin/clang++ --DCMAKE_C_COMPILER=$ALTAOMP/bin/clang --DCMAKE_CXX_COMPILER=$ALTAOMP/bin/clang++ --DLIBOMPTARGET_AMDGCN_GFXLIST=$GFXSEMICOLONS --DLIBOMPTARGET_ENABLE_DEBUG=ON --DLLVM_DIR=$LLVM_DIR" + +declare -a COMMON_CMAKE_OPTS + +COMMON_CMAKE_OPTS=("${AOMP_SET_NINJA_GEN[@]}" -DOPENMP_ENABLE_LIBOMPTARGET=1 + -DCMAKE_INSTALL_PREFIX="$LLVM_INSTALL_LOC" + -DOPENMP_TEST_C_COMPILER="$LLVM_INSTALL_LOC/bin/clang" + -DOPENMP_TEST_CXX_COMPILER="$LLVM_INSTALL_LOC/bin/clang++" + -DCMAKE_C_COMPILER="$ALTAOMP/bin/clang" + -DCMAKE_CXX_COMPILER="$ALTAOMP/bin/clang++" + -DLIBOMPTARGET_AMDGCN_GFXLIST="$GFXSEMICOLONS" + -DLIBOMPTARGET_ENABLE_DEBUG=ON + -DLLVM_DIR="$LLVM_DIR") if [ "$AOMP_STANDALONE_BUILD" == 0 ]; then - COMMON_CMAKE_OPTS="$COMMON_CMAKE_OPTS - -DLLVM_MAIN_INCLUDE_DIR=$LLVM_PROJECT_ROOT/llvm/include - -DLIBOMPTARGET_LLVM_INCLUDE_DIRS=$LLVM_PROJECT_ROOT/llvm/include" + COMMON_CMAKE_OPTS=("${COMMON_CMAKE_OPTS[@]}" + -DLLVM_MAIN_INCLUDE_DIR="$LLVM_PROJECT_ROOT/llvm/include" + -DLIBOMPTARGET_LLVM_INCLUDE_DIRS="$LLVM_PROJECT_ROOT/llvm/include") else - COMMON_CMAKE_OPTS="$COMMON_CMAKE_OPTS \ - -DLLVM_MAIN_INCLUDE_DIR=$AOMP_REPOS/$AOMP_PROJECT_REPO_NAME/llvm/include \ - -DLIBOMPTARGET_LLVM_INCLUDE_DIRS=$AOMP_REPOS/$AOMP_PROJECT_REPO_NAME/llvm/include" + COMMON_CMAKE_OPTS=("${COMMON_CMAKE_OPTS[@]}" + -DLLVM_MAIN_INCLUDE_DIR="$AOMP_REPOS/$AOMP_PROJECT_REPO_NAME/llvm/include" + -DLIBOMPTARGET_LLVM_INCLUDE_DIRS="$AOMP_REPOS/$AOMP_PROJECT_REPO_NAME/llvm/include") fi if [ "$AOMP_BUILD_CUDA" == 1 ] ; then - COMMON_CMAKE_OPTS="$COMMON_CMAKE_OPTS --DLIBOMPTARGET_NVPTX_ENABLE_BCLIB=ON --DLIBOMPTARGET_NVPTX_CUDA_COMPILER=$AOMP/bin/clang++ --DLIBOMPTARGET_NVPTX_BC_LINKER=$AOMP/bin/llvm-link --DLIBOMPTARGET_NVPTX_COMPUTE_CAPABILITIES=$NVPTXGPUS" + COMMON_CMAKE_OPTS=("${COMMON_CMAKE_OPTS[@]}" + -DLIBOMPTARGET_NVPTX_ENABLE_BCLIB=ON + -DLIBOMPTARGET_NVPTX_CUDA_COMPILER="$AOMP/bin/clang++" + -DLIBOMPTARGET_NVPTX_BC_LINKER="$AOMP/bin/llvm-link" + -DLIBOMPTARGET_NVPTX_COMPUTE_CAPABILITIES="$NVPTXGPUS") else # Need to force CUDA off this way in case cuda is installed in this system - COMMON_CMAKE_OPTS="$COMMON_CMAKE_OPTS --DCUDA_TOOLKIT_ROOT_DIR=OFF" + COMMON_CMAKE_OPTS=("${COMMON_CMAKE_OPTS[@]}" + -DCUDA_TOOLKIT_ROOT_DIR=OFF) fi -if [ "$AOMP_BUILD_SANITIZER" == 1 ]; then - LDFLAGS="-fuse-ld=lld $ASAN_FLAGS" -fi +#if [ "$AOMP_BUILD_SANITIZER" == 1 ]; then + #LDFLAGS=$(shquot '-fuse-ld=lld' "${ASAN_FLAGS[@]}") + #export LDFLAGS +#fi # This is how we tell the hsa plugin where to find hsa export HSA_RUNTIME_PATH=$ROCM_DIR @@ -114,145 +109,221 @@ export HSA_RUNTIME_PATH=$ROCM_DIR # because of its size and constant trunk merges to amd-staging. # This is why default is 0 (OFF). if [ "$AOMP_APPLY_ATD_AMD_STAGING_PATCH" == 1 ] ; then - patchrepo $REPO_DIR + patchrepo "$REPO_DIR" fi +declare -a ASAN_CMAKE_OPTS + if [ "$1" != "nocmake" ] && [ "$1" != "install" ] ; then echo " " echo "This is a FRESH START. ERASING any previous builds in $BUILD_DIR/offload." echo "Use ""$0 nocmake"" or ""$0 install"" to avoid FRESH START." - echo rm -rf $BUILD_DIR/build/offload - rm -rf $BUILD_DIR/build/offload + echo "rm -rf $BUILD_DIR/build/offload" + rm -rf "$BUILD_DIR/build/offload" + declare -a MYCMAKEOPTS if [ "$AOMP_STANDALONE_BUILD" == 1 ]; then - MYCMAKEOPTS="$COMMON_CMAKE_OPTS -DCMAKE_PREFIX_PATH=$AOMP_INSTALL_DIR/lib/cmake;$AOMP_INSTALL_DIR/lib64/cmake -DCMAKE_BUILD_TYPE=Release $AOMP_ORIGIN_RPATH" + MYCMAKEOPTS=("${COMMON_CMAKE_OPTS[@]}" + -DCMAKE_PREFIX_PATH="$AOMP_INSTALL_DIR/lib/cmake;$AOMP_INSTALL_DIR/lib64/cmake" + -DCMAKE_BUILD_TYPE=Release "${AOMP_ORIGIN_RPATH[@]}") else - MYCMAKEOPTS="$COMMON_CMAKE_OPTS -DCMAKE_PREFIX_PATH=$INSTALL_PREFIX/lib/cmake -DCMAKE_BUILD_TYPE=Release $OPENMP_EXTRAS_ORIGIN_RPATH" + MYCMAKEOPTS=("${COMMON_CMAKE_OPTS[@]}" + -DCMAKE_PREFIX_PATH="$INSTALL_PREFIX/lib/cmake" + -DCMAKE_BUILD_TYPE=Release "${OPENMP_EXTRAS_ORIGIN_RPATH[@]}") fi if [ "$AOMP_LEGACY_OPENMP" == "1" ] && [ "$SANITIZER" != 1 ]; then echo " -----Running offload cmake ---- " - mkdir -p $BUILD_DIR/build/offload - cd $BUILD_DIR/build/offload - echo ${AOMP_CMAKE} $MYCMAKEOPTS $AOMP_REPOS/$AOMP_PROJECT_REPO_NAME/offload - ${AOMP_CMAKE} $MYCMAKEOPTS $AOMP_REPOS/$AOMP_PROJECT_REPO_NAME/offload - if [ $? != 0 ] ; then + mkdir -p "$BUILD_DIR/build/offload" + cd "$BUILD_DIR/build/offload" || exit + echo "${AOMP_CMAKE}" "$(shquot "${MYCMAKEOPTS[@]}")" \ + "$AOMP_REPOS/$AOMP_PROJECT_REPO_NAME/offload" + + if ! ${AOMP_CMAKE} "${MYCMAKEOPTS[@]}" \ + "$AOMP_REPOS/$AOMP_PROJECT_REPO_NAME/offload"; then echo "ERROR offload cmake failed. Cmake flags" - echo " $MYCMAKEOPTS" + echo " $(shquot "${MYCMAKEOPTS[@]}")" exit 1 fi fi if [ "$AOMP_BUILD_SANITIZER" == 1 ]; then if [ "$AOMP_STANDALONE_BUILD" == 1 ]; then - ASAN_CMAKE_OPTS="$COMMON_CMAKE_OPTS -DCMAKE_PREFIX_PATH=$AOMP_INSTALL_DIR/lib/asan/cmake;$AOMP_INSTALL_DIR/lib/cmake;$AOMP_INSTALL_DIR/lib64/cmake -DSANITIZER_AMDGPU=1 -DCMAKE_BUILD_TYPE=Release -DLLVM_ENABLE_PER_TARGET_RUNTIME_DIR=OFF $AOMP_ASAN_ORIGIN_RPATH" + ASAN_CMAKE_OPTS=("${COMMON_CMAKE_OPTS[@]}" + -DCMAKE_PREFIX_PATH="$AOMP_INSTALL_DIR/lib/asan/cmake;$AOMP_INSTALL_DIR/lib/cmake;$AOMP_INSTALL_DIR/lib64/cmake" + -DSANITIZER_AMDGPU=1 -DCMAKE_BUILD_TYPE=Release + -DLLVM_ENABLE_PER_TARGET_RUNTIME_DIR=OFF + "${AOMP_ASAN_ORIGIN_RPATH[@]}") else - ASAN_CMAKE_OPTS="$COMMON_CMAKE_OPTS -DCMAKE_PREFIX_PATH=$ROCM_CMAKECONFIG_PATH;$INSTALL_PREFIX/lib/llvm/lib/asan -DSANITIZER_AMDGPU=1 -DCMAKE_BUILD_TYPE=Release -DLLVM_ENABLE_PER_TARGET_RUNTIME_DIR=OFF $OPENMP_EXTRAS_ORIGIN_RPATH" + ASAN_CMAKE_OPTS=("${COMMON_CMAKE_OPTS[@]}" + -DCMAKE_PREFIX_PATH="$ROCM_CMAKECONFIG_PATH;$INSTALL_PREFIX/lib/llvm/lib/asan" + -DSANITIZER_AMDGPU=1 -DCMAKE_BUILD_TYPE=Release + -DLLVM_ENABLE_PER_TARGET_RUNTIME_DIR=OFF + "${OPENMP_EXTRAS_ORIGIN_RPATH[@]}") fi echo " -----Running offload cmake for asan ---- " - mkdir -p $BUILD_DIR/build/offload/asan - cd $BUILD_DIR/build/offload/asan - echo ${AOMP_CMAKE} $ASAN_CMAKE_OPTS -DCMAKE_C_FLAGS="'$ASAN_FLAGS'" -DCMAKE_CXX_FLAGS="'$ASAN_FLAGS'" -DOFFLOAD_LIBDIR_SUFFIX="/asan" -DLLVM_LIBDIR_SUFFIX="/asan" $AOMP_REPOS/$AOMP_PROJECT_REPO_NAME/offload - ${AOMP_CMAKE} $ASAN_CMAKE_OPTS -DCMAKE_C_FLAGS="'$ASAN_FLAGS'" -DCMAKE_CXX_FLAGS="'$ASAN_FLAGS'" -DOFFLOAD_LIBDIR_SUFFIX="/asan" -DLLVM_LIBDIR_SUFFIX="/asan" $AOMP_REPOS/$AOMP_PROJECT_REPO_NAME/offload - if [ $? != 0 ] ; then + mkdir -p "$BUILD_DIR/build/offload/asan" + cd "$BUILD_DIR/build/offload/asan" || exit + echo "${AOMP_CMAKE}" "$(shquot "${ASAN_CMAKE_OPTS[@]}")" \ + -DCMAKE_C_FLAGS="\"$(cmquot "${ASAN_FLAGS[@]}")\"" \ + -DCMAKE_CXX_FLAGS="\"$(cmquot "${ASAN_FLAGS[@]}")\"" \ + -DOFFLOAD_LIBDIR_SUFFIX="/asan" \ + -DLLVM_LIBDIR_SUFFIX="/asan" \ + "$AOMP_REPOS/$AOMP_PROJECT_REPO_NAME/offload" + if ! ${AOMP_CMAKE} "${ASAN_CMAKE_OPTS[@]}" \ + -DCMAKE_C_FLAGS="$(cmquot "${ASAN_FLAGS[@]}")" \ + -DCMAKE_CXX_FLAGS="$(cmquot "${ASAN_FLAGS[@]}")" \ + -DOFFLOAD_LIBDIR_SUFFIX="/asan" \ + -DLLVM_LIBDIR_SUFFIX="/asan" \ + "$AOMP_REPOS/$AOMP_PROJECT_REPO_NAME/offload"; then echo "ERROR offload cmake failed. Cmake flags" - echo " $ASAN_CMAKE_OPTS" + echo " $(shquot "${ASAN_CMAKE_OPTS[@]}")" exit 1 fi fi # Build a dedicatd "performance" version of libomptarget if [ "$AOMP_BUILD_PERF" == "1" ]; then - echo rm -rf $BUILD_DIR/build/offload_perf - rm -rf $BUILD_DIR/build/offload_perf - MYCMAKEOPTS="$COMMON_CMAKE_OPTS -DCMAKE_PREFIX_PATH=$AOMP_INSTALL_DIR/lib/cmake;$AOMP_INSTALL_DIR/lib64/cmake -DLIBOMPTARGET_ENABLE_DEBUG=OFF -DCMAKE_BUILD_TYPE=Release -DLIBOMPTARGET_PERF=ON -DOFFLOAD_LIBDIR_SUFFIX=-perf -DLLVM_LIBDIR_SUFFIX=-perf" - mkdir -p $BUILD_DIR/build/offload_perf - cd $BUILD_DIR/build/offload_perf + echo "rm -rf $BUILD_DIR/build/offload_perf" + rm -rf "$BUILD_DIR/build/offload_perf" + MYCMAKEOPTS=("${COMMON_CMAKE_OPTS[@]}" + -DCMAKE_PREFIX_PATH="$AOMP_INSTALL_DIR/lib/cmake;$AOMP_INSTALL_DIR/lib64/cmake" + -DLIBOMPTARGET_ENABLE_DEBUG=OFF -DCMAKE_BUILD_TYPE=Release + -DLIBOMPTARGET_PERF=ON -DOFFLOAD_LIBDIR_SUFFIX=-perf + -DLLVM_LIBDIR_SUFFIX="-perf") + mkdir -p "$BUILD_DIR/build/offload_perf" + cd "$BUILD_DIR/build/offload_perf" || exit echo " -----Running offload cmake for perf ---- " - echo ${AOMP_CMAKE} $MYCMAKEOPTS $AOMP_REPOS/$AOMP_PROJECT_REPO_NAME/offload $AOMP_ORIGIN_RPATH - ${AOMP_CMAKE} $MYCMAKEOPTS $AOMP_REPOS/$AOMP_PROJECT_REPO_NAME/offload $AOMP_ORIGIN_RPATH - if [ $? != 0 ] ; then + echo "${AOMP_CMAKE}" "$(shquot "${MYCMAKEOPTS[@]}")" \ + "$AOMP_REPOS/$AOMP_PROJECT_REPO_NAME/offload" \ + "$(shquot "${AOMP_ORIGIN_RPATH[@]}")" + + if ! ${AOMP_CMAKE} "${MYCMAKEOPTS[@]}" \ + "$AOMP_REPOS/$AOMP_PROJECT_REPO_NAME/offload" \ + "${AOMP_ORIGIN_RPATH[@]}"; then echo "error offload cmake failed. cmake flags" - echo " $MYCMAKEOPTS" + echo " $(shquot "${MYCMAKEOPTS[@]}")" exit 1 fi if [ "$AOMP_BUILD_SANITIZER" == 1 ]; then - ASAN_CMAKE_OPTS="$COMMON_CMAKE_OPTS -DCMAKE_PREFIX_PATH=$AOMP_INSTALL_DIR/lib/asan/cmake;$AOMP_INSTALL_DIR/lib/cmake;$AOMP_INSTALL_DIR/lib64/cmake -DLIBOMPTARGET_ENABLE_DEBUG=OFF -DCMAKE_BUILD_TYPE=Release -DLLVM_ENABLE_PER_TARGET_RUNTIME_DIR=OFF -DLIBOMPTARGET_PERF=ON -DSANITIZER_AMDGPU=1 $AOMP_ASAN_ORIGIN_RPATH" + ASAN_CMAKE_OPTS=("${COMMON_CMAKE_OPTS[@]}" + -DCMAKE_PREFIX_PATH="$AOMP_INSTALL_DIR/lib/asan/cmake;$AOMP_INSTALL_DIR/lib/cmake;$AOMP_INSTALL_DIR/lib64/cmake" + -DLIBOMPTARGET_ENABLE_DEBUG=OFF + -DCMAKE_BUILD_TYPE=Release + -DLLVM_ENABLE_PER_TARGET_RUNTIME_DIR=OFF + -DLIBOMPTARGET_PERF=ON -DSANITIZER_AMDGPU=1 + "${AOMP_ASAN_ORIGIN_RPATH[@]}") echo " -----Running offload cmake for perf-asan ---- " - mkdir -p $BUILD_DIR/build/offload_perf/asan - cd $BUILD_DIR/build/offload_perf/asan - echo ${AOMP_CMAKE} $ASAN_CMAKE_OPTS -DCMAKE_C_FLAGS="'$ASAN_FLAGS'" -DCMAKE_CXX_FLAGS="'$ASAN_FLAGS'" -DOFFLOAD_LIBDIR_SUFFIX="-perf/asan" -DLLVM_LIBDIR_SUFFIX="-perf/asan" $AOMP_REPOS/$AOMP_PROJECT_REPO_NAME/offload - ${AOMP_CMAKE} $ASAN_CMAKE_OPTS -DCMAKE_C_FLAGS="'$ASAN_FLAGS'" -DCMAKE_CXX_FLAGS="'$ASAN_FLAGS'" -DOFFLOAD_LIBDIR_SUFFIX="-perf/asan" -DLLVM_LIBDIR_SUFFIX="-perf/asan" $AOMP_REPOS/$AOMP_PROJECT_REPO_NAME/offload - if [ $? != 0 ] ; then + mkdir -p "$BUILD_DIR/build/offload_perf/asan" + cd "$BUILD_DIR/build/offload_perf/asan" || exit + echo "${AOMP_CMAKE}" "$(shquot "${ASAN_CMAKE_OPTS[@]}")" \ + -DCMAKE_C_FLAGS="\"$(cmquot "${ASAN_FLAGS[@]}")\"" \ + -DCMAKE_CXX_FLAGS="\"$(cmquot "${ASAN_FLAGS[@]}")\"" \ + -DOFFLOAD_LIBDIR_SUFFIX="-perf/asan" \ + -DLLVM_LIBDIR_SUFFIX="-perf/asan" \ + "$AOMP_REPOS/$AOMP_PROJECT_REPO_NAME/offload" + + if ! ${AOMP_CMAKE} "${ASAN_CMAKE_OPTS[@]}" \ + -DCMAKE_C_FLAGS="$(cmquot "${ASAN_FLAGS[@]}")" \ + -DCMAKE_CXX_FLAGS="$(cmquot "${ASAN_FLAGS[@]}")" \ + -DOFFLOAD_LIBDIR_SUFFIX="-perf/asan" \ + -DLLVM_LIBDIR_SUFFIX="-perf/asan" \ + "$AOMP_REPOS/$AOMP_PROJECT_REPO_NAME/offload"; then echo "error offload cmake failed. cmake flags" - echo " $ASAN_CMAKE_OPTS" + echo " $(shquot "${ASAN_CMAKE_OPTS[@]}")" exit 1 fi fi fi if [ "$AOMP_BUILD_DEBUG" == "1" ] ; then - _prefix_map="\""-fdebug-prefix-map=$AOMP_REPOS/$AOMP_PROJECT_REPO_NAME/offload=$_ompd_src_dir/offload"\"" - DEBUGCMAKEOPTS=" --DLIBOMPTARGET_NVPTX_DEBUG=ON \ --DLLVM_ENABLE_ASSERTIONS=ON \ --DCMAKE_BUILD_TYPE=Debug \ --DROCM_DIR=$ROCM_DIR \ --DLIBOMP_ARCH=x86_64 \ --DLIBOMP_OMPT_SUPPORT=ON \ --DLIBOMP_USE_DEBUGGER=ON \ --DLIBOMP_CPPFLAGS='-O0' \ --DLIBOMP_OMPD_SUPPORT=ON \ --DLIBOMP_OMPT_DEBUG=ON" + _prefix_map=(-fdebug-prefix-map="$AOMP_REPOS/$AOMP_PROJECT_REPO_NAME/offload=$_ompd_src_dir/offload") + + declare -a DEBUGCMAKEOPTS + + DEBUGCMAKEOPTS=(-DLIBOMPTARGET_NVPTX_DEBUG=ON + -DLLVM_ENABLE_ASSERTIONS=ON + -DCMAKE_BUILD_TYPE=Debug + -DROCM_DIR="$ROCM_DIR" + -DLIBOMP_ARCH=x86_64 + -DLIBOMP_OMPT_SUPPORT=ON + -DLIBOMP_USE_DEBUGGER=ON + -DLIBOMP_CPPFLAGS='-O0' + -DLIBOMP_OMPD_SUPPORT=ON + -DLIBOMP_OMPT_DEBUG=ON) # The 'pip install --system' command is not supported on non-debian systems. This will disable # the system option if the debian_version file is not present. if [ ! -f /etc/debian_version ]; then echo "==> Non-Debian OS, disabling use of pip install --system" - DEBUGCMAKEOPTS="$DEBUGCMAKEOPTS -DDISABLE_SYSTEM_NON_DEBIAN=1" + DEBUGCMAKEOPTS=("${DEBUGCMAKEOPTS[@]}" -DDISABLE_SYSTEM_NON_DEBIAN=1) fi # Redhat 7.6 does not have python36-devel package, which is needed for ompd compilation. # This is acquired through RH Software Collections. if [ -f /opt/rh/rh-python36/enable ]; then echo "==> Using python3.6 out of rh tools." - DEBUGCMAKEOPTS="$DEBUGCMAKEOPTS -DPython3_ROOT_DIR=/opt/rh/rh-python36/root/bin -DPYTHON_HEADERS=/opt/rh/rh-python36/root/usr/include/python3.6m" + DEBUGCMAKEOPTS=("${DEBUGCMAKEOPTS[@]}" + -DPython3_ROOT_DIR=/opt/rh/rh-python36/root/bin + -DPYTHON_HEADERS=/opt/rh/rh-python36/root/usr/include/python3.6m) fi echo if [ "$SANITIZER" != 1 ] ; then - echo rm -rf $BUILD_DIR/build/offload_debug - rm -rf $BUILD_DIR/build/offload_debug + echo "rm -rf $BUILD_DIR/build/offload_debug" + rm -rf "$BUILD_DIR/build/offload_debug" echo " -----Running offload cmake for debug ---- " - mkdir -p $BUILD_DIR/build/offload_debug - cd $BUILD_DIR/build/offload_debug + mkdir -p "$BUILD_DIR/build/offload_debug" + cd "$BUILD_DIR/build/offload_debug" || exit if [ "$AOMP_STANDALONE_BUILD" == 1 ]; then PREFIX_PATH="-DCMAKE_PREFIX_PATH=$AOMP_INSTALL_DIR/lib/cmake;$AOMP_INSTALL_DIR/lib64/cmake" - MYCMAKEOPTS="$COMMON_CMAKE_OPTS $DEBUGCMAKEOPTS $AOMP_DEBUG_ORIGIN_RPATH" + MYCMAKEOPTS=("${COMMON_CMAKE_OPTS[@]}" "${DEBUGCMAKEOPTS[@]}" + "${AOMP_DEBUG_ORIGIN_RPATH[@]}") else PREFIX_PATH="-DCMAKE_PREFIX_PATH=$INSTALL_PREFIX/lib/cmake" - MYCMAKEOPTS="$COMMON_CMAKE_OPTS $DEBUGCMAKEOPTS $OPENMP_EXTRAS_ORIGIN_RPATH" + MYCMAKEOPTS=("${COMMON_CMAKE_OPTS[@]}" "${DEBUGCMAKEOPTS[@]}" + "${OPENMP_EXTRAS_ORIGIN_RPATH[@]}") fi - ${AOMP_CMAKE} $MYCMAKEOPTS $PREFIX_PATH -DCMAKE_C_FLAGS="$CFLAGS -g" -DCMAKE_CXX_FLAGS="$CXXFLAGS -g $_prefix_map" -DOFFLOAD_LIBDIR_SUFFIX="-debug" -DLLVM_LIBDIR_SUFFIX="-debug" $AOMP_REPOS/$AOMP_PROJECT_REPO_NAME/offload - if [ $? != 0 ] ; then + if ! ${AOMP_CMAKE} "${MYCMAKEOPTS[@]}" "$PREFIX_PATH" \ + -DCMAKE_C_FLAGS="$CFLAGS -g" \ + -DCMAKE_CXX_FLAGS="$CXXFLAGS -g $(cmquot "${_prefix_map[@]}")" \ + -DOFFLOAD_LIBDIR_SUFFIX="-debug" \ + -DLLVM_LIBDIR_SUFFIX="-debug" \ + "$AOMP_REPOS/$AOMP_PROJECT_REPO_NAME/offload"; then echo "ERROR offload debug cmake failed. Cmake flags" - echo " $MYCMAKEOPTS" + echo " $(shquot "${MYCMAKEOPTS[@]}")" exit 1 fi fi if [ "$AOMP_BUILD_SANITIZER" == 1 ]; then - ASAN_CMAKE_OPTS="$COMMON_CMAKE_OPTS $DEBUGCMAKEOPTS -DLLVM_ENABLE_PER_TARGET_RUNTIME_DIR=OFF -DSANITIZER_AMDGPU=1" + ASAN_CMAKE_OPTS=("${COMMON_CMAKE_OPTS[@]}" "${DEBUGCMAKEOPTS[@]}" + -DLLVM_ENABLE_PER_TARGET_RUNTIME_DIR=OFF + -DSANITIZER_AMDGPU=1) if [ "$AOMP_STANDALONE_BUILD" == 1 ]; then - ASAN_CMAKE_OPTS="$ASAN_CMAKE_OPTS -DCMAKE_PREFIX_PATH=$AOMP_INSTALL_DIR/lib/asan/cmake;$AOMP_INSTALL_DIR/lib/cmake;$AOMP_INSTALL_DIR/lib64/cmake $AOMP_ASAN_ORIGIN_RPATH" + ASAN_CMAKE_OPTS=("${ASAN_CMAKE_OPTS[@]}" + -DCMAKE_PREFIX_PATH="$AOMP_INSTALL_DIR/lib/asan/cmake;$AOMP_INSTALL_DIR/lib/cmake;$AOMP_INSTALL_DIR/lib64/cmake" + "${AOMP_ASAN_ORIGIN_RPATH[@]}") else - ASAN_CMAKE_OPTS="$ASAN_CMAKE_OPTS -DCMAKE_PREFIX_PATH=$ROCM_CMAKECONFIG_PATH;$INSTALL_PREFIX/lib/llvm/lib/asan $OPENMP_EXTRAS_ORIGIN_RPATH" + ASAN_CMAKE_OPTS=("${ASAN_CMAKE_OPTS[@]}" + -DCMAKE_PREFIX_PATH="$ROCM_CMAKECONFIG_PATH;$INSTALL_PREFIX/lib/llvm/lib/asan" + "${OPENMP_EXTRAS_ORIGIN_RPATH[@]}") fi echo " -----Running offload cmake for debug-asan ---- " - mkdir -p $BUILD_DIR/build/offload_debug/asan - cd $BUILD_DIR/build/offload_debug/asan - echo ${AOMP_CMAKE} $ASAN_CMAKE_OPTS -DCMAKE_C_FLAGS="'$ASAN_FLAGS'" -DCMAKE_CXX_FLAGS="'$ASAN_FLAGS'" -DOFFLOAD_LIBDIR_SUFFIX="-debug/asan" -DLLVM_LIBDIR_SUFFIX="-debug/asan" $AOMP_REPOS/$AOMP_PROJECT_REPO_NAME/offload - ${AOMP_CMAKE} $ASAN_CMAKE_OPTS -DCMAKE_C_FLAGS="'$ASAN_FLAGS'" -DCMAKE_CXX_FLAGS="'$ASAN_FLAGS'" -DOFFLOAD_LIBDIR_SUFFIX="-debug/asan" -DLLVM_LIBDIR_SUFFIX="-debug/asan" $AOMP_REPOS/$AOMP_PROJECT_REPO_NAME/offload - if [ $? != 0 ] ; then + mkdir -p "$BUILD_DIR/build/offload_debug/asan" + cd "$BUILD_DIR/build/offload_debug/asan" || exit + echo "${AOMP_CMAKE}" "${ASAN_CMAKE_OPTS[@]}" \ + -DCMAKE_C_FLAGS="\"$(cmquot "${ASAN_FLAGS[@]}")\"" \ + -DCMAKE_CXX_FLAGS="\"$(cmquot "${ASAN_FLAGS[@]}")\"" \ + -DOFFLOAD_LIBDIR_SUFFIX="-debug/asan" \ + -DLLVM_LIBDIR_SUFFIX="-debug/asan" \ + "$AOMP_REPOS/$AOMP_PROJECT_REPO_NAME/offload" + + if ! ${AOMP_CMAKE} "${ASAN_CMAKE_OPTS[@]}" \ + -DCMAKE_C_FLAGS="$(cmquot "${ASAN_FLAGS[@]}")" \ + -DCMAKE_CXX_FLAGS="$(cmquot "${ASAN_FLAGS[@]}")" \ + -DOFFLOAD_LIBDIR_SUFFIX="-debug/asan" \ + -DLLVM_LIBDIR_SUFFIX="-debug/asan" \ + "$AOMP_REPOS/$AOMP_PROJECT_REPO_NAME/offload"; then echo "ERROR offload debug cmake failed. Cmake flags" - echo " $ASAN_CMAKE_OPTS" + echo " $(shquot "${ASAN_CMAKE_OPTS[@]}")" exit 1 fi fi @@ -265,10 +336,9 @@ fi if [ "$1" != "install" ] ; then if [ "$AOMP_LEGACY_OPENMP" == "1" ] && [ "$SANITIZER" != 1 ] ; then - cd $BUILD_DIR/build/offload + cd "$BUILD_DIR/build/offload" || exit echo " -----Running $AOMP_NINJA_BIN for $BUILD_DIR/build/offload ---- " - $AOMP_NINJA_BIN -j $AOMP_JOB_THREADS - if [ $? != 0 ] ; then + if ! $AOMP_NINJA_BIN -j "$AOMP_JOB_THREADS"; then echo " " echo "ERROR: $AOMP_NINJA_BIN -j $AOMP_JOB_THREADS FAILED" echo "To restart:" @@ -279,10 +349,10 @@ if [ "$AOMP_LEGACY_OPENMP" == "1" ] && [ "$SANITIZER" != 1 ] ; then fi if [ "$AOMP_BUILD_SANITIZER" == 1 ] ; then - cd $BUILD_DIR/build/offload/asan + cd "$BUILD_DIR/build/offload/asan" || exit echo " -----Running $AOMP_NINJA_BIN for $BUILD_DIR/build/offload/asan ---- " - $AOMP_NINJA_BIN -j $AOMP_JOB_THREADS - if [ $? != 0 ] ; then + + if ! $AOMP_NINJA_BIN -j "$AOMP_JOB_THREADS"; then echo " " echo "ERROR: $AOMP_NINJA_BIN -j $AOMP_JOB_THREADS FAILED" echo "To restart:" @@ -293,22 +363,22 @@ if [ "$AOMP_BUILD_SANITIZER" == 1 ] ; then fi if [ "$AOMP_BUILD_PERF" == "1" ] ; then - cd $BUILD_DIR/build/offload_perf + cd "$BUILD_DIR/build/offload_perf" || exit echo echo echo " -----Running $AOMP_NINJA_BIN for $BUILD_DIR/build/offload_perf ---- " - $AOMP_NINJA_BIN -j $AOMP_JOB_THREADS - if [ $? != 0 ] ; then + + if ! $AOMP_NINJA_BIN -j "$AOMP_JOB_THREADS"; then echo "ERROR $AOMP_NINJA_BIN -j $AOMP_JOB_THREADS failed" exit 1 fi if [ "$AOMP_BUILD_SANITIZER" == 1 ] ; then - cd $BUILD_DIR/build/offload_perf/asan + cd "$BUILD_DIR/build/offload_perf/asan" || exit echo echo echo " ----- Running $AOMP_NINJA_BIN for $BUILD_DIR/build/offload_perf/asan ----- " - $AOMP_NINJA_BIN -j $AOMP_JOB_THREADS - if [ $? != 0 ] ; then + + if ! $AOMP_NINJA_BIN -j "$AOMP_JOB_THREADS"; then echo "ERROR $AOMP_NINJA_BIN -j $AOMP_JOB_THREADS failed" exit 1 fi @@ -317,23 +387,23 @@ fi if [ "$AOMP_BUILD_DEBUG" == "1" ] ; then if [ "$SANITIZER" != 1 ] ; then - cd $BUILD_DIR/build/offload_debug + cd "$BUILD_DIR/build/offload_debug" || exit echo echo echo " -----Running $AOMP_NINJA_BIN for $BUILD_DIR/build/offload_debug ---- " - $AOMP_NINJA_BIN -j $AOMP_JOB_THREADS - if [ $? != 0 ] ; then + + if ! $AOMP_NINJA_BIN -j "$AOMP_JOB_THREADS"; then echo "ERROR $AOMP_NINJA_BIN -j $AOMP_JOB_THREADS failed" exit 1 fi fi if [ "$AOMP_BUILD_SANITIZER" == 1 ] ; then - cd $BUILD_DIR/build/offload_debug/asan + cd "$BUILD_DIR/build/offload_debug/asan" || exit echo echo echo " -----Running $AOMP_NINJA_BIN for $BUILD_DIR/build/offload_debug/asan ---- " - $AOMP_NINJA_BIN -j $AOMP_JOB_THREADS - if [ $? != 0 ] ; then + + if ! $AOMP_NINJA_BIN -j "$AOMP_JOB_THREADS"; then echo "ERROR $AOMP_NINJA_BIN -j $AOMP_JOB_THREADS failed" exit 1 fi @@ -349,43 +419,43 @@ fi # ----------- Install only if asked ---------------------------- if [ "$1" == "install" ] ; then if [ "$AOMP_LEGACY_OPENMP" == "1" ] && [ "$SANITIZER" != 1 ] ; then - cd $BUILD_DIR/build/offload + cd "$BUILD_DIR/build/offload" || exit echo echo " -----Installing to $LLVM_INSTALL_LOC/lib ----- " - $SUDO $AOMP_NINJA_BIN -j $AOMP_JOB_THREADS install - if [ $? != 0 ] ; then + + if ! $SUDO "$AOMP_NINJA_BIN" -j "$AOMP_JOB_THREADS" install; then echo "ERROR $AOMP_NINJA_BIN install failed " exit 1 fi fi if [ "$AOMP_BUILD_SANITIZER" == 1 ] ; then - cd $BUILD_DIR/build/offload/asan + cd "$BUILD_DIR/build/offload/asan" || exit echo echo " -----Installing to $LLVM_INSTALL_LOC/lib/asan ----- " - $SUDO $AOMP_NINJA_BIN -j $AOMP_JOB_THREADS install - if [ $? != 0 ] ; then + + if ! $SUDO "$AOMP_NINJA_BIN" -j "$AOMP_JOB_THREADS" install; then echo "ERROR $AOMP_NINJA_BIN install failed " exit 1 fi fi if [ "$AOMP_BUILD_PERF" == "1" ]; then - cd $BUILD_DIR/build/offload_perf + cd "$BUILD_DIR/build/offload_perf" || exit echo echo " -----Installing to $LLVM_INSTALL_LOC/lib-perf ----- " - $SUDO $AOMP_NINJA_BIN -j $AOMP_JOB_THREADS install - if [ $? != 0 ] ; then + + if ! $SUDO "$AOMP_NINJA_BIN" -j "$AOMP_JOB_THREADS" install; then echo "ERROR $AOMP_NINJA_BIN install failed " exit 1 fi if [ "$AOMP_BUILD_SANITIZER" == 1 ] ; then - cd $BUILD_DIR/build/offload_perf/asan + cd "$BUILD_DIR/build/offload_perf/asan" || exit echo echo " ----- Installing to $LLVM_INSTALL_LOC/lib-perf/asan ----- " - $SUDO $AOMP_NINJA_BIN -j $AOMP_JOB_THREADS install - if [ $? != 0 ] ; then + + if ! $SUDO "$AOMP_NINJA_BIN" -j "$AOMP_JOB_THREADS" install; then echo "ERROR $AOMP_NINJA_BIN install failed " exit 1 fi @@ -394,20 +464,20 @@ if [ "$1" == "install" ] ; then if [ "$AOMP_BUILD_DEBUG" == "1" ] ; then if [ "$SANITIZER" != 1 ] ; then - cd $BUILD_DIR/build/offload_debug + cd "$BUILD_DIR/build/offload_debug" || exit echo echo " -----Installing to $LLVM_INSTALL_LOC/lib-debug ---- " - $SUDO $AOMP_NINJA_BIN -j $AOMP_JOB_THREADS install - if [ $? != 0 ] ; then + + if ! $SUDO "$AOMP_NINJA_BIN" -j "$AOMP_JOB_THREADS" install; then echo "ERROR $AOMP_NINJA_BIN install failed " exit 1 fi fi if [ "$AOMP_BUILD_SANITIZER" == 1 ] ; then - cd $BUILD_DIR/build/offload_debug/asan + cd "$BUILD_DIR/build/offload_debug/asan" || exit echo " -----Installing to $LLVM_INSTALL_LOC/lib-debug/asan ---- " - $SUDO $AOMP_NINJA_BIN -j $AOMP_JOB_THREADS install - if [ $? != 0 ] ; then + + if ! $SUDO "$AOMP_NINJA_BIN" -j "$AOMP_JOB_THREADS" install; then echo "ERROR $AOMP_NINJA_BIN install failed " exit 1 fi @@ -415,8 +485,8 @@ if [ "$1" == "install" ] ; then # Copy selected debugable runtime sources into the installation directory # $_ompd_src_dir directory to satisfy the above CXXOPT -fdebug-prefix-map. - $SUDO mkdir -p $_ompd_src_dir/offload - $SUDO mkdir -p $_ompd_src_dir/offload/plugins-nextgen + $SUDO mkdir -p "$_ompd_src_dir/offload" + $SUDO mkdir -p "$_ompd_src_dir/offload/plugins-nextgen" if [ "$AOMP_STANDALONE_BUILD" == 1 ]; then _from_dir_src="$AOMP_REPOS/$AOMP_PROJECT_REPO_NAME/offload/libomptarget" _from_dir_plugins="$AOMP_REPOS/$AOMP_PROJECT_REPO_NAME/offload/plugins-nextgen" @@ -424,14 +494,14 @@ if [ "$1" == "install" ] ; then _from_dir_src="$LLVM_PROJECT_ROOT/offload/libomptarget" _from_dir_plugins="$LLVM_PROJECT_ROOT/offload/plugins-nextgen" fi - echo cp -rp $_from_dir_src $_ompd_src_dir/offload - $SUDO cp -rp $_from_dir_src $_ompd_src_dir/offload - echo cp -rp $_from_dir_plugins $_ompd_src_dir/offload - $SUDO cp -rp $_from_dir_plugins $_ompd_src_dir/offload + echo cp -rp "$_from_dir_src" "$_ompd_src_dir/offload" + $SUDO cp -rp "$_from_dir_src" "$_ompd_src_dir/offload" + echo cp -rp "$_from_dir_plugins" "$_ompd_src_dir/offload" + $SUDO cp -rp "$_from_dir_plugins" "$_ompd_src_dir/offload" fi # end of AOMP_BUILD_DEBUG install block if [ "$AOMP_APPLY_ATD_AMD_STAGING_PATCH" == 1 ] ; then - removepatch $REPO_DIR + removepatch "$REPO_DIR" fi fi # end of install block diff --git a/bin/build_openmp.sh b/bin/build_openmp.sh index 89bbed25c..fb4800d05 100755 --- a/bin/build_openmp.sh +++ b/bin/build_openmp.sh @@ -5,9 +5,9 @@ # # --- Start standard header to set AOMP environment variables ---- -realpath=`realpath $0` -thisdir=`dirname $realpath` -. $thisdir/aomp_common_vars +realpath=$(realpath "$0") +thisdir=$(dirname "$realpath") +. "$thisdir/aomp_common_vars" # --- end standard header ---- if [ "$1" == "-h" ] || [ "$1" == "help" ] || [ "$1" == "-help" ] ; then @@ -19,9 +19,9 @@ _ompd_src_dir="$LLVM_INSTALL_LOC/share/gdb/python/ompd/src" _ompd_dir="$LLVM_INSTALL_LOC/share/gdb/python/ompd" if [ "$AOMP_BUILD_CUDA" == 1 ] ; then - CUDAH=`find $CUDAT -type f -name "cuda.h" 2>/dev/null` + CUDAH=$(find "$CUDAT" -type f -name "cuda.h" 2>/dev/null) if [ "$CUDAH" == "" ] ; then - CUDAH=`find $CUDAINCLUDE -type f -name "cuda.h" 2>/dev/null` + CUDAH=$(find "$CUDAINCLUDE" -type f -name "cuda.h" 2>/dev/null) fi if [ "$CUDAH" == "" ] ; then echo @@ -35,82 +35,77 @@ if [ "$AOMP_BUILD_CUDA" == 1 ] ; then export CUDAFE_FLAGS="-w" fi -if [ ! -d $AOMP_REPOS/$AOMP_PROJECT_REPO_NAME ] ; then +if [ ! -d "$AOMP_REPOS/$AOMP_PROJECT_REPO_NAME" ] ; then echo "ERROR: Missing repository $AOMP_REPOS/$AOMP_PROJECT_REPO_NAME " echo " Consider setting env variables AOMP_REPOS and/or AOMP_PROJECT_REPO_NAME " exit 1 fi -# Make sure we can update the install directory -if [ "$1" == "install" ] ; then - $SUDO mkdir -p $LLVM_INSTALL_LOC - $SUDO touch $LLVM_INSTALL_LOC/testfile - if [ $? != 0 ] ; then - echo "ERROR: No update access to $LLVM_INSTALL_LOC" - exit 1 - fi - $SUDO rm $LLVM_INSTALL_LOC/testfile -fi +check_writable_installdir "$1" "$LLVM_INSTALL_LOC" if [ "$AOMP_BUILD_CUDA" == 1 ] ; then - if [ -f $CUDABIN/nvcc ] ; then - CUDAVER=`$CUDABIN/nvcc --version | grep compilation | cut -d" " -f5 | cut -d"." -f1 ` + if [ -f "$CUDABIN/nvcc" ] ; then + CUDAVER=$("$CUDABIN"/nvcc --version | grep compilation | cut -d" " -f5 | cut -d"." -f1) echo "CUDA VERSION IS $CUDAVER" fi fi if [ "$AOMP_USE_NINJA" == 0 ] ; then - AOMP_SET_NINJA_GEN="" + AOMP_SET_NINJA_GEN=() else - AOMP_SET_NINJA_GEN="-G Ninja" + AOMP_SET_NINJA_GEN=(-G Ninja) fi export LLVM_DIR=$AOMP_INSTALL_DIR -GFXSEMICOLONS=`echo $GFXLIST | tr ' ' ';' ` +GFXSEMICOLONS=$(echo "$GFXLIST" | tr ' ' ';') ALTAOMP=${ALTAOMP:-$LLVM_INSTALL_LOC} -COMMON_CMAKE_OPTS="$AOMP_SET_NINJA_GEN -DOPENMP_ENABLE_LIBOMPTARGET=1 --DCMAKE_INSTALL_PREFIX=$LLVM_INSTALL_LOC --DOPENMP_TEST_C_COMPILER=$LLVM_INSTALL_LOC/bin/clang --DOPENMP_TEST_CXX_COMPILER=$LLVM_INSTALL_LOC/bin/clang++ --DCMAKE_C_COMPILER=$ALTAOMP/bin/clang --DCMAKE_CXX_COMPILER=$ALTAOMP/bin/clang++ --DLIBOMPTARGET_AMDGCN_GFXLIST=$GFXSEMICOLONS --DDEVICELIBS_ROOT=$DEVICELIBS_ROOT --DLIBOMP_COPY_EXPORTS=OFF --DLIBOMPTARGET_ENABLE_DEBUG=ON --DLLVM_DIR=$LLVM_DIR" +declare -a COMMON_CMAKE_OPTS +COMMON_CMAKE_OPTS=("${AOMP_SET_NINJA_GEN[@]}" -DOPENMP_ENABLE_LIBOMPTARGET=1 + -DCMAKE_INSTALL_PREFIX="$LLVM_INSTALL_LOC" + -DOPENMP_TEST_C_COMPILER="$LLVM_INSTALL_LOC/bin/clang" + -DOPENMP_TEST_CXX_COMPILER="$LLVM_INSTALL_LOC/bin/clang++" + -DCMAKE_C_COMPILER="$ALTAOMP/bin/clang" + -DCMAKE_CXX_COMPILER="$ALTAOMP/bin/clang++" + -DLIBOMPTARGET_AMDGCN_GFXLIST="$GFXSEMICOLONS" + -DDEVICELIBS_ROOT="$DEVICELIBS_ROOT" + -DLIBOMP_COPY_EXPORTS=OFF + -DLIBOMPTARGET_ENABLE_DEBUG=ON + -DLLVM_DIR="$LLVM_DIR") if [ "$AOMP_STANDALONE_BUILD" == 0 ]; then # For static package builds, set BUILD_SHARED_LIBS to OFF if [ "$STATIC_PKG_DEPS" == "ON" ]; then - COMMON_CMAKE_OPTS="$COMMON_CMAKE_OPTS -DBUILD_SHARED_LIBS=OFF" + COMMON_CMAKE_OPTS=("${COMMON_CMAKE_OPTS[@]}" -DBUILD_SHARED_LIBS=OFF) fi - COMMON_CMAKE_OPTS="$COMMON_CMAKE_OPTS - -DLLVM_MAIN_INCLUDE_DIR=$LLVM_PROJECT_ROOT/llvm/include - -DLIBOMPTARGET_LLVM_INCLUDE_DIRS=$LLVM_PROJECT_ROOT/llvm/include - -DROCM_DIR=$ROCM_DIR -DAOMP_STANDALONE_BUILD=$AOMP_STANDALONE_BUILD" + COMMON_CMAKE_OPTS=("${COMMON_CMAKE_OPTS[@]}" + -DLLVM_MAIN_INCLUDE_DIR="$LLVM_PROJECT_ROOT/llvm/include" + -DLIBOMPTARGET_LLVM_INCLUDE_DIRS="$LLVM_PROJECT_ROOT/llvm/include" + -DROCM_DIR="$ROCM_DIR" + -DAOMP_STANDALONE_BUILD="$AOMP_STANDALONE_BUILD") else - COMMON_CMAKE_OPTS="$COMMON_CMAKE_OPTS \ --DLLVM_MAIN_INCLUDE_DIR=$AOMP_REPOS/$AOMP_PROJECT_REPO_NAME/llvm/include \ --DLIBOMPTARGET_LLVM_INCLUDE_DIRS=$AOMP_REPOS/$AOMP_PROJECT_REPO_NAME/llvm/include \ --DLIBOMP_USE_HWLOC=ON -DLIBOMP_HWLOC_INSTALL_DIR=$AOMP_SUPP/hwloc" + COMMON_CMAKE_OPTS=("${COMMON_CMAKE_OPTS[@]}" + -DLLVM_MAIN_INCLUDE_DIR="$AOMP_REPOS/$AOMP_PROJECT_REPO_NAME/llvm/include" + -DLIBOMPTARGET_LLVM_INCLUDE_DIRS="$AOMP_REPOS/$AOMP_PROJECT_REPO_NAME/llvm/include" + -DLIBOMP_USE_HWLOC=ON + -DLIBOMP_HWLOC_INSTALL_DIR="$AOMP_SUPP/hwloc") fi if [ "$AOMP_BUILD_CUDA" == 1 ] ; then - COMMON_CMAKE_OPTS="$COMMON_CMAKE_OPTS --DLIBOMPTARGET_NVPTX_ENABLE_BCLIB=ON --DLIBOMPTARGET_NVPTX_CUDA_COMPILER=$AOMP/bin/clang++ --DLIBOMPTARGET_NVPTX_BC_LINKER=$AOMP/bin/llvm-link --DLIBOMPTARGET_NVPTX_COMPUTE_CAPABILITIES=$NVPTXGPUS" + COMMON_CMAKE_OPTS=("${COMMON_CMAKE_OPTS[@]}" + -DLIBOMPTARGET_NVPTX_ENABLE_BCLIB=ON + -DLIBOMPTARGET_NVPTX_CUDA_COMPILER="$AOMP/bin/clang++" + -DLIBOMPTARGET_NVPTX_BC_LINKER="$AOMP/bin/llvm-link" + -DLIBOMPTARGET_NVPTX_COMPUTE_CAPABILITIES="$NVPTXGPUS") else # Need to force CUDA off this way in case cuda is installed in this system - COMMON_CMAKE_OPTS="$COMMON_CMAKE_OPTS --DCUDA_TOOLKIT_ROOT_DIR=OFF" + COMMON_CMAKE_OPTS=("${COMMON_CMAKE_OPTS[@]}" + -DCUDA_TOOLKIT_ROOT_DIR=OFF) fi -if [ "$AOMP_BUILD_SANITIZER" == 1 ]; then - LDFLAGS="-fuse-ld=lld $ASAN_FLAGS" -fi +#if [ "$AOMP_BUILD_SANITIZER" == 1 ]; then + #LDFLAGS=$(shquot '-fuse-ld=lld' "${ASAN_FLAGS[@]}") + #export LDFLAGS +#fi # This is how we tell the hsa plugin where to find hsa export HSA_RUNTIME_PATH=$ROCM_DIR @@ -123,161 +118,237 @@ export HSA_RUNTIME_PATH=$ROCM_DIR # because of its size and constant trunk merges to amd-staging. # This is why default is 0 (OFF). if [ "$AOMP_APPLY_ATD_AMD_STAGING_PATCH" == 1 ] ; then - patchrepo $REPO_DIR + patchrepo "$REPO_DIR" fi if [ "$1" != "nocmake" ] && [ "$1" != "install" ] ; then echo " " echo "This is a FRESH START. ERASING any previous builds in $BUILD_DIR/openmp." echo "Use ""$0 nocmake"" or ""$0 install"" to avoid FRESH START." - echo rm -rf $BUILD_DIR/build/openmp - rm -rf $BUILD_DIR/build/openmp + echo "rm -rf $BUILD_DIR/build/openmp" + rm -rf "$BUILD_DIR/build/openmp" + declare -a MYCMAKEOPTS if [ "$AOMP_STANDALONE_BUILD" == 1 ]; then - MYCMAKEOPTS="$COMMON_CMAKE_OPTS -DCMAKE_PREFIX_PATH=$AOMP_INSTALL_DIR/lib/cmake -DCMAKE_BUILD_TYPE=Release $AOMP_ORIGIN_RPATH" + MYCMAKEOPTS=("${COMMON_CMAKE_OPTS[@]}" + -DCMAKE_PREFIX_PATH="$AOMP_INSTALL_DIR/lib/cmake" + -DCMAKE_BUILD_TYPE=Release + "${AOMP_ORIGIN_RPATH[@]}") else - MYCMAKEOPTS="$COMMON_CMAKE_OPTS -DCMAKE_PREFIX_PATH=$INSTALL_PREFIX/lib/cmake -DCMAKE_BUILD_TYPE=Release $OPENMP_EXTRAS_ORIGIN_RPATH" + MYCMAKEOPTS=("${COMMON_CMAKE_OPTS[@]}" + -DCMAKE_PREFIX_PATH="$INSTALL_PREFIX/lib/cmake" + -DCMAKE_BUILD_TYPE=Release + "${OPENMP_EXTRAS_ORIGIN_RPATH[@]}") # XXX: Crude way to detect if we should enable building the mod files with flang. # Is it preferrable to set it from the outside or based on branch name, some other in-tree file? AOMP_BUILD_MODFILES_WITH_FLANG_NEW=0 - if [ -e ${LLVM_INSTALL_LOC}/bin/flang ]; then + if [ -e "${LLVM_INSTALL_LOC}/bin/flang" ]; then AOMP_BUILD_MODFILES_WITH_FLANG_NEW=1 fi if [ "$AOMP_BUILD_MODFILES_WITH_FLANG_NEW" == 1 ]; then echo "Building .mod files via: $LLVM_INSTALL_LOC/bin/flang" echo "Installing .mod files to: $LLVM_INSTALL_LOC/include/flang/" - MYCMAKEOPTS="$MYCMAKEOPTS -DLIBOMP_FORTRAN_MODULES_COMPILER=$LLVM_INSTALL_LOC/bin/flang - -DLIBOMP_MODULES_INSTALL_PATH=$LLVM_INSTALL_LOC/include/flang/" + MYCMAKEOPTS=("${MYCMAKEOPTS[@]}" + -DLIBOMP_FORTRAN_MODULES_COMPILER="$LLVM_INSTALL_LOC/bin/flang" + -DLIBOMP_MODULES_INSTALL_PATH="$LLVM_INSTALL_LOC/include/flang/") fi fi if [ "$AOMP_LEGACY_OPENMP" == "1" ] && [ "$SANITIZER" != 1 ]; then echo " -----Running openmp cmake ---- " - mkdir -p $BUILD_DIR/build/openmp - cd $BUILD_DIR/build/openmp - echo ${AOMP_CMAKE} $MYCMAKEOPTS $AOMP_REPOS/$AOMP_PROJECT_REPO_NAME/openmp - ${AOMP_CMAKE} $MYCMAKEOPTS $AOMP_REPOS/$AOMP_PROJECT_REPO_NAME/openmp - if [ $? != 0 ] ; then + mkdir -p "$BUILD_DIR/build/openmp" + cd "$BUILD_DIR/build/openmp" || exit + echo "${AOMP_CMAKE}" "${MYCMAKEOPTS[@]}" \ + "$AOMP_REPOS/$AOMP_PROJECT_REPO_NAME/openmp" + + if ! ${AOMP_CMAKE} "${MYCMAKEOPTS[@]}" \ + "$AOMP_REPOS/$AOMP_PROJECT_REPO_NAME/openmp"; then echo "ERROR openmp cmake failed. Cmake flags" - echo " $MYCMAKEOPTS" + echo " $(shquot "${MYCMAKEOPTS[@]}")" exit 1 fi fi if [ "$AOMP_BUILD_SANITIZER" == 1 ]; then + declare -a ASAN_CMAKE_OPTS if [ "$AOMP_STANDALONE_BUILD" == 1 ]; then - ASAN_CMAKE_OPTS="$COMMON_CMAKE_OPTS -DLLVM_ENABLE_PER_TARGET_RUNTIME_DIR=OFF -DCMAKE_PREFIX_PATH=$AOMP_INSTALL_DIR/lib/asan/cmake -DSANITIZER_AMDGPU=1 -DCMAKE_BUILD_TYPE=Release $AOMP_ASAN_ORIGIN_RPATH" - else - ASAN_CMAKE_OPTS="$COMMON_CMAKE_OPTS -DLLVM_ENABLE_PER_TARGET_RUNTIME_DIR=OFF -DCMAKE_PREFIX_PATH=$ROCM_CMAKECONFIG_PATH -DSANITIZER_AMDGPU=1 -DCMAKE_BUILD_TYPE=Release $OPENMP_EXTRAS_ORIGIN_RPATH" - fi + ASAN_CMAKE_OPTS=("${COMMON_CMAKE_OPTS[@]}" + -DLLVM_ENABLE_PER_TARGET_RUNTIME_DIR=OFF + -DCMAKE_PREFIX_PATH="$AOMP_INSTALL_DIR/lib/asan/cmake" + -DSANITIZER_AMDGPU=1 -DCMAKE_BUILD_TYPE=Release + "${AOMP_ASAN_ORIGIN_RPATH[@]}") + else + ASAN_CMAKE_OPTS=("${COMMON_CMAKE_OPTS[@]}" + -DLLVM_ENABLE_PER_TARGET_RUNTIME_DIR=OFF + -DCMAKE_PREFIX_PATH="$ROCM_CMAKECONFIG_PATH" + -DSANITIZER_AMDGPU=1 -DCMAKE_BUILD_TYPE=Release + "${OPENMP_EXTRAS_ORIGIN_RPATH[@]}") + fi echo " -----Running openmp cmake for asan ---- " - mkdir -p $BUILD_DIR/build/openmp/asan - cd $BUILD_DIR/build/openmp/asan - echo ${AOMP_CMAKE} $ASAN_CMAKE_OPTS -DCMAKE_C_FLAGS="'$ASAN_FLAGS'" -DCMAKE_CXX_FLAGS="'$ASAN_FLAGS'" -DLLVM_LIBDIR_SUFFIX="/asan" $AOMP_REPOS/$AOMP_PROJECT_REPO_NAME/openmp - ${AOMP_CMAKE} $ASAN_CMAKE_OPTS -DCMAKE_C_FLAGS="'$ASAN_FLAGS'" -DCMAKE_CXX_FLAGS="'$ASAN_FLAGS'" -DLLVM_LIBDIR_SUFFIX="/asan" $AOMP_REPOS/$AOMP_PROJECT_REPO_NAME/openmp - if [ $? != 0 ] ; then + mkdir -p "$BUILD_DIR/build/openmp/asan" + cd "$BUILD_DIR/build/openmp/asan" || exit + echo "${AOMP_CMAKE}" "$(shquot "${ASAN_CMAKE_OPTS[@]}")" \ + -DCMAKE_C_FLAGS="\"$(cmquot "${ASAN_FLAGS[@]}")\"" \ + -DCMAKE_CXX_FLAGS="\"$(cmquot "${ASAN_FLAGS[@]}")\"" \ + -DLLVM_LIBDIR_SUFFIX="/asan" \ + "$AOMP_REPOS/$AOMP_PROJECT_REPO_NAME/openmp" + + if ! ${AOMP_CMAKE} "${ASAN_CMAKE_OPTS[@]}" \ + -DCMAKE_C_FLAGS="$(cmquot "${ASAN_FLAGS[@]}")" \ + -DCMAKE_CXX_FLAGS="$(cmquot "${ASAN_FLAGS[@]}")" \ + -DLLVM_LIBDIR_SUFFIX="/asan" \ + "$AOMP_REPOS/$AOMP_PROJECT_REPO_NAME/openmp"; then echo "ERROR openmp cmake failed. Cmake flags" - echo " $ASAN_CMAKE_OPTS" + echo " $(shquot "${ASAN_CMAKE_OPTS[@]}")" exit 1 fi fi # Build a dedicatd "performance" version of libomptarget if [ "$AOMP_BUILD_PERF" == "1" ]; then - echo rm -rf $BUILD_DIR/build/openmp_perf - rm -rf $BUILD_DIR/build/openmp_perf - MYCMAKEOPTS="$COMMON_CMAKE_OPTS -DLIBOMPTARGET_ENABLE_DEBUG=OFF -DCMAKE_BUILD_TYPE=Release -DLIBOMPTARGET_PERF=ON -DLLVM_LIBDIR_SUFFIX=-perf" - mkdir -p $BUILD_DIR/build/openmp_perf - cd $BUILD_DIR/build/openmp_perf + echo "rm -rf $BUILD_DIR/build/openmp_perf" + rm -rf "$BUILD_DIR/build/openmp_perf" + MYCMAKEOPTS=("${COMMON_CMAKE_OPTS[@]}" -DLIBOMPTARGET_ENABLE_DEBUG=OFF + -DCMAKE_BUILD_TYPE=Release -DLIBOMPTARGET_PERF=ON + -DLLVM_LIBDIR_SUFFIX=-perf) + mkdir -p "$BUILD_DIR/build/openmp_perf" + cd "$BUILD_DIR/build/openmp_perf" || exit echo " -----Running openmp cmake for perf ---- " - echo ${AOMP_CMAKE} $MYCMAKEOPTS -DCMAKE_PREFIX_PATH="$AOMP_INSTALL_DIR/lib/cmake" $AOMP_ORIGIN_RPATH $AOMP_REPOS/$AOMP_PROJECT_REPO_NAME/openmp - ${AOMP_CMAKE} $MYCMAKEOPTS -DCMAKE_PREFIX_PATH="$AOMP_INSTALL_DIR/lib/cmake" $AOMP_ORIGIN_RPATH $AOMP_REPOS/$AOMP_PROJECT_REPO_NAME/openmp - if [ $? != 0 ] ; then + echo "${AOMP_CMAKE}" "$(shquot "${MYCMAKEOPTS[@]}")" \ + -DCMAKE_PREFIX_PATH="$AOMP_INSTALL_DIR/lib/cmake" \ + "$(shquot "${AOMP_ORIGIN_RPATH[@]}")" \ + "$AOMP_REPOS/$AOMP_PROJECT_REPO_NAME/openmp" + + if ! ${AOMP_CMAKE} "${MYCMAKEOPTS[@]}" \ + -DCMAKE_PREFIX_PATH="$AOMP_INSTALL_DIR/lib/cmake" \ + "${AOMP_ORIGIN_RPATH[@]}" \ + "$AOMP_REPOS/$AOMP_PROJECT_REPO_NAME/openmp"; then echo "error openmp cmake failed. cmake flags" - echo " $MYCMAKEOPTS" + echo " $(shquot "${MYCMAKEOPTS[@]}")" exit 1 fi if [ "$AOMP_BUILD_SANITIZER" == 1 ]; then - ASAN_CMAKE_OPTS="$MYCMAKEOPTS -DLLVM_ENABLE_PER_TARGET_RUNTIME_DIR=OFF -DSANITIZER_AMDGPU=1" + declare -a ASAN_CMAKE_OPTS + ASAN_CMAKE_OPTS=("${MYCMAKEOPTS[@]}" + -DLLVM_ENABLE_PER_TARGET_RUNTIME_DIR=OFF + -DSANITIZER_AMDGPU=1) echo " -----Running openmp cmake for perf-asan ---- " - mkdir -p $BUILD_DIR/build/openmp_perf/asan - cd $BUILD_DIR/build/openmp_perf/asan - echo ${AOMP_CMAKE} $ASAN_CMAKE_OPTS -DCMAKE_PREFIX_PATH="$AOMP_INSTALL_DIR/lib/asan/cmake" $AOMP_ASAN_ORIGIN_RPATH -DCMAKE_C_FLAGS="'$ASAN_FLAGS'" -DCMAKE_CXX_FLAGS="'$ASAN_FLAGS'" -DLLVM_LIBDIR_SUFFIX="-perf/asan" $AOMP_REPOS/$AOMP_PROJECT_REPO_NAME/openmp - ${AOMP_CMAKE} $ASAN_CMAKE_OPTS -DCMAKE_PREFIX_PATH="$AOMP_INSTALL_DIR/lib/asan/cmake" $AOMP_ASAN_ORIGIN_RPATH -DCMAKE_C_FLAGS="'$ASAN_FLAGS'" -DCMAKE_CXX_FLAGS="'$ASAN_FLAGS'" -DLLVM_LIBDIR_SUFFIX="-perf/asan" $AOMP_REPOS/$AOMP_PROJECT_REPO_NAME/openmp - if [ $? != 0 ] ; then + mkdir -p "$BUILD_DIR/build/openmp_perf/asan" + cd "$BUILD_DIR/build/openmp_perf/asan" || exit + echo "${AOMP_CMAKE}" "${ASAN_CMAKE_OPTS[@]}" \ + -DCMAKE_PREFIX_PATH="$AOMP_INSTALL_DIR/lib/asan/cmake" \ + "${AOMP_ASAN_ORIGIN_RPATH[@]}" \ + -DCMAKE_C_FLAGS="\"$(cmquot "${ASAN_FLAGS[@]}")\"" \ + -DCMAKE_CXX_FLAGS="\"$(cmquot "${ASAN_FLAGS[@]}")\"" \ + -DLLVM_LIBDIR_SUFFIX="-perf/asan" \ + "$AOMP_REPOS/$AOMP_PROJECT_REPO_NAME/openmp" + + if ! ${AOMP_CMAKE} "${ASAN_CMAKE_OPTS[@]}" \ + -DCMAKE_PREFIX_PATH="$AOMP_INSTALL_DIR/lib/asan/cmake" \ + "${AOMP_ASAN_ORIGIN_RPATH[@]}" \ + -DCMAKE_C_FLAGS="$(cmquot "${ASAN_FLAGS[@]}")" \ + -DCMAKE_CXX_FLAGS="$(cmquot "${ASAN_FLAGS[@]}")" \ + -DLLVM_LIBDIR_SUFFIX="-perf/asan" \ + "$AOMP_REPOS/$AOMP_PROJECT_REPO_NAME/openmp"; then echo "error openmp cmake failed. cmake flags" - echo " $ASAN_CMAKE_OPTS" + echo " $(shquot "${ASAN_CMAKE_OPTS[@]}")" exit 1 fi fi fi if [ "$AOMP_BUILD_DEBUG" == "1" ] ; then - echo rm -rf $BUILD_DIR/build/openmp_debug - rm -rf $BUILD_DIR/build/openmp_debug - - DEBUGCMAKEOPTS=" --DLIBOMPTARGET_NVPTX_DEBUG=ON \ --DLLVM_ENABLE_ASSERTIONS=ON \ --DCMAKE_BUILD_TYPE=Debug \ --DROCM_DIR=$ROCM_DIR \ --DLIBOMP_ARCH=x86_64 \ --DLIBOMP_OMPT_SUPPORT=ON \ --DLIBOMP_USE_DEBUGGER=ON \ --DLIBOMP_CPPFLAGS='-O0' \ --DLIBOMP_OMPD_SUPPORT=ON \ --DLIBOMP_OMPT_DEBUG=ON \ --DOPENMP_SOURCE_DEBUG_MAP="\""-fdebug-prefix-map=$AOMP_REPOS/$AOMP_PROJECT_REPO_NAME/openmp=$_ompd_src_dir/openmp"\"" " + echo "rm -rf $BUILD_DIR/build/openmp_debug" + rm -rf "$BUILD_DIR/build/openmp_debug" + + declare -a DEBUGCMAKEOPTS + + DEBUGCMAKEOPTS=(-DLIBOMPTARGET_NVPTX_DEBUG=ON + -DLLVM_ENABLE_ASSERTIONS=ON + -DCMAKE_BUILD_TYPE=Debug + -DROCM_DIR="$ROCM_DIR" + -DLIBOMP_ARCH=x86_64 + -DLIBOMP_OMPT_SUPPORT=ON + -DLIBOMP_USE_DEBUGGER=ON + -DLIBOMP_CPPFLAGS='-O0' + -DLIBOMP_OMPD_SUPPORT=ON + -DLIBOMP_OMPT_DEBUG=ON + -DOPENMP_SOURCE_DEBUG_MAP="-fdebug-prefix-map=$AOMP_REPOS/$AOMP_PROJECT_REPO_NAME/openmp=$_ompd_src_dir/openmp") # The 'pip install --system' command is not supported on non-debian systems. This will disable # the system option if the debian_version file is not present. if [ ! -f /etc/debian_version ]; then echo "==> Non-Debian OS, disabling use of pip install --system" - DEBUGCMAKEOPTS="$DEBUGCMAKEOPTS -DDISABLE_SYSTEM_NON_DEBIAN=1" + DEBUGCMAKEOPTS=("${DEBUGCMAKEOPTS[@]}" -DDISABLE_SYSTEM_NON_DEBIAN=1) fi # Redhat 7.6 does not have python36-devel package, which is needed for ompd compilation. # This is acquired through RH Software Collections. if [ -f /opt/rh/rh-python36/enable ]; then echo "==> Using python3.6 out of rh tools." - DEBUGCMAKEOPTS="$DEBUGCMAKEOPTS -DPython3_ROOT_DIR=/opt/rh/rh-python36/root/bin -DPYTHON_HEADERS=/opt/rh/rh-python36/root/usr/include/python3.6m" + DEBUGCMAKEOPTS=("${DEBUGCMAKEOPTS[@]}" -DPython3_ROOT_DIR=/opt/rh/rh-python36/root/bin -DPYTHON_HEADERS=/opt/rh/rh-python36/root/usr/include/python3.6m) fi if [ "$SANITIZER" != 1 ]; then echo echo " -----Running openmp cmake for debug ---- " - mkdir -p $BUILD_DIR/build/openmp_debug - cd $BUILD_DIR/build/openmp_debug + mkdir -p "$BUILD_DIR/build/openmp_debug" + cd "$BUILD_DIR/build/openmp_debug" || exit if [ "$AOMP_STANDALONE_BUILD" == 1 ]; then PREFIX_PATH="-DCMAKE_PREFIX_PATH=$AOMP_INSTALL_DIR/lib/cmake" - MYCMAKEOPTS="$COMMON_CMAKE_OPTS $DEBUGCMAKEOPTS $AOMP_DEBUG_ORIGIN_RPATH" + MYCMAKEOPTS=("${COMMON_CMAKE_OPTS[@]}" "${DEBUGCMAKEOPTS[@]}" + "${AOMP_DEBUG_ORIGIN_RPATH[@]}") else PREFIX_PATH="-DCMAKE_PREFIX_PATH=$INSTALL_PREFIX/lib/cmake" - MYCMAKEOPTS="$COMMON_CMAKE_OPTS $DEBUGCMAKEOPTS $OPENMP_EXTRAS_ORIGIN_RPATH" + MYCMAKEOPTS=("${COMMON_CMAKE_OPTS[@]}" "${DEBUGCMAKEOPTS[@]}" + "${OPENMP_EXTRAS_ORIGIN_RPATH[@]}") fi - echo ${AOMP_CMAKE} $MYCMAKEOPTS $PREFIX_PATH -DCMAKE_C_FLAGS="$CFLAGS -g" -DCMAKE_CXX_FLAGS="$CXXFLAGS -g" -DLLVM_LIBDIR_SUFFIX=-debug $AOMP_REPOS/$AOMP_PROJECT_REPO_NAME/openmp - ${AOMP_CMAKE} $MYCMAKEOPTS $PREFIX_PATH -DCMAKE_C_FLAGS="$CFLAGS -g" -DCMAKE_CXX_FLAGS="$CXXFLAGS -g" -DLLVM_LIBDIR_SUFFIX=-debug $AOMP_REPOS/$AOMP_PROJECT_REPO_NAME/openmp - if [ $? != 0 ] ; then + echo "${AOMP_CMAKE}" "${MYCMAKEOPTS[@]}" "$PREFIX_PATH" \ + -DCMAKE_C_FLAGS="$CFLAGS -g" \ + -DCMAKE_CXX_FLAGS="$CXXFLAGS -g" \ + -DLLVM_LIBDIR_SUFFIX=-debug \ + "$AOMP_REPOS/$AOMP_PROJECT_REPO_NAME/openmp" + + if ! ${AOMP_CMAKE} "${MYCMAKEOPTS[@]}" "$PREFIX_PATH" \ + -DCMAKE_C_FLAGS="$CFLAGS -g" \ + -DCMAKE_CXX_FLAGS="$CXXFLAGS -g" \ + -DLLVM_LIBDIR_SUFFIX=-debug \ + "$AOMP_REPOS/$AOMP_PROJECT_REPO_NAME/openmp"; then echo "ERROR openmp debug cmake failed. Cmake flags" - echo " $MYCMAKEOPTS" + echo " $(shquot "${MYCMAKEOPTS[@]}")" exit 1 fi fi if [ "$AOMP_BUILD_SANITIZER" == 1 ]; then - ASAN_CMAKE_OPTS="$COMMON_CMAKE_OPTS $DEBUGCMAKEOPTS -DLLVM_ENABLE_PER_TARGET_RUNTIME_DIR=OFF -DSANITIZER_AMDGPU=1" + declare -a ASAN_CMAKE_OPTS + ASAN_CMAKE_OPTS=("${COMMON_CMAKE_OPTS[@]}" "${DEBUGCMAKEOPTS[@]}" + -DLLVM_ENABLE_PER_TARGET_RUNTIME_DIR=OFF + -DSANITIZER_AMDGPU=1) echo " -----Running openmp cmake for debug-asan ---- " - mkdir -p $BUILD_DIR/build/openmp_debug/asan - cd $BUILD_DIR/build/openmp_debug/asan - if [ "$AOMP_STANDALONE_BUILD" == 1 ]; then - ASAN_CMAKE_OPTS="$ASAN_CMAKE_OPTS -DCMAKE_PREFIX_PATH=$AOMP_INSTALL_DIR/lib/asan/cmake $AOMP_ASAN_ORIGIN_RPATH" - else - ASAN_CMAKE_OPTS="$ASAN_CMAKE_OPTS -DCMAKE_PREFIX_PATH=$ROCM_CMAKECONFIG_PATH $OPENMP_EXTRAS_ORIGIN_RPATH" - fi - echo ${AOMP_CMAKE} $ASAN_CMAKE_OPTS -DCMAKE_C_FLAGS="'$ASAN_FLAGS'" -DCMAKE_CXX_FLAGS="'$ASAN_FLAGS'" -DLLVM_LIBDIR_SUFFIX="-debug/asan" $AOMP_REPOS/$AOMP_PROJECT_REPO_NAME/openmp - ${AOMP_CMAKE} $ASAN_CMAKE_OPTS -DCMAKE_C_FLAGS="'$ASAN_FLAGS'" -DCMAKE_CXX_FLAGS="'$ASAN_FLAGS'" -DLLVM_LIBDIR_SUFFIX="-debug/asan" $AOMP_REPOS/$AOMP_PROJECT_REPO_NAME/openmp - if [ $? != 0 ] ; then + mkdir -p "$BUILD_DIR/build/openmp_debug/asan" + cd "$BUILD_DIR/build/openmp_debug/asan" || exit + if [ "$AOMP_STANDALONE_BUILD" == 1 ]; then + ASAN_CMAKE_OPTS=("${ASAN_CMAKE_OPTS[@]}" + -DCMAKE_PREFIX_PATH="$AOMP_INSTALL_DIR/lib/asan/cmake" + "${AOMP_ASAN_ORIGIN_RPATH[@]}") + else + ASAN_CMAKE_OPTS=("${ASAN_CMAKE_OPTS[@]}" + -DCMAKE_PREFIX_PATH="$ROCM_CMAKECONFIG_PATH" + "${OPENMP_EXTRAS_ORIGIN_RPATH[@]}") + fi + echo "${AOMP_CMAKE}" "$(shquot "${ASAN_CMAKE_OPTS[@]}")" \ + -DCMAKE_C_FLAGS="\"$(cmquot "${ASAN_FLAGS[@]}")\"" \ + -DCMAKE_CXX_FLAGS="\"$(cmquot "${ASAN_FLAGS[@]}")\"" \ + -DLLVM_LIBDIR_SUFFIX="-debug/asan" \ + "$AOMP_REPOS/$AOMP_PROJECT_REPO_NAME/openmp" + + if ! ${AOMP_CMAKE} "${ASAN_CMAKE_OPTS[@]}" \ + -DCMAKE_C_FLAGS="$(cmquot "${ASAN_FLAGS[@]}")" \ + -DCMAKE_CXX_FLAGS="$(cmquot "${ASAN_FLAGS[@]}")" \ + -DLLVM_LIBDIR_SUFFIX="-debug/asan" \ + "$AOMP_REPOS/$AOMP_PROJECT_REPO_NAME/openmp"; then echo "ERROR openmp debug cmake failed. Cmake flags" - echo " $ASAN_CMAKE_OPTS" + echo " $(shquot "${ASAN_CMAKE_OPTS[@]}")" exit 1 fi fi @@ -290,10 +361,10 @@ fi if [ "$1" != "install" ] ; then if [ "$AOMP_LEGACY_OPENMP" == "1" ] && [ "$SANITIZER" != 1 ] ; then - cd $BUILD_DIR/build/openmp + cd "$BUILD_DIR/build/openmp" || exit echo " -----Running $AOMP_NINJA_BIN for $BUILD_DIR/build/openmp ---- " - $AOMP_NINJA_BIN -j $AOMP_JOB_THREADS - if [ $? != 0 ] ; then + + if ! $AOMP_NINJA_BIN -j "$AOMP_JOB_THREADS"; then echo " " echo "ERROR: $AOMP_NINJA_BIN -j $AOMP_JOB_THREADS FAILED" echo "To restart:" @@ -304,10 +375,10 @@ if [ "$AOMP_LEGACY_OPENMP" == "1" ] && [ "$SANITIZER" != 1 ] ; then fi if [ "$AOMP_BUILD_SANITIZER" == 1 ] ; then - cd $BUILD_DIR/build/openmp/asan + cd "$BUILD_DIR/build/openmp/asan" || exit echo " -----Running $AOMP_NINJA_BIN for $BUILD_DIR/build/openmp/asan ---- " - $AOMP_NINJA_BIN -j $AOMP_JOB_THREADS - if [ $? != 0 ] ; then + + if ! $AOMP_NINJA_BIN -j "$AOMP_JOB_THREADS"; then echo " " echo "ERROR: $AOMP_NINJA_BIN -j $AOMP_JOB_THREADS FAILED" echo "To restart:" @@ -318,22 +389,21 @@ if [ "$AOMP_BUILD_SANITIZER" == 1 ] ; then fi if [ "$AOMP_BUILD_PERF" == "1" ] ; then - cd $BUILD_DIR/build/openmp_perf + cd "$BUILD_DIR/build/openmp_perf" || exit echo echo echo " -----Running $AOMP_NINJA_BIN for $BUILD_DIR/build/openmp_perf ---- " - $AOMP_NINJA_BIN -j $AOMP_JOB_THREADS - if [ $? != 0 ] ; then + if ! $AOMP_NINJA_BIN -j "$AOMP_JOB_THREADS"; then echo "ERROR $AOMP_NINJA_BIN -j $AOMP_JOB_THREADS failed" exit 1 fi if [ "$AOMP_BUILD_SANITIZER" == 1 ] ; then - cd $BUILD_DIR/build/openmp_perf/asan + cd "$BUILD_DIR/build/openmp_perf/asan" || exit echo echo echo " ----- Running $AOMP_NINJA_BIN for $BUILD_DIR/build/openmp_perf/asan ----- " - $AOMP_NINJA_BIN -j $AOMP_JOB_THREADS - if [ $? != 0 ] ; then + + if ! $AOMP_NINJA_BIN -j "$AOMP_JOB_THREADS"; then echo "ERROR $AOMP_NINJA_BIN -j $AOMP_JOB_THREADS failed" exit 1 fi @@ -342,24 +412,24 @@ fi if [ "$AOMP_BUILD_DEBUG" == "1" ] ; then if [ "$SANITIZER" != 1 ] ; then - cd $BUILD_DIR/build/openmp_debug + cd "$BUILD_DIR/build/openmp_debug" || exit echo echo echo " -----Running $AOMP_NINJA_BIN for $BUILD_DIR/build/openmp_debug ---- " - $AOMP_NINJA_BIN -j $AOMP_JOB_THREADS - if [ $? != 0 ] ; then + + if ! $AOMP_NINJA_BIN -j "$AOMP_JOB_THREADS"; then echo "ERROR $AOMP_NINJA_BIN -j $AOMP_JOB_THREADS failed" exit 1 fi fi if [ "$AOMP_BUILD_SANITIZER" == 1 ] ; then - cd $BUILD_DIR/build/openmp_debug/asan + cd "$BUILD_DIR/build/openmp_debug/asan" || exit echo echo echo " -----Running $AOMP_NINJA_BIN for $BUILD_DIR/build/openmp_debug/asan ---- " - $AOMP_NINJA_BIN -j $AOMP_JOB_THREADS - if [ $? != 0 ] ; then + + if ! $AOMP_NINJA_BIN -j "$AOMP_JOB_THREADS"; then echo "ERROR $AOMP_NINJA_BIN -j $AOMP_JOB_THREADS failed" exit 1 fi @@ -375,47 +445,48 @@ fi # ----------- Install only if asked ---------------------------- if [ "$1" == "install" ] ; then if [ "$AOMP_LEGACY_OPENMP" == "1" ] && [ "$SANITIZER" != 1 ] ; then - cd $BUILD_DIR/build/openmp + cd "$BUILD_DIR/build/openmp" || exit echo echo " -----Installing to $LLVM_INSTALL_LOC/lib ----- " - $SUDO $AOMP_NINJA_BIN -j $AOMP_JOB_THREADS install - if [ $? != 0 ] ; then + + if ! $SUDO "$AOMP_NINJA_BIN" -j "$AOMP_JOB_THREADS" install; then echo "ERROR $AOMP_NINJA_BIN install failed " exit 1 fi fi if [ "$AOMP_BUILD_SANITIZER" == 1 ] ; then - cd $BUILD_DIR/build/openmp/asan + cd "$BUILD_DIR/build/openmp/asan" || exit echo echo " -----Installing to $LLVM_INSTALL_LOC/lib/asan ----- " - $SUDO $AOMP_NINJA_BIN -j $AOMP_JOB_THREADS install - if [ $? != 0 ] ; then + + if ! $SUDO "$AOMP_NINJA_BIN" -j "$AOMP_JOB_THREADS" install; then echo "ERROR $AOMP_NINJA_BIN install failed " exit 1 fi fi if [ "$AOMP_BUILD_PERF" == "1" ]; then - cd $BUILD_DIR/build/openmp_perf + cd "$BUILD_DIR/build/openmp_perf" || exit echo echo " -----Installing to $LLVM_INSTALL_LOC/lib-perf ----- " - $SUDO $AOMP_NINJA_BIN -j $AOMP_JOB_THREADS install - if [ $? != 0 ] ; then + + if ! $SUDO "$AOMP_NINJA_BIN" -j "$AOMP_JOB_THREADS" install; then echo "ERROR $AOMP_NINJA_BIN install failed " exit 1 fi - if [ ! -h $AOMP_INSTALL_DIR/lib-perf/$llvm_dylib ] && [ "$llvm_dylib" != "" ]; then - cd $AOMP_INSTALL_DIR/lib-perf - ln -s ../lib/$llvm_dylib $llvm_dylib - fi + # FIXME: llvm_dylib is not set anywhere! + #if [ ! -h "$AOMP_INSTALL_DIR/lib-perf/$llvm_dylib" ] && [ "$llvm_dylib" != "" ]; then + # cd "$AOMP_INSTALL_DIR/lib-perf" || exit + # ln -s "../lib/$llvm_dylib" "$llvm_dylib" + #fi if [ "$AOMP_BUILD_SANITIZER" == 1 ] ; then - cd $BUILD_DIR/build/openmp_perf/asan + cd "$BUILD_DIR/build/openmp_perf/asan" || exit echo echo " ----- Installing to $LLVM_INSTALL_LOC/lib-perf/asan ----- " - $SUDO $AOMP_NINJA_BIN -j $AOMP_JOB_THREADS install - if [ $? != 0 ] ; then + + if ! $SUDO "$AOMP_NINJA_BIN" -j "$AOMP_JOB_THREADS" install; then echo "ERROR $AOMP_NINJA_BIN install failed " exit 1 fi @@ -424,25 +495,26 @@ if [ "$1" == "install" ] ; then if [ "$AOMP_BUILD_DEBUG" == "1" ] ; then if [ "$SANITIZER" != 1 ] ; then - cd $BUILD_DIR/build/openmp_debug + cd "$BUILD_DIR/build/openmp_debug" || exit echo echo " -----Installing to $LLVM_INSTALL_LOC/lib-debug ---- " - $SUDO $AOMP_NINJA_BIN -j $AOMP_JOB_THREADS install - if [ $? != 0 ] ; then + + if ! $SUDO "$AOMP_NINJA_BIN" -j "$AOMP_JOB_THREADS" install; then echo "ERROR $AOMP_NINJA_BIN install failed " exit 1 fi - if [ ! -h $AOMP_INSTALL_DIR/lib-debug/$llvm_dylib ] && [ "$llvm_dylib" != "" ]; then - cd $AOMP_INSTALL_DIR/lib-debug - ln -s ../lib/$llvm_dylib $llvm_dylib - fi + # FIXME: llvm_dylib is not set anywhere! + #if [ ! -h "$AOMP_INSTALL_DIR/lib-debug/$llvm_dylib" ] && [ "$llvm_dylib" != "" ]; then + # cd "$AOMP_INSTALL_DIR/lib-debug" || exit + # ln -s "../lib/$llvm_dylib" "$llvm_dylib" + #fi fi if [ "$AOMP_BUILD_SANITIZER" == 1 ] ; then - cd $BUILD_DIR/build/openmp_debug/asan + cd "$BUILD_DIR/build/openmp_debug/asan" || exit echo " -----Installing to $LLVM_INSTALL_LOC/lib-debug/asan ---- " - $SUDO $AOMP_NINJA_BIN -j $AOMP_JOB_THREADS install - if [ $? != 0 ] ; then + + if ! $SUDO "$AOMP_NINJA_BIN" -j "$AOMP_JOB_THREADS" install; then echo "ERROR $AOMP_NINJA_BIN install failed " exit 1 fi @@ -455,19 +527,19 @@ if [ "$1" == "install" ] ; then # Copy selected debugable runtime sources into the installation $ompd_src_dir/src directory # to satisfy the above -fdebug-prefix-map. - $SUDO mkdir -p $_ompd_src_dir/openmp/runtime - $SUDO mkdir -p $_ompd_src_dir/openmp/libompd + $SUDO mkdir -p "$_ompd_src_dir/openmp/runtime" + $SUDO mkdir -p "$_ompd_src_dir/openmp/libompd" if [ "$AOMP_STANDALONE_BUILD" == 1 ]; then - $SUDO cp -rp $AOMP_REPOS/$AOMP_PROJECT_REPO_NAME/openmp/runtime/src $_ompd_src_dir/openmp/runtime - $SUDO cp -rp $AOMP_REPOS/$AOMP_PROJECT_REPO_NAME/openmp/libompd/src $_ompd_src_dir/openmp/libompd + $SUDO cp -rp "$AOMP_REPOS/$AOMP_PROJECT_REPO_NAME/openmp/runtime/src" "$_ompd_src_dir/openmp/runtime" + $SUDO cp -rp "$AOMP_REPOS/$AOMP_PROJECT_REPO_NAME/openmp/libompd/src" "$_ompd_src_dir/openmp/libompd" else - $SUDO cp -rp $LLVM_PROJECT_ROOT/openmp/runtime/src $_ompd_src_dir/openmp/runtime - $SUDO cp -rp $LLVM_PROJECT_ROOT/openmp/libompd/src $_ompd_src_dir/openmp/libompd + $SUDO cp -rp "$LLVM_PROJECT_ROOT/openmp/runtime/src" "$_ompd_src_dir/openmp/runtime" + $SUDO cp -rp "$LLVM_PROJECT_ROOT/openmp/libompd/src" "$_ompd_src_dir/openmp/libompd" fi fi if [ "$AOMP_APPLY_ATD_AMD_STAGING_PATCH" == 1 ] ; then - removepatch $REPO_DIR + removepatch "$REPO_DIR" fi fi diff --git a/bin/build_pgmath.sh b/bin/build_pgmath.sh index 6ad7d4384..cdd1045cf 100755 --- a/bin/build_pgmath.sh +++ b/bin/build_pgmath.sh @@ -6,9 +6,9 @@ BUILD_TYPE=${BUILD_TYPE:-Release} # --- Start standard header to set AOMP environment variables ---- -realpath=`realpath $0` -thisdir=`dirname $realpath` -. $thisdir/aomp_common_vars +realpath=$(realpath "$0") +thisdir=$(dirname "$realpath") +. "$thisdir/aomp_common_vars" # --- end standard header ---- INSTALL_FLANG=${INSTALL_FLANG:-$AOMP_INSTALL_DIR} @@ -23,66 +23,73 @@ else fi fi -COMP_INC_DIR=$(ls -d $AOMP_INSTALL_DIR/lib/clang/*/include ) +COMP_INC_DIR=$(ls -d "$AOMP_INSTALL_DIR"/lib/clang/*/include ) + +declare -a MYCMAKEOPTS if [ "$AOMP_PROC" == "ppc64le" ] ; then - MYCMAKEOPTS="-DCMAKE_BUILD_TYPE=$BUILD_TYPE -DCMAKE_INSTALL_PREFIX=$LLVM_INSTALL_LOC -DLLVM_ENABLE_ASSERTIONS=ON -DCMAKE_Fortran_COMPILER=$LLVM_INSTALL_LOC/bin/flang -DLLVM_TARGETS_TO_BUILD=$TARGETS_TO_BUILD " + MYCMAKEOPTS=(-DCMAKE_BUILD_TYPE="$BUILD_TYPE" + -DCMAKE_INSTALL_PREFIX="$LLVM_INSTALL_LOC" + -DLLVM_ENABLE_ASSERTIONS=ON + -DCMAKE_Fortran_COMPILER="$LLVM_INSTALL_LOC/bin/flang" + -DLLVM_TARGETS_TO_BUILD="$TARGETS_TO_BUILD") else - MYCMAKEOPTS="-DCMAKE_BUILD_TYPE=$BUILD_TYPE -DCMAKE_INSTALL_PREFIX=$LLVM_INSTALL_LOC -DLLVM_ENABLE_ASSERTIONS=ON -DLLVM_CONFIG=$LLVM_INSTALL_LOC/bin/llvm-config -DCMAKE_CXX_COMPILER=clang++ -DCMAKE_C_COMPILER=clang -DLLVM_TARGETS_TO_BUILD=$TARGETS_TO_BUILD " + MYCMAKEOPTS=(-DCMAKE_BUILD_TYPE="$BUILD_TYPE" + -DCMAKE_INSTALL_PREFIX="$LLVM_INSTALL_LOC" + -DLLVM_ENABLE_ASSERTIONS=ON + -DLLVM_CONFIG="$LLVM_INSTALL_LOC/bin/llvm-config" + -DCMAKE_CXX_COMPILER=clang++ + -DCMAKE_C_COMPILER=clang + -DLLVM_TARGETS_TO_BUILD="$TARGETS_TO_BUILD") fi +declare -a ASAN_CMAKE_OPTS + if [ "$AOMP_BUILD_SANITIZER" == 1 ]; then - ASAN_FLAGS="$ASAN_FLAGS -I$COMP_INC_DIR" - ASAN_CMAKE_OPTS="$MYCMAKEOPTS -DCMAKE_PREFIX_PATH=$AOMP/lib/asan/cmake -DLLVM_ENABLE_PER_TARGET_RUNTIME_DIR=OFF -DCMAKE_INSTALL_BINDIR=bin/asan -DCMAKE_INSTALL_LIBDIR=lib/asan" + ASAN_FLAGS=("${ASAN_FLAGS[@]}" "-I$COMP_INC_DIR") + ASAN_CMAKE_OPTS=("${MYCMAKEOPTS[@]}" + -DCMAKE_PREFIX_PATH="$AOMP/lib/asan/cmake" + -DLLVM_ENABLE_PER_TARGET_RUNTIME_DIR=OFF + -DCMAKE_INSTALL_BINDIR=bin/asan + -DCMAKE_INSTALL_LIBDIR=lib/asan) if [ "$AOMP_STANDALONE_BUILD" == 1 ]; then - ASAN_CMAKE_OPTS="$ASAN_CMAKE_OPTS $AOMP_ASAN_ORIGIN_RPATH" + ASAN_CMAKE_OPTS=("${ASAN_CMAKE_OPTS[@]}" "${AOMP_ASAN_ORIGIN_RPATH[@]}") else - ASAN_CMAKE_OPTS="$ASAN_CMAKE_OPTS $OPENMP_EXTRAS_ORIGIN_RPATH" + ASAN_CMAKE_OPTS=("${ASAN_CMAKE_OPTS[@]}" "${OPENMP_EXTRAS_ORIGIN_RPATH[@]}") fi fi if [ "$AOMP_STANDALONE_BUILD" == 1 ]; then - MYCMAKEOPTS="$MYCMAKEOPTS $AOMP_ORIGIN_RPATH" + MYCMAKEOPTS=("${MYCMAKEOPTS[@]}" "${AOMP_ORIGIN_RPATH[@]}") else - MYCMAKEOPTS="$MYCMAKEOPTS $OPENMP_EXTRAS_ORIGIN_RPATH" + MYCMAKEOPTS=("${MYCMAKEOPTS[@]}" "${OPENMP_EXTRAS_ORIGIN_RPATH[@]}") fi -MYCMAKEOPTS="$MYCMAKEOPTS -DCMAKE_PREFIX_PATH=$AOMP/lib/cmake" +MYCMAKEOPTS=("${MYCMAKEOPTS[@]}" -DCMAKE_PREFIX_PATH="$AOMP/lib/cmake") if [ "$1" == "-h" ] || [ "$1" == "help" ] || [ "$1" == "-help" ] ; then help_build_aomp fi -REPO_DIR=$AOMP_REPOS/$AOMP_FLANG_REPO_NAME - -# Make sure we can update the install directory -if [ "$1" == "install" ] ; then - $SUDO mkdir -p $INSTALL_FLANG - $SUDO touch $INSTALL_FLANG/testfile - if [ $? != 0 ] ; then - echo "ERROR: No update access to $INSTALL_FLANG" - exit 1 - fi - $SUDO rm $INSTALL_FLANG/testfile -fi +check_writable_installdir "$1" "$INSTALL_FLANG" # Skip synchronization from git repos if nocmake or install are specified if [ "$1" != "nocmake" ] && [ "$1" != "install" ] ; then echo echo "This is a FRESH START. ERASING any previous builds in $BUILD_DIR/build/pgmath" echo "Use ""$0 nocmake"" or ""$0 install"" to avoid FRESH START." - rm -rf $BUILD_DIR/build/pgmath - mkdir -p $BUILD_DIR/build/pgmath + rm -rf "$BUILD_DIR/build/pgmath" + mkdir -p "$BUILD_DIR/build/pgmath" if [ "$AOMP_BUILD_SANITIZER" == 1 ]; then - mkdir -p $BUILD_DIR/build/pgmath/asan + mkdir -p "$BUILD_DIR/build/pgmath/asan" fi else - if [ ! -d $BUILD_DIR/build/pgmath ] ; then + if [ ! -d "$BUILD_DIR/build/pgmath" ] ; then echo "ERROR: The build directory $BUILD_DIR/build/pgmath does not exist" echo " run $0 without nocmake or install options. " exit 1 fi - if [ "$AOMP_BUILD_SANITIZER" == 1 ] && [ ! -d $BUILD_DIR/build/pgmath/asan ] ; then + if [ "$AOMP_BUILD_SANITIZER" == 1 ] && [ ! -d "$BUILD_DIR/build/pgmath/asan" ] ; then echo "ERROR: The build directory $BUILD_DIR/build/pgmath/asan does not exist" echo " run $0 without nocmake or install options. " exit 1 @@ -90,43 +97,43 @@ else fi # Need llvm-config to come from previous LLVM build -export PATH=$LLVM_INSTALL_LOC/bin:$PATH +export PATH="$LLVM_INSTALL_LOC/bin":$PATH if [ "$1" != "nocmake" ] && [ "$1" != "install" ] ; then if [ "$SANITIZER" != 1 ]; then echo - cd $BUILD_DIR/build/pgmath + cd "$BUILD_DIR/build/pgmath" || exit echo " -----Running cmake ---- " - echo ${AOMP_CMAKE} $MYCMAKEOPTS \ + echo "${AOMP_CMAKE}" "$(shquot "${MYCMAKEOPTS[@]}")" \ -DCMAKE_C_FLAGS="$CFLAGS -I$COMP_INC_DIR" \ -DCMAKE_CXX_FLAGS="$CXXFLAGS -I$COMP_INC_DIR" \ - $AOMP_REPOS/$AOMP_FLANG_REPO_NAME/runtime/libpgmath - ${AOMP_CMAKE} $MYCMAKEOPTS \ - -DCMAKE_C_FLAGS="$CFLAGS -I$COMP_INC_DIR" \ - -DCMAKE_CXX_FLAGS="$CXXFLAGS -I$COMP_INC_DIR" \ - $AOMP_REPOS/$AOMP_FLANG_REPO_NAME/runtime/libpgmath 2>&1 - if [ $? != 0 ] ; then + "$AOMP_REPOS/$AOMP_FLANG_REPO_NAME/runtime/libpgmath" + + if ! ${AOMP_CMAKE} "${MYCMAKEOPTS[@]}" \ + -DCMAKE_C_FLAGS="$CFLAGS -I$COMP_INC_DIR" \ + -DCMAKE_CXX_FLAGS="$CXXFLAGS -I$COMP_INC_DIR" \ + "$AOMP_REPOS/$AOMP_FLANG_REPO_NAME/runtime/libpgmath" 2>&1; then echo "ERROR cmake failed. Cmake flags" - echo " $MYCMAKEOPTS" + echo " $(shquot "${MYCMAKEOPTS[@]}")" exit 1 fi fi if [ "$AOMP_BUILD_SANITIZER" == 1 ]; then echo - cd $BUILD_DIR/build/pgmath/asan + cd "$BUILD_DIR/build/pgmath/asan" || exit echo " -----Running cmake pgmath-asan ---- " - echo ${AOMP_CMAKE} $ASAN_CMAKE_OPTS \ - -DCMAKE_C_FLAGS="$CFLAGS $ASAN_FLAGS" \ - -DCMAKE_CXX_FLAGS="$CXXFLAGS $ASAN_FLAGS" \ - $AOMP_REPOS/$AOMP_FLANG_REPO_NAME/runtime/libpgmath - ${AOMP_CMAKE} $ASAN_CMAKE_OPTS \ - -DCMAKE_C_FLAGS="$CFLAGS $ASAN_FLAGS" \ - -DCMAKE_CXX_FLAGS="$CXXFLAGS $ASAN_FLAGS" \ - $AOMP_REPOS/$AOMP_FLANG_REPO_NAME/runtime/libpgmath 2>&1 - if [ $? != 0 ] ; then + echo "${AOMP_CMAKE}" "$(shquot "${ASAN_CMAKE_OPTS[@]}")" \ + -DCMAKE_C_FLAGS="\"$CFLAGS $(cmquot "${ASAN_FLAGS[@]}")\"" \ + -DCMAKE_CXX_FLAGS="\"$CXXFLAGS $(cmquot "${ASAN_FLAGS[@]}")\"" \ + "$AOMP_REPOS/$AOMP_FLANG_REPO_NAME/runtime/libpgmath" + + if ! ${AOMP_CMAKE} "${ASAN_CMAKE_OPTS[@]}" \ + -DCMAKE_C_FLAGS="$CFLAGS $(cmquot "${ASAN_FLAGS[@]}")" \ + -DCMAKE_CXX_FLAGS="$CXXFLAGS $(cmquot "${ASAN_FLAGS[@]}")" \ + "$AOMP_REPOS/$AOMP_FLANG_REPO_NAME/runtime/libpgmath" 2>&1; then echo "ERROR pgmath-asan cmake failed. Cmake flags" - echo " $ASAN_CMAKE_OPTS" + echo " $(shquot "${ASAN_CMAKE_OPTS[@]}")" exit 1 fi fi @@ -138,34 +145,34 @@ fi if [ "$SANITIZER" != 1 ]; then echo - cd $BUILD_DIR/build/pgmath + cd "$BUILD_DIR/build/pgmath" || exit echo " -----Running make ---- " - echo make -j $AOMP_JOB_THREADS - make -j $AOMP_JOB_THREADS - if [ $? != 0 ] ; then + echo make -j "$AOMP_JOB_THREADS" + + if ! make -j "$AOMP_JOB_THREADS"; then echo "ERROR make -j $AOMP_JOB_THREADS failed" exit 1 fi fi if [ "$AOMP_BUILD_SANITIZER" == 1 ]; then -echo -cd $BUILD_DIR/build/pgmath/asan -echo " -----Running make ---- " -echo make -j $AOMP_JOB_THREADS -make -j $AOMP_JOB_THREADS -if [ $? != 0 ] ; then - echo "ERROR make -j $AOMP_JOB_THREADS failed" - exit 1 -fi + echo + cd "$BUILD_DIR/build/pgmath/asan" || exit + echo " -----Running make ---- " + echo "make -j $AOMP_JOB_THREADS" + + if ! make -j "$AOMP_JOB_THREADS"; then + echo "ERROR make -j $AOMP_JOB_THREADS failed" + exit 1 + fi fi if [ "$1" == "install" ] ; then if [ "$SANITIZER" != 1 ]; then - cd $BUILD_DIR/build/pgmath + cd "$BUILD_DIR/build/pgmath" || exit echo " -----Installing to $INSTALL_FLANG ---- " - $SUDO make install - if [ $? != 0 ] ; then + + if ! $SUDO make install; then echo "ERROR make install failed " exit 1 fi @@ -173,10 +180,10 @@ if [ "$1" == "install" ] ; then echo fi if [ "$AOMP_BUILD_SANITIZER" == 1 ]; then - cd $BUILD_DIR/build/pgmath/asan + cd "$BUILD_DIR/build/pgmath/asan" || exit echo " -----Installing to $INSTALL_FLANG/lib/asan ---- " - $SUDO make install - if [ $? != 0 ] ; then + + if ! $SUDO make install; then echo "ERROR make install failed " exit 1 fi diff --git a/bin/build_project.sh b/bin/build_project.sh index c028ee66d..52c9d6e1b 100755 --- a/bin/build_project.sh +++ b/bin/build_project.sh @@ -11,9 +11,9 @@ BUILD_TYPE=${BUILD_TYPE:-Release} # --- Start standard header to set AOMP environment variables ---- -realpath=`realpath $0` -thisdir=`dirname $realpath` -. $thisdir/aomp_common_vars +realpath=$(realpath "$0") +thisdir=$(dirname "$realpath") +. "$thisdir/aomp_common_vars" # --- end standard header ---- echo "LLVM PROJECTS TO BUILD:$AOMP_PROJECTS_LIST" @@ -24,35 +24,42 @@ WEBSITE="http\:\/\/github.com\/ROCm-Developer-Tools\/aomp" # Check-openmp prep # Patch rocr ROCR_REPO_DIR=$AOMP_REPOS/$AOMP_ROCR_REPO_NAME -patchrepo $ROCR_REPO_DIR +patchrepo "$ROCR_REPO_DIR" # Patch llvm-project with ATD patch customized for amd-staging. # WARNING: This patch (ATD_ASO_full.patch) rarely applies cleanly # because of its size and constant trunk merges to amd-staging. # This is why default is 0 (OFF). REPO_DIR=$AOMP_REPOS/$AOMP_PROJECT_REPO_NAME -if [ "$AOMP_APPLY_ATD_AMD_STAGING_PATCH" == 1 ] ; then - patchrepo $REPO_DIR +if [ "$AOMP_APPLY_ATD_AMD_STAGING_PATCH" == 1 ] ; then + patchrepo "$REPO_DIR" fi # End check-openmp prep +declare -a COMPILERS +declare -a _qmathopt +declare -a _amdflangrtopt + # Enable AMD-specific Fortran runtime extensions if not skipped -_amdflangrtopt="-DFLANG_RT_INCLUDE_AMD=ON" +_amdflangrtopt=(-DFLANG_RT_INCLUDE_AMD=ON) if [ "$AOMP_SKIP_AMD_FLANGRT" == "1" ]; then - _amdflangrtopt="" + _amdflangrtopt=() fi # Enable support for real(kind=16) via libquadmath -_qmathopt="-DFLANG_RUNTIME_F128_MATH_LIB=libquadmath" +_qmathopt=(-DFLANG_RUNTIME_F128_MATH_LIB=libquadmath) + if [ "$AOMP_PROC" == "ppc64le" ] ; then - COMPILERS="-DCMAKE_C_COMPILER=/usr/bin/gcc-7 -DCMAKE_CXX_COMPILER=/usr/bin/g++-7" + COMPILERS=(-DCMAKE_C_COMPILER=/usr/bin/gcc-7 + -DCMAKE_CXX_COMPILER=/usr/bin/g++-7) TARGETS_TO_BUILD="AMDGPU;${AOMP_NVPTX_TARGET}PowerPC" else - COMPILERS="-DCMAKE_C_COMPILER=$AOMP_CC_COMPILER -DCMAKE_CXX_COMPILER=$AOMP_CXX_COMPILER" + COMPILERS=(-DCMAKE_C_COMPILER="$AOMP_CC_COMPILER" + -DCMAKE_CXX_COMPILER="$AOMP_CXX_COMPILER") if [ "$AOMP_PROC" == "aarch64" ] ; then TARGETS_TO_BUILD="AMDGPU;${AOMP_NVPTX_TARGET}AArch64" - _qmathopt="" + _qmathopt=() else TARGETS_TO_BUILD="AMDGPU;${AOMP_NVPTX_TARGET}X86" fi @@ -61,20 +68,28 @@ fi # When building from release source (no git), turn off test items that are not distributed # also ubuntu 16.04 only has python 3.5 and lit testing needs 3.6 minimum, so turn off # testing with ubuntu 16.04 which goes EOL in April 2021. -PN=$(cat /etc/os-release | grep "^PRETTY_NAME=" | cut -d= -f2) -DO_TESTS=${DO_TESTS:-"-DLLVM_BUILD_TESTS=ON -DLLVM_INCLUDE_TESTS=ON -DCLANG_INCLUDE_TESTS=ON"} +declare -a DO_TESTS_OPTS +if [ -z ${DO_TESTS+x} ]; then + DO_TESTS_OPTS=(-DLLVM_BUILD_TESTS=ON + -DLLVM_INCLUDE_TESTS=ON + -DCLANG_INCLUDE_TESTS=ON) +else + # Incoming DO_TESTS is a string with space-separated arguments. Convert it + # to an array. + IFS=" " read -r -a DO_TESTS_OPTS <<< "$DO_TESTS" +fi #-DCOMPILER_RT_INCLUDE_TESTS=OFF" -if [ $AOMP_STANDALONE_BUILD == 1 ] ; then +if [ "$AOMP_STANDALONE_BUILD" == 1 ] ; then standalone_word="_STANDALONE" else standalone_word="" fi if [ "$AOMP_USE_NINJA" == 0 ] ; then - AOMP_SET_NINJA_GEN="" + AOMP_SET_NINJA_GEN=() else - AOMP_SET_NINJA_GEN="-G Ninja" + AOMP_SET_NINJA_GEN=(-G Ninja) fi if [ "$AOMP_LEGACY_OPENMP" != 0 ]; then @@ -85,103 +100,97 @@ fi rocmdevicelib_loc_new=lib/llvm/lib/clang/$AOMP_MAJOR_VERSION/lib/amdgcn -GFXSEMICOLONS=`echo $GFXLIST | tr ' ' ';' ` -MYCMAKEOPTS="-DCMAKE_BUILD_TYPE=$BUILD_TYPE - -DCMAKE_INSTALL_PREFIX=$INSTALL_PROJECT - -DLLVM_ENABLE_ASSERTIONS=ON - -DLLVM_TARGETS_TO_BUILD=$TARGETS_TO_BUILD - $COMPILERS - -DLLVM_VERSION_SUFFIX=_AOMP${standalone_word}_$AOMP_VERSION_STRING - -DCLANG_VENDOR=AOMP${standalone_word}_$AOMP_VERSION_STRING - -DCLANG_DEFAULT_PIE_ON_LINUX=0 - -DLLVM_ENABLE_ZLIB=ON - -DBUG_REPORT_URL='https://github.com/ROCm-Developer-Tools/aomp' - -DLLVM_ENABLE_BINDINGS=OFF - -DLLVM_INCLUDE_BENCHMARKS=OFF - $DO_TESTS $AOMP_ORIGIN_RPATH - -DCLANG_DEFAULT_LINKER=lld - $AOMP_SET_NINJA_GEN - $_qmathopt - $_amdflangrtopt - -DLIBOMPTARGET_BUILD_DEVICE_FORTRT=ON - -DLLVM_BUILD_LLVM_DYLIB=ON - -DLLVM_LINK_LLVM_DYLIB=ON - -DCLANG_LINK_CLANG_DYLIB=ON - -DLIBOMPTARGET_EXTERNAL_PROJECT_HSA_PATH=$AOMP_REPOS/$AOMP_ROCR_REPO_NAME - -DOFFLOAD_EXTERNAL_PROJECT_UNIFIED_ROCR=On - -DLIBOMPTARGET_EXTERNAL_PROJECT_ROCM_DEVICE_LIBS_PATH=$AOMP_REPOS/$AOMP_PROJECT_REPO_NAME/amd/device-libs - -DLLVM_EXTERNAL_PROJECTS=SPIRV_TRANSLATOR - -DLLVM_EXTERNAL_SPIRV_TRANSLATOR_SOURCE_DIR=$AOMP_REPOS/SPIRV-LLVM-Translator - -DROCM_DEVICE_LIBS_INSTALL_PREFIX_PATH=$AOMP_INSTALL_DIR - -DROCM_DEVICE_LIBS_BITCODE_INSTALL_LOC=$rocmdevicelib_loc_new - -DROCM_LLVM_BACKWARD_COMPAT_LINK="$AOMP_INSTALL_DIR/llvm" - -DROCM_LLVM_BACKWARD_COMPAT_LINK_TARGET="./lib/llvm" - -DLIBOMP_COPY_EXPORTS=OFF - -DLIBOMPTARGET_ENABLE_DEBUG=ON - -DLIBOMPTARGET_AMDGCN_GFXLIST=$GFXSEMICOLONS - -DLIBOMP_USE_HWLOC=ON -DLIBOMP_HWLOC_INSTALL_DIR=$AOMP_SUPP/hwloc - -DOPENMP_ENABLE_LIBOMPTARGET=1 - -DLIBOMP_SHARED_LINKER_FLAGS=-Wl,--disable-new-dtags - -DLIBOMP_INSTALL_RPATH=$AOMP_ORIGIN_RPATH_LIST - -DLIBOMPTARGET_INSTALL_RPATH=$AOMP_ORIGIN_RPATH_LIST - -DLIBOMPTARGET_NO_SANITIZER_AMDGPU=1 - -DLIBOMPTARGET_BUILD_DEVICE_FORTRT=On - -DCMAKE_EXPORT_COMPILE_COMMANDS=ON" +GFXSEMICOLONS=$(echo "$GFXLIST" | tr ' ' ';') + +declare -a MYCMAKEOPTS + +MYCMAKEOPTS=(-DCMAKE_BUILD_TYPE="$BUILD_TYPE" + -DCMAKE_INSTALL_PREFIX="$INSTALL_PROJECT" + -DLLVM_ENABLE_ASSERTIONS=ON + -DLLVM_TARGETS_TO_BUILD="$TARGETS_TO_BUILD" + "${COMPILERS[@]}" + -DLLVM_VERSION_SUFFIX="_AOMP${standalone_word}_$AOMP_VERSION_STRING" + -DCLANG_VENDOR="AOMP${standalone_word}_$AOMP_VERSION_STRING" + -DCLANG_DEFAULT_PIE_ON_LINUX=0 + -DLLVM_ENABLE_ZLIB=ON + -DBUG_REPORT_URL='https://github.com/ROCm-Developer-Tools/aomp' + -DLLVM_ENABLE_BINDINGS=OFF + -DLLVM_INCLUDE_BENCHMARKS=OFF + "${DO_TESTS_OPTS[@]}" + "${AOMP_ORIGIN_RPATH[@]}" + -DCLANG_DEFAULT_LINKER=lld + "${AOMP_SET_NINJA_GEN[@]}" + "${_qmathopt[@]}" + "${_amdflangrtopt[@]}" + -DLIBOMPTARGET_BUILD_DEVICE_FORTRT=ON + -DLLVM_BUILD_LLVM_DYLIB=ON + -DLLVM_LINK_LLVM_DYLIB=ON + -DCLANG_LINK_CLANG_DYLIB=ON + -DLIBOMPTARGET_EXTERNAL_PROJECT_HSA_PATH="$AOMP_REPOS/$AOMP_ROCR_REPO_NAME" + -DOFFLOAD_EXTERNAL_PROJECT_UNIFIED_ROCR=On + -DLIBOMPTARGET_EXTERNAL_PROJECT_ROCM_DEVICE_LIBS_PATH="$AOMP_REPOS/$AOMP_PROJECT_REPO_NAME/amd/device-libs" + -DLLVM_EXTERNAL_PROJECTS=SPIRV_TRANSLATOR + -DLLVM_EXTERNAL_SPIRV_TRANSLATOR_SOURCE_DIR="$AOMP_REPOS/SPIRV-LLVM-Translator" + -DROCM_DEVICE_LIBS_INSTALL_PREFIX_PATH="$AOMP_INSTALL_DIR" + -DROCM_DEVICE_LIBS_BITCODE_INSTALL_LOC="$rocmdevicelib_loc_new" + -DROCM_LLVM_BACKWARD_COMPAT_LINK="$AOMP_INSTALL_DIR/llvm" + -DROCM_LLVM_BACKWARD_COMPAT_LINK_TARGET="./lib/llvm" + -DLIBOMP_COPY_EXPORTS=OFF + -DLIBOMPTARGET_ENABLE_DEBUG=ON + -DLIBOMPTARGET_AMDGCN_GFXLIST="$GFXSEMICOLONS" + -DLIBOMP_USE_HWLOC=ON + -DLIBOMP_HWLOC_INSTALL_DIR="$AOMP_SUPP/hwloc" + -DOPENMP_ENABLE_LIBOMPTARGET=1 + -DLIBOMP_SHARED_LINKER_FLAGS="-Wl,--disable-new-dtags" + -DLIBOMP_INSTALL_RPATH="$AOMP_ORIGIN_RPATH_LIST" + -DLIBOMPTARGET_INSTALL_RPATH="$AOMP_ORIGIN_RPATH_LIST" + -DLIBOMPTARGET_NO_SANITIZER_AMDGPU=1 + -DLIBOMPTARGET_BUILD_DEVICE_FORTRT=On + -DCMAKE_EXPORT_COMPILE_COMMANDS=ON) # -DCLANG_LINK_FLANG_LEGACY=ON # Enable amdflang, amdclang, amdclang++, amdllvm. # clang-tools-extra added to LLVM_ENABLE_PROJECTS above. -MYCMAKEOPTS="$MYCMAKEOPTS -$AOMP_CCACHE_OPTS --DLLVM_ENABLE_PROJECTS='$AOMP_PROJECTS_LIST' --DCLANG_ENABLE_AMDCLANG=ON --DLLVM_ENABLE_RUNTIMES=$LLVM_RUNTIMES --DLIBCXX_ENABLE_STATIC=ON --DLIBCXXABI_ENABLE_STATIC=ON -" +MYCMAKEOPTS=("${MYCMAKEOPTS[@]}" + "${AOMP_CCACHE_OPTS[@]}" + -DLLVM_ENABLE_PROJECTS="$AOMP_PROJECTS_LIST" + -DCLANG_ENABLE_AMDCLANG=ON + -DLLVM_ENABLE_RUNTIMES="$LLVM_RUNTIMES" + -DLIBCXX_ENABLE_STATIC=ON + -DLIBCXXABI_ENABLE_STATIC=ON) # Enable Compiler-rt Sanitizer Build if [ "$AOMP_BUILD_SANITIZER" == 1 ]; then - MYCMAKEOPTS="$MYCMAKEOPTS -DSANITIZER_AMDGPU=1 -DSANITIZER_HSA_INCLUDE_PATH=$AOMP_REPOS/$AOMP_ROCR_REPO_NAME/runtime/hsa-runtime/inc -DSANITIZER_COMGR_INCLUDE_PATH=$AOMP_REPOS/$AOMP_PROJECT_REPO_NAME/amd/comgr/include" + MYCMAKEOPTS=("${MYCMAKEOPTS[@]}" -DSANITIZER_AMDGPU=1 + -DSANITIZER_HSA_INCLUDE_PATH="$AOMP_REPOS/$AOMP_ROCR_REPO_NAME/runtime/hsa-runtime/inc" + -DSANITIZER_COMGR_INCLUDE_PATH="$AOMP_REPOS/$AOMP_PROJECT_REPO_NAME/amd/comgr/include") fi if [ "$1" == "-h" ] || [ "$1" == "help" ] || [ "$1" == "-help" ] ; then help_build_aomp fi -if [ $AOMP_STANDALONE_BUILD == 1 ] ; then - if [ ! -L $AOMP ] ; then - if [ -d $AOMP ] ; then - echo "ERROR: Directory $AOMP is a physical directory." - echo " It must be a symbolic link or not exist" - exit 1 - fi - fi -fi - -# Make sure we can update the install directory -if [ "$1" == "install" ] ; then - $SUDO mkdir -p $INSTALL_PROJECT - $SUDO touch $INSTALL_PROJECT/testfile - if [ $? != 0 ] ; then - echo "ERROR: No update access to $INSTALL_PROJECT" +if [ "$AOMP_STANDALONE_BUILD" == 1 ] ; then + if [ ! -L "$AOMP" ] && [ -d "$AOMP" ] ; then + echo "ERROR: Directory $AOMP is a physical directory." + echo " It must be a symbolic link or not exist" exit 1 fi - $SUDO rm $INSTALL_PROJECT/testfile fi +check_writable_installdir "$1" "$INSTALL_PROJECT" + # Fix the banner to print the AOMP version string. -if [ $AOMP_STANDALONE_BUILD == 1 ] ; then - cd $AOMP_REPOS/$AOMP_PROJECT_REPO_NAME - MONO_REPO_ID=`git log | grep -m1 commit | cut -d" " -f2` +if [ "$AOMP_STANDALONE_BUILD" == 1 ] ; then + cd "$AOMP_REPOS/$AOMP_PROJECT_REPO_NAME" || exit + MONO_REPO_ID=$(git log | grep -m1 commit | cut -d" " -f2) SOURCEID="Source ID:$AOMP_VERSION_STRING-$MONO_REPO_ID" TEMPCLFILE="/tmp/clfile$$.cpp" ORIGCLFILE="$AOMP_REPOS/$AOMP_PROJECT_REPO_NAME/llvm/lib/Support/CommandLine.cpp" BUILDCLFILE=$ORIGCLFILE - sed "s/LLVM (http:\/\/llvm\.org\/):/AOMP-${AOMP_VERSION_STRING} ($WEBSITE):\\\n $SOURCEID/" $ORIGCLFILE > $TEMPCLFILE - if [ $? != 0 ] ; then + if ! sed "s/LLVM (http:\/\/llvm\.org\/):/AOMP-${AOMP_VERSION_STRING} ($WEBSITE):\\\n $SOURCEID/" "$ORIGCLFILE" > "$TEMPCLFILE"; then echo "ERROR sed command to fix CommandLine.cpp failed." exit 1 fi @@ -192,45 +201,49 @@ if [ "$1" != "nocmake" ] && [ "$1" != "install" ] ; then echo echo "This is a FRESH START. ERASING any previous builds in $BUILD_DIR/build/$AOMP_PROJECT_REPO_NAME" echo "Use ""$0 nocmake"" or ""$0 install"" to avoid FRESH START." - rm -rf $BUILD_DIR/build/$AOMP_PROJECT_REPO_NAME - mkdir -p $BUILD_DIR/build/$AOMP_PROJECT_REPO_NAME + rm -rf "$BUILD_DIR/build/$AOMP_PROJECT_REPO_NAME" + mkdir -p "$BUILD_DIR/build/$AOMP_PROJECT_REPO_NAME" else - if [ ! -d $BUILD_DIR/build/$AOMP_PROJECT_REPO_NAME ] ; then + if [ ! -d "$BUILD_DIR/build/$AOMP_PROJECT_REPO_NAME" ] ; then echo "ERROR: The build directory $BUILD_DIR/build/$AOMP_PROJECT_REPO_NAME does not exist" echo " run $0 without nocmake or install options. " exit 1 fi fi -if [ $AOMP_STANDALONE_BUILD == 1 ] ; then - cd $BUILD_DIR/build/$AOMP_PROJECT_REPO_NAME - if [ -f $BUILDCLFILE ] ; then +if [ "$AOMP_STANDALONE_BUILD" == 1 ] ; then + cd "$BUILD_DIR/build/$AOMP_PROJECT_REPO_NAME" || exit + if [ -f "$BUILDCLFILE" ] ; then # only copy if there has been a change to the source. - diff $TEMPCLFILE $BUILDCLFILE >/dev/null - if [ $? != 0 ] ; then + + if ! diff "$TEMPCLFILE" "$BUILDCLFILE" >/dev/null; then echo "Updating $BUILDCLFILE with corrected $SOURCEID" - cp $TEMPCLFILE $BUILDCLFILE + cp "$TEMPCLFILE" "$BUILDCLFILE" else echo "File $BUILDCLFILE already has correct $SOURCEID" fi else echo "Updating $BUILDCLFILE with $SOURCEID" - cp $TEMPCLFILE $BUILDCLFILE + cp "$TEMPCLFILE" "$BUILDCLFILE" fi - rm $TEMPCLFILE + rm "$TEMPCLFILE" fi -cd $BUILD_DIR/build/$AOMP_PROJECT_REPO_NAME +cd "$BUILD_DIR/build/$AOMP_PROJECT_REPO_NAME" || exit if [ "$1" != "nocmake" ] && [ "$1" != "install" ] ; then echo echo " -----Running cmake ---- " - MYLITOPTS=("-DLLVM_LIT_ARGS='-vv --show-unsupported --show-xfail -j 32'") - echo ${AOMP_CMAKE} "${MYLITOPTS[@]}" $MYCMAKEOPTS $AOMP_REPOS/$AOMP_PROJECT_REPO_NAME/llvm - ${AOMP_CMAKE} "${MYLITOPTS[@]}" $MYCMAKEOPTS $AOMP_REPOS/$AOMP_PROJECT_REPO_NAME/llvm 2>&1 - if [ $? != 0 ] ; then + MYLITOPTS=(-DLLVM_LIT_ARGS='-vv --show-unsupported --show-xfail -j 32') + echo "${AOMP_CMAKE}" "$(shquot "${MYLITOPTS[@]}")" \ + "$(shquot "${MYCMAKEOPTS[@]}")" \ + "$AOMP_REPOS/$AOMP_PROJECT_REPO_NAME/llvm" + + if ! ${AOMP_CMAKE} "${MYLITOPTS[@]}" \ + "${MYCMAKEOPTS[@]}" \ + "$AOMP_REPOS/$AOMP_PROJECT_REPO_NAME/llvm" 2>&1; then echo "ERROR cmake failed. Cmake flags" - echo " $MYCMAKEOPTS" + echo " $(shquot "${MYCMAKEOPTS[@]}")" exit 1 fi fi @@ -244,59 +257,57 @@ echo " -----Running make ---- " if [ "$AOMP_LIMIT_FLANG" == "1" ] ; then # Required for building flang on memory limited systems. - echo ${AOMP_CMAKE} --build . -- -j $AOMP_JOB_THREADS clang lld compiler-rt - ${AOMP_CMAKE} --build . -- -j $AOMP_JOB_THREADS clang lld compiler-rt + echo "${AOMP_CMAKE} --build . -- -j $AOMP_JOB_THREADS clang lld compiler-rt" + ${AOMP_CMAKE} --build . -- -j "$AOMP_JOB_THREADS" clang lld compiler-rt - echo ${AOMP_CMAKE} --build . -- -j $AOMP_FLANG_THREADS flang - ${AOMP_CMAKE} --build . -- -j $AOMP_FLANG_THREADS flang + echo "${AOMP_CMAKE} --build . -- -j $AOMP_FLANG_THREADS flang" + ${AOMP_CMAKE} --build . -- -j "$AOMP_FLANG_THREADS" flang fi # Build llvm-project in one step echo "Running CMAKE in ${PWD}" -echo ${AOMP_CMAKE} --build . -j $AOMP_JOB_THREADS -${AOMP_CMAKE} --build . -j $AOMP_JOB_THREADS +echo "${AOMP_CMAKE} --build . -j $AOMP_JOB_THREADS" -if [ $? != 0 ] ; then +if ! ${AOMP_CMAKE} --build . -j "$AOMP_JOB_THREADS"; then echo "ERROR make -j $AOMP_JOB_THREADS failed" exit 1 fi if [ "$1" == "install" ] ; then echo " -----Installing to $INSTALL_PROJECT ---- " - $SUDO ${AOMP_CMAKE} --install . - if [ $? != 0 ] ; then + + if ! $SUDO "$AOMP_CMAKE" --install .; then echo "ERROR make install failed " exit 1 fi - if [ $AOMP_STANDALONE_BUILD == 1 ] ; then + if [ "$AOMP_STANDALONE_BUILD" == 1 ] ; then echo " " echo "------ Linking $INSTALL_PROJECT to $AOMP -------" - if [ -L $AOMP ] ; then - $SUDO rm $AOMP + if [ -L "$AOMP" ] ; then + $SUDO rm "$AOMP" fi - $SUDO ln -sf $AOMP_INSTALL_DIR $AOMP - + $SUDO ln -sf "$AOMP_INSTALL_DIR" "$AOMP" fi # add executables forgot by make install but needed for testing - $SUDO cp -p $BUILD_DIR/build/$AOMP_PROJECT_REPO_NAME/bin/llvm-lit $LLVM_INSTALL_LOC/bin/llvm-lit + $SUDO cp -p "$BUILD_DIR/build/$AOMP_PROJECT_REPO_NAME/bin/llvm-lit" "$LLVM_INSTALL_LOC/bin/llvm-lit" # update map_config and llvm_source_root paths in the copied llvm-lit file - SED_AOMP_REPOS=`echo $AOMP_REPOS | sed -e 's/\//\\\\\//g' ` - sed -ie "s/..\/..\/..\//$SED_AOMP_REPOS\//g" $LLVM_INSTALL_LOC/bin/llvm-lit - - $SUDO cp -p $BUILD_DIR/build/$AOMP_PROJECT_REPO_NAME/bin/FileCheck $LLVM_INSTALL_LOC/bin/FileCheck - $SUDO cp -p $BUILD_DIR/build/$AOMP_PROJECT_REPO_NAME/bin/count $LLVM_INSTALL_LOC/bin/count - $SUDO cp -p $BUILD_DIR/build/$AOMP_PROJECT_REPO_NAME/bin/not $LLVM_INSTALL_LOC/bin/not - $SUDO cp -p $BUILD_DIR/build/$AOMP_PROJECT_REPO_NAME/bin/yaml-bench $LLVM_INSTALL_LOC/bin/yaml-bench - cd $AOMP_REPOS/$AOMP_PROJECT_REPO_NAME + SED_AOMP_REPOS=$(echo "$AOMP_REPOS" | sed -e 's/\//\\\\\//g') + sed -ie "s/..\/..\/..\//$SED_AOMP_REPOS\//g" "$LLVM_INSTALL_LOC/bin/llvm-lit" + + $SUDO cp -p "$BUILD_DIR/build/$AOMP_PROJECT_REPO_NAME/bin/FileCheck" "$LLVM_INSTALL_LOC/bin/FileCheck" + $SUDO cp -p "$BUILD_DIR/build/$AOMP_PROJECT_REPO_NAME/bin/count" "$LLVM_INSTALL_LOC/bin/count" + $SUDO cp -p "$BUILD_DIR/build/$AOMP_PROJECT_REPO_NAME/bin/not" "$LLVM_INSTALL_LOC/bin/not" + $SUDO cp -p "$BUILD_DIR/build/$AOMP_PROJECT_REPO_NAME/bin/yaml-bench" "$LLVM_INSTALL_LOC/bin/yaml-bench" + cd "$AOMP_REPOS/$AOMP_PROJECT_REPO_NAME" || exit git checkout llvm/lib/Support/CommandLine.cpp echo echo "SUCCESSFUL INSTALL to $INSTALL_PROJECT with link to $AOMP" echo if [ "$AOMP_APPLY_ATD_AMD_STAGING_PATCH" == 1 ] ; then - removepatch $REPO_DIR + removepatch "$REPO_DIR" fi - removepatch $ROCR_REPO_DIR + removepatch "$ROCR_REPO_DIR" amd_compiler_symlinks=("amdclang" "amdclang++" "amdclang-cl" "amdclang-cpp" "amdflang" "amdlld") amd_compiler_cfg=("clang" "clang++" "clang-cpp" "clang-${AOMP_MAJOR_VERSION}" "clang-cl" "flang") diff --git a/bin/build_qmcpack.sh b/bin/build_qmcpack.sh index eeb776fc7..188913bde 100755 --- a/bin/build_qmcpack.sh +++ b/bin/build_qmcpack.sh @@ -23,9 +23,9 @@ # # --- Start standard header to set AOMP environment variables ---- -realpath=`realpath $0` -thisdir=`dirname $realpath` -. $thisdir/aomp_common_vars +realpath=$(realpath "$0") +thisdir=$(dirname "$realpath") +. "$thisdir/aomp_common_vars" # --- end standard header ---- AOMP=${AOMP:-~/usr/lib/aomp} @@ -41,7 +41,7 @@ if [ "$USE_MODULES" == "1" ] && [ -e /etc/profile.d/modules.sh ] ; then module load hdf5/1.10.1 module load openblas if [ "$ROCM_VER" != "none" ]; then - module load $ROCM_VER + module load "$ROCM_VER" fi BOOST_ROOT=${BOOST_ROOT:-/cm/shared/opt/boost/1.72.0} FFTW_HOME=${FFTW_HOME:-/cm/shared/apps/fftw/openmpi/gcc/64/3.3.8} @@ -66,17 +66,12 @@ QMCPACK_REPO=${QMCPACK_REPO:-$AOMP_REPOS_TEST/$AOMP_QMCPACK_REPO_NAME} export PATH=$OPENMPI_INSTALL/bin:$AOMP/bin:$PATH export LD_LIBRARY_PATH=$OPENMPI_INSTALL/lib:$LD_LIBRARY_PATH -if [ "$mygpu" == "unknown" ] ; then - echo "ERROR: No gpu found" - exit 1 -fi - -pushd $QMCPACK_REPO +pushd "$QMCPACK_REPO" || exit if [ "$1" != "nocmake" ] && [ "$1" != "install" ] ; then - if [ -d $build_folder ] ; then + if [ -d "$build_folder" ] ; then echo "FRESH START" - echo rm -rf $build_folder - rm -rf $build_folder + echo rm -rf "$build_folder" + rm -rf "$build_folder" fi fi @@ -85,21 +80,21 @@ clang --version mpicc --version echo Environment Variables: -echo AOMP: $AOMP -echo AOMP_GPU: $AOMP_GPU -echo OPENMPI_INSTALL: $OPENMPI_INSTALL -echo BOOST_ROOT: $BOOST_ROOT -echo FFTW_HOME: $FFTW_HOME -echo QMCPACK_REPO: $QMCPACK_REPO -echo HDF5_ROOT: $HDF5_ROOT +echo "AOMP: $AOMP" +echo "AOMP_GPU: $AOMP_GPU" +echo "OPENMPI_INSTALL: $OPENMPI_INSTALL" +echo "BOOST_ROOT: $BOOST_ROOT" +echo "FFTW_HOME: $FFTW_HOME" +echo "QMCPACK_REPO: $QMCPACK_REPO" +echo "HDF5_ROOT: $HDF5_ROOT" echo echo "###################################" -echo Building AOMP_offload_real_MP_$AOMP_GPU +echo "Building AOMP_offload_real_MP_$AOMP_GPU" echo "###################################" -mkdir -p $build_folder -pushd $build_folder +mkdir -p "$build_folder" +pushd "$build_folder" || exit complex="-DQMC_COMPLEX=" mixed="-DQMC_MIXED_PRECISION=" @@ -140,27 +135,34 @@ while [ "$1" != "" ]; do case $1 in -c | --complex | complex) - echo $1 turns QMC_COMPLEX=ON; - opts_array[$complex]=ON ;; + echo "$1 turns QMC_COMPLEX=ON" + opts_array[$complex]=ON + ;; -m | --mixed | mixed) - echo $1 turns QMC_MIXED_PRECISION=ON; - opts_array[$mixed]=ON ;; + echo "$1 turns QMC_MIXED_PRECISION=ON" + opts_array[$mixed]=ON + ;; -mpi | --mpi | mpi) - echo $1 turns QMC_MPI=ON; - opts_array[$mpi]=ON; - mpi=1; - opts_array[$mpicc]=$OPENMPI_INSTALL/bin/mpicc; - opts_array[$mpicxx]=$OPENMPI_INSTALL/bin/mpicxx ;; + echo "$1 turns QMC_MPI=ON" + opts_array[$mpi]=ON + mpi=1 + opts_array[$mpicc]=$OPENMPI_INSTALL/bin/mpicc + opts_array[$mpicxx]=$OPENMPI_INSTALL/bin/mpicxx + ;; *) - echo $1 option not recognized ; exit 1 ;; + echo "$1 option not recognized" + exit 1 + ;; esac shift 1 done +declare -a custom_opts=() + # Populate key/value into acceptable cmake option for option in "${!opts_array[@]}"; do val=${opts_array[$option]} - custom_opts="$custom_opts $option$val" + custom_opts+=("$option$val") done if [[ ! -e $OPENMPI_INSTALL/bin/mpicc ]] && [ "$mpi" == "1" ]; then @@ -169,11 +171,12 @@ if [[ ! -e $OPENMPI_INSTALL/bin/mpicc ]] && [ "$mpi" == "1" ]; then fi if [ "$1" != "nocmake" ] && [ "$1" != "install" ] ; then -$AOMP_CMAKE -DOFFLOAD_ARCH=$AOMP_GPU \ --DQMC_GPU=openmp -DOFFLOAD_TARGET="amdgcn-amd-amdhsa" \ --DENABLE_TIMERS=1 \ -$custom_opts \ -.. + $AOMP_CMAKE -DOFFLOAD_ARCH="$AOMP_GPU" \ + -DQMC_GPU=openmp \ + -DOFFLOAD_TARGET="amdgcn-amd-amdhsa" \ + -DENABLE_TIMERS=1 \ + "${custom_opts[@]}" \ + .. fi if [ "$1" = "cmake" ]; then @@ -181,11 +184,11 @@ if [ "$1" = "cmake" ]; then fi echo -echo make -j$AOMP_JOB_THREADS -make -j$AOMP_JOB_THREADS +echo "make -j$AOMP_JOB_THREADS" + # Exit if build was not successful -if [ $? != 0 ]; then +if ! make -j"$AOMP_JOB_THREADS"; then echo echo ERROR: make command failed. echo @@ -197,5 +200,5 @@ echo "DONE! Build is in $build_folder. To test:" echo " cd $QMCPACK_REPO/$build_folder" echo " ctest -R deterministic" echo -popd -popd +popd || exit +popd || exit diff --git a/bin/build_rocdbgapi.sh b/bin/build_rocdbgapi.sh index 5f81c9836..08ade0f1f 100755 --- a/bin/build_rocdbgapi.sh +++ b/bin/build_rocdbgapi.sh @@ -4,9 +4,9 @@ # # --- Start standard header to set AOMP environment variables ---- -realpath=`realpath $0` -thisdir=`dirname $realpath` -. $thisdir/aomp_common_vars +realpath=$(realpath "$0") +thisdir=$(dirname "$realpath") +. "$thisdir/aomp_common_vars" # --- end standard header ---- INSTALL_ROCDBGAPI=${INSTALL_ROCDBGAPI:-$AOMP_INSTALL_DIR} @@ -28,22 +28,13 @@ if [ "$1" == "-h" ] || [ "$1" == "help" ] || [ "$1" == "-help" ] ; then exit fi -if [ ! -d $AOMP_REPOS/$AOMP_DBGAPI_REPO_NAME ] ; then +if [ ! -d "$AOMP_REPOS/$AOMP_DBGAPI_REPO_NAME" ] ; then echo "ERROR: Missing repository $AOMP_REPOS/$AOMP_DBGAPI_REPO_NAME" echo " Are environment variables AOMP_REPOS and AOMP_DBGAPI_REPO_NAME set correctly?" exit 1 fi -# Make sure we can update the install directory -if [ "$1" == "install" ] ; then - $SUDO mkdir -p $INSTALL_ROCDBGAPI - $SUDO touch $INSTALL_ROCDBGAPI/testfile - if [ $? != 0 ] ; then - echo "ERROR: No update access to $INSTALL_ROCDBGAPI" - exit 1 - fi - $SUDO rm $INSTALL_ROCDBGAPI/testfile -fi +check_writable_installdir "$1" "$INSTALL_ROCDBGAPI" API_NAME=rocm-dbgapi PROJ_NAME=$API_NAME @@ -55,33 +46,36 @@ if [ "$1" != "nocmake" ] && [ "$1" != "install" ] ; then echo "This is a FRESH START. ERASING any previous builds in $BUILD_AOMP/build_rocdbgapi" echo "Use ""$0 nocmake"" or ""$0 install"" to avoid FRESH START." - BUILDTYPE="Release" - echo rm -rf $BUILD_AOMP/build/rocdbgapi - rm -rf $BUILD_AOMP/build/rocdbgapi + BUILD_TYPE="Release" + echo rm -rf "$BUILD_AOMP/build/rocdbgapi" + rm -rf "$BUILD_AOMP/build/rocdbgapi" _cxx_flags="-DCMAKE_CXX_FLAGS=-I$AOMP_INSTALL_DIR/include/amd_comgr" if [ -d "/usr/include/c++/5/experimental" ] ; then - _loc=`which gcc` + _loc=$(which gcc) if [ "$_loc" != "" ] ; then - _gccver=`$_loc --version | grep gcc | cut -d")" -f2 | cut -d"." -f1` - if [ "$_gccver" == "5" ] ; then + _gccver=$($_loc --version | grep gcc | cut -d")" -f2 | cut -d"." -f1) + if [ "$_gccver" == "5" ] ; then _cxx_flags+="\;-I/usr/include/c++/5/experimental" fi fi fi - MYCMAKEOPTS="-DCMAKE_BUILD_TYPE=$BUILD_TYPE \ - -DCMAKE_INSTALL_LIBDIR=lib \ - -DCMAKE_INSTALL_PREFIX=$INSTALL_ROCDBGAPI \ - -DCMAKE_PREFIX_PATH=$AOMP_INSTALL_DIR;$INSTALL_ROCDBGAPI/include \ - $_cxx_flags \ - $AOMP_ORIGIN_RPATH" - mkdir -p $BUILD_AOMP/build/rocdbgapi - cd $BUILD_AOMP/build/rocdbgapi + declare -a MYCMAKEOPTS + MYCMAKEOPTS=(-DCMAKE_BUILD_TYPE="$BUILD_TYPE" + -DCMAKE_INSTALL_LIBDIR=lib + -DCMAKE_INSTALL_PREFIX="$INSTALL_ROCDBGAPI" + -DCMAKE_PREFIX_PATH="$AOMP_INSTALL_DIR;$INSTALL_ROCDBGAPI/include" + "$_cxx_flags" + "${AOMP_ORIGIN_RPATH[@]}") + mkdir -p "$BUILD_AOMP/build/rocdbgapi" + cd "$BUILD_AOMP/build/rocdbgapi" || exit echo " -----Running rocdbgapi cmake ---- " - echo ${AOMP_CMAKE} $MYCMAKEOPTS $AOMP_REPOS/$AOMP_DBGAPI_REPO_NAME - ${AOMP_CMAKE} $MYCMAKEOPTS $AOMP_REPOS/$AOMP_DBGAPI_REPO_NAME - if [ $? != 0 ] ; then + echo "${AOMP_CMAKE}" "$(shquot "${MYCMAKEOPTS[@]}")" \ + "$AOMP_REPOS/$AOMP_DBGAPI_REPO_NAME" + + if ! ${AOMP_CMAKE} "${MYCMAKEOPTS[@]}" \ + "$AOMP_REPOS/$AOMP_DBGAPI_REPO_NAME"; then echo "ERROR rocdbgapi cmake failed. cmake flags" - echo " $MYCMAKEOPTS" + echo " $(shquot "${MYCMAKEOPTS[@]}")" exit 1 fi fi @@ -90,12 +84,12 @@ if [ "$1" = "cmake" ]; then exit 0 fi -cd $BUILD_AOMP/build/rocdbgapi +cd "$BUILD_AOMP/build/rocdbgapi" || exit echo echo " -----Running make for rocdbgapi ---- " -echo make -j $AOMP_JOB_THREADS -make -j $AOMP_JOB_THREADS -if [ $? != 0 ] ; then +echo "make -j $AOMP_JOB_THREADS" + +if ! make -j "$AOMP_JOB_THREADS"; then echo " " echo "ERROR: make -j $AOMP_JOB_THREADS FAILED" echo "To restart:" @@ -104,26 +98,26 @@ if [ $? != 0 ] ; then exit 1 fi -doxygen=`which doxygen` -if [ ! -z $doxygen ] ; then +doxygen=$(which doxygen) +if [ -n "$doxygen" ] ; then # the ROCdbgapi CMakeLists.txt will prepare docs install if doxygen found. # However, the make doc has issues. But if you dont make doc, the install # fails. This 'make doc' will do enough so install does not fail. - echo make -j $AOMP_JOB_THREADS doc - make -j $AOMP_JOB_THREADS doc 2>/dev/null >/dev/null + echo "make -j $AOMP_JOB_THREADS doc" + make -j "$AOMP_JOB_THREADS" doc 2>/dev/null >/dev/null fi # ----------- Install only if asked ---------------------------- if [ "$1" == "install" ] ; then - cd $BUILD_AOMP/build/rocdbgapi - echo " -----Installing to $INSTALL_ROCDBGAPI/lib ----- " - echo $SUDO make install - $SUDO make install - if [ $? != 0 ] ; then - echo "ERROR make install failed " - exit 1 - fi - echo + cd "$BUILD_AOMP/build/rocdbgapi" || exit + echo " -----Installing to $INSTALL_ROCDBGAPI/lib ----- " + echo "$SUDO make install " + + if ! $SUDO make install; then + echo "ERROR make install failed " + exit 1 + fi + echo else echo echo "SUCCESSFUL BUILD, please run: $0 install" diff --git a/bin/build_rocgdb.sh b/bin/build_rocgdb.sh index 942409a91..3cebec3c3 100755 --- a/bin/build_rocgdb.sh +++ b/bin/build_rocgdb.sh @@ -7,9 +7,9 @@ # # --- Start standard header to set AOMP environment variables ---- -realpath=`realpath $0` -thisdir=`dirname $realpath` -. $thisdir/aomp_common_vars +realpath=$(realpath "$0") +thisdir=$(dirname "$realpath") +. "$thisdir/aomp_common_vars" # --- end standard header ---- # Point to the right python3.6 on Red Hat 7.6 @@ -34,51 +34,48 @@ if [ "$1" == "-h" ] || [ "$1" == "help" ] || [ "$1" == "-help" ] ; then exit fi -if [ ! -d $AOMP_REPOS/$AOMP_GDB_REPO_NAME ] ; then +if [ ! -d "$AOMP_REPOS/$AOMP_GDB_REPO_NAME" ] ; then echo "ERROR: Missing repository $AOMP_REPOS/$AOMP_GDB_REPO_NAME" echo " Are environment variables AOMP_REPOS and AOMP_GDB_REPO_NAME set correctly?" exit 1 fi -# Make sure we can update the install directory -if [ "$1" == "install" ] ; then - $SUDO mkdir -p $AOMP_INSTALL_DIR - $SUDO touch $AOMP_INSTALL_DIR/testfile - if [ $? != 0 ] ; then - echo "ERROR: No update access to $AOMP_INSTALL_DIR" - exit 1 - fi - $SUDO rm $AOMP_INSTALL_DIR/testfile -fi +check_writable_installdir "$1" "$AOMP_INSTALL_DIR" BUG_URL="https://github.com/ROCm-Developer-Tools/ROCgdb/issues" export CXXFLAGS_FOR_BUILD="-O2" export CFLAGS_FOR_BUILD="-O2" -#patchrepo $AOMP_REPOS/$AOMP_GDB_REPO_NAME +#patchrepo "$AOMP_REPOS/$AOMP_GDB_REPO_NAME" if [ "$1" != "noconfigure" ] && [ "$1" != "install" ] ; then echo " " echo "This is a FRESH START. ERASING any previous builds in $BUILD_AOMP/build_rocgdb" echo "Use ""$0 noconfigure"" or ""$0 install"" to avoid FRESH START." - BUILDTYPE="Release" - echo rm -rf $BUILD_AOMP/build/rocgdb - rm -rf $BUILD_AOMP/build/rocgdb - MYCONFIGOPTS="--prefix=$AOMP_INSTALL_DIR --srcdir=$AOMP_REPOS/$AOMP_GDB_REPO_NAME --program-prefix=roc \ - --with-bugurl="$BUG_URL" --with-pkgversion="${AOMP_COMPILER_NAME}_${AOMP_VERSION_STRING}" \ - --with-gdb-datadir="\${prefix}/share/rocgdb" \ - --enable-64-bit-bfd --enable-targets="x86_64-linux-gnu,amdgcn-amd-amdhsa" \ - --disable-ld --disable-gas --disable-gdbserver --disable-sim --enable-tui \ - --disable-gdbtk --disable-shared \ - --disable-gdbtk --disable-gprofng --disable-shared --with-expat \ - --with-system-zlib --without-guile --with-babeltrace --with-lzma \ - --with-python=python3 --with-rocm-dbgapi=$AOMP_INSTALL_DIR PKG_CONFIG_PATH=$AOMP_INSTALL_DIR/share/pkgconfig" + echo "rm -rf $BUILD_AOMP/build/rocgdb" + rm -rf "$BUILD_AOMP/build/rocgdb" + declare -a MYCONFIGOPTS + MYCONFIGOPTS=(--prefix="$AOMP_INSTALL_DIR" + --srcdir="$AOMP_REPOS/$AOMP_GDB_REPO_NAME" + --program-prefix=roc + --with-bugurl="$BUG_URL" + --with-pkgversion="${AOMP_COMPILER_NAME}_${AOMP_VERSION_STRING}" + --with-gdb-datadir="\${prefix}/share/rocgdb" + --enable-64-bit-bfd + --enable-targets="x86_64-linux-gnu,amdgcn-amd-amdhsa" + --disable-ld --disable-gas --disable-gdbserver --disable-sim + --enable-tui --disable-gdbtk --disable-shared --disable-gdbtk + --disable-gprofng --disable-shared --with-expat + --with-system-zlib --without-guile --with-babeltrace + --with-lzma --with-python=python3 + --with-rocm-dbgapi="$AOMP_INSTALL_DIR" + PKG_CONFIG_PATH="$AOMP_INSTALL_DIR/share/pkgconfig") - mkdir -p $BUILD_AOMP/build/rocgdb + mkdir -p "$BUILD_AOMP/build/rocgdb" export LDFLAGS="-Wl,-rpath=$AOMP_INSTALL_DIR/lib" - cd $BUILD_AOMP/build/rocgdb + cd "$BUILD_AOMP/build/rocgdb" || exit echo " -----Running gdb configure ---- " - echo "$AOMP_REPOS/$AOMP_GDB_REPO_NAME/configure $MYCONFIGOPTS" - $AOMP_REPOS/$AOMP_GDB_REPO_NAME/configure $MYCONFIGOPTS - if [ $? != 0 ] ; then + echo "$AOMP_REPOS/$AOMP_GDB_REPO_NAME/configure $(shquot "${MYCONFIGOPTS[@]}")" + + if ! "$AOMP_REPOS/$AOMP_GDB_REPO_NAME"/configure "${MYCONFIGOPTS[@]}"; then echo "ERROR gdb configure failed." exit 1 fi @@ -88,14 +85,14 @@ if [ "$1" = "configure" ]; then exit 0 fi -cd $BUILD_AOMP/build/rocgdb +cd "$BUILD_AOMP/build/rocgdb" || exit echo echo " -----Running make for gdb ---- " #echo make -j $AOMP_JOB_THREADS all-gdb #make -j $AOMP_JOB_THREADS all-gdb -echo make -j $AOMP_JOB_THREADS -make -j $AOMP_JOB_THREADS -if [ $? != 0 ] ; then +echo "make -j $AOMP_JOB_THREADS" + +if ! make -j "$AOMP_JOB_THREADS"; then echo " " echo "ERROR: make -j $AOMP_JOB_THREADS FAILED" echo "To restart:" @@ -114,15 +111,15 @@ fi # ----------- Install only if asked ---------------------------- if [ "$1" == "install" ] ; then - cd $BUILD_AOMP/build/rocgdb + cd "$BUILD_AOMP/build/rocgdb" || exit echo " -----Installing to $AOMP_INSTALL_DIR ----- " - echo $SUDO make install-info-gdb + echo "$SUDO make install-info-gdb" $SUDO make install-info-gdb - echo $SUDO make install-strip-gdb - $SUDO make install-strip-gdb - if [ $? != 0 ] ; then + echo "$SUDO make install-strip-gdb" + + if ! $SUDO make install-strip-gdb; then echo "ERROR make install failed " exit 1 fi -# removepatch $AOMP_REPOS/$AOMP_GDB_REPO_NAME +# removepatch "$AOMP_REPOS/$AOMP_GDB_REPO_NAME" fi diff --git a/bin/build_rocm-cmake.sh b/bin/build_rocm-cmake.sh index 98d638242..98f405935 100755 --- a/bin/build_rocm-cmake.sh +++ b/bin/build_rocm-cmake.sh @@ -29,15 +29,13 @@ # SOFTWARE. # --- Start standard header to set AOMP environment variables ---- -realpath=`realpath $0` -thisdir=`dirname $realpath` -. $thisdir/aomp_common_vars +realpath=$(realpath "$0") +thisdir=$(dirname "$realpath") +. "$thisdir/aomp_common_vars" # --- end standard header ---- BUILD_DIR=${BUILD_AOMP} -BUILDTYPE="Release" - if [ "$1" == "-h" ] || [ "$1" == "help" ] || [ "$1" == "-help" ] ; then echo " " echo "Example commands and actions: " @@ -47,43 +45,38 @@ if [ "$1" == "-h" ] || [ "$1" == "help" ] || [ "$1" == "-help" ] ; then exit fi -echo checking for $AOMP_REPOS/$AOMP_ROCMCMAKE_REPO_NAME -if [ ! -d $AOMP_REPOS/$AOMP_ROCMCMAKE_REPO_NAME ] ; then +echo "checking for $AOMP_REPOS/$AOMP_ROCMCMAKE_REPO_NAME" +if [ ! -d "$AOMP_REPOS/$AOMP_ROCMCMAKE_REPO_NAME" ] ; then echo "ERROR: Missing repository $AOMP_REPOS/$AOMP_ROCMCMAKE_REPO_NAME" exit 1 fi -# Make sure we can update the install directory -if [ "$1" == "install" ] ; then - $SUDO mkdir -p $AOMP_INSTALL_DIR - $SUDO touch $AOMP_INSTALL_DIR/testfile - if [ $? != 0 ] ; then - echo "ERROR: No update access to $AOMP_INSTALL_DIR" - exit 1 - fi - $SUDO rm $AOMP_INSTALL_DIR/testfile -fi +check_writable_installdir "$1" "$AOMP_INSTALL_DIR" if [ "$1" != "nocmake" ] && [ "$1" != "install" ] ; then if [ -d "$BUILD_DIR/build/rocm-cmake" ] ; then echo echo "FRESH START , CLEANING UP FROM PREVIOUS BUILD" - echo rm -rf $BUILD_DIR/build/rocm-cmake - rm -rf $BUILD_DIR/build/rocm-cmake + echo rm -rf "$BUILD_DIR/build/rocm-cmake" + rm -rf "$BUILD_DIR/build/rocm-cmake" fi - export CMAKE_PREFIX_PATH="""$AOMP_INSTALL_DIR""" - MYCMAKEOPTS="-DCMAKE_INSTALL_PREFIX=$AOMP_INSTALL_DIR" + declare -a MYCMAKEOPTS + + export CMAKE_PREFIX_PATH="$AOMP_INSTALL_DIR" + MYCMAKEOPTS=(-DCMAKE_INSTALL_PREFIX="$AOMP_INSTALL_DIR") - mkdir -p $BUILD_DIR/build/rocm-cmake - cd $BUILD_DIR/build/rocm-cmake + mkdir -p "$BUILD_DIR/build/rocm-cmake" + cd "$BUILD_DIR/build/rocm-cmake" || exit echo echo " -----Running rocm-cmake cmake ---- " - echo ${AOMP_CMAKE} $MYCMAKEOPTS $AOMP_REPOS/$AOMP_ROCMCMAKE_REPO_NAME - ${AOMP_CMAKE} $MYCMAKEOPTS $AOMP_REPOS/$AOMP_ROCMCMAKE_REPO_NAME - if [ $? != 0 ] ; then + echo "${AOMP_CMAKE}" "$(shquot "${MYCMAKEOPTS[@]}")" \ + "$AOMP_REPOS/$AOMP_ROCMCMAKE_REPO_NAME" + + if ! ${AOMP_CMAKE} "${MYCMAKEOPTS[@]}" \ + "$AOMP_REPOS/$AOMP_ROCMCMAKE_REPO_NAME"; then echo "ERROR rocm-cmake cmake failed. Cmake flags" - echo " $MYCMAKEOPTS" + echo " $(shquot "${MYCMAKEOPTS[@]}")" exit 1 fi fi @@ -92,17 +85,17 @@ if [ "$1" = "cmake" ]; then exit 0 fi -cd $BUILD_DIR/build/rocm-cmake +cd "$BUILD_DIR/build/rocm-cmake" || exit # ----------- no make for this component # ----------- Install only if asked ---------------------------- if [ "$1" == "install" ] ; then - cd $BUILD_DIR/build/rocm-cmake + cd "$BUILD_DIR/build/rocm-cmake" || exit echo echo " -----Installing to $AOMP_INSTALL_DIR ----- " - $SUDO make install - if [ $? != 0 ] ; then + + if ! $SUDO make install; then echo "ERROR make install failed " exit 1 fi diff --git a/bin/build_rocm_smi_lib.sh b/bin/build_rocm_smi_lib.sh index 6ff9df710..b074713b7 100755 --- a/bin/build_rocm_smi_lib.sh +++ b/bin/build_rocm_smi_lib.sh @@ -29,9 +29,9 @@ # SOFTWARE. # --- Start standard header to set AOMP environment variables ---- -realpath=`realpath $0` -thisdir=`dirname $realpath` -. $thisdir/aomp_common_vars +realpath=$(realpath "$0") +thisdir=$(dirname "$realpath") +. "$thisdir/aomp_common_vars" # --- end standard header ---- RSMILIB_REPO_DIR=$AOMP_REPOS/rocm_smi_lib @@ -50,12 +50,12 @@ if [ "$1" == "-h" ] || [ "$1" == "help" ] || [ "$1" == "-help" ] ; then exit fi -if [ ! -d $RSMILIB_REPO_DIR ] ; then +if [ ! -d "$RSMILIB_REPO_DIR" ] ; then echo "ERROR: Missing repository $RSMILIB_REPO_DIR/" exit 1 fi -if [ ! -f $LLVM_INSTALL_LOC/bin/clang ] ; then +if [ ! -f "$LLVM_INSTALL_LOC/bin/clang" ] ; then echo "ERROR: Missing file $AOMP/bin/clang" echo " Build the AOMP llvm compiler in $AOMP first" echo " This is needed to build the device libraries" @@ -63,38 +63,35 @@ if [ ! -f $LLVM_INSTALL_LOC/bin/clang ] ; then exit 1 fi -# Make sure we can update the install directory -if [ "$1" == "install" ] ; then - $SUDO mkdir -p $AOMP_INSTALL_DIR - $SUDO touch $AOMP_INSTALL_DIR/testfile - if [ $? != 0 ] ; then - echo "ERROR: No update access to $AOMP_INSTALL_DIR" - exit 1 - fi - $SUDO rm $AOMP_INSTALL_DIR/testfile -fi +check_writable_installdir "$1" "$AOMP_INSTALL_DIR" -patchrepo $AOMP_REPOS/rocm_smi_lib +patchrepo "$AOMP_REPOS/rocm_smi_lib" if [ "$1" != "nocmake" ] && [ "$1" != "install" ] ; then if [ -d "$BUILD_DIR/build/rocm_smi_lib" ] ; then echo echo "FRESH START , CLEANING UP FROM PREVIOUS BUILD" - echo rm -rf $BUILD_DIR/build/rocm_smi_lib - rm -rf $BUILD_DIR/build/rocm_smi_lib + echo "rm -rf $BUILD_DIR/build/rocm_smi_lib" + rm -rf "$BUILD_DIR/build/rocm_smi_lib" fi - MYCMAKEOPTS="$AOMP_ORIGIN_RPATH -DCMAKE_BUILD_TYPE=$BUILDTYPE -DCMAKE_INSTALL_PREFIX=$AOMP_INSTALL_DIR -DCMAKE_BUILD_WITH_INSTALL_RPATH=ON -DCMAKE_INSTALL_RPATH='\$ORIGIN/../lib' -DCMAKE_EXE_LINKER_FLAGS='-Wl,--disable-new-dtags'" + declare -a MYCMAKEOPTS + + MYCMAKEOPTS=("${AOMP_ORIGIN_RPATH[@]}" -DCMAKE_BUILD_TYPE="$BUILDTYPE" + -DCMAKE_INSTALL_PREFIX="$AOMP_INSTALL_DIR" + -DCMAKE_BUILD_WITH_INSTALL_RPATH=ON + -DCMAKE_INSTALL_RPATH="\$ORIGIN/../lib" + -DCMAKE_EXE_LINKER_FLAGS='-Wl,--disable-new-dtags') - mkdir -p $BUILD_DIR/build/rocm_smi_lib - cd $BUILD_DIR/build/rocm_smi_lib + mkdir -p "$BUILD_DIR/build/rocm_smi_lib" + cd "$BUILD_DIR/build/rocm_smi_lib" || exit echo echo " -----Running rocm_smi_lib cmake ---- " - echo ${AOMP_CMAKE} $MYCMAKEOPTS $RSMILIB_REPO_DIR - ${AOMP_CMAKE} $MYCMAKEOPTS $RSMILIB_REPO_DIR - if [ $? != 0 ] ; then + echo "${AOMP_CMAKE} $(shquot "${MYCMAKEOPTS[@]}") $RSMILIB_REPO_DIR" + + if ! ${AOMP_CMAKE} "${MYCMAKEOPTS[@]}" "$RSMILIB_REPO_DIR"; then echo "ERROR rocm_smi_lib cmake failed. Cmake flags" - echo " $MYCMAKEOPTS" + echo " $(shquot "${MYCMAKEOPTS[@]}")" exit 1 fi fi @@ -103,11 +100,11 @@ if [ "$1" = "cmake" ]; then exit 0 fi -cd $BUILD_DIR/build/rocm_smi_lib +cd "$BUILD_DIR/build/rocm_smi_lib" || exit echo echo " -----Running make for rocm_smi_lib ---- " -make -j $AOMP_JOB_THREADS -if [ $? != 0 ] ; then + +if ! make -j "$AOMP_JOB_THREADS"; then echo " " echo "ERROR: make -j $AOMP_JOB_THREADS FAILED" echo "To restart:" @@ -125,13 +122,13 @@ fi # ----------- Install only if asked ---------------------------- if [ "$1" == "install" ] ; then - cd $BUILD_DIR/build/rocm_smi_lib + cd "$BUILD_DIR/build/rocm_smi_lib" || exit echo echo " -----Installing to $AOMP_INSTALL_DIR ----- " - $SUDO make install - if [ $? != 0 ] ; then + + if ! $SUDO make install; then echo "ERROR make install failed " exit 1 fi - removepatch $AOMP_REPOS/rocm_smi_lib + removepatch "$AOMP_REPOS/rocm_smi_lib" fi diff --git a/bin/build_rocminfo.sh b/bin/build_rocminfo.sh index c438afed0..0af84d537 100755 --- a/bin/build_rocminfo.sh +++ b/bin/build_rocminfo.sh @@ -29,9 +29,9 @@ # SOFTWARE. # --- Start standard header to set AOMP environment variables ---- -realpath=`realpath $0` -thisdir=`dirname $realpath` -. $thisdir/aomp_common_vars +realpath=$(realpath "$0") +thisdir=$(dirname "$realpath") +. "$thisdir/aomp_common_vars" # --- end standard header ---- RINFO_REPO_DIR=$AOMP_REPOS/$AOMP_RINFO_REPO_NAME @@ -41,7 +41,6 @@ BUILD_DIR=${BUILD_AOMP} BUILDTYPE="Release" INSTALL_RINFO=${INSTALL_RINFO:-$AOMP_INSTALL_DIR} -LLVM_BUILD=$AOMP if [ "$1" == "-h" ] || [ "$1" == "help" ] || [ "$1" == "-help" ] ; then echo " " @@ -53,12 +52,12 @@ if [ "$1" == "-h" ] || [ "$1" == "help" ] || [ "$1" == "-help" ] ; then exit fi -if [ ! -d $RINFO_REPO_DIR ] ; then +if [ ! -d "$RINFO_REPO_DIR" ] ; then echo "ERROR: Missing repository $RINFO_REPO_DIR/" exit 1 fi -if [ ! -f $LLVM_INSTALL_LOC/bin/clang ] ; then +if [ ! -f "$LLVM_INSTALL_LOC/bin/clang" ] ; then echo "ERROR: Missing file $LLVM_INSTALL_LOC/bin/clang" echo " Build the AOMP llvm compiler in $AOMP first" echo " This is needed to build the device libraries" @@ -66,38 +65,36 @@ if [ ! -f $LLVM_INSTALL_LOC/bin/clang ] ; then exit 1 fi -# Make sure we can update the install directory -if [ "$1" == "install" ] ; then - $SUDO mkdir -p $INSTALL_RINFO - $SUDO touch $INSTALL_RINFO/testfile - if [ $? != 0 ] ; then - echo "ERROR: No update access to $INSTALL_RINFO" - exit 1 - fi - $SUDO rm $INSTALL_RINFO/testfile -fi +check_writable_installdir "$1" "$INSTALL_RINFO" -patchrepo $AOMP_REPOS/$AOMP_RINFO_REPO_NAME +patchrepo "$AOMP_REPOS/$AOMP_RINFO_REPO_NAME" if [ "$1" != "nocmake" ] && [ "$1" != "install" ] ; then if [ -d "$BUILD_DIR/build/rocminfo" ] ; then echo echo "FRESH START , CLEANING UP FROM PREVIOUS BUILD" - echo rm -rf $BUILD_DIR/build/rocminfo - rm -rf $BUILD_DIR/build/rocminfo + echo "rm -rf $BUILD_DIR/build/rocminfo" + rm -rf "$BUILD_DIR/build/rocminfo" fi - MYCMAKEOPTS="$AOMP_ORIGIN_RPATH -DCMAKE_BUILD_TYPE=$BUILDTYPE -DCMAKE_INSTALL_PREFIX=$INSTALL_RINFO -DROCRTST_BLD_TYPE=$BUILDTYPE -DCMAKE_BUILD_WITH_INSTALL_RPATH=ON -DCMAKE_INSTALL_RPATH='\$ORIGIN/../lib' -DCMAKE_EXE_LINKER_FLAGS='-Wl,--disable-new-dtags'" + declare -a MYCMAKEOPTS + + MYCMAKEOPTS=("${AOMP_ORIGIN_RPATH[@]}" -DCMAKE_BUILD_TYPE="$BUILDTYPE" + -DCMAKE_INSTALL_PREFIX="$INSTALL_RINFO" + -DROCRTST_BLD_TYPE="$BUILDTYPE" + -DCMAKE_BUILD_WITH_INSTALL_RPATH=ON + -DCMAKE_INSTALL_RPATH="\$ORIGIN/../lib" + -DCMAKE_EXE_LINKER_FLAGS='-Wl,--disable-new-dtags') - mkdir -p $BUILD_DIR/build/rocminfo - cd $BUILD_DIR/build/rocminfo + mkdir -p "$BUILD_DIR/build/rocminfo" + cd "$BUILD_DIR/build/rocminfo" || exit echo echo " -----Running rocminfo cmake ---- " - echo ${AOMP_CMAKE} $MYCMAKEOPTS $RINFO_REPO_DIR - ${AOMP_CMAKE} $MYCMAKEOPTS $RINFO_REPO_DIR - if [ $? != 0 ] ; then + echo "${AOMP_CMAKE} $(shquot "${MYCMAKEOPTS[@]}") $RINFO_REPO_DIR" + + if ! ${AOMP_CMAKE} "${MYCMAKEOPTS[@]}" "$RINFO_REPO_DIR"; then echo "ERROR rocminfo cmake failed. Cmake flags" - echo " $MYCMAKEOPTS" + echo " $(shquot "${MYCMAKEOPTS[@]}")" exit 1 fi fi @@ -106,11 +103,11 @@ if [ "$1" = "cmake" ]; then exit 0 fi -cd $BUILD_DIR/build/rocminfo +cd "$BUILD_DIR/build/rocminfo" || exit echo echo " -----Running make for rocminfo ---- " -make -j $AOMP_JOB_THREADS -if [ $? != 0 ] ; then + +if ! make -j "$AOMP_JOB_THREADS"; then echo " " echo "ERROR: make -j $AOMP_JOB_THREADS FAILED" echo "To restart:" @@ -128,13 +125,13 @@ fi # ----------- Install only if asked ---------------------------- if [ "$1" == "install" ] ; then - cd $BUILD_DIR/build/rocminfo - echo - echo " -----Installing to $INSTALL_RINFO ----- " - $SUDO make install - if [ $? != 0 ] ; then - echo "ERROR make install failed " - exit 1 - fi - removepatch $AOMP_REPOS/$AOMP_RINFO_REPO_NAME + cd "$BUILD_DIR/build/rocminfo" || exit + echo + echo " -----Installing to $INSTALL_RINFO ----- " + + if ! $SUDO make install; then + echo "ERROR make install failed " + exit 1 + fi + removepatch "$AOMP_REPOS/$AOMP_RINFO_REPO_NAME" fi diff --git a/bin/build_rocprofiler-register.sh b/bin/build_rocprofiler-register.sh index de51e5366..489a9136e 100755 --- a/bin/build_rocprofiler-register.sh +++ b/bin/build_rocprofiler-register.sh @@ -4,9 +4,9 @@ # # --- Start standard header to set AOMP environment variables ---- -realpath=`realpath $0` -thisdir=`dirname $realpath` -. $thisdir/aomp_common_vars +realpath=$(realpath "$0") +thisdir=$(dirname "$realpath") +. "$thisdir/aomp_common_vars" # --- end standard header ---- INSTALL_ROCPROF_REGISTER=${INSTALL_ROCPROF_REGISTER:-$AOMP_INSTALL_DIR} @@ -29,42 +29,54 @@ if [ "$1" == "-h" ] || [ "$1" == "help" ] || [ "$1" == "-help" ] ; then exit fi -if [ ! -d $AOMP_REPOS/$AOMP_PROF_REGISTER_REPO_NAME ] ; then +if [ ! -d "$AOMP_REPOS/$AOMP_PROF_REGISTER_REPO_NAME" ] ; then echo "ERROR: Missing repository $AOMP_REPOS/$AOMP_PROF_REGISTER_REPO_NAME" echo " Are environment variables AOMP_REPOS and AOMP_PROF_REGISTER_REPO_NAME set correctly?" exit 1 fi -# Make sure we can update the install directory -if [ "$1" == "install" ] ; then - $SUDO mkdir -p $INSTALL_ROCPROF_REGISTER - $SUDO touch $INSTALL_ROCPROF_REGISTER/testfile - if [ $? != 0 ] ; then - echo "ERROR: No update access to $INSTALL_ROCPROF_REGISTER" - exit 1 - fi - $SUDO rm $INSTALL_ROCPROF_REGISTER/testfile -fi +check_writable_installdir "$1" "$INSTALL_ROCPROF_REGISTER" if [ "$1" != "nocmake" ] && [ "$1" != "install" ] ; then echo " " echo "This is a FRESH START. ERASING any previous builds in $BUILD_AOMP/$AOMP_PROF_REGISTER_REPO_NAME" echo "Use ""$0 nocmake"" or ""$0 install"" to avoid FRESH START." - echo rm -rf $BUILD_AOMP/build/$AOMP_PROF_REGISTER_REPO_NAME - rm -rf $BUILD_AOMP/build/$AOMP_PROF_REGISTER_REPO_NAME + echo "rm -rf $BUILD_AOMP/build/$AOMP_PROF_REGISTER_REPO_NAME" + rm -rf "$BUILD_AOMP/build/$AOMP_PROF_REGISTER_REPO_NAME" BUILD_TYPE="Release" export CMAKE_BUILD_TYPE=$BUILD_TYPE CMAKE_PREFIX_PATH="$ROCM_DIR/include;$ROCM_DIR/lib;$ROCM_DIR" export CMAKE_PREFIX_PATH - GFXSEMICOLONS=`echo $GFXLIST | tr ' ' ';' ` - mkdir -p $BUILD_AOMP/build/$AOMP_PROF_REGISTER_REPO_NAME - cd $BUILD_AOMP/build/$AOMP_PROF_REGISTER_REPO_NAME + mkdir -p "$BUILD_AOMP/build/$AOMP_PROF_REGISTER_REPO_NAME" + cd "$BUILD_AOMP/build/$AOMP_PROF_REGISTER_REPO_NAME" || exit echo " -----Running $AOMP_PROF_REGISTER_REPO_NAME cmake ---- " - echo ${AOMP_CMAKE} -DCMAKE_INSTALL_LIBDIR=lib -DCMAKE_BUILD_TYPE=$BUILD_TYPE -DROCM_PATH=$AOMP_INSTALL_DIR -DCMAKE_INSTALL_PREFIX=$INSTALL_ROCPROF_REGISTER -DCMAKE_PREFIX_PATH="""$CMAKE_PREFIX_PATH""" -DCMAKE_EXE_LINKER_FLAGS="-Wl,--disable-new-dtags" -DROCPROFILER_REGISTER_BUILD_TESTS=1 -DROCPROFILER_REGISTER_BUILD_SAMPLES=1 -DCMAKE_EXE_LINKER_FLAGS="-Wl,--disable-new-dtags" -DBUILD_SHARED_LIBS=ON -DENABLE_LDCONFIG=OFF -DROCPROFILER_REGISTER_BUILD_TESTS=1 -DROCPROFILER_REGISTER_BUILD_SAMPLES=1 $AOMP_ORIGIN_RPATH $AOMP_REPOS/$AOMP_PROF_REGISTER_REPO_NAME - ${AOMP_CMAKE} -DCMAKE_INSTALL_LIBDIR=lib -DCMAKE_BUILD_TYPE=$BUILD_TYPE -DROCM_PATH=$AOMP_INSTALL_DIR -DCMAKE_INSTALL_PREFIX=$INSTALL_ROCPROF_REGISTER -DCMAKE_PREFIX_PATH="""$CMAKE_PREFIX_PATH""" $AOMP_ORIGIN_RPATH -DCMAKE_EXE_LINKER_FLAGS="-Wl,--disable-new-dtags" -DBUILD_SHARED_LIBS=ON -DENABLE_LDCONFIG=OFF -DROCPROFILER_REGISTER_BUILD_TESTS=1 -DROCPROFILER_REGISTER_BUILD_SAMPLES=1 $AOMP_REPOS/$AOMP_PROF_REGISTER_REPO_NAME + echo "${AOMP_CMAKE}" "-DCMAKE_INSTALL_LIBDIR=lib" \ + "-DCMAKE_BUILD_TYPE=$BUILD_TYPE" \ + "-DROCM_PATH=$AOMP_INSTALL_DIR" \ + "-DCMAKE_INSTALL_PREFIX=$INSTALL_ROCPROF_REGISTER" \ + "-DCMAKE_PREFIX_PATH=$CMAKE_PREFIX_PATH" \ + "-DCMAKE_EXE_LINKER_FLAGS=-Wl,--disable-new-dtags" \ + "-DROCPROFILER_REGISTER_BUILD_TESTS=1" \ + "-DROCPROFILER_REGISTER_BUILD_SAMPLES=1" \ + "-DCMAKE_EXE_LINKER_FLAGS=-Wl,--disable-new-dtags" \ + "-DBUILD_SHARED_LIBS=ON -DENABLE_LDCONFIG=OFF" \ + "-DROCPROFILER_REGISTER_BUILD_TESTS=1" \ + "-DROCPROFILER_REGISTER_BUILD_SAMPLES=1" \ + "$(shquot "${AOMP_ORIGIN_RPATH[@]}")" \ + "$AOMP_REPOS/$AOMP_PROF_REGISTER_REPO_NAME" - if [ $? != 0 ] ; then + if ! ${AOMP_CMAKE} -DCMAKE_INSTALL_LIBDIR=lib \ + -DCMAKE_BUILD_TYPE="$BUILD_TYPE" \ + -DROCM_PATH="$AOMP_INSTALL_DIR" \ + -DCMAKE_INSTALL_PREFIX="$INSTALL_ROCPROF_REGISTER" \ + -DCMAKE_PREFIX_PATH="$CMAKE_PREFIX_PATH" \ + "${AOMP_ORIGIN_RPATH[@]}" \ + -DCMAKE_EXE_LINKER_FLAGS="-Wl,--disable-new-dtags" \ + -DBUILD_SHARED_LIBS=ON -DENABLE_LDCONFIG=OFF \ + -DROCPROFILER_REGISTER_BUILD_TESTS=1 \ + -DROCPROFILER_REGISTER_BUILD_SAMPLES=1 \ + "$AOMP_REPOS/$AOMP_PROF_REGISTER_REPO_NAME"; then echo "ERROR $AOMP_PROF_REGISTER_REPO_NAME cmake failed. cmake flags" echo " $MYCMAKEOPTS" exit 1 @@ -75,12 +87,12 @@ if [ "$1" = "cmake" ]; then exit 0 fi -cd $BUILD_AOMP/build/$AOMP_PROF_REGISTER_REPO_NAME +cd "$BUILD_AOMP/build/$AOMP_PROF_REGISTER_REPO_NAME" || exit echo echo " -----Running make for $AOMP_PROF_REGISTER_REPO_NAME ---- " -echo make -j $AOMP_JOB_THREADS -make -j $AOMP_JOB_THREADS -if [ $? != 0 ] ; then +echo "make -j $AOMP_JOB_THREADS" + +if ! make -j "$AOMP_JOB_THREADS"; then echo " " echo "ERROR: make -j $AOMP_JOB_THREADS FAILED" echo "To restart:" @@ -90,12 +102,12 @@ if [ $? != 0 ] ; then fi # ----------- Install only if asked ---------------------------- -if [ "$1" == "install" ] ; then - cd $BUILD_AOMP/build/$AOMP_PROF_REGISTER_REPO_NAME +if [ "$1" == "install" ] ; then + cd "$BUILD_AOMP/build/$AOMP_PROF_REGISTER_REPO_NAME" || exit echo " -----Installing to $INSTALL_ROCPROF_REGISTER/lib ----- " - echo $SUDO make install - $SUDO make install - if [ $? != 0 ] ; then + echo "$SUDO make install" + + if ! $SUDO make install; then echo "ERROR make install failed " exit 1 fi diff --git a/bin/build_rocprofiler-sdk.sh b/bin/build_rocprofiler-sdk.sh index e3e8e7f3d..b95222505 100755 --- a/bin/build_rocprofiler-sdk.sh +++ b/bin/build_rocprofiler-sdk.sh @@ -76,7 +76,7 @@ if [ "$1" != "nocmake" ] && [ "$1" != "install" ] ; then echo "${AOMP_CMAKE}" "${MYCMAKEOPTS[@]}" "$AOMP_REPOS/$AOMP_PROF_SDK_REPO_NAME" if ! ${AOMP_CMAKE} "${MYCMAKEOPTS[@]}" "$AOMP_REPOS/$AOMP_PROF_SDK_REPO_NAME"; then echo "ERROR rocprofiler-sdk cmake failed. cmake flags" - echo " ${MYCMAKEOPTS[@]}" + echo " $(shquot "${MYCMAKEOPTS[@]}")" exit 1 fi fi diff --git a/bin/build_rocprofiler.sh b/bin/build_rocprofiler.sh index 0785e2dca..8cf77057d 100755 --- a/bin/build_rocprofiler.sh +++ b/bin/build_rocprofiler.sh @@ -4,9 +4,9 @@ # # --- Start standard header to set AOMP environment variables ---- -realpath=`realpath $0` -thisdir=`dirname $realpath` -. $thisdir/aomp_common_vars +realpath=$(realpath "$0") +thisdir=$(dirname "$realpath") +. "$thisdir/aomp_common_vars" # --- end standard header ---- INSTALL_ROCPROF=${INSTALL_ROCPROF:-$AOMP_INSTALL_DIR} @@ -30,39 +30,30 @@ if [ "$1" == "-h" ] || [ "$1" == "help" ] || [ "$1" == "-help" ] ; then exit fi -if [ ! -d $AOMP_REPOS/$AOMP_PROF_REPO_NAME ] ; then +if [ ! -d "$AOMP_REPOS/$AOMP_PROF_REPO_NAME" ] ; then echo "ERROR: Missing repository $AOMP_REPOS/$AOMP_PROF_REPO_NAME" echo " Are environment variables AOMP_REPOS and AOMP_PROF_REPO_NAME set correctly?" exit 1 fi -# Make sure we can update the install directory -if [ "$1" == "install" ] ; then - $SUDO mkdir -p $INSTALL_ROCPROF - $SUDO touch $INSTALL_ROCPROF/testfile - if [ $? != 0 ] ; then - echo "ERROR: No update access to $INSTALL_ROCPROF" - exit 1 - fi - $SUDO rm $INSTALL_ROCPROF/testfile -fi +check_writable_installdir "$1" "$INSTALL_ROCPROF" -patchrepo $AOMP_REPOS/$AOMP_PROF_REPO_NAME +patchrepo "$AOMP_REPOS/$AOMP_PROF_REPO_NAME" if [ "$1" != "nocmake" ] && [ "$1" != "install" ] ; then echo " " echo "This is a FRESH START. ERASING any previous builds in $BUILD_AOMP/build_rocprofiler" echo "Use ""$0 nocmake"" or ""$0 install"" to avoid FRESH START." - echo rm -rf $BUILD_AOMP/build/rocprofiler - rm -rf $BUILD_AOMP/build/rocprofiler - CMAKE_WITH_EXPERIMENTAL="" + echo "rm -rf $BUILD_AOMP/build/rocprofiler" + rm -rf "$BUILD_AOMP/build/rocprofiler" + CMAKE_WITH_EXPERIMENTAL=() if [ -d "/usr/include/c++/5/experimental" ] ; then - _loc=`which gcc` + _loc=$(which gcc) if [ "$_loc" != "" ] ; then - _gccver=`$_loc --version | grep gcc | cut -d")" -f2 | cut -d"." -f1` - if [ "$_gccver" == "5" ] ; then - CMAKE_WITH_EXPERIMENTAL="-DCMAKE_CXX_FLAGS=-I/usr/include/c++/5/experimental" + _gccver=$($_loc --version | grep gcc | cut -d")" -f2 | cut -d"." -f1) + if [ "$_gccver" == "5" ] ; then + CMAKE_WITH_EXPERIMENTAL=(-DCMAKE_CXX_FLAGS=-I/usr/include/c++/5/experimental) fi fi fi @@ -74,14 +65,48 @@ if [ "$1" != "nocmake" ] && [ "$1" != "install" ] ; then #export HSA_RUNTIME_LIB=$ROCM_DIR/include/lib #export HSA_KMT_LIB=$ROCM_DIR/lib #export HSA_KMT_LIB_PATH=$ROCM_DIR/lib - GFXSEMICOLONS=`echo $GFXLIST | tr ' ' ';' ` - mkdir -p $BUILD_AOMP/build/rocprofiler - cd $BUILD_AOMP/build/rocprofiler + GFXSEMICOLONS=$(echo "$GFXLIST" | tr ' ' ';') + mkdir -p "$BUILD_AOMP/build/rocprofiler" + cd "$BUILD_AOMP/build/rocprofiler" || exit export PATH=$HOME/.local/bin:$INSTALL_ROCPROF/bin:$PATH echo " -----Running rocprofiler cmake ---- " - echo ${AOMP_CMAKE} -DCMAKE_INSTALL_LIBDIR=lib -DENABLE_ASAN_PACKAGING=ON -DCMAKE_BUILD_TYPE=$BUILD_TYPE -DROCM_PATH=$AOMP_INSTALL_DIR -DCMAKE_MODULE_PATH=$INSTALL_ROCPROF/lib/cmake/hip -DCMAKE_INSTALL_PREFIX=$INSTALL_ROCPROF -DCMAKE_PREFIX_PATH="""$CMAKE_PREFIX_PATH""" $CMAKE_WITH_EXPERIMENTAL $AOMP_ORIGIN_RPATH -DGPU_TARGETS="""$GFXSEMICOLONS""" -DPROF_API_HEADER_PATH=$INSTALL_ROCPROF/include/roctracer/ext -DHIP_ROOT_DIR=$INSTALL_ROCPROF/hip $AOMP_REPOS/$AOMP_PROF_REPO_NAME -DAQLPROFILE_LIB=$AOMP_SUPP/aqlprofile/lib/libhsa-amd-aqlprofile64.so -DCMAKE_CXX_FLAGS=-I$HOME/local/rocmsmilib/include -DHIP_HIPCC_FLAGS="-I$HOME/local/rocmsmilib/include" -DCMAKE_EXE_LINKER_FLAGS="-L$HOME/local/rocmsmilib/lib -L$HOME/local/rocmsmilib/lib64 -Wl,--disable-new-dtags" - ${AOMP_CMAKE} -DCMAKE_INSTALL_LIBDIR=lib -DENABLE_ASAN_PACKAGING=ON -DCMAKE_BUILD_TYPE=$BUILD_TYPE -DROCM_PATH=$AOMP_INSTALL_DIR -DCMAKE_MODULE_PATH=$INSTALL_ROCPROF/lib/cmake/hip -DCMAKE_INSTALL_PREFIX=$INSTALL_ROCPROF -DCMAKE_PREFIX_PATH="""$CMAKE_PREFIX_PATH""" $CMAKE_WITH_EXPERIMENTAL $AOMP_ORIGIN_RPATH -DGPU_TARGETS="""$GFXSEMICOLONS""" -DPROF_API_HEADER_PATH=$INSTALL_ROCPROF/include/roctracer/ext -DHIP_ROOT_DIR=$INSTALL_ROCPROF/hip $AOMP_REPOS/$AOMP_PROF_REPO_NAME -DAQLPROFILE_LIB=$AOMP_SUPP/aqlprofile/lib/libhsa-amd-aqlprofile64.so -DCMAKE_CXX_FLAGS=-I$HOME/local/rocmsmilib/include -DHIP_HIPCC_FLAGS="-I$HOME/local/rocmsmilib/include" -DCMAKE_EXE_LINKER_FLAGS="-L$HOME/local/rocmsmilib/lib -L$HOME/local/rocmsmilib/lib64 -Wl,--disable-new-dtags" - if [ $? != 0 ] ; then + echo "${AOMP_CMAKE}" "-DCMAKE_INSTALL_LIBDIR=lib" \ + "-DENABLE_ASAN_PACKAGING=ON" \ + "-DCMAKE_BUILD_TYPE=$BUILD_TYPE" \ + "-DROCM_PATH=$AOMP_INSTALL_DIR" \ + "-DCMAKE_MODULE_PATH=$INSTALL_ROCPROF/lib/cmake/hip" \ + "-DCMAKE_INSTALL_PREFIX=$INSTALL_ROCPROF" \ + "-DCMAKE_PREFIX_PATH=$CMAKE_PREFIX_PATH" \ + "${CMAKE_WITH_EXPERIMENTAL[@]}" \ + "${AOMP_ORIGIN_RPATH[@]}" \ + "-DGPU_TARGETS=$GFXSEMICOLONS" \ + "-DPROF_API_HEADER_PATH=$INSTALL_ROCPROF/include/roctracer/ext" \ + "-DHIP_ROOT_DIR=$INSTALL_ROCPROF/hip" \ + "$AOMP_REPOS/$AOMP_PROF_REPO_NAME" \ + "-DAQLPROFILE_LIB=$AOMP_SUPP/aqlprofile/lib/libhsa-amd-aqlprofile64.so" \ + "-DCMAKE_CXX_FLAGS=-I$HOME/local/rocmsmilib/include" \ + "-DHIP_HIPCC_FLAGS=-I$HOME/local/rocmsmilib/include" \ + "-DCMAKE_EXE_LINKER_FLAGS=-L$HOME/local/rocmsmilib/lib" \ + "-L$HOME/local/rocmsmilib/lib64" \ + "-Wl,--disable-new-dtags" + + if ! ${AOMP_CMAKE} -DCMAKE_INSTALL_LIBDIR=lib \ + -DENABLE_ASAN_PACKAGING=ON \ + -DCMAKE_BUILD_TYPE="$BUILD_TYPE" \ + -DROCM_PATH="$AOMP_INSTALL_DIR" \ + -DCMAKE_MODULE_PATH="$INSTALL_ROCPROF/lib/cmake/hip" \ + -DCMAKE_INSTALL_PREFIX="$INSTALL_ROCPROF" \ + -DCMAKE_PREFIX_PATH="$CMAKE_PREFIX_PATH" \ + "${CMAKE_WITH_EXPERIMENTAL[@]}" \ + "${AOMP_ORIGIN_RPATH[@]}" \ + -DGPU_TARGETS="$GFXSEMICOLONS" \ + -DPROF_API_HEADER_PATH="$INSTALL_ROCPROF/include/roctracer/ext" \ + -DHIP_ROOT_DIR="$INSTALL_ROCPROF/hip" \ + "$AOMP_REPOS/$AOMP_PROF_REPO_NAME" \ + -DAQLPROFILE_LIB="$AOMP_SUPP/aqlprofile/lib/libhsa-amd-aqlprofile64.so" \ + -DCMAKE_CXX_FLAGS="-I$HOME/local/rocmsmilib/include" \ + -DHIP_HIPCC_FLAGS="-I$HOME/local/rocmsmilib/include" \ + -DCMAKE_EXE_LINKER_FLAGS="-L$HOME/local/rocmsmilib/lib -L$HOME/local/rocmsmilib/lib64 -Wl,--disable-new-dtags"; then echo "ERROR rocprofiler cmake failed. cmake flags" echo " $MYCMAKEOPTS" exit 1 @@ -92,13 +117,13 @@ if [ "$1" = "cmake" ]; then exit 0 fi -cd $BUILD_AOMP/build/rocprofiler +cd "$BUILD_AOMP/build/rocprofiler" || exit echo echo " -----Running make for rocprofiler ---- " -echo make -j $AOMP_JOB_THREADS -make -j $AOMP_JOB_THREADS -make -j $AOMP_JOB_THREADS mytest -if [ $? != 0 ] ; then +echo "make -j $AOMP_JOB_THREADS" +make -j "$AOMP_JOB_THREADS" + +if ! make -j "$AOMP_JOB_THREADS" mytest; then echo " " echo "ERROR: make -j $AOMP_JOB_THREADS FAILED" echo "To restart:" @@ -107,26 +132,26 @@ if [ $? != 0 ] ; then exit 1 fi -doxygen=`which doxygen` -if [ ! -z $doxygen ] ; then +doxygen=$(which doxygen) +if [ -n "$doxygen" ] ; then # the rocprofiler CMakeLists.txt will prepare docs install if doxygen found. # However, the make doc has issues. But if you dont make doc, the install # fails. This 'make doc' will do enough so install does not fail. - echo make -j $AOMP_JOB_THREADS doc - make -j $AOMP_JOB_THREADS doc 2>/dev/null >/dev/null + echo "make -j $AOMP_JOB_THREADS doc" + make -j "$AOMP_JOB_THREADS" doc 2>/dev/null >/dev/null fi # ----------- Install only if asked ---------------------------- if [ "$1" == "install" ] ; then - cd $BUILD_AOMP/build/rocprofiler + cd "$BUILD_AOMP/build/rocprofiler" || exit echo " -----Installing to $INSTALL_ROCPROF/lib ----- " - echo $SUDO make install - $SUDO make install - if [ $? != 0 ] ; then + echo "$SUDO make install" + + if ! $SUDO make install; then echo "ERROR make install failed " exit 1 fi - removepatch $AOMP_REPOS/$AOMP_PROF_REPO_NAME + removepatch "$AOMP_REPOS/$AOMP_PROF_REPO_NAME" else echo echo "SUCCESSFUL BUILD, please run: $0 install" diff --git a/bin/build_rocr.sh b/bin/build_rocr.sh index 51e2cf088..b78bcb937 100755 --- a/bin/build_rocr.sh +++ b/bin/build_rocr.sh @@ -6,9 +6,9 @@ # # --- Start standard header to set AOMP environment variables ---- -realpath=`realpath $0` -thisdir=`dirname $realpath` -. $thisdir/aomp_common_vars +realpath=$(realpath "$0") +thisdir=$(dirname "$realpath") +. "$thisdir/aomp_common_vars" # --- end standard header ---- INSTALL_ROCM=${INSTALL_ROCM:-$AOMP_INSTALL_DIR} @@ -30,28 +30,20 @@ if [ "$1" == "-h" ] || [ "$1" == "help" ] || [ "$1" == "-help" ] ; then exit fi -if [ ! -d $AOMP_REPOS/$AOMP_ROCR_REPO_NAME ] ; then +if [ ! -d "$AOMP_REPOS/$AOMP_ROCR_REPO_NAME" ] ; then echo "ERROR: Missing repository $AOMP_REPOS/$AOMP_ROCR_REPO_NAME" echo " Are environment variables AOMP_REPOS and AOMP_ROCR_REPO_NAME set correctly?" exit 1 fi -# Make sure we can update the install directory -if [ "$1" == "install" ] ; then - $SUDO mkdir -p $INSTALL_ROCM - $SUDO touch $INSTALL_ROCM/testfile - if [ $? != 0 ] ; then - echo "ERROR: No update access to $INSTALL_ROCM" - exit 1 - fi - $SUDO rm $INSTALL_ROCM/testfile -fi +check_writable_installdir "$1" "$INSTALL_ROCM" -patchrepo $AOMP_REPOS/$AOMP_ROCR_REPO_NAME +patchrepo "$AOMP_REPOS/$AOMP_ROCR_REPO_NAME" -if [ "$AOMP_BUILD_SANITIZER" == 1 ] ; then - LDFLAGS="-fuse-ld=lld $ASAN_FLAGS" -fi +#if [ "$AOMP_BUILD_SANITIZER" == 1 ] ; then + #LDFLAGS=$(shquot '-fuse-ld=lld' "${ASAN_FLAGS[@]}") + #export LDFLAGS +#fi _ompd_src_dir="$LLVM_INSTALL_LOC/share/gdb/python/ompd/src" @@ -62,51 +54,93 @@ if [ "$1" != "nocmake" ] && [ "$1" != "install" ] ; then echo "Use ""$0 nocmake"" or ""$0 install"" to avoid FRESH START." BUILDTYPE="Release" - echo rm -rf $BUILD_AOMP/build/rocr - rm -rf $BUILD_AOMP/build/rocr + echo "rm -rf $BUILD_AOMP/build/rocr" + rm -rf "$BUILD_AOMP/build/rocr" export PATH=/opt/rocm/llvm/bin:$PATH - MYCMAKEOPTS="-DCMAKE_INSTALL_PREFIX=$INSTALL_ROCM -DCMAKE_BUILD_TYPE=$BUILDTYPE -DCMAKE_PREFIX_PATH=$AOMP_INSTALL_DIR/lib -DIMAGE_SUPPORT=OFF $AOMP_ORIGIN_RPATH -DCMAKE_INSTALL_LIBDIR=lib -DCMAKE_C_COMPILER=${AOMP_INSTALL_DIR}/lib/llvm/bin/clang -DCMAKE_CXX_COMPILER=${AOMP_INSTALL_DIR}/lib/llvm/bin/clang++ -DLLVM_DIR=$AOMP_INSTALL_DIR/lib/llvm/bin -DBUILD_SHARED_LIBS=On" - mkdir -p $BUILD_AOMP/build/rocr - cd $BUILD_AOMP/build/rocr + declare -a MYCMAKEOPTS + MYCMAKEOPTS=(-DCMAKE_INSTALL_PREFIX="$INSTALL_ROCM" + -DCMAKE_BUILD_TYPE="$BUILDTYPE" + -DCMAKE_PREFIX_PATH="$AOMP_INSTALL_DIR/lib" + -DIMAGE_SUPPORT=OFF "${AOMP_ORIGIN_RPATH[@]}" + -DCMAKE_INSTALL_LIBDIR=lib + -DCMAKE_C_COMPILER="${AOMP_INSTALL_DIR}/lib/llvm/bin/clang" + -DCMAKE_CXX_COMPILER="${AOMP_INSTALL_DIR}/lib/llvm/bin/clang++" + -DLLVM_DIR="$AOMP_INSTALL_DIR/lib/llvm/bin" + -DBUILD_SHARED_LIBS=On) + mkdir -p "$BUILD_AOMP/build/rocr" + cd "$BUILD_AOMP/build/rocr" || exit echo echo " -----Running rocr cmake ---- " - echo ${AOMP_CMAKE} $MYCMAKEOPTS $AOMP_REPOS/$AOMP_ROCR_REPO_NAME - ${AOMP_CMAKE} $MYCMAKEOPTS $AOMP_REPOS/$AOMP_ROCR_REPO_NAME - if [ $? != 0 ] ; then + echo "${AOMP_CMAKE}" "$(shquot "${MYCMAKEOPTS[@]}")" \ + "$AOMP_REPOS/$AOMP_ROCR_REPO_NAME" + + if ! ${AOMP_CMAKE} "${MYCMAKEOPTS[@]}" "$AOMP_REPOS/$AOMP_ROCR_REPO_NAME"; then echo "ERROR rocr cmake failed. cmake flags" - echo " $MYCMAKEOPTS" + echo " $(shquot "${MYCMAKEOPTS[@]}")" exit 1 fi if [ "$AOMP_BUILD_SANITIZER" == 1 ] ; then + declare -a ASAN_CMAKE_OPTS # unused prefix path :$ROCM_DIR/lib/asan/cmake;${AOMP_INSTALL_DIR}/lib/cmake - ASAN_CMAKE_OPTS="-DCMAKE_C_COMPILER=${AOMP_INSTALL_DIR}/lib/llvm/bin/clang -DCMAKE_CXX_COMPILER=${AOMP_INSTALL_DIR}/lib/llvm/bin/clang++ -DLLVM_DIR=$AOMP_INSTALL_DIR/lib/llvm/bin -DCMAKE_INSTALL_PREFIX=$AOMP_INSTALL_DIR -DCMAKE_INSTALL_LIBDIR=lib/asan -DCMAKE_BUILD_TYPE=$BUILD_TYPE -DCMAKE_PREFIX_PATH=$AOMP_INSTALL_DIR/lib -DIMAGE_SUPPORT=OFF $AOMP_ASAN_ORIGIN_RPATH -DBUILD_SHARED_LIBS=On" - mkdir -p $BUILD_AOMP/build/rocr/asan - cd $BUILD_AOMP/build/rocr/asan + ASAN_CMAKE_OPTS=(-DCMAKE_C_COMPILER="${AOMP_INSTALL_DIR}/lib/llvm/bin/clang" + -DCMAKE_CXX_COMPILER="${AOMP_INSTALL_DIR}/lib/llvm/bin/clang++" + -DLLVM_DIR="$AOMP_INSTALL_DIR/lib/llvm/bin" + -DCMAKE_INSTALL_PREFIX="$AOMP_INSTALL_DIR" + -DCMAKE_INSTALL_LIBDIR=lib/asan + -DCMAKE_BUILD_TYPE="$BUILD_TYPE" + -DCMAKE_PREFIX_PATH="$AOMP_INSTALL_DIR/lib" + -DIMAGE_SUPPORT=OFF "${AOMP_ASAN_ORIGIN_RPATH[@]}" + -DBUILD_SHARED_LIBS=On) + mkdir -p "$BUILD_AOMP/build/rocr/asan" + cd "$BUILD_AOMP/build/rocr/asan" || exit echo echo " ----Running rocr-asan cmake ----- " - echo ${AOMP_CMAKE} $ASAN_CMAKE_OPTS -DCMAKE_C_FLAGS="'$ASAN_FLAGS'" -DCMAKE_CXX_FLAGS="'$ASAN_FLAGS'" $AOMP_REPOS/$AOMP_ROCR_REPO_NAME - ${AOMP_CMAKE} $ASAN_CMAKE_OPTS -DCMAKE_C_FLAGS="'$ASAN_FLAGS'" -DCMAKE_CXX_FLAGS="'$ASAN_FLAGS'" $AOMP_REPOS/$AOMP_ROCR_REPO_NAME - if [ $? != 0 ] ; then + echo "${AOMP_CMAKE}" "$(shquot "${ASAN_CMAKE_OPTS[@]}")" \ + -DCMAKE_C_FLAGS="\"$(cmquot "${ASAN_FLAGS[@]}")\"" \ + -DCMAKE_CXX_FLAGS="\"$(cmquot "${ASAN_FLAGS[@]}")\"" \ + "$AOMP_REPOS/$AOMP_ROCR_REPO_NAME" + + if ! ${AOMP_CMAKE} "${ASAN_CMAKE_OPTS[@]}" \ + -DCMAKE_C_FLAGS="$(cmquot "${ASAN_FLAGS[@]}")" \ + -DCMAKE_CXX_FLAGS="$(cmquot "${ASAN_FLAGS[@]}")" \ + "$AOMP_REPOS/$AOMP_ROCR_REPO_NAME"; then echo "ERROR rocr-asan cmake failed. cmake flags" - echo " $ASAN_CMAKE_OPTS" + echo " $(shquot "${ASAN_CMAKE_OPTS[@]}")" exit 1 fi fi if [ "$AOMP_BUILD_DEBUG" == "1" ] ; then - echo rm -rf $BUILD_AOMP/build/rocr_debug - [ -d $BUILD_AOMP/build/rocr_debug ] && rm -rf $BUILD_AOMP/build/rocr_debug - ROCR_CMAKE_OPTS="-DCMAKE_C_COMPILER=$AOMP_INSTALL_DIR/lib/llvm/bin/clang -DCMAKE_CXX_COMPILER=$AOMP_INSTALL_DIR/lib/llvm/bin/clang++ -DLLVM_DIR=$AOMP_INSTALL_DIR/lib/llvm/bin -DCMAKE_PREFIX_PATH=$AOMP_INSTALL_DIR/lib -DCMAKE_INSTALL_PREFIX=$AOMP_INSTALL_DIR -DCMAKE_BUILD_TYPE=Debug $AOMP_DEBUG_ORIGIN_RPATH -DCMAKE_INSTALL_LIBDIR=lib-debug -DBUILD_SHARED_LIBS=On -DIMAGE_SUPPORT=OFF" + echo "rm -rf $BUILD_AOMP/build/rocr_debug" + [ -d "$BUILD_AOMP/build/rocr_debug" ] && rm -rf "$BUILD_AOMP/build/rocr_debug" + declare -a ROCR_CMAKE_OPTS + ROCR_CMAKE_OPTS=(-DCMAKE_C_COMPILER="$AOMP_INSTALL_DIR/lib/llvm/bin/clang" + -DCMAKE_CXX_COMPILER="$AOMP_INSTALL_DIR/lib/llvm/bin/clang++" + -DLLVM_DIR="$AOMP_INSTALL_DIR/lib/llvm/bin" + -DCMAKE_PREFIX_PATH="$AOMP_INSTALL_DIR/lib" + -DCMAKE_INSTALL_PREFIX="$AOMP_INSTALL_DIR" + -DCMAKE_BUILD_TYPE=Debug + "${AOMP_DEBUG_ORIGIN_RPATH[@]}" + -DCMAKE_INSTALL_LIBDIR=lib-debug + -DBUILD_SHARED_LIBS=On + -DIMAGE_SUPPORT=OFF + -DTARGET_DEVICES="gfx900;gfx90a;gfx942;gfx1010;gfx1030;gfx1100;gfx1200") echo echo " -----Running rocr_debug cmake -----" - mkdir -p $BUILD_AOMP/build/rocr_debug - cd $BUILD_AOMP/build/rocr_debug - _prefix_map="\""-fdebug-prefix-map=$AOMP_REPOS/$AOMP_ROCR_REPO_NAME=$_ompd_src_dir/rocr"\"" - echo ${AOMP_CMAKE} $ROCR_CMAKE_OPTS -DCMAKE_C_FLAGS="-g $_prefix_map" -DCMAKE_CXX_FLAGS="-g $_prefix_map" $AOMP_REPOS/$AOMP_ROCR_REPO_NAME - ${AOMP_CMAKE} $ROCR_CMAKE_OPTS -DCMAKE_C_FLAGS="-g $_prefix_map" -DCMAKE_CXX_FLAGS="-g $_prefix_map" $AOMP_REPOS/$AOMP_ROCR_REPO_NAME - if [ $? != 0 ] ; then + mkdir -p "$BUILD_AOMP/build/rocr_debug" + cd "$BUILD_AOMP/build/rocr_debug" || exit + _prefix_map=(-fdebug-prefix-map="$AOMP_REPOS/$AOMP_ROCR_REPO_NAME=$_ompd_src_dir/rocr") + echo "${AOMP_CMAKE}" "$(shquot "${ROCR_CMAKE_OPTS[@]}")" \ + -DCMAKE_C_FLAGS="\"$(cmquot -g "${_prefix_map[@]}")\"" \ + -DCMAKE_CXX_FLAGS="\"$(cmquot -g "${_prefix_map[@]}")\"" \ + "$AOMP_REPOS/$AOMP_ROCR_REPO_NAME" + + if ! ${AOMP_CMAKE} "${ROCR_CMAKE_OPTS[@]}" \ + -DCMAKE_C_FLAGS="$(cmquot -g "${_prefix_map[@]}")" \ + -DCMAKE_CXX_FLAGS="$(cmquot -g "${_prefix_map[@]}")" \ + "$AOMP_REPOS/$AOMP_ROCR_REPO_NAME"; then echo "ERROR rocr_debug cmake failed.cmake flags" - echo " $ROCR_CMAKE_OPTS" + echo " $(shquot "${ROCR_CMAKE_OPTS[@]}")" exit 1 fi fi @@ -116,12 +150,12 @@ if [ "$1" = "cmake" ]; then exit 0 fi -cd $BUILD_AOMP/build/rocr +cd "$BUILD_AOMP/build/rocr" || exit echo echo " -----Running make for rocr ---- " -echo make -j $AOMP_JOB_THREADS -make -j $AOMP_JOB_THREADS -if [ $? != 0 ] ; then +echo "make -j $AOMP_JOB_THREADS" + +if ! make -j "$AOMP_JOB_THREADS"; then echo " " echo "ERROR: make -j $AOMP_JOB_THREADS FAILED" echo "To restart:" @@ -131,12 +165,12 @@ if [ $? != 0 ] ; then fi if [ "$AOMP_BUILD_SANITIZER" == 1 ] ; then - cd $BUILD_AOMP/build/rocr/asan + cd "$BUILD_AOMP/build/rocr/asan" || exit echo echo " -----Running make for rocr-asan ---- " - echo make -j $AOMP_JOB_THREADS - make -j $AOMP_JOB_THREADS - if [ $? != 0 ] ; then + echo "make -j $AOMP_JOB_THREADS" + + if ! make -j "$AOMP_JOB_THREADS"; then echo " " echo "ERROR: make -j $AOMP_JOB_THREADS FAILED" echo "To restart:" @@ -146,11 +180,11 @@ if [ "$AOMP_BUILD_SANITIZER" == 1 ] ; then fi fi if [ "$AOMP_BUILD_DEBUG" == 1 ] ; then - cd $BUILD_AOMP/build/rocr_debug + cd "$BUILD_AOMP/build/rocr_debug" || exit echo echo " ----- Running make for rocr_debug ----- " - make -j $AOMP_JOB_THREADS - if [ $? != 0 ] ; then + + if ! make -j "$AOMP_JOB_THREADS"; then echo " " echo "ERROR: make -j $AOMP_JOB_THREADS FAILED" echo "To restart:" @@ -161,42 +195,41 @@ if [ "$AOMP_BUILD_DEBUG" == 1 ] ; then fi # ----------- Install only if asked ---------------------------- if [ "$1" == "install" ] ; then - cd $BUILD_AOMP/build/rocr + cd "$BUILD_AOMP/build/rocr" || exit echo " -----Installing to $INSTALL_ROCM/lib ----- " - echo $SUDO make install - $SUDO make install - if [ $? != 0 ] ; then + echo "$SUDO make install " + + if ! $SUDO make install; then echo "ERROR make install failed " exit 1 fi if [ "$AOMP_BUILD_SANITIZER" == 1 ] ; then - cd $BUILD_AOMP/build/rocr/asan + cd "$BUILD_AOMP/build/rocr/asan" || exit echo " ------Installing to $INSTALL_ROCM/lib/asan ------ " - echo $SUDO make install - $SUDO make install - if [ $? != 0 ] ; then + echo "$SUDO make install" + + if ! $SUDO make install; then echo "ERROR make install failed " exit 1 fi fi if [ "$AOMP_BUILD_DEBUG" == 1 ] ; then - cd $BUILD_AOMP/build/rocr_debug + cd "$BUILD_AOMP/build/rocr_debug" || exit echo " -----Installing to $INSTALL_ROCM/lib-debug ----- " - $SUDO make install - if [ $? != 0 ] ; then + if ! $SUDO make install; then echo "ERROR make install for rocr failed " exit 1 fi # copy rocr sources into the installation for runtime source debugging _dirs="runtime/hsa-runtime/image runtime/hsa-runtime/inc runtime/hsa-runtime/core runtime/hsa-runtime/loader runtime/hsa-runtime/pcs libhsakmt/src libhsakmt/include" for _dirname in $_dirs ; do - $SUDO mkdir -p $_ompd_src_dir/rocr/$_dirname - echo cp -r $AOMP_REPOS/$AOMP_ROCR_REPO_NAME/$_dirname/ $_ompd_src_dir/rocr/$_dirname/ - $SUDO cp -r $AOMP_REPOS/$AOMP_ROCR_REPO_NAME/$_dirname/ $_ompd_src_dir/rocr/$_dirname/ + $SUDO mkdir -p "$_ompd_src_dir/rocr/$_dirname" + echo "cp -r $AOMP_REPOS/$AOMP_ROCR_REPO_NAME/$_dirname/ $_ompd_src_dir/rocr/$_dirname/" + $SUDO cp -r "$AOMP_REPOS/$AOMP_ROCR_REPO_NAME/$_dirname/" "$_ompd_src_dir/rocr/$_dirname/" done # remove non-source files to save space - find $_ompd_src_dir/rocr -type f | grep -v "\.cpp$\|\.h$\|\.hpp$\|\.c$\|\.s$" | xargs rm + find "$_ompd_src_dir/rocr" -type f | grep -v "\.cpp$\|\.h$\|\.hpp$\|\.c$\|\.s$" | xargs rm fi - removepatch $AOMP_REPOS/$AOMP_ROCR_REPO_NAME + removepatch "$AOMP_REPOS/$AOMP_ROCR_REPO_NAME" fi diff --git a/bin/build_roct.sh b/bin/build_roct.sh index e58f723b8..e928aa3fa 100755 --- a/bin/build_roct.sh +++ b/bin/build_roct.sh @@ -4,9 +4,9 @@ # # --- Start standard header to set AOMP environment variables ---- -realpath=`realpath $0` -thisdir=`dirname $realpath` -. $thisdir/aomp_common_vars +realpath=$(realpath "$0") +thisdir=$(dirname "$realpath") +. "$thisdir/aomp_common_vars" # --- end standard header ---- INSTALL_ROCT=${INSTALL_ROCT:-$AOMP_INSTALL_DIR} @@ -28,28 +28,20 @@ if [ "$1" == "-h" ] || [ "$1" == "help" ] || [ "$1" == "-help" ] ; then exit fi -if [ ! -d $AOMP_REPOS/$AOMP_ROCT_REPO_NAME ] ; then +if [ ! -d "$AOMP_REPOS/$AOMP_ROCT_REPO_NAME" ] ; then echo "ERROR: Missing repository $AOMP_REPOS/$AOMP_ROCT_REPO_NAME" echo " Are environment variables AOMP_REPOS and AOMP_ROCT_REPO_NAME set correctly?" exit 1 fi -# Make sure we can update the install directory -if [ "$1" == "install" ] ; then - $SUDO mkdir -p $INSTALL_ROCT - $SUDO touch $INSTALL_ROCT/testfile - if [ $? != 0 ] ; then - echo "ERROR: No update access to $INSTALL_ROCT" - exit 1 - fi - $SUDO rm $INSTALL_ROCT/testfile -fi +check_writable_installdir "$1" "$INSTALL_ROCT" -patchrepo $AOMP_REPOS/$AOMP_ROCT_REPO_NAME +patchrepo "$AOMP_REPOS/$AOMP_ROCT_REPO_NAME" -if [ "$AOMP_BUILD_SANITIZER" == 1 ] ; then - LDFLAGS="-fuse-ld=lld $ASAN_FLAGS" -fi +#if [ "$AOMP_BUILD_SANITIZER" == 1 ] ; then + #LDFLAGS=$(shquot '-fuse-ld=lld' "${ASAN_FLAGS[@]}") + #export LDFLAGS +#fi _ompd_src_dir="$LLVM_INSTALL_LOC/share/gdb/python/ompd/src" @@ -60,46 +52,79 @@ if [ "$1" != "nocmake" ] && [ "$1" != "install" ] ; then echo "Use ""$0 nocmake"" or ""$0 install"" to avoid FRESH START." BUILDTYPE="Release" - echo $SUDO rm -rf $BUILD_AOMP/build/roct - $SUDO rm -rf $BUILD_AOMP/build/roct - MYCMAKEOPTS="-DCMAKE_PREFIX_PATH=$AOMP_INSTALL_DIR/lib/cmake -DCMAKE_INSTALL_PREFIX=$INSTALL_ROCT -DCMAKE_BUILD_TYPE=$BUILDTYPE $AOMP_ORIGIN_RPATH -DCMAKE_INSTALL_LIBDIR=lib" - mkdir -p $BUILD_AOMP/build/roct - cd $BUILD_AOMP/build/roct + echo "$SUDO rm -rf $BUILD_AOMP/build/roct" + $SUDO rm -rf "$BUILD_AOMP/build/roct" + declare -a MYCMAKEOPTS + MYCMAKEOPTS=(-DCMAKE_PREFIX_PATH="$AOMP_INSTALL_DIR/lib/cmake" + -DCMAKE_INSTALL_PREFIX="$INSTALL_ROCT" + -DCMAKE_BUILD_TYPE="$BUILDTYPE" + "${AOMP_ORIGIN_RPATH[@]}" + -DCMAKE_INSTALL_LIBDIR=lib) + mkdir -p "$BUILD_AOMP/build/roct" + cd "$BUILD_AOMP/build/roct" || exit echo " -----Running roct cmake ---- " - echo ${AOMP_CMAKE} $MYCMAKEOPTS $AOMP_REPOS/$AOMP_ROCT_REPO_NAME - ${AOMP_CMAKE} $MYCMAKEOPTS $AOMP_REPOS/$AOMP_ROCT_REPO_NAME - if [ $? != 0 ] ; then + echo "${AOMP_CMAKE}" "$(shquot "${MYCMAKEOPTS[@]}")" \ + "$AOMP_REPOS/$AOMP_ROCT_REPO_NAME" + + if ! ${AOMP_CMAKE} "${MYCMAKEOPTS[@]}" \ + "$AOMP_REPOS/$AOMP_ROCT_REPO_NAME"; then echo "ERROR roct cmake failed. cmake flags" - echo " $MYCMAKEOPTS" + echo " $(shquot "${MYCMAKEOPTS[@]}")" exit 1 fi if [ "$AOMP_BUILD_SANITIZER" == 1 ] ; then - mkdir -p $BUILD_AOMP/build/roct/asan - cd $BUILD_AOMP/build/roct/asan - ASAN_CMAKE_OPTS="-DCMAKE_C_COMPILER=$AOMP_CLANG_COMPILER -DCMAKE_CXX_COMPILER=$AOMP_CLANGXX_COMPILER -DCMAKE_PREFIX_PATH=$AOMP_INSTALL_DIR/lib/asan/cmake -DCMAKE_INSTALL_PREFIX=$INSTALL_ROCT -DCMAKE_BUILD_TYPE=$BUILDTYPE $AOMP_ASAN_ORIGIN_RPATH -DCMAKE_INSTALL_LIBDIR=$AOMP_INSTALL_DIR/lib/asan" + mkdir -p "$BUILD_AOMP/build/roct/asan" + cd "$BUILD_AOMP/build/roct/asan" || exit + declare -a ASAN_CMAKE_OPTS + ASAN_CMAKE_OPTS=(-DCMAKE_C_COMPILER="$AOMP_CLANG_COMPILER" + -DCMAKE_CXX_COMPILER="$AOMP_CLANGXX_COMPILER" + -DCMAKE_PREFIX_PATH="$AOMP_INSTALL_DIR/lib/asan/cmake" + -DCMAKE_INSTALL_PREFIX="$INSTALL_ROCT" + -DCMAKE_BUILD_TYPE="$BUILDTYPE" + "${AOMP_ASAN_ORIGIN_RPATH[@]}" + -DCMAKE_INSTALL_LIBDIR="$AOMP_INSTALL_DIR/lib/asan") echo " -----Running roct-asan cmake -----" - echo ${AOMP_CMAKE} $ASAN_CMAKE_OPTS -DCMAKE_C_FLAGS="'$ASAN_FLAGS'" -DCMAKE_CXX_FLAGS="'$ASAN_FLAGS'" $AOMP_REPOS/$AOMP_ROCT_REPO_NAME - ${AOMP_CMAKE} $ASAN_CMAKE_OPTS -DCMAKE_C_FLAGS="'$ASAN_FLAGS'" -DCMAKE_CXX_FLAGS="'$ASAN_FLAGS'" $AOMP_REPOS/$AOMP_ROCT_REPO_NAME - if [ $? != 0 ] ; then + echo "${AOMP_CMAKE}" "$(shquot "${ASAN_CMAKE_OPTS[@]}")" \ + -DCMAKE_C_FLAGS="\"$(cmquot "${ASAN_FLAGS[@]}")\"" \ + -DCMAKE_CXX_FLAGS="\"$(cmquot "${ASAN_FLAGS[@]}")\"" \ + "$AOMP_REPOS/$AOMP_ROCT_REPO_NAME" + + if ! ${AOMP_CMAKE} "${ASAN_CMAKE_OPTS[@]}" \ + -DCMAKE_C_FLAGS="$(cmquot "${ASAN_FLAGS[@]}")" \ + -DCMAKE_CXX_FLAGS="$(cmquot "${ASAN_FLAGS[@]}")" \ + "$AOMP_REPOS/$AOMP_ROCT_REPO_NAME"; then echo "ERROR roct-asan cmake failed.cmake flags" - echo " $ASAN_CMAKE_OPTS" + echo " $(shquot "${ASAN_CMAKE_OPTS[@]}")" exit 1 fi fi if [ "$AOMP_BUILD_DEBUG" == "1" ] ; then - echo rm -rf $BUILD_AOMP/build/roct_debug - [ -d $BUILD_AOMP/build/roct_debug ] && rm -rf $BUILD_AOMP/build/roct_debug - ROCT_CMAKE_OPTS="-DCMAKE_C_COMPILER=$AOMP_CLANG_COMPILER -DCMAKE_CXX_COMPILER=$AOMP_CLANGXX_COMPILER -DCMAKE_INSTALL_PREFIX=$INSTALL_ROCT -DCMAKE_BUILD_TYPE=Debug $AOMP_DEBUG_ORIGIN_RPATH -DCMAKE_INSTALL_LIBDIR=lib-debug -DBUILD_SHARED_LIBS=ON" + echo "rm -rf $BUILD_AOMP/build/roct_debug" + [ -d "$BUILD_AOMP/build/roct_debug" ] && rm -rf "$BUILD_AOMP/build/roct_debug" + declare -a ROCT_CMAKE_OPTS + ROCT_CMAKE_OPTS=(-DCMAKE_C_COMPILER="$AOMP_CLANG_COMPILER" + -DCMAKE_CXX_COMPILER="$AOMP_CLANGXX_COMPILER" + -DCMAKE_INSTALL_PREFIX="$INSTALL_ROCT" + -DCMAKE_BUILD_TYPE=Debug + "${AOMP_DEBUG_ORIGIN_RPATH[@]}" + -DCMAKE_INSTALL_LIBDIR=lib-debug + -DBUILD_SHARED_LIBS=ON) echo " -----Running roct_debug cmake -----" - mkdir -p $BUILD_AOMP/build/roct_debug - cd $BUILD_AOMP/build/roct_debug - _prefix_map="\""-fdebug-prefix-map=$AOMP_REPOS/$AOMP_ROCT_REPO_NAME/src=$_ompd_src_dir/roct/src"\"" - echo ${AOMP_CMAKE} $ROCT_CMAKE_OPTS -DCMAKE_C_FLAGS="-g $_prefix_map" -DCMAKE_CXX_FLAGS="-g $_prefix_map" $AOMP_REPOS/$AOMP_ROCT_REPO_NAME - ${AOMP_CMAKE} $ROCT_CMAKE_OPTS -DCMAKE_C_FLAGS="-g $_prefix_map" -DCMAKE_CXX_FLAGS="-g $_prefix_map" $AOMP_REPOS/$AOMP_ROCT_REPO_NAME - if [ $? != 0 ] ; then + mkdir -p "$BUILD_AOMP/build/roct_debug" + cd "$BUILD_AOMP/build/roct_debug" || exit + _prefix_map=(-fdebug-prefix-map="$AOMP_REPOS/$AOMP_ROCT_REPO_NAME/src=$_ompd_src_dir/roct/src") + echo "${AOMP_CMAKE}" "$(shquot "${ROCT_CMAKE_OPTS[@]}")" \ + -DCMAKE_C_FLAGS="\"$(cmquot -g "${_prefix_map[@]}")\"" \ + -DCMAKE_CXX_FLAGS="\"$(cmquot -g "${_prefix_map[@]}")\"" \ + "$AOMP_REPOS/$AOMP_ROCT_REPO_NAME" + + if ! ${AOMP_CMAKE} "${ROCT_CMAKE_OPTS[@]}" \ + -DCMAKE_C_FLAGS="$(cmquot -g "${_prefix_map[@]}")" \ + -DCMAKE_CXX_FLAGS="$(cmquot -g "${_prefix_map[@]}")" \ + "$AOMP_REPOS/$AOMP_ROCT_REPO_NAME"; then echo "ERROR roct_debug cmake failed.cmake flags" - echo " $ROCT_CMAKE_OPTS" + echo " $(shquot "${ROCT_CMAKE_OPTS[@]}")" exit 1 fi fi @@ -109,11 +134,11 @@ if [ "$1" = "cmake" ]; then exit 0 fi -cd $BUILD_AOMP/build/roct +cd "$BUILD_AOMP/build/roct" || exit echo echo " -----Running make for roct ---- " -make -j $AOMP_JOB_THREADS -if [ $? != 0 ] ; then + +if ! make -j "$AOMP_JOB_THREADS"; then echo " " echo "ERROR: make -j $AOMP_JOB_THREADS FAILED" echo "To restart:" @@ -125,8 +150,8 @@ fi if [ "$AOMP_BUILD_SANITIZER" == 1 ] ; then echo echo " ----- Running make for roct-asan ----- " - make -j $AOMP_JOB_THREADS - if [ $? != 0 ] ; then + + if ! make -j "$AOMP_JOB_THREADS"; then echo " " echo "ERROR: make -j $AOMP_JOB_THREADS FAILED" echo "To restart:" @@ -136,11 +161,11 @@ if [ "$AOMP_BUILD_SANITIZER" == 1 ] ; then fi fi if [ "$AOMP_BUILD_DEBUG" == 1 ] ; then - cd $BUILD_AOMP/build/roct_debug + cd "$BUILD_AOMP/build/roct_debug" || exit echo echo " ----- Running make for roct_debug ----- " - make -j $AOMP_JOB_THREADS - if [ $? != 0 ] ; then + + if ! make -j "$AOMP_JOB_THREADS"; then echo " " echo "ERROR: make -j $AOMP_JOB_THREADS FAILED" echo "To restart:" @@ -151,36 +176,35 @@ if [ "$AOMP_BUILD_DEBUG" == 1 ] ; then fi # ----------- Install only if asked ---------------------------- -if [ "$1" == "install" ] ; then - cd $BUILD_AOMP/build/roct +if [ "$1" == "install" ] ; then + cd "$BUILD_AOMP/build/roct" || exit echo " -----Installing to $INSTALL_ROCT/lib ----- " - $SUDO make install - if [ $? != 0 ] ; then + + if ! $SUDO make install; then echo "ERROR make install failed " exit 1 fi if [ "$AOMP_BUILD_SANITIZER" == 1 ] ; then - cd $BUILD_AOMP/build/roct/asan + cd "$BUILD_AOMP/build/roct/asan" || exit echo " -----Installing to $INSTALL_ROCT/lib/asan ----- " - $SUDO make install - if [ $? != 0 ] ; then + + if ! $SUDO make install; then echo "ERROR make install failed " exit 1 fi fi if [ "$AOMP_BUILD_DEBUG" == 1 ] ; then - cd $BUILD_AOMP/build/roct_debug + cd "$BUILD_AOMP/build/roct_debug" || exit echo " -----Installing to $INSTALL_ROCT/lib-debug ----- " - $SUDO make install - if [ $? != 0 ] ; then + if ! $SUDO make install; then echo "ERROR make install for roct failed " exit 1 fi - $SUDO mkdir -p $_ompd_src_dir/roct - echo $SUDO cp -r $AOMP_REPOS/$AOMP_ROCT_REPO_NAME/src $_ompd_src_dir/roct - $SUDO cp -r $AOMP_REPOS/$AOMP_ROCT_REPO_NAME/src $_ompd_src_dir/roct + $SUDO mkdir -p "$_ompd_src_dir/roct" + echo "$SUDO cp -r $AOMP_REPOS/$AOMP_ROCT_REPO_NAME/src $_ompd_src_dir/roct" + $SUDO cp -r "$AOMP_REPOS/$AOMP_ROCT_REPO_NAME/src" "$_ompd_src_dir/roct" fi - removepatch $AOMP_REPOS/$AOMP_ROCT_REPO_NAME + removepatch "$AOMP_REPOS/$AOMP_ROCT_REPO_NAME" fi diff --git a/bin/build_roctracer.sh b/bin/build_roctracer.sh index 7354a34eb..ec9dc3d66 100755 --- a/bin/build_roctracer.sh +++ b/bin/build_roctracer.sh @@ -5,14 +5,14 @@ # --- Start standard header to set AOMP environment variables ---- -realpath=`realpath $0` -thisdir=`dirname $realpath` -. $thisdir/aomp_common_vars +realpath=$(realpath "$0") +thisdir=$(dirname "$realpath") +. "$thisdir/aomp_common_vars" # --- end standard header ---- INSTALL_ROCTRACE=${INSTALL_ROCTRACE:-$AOMP_INSTALL_DIR} export HIP_CLANG_PATH=$LLVM_INSTALL_LOC/bin -echo $HIP_CLANG_PATH +echo "$HIP_CLANG_PATH" export ROCM_PATH=$ROCM_DIR # Needed for systems that have both AMD and Nvidia cards installed. @@ -36,39 +36,30 @@ if [ "$1" == "-h" ] || [ "$1" == "help" ] || [ "$1" == "-help" ] ; then exit fi -if [ ! -d $AOMP_REPOS/$AOMP_TRACE_REPO_NAME ] ; then +if [ ! -d "$AOMP_REPOS/$AOMP_TRACE_REPO_NAME" ] ; then echo "ERROR: Missing repository $AOMP_REPOS/$AOMP_TRACE_REPO_NAME" echo " Are environment variables AOMP_REPOS and AOMP_TRACE_REPO_NAME set correctly?" exit 1 fi -# Make sure we can update the install directory -if [ "$1" == "install" ] ; then - $SUDO mkdir -p $INSTALL_ROCTRACE - $SUDO touch $INSTALL_ROCTRACE/testfile - if [ $? != 0 ] ; then - echo "ERROR: No update access to $INSTALL_ROCTRACE" - exit 1 - fi - $SUDO rm $INSTALL_ROCTRACE/testfile -fi +check_writable_installdir "$1" "$INSTALL_ROCTRACE" -patchrepo $AOMP_REPOS/$AOMP_TRACE_REPO_NAME +patchrepo "$AOMP_REPOS/$AOMP_TRACE_REPO_NAME" if [ "$1" != "nocmake" ] && [ "$1" != "install" ] ; then echo " " echo "This is a FRESH START. ERASING any previous builds in $BUILD_AOMP/build_roctracer" echo "Use ""$0 nocmake"" or ""$0 install"" to avoid FRESH START." - echo rm -rf $BUILD_AOMP/build/roctracer - rm -rf $BUILD_AOMP/build/roctracer - CMAKE_WITH_EXPERIMENTAL="" + echo "rm -rf $BUILD_AOMP/build/roctracer" + rm -rf "$BUILD_AOMP/build/roctracer" + CMAKE_WITH_EXPERIMENTAL=() if [ -d "/usr/include/c++/5/experimental" ] ; then - _loc=`which gcc` + _loc=$(which gcc) if [ "$_loc" != "" ] ; then - _gccver=`$_loc --version | grep gcc | cut -d")" -f2 | cut -d"." -f1` - if [ "$_gccver" == "5" ] ; then - CMAKE_WITH_EXPERIMENTAL="-DCMAKE_CXX_FLAGS=-I/usr/include/c++/5/experimental" + _gccver=$($_loc --version | grep gcc | cut -d")" -f2 | cut -d"." -f1) + if [ "$_gccver" == "5" ] ; then + CMAKE_WITH_EXPERIMENTAL=(-DCMAKE_CXX_FLAGS=-I/usr/include/c++/5/experimental) fi fi fi @@ -76,16 +67,24 @@ if [ "$1" != "nocmake" ] && [ "$1" != "install" ] ; then export CMAKE_BUILD_TYPE=$BUILD_TYPE CMAKE_PREFIX_PATH="$ROCM_DIR/include/hsa;$ROCM_DIR/include;$ROCM_DIR/lib;$ROCM_DIR;$LLVM_INSTALL_LOC" export CMAKE_PREFIX_PATH - GFXSEMICOLONS=`echo $GFXLIST | tr ' ' ';' ` + GFXSEMICOLONS=$(echo "$GFXLIST" | tr ' ' ';') export ROCM_PATH=$ROCM_DIR export HIPCC_COMPILE_FLAGS_APPEND="--rocm-path=$ROCM_PATH" - mkdir -p $BUILD_AOMP/build/roctracer - cd $BUILD_AOMP/build/roctracer + mkdir -p "$BUILD_AOMP/build/roctracer" + cd "$BUILD_AOMP/build/roctracer" || exit echo " -----Running roctracer cmake ---- " - ${AOMP_CMAKE} -DCMAKE_INSTALL_LIBDIR=lib -DCMAKE_BUILD_TYPE=$BUILD_TYPE -DCMAKE_INSTALL_PREFIX=$INSTALL_ROCTRACE -DCMAKE_PREFIX_PATH="""$CMAKE_PREFIX_PATH""" $CMAKE_WITH_EXPERIMENTAL $AOMP_ORIGIN_RPATH -DGPU_TARGETS="""$GFXSEMICOLONS""" -DROCM_PATH=$ROCM_DIR $AOMP_REPOS/$AOMP_TRACE_REPO_NAME - if [ $? != 0 ] ; then + + if ! ${AOMP_CMAKE} -DCMAKE_INSTALL_LIBDIR=lib \ + -DCMAKE_BUILD_TYPE="$BUILD_TYPE" \ + -DCMAKE_INSTALL_PREFIX="$INSTALL_ROCTRACE" \ + -DCMAKE_PREFIX_PATH="$CMAKE_PREFIX_PATH" \ + "${CMAKE_WITH_EXPERIMENTAL[@]}" \ + "${AOMP_ORIGIN_RPATH[@]}" \ + -DGPU_TARGETS="$GFXSEMICOLONS" \ + -DROCM_PATH="$ROCM_DIR" \ + "$AOMP_REPOS/$AOMP_TRACE_REPO_NAME"; then echo "ERROR roctracer cmake failed. cmake flags" - echo " $MYCMAKEOPTS" + echo " $(shquot "${MYCMAKEOPTS[@]}")" exit 1 fi fi @@ -94,12 +93,12 @@ if [ "$1" = "cmake" ]; then exit 0 fi -cd $BUILD_AOMP/build/roctracer +cd "$BUILD_AOMP/build/roctracer" || exit echo echo " -----Running make for roctracer ---- " -echo make -j $AOMP_JOB_THREADS -make -j $AOMP_JOB_THREADS -if [ $? != 0 ] ; then +echo "make -j $AOMP_JOB_THREADS" + +if ! make -j "$AOMP_JOB_THREADS"; then echo " " echo "ERROR: make -j $AOMP_JOB_THREADS FAILED" echo "To restart:" @@ -108,26 +107,26 @@ if [ $? != 0 ] ; then exit 1 fi -doxygen=`which doxygen` -if [ ! -z $doxygen ] ; then +doxygen=$(which doxygen) +if [ -n "$doxygen" ] ; then # the roctracer CMakeLists.txt will prepare docs install if doxygen found. # However, the make doc has issues. But if you dont make doc, the install # fails. This 'make doc' will do enough so install does not fail. - echo make -j $AOMP_JOB_THREADS doc - make -j $AOMP_JOB_THREADS doc 2>/dev/null >/dev/null + echo "make -j $AOMP_JOB_THREADS doc" + make -j "$AOMP_JOB_THREADS" doc 2>/dev/null >/dev/null fi # ----------- Install only if asked ---------------------------- -if [ "$1" == "install" ] ; then - cd $BUILD_AOMP/build/roctracer +if [ "$1" == "install" ] ; then + cd "$BUILD_AOMP/build/roctracer" || exit echo " -----Installing to $INSTALL_ROCTRACE/lib ----- " - echo $SUDO make install - $SUDO make install - if [ $? != 0 ] ; then + echo "$SUDO make install " + + if ! $SUDO make install; then echo "ERROR make install failed " exit 1 fi - removepatch $AOMP_REPOS/$AOMP_TRACE_REPO_NAME + removepatch "$AOMP_REPOS/$AOMP_TRACE_REPO_NAME" else echo echo "SUCCESSFUL BUILD, please run: $0 install" diff --git a/bin/build_supp.sh b/bin/build_supp.sh index 17a56085a..7ebc91249 100755 --- a/bin/build_supp.sh +++ b/bin/build_supp.sh @@ -56,19 +56,19 @@ SUPPLEMENTAL_COMPONENTS=${SUPPLEMENTAL_COMPONENTS:-openmpi silo hdf5 fftw ninja} PREREQUISITE_COMPONENTS=${PREREQUISITE_COMPONENTS:-cmake rocmsmilib hwloc aqlprofile rocm-core} # --- Start standard header to set AOMP environment variables ---- -realpath=`realpath $0` -thisdir=`dirname $realpath` -. $thisdir/aomp_common_vars +realpath=$(realpath "$0") +thisdir=$(dirname "$realpath") +. "$thisdir/aomp_common_vars" # --- end standard header ---- FLANG=${FLANG:-flang} function runcmd(){ THISCMD=$1 - if [ $DRYRUN ] ; then + if [ "$DRYRUN" ] ; then echo "$THISCMD" else echo "$THISCMD" - echo "$THISCMD" >>$CMDLOGFILE + echo "$THISCMD" >>"$CMDLOGFILE" $THISCMD rc=$? if [ $rc != 0 ] ; then @@ -82,12 +82,12 @@ function runcmd(){ function runcmdout(){ THISCMD=$1 OUTFILE=$2 - if [ $DRYRUN ] ; then + if [ "$DRYRUN" ] ; then echo "$THISCMD > $OUTFILE" else echo "$THISCMD > $OUTFILE" - echo "$THISCMD > $OUTFILE" >>$CMDLOGFILE - $THISCMD > $OUTFILE + echo "$THISCMD > $OUTFILE" >>"$CMDLOGFILE" + $THISCMD > "$OUTFILE" rc=$? if [ $rc != 0 ] ; then echo "ERROR: The following command failed with return code $rc: " @@ -100,12 +100,12 @@ function runcmdout(){ function runcmdin(){ THISCMD=$1 INFILE=$2 - if [ $DRYRUN ] ; then + if [ "$DRYRUN" ] ; then echo "$THISCMD < $INFILE" else echo "$THISCMD < $INFILE" - echo "$THISCMD < $INFILE" >>$CMDLOGFILE - $THISCMD < $INFILE + echo "$THISCMD < $INFILE" >>"$CMDLOGFILE" + $THISCMD < "$INFILE" rc=$? if [ $rc != 0 ] ; then echo "ERROR: The following command failed with return code $rc: " @@ -118,37 +118,37 @@ function runcmdin(){ function checkversion(){ # inputs: $_linkfrom, $_cname, $CMDLOGFILE, $_version # output: $SKIPBUILD - if [ -L $_linkfrom ] ; then - existing_install_dir=`ls -l $_linkfrom | grep $_cname | awk '{print $NF}'` - if [ -d $existing_install_dir ] ; then + if [ -L "$_linkfrom" ] ; then + existing_install_dir=$(readlink "$_linkfrom") + if [ -d "$existing_install_dir" ] ; then existing_version=${existing_install_dir##*-} if [ "$existing_version" == "$_version" ] ; then echo "Info: Skipping build for $_cname, version $_version already exists" - echo "# skipping build for $_cname, version $_version already exists" >>$CMDLOGFILE + echo "# skipping build for $_cname, version $_version already exists" >>"$CMDLOGFILE" SKIPBUILD=TRUE else echo "Info: creating new version of $_cname $_version" - echo "Info: creating new version of $_cname $_version" >>$CMDLOGFILE + echo "Info: creating new version of $_cname $_version" >>"$CMDLOGFILE" fi else echo "Info: Missing existing_install_dir $existing_install_dir, creating version of $_cname $_version" - echo "# Missing existing_install_dir $existing_install_dir, creating version of $_cname $_version" >>$CMDLOGFILE + echo "# Missing existing_install_dir $existing_install_dir, creating version of $_cname $_version" >>"$CMDLOGFILE" fi fi } function buildopenmpi(){ # Not all builds, trunk for example, install clang into lib/llvm/bin. Fall back on $AOMP/bin. - if [ ! -f $LLVM_INSTALL_LOC/bin/${FLANG} ] ; then + if [ ! -f "$LLVM_INSTALL_LOC/bin/${FLANG}" ] ; then LLVM_INSTALL_LOC=$AOMP - if [ ! -f $LLVM_INSTALL_LOC/bin/${FLANG} ] ; then + if [ ! -f "$LLVM_INSTALL_LOC/bin/${FLANG}" ] ; then LLVM_INSTALL_LOC=$AOMP/lib/llvm - if [ ! -f $LLVM_INSTALL_LOC/bin/${FLANG} ] ; then + if [ ! -f "$LLVM_INSTALL_LOC/bin/${FLANG}" ] ; then echo "Error: buildopenmpi cannot find ${FLANG} executable. Set AOMP to location of $FLANG " exit 1 fi fi fi - if [ ! -d $AOMP_SUPP/hwloc ] ; then + if [ ! -d "$AOMP_SUPP/hwloc" ] ; then echo "Error: 'build_supp.sh openmpi' requires that hwloc is installed at $AOMP_SUPP/hwloc" echo " Please run 'build_supp.sh hwloc' " exit 1 @@ -166,7 +166,7 @@ function buildopenmpi(){ if [ "$SKIPBUILD" == "TRUE" ] ; then return fi - if [ -d $_builddir ] ; then + if [ -d "$_builddir" ] ; then runcmd "rm -rf $_builddir" fi runcmd "mkdir -p $_builddir" @@ -175,7 +175,7 @@ function buildopenmpi(){ runcmd "bzip2 -d openmpi-$_version.tar.bz2" runcmd "tar -xf openmpi-$_version.tar" runcmd "cd openmpi-$_version" - if [ -d $_installdir ] ; then + if [ -d "$_installdir" ] ; then runcmd "rm -rf $_installdir" fi runcmd "mkdir -p $_installdir" @@ -186,11 +186,11 @@ function buildopenmpi(){ runcmd "./configure --with-hwloc=$AOMP_SUPP/hwloc --with-hwloc-libdir=$AOMP_SUPP/hwloc/lib OMPI_CC=$LLVM_INSTALL_LOC/bin/clang OMPI_CXX=$LLVM_INSTALL_LOC/bin/clang++ OMPI_F90=$LLVM_INSTALL_LOC/bin/${FLANG} CXX=$LLVM_INSTALL_LOC/bin/clang++ CC=$LLVM_INSTALL_LOC/bin/clang FC=$LLVM_INSTALL_LOC/bin/${FLANG} --prefix=$_installdir" runcmd "make -j8" runcmd "make install" - if [ -L $_linkfrom ] ; then + if [ -L "$_linkfrom" ] ; then runcmd "rm $_linkfrom" fi runcmd "ln -sf $_installdir $_linkfrom" - echo "# $_linkfrom is now symbolic link to $_installdir " >>$CMDLOGFILE + echo "# $_linkfrom is now symbolic link to $_installdir " >>"$CMDLOGFILE" } function buildninja(){ @@ -205,7 +205,7 @@ function buildninja(){ if [ "$SKIPBUILD" == "TRUE" ] ; then return fi - if [ -d $_builddir ] ; then + if [ -d "$_builddir" ] ; then runcmd "rm -rf $_builddir" fi runcmd "mkdir -p $_builddir" @@ -214,22 +214,22 @@ function buildninja(){ runcmd "tar -xzf v${_version}.tar.gz" runcmd "cd ninja-$_version" _patch_file="$thisdir/patches/ninja-nprocs-v${_version}.patch" - if [ -r $_patch_file ]; then + if [ -r "$_patch_file" ]; then runcmd "cp $_patch_file $_builddir" runcmdin "patch --merge -p1" "$_patch_file" fi - if [ -d $_installdir ] ; then + if [ -d "$_installdir" ] ; then runcmd "rm -rf $_installdir" fi runcmd "mkdir -p $_installdir/bin" runcmd "$AOMP_SUPP/cmake/bin/cmake -Bbuild-cmake" runcmd "$AOMP_SUPP/cmake/bin/cmake --build build-cmake" runcmd "cp -p build-cmake/ninja $_installdir/bin/." - if [ -L $_linkfrom ] ; then + if [ -L "$_linkfrom" ] ; then runcmd "rm $_linkfrom" fi runcmd "ln -sf $_installdir $_linkfrom" - echo "# $_linkfrom is now symbolic link to $_installdir " >>$CMDLOGFILE + echo "# $_linkfrom is now symbolic link to $_installdir " >>"$CMDLOGFILE" } function getrocmpackage(){ @@ -240,7 +240,7 @@ function getrocmpackage(){ _cname="$1" _packagename="$2" _componentversion="$3" - _directory=$(echo $2 | cut -b 1) + _directory=$(echo "$2" | cut -b 1) _version=6.4 _packageversion=6.4.0 _fullversion=60400 @@ -254,51 +254,51 @@ function getrocmpackage(){ if [ "$SKIPBUILD" == "TRUE" ] ; then return fi - if [ -d $_builddir ] ; then + if [ -d "$_builddir" ] ; then runcmd "rm -rf $_builddir" fi runcmd "mkdir -p $_builddir" runcmd "cd $_builddir" - osname=$(cat /etc/os-release | grep -e ^NAME=) + osname=$(grep -e ^NAME= < /etc/os-release) if [[ $osname =~ "Ubuntu" ]]; then # not sure if deb_version is 20 or 22 deb_version="24" - os_version=`grep VERSION_ID /etc/os-release | cut -d"\"" -f2` - [ $os_version == "22.04" ] && deb_version="22" + os_version=$(grep VERSION_ID /etc/os-release | cut -d"\"" -f2) + [ "$os_version" == "22.04" ] && deb_version="22" #https://repo.radeon.com/rocm/apt/6.1/pool/main/h/hsa-amd-aqlprofile6.1.0/hsa-amd-aqlprofile6.1.0_1.0.0.60100.60100-82~${deb_version}_amd64.deb #https://repo.radeon.com/rocm/apt/6.1/pool/main/h/hsa-amd-aqlprofile6.1.0/hsa-amd-aqlprofile6.1.0_1.0.0.60100.60100-82~22.04_amd64.deb - runcmd "wget https://repo.radeon.com/rocm/apt/"$_version"/pool/main/$_directory/"$_packagename$_packageversion"/"$_packagename$_packageversion"_"$_componentversion"."$_fullversion"-"$_buildnumber"~${deb_version}.04_amd64.deb" + runcmd "wget https://repo.radeon.com/rocm/apt/$_version/pool/main/$_directory/$_packagename$_packageversion/$_packagename${_packageversion}_${_componentversion}.${_fullversion}-${_buildnumber}~${deb_version}.04_amd64.deb" - runcmd "dpkg -x "$_packagename$_packageversion"_"$_componentversion"."$_fullversion"-"$_buildnumber"~${deb_version}.04_amd64.deb $_builddir" + runcmd "dpkg -x $_packagename${_packageversion}_${_componentversion}.${_fullversion}-${_buildnumber}~${deb_version}.04_amd64.deb $_builddir" elif [[ $osname =~ "SLES" ]]; then #https://repo.radeon.com/rocm/yum/6.1/main/hsa-amd-aqlprofile6.1.0-1.0.0.60100.60100-82.el7.x86_64.rpm - runcmd "wget https://repo.radeon.com/rocm/zyp/"$_version"/main/"$_packagename$_packageversion"-"$_componentversion"."$_fullversion"-sles156."$_buildnumber".x86_64.rpm" - echo ""$_packagename$_packageversion"-"$_componentversion"."$_fullversion"-sles156."$_buildnumber".x86_64.rpm | cpio -idm" - rpm2cpio "$_packagename$_packageversion"-"$_componentversion"."$_fullversion"-sles156."$_buildnumber".x86_64.rpm | cpio -idm + runcmd "wget https://repo.radeon.com/rocm/zyp/$_version/main/$_packagename$_packageversion-$_componentversion.$_fullversion-sles156.$_buildnumber.x86_64.rpm" + echo "$_packagename$_packageversion-$_componentversion.$_fullversion-sles156.$_buildnumber.x86_64.rpm | cpio -idm" + rpm2cpio "$_packagename$_packageversion-$_componentversion.$_fullversion-sles156.$_buildnumber.x86_64.rpm" | cpio -idm else - runcmd "wget https://repo.radeon.com/rocm/rhel8/"$_version"/main/"$_packagename$_packageversion"-"$_componentversion"."$_fullversion"-"$_buildnumber".el8.x86_64.rpm" - echo ""$_packagename$_packageversion"-"$_componentversion"."$_fullversion"-"$_buildnumber".el8.x86_64.rpm | cpio -idm" - rpm2cpio "$_packagename$_packageversion"-"$_componentversion"."$_fullversion"-"$_buildnumber".el8.x86_64.rpm | cpio -idm + runcmd "wget https://repo.radeon.com/rocm/rhel8/$_version/main/$_packagename$_packageversion-$_componentversion.$_fullversion-$_buildnumber.el8.x86_64.rpm" + echo "$_packagename$_packageversion-$_componentversion.$_fullversion-$_buildnumber.el8.x86_64.rpm | cpio -idm" + rpm2cpio "$_packagename$_packageversion-$_componentversion.$_fullversion-$_buildnumber.el8.x86_64.rpm" | cpio -idm fi - if [ -d $_installdir ] ; then + if [ -d "$_installdir" ] ; then runcmd "rm -rf $_installdir" fi if [ "$_cname" == "rocm-core" ] ; then runcmd "mkdir -p $_installdir" - runcmd "cp -rp $_builddir/opt/rocm-"$_packageversion/." $_installdir" + runcmd "cp -rp $_builddir/opt/rocm-$_packageversion/. $_installdir" else runcmd "mkdir -p $_installdir/lib" runcmd "cd $_installdir" - runcmd "cp -rp $_builddir/opt/rocm-"$_packageversion"/lib $_installdir" + runcmd "cp -rp $_builddir/opt/rocm-$_packageversion/lib $_installdir" fi - if [ -L $_linkfrom ] ; then + if [ -L "$_linkfrom" ] ; then runcmd "rm $_linkfrom" fi runcmd "ln -sf $_installdir $_linkfrom" #runcmd "rm -rf $_builddir" - echo "# $_linkfrom is now symbolic link to $_installdir " >>$CMDLOGFILE + echo "# $_linkfrom is now symbolic link to $_installdir " >>"$CMDLOGFILE" } function buildhdf5(){ @@ -314,7 +314,7 @@ function buildhdf5(){ return fi - if [ -d $_builddir ] ; then + if [ -d "$_builddir" ] ; then runcmd "rm -rf $_builddir" fi runcmd "mkdir -p $_builddir" @@ -323,18 +323,18 @@ function buildhdf5(){ runcmd "bzip2 -d hdf5-$_version.tar.bz2" runcmd "tar -xf hdf5-$_version.tar" runcmd "cd hdf5-$_version" - if [ -d $_installdir ] ; then + if [ -d "$_installdir" ] ; then runcmd "rm -rf $_installdir" fi runcmd "mkdir -p $_installdir" runcmd "./configure --enable-fortran --prefix=$_installdir" runcmd "make -j8" runcmd "make install" - if [ -L $_linkfrom ] ; then + if [ -L "$_linkfrom" ] ; then runcmd "rm $_linkfrom" fi runcmd "ln -sf $_installdir $_linkfrom" - echo "# $_linkfrom is now symbolic link to $_installdir " >>$CMDLOGFILE + echo "# $_linkfrom is now symbolic link to $_installdir " >>"$CMDLOGFILE" } function buildsilo(){ @@ -349,7 +349,7 @@ function buildsilo(){ return fi - if [ -d $_builddir ] ; then + if [ -d "$_builddir" ] ; then runcmd "rm -rf $_builddir" fi runcmd "mkdir -p $_builddir" @@ -359,18 +359,18 @@ function buildsilo(){ runcmd "wget https://software.llnl.gov/Silo/ghpages/releases/silo-$_version.tar.xz" runcmd "tar -x --xz -f silo-$_version.tar.xz" runcmd "cd silo-$_version" - if [ -d $_installdir ] ; then + if [ -d "$_installdir" ] ; then runcmd "rm -rf $_installdir" fi runcmd "mkdir -p $_installdir" runcmd "./configure --prefix=$_installdir" runcmd "make -j8" runcmd "make install" - if [ -L $_linkfrom ] ; then + if [ -L "$_linkfrom" ] ; then runcmd "rm $_linkfrom" fi runcmd "ln -sf $_installdir $_linkfrom" - echo "# $_linkfrom is now symbolic link to $_installdir " >>$CMDLOGFILE + echo "# $_linkfrom is now symbolic link to $_installdir " >>"$CMDLOGFILE" } function buildfftw(){ @@ -385,7 +385,7 @@ function buildfftw(){ return fi - if [ -d $_builddir ] ; then + if [ -d "$_builddir" ] ; then runcmd "rm -rf $_builddir" fi runcmd "mkdir -p $_builddir" @@ -393,7 +393,7 @@ function buildfftw(){ runcmd "wget http://www.fftw.org/fftw-$_version.tar.gz" runcmd "tar -xzf fftw-$_version.tar.gz" runcmd "cd fftw-$_version" - if [ -d $_installdir ] ; then + if [ -d "$_installdir" ] ; then runcmd "rm -rf $_installdir" fi runcmd "mkdir -p $_installdir" @@ -404,11 +404,11 @@ function buildfftw(){ runcmd "./configure --prefix=$_installdir --enable-shared --enable-threads --enable-sse2 --enable-avx --enable-float" runcmd "make -j8" runcmd "make install" - if [ -L $_linkfrom ] ; then + if [ -L "$_linkfrom" ] ; then runcmd "rm $_linkfrom" fi runcmd "ln -sf $_installdir $_linkfrom" - echo "# $_linkfrom is now symbolic link to $_installdir " >>$CMDLOGFILE + echo "# $_linkfrom is now symbolic link to $_installdir " >>"$CMDLOGFILE" } @@ -424,7 +424,7 @@ function buildcmake(){ return fi - if [ -d $_builddir ] ; then + if [ -d "$_builddir" ] ; then runcmd "rm -rf $_builddir" fi runcmd "mkdir -p $_builddir" @@ -432,18 +432,18 @@ function buildcmake(){ runcmd "wget https://github.com/Kitware/CMake/releases/download/v$_version/cmake-$_version.tar.gz" runcmd "tar -xzf cmake-$_version.tar.gz" runcmd "cd cmake-$_version" - if [ -d $_installdir ] ; then + if [ -d "$_installdir" ] ; then runcmd "rm -rf $_installdir" fi runcmd "mkdir -p $_installdir" runcmd "./bootstrap --parallel=8 --prefix=$_installdir" runcmd "make -j8" runcmd "make install" - if [ -L $_linkfrom ] ; then + if [ -L "$_linkfrom" ] ; then runcmd "rm $_linkfrom" fi runcmd "ln -sf $_installdir $_linkfrom" - echo "# $_linkfrom is now symbolic link to $_installdir " >>$CMDLOGFILE + echo "# $_linkfrom is now symbolic link to $_installdir " >>"$CMDLOGFILE" } function buildrocmsmilib(){ @@ -458,7 +458,7 @@ function buildrocmsmilib(){ return fi - if [ -d $_builddir ] ; then + if [ -d "$_builddir" ] ; then runcmd "rm -rf $_builddir" fi runcmd "mkdir -p $_builddir" @@ -468,17 +468,17 @@ function buildrocmsmilib(){ runcmd "mkdir -p build" runcmd "cd build" runcmd "$AOMP_SUPP/cmake/bin/cmake -DCMAKE_INSTALL_PREFIX=$_installdir .." - if [ -d $_installdir ] ; then + if [ -d "$_installdir" ] ; then runcmd "rm -rf $_installdir" fi runcmd "mkdir -p $_installdir" runcmd "make -j8" runcmd "make install" - if [ -L $_linkfrom ] ; then + if [ -L "$_linkfrom" ] ; then runcmd "rm $_linkfrom" fi runcmd "ln -sf $_installdir $_linkfrom" - echo "# $_linkfrom is now symbolic link to $_installdir " >>$CMDLOGFILE + echo "# $_linkfrom is now symbolic link to $_installdir " >>"$CMDLOGFILE" } function buildhwloc(){ @@ -493,13 +493,13 @@ function buildhwloc(){ return fi - if [ ! -d $AOMP_SUPP/rocmsmilib/lib ] && [ ! -d $AOMP_SUPP/rocmsmilib/lib64 ]; then + if [ ! -d "$AOMP_SUPP/rocmsmilib/lib" ] && [ ! -d "$AOMP_SUPP/rocmsmilib/lib64" ]; then echo "ERROR: Must build rocmsmilib before hwloc. Try:" echo " $0 rocmsmilib" - echo "#ERROR: You must build rocmsmilib before hwloc because static build of hwloc depends on rocsmilib">>$CMDLOGFILE + echo "#ERROR: You must build rocmsmilib before hwloc because static build of hwloc depends on rocsmilib">>"$CMDLOGFILE" exit 1 fi - if [ -d $_builddir ] ; then + if [ -d "$_builddir" ] ; then runcmd "rm -rf $_builddir" fi runcmd "mkdir -p $_builddir" @@ -509,23 +509,23 @@ function buildhwloc(){ runcmd "git checkout v$_version" runcmd "./autogen.sh" runcmd "./configure --prefix=$_installdir --with-pic=yes --enable-static=yes --enable-shared=no --disable-io --disable-libudev --disable-libxml2 --with-rocm=$AOMP_SUPP/rocsmilib" - if [ -d $_installdir ] ; then + if [ -d "$_installdir" ] ; then runcmd "rm -rf $_installdir" fi runcmd "mkdir -p $_installdir" runcmd "make -j8" runcmd "make install" - if [ -L $_linkfrom ] ; then + if [ -L "$_linkfrom" ] ; then runcmd "rm $_linkfrom" fi runcmd "ln -sf $_installdir $_linkfrom" - echo "# $_linkfrom is now symbolic link to $_installdir " >>$CMDLOGFILE + echo "# $_linkfrom is now symbolic link to $_installdir " >>"$CMDLOGFILE" } #--------------------------- Main script starts here ----------------------- sname=${0##*/} CMDLOGFILE=$AOMP_SUPP_BUILD/cmdlog -mkdir -p $AOMP_SUPP_BUILD +mkdir -p "$AOMP_SUPP_BUILD" if [ "$1" == "-h" ] ; then build_supp_help exit 0 @@ -543,39 +543,41 @@ if [ "$1" == "" ] ; then _components="$SUPPLEMENTAL_COMPONENTS" fi else - _components=$@ + _components=$* fi # save the current directory curdir=$PWD for _component in $_components ; do - _thisdate=`date` - echo "" >>$CMDLOGFILE - echo "# -------------------------------------------------" >>$CMDLOGFILE - echo "# $_component build started on $_thisdate" >>$CMDLOGFILE - if [ $_component == "openmpi" ] ; then + _thisdate=$(date) + { + echo "" + echo "# -------------------------------------------------" + echo "# $_component build started on $_thisdate" + } >> "$CMDLOGFILE" + if [ "$_component" == "openmpi" ] ; then buildopenmpi - elif [ $_component == "silo" ] ; then + elif [ "$_component" == "silo" ] ; then buildsilo - elif [ $_component == "hdf5" ] ; then + elif [ "$_component" == "hdf5" ] ; then buildhdf5 - elif [ $_component == "fftw" ] ; then + elif [ "$_component" == "fftw" ] ; then buildfftw - elif [ $_component == "hwloc" ] ; then + elif [ "$_component" == "hwloc" ] ; then buildhwloc - elif [ $_component == "cmake" ] ; then + elif [ "$_component" == "cmake" ] ; then buildcmake - elif [ $_component == "rocmsmilib" ] ; then + elif [ "$_component" == "rocmsmilib" ] ; then buildrocmsmilib - elif [ $_component == "ninja" ] ; then + elif [ "$_component" == "ninja" ] ; then buildninja - elif [ $_component == "aqlprofile" ] ; then + elif [ "$_component" == "aqlprofile" ] ; then getrocmpackage aqlprofile hsa-amd-aqlprofile 1.0.0 - elif [ $_component == "openclicdloader" ] ; then + elif [ "$_component" == "openclicdloader" ] ; then getrocmpackage openclicdloader rocm-opencl-icd-loader 1.2 - elif [ $_component == "rocm-core" ] ; then + elif [ "$_component" == "rocm-core" ] ; then getrocmpackage rocm-core rocm-core 6.4.0 else - echo "ERROR: Invalid component name $_component" >>$CMDLOGFILE + echo "ERROR: Invalid component name $_component" >>"$CMDLOGFILE" echo "ERROR: Invalid component name $_component" if [ "$sname" == "build_prereq.sh" ] ; then echo " Must be a subset of: $PREREQUISITE_COMPONENTS" @@ -584,9 +586,8 @@ for _component in $_components ; do fi exit 0 fi - _thisdate=`date` - echo "# DONE: successful build of $_component on $_thisdate " >>$CMDLOGFILE + _thisdate=$(date) + echo "# DONE: successful build of $_component on $_thisdate " >>"$CMDLOGFILE" done -cd $curdir - +cd "$curdir" || exit diff --git a/bin/build_supp_llvm-flang.sh b/bin/build_supp_llvm-flang.sh index 12a64ad6d..d7c70accc 100755 --- a/bin/build_supp_llvm-flang.sh +++ b/bin/build_supp_llvm-flang.sh @@ -4,15 +4,15 @@ # supplemental components with the flang driver. # # --- Start standard header to set AOMP environment variables ---- -realpath=`realpath $0` -thisdir=`dirname $realpath` -. $thisdir/aomp_common_vars +realpath=$(realpath "$0") +thisdir=$(dirname "$realpath") +. "$thisdir/aomp_common_vars" # --- end standard header ---- # CLEAN_SUPP=${CLEAN_SUPP:-1} # set if clean build needed in nightly tests -cd $AOMP_REPOS -cd aomp +cd "$AOMP_REPOS" || exit +cd aomp || exit export AOMP_SUPP=$HOME/local/llvm-flang export FLANG=flang @@ -27,10 +27,10 @@ if [ ! -r "$AOMP/bin/$FLANG" ]; then exit 1 fi -if [ $CLEAN_SUPP ]; then rm -rf $AOMP_SUPP; fi -mkdir -p $AOMP_SUPP +if [ "$CLEAN_SUPP" ]; then rm -rf "$AOMP_SUPP"; fi +mkdir -p "$AOMP_SUPP" # symlink to local prereqs that already exist, can be used -if [ ! -r $AOMP_SUPP/cmake ]; then ln -sf ../cmake $AOMP_SUPP; fi -if [ ! -r $AOMP_SUPP/ninja ]; then ln -sf ../ninja $AOMP_SUPP; fi -if [ ! -r $AOMP_SUPP/hwloc ]; then ln -sf ../hwloc $AOMP_SUPP; fi +if [ ! -r "$AOMP_SUPP/cmake" ]; then ln -sf ../cmake "$AOMP_SUPP"; fi +if [ ! -r "$AOMP_SUPP/ninja" ]; then ln -sf ../ninja "$AOMP_SUPP"; fi +if [ ! -r "$AOMP_SUPP/hwloc" ]; then ln -sf ../hwloc "$AOMP_SUPP"; fi AOMP_USE_CCACHE=0 bin/build_supp.sh diff --git a/bin/check_amdgpu_modversion.sh b/bin/check_amdgpu_modversion.sh index 2660ae069..4af2e7231 100755 --- a/bin/check_amdgpu_modversion.sh +++ b/bin/check_amdgpu_modversion.sh @@ -4,14 +4,14 @@ # # --- Start standard header to set AOMP environment variables ---- -realpath=`realpath $0` -thisdir=`dirname $realpath` -[ -f $thisdir/aomp_common_vars ] && . $thisdir/aomp_common_vars +realpath=$(realpath "$0") +thisdir=$(dirname "$realpath") +[ -f "$thisdir/aomp_common_vars" ] && . "$thisdir/aomp_common_vars" # --- end standard header ---- -which dpkg 2>/dev/null >/dev/null -if [ $? == 0 ] ; then -_packaged_amdgpu_ver=`dpkg -l amdgpu-dkms 2>/dev/null | tail -n 1 | cut -d":" -f2 | cut -d"." -f1-3` + +if which dpkg 2>/dev/null >/dev/null; then +_packaged_amdgpu_ver=$(dpkg -l amdgpu-dkms 2>/dev/null | tail -n 1 | cut -d":" -f2 | cut -d"." -f1-3) else _packaged_amdgpu_ver="" fi @@ -21,13 +21,13 @@ else ROCM_EXPECTED_MODVERSION=$_packaged_amdgpu_ver fi _llvm_install_dir=${AOMP:-/opt/rocm/llvm} -which modinfo >/dev/null 2>/dev/null -if [ $? == 0 ] ; then - _amdgpu_mod_version=`modinfo -F version amdgpu` - if [ ! -z $_amdgpu_mod_version ] ; then + +if which modinfo >/dev/null 2>/dev/null; then + _amdgpu_mod_version=$(modinfo -F version amdgpu) + if [ -n "$_amdgpu_mod_version" ] ; then if [ "$_amdgpu_mod_version" != "$ROCM_EXPECTED_MODVERSION" ] ; then - if [ -f $_llvm_install_dir/bin/aompversion ] ; then - _aomp_version_string=`$AOMP/bin/aompversion` + if [ -f "$_llvm_install_dir/bin/aompversion" ] ; then + _aomp_version_string=$("$AOMP"/bin/aompversion) _phrase="for AOMP version $_aomp_version_string" else _phrase="for $_llvm_install_dir" @@ -36,7 +36,7 @@ if [ $? == 0 ] ; then echo "WARNING: Unexpected version of amdgpu kernel module found on this system: $_amdgpu_mod_version" echo " The expected version $_phrase is $ROCM_EXPECTED_MODVERSION" echo " Execution of compiled binaries may have issues on this system. For best results" - echo " consider installing the latest "amdgpu-dkms" package from ROCm and reboot." + echo " consider installing the latest \"amdgpu-dkms\" package from ROCm and reboot." echo " Command to check amdgpu kernel module version: modinfo -F version amdgpu" echo exit 0 # returning non zero fails the run_rocm_test.sh diff --git a/bin/check_omptests.sh b/bin/check_omptests.sh index 79495bde4..453f5671b 100755 --- a/bin/check_omptests.sh +++ b/bin/check_omptests.sh @@ -4,12 +4,12 @@ # Assumes run_omptests.sh has been executed. # # --- Start standard header to set AOMP environment variables ---- -realpath=`realpath $0` -thisdir=`dirname $realpath` -. $thisdir/aomp_common_vars +realpath=$(realpath "$0") +thisdir=$(dirname "$realpath") +. "$thisdir/aomp_common_vars" # --- end standard header ---- -pushd $AOMP_REPOS_TEST/$AOMP_OMPTESTS_REPO_NAME +pushd "$AOMP_REPOS_TEST/$AOMP_OMPTESTS_REPO_NAME" || exit rm -f runtime-fails.txt rm -f compile-fails.txt rm -f passing-tests.txt @@ -19,25 +19,25 @@ compile_fails=0 runtime_fails=0 # Count tests that start with t- or test- -total_tests=$(ls | grep "\(^t\-*\|^test\-\)" | wc -l) +# shellcheck disable=SC2010 # 'ls' is OK here +total_tests=$(ls -U1q | grep -Ec '^t-|^test-') # Count compile/runtime fails and successful tests for directory in ./t-*/; do - pushd $directory > /dev/null - testname=`basename $(pwd)` - diff results/stdout expected > /dev/null - return_code=$? - if [ $return_code != 0 ] && [ -e results/a.out ]; then - reason=`grep -E 'Killed' results/stderr` - echo $testname $reason >> $AOMP_REPOS_TEST/$AOMP_OMPTESTS_REPO_NAME/runtime-fails.txt + pushd "$directory" > /dev/null || exit + testname=$(basename "$(pwd)") + + if ! diff results/stdout expected > /dev/null && [ -e results/a.out ]; then + reason=$(grep -E 'Killed' results/stderr) + echo "$testname $reason" >> "$AOMP_REPOS_TEST/$AOMP_OMPTESTS_REPO_NAME/runtime-fails.txt" elif ! [[ -e results/a.out ]]; then - echo $testname >> $AOMP_REPOS_TEST/$AOMP_OMPTESTS_REPO_NAME/compile-fails.txt + echo "$testname" >> "$AOMP_REPOS_TEST/$AOMP_OMPTESTS_REPO_NAME/compile-fails.txt" else if [ -e results/a.out ]; then - echo $testname >> $AOMP_REPOS_TEST/$AOMP_OMPTESTS_REPO_NAME/passing-tests.txt + echo "$testname" >> "$AOMP_REPOS_TEST/$AOMP_OMPTESTS_REPO_NAME/passing-tests.txt" fi fi - popd > /dev/null + popd > /dev/null || exit done # Add skip_list tests to runtime fails @@ -55,7 +55,8 @@ fi # Add tests that were skipped to avoid soft hang echo echo -----Runtime Fails----- -runtime_fails=$(ls | grep "^test\-" | wc -l) +# shellcheck disable=SC2010 # 'ls' is OK here +runtime_fails=$(ls -U1q | grep -Ec '^test-') if [ -e runtime-fails.txt ]; then echo cat runtime-fails.txt @@ -76,29 +77,34 @@ if [ "$passing_tests" == "$total_tests" ]; then pass_rate=100 else # The calculation results in extra zeros that can be removed with sed - pass_rate=`bc -l <<< "scale=4; ($passing_tests/$total_tests) * 100" | sed -E "s/([0-9]+\.[0-9]+)00/\1/g"` + pass_rate=$(bc -l <<< "scale=4; ($passing_tests/$total_tests) * 100" | sed -E "s/([0-9]+\.[0-9]+)00/\1/g") fi echo -echo ----- Results ----- -echo Compile Fails: $compile_fails -echo Runtime Fails: $runtime_fails +echo "----- Results -----" +echo "Compile Fails: $compile_fails" +echo "Runtime Fails: $runtime_fails" -echo Successful Tests: $passing_tests/$total_tests -echo Pass Rate: $pass_rate% -echo ------------------- +echo "Successful Tests: $passing_tests/$total_tests" +echo "Pass Rate: $pass_rate%" +echo "-------------------" echo +if [ -z "$log" ]; then + echo "Log file not set! Exiting." >&2 + exit 1 +fi + # Log Results { echo - echo ----- Results ----- - echo Compile Fails: $compile_fails - echo Runtime Fails: $runtime_fails + echo "----- Results -----" + echo "Compile Fails: $compile_fails" + echo "Runtime Fails: $runtime_fails" - echo Successful Tests: $passing_tests/$total_tests - echo Pass Rate: $pass_rate% - echo ------------------- + echo "Successful Tests: $passing_tests/$total_tests" + echo "Pass Rate: $pass_rate%" + echo "-------------------" echo -} >> omptests_run_$log -popd +} >> "omptests_run_$log" +popd || exit diff --git a/bin/clone_aomp.sh b/bin/clone_aomp.sh index 2f747dc7d..eadd8787b 100755 --- a/bin/clone_aomp.sh +++ b/bin/clone_aomp.sh @@ -5,14 +5,14 @@ # # --- Start standard header to set AOMP environment variables ---- -realpath=`realpath $0` -thisdir=`dirname $realpath` +realpath=$(realpath "$0") +thisdir=$(dirname "$realpath") export AOMP_USE_CCACHE=${AOMP_USE_CCACHE:-0} -. $thisdir/aomp_common_vars +. "$thisdir/aomp_common_vars" # --- end standard header ---- thischk="$AOMP_REPOS/$AOMP_REPO_NAME/bin" -thischk=`realpath $thischk` +thischk=$(realpath "$thischk") if [ "$thisdir" != "$thischk" ] ; then echo echo "ERROR: This clone_aomp.sh script is found in directory $thisdir " @@ -28,9 +28,9 @@ fi function list_repo(){ repodirname=$AOMP_REPOS/$reponame -cd $repodirname -abranch=`git branch | awk '/\*/ { print $2; }'` -echo `git config --get remote.origin.url` " desired: " $COBRANCH " actual: " $abranch " " `git log --numstat --format="%h" |head -1` +cd "$repodirname" || exit +abranch=$(git branch | awk '/\*/ { print $2; }') +echo "$(git config --get remote.origin.url)" " desired: " "$COBRANCH" " actual: " "$abranch" " " "$(git log --numstat --format="%h" |head -1)" } function clone_or_pull(){ @@ -39,91 +39,91 @@ list_repo return fi +function clone_failed() { + echo "git clone failed for: $repodirname" + exit 1 +} + repodirname=$AOMP_REPOS/$reponame echo -if [ -d $repodirname ] ; then +if [ -d "$repodirname" ] ; then echo "--- Pulling updates to existing dir $repodirname ----" echo " We assume this came from an earlier clone of $repo_web_location/$repogitname" # FIXME look in $repodir/.git/config to be sure - cd $repodirname + cd "$repodirname" || exit if [ "$STASH_BEFORE_PULL" == "YES" ] ; then git stash -u fi echo "git pull " - git pull - if [ $? != 0 ] && [ "$IGNORE_GIT_ERROR" != 1 ] ; then + if ! git pull && [ "$IGNORE_GIT_ERROR" != 1 ] ; then echo "git pull failed for: $repodirname" exit 1 fi echo "cd $repodirname ; git checkout $COBRANCH" - git checkout $COBRANCH - if [ $? != 0 ] && [ "$IGNORE_GIT_ERROR" != 1 ] ; then + if ! git checkout "$COBRANCH" && [ "$IGNORE_GIT_ERROR" != 1 ] ; then echo "git checkout failed for: $repodirname" exit 1 fi echo "git pull " - git pull - if [ $? != 0 ] && [ "$IGNORE_GIT_ERROR" != 1 ]; then + if ! git pull && [ "$IGNORE_GIT_ERROR" != 1 ]; then echo "git pull failed for: $repodirname" exit 1 fi else - echo --- NEW CLONE of repo $repogitname to $repodirname ---- - cd $AOMP_REPOS + echo "--- NEW CLONE of repo $repogitname to $repodirname ----" + cd "$AOMP_REPOS" || exit if [ "$SINGLE_BRANCH" == 1 ]; then - echo git clone -b $COBRANCH --depth=1 --single-branch $repo_web_location/$repogitname $reponame - git clone -b $COBRANCH --depth=1 --single-branch $repo_web_location/$repogitname $reponame - else - echo git clone -b $COBRANCH $repo_web_location/$repogitname $reponame - git clone -b $COBRANCH $repo_web_location/$repogitname $reponame - fi - if [ $? != 0 ] ; then - echo "git clone failed for: $repodirname" - exit 1 + echo "git clone -b $COBRANCH --depth=1 --single-branch $repo_web_location/$repogitname $reponame" + if ! git clone -b "$COBRANCH" --depth=1 --single-branch "$repo_web_location/$repogitname" "$reponame"; then + clone_failed + fi else - echo "cd $repodirname ; git checkout $COBRANCH" - cd $repodirname - git checkout $COBRANCH + echo "git clone -b $COBRANCH $repo_web_location/$repogitname $reponame" + if ! git clone -b "$COBRANCH" "$repo_web_location/$repogitname" "$reponame"; then + clone_failed + fi fi + echo "cd $repodirname ; git checkout $COBRANCH" + cd "$repodirname" || exit + git checkout "$COBRANCH" fi -if [ -d $repodirname ] ; then - echo cd $repodirname - cd $repodirname +if [ -d "$repodirname" ] ; then + echo "cd $repodirname" + cd "$repodirname" || exit if [ "$COSHAKEY" != "" ] ; then - echo git checkout $COSHAKEY - git checkout $COSHAKEY + echo "git checkout $COSHAKEY" + git checkout "$COSHAKEY" fi - echo git status + echo "git status" git status fi } function list_repo_from_manifest(){ - logcommit=`git log -1 | grep "^commit" | cut -d" " -f2 | xargs` + logcommit=$(git log -1 | grep "^commit" | cut -d" " -f2 | xargs) thiscommit=${logcommit:0:12} - thisdate=`git log -1 --pretty=fuller | grep "^CommitDate:" | cut -d":" -f2- | xargs | cut -d" " -f2-` - get_monthnumber $thisdate - thisday=`echo $thisdate | cut -d" " -f2` - thisyear=`echo $thisdate | cut -d" " -f4` - printf -v thisdatevar "%4u-%2s-%02u" $thisyear $monthnumber $thisday - author=`git log -1 --pretty=fuller | grep "^Commit:" | cut -d":" -f2- | cut -d"<" -f1 | xargs` - forauthor=`git log -1 --pretty=fuller | grep "^Author:" | cut -d":" -f2- | cut -d"<" -f1 | xargs` + thisdate=$(git log -1 --pretty=fuller | grep "^CommitDate:" | cut -d":" -f2- | xargs | cut -d" " -f2-) + get_monthnumber "$thisdate" + thisday=$(echo "$thisdate" | cut -d" " -f2) + thisyear=$(echo "$thisdate" | cut -d" " -f4) + printf -v thisdatevar "%4u-%2s-%02u" "$thisyear" "$monthnumber" "$thisday" + author=$(git log -1 --pretty=fuller | grep "^Commit:" | cut -d":" -f2- | cut -d"<" -f1 | xargs) + forauthor=$(git log -1 --pretty=fuller | grep "^Author:" | cut -d":" -f2- | cut -d"<" -f1 | xargs) repodirname=$REPO_PATH - HASH=`git log -1 --numstat --format="%h" | head -1` + HASH=$(git log -1 --numstat --format="%h" | head -1) is_hash=0 branch_name=${REPO_RREV} # get the actual branch - actual_branch=`git branch | awk '/\*/ { print $2; }'` + actual_branch=$(git branch | awk '/\*/ { print $2; }') WARNWORD="" if [ "$actual_branch" == "(no" ] || [ "$actual_branch" == "(HEAD" ] || [ "$actual_branch" == "(detached" ] ; then is_hash=1 WARNWORD="hash" - git describe --exact-match --tags > /dev/null 2>&1 # Repo has a tag checked out - if [ $? -eq 0 ]; then - head_tags=`git tag --points-at HEAD` + if git describe --exact-match --tags > /dev/null 2>&1; then + head_tags=$(git tag --points-at HEAD) # If tag is found in list of tags at HEAD, then it is correct. - if [[ "$head_tags" =~ "$branch_name" ]]; then + if [[ "$head_tags" =~ $branch_name ]]; then WARNWORD="tag" thiscommit=$branch_name else @@ -131,10 +131,10 @@ function list_repo_from_manifest(){ thiscommit=$HASH fi else # This is a hash not a tag - actual_hash=`git branch | awk '/\*/ { print $5; }' | cut -d")" -f1` + actual_hash=$(git branch | awk '/\*/ { print $5; }' | cut -d")" -f1) # RHEL 7 'git branch' returns (detached from 123456), try to get hash again. if [ "$actual_hash" == "" ] ; then - actual_hash=`git branch | awk '/\*/ { print $4; }' | cut -d")" -f1` + actual_hash=$(git branch | awk '/\*/ { print $4; }' | cut -d")" -f1) fi revision_regex="^$actual_hash" if [[ ! "$COSHAKEY" =~ $revision_regex ]] ; then @@ -149,29 +149,29 @@ function list_repo_from_manifest(){ else printbranch=${REPO_RREV##*release/} fi - url=`grep url .git/config | grep -v google | grep -v fmtlib | cut -d":" -f2- | cut -d"/" -f3-` - project_name=`echo $url | cut -d"/" -f2- | tr '[:upper:]' '[:lower:]'` + url=$(grep url .git/config | grep -v google | grep -v fmtlib | cut -d":" -f2- | cut -d"/" -f3-) + project_name=$(echo $url | cut -d"/" -f2- | tr '[:upper:]' '[:lower:]') REPO_PROJECT=${REPO_PROJECT%*\.git} if [[ "$REPO_REMOTE" == "githubemu-lightning" ]] ; then REPO_REMOTE="emu" fi #website=`echo $url | cut -d"/" -f1` if [[ "$REPO_REMOTE" == "roc" ]] ; then - manifest_project=`echo ROCm/$REPO_PROJECT | tr '[:upper:]' '[:lower:]'` + manifest_project=$(echo ROCm/$REPO_PROJECT | tr '[:upper:]' '[:lower:]') elif [[ "$REPO_REMOTE" == "emu" ]] ; then - url=`grep url .git/config | cut -d":" -f2- | cut -d"/" -f1- | cut -d"." -f1` - project_name=`echo $url | cut -d"/" -f2- | tr '[:upper:]' '[:lower:]'` - manifest_project=`echo $REPO_PROJECT | tr '[:upper:]' '[:lower:]' | cut -d"." -f1` + url=$(grep url .git/config | cut -d":" -f2- | cut -d"/" -f1- | cut -d"." -f1) + project_name=$(echo $url | cut -d"/" -f2- | tr '[:upper:]' '[:lower:]') + manifest_project=$(echo $REPO_PROJECT | tr '[:upper:]' '[:lower:]' | cut -d"." -f1) elif [[ "$REPO_REMOTE" == "roctools" ]] ; then - manifest_project=`echo ROCm/$REPO_PROJECT | tr '[:upper:]' '[:lower:]'` + manifest_project=$(echo "ROCm/$REPO_PROJECT" | tr '[:upper:]' '[:lower:]') elif [[ "$REPO_REMOTE" == "rocsw" ]] ; then - manifest_project=`echo ROCm/$REPO_PROJECT | tr '[:upper:]' '[:lower:]'` + manifest_project=$(echo "ROCm/$REPO_PROJECT" | tr '[:upper:]' '[:lower:]') elif [[ "$REPO_REMOTE" == "gerritgit" ]] ; then - manifest_project=`echo $REPO_PROJECT | tr '[:upper:]' '[:lower:]'` + manifest_project=$(echo "$REPO_PROJECT" | tr '[:upper:]' '[:lower:]') elif [[ "$REPO_REMOTE" == "hwloc" ]] ; then - manifest_project=`echo open-mpi/$REPO_PROJECT | tr '[:upper:]' '[:lower:]'` + manifest_project=$(echo "open-mpi/$REPO_PROJECT" | tr '[:upper:]' '[:lower:]') else - manifest_project=`echo $REPO_REMOTE/$REPO_PROJECT | tr '[:upper:]' '[:lower:]'` + manifest_project=$(echo "$REPO_REMOTE/$REPO_PROJECT" | tr '[:upper:]' '[:lower:]') fi #tr '[:upper:]' '[:lower:]'` if [[ "$manifest_project" != "$project_name" ]] ; then @@ -179,11 +179,13 @@ function list_repo_from_manifest(){ echo " Manifest project: $manifest_project" WARNWORD="!REPO!" fi - printf "%6s %14s %21s %25s %12s %10s %18s %18s %8s\n" $REPO_REMOTE $printbranch $REPO_PATH ${REPO_PROJECT} $thiscommit $thisdatevar "$author" "$forauthor" "$WARNWORD" + printf "%6s %14s %21s %25s %12s %10s %18s %18s %8s\n" "$REPO_REMOTE" \ + "$printbranch" "$REPO_PATH" "${REPO_PROJECT}" "$thiscommit" \ + "$thisdatevar" "$author" "$forauthor" "$WARNWORD" } function get_monthnumber() { - case $(echo ${1:0:3} | tr '[a-z]' '[A-Z]') in + case $(echo "${1:0:3}" | tr '[:lower:]' '[:upper:]') in JAN) monthnumber="01" ;; FEB) monthnumber="02" ;; MAR) monthnumber="03" ;; @@ -214,7 +216,7 @@ if [[ "$AOMP_VERSION" == "13.1" ]] || [[ $AOMP_MAJOR_VERSION -gt 13 ]] ; then manifest_file=$thisdir/../manifests/aompi_${AOMP_VERSION}.xml fi else - abranch=`git branch | awk '/\*/ { print $2; }'` + abranch=$(git branch | awk '/\*/ { print $2; }') # Use release manifest if on release branch if [ "$abranch" == "aomp-${AOMP_VERSION_STRING}" ]; then manifest_file=$thisdir/../manifests/aomp_${AOMP_VERSION_STRING}.xml @@ -227,43 +229,42 @@ if [[ "$AOMP_VERSION" == "13.1" ]] || [[ $AOMP_MAJOR_VERSION -gt 13 ]] ; then fi fi echo "USED manifest file: $manifest_file" - if [ ! -f $manifest_file ] ; then + if [ ! -f "$manifest_file" ] ; then echo "ERROR manifest file missing: $manifest_file" exit 1 fi tmpfile=/tmp/mlines$$ # Manifest file must be one project line per repo - cat $manifest_file | grep project > $tmpfile + grep project < "$manifest_file" > "$tmpfile" if [ "$1" == "list" ] ; then - printf "MANIFEST FILE: %40s\n" $manifest_file + printf "MANIFEST FILE: %40s\n" "$manifest_file" printf "%6s %14s %21s %25s %12s %10s %18s %18s\n" "repo" "branch" "path" "repo name" "last hash" "updated" "commitor" "for author" printf "%6s %14s %21s %25s %12s %10s %18s %18s\n" "----" "------" "----" "---------" "---------" "-------" "--------" "----------" # printf "%6s %14s %24s %25s %12s %10s %18s %18s %8s\n" $REPO_REMOTE $printbranch $REPO_PATH ${REPO_PROJECT} $thiscommit $thisdatevar "$author" "$forauthor" "$WARNWORD" fi - while read line ; do + while read -r line; do line_is_good=1 - remote=`echo $line | grep remote | cut -d"=" -f2` + remote=$(echo "$line" | grep remote | cut -d"=" -f2) sha_key_used=0 COSHAKEY="" - for field in `echo $line` ; do - if [ -z "${field##*remote=*}" ] ; then - # strip off = and double quotes - remote=$(eval echo `echo $field | cut -d= -f2 `) + for field in $line; do + if [[ "$field" =~ remote=\"([^\"]*)\" ]]; then + remote=${BASH_REMATCH[1]} fi - if [ -z "${field##*name=*}" ] ; then - name=$(eval echo `echo $field | cut -d= -f2 `) + if [[ "$field" =~ name=\"([^\"]*)\" ]]; then + name=${BASH_REMATCH[1]} fi - if [ -z "${field##*path=*}" ] ; then - path=$(eval echo `echo $field | cut -d= -f2 `) + if [[ "$field" =~ path=\"([^\"]*)\" ]]; then + path=${BASH_REMATCH[1]} fi - if [ -z "${field##*upstream=*}" ] ; then - COBRANCH=$(eval echo `echo $field | cut -d= -f2 `) + if [[ "$field" =~ upstream=\"([^\"]*)\" ]]; then + COBRANCH=${BASH_REMATCH[1]} sha_key_used=1 fi - if [ -z "${field##*revision=*}" ] && [ "$sha_key_used" == 1 ] ; then - COSHAKEY=$(eval echo `echo $field | cut -d= -f2 `) - elif [ -z "${field##*revision=*}" ]; then - COBRANCH=$(eval echo `echo $field | cut -d= -f2 `) + if [[ "$field" =~ revision=\"([^\"]*)\" ]] && [ "$sha_key_used" == 1 ]; then + COSHAKEY=${BASH_REMATCH[1]} + elif [[ "$field" =~ revision=\"([^\"]*)\" ]]; then + COBRANCH=${BASH_REMATCH[1]} fi done reponame=$path @@ -279,47 +280,47 @@ if [[ "$AOMP_VERSION" == "13.1" ]] || [[ $AOMP_MAJOR_VERSION -gt 13 ]] ; then else line_is_good=0 fi - if [ $line_is_good == 1 ] ; then + if [ "$line_is_good" == 1 ] ; then if [ "$1" == "list" ] ; then repodirname=$AOMP_REPOS/$reponame - if [ -d $repodirname ] ; then + if [ -d "$repodirname" ] ; then REPO_PROJECT=$name REPO_PATH=$path REPO_RREV=$COBRANCH - REPO_REMOTE=$remote - cd $repodirname + REPO_REMOTE=$remote + cd "$repodirname" || exit list_repo_from_manifest fi else - if [ $reponame == "aomp" ] ; then + if [ "$reponame" == "aomp" ] ; then echo echo "Skipping pull of aomp repo " - echo - else + echo + else clone_or_pull fi fi fi # end line_is_good - done <$tmpfile - rm $tmpfile + done <"$tmpfile" + rm "$tmpfile" # build_rocr.sh expects directory rocr-runtime which is a subdir of hsa-runtime # Link in the open source hsa-runtime as "src" directory - if [ -d $AOMP_REPOS/hsa-runtime ] ; then - if [ ! -L $AOMP_REPOS/rocr-runtime/src ] ; then + if [ -d "$AOMP_REPOS/hsa-runtime" ] ; then + if [ ! -L "$AOMP_REPOS/rocr-runtime/src" ] ; then echo "Fixing rocr-runtime with correct link to hsa-runtime/opensrc/hsa-runtime src" - echo mkdir -p $AOMP_REPOS/rocr-runtime - mkdir -p $AOMP_REPOS/rocr-runtime - echo cd $AOMP_REPOS/rocr-runtime - cd $AOMP_REPOS/rocr-runtime - echo ln -sf -t $AOMP_REPOS/rocr-runtime ../hsa-runtime/opensrc/hsa-runtime - ln -sf -t $AOMP_REPOS/rocr-runtime ../hsa-runtime/opensrc/hsa-runtime - echo ln -sf hsa-runtime src + echo "mkdir -p $AOMP_REPOS/rocr-runtime" + mkdir -p "$AOMP_REPOS/rocr-runtime" + echo "cd $AOMP_REPOS/rocr-runtime" + cd "$AOMP_REPOS/rocr-runtime" || exit + echo "ln -sf -t $AOMP_REPOS/rocr-runtime ../hsa-runtime/opensrc/hsa-runtime" + ln -sf -t "$AOMP_REPOS/rocr-runtime" ../hsa-runtime/opensrc/hsa-runtime + echo "ln -sf hsa-runtime src" ln -sf hsa-runtime src fi fi - exit $rc + exit fi ## Before 13.1 repos were specified with environment variablse in aomp_common_vars diff --git a/bin/clone_epsdb_test.sh b/bin/clone_epsdb_test.sh index 8801fff91..f949401b2 100755 --- a/bin/clone_epsdb_test.sh +++ b/bin/clone_epsdb_test.sh @@ -5,25 +5,25 @@ # # --- Start standard header to set AOMP environment variables ---- -realpath=`realpath $0` -thisdir=`dirname $realpath` -. $thisdir/aomp_common_vars +realpath=$(realpath "$0") +thisdir=$(dirname "$realpath") +. "$thisdir/aomp_common_vars" # --- end standard header ---- function clone_or_pull(){ repodirname=$AOMP_REPOS_TEST/$reponame echo -if [ -d $repodirname ] ; then +if [ -d "$repodirname" ]; then echo "--- Pulling updates to existing dir $repodirname ----" echo " We assume this came from an earlier clone of $repo_web_location/$reponame" # FIXME look in $repodir/.git/config to be sure - cd $repodirname + cd "$repodirname" || exit # undo the patches to RAJA if [ "$reponame" == "$AOMP_RAJA_REPO_NAME" ] ; then git checkout include/RAJA/policy/atomic_auto.hpp - cd blt + cd blt || exit git checkout cmake/SetupCompilerOptions.cmake - cd $repodirname + cd "$repodirname" || exit fi if [ "$STASH_BEFORE_PULL" == "YES" ] ; then if [ "$reponame" != "$AOMP_RAJA_REPO_NAME" ] ; then @@ -33,7 +33,7 @@ if [ -d $repodirname ] ; then echo "git pull " git pull echo "cd $repodirname ; git checkout $COBRANCH" - git checkout $COBRANCH + git checkout "$COBRANCH" #echo "git pull " #git pull if [ "$reponame" == "$AOMP_RAJA_REPO_NAME" ] ; then @@ -43,24 +43,24 @@ if [ -d $repodirname ] ; then git pull fi else - echo --- NEW CLONE of repo $reponame to $repodirname ---- - cd $AOMP_REPOS_TEST + echo "--- NEW CLONE of repo $reponame to $repodirname ----" + cd "$AOMP_REPOS_TEST" || exit if [[ "$reponame" == "$AOMP_RAJA_REPO_NAME" || "$reponame" == "$AOMP_RAJAPERF_REPO_NAME" ]]; then - git clone --recursive -b $COBRANCH $repo_web_location/$reponame $reponame + git clone --recursive -b "$COBRANCH" "$repo_web_location/$reponame" "$reponame" else - echo git clone $repo_web_location/$reponame - git clone $repo_web_location/$reponame $reponame + echo "git clone $repo_web_location/$reponame" + git clone "$repo_web_location/$reponame" "$reponame" echo "cd $repodirname ; git checkout $COBRANCH" - cd $repodirname - git checkout $COBRANCH + cd "$repodirname" || exit + git checkout "$COBRANCH" fi fi -cd $repodirname +cd "$repodirname" || exit echo git status git status } -mkdir -p $AOMP_REPOS_TEST +mkdir -p "$AOMP_REPOS_TEST" # --------------------------------------- # The following repos is in AMDComputeLibraries diff --git a/bin/clone_test.sh b/bin/clone_test.sh index 322e441ab..85d8686d5 100755 --- a/bin/clone_test.sh +++ b/bin/clone_test.sh @@ -5,35 +5,35 @@ # # --- Start standard header to set AOMP environment variables ---- -realpath=`realpath $0` -thisdir=`dirname $realpath` +realpath=$(realpath "$0") +thisdir=$(dirname "$realpath") export AOMP_USE_CCACHE=${AOMP_USE_CCACHE:-0} -. $thisdir/aomp_common_vars +. "$thisdir/aomp_common_vars" # --- end standard header ---- EPSDB_LIST=${EPSDB_LIST:-"openmpapps sollve_vv Nekbone goulash fortran-babelstream babelstream OvO OpenMP_VV"} function list_repo_from_manifest(){ - logcommit=`git log -1 | grep "^commit" | cut -d" " -f2 | xargs` + logcommit=$(git log -1 | grep "^commit" | cut -d" " -f2 | xargs) thiscommit=${logcommit:0:12} - thisdate=`git log -1 --pretty=fuller | grep "^CommitDate:" | cut -d":" -f2- | xargs | cut -d" " -f2-` - get_monthnumber $thisdate - thisday=`echo $thisdate | cut -d" " -f2` - thisyear=`echo $thisdate | cut -d" " -f4` - printf -v thisdatevar "%4u-%2s-%02u" $thisyear $monthnumber $thisday - author=`git log -1 --pretty=fuller | grep "^Commit:" | cut -d":" -f2- | cut -d"<" -f1 | xargs` - forauthor=`git log -1 --pretty=fuller | grep "^Author:" | cut -d":" -f2- | cut -d"<" -f1 | xargs` + thisdate=$(git log -1 --pretty=fuller | grep "^CommitDate:" | cut -d":" -f2- | xargs | cut -d" " -f2-) + get_monthnumber "$thisdate" + thisday=$(echo "$thisdate" | cut -d" " -f2) + thisyear=$(echo "$thisdate" | cut -d" " -f4) + printf -v thisdatevar "%4u-%2s-%02u" "$thisyear" "$monthnumber" "$thisday" + author=$(git log -1 --pretty=fuller | grep "^Commit:" | cut -d":" -f2- | cut -d"<" -f1 | xargs) + forauthor=$(git log -1 --pretty=fuller | grep "^Author:" | cut -d":" -f2- | cut -d"<" -f1 | xargs) repodirname=$REPO_PATH - HASH=`git log -1 --numstat --format="%h" | head -1` + HASH=$(git log -1 --numstat --format="%h" | head -1) is_hash=0 branch_name=${REPO_RREV} # get the actual branch - actual_branch=`git branch | awk '/\*/ { print $2; }'` + actual_branch=$(git branch | awk '/\*/ { print $2; }') WARNWORD="" if [ "$actual_branch" == "(no" ] || [ "$actual_branch" == "(HEAD" ] ; then is_hash=1 - actual_hash=`git branch | awk '/\*/ { print $5; }' | cut -d")" -f1` + actual_hash=$(git branch | awk '/\*/ { print $5; }' | cut -d")" -f1) if [ "$actual_hash" == "$branch_name" ] ; then WARNWORD="tagged" thiscommit=$HASH @@ -53,38 +53,39 @@ function list_repo_from_manifest(){ fi if [[ -f .git/config ]] ; then - url=`grep -m1 url .git/config | cut -d":" -f2- | cut -d"/" -f3-` - project_name=`echo $url | cut -d"/" -f2- | tr '[:upper:]' '[:lower:]'` + url=$(grep -m1 url .git/config | cut -d":" -f2- | cut -d"/" -f3-) + project_name=$(echo "$url" | cut -d"/" -f2- | tr '[:upper:]' '[:lower:]') #website=`echo $url | cut -d"/" -f1` if [[ "$REPO_REMOTE" == "roc" ]] ; then - manifest_project=`echo radeonopencompute/$REPO_PROJECT | tr '[:upper:]' '[:lower:]'` + manifest_project=$(echo "radeonopencompute/$REPO_PROJECT" | tr '[:upper:]' '[:lower:]') elif [[ "$REPO_REMOTE" == "roctools" ]] ; then - manifest_project=`echo ROCM-Developer-Tools/$REPO_PROJECT | tr '[:upper:]' '[:lower:]'` + manifest_project=$(echo "ROCM-Developer-Tools/$REPO_PROJECT" | tr '[:upper:]' '[:lower:]') elif [[ "$REPO_REMOTE" == "amdlibs" ]] ; then - manifest_project=`echo AMDComputeLibraries/$REPO_PROJECT | tr '[:upper:]' '[:lower:]'` + manifest_project=$(echo "AMDComputeLibraries/$REPO_PROJECT" | tr '[:upper:]' '[:lower:]') elif [[ "$REPO_REMOTE" == "omphost" ]] ; then - manifest_project=`echo doru1004/$REPO_PROJECT | tr '[:upper:]' '[:lower:]'` + manifest_project=$(echo "doru1004/$REPO_PROJECT" | tr '[:upper:]' '[:lower:]') elif [[ "$REPO_REMOTE" == "julia" ]] ; then - manifest_project=`echo JuliaMath/$REPO_PROJECT | tr '[:upper:]' '[:lower:]'` + manifest_project=$(echo "JuliaMath/$REPO_PROJECT" | tr '[:upper:]' '[:lower:]') elif [[ "$REPO_REMOTE" == "tapple" ]] ; then - manifest_project=`echo TApplencourt/$REPO_PROJECT | tr '[:upper:]' '[:lower:]'` + manifest_project=$(echo "TApplencourt/$REPO_PROJECT" | tr '[:upper:]' '[:lower:]') elif [[ "$REPO_REMOTE" == "gerritgit" ]] ; then - manifest_project=`echo $REPO_PROJECT | tr '[:upper:]' '[:lower:]'` + manifest_project=$(echo "$REPO_PROJECT" | tr '[:upper:]' '[:lower:]') else - manifest_project=`echo $REPO_REMOTE/$REPO_PROJECT | tr '[:upper:]' '[:lower:]'` + manifest_project=$(echo "$REPO_REMOTE/$REPO_PROJECT" | tr '[:upper:]' '[:lower:]') fi - #tr '[:upper:]' '[:lower:]'` if [[ "$manifest_project" != "$project_name" ]] ; then echo "WARNING Actual project : $project_name" echo " Manifest project: $manifest_project" WARNWORD="!REPO!" fi - printf "%10s %12s %13s %17s %12s %10s %18s %18s %8s\n" $REPO_REMOTE $printbranch $REPO_PATH ${REPO_PROJECT} $thiscommit $thisdatevar "$author" "$forauthor" "$WARNWORD" + printf "%10s %12s %13s %17s %12s %10s %18s %18s %8s\n" "$REPO_REMOTE" \ + "$printbranch" "$REPO_PATH" "${REPO_PROJECT}" "$thiscommit" \ + "$thisdatevar" "$author" "$forauthor" "$WARNWORD" fi } function get_monthnumber() { - case $(echo ${1:0:3} | tr '[a-z]' '[A-Z]') in + case $(echo "${1:0:3}" | tr '[:lower:]' '[:upper:]') in JAN) monthnumber="01" ;; FEB) monthnumber="02" ;; MAR) monthnumber="03" ;; @@ -103,17 +104,17 @@ function get_monthnumber() { function clone_or_pull(){ repodirname=${AOMP_REPOS_TEST}/$reponame echo -if [ -d $repodirname ] ; then +if [ -d "$repodirname" ] ; then echo "--- Pulling updates to existing dir $repodirname ----" echo " We assume this came from an earlier clone of $repo_web_location$repogitname" # FIXME look in $repodir/.git/config to be sure - cd $repodirname + cd "$repodirname" || exit # undo the patches to RAJA if [ "$reponame" == "raja" ] ; then git checkout include/RAJA/policy/atomic_auto.hpp - cd blt + cd blt || exit git checkout cmake/SetupCompilerOptions.cmake - cd $repodirname + cd "$repodirname" || exit fi if [ "$STASH_BEFORE_PULL" == "YES" ] ; then if [ "$reponame" != "raja" ] ; then @@ -123,7 +124,7 @@ if [ -d $repodirname ] ; then echo "git pull " git pull echo "cd $repodirname ; git checkout $COBRANCH" - git checkout $COBRANCH + git checkout "$COBRANCH" #echo "git pull " #git pull if [ "$reponame" == "raja" ] ; then @@ -133,79 +134,77 @@ if [ -d $repodirname ] ; then git pull fi else - echo --- NEW CLONE of repo $reponame to $repodirname ---- - cd $AOMP_REPOS_TEST + echo "--- NEW CLONE of repo $reponame to $repodirname ----" + cd "$AOMP_REPOS_TEST" || exit if [[ "$reponame" == "raja" || "$reponame" == "RAJAPerf" ]]; then - git clone --recursive -b $COBRANCH $repo_web_location$repogitname $reponame + git clone --recursive -b "$COBRANCH" "$repo_web_location$repogitname" "$reponame" else - echo git clone $repo_web_location$repogitname - git clone ${repo_web_location}${repogitname} $reponame + echo "git clone $repo_web_location$repogitname" + git clone "${repo_web_location}${repogitname}" "$reponame" echo "cd $repodirname ; git checkout $COBRANCH" - cd $repodirname - git checkout $COBRANCH + cd "$repodirname" || exit + git checkout "$COBRANCH" fi fi -cd $repodirname +cd "$repodirname" || exit echo git status git status } manifest_file=$thisdir/../manifests/test_${AOMP_VERSION}.xml -if [ ! -f $manifest_file ] ; then +if [ ! -f "$manifest_file" ] ; then echo "ERROR manifest file missing: $manifest_file" exit 1 fi # Manifest file must be one project line per repo if [ "$1" == "list" ] ; then - printf "MANIFEST FILE : %66s\n" $manifest_file - printf "AOMP_REPOS_TEST: %66s\n" $AOMP_REPOS_TEST + printf "MANIFEST FILE : %66s\n" "$manifest_file" + printf "AOMP_REPOS_TEST: %66s\n" "$AOMP_REPOS_TEST" printf "%10s %12s %13s %17s %12s %10s %18s %18s\n" "repo src" "branch" "path" "repo name" "last hash" "updated" "commitor" "for author" printf "%10s %12s %13s %17s %12s %10s %18s %18s\n" "--------" "------" "----" "---------" "---------" "-------" "--------" "----------" fi tmpfile=/tmp/mlines$$ -cat $manifest_file | grep project > $tmpfile +grep project < "$manifest_file" > $tmpfile -if [ ! -d ${AOMP_REPOS_TEST} ]; then - mkdir -p ${AOMP_REPOS_TEST} +if [ ! -d "${AOMP_REPOS_TEST}" ]; then + mkdir -p "${AOMP_REPOS_TEST}" fi -while read line ; do - line_is_good=1 - remote=`echo $line | grep remote | cut -d"=" -f2` - for field in `echo $line` ; do - if [ -z "${field##*remote=*}" ] ; then - # strip off = and double quotes - remote=$(eval echo `echo $field | cut -d= -f2 `) +while read -r line ; do + remote=$(echo "$line" | grep remote | cut -d"=" -f2) + for field in $line; do + if [[ "$field" =~ remote=\"([^\"]*)\" ]]; then + remote=${BASH_REMATCH[1]} fi - if [ -z "${field##*name=*}" ] ; then - name=$(eval echo `echo $field | cut -d= -f2 `) + if [[ "$field" =~ name=\"([^\"]*)\" ]]; then + name=${BASH_REMATCH[1]} fi - if [ -z "${field##*path=*}" ] ; then - path=$(eval echo `echo $field | cut -d= -f2 `) + if [[ "$field" =~ path=\"([^\"]*)\" ]]; then + path=${BASH_REMATCH[1]} fi - if [ -z "${field##*revision=*}" ] ; then - COBRANCH=$(eval echo `echo $field | cut -d= -f2 `) + if [[ "$field" =~ revision=\"([^\"]*)\" ]]; then + COBRANCH=${BASH_REMATCH[1]} fi - if [ -z "${field##*groups=*}" ] ; then - groups=$(eval echo `echo $field | cut -d= -f2 `) + if [[ "$field" =~ groups=\"([^\"]*)\" ]]; then + groups=${BASH_REMATCH[1]} fi done reponame=$path repogitname=$name repodirname=$AOMP_REPOS_TEST/$reponame - repo_web_location=`grep http $manifest_file | grep $remote | cut -d":" -f2 | cut -d"\"" -f1` + repo_web_location=$(grep http "$manifest_file" | grep "$remote" | cut -d":" -f2 | cut -d"\"" -f1) repo_web_location="https:${repo_web_location}" REPO_PROJECT=$name REPO_PATH=$path REPO_RREV=$COBRANCH REPO_REMOTE=$remote if [ "$1" == "list" ] ; then - if [ -d $repodirname ] ; then - cd $repodirname + if [ -d "$repodirname" ] ; then + cd "$repodirname" || exit list_repo_from_manifest else - echo $repodirname not found + echo "$repodirname not found" fi else if [[ "$groups" != "skip" ]] ; then @@ -223,7 +222,7 @@ while read line ; do fi fi fi -done <$tmpfile -rm $tmpfile +done < "$tmpfile" +rm "$tmpfile" exit diff --git a/bin/create_release_tarball.sh b/bin/create_release_tarball.sh index d253d3b70..5b5ace4d1 100755 --- a/bin/create_release_tarball.sh +++ b/bin/create_release_tarball.sh @@ -7,9 +7,9 @@ # # --- Start standard header to set AOMP environment variables ---- -realpath=`realpath $0` -thisdir=`dirname $realpath` -. $thisdir/aomp_common_vars +realpath=$(realpath "$0") +thisdir=$(dirname "$realpath") +. "$thisdir/aomp_common_vars" # --- end standard header ---- function getmanifest(){ @@ -26,7 +26,7 @@ function getmanifest(){ # AMD internal repo file manifest_file=$thisdir/../manifests/aompi_${AOMP_VERSION}.xml else - abranch=`git branch | awk '/\*/ { print $2; }'` + abranch=$(git branch | awk '/\*/ { print $2; }') # Use release manifest if on release branch if [ "$abranch" == "aomp-${AOMP_VERSION_STRING}" ]; then manifest_file=$thisdir/../manifests/aomp_${AOMP_VERSION_STRING}.xml @@ -35,11 +35,11 @@ function getmanifest(){ fi fi fi - if [ ! -f $manifest_file ] ; then + if [ ! -f "$manifest_file" ] ; then echo "ERROR manifest file missing: $manifest_file" exit 1 fi - echo Using: $manifest_file + echo "Using: $manifest_file" else echo Error: This AOMP version does not have a manifest file. fi @@ -51,28 +51,28 @@ function getreponame(){ tarballremove="roctracer rocprofiler aomp build Makefile" # Manifest file must be one project line per repo #manifest_file=/home/release/git/aomp14/aomp/manifests/aomp_14.0-0.xml - cat $manifest_file | grep project > $tmpfile - while read line ; do + grep project < "$manifest_file" > "$tmpfile" + while read -r line; do found=0 - for field in `echo $line` ; do - if [ -z "${field##*path=*}" ] ; then - path=$(eval echo `echo $field | cut -d= -f2 `) + for field in $line; do + if [[ "$field" =~ path=\"([^\"]*)\" ]]; then + path=${BASH_REMATCH[1]} fi done - reponame=$path - for component in $tarballremove; do - if [ "$reponame" == "$component" ]; then - found=1 - break + reponame=$path + for component in $tarballremove; do + if [ "$reponame" == "$component" ]; then + found=1 + break + fi + done + if [ "$found" == 0 ]; then + repos="$repos $reponame" fi - done - if [ "$found" == 0 ]; then - repos="$repos $reponame" - fi - done <$tmpfile + done < "$tmpfile" - echo $repos - rm $tmpfile + echo "$repos" + rm "$tmpfile" } # Get repos from manifest @@ -81,7 +81,7 @@ getreponame REPO_NAMES=$repos ALL_NAMES="$REPO_NAMES Makefile build aomp" # Check for extra directories. Note build is in the exclude list -for dir_name in `ls $AOMP_REPOS` ; do +for dir_name in "$AOMP_REPOS"/*; do found=0 for repo_name in $ALL_NAMES ; do if [ "$repo_name" == "$dir_name" ] ; then @@ -96,7 +96,7 @@ for dir_name in `ls $AOMP_REPOS` ; do echo " $dir_name WILL NOT BE ADDED TO SOURCE TARBALL." echo " CHECK DIRECTORY $AOMP_REPOS ." echo " HIT ENTER TO CONTINUE or CTRL-C TO CANCEL" - read + read -r fi done @@ -104,9 +104,9 @@ patchloc=$thisdir/patches export IFS=" " echo "----------------- PRE-PATCH STATUS -----------------" for repo_name in $REPO_NAMES ; do - cd $AOMP_REPOS/$repo_name + cd "$AOMP_REPOS/$repo_name" || exit echo - echo $repo_name: git status + echo "$repo_name: git status" git status done echo "----------------- PATCHING REPOS -----------------" @@ -115,15 +115,15 @@ for repo_name in $REPO_NAMES ; do if [ "$repo_name" == "llvm-project" ] && [ "$AOMP_APPLY_ATD_AMD_STAGING_PATCH" == 0 ] ; then continue else - echo patchrepo $AOMP_REPOS/$repo_name - patchrepo $AOMP_REPOS/$repo_name + echo "patchrepo $AOMP_REPOS/$repo_name" + patchrepo "$AOMP_REPOS/$repo_name" fi done echo "----------------- POST-PATCH STATUS -----------------" for repo_name in $REPO_NAMES ; do - cd $AOMP_REPOS/$repo_name + cd "$AOMP_REPOS/$repo_name" || exit echo - echo $repo_name: git status + echo "$repo_name: git status" git status done @@ -133,51 +133,51 @@ tmpdir=/tmp/create_tarball$$ majorver=${AOMP_VERSION} tardir=$tmpdir/aomp$majorver echo "----- Building symbolic temp dir $tardir------------" -echo mkdir -p $tardir -mkdir -p $tardir -cd $tardir +echo "mkdir -p $tardir" +mkdir -p "$tardir" +cd "$tardir" || exit # Copy makefile to $tardir -echo cp -p $AOMP_REPOS/$AOMP_REPO_NAME/Makefile $tardir/Makefile -cp -p $AOMP_REPOS/aomp/Makefile $tardir/Makefile +echo "cp -p $AOMP_REPOS/$AOMP_REPO_NAME/Makefile $tardir/Makefile" +cp -p "$AOMP_REPOS/aomp/Makefile" "$tardir/Makefile" for repo_name in $REPO_NAMES ; do - echo ln -sf $AOMP_REPOS/$repo_name $repo_name - ln -sf $AOMP_REPOS/$repo_name $repo_name + echo "ln -sf $AOMP_REPOS/$repo_name $repo_name" + ln -sf "$AOMP_REPOS/$repo_name" "$repo_name" done -echo ln -sf $AOMP_REPOS/$AOMP_REPO_NAME $AOMP_REPO_NAME -ln -sf $AOMP_REPOS/$AOMP_REPO_NAME $AOMP_REPO_NAME -cd $tmpdir +echo "ln -sf $AOMP_REPOS/$AOMP_REPO_NAME $AOMP_REPO_NAME" +ln -sf "$AOMP_REPOS/$AOMP_REPO_NAME" "$AOMP_REPO_NAME" +cd "$tmpdir" || exit cmd="tar --exclude-from $thisdir/create_release_tarball_excludes -h -czf $tarball aomp$majorver " echo "----------------- START tar COMMAND -----------------" -echo time $cmd +echo "time $cmd" time $cmd echo -echo done creating $PWD/$tarball +echo "done creating $PWD/$tarball" echo echo "----- Cleanup symbolic temp dir $tardir------------" -echo cd $tardir -cd $tardir +echo "cd $tardir" +cd "$tardir" || exit echo "rm *" -rm * -echo rmdir $tardir -rmdir $tardir -cd /tmp -echo rmdir $tmpdir -rmdir $tmpdir +rm -- * +echo "rmdir $tardir" +rmdir "$tardir" +cd /tmp || exit +echo "rmdir $tmpdir" +rmdir "$tmpdir" echo "----------------- REVERSE PATCHING -----------------" for repo_name in $REPO_NAMES ; do - removepatch $AOMP_REPOS/$repo_name + removepatch "$AOMP_REPOS/$repo_name" done echo "----------------- POST REVERSE PATCH STATUS -----------------" for repo_name in $REPO_NAMES ; do - cd $AOMP_REPOS/$repo_name + cd "$AOMP_REPOS/$repo_name" || exit echo - echo $repo_name: git status + echo "$repo_name: git status" git status done echo -cd $AOMP_REPOS/.. +cd "$AOMP_REPOS/.." || exit echo "------ DONE! CMD:$0 FILE:$tarball ------" -ls -lh $tarball +ls -lh "$tarball" diff --git a/bin/get_trunk_pr_since b/bin/get_trunk_pr_since index 1d2b663c9..eebb1358d 100755 --- a/bin/get_trunk_pr_since +++ b/bin/get_trunk_pr_since @@ -9,22 +9,22 @@ # This script is used for OpenMP development. # --- Start standard AOMP header ---- -realpath=`realpath $0` -thisdir=`dirname $realpath` -. $thisdir/aomp_common_vars +realpath=$(realpath "$0") +thisdir=$(dirname "$realpath") +. "$thisdir/aomp_common_vars" # --- end standard AOMP header ---- repo_dir=${1:-$AOMP_REPOS/llvm-project} date_since=${2:-lastweek} pr_status=${3:-open} -[ $date_since == "lastweek" ] && date_since=`date --date="last week" -I` +[ "$date_since" == "lastweek" ] && date_since=$(date --date="last week" -I) curdir=$PWD tdir="/tmp/$USER/trunk_patches" -[ -d $tdir ] && rm -rf $tdir -mkdir -p $tdir -cd $tdir +[ -d "$tdir" ] && rm -rf "$tdir" +mkdir -p "$tdir" +cd "$tdir" || exit REVIEW_URL="https://github.com/llvm/llvm-project/pulls?q=is%3Apr++is%3A${pr_status}+%22%5BOpenMP%5D%22+in%3Atitle+updated%3A%3E%3D${date_since}" echo @@ -33,50 +33,49 @@ echo "URL: $REVIEW_URL" echo http_filename=pull_${pr_status}_${date_since} -wget $REVIEW_URL -O $http_filename 2>/dev/null >/dev/null +wget "$REVIEW_URL" -O "$http_filename" 2>/dev/null >/dev/null -cat $http_filename | grep llvm/llvm-project/pull | grep pull_request | cut -d"/" -f7- | while read line ; do - dir=`echo $line | cut -d"\"" -f1` - comment=`echo $line | cut -d">" -f2-` - comment=`echo $comment | sed "s///g" | sed "s/<\/code>//g" | sed "s/<\/a>//g"` - number=`echo $dir | cut -d"/" -f4` +grep llvm/llvm-project/pull < "$http_filename" | grep pull_request | cut -d"/" -f7- | while read -r line ; do + dir=$(echo "$line" | cut -d"\"" -f1) + comment=$(echo "$line" | cut -d">" -f2-) + comment=$(echo "$comment" | sed "s///g" | sed "s/<\/code>//g" | sed "s/<\/a>//g") + number=$(echo "$dir" | cut -d"/" -f4) patchurl="https://github.com/${dir}.patch" local_file=${patchurl##*/} - [ -f $local_file ] && rm -f $local_file - echo wget $patchurl -O $local_file - wget $patchurl 2>/dev/null >/dev/null + [ -f "$local_file" ] && rm -f "$local_file" + echo "wget $patchurl -O $local_file" + wget "$patchurl" 2>/dev/null >/dev/null cfile=comment.${number}.txt - echo $comment > $cfile + echo "$comment" > "$cfile" done echo echo " DONE getting files into $tdir" -if [ $pr_status == "merged" ] ; then +if [ "$pr_status" == "merged" ] ; then # Do not attempt to test merged commits echo "The above patches are found in directory $tdir" - cd $curdir + cd "$curdir" || exit exit 0 fi -if [ ! -d $repo_dir ] ; then +if [ ! -d "$repo_dir" ] ; then echo "ERROR directory $repo_dir does not exist to test patches" echo - cd $curdir + cd "$curdir" || exit exit 1 fi echo " Now attempting to dry-run patches to $repo_dir" echo -cd $repo_dir +cd "$repo_dir" || exit prcount=0 failcount=0 -for patchfile in `ls $tdir/*.patch` ; do - prcount=$(( $prcount + 1 )) - lines=`wc -l $patchfile | cut -d" " -f1` - number=`echo $patchfile | cut -d"." -f1 | cut -d"/" -f5` - comment=`cat $tdir/comment.${number}.txt` - patch -p1 -t -N --dry-run <$patchfile >/dev/null - if [ $? != 0 ] ; then - failcount=$(( $failcount + 1 )) +for patchfile in "$tdir"/*.patch; do + prcount=$(( prcount + 1 )) + lines=$(wc -l "$patchfile" | cut -d" " -f1) + number=$(echo "$patchfile" | cut -d"." -f1 | cut -d"/" -f5) + comment=$(cat "$tdir/comment.${number}.txt") + if ! patch -p1 -t -N --dry-run < "$patchfile" >/dev/null; then + failcount=$(( failcount + 1 )) echo "FAIL in $patchfile with $lines lines." echo " Title: \"$comment\" " echo " URL: https://github.com/llvm/llvm-project/pull/$number" @@ -99,4 +98,4 @@ echo "get_trunk_pr_since could be rerun with this command:" echo echo " $0 $repo_dir $date_since $pr_status" echo -cd $curdir +cd "$curdir" || exit diff --git a/bin/repeat_fprintf.sh b/bin/repeat_fprintf.sh index dc90ccc03..f3684eae1 100755 --- a/bin/repeat_fprintf.sh +++ b/bin/repeat_fprintf.sh @@ -9,8 +9,8 @@ _iters=${2:-100} _compiler_bin_dir=${3:-/opt/rocm/llvm/bin} # Check default gfxid using offload-arch -if [ -f $_compiler_bin_dir/offload-arch ] ; then - _oa_gfxid=`$_compiler_bin_dir/offload-arch` +if [ -f "$_compiler_bin_dir/offload-arch" ] ; then + _oa_gfxid=$("$_compiler_bin_dir/offload-arch") if [ "$_oa_gfxid" != "$_gfxid" ] ; then echo "WARNING: changing gfxid to $_oa_gfxid" _gfxid=$_oa_gfxid @@ -20,10 +20,10 @@ fi # Cleanup old source and binary files _source_file="/tmp/fprintf.c" _binary="/tmp/fprintf" -[ -f $_binary ] && rm $_binary -[ -f $_source_file ] && rm $_source_file +[ -f "$_binary" ] && rm "$_binary" +[ -f "$_source_file" ] && rm "$_source_file" # Recreate source file from this embedded source -/bin/cat >$_source_file <<"EOF" +/bin/cat > "$_source_file" <<"EOF" #include #include @@ -74,16 +74,22 @@ EOF function run_tests() { _log=stdout.log _rc0=0 - for i in `seq 1 $_iters` ; do $_binary ; [ $? == 0 ] && _rc0=$(( $_rc0 + 1 )) ; done >$_log - _fails=$(( $_iters - $_rc0 )) - _failrate=$(( ( $_fails * 100 ) / $_iters )) + # Disable warning for unused 'i' variable + # shellcheck disable=2034 + for i in $(seq 1 "$_iters") ; do + if $_binary ; then + _rc0=$(( _rc0 + 1 )) + fi + done > "$_log" + _fails=$(( _iters - _rc0 )) + _failrate=$(( ( _fails * 100 ) / _iters )) } _compile_cmd="$_compiler_bin_dir/clang -O2 -fopenmp --offload-arch=$_gfxid $_source_file -o $_binary" echo -echo $_compile_cmd +echo "$_compile_cmd" $_compile_cmd -[ ! -f $_binary ] && echo "compile fail" && exit 1 +[ ! -f "$_binary" ] && echo "compile fail" && exit 1 echo echo "Testing $_binary for $_iters iterations ..." diff --git a/bin/rocm_quick_check.sh b/bin/rocm_quick_check.sh index 25690eb31..14e3eea8a 100755 --- a/bin/rocm_quick_check.sh +++ b/bin/rocm_quick_check.sh @@ -33,6 +33,8 @@ fi echo "Done checking for libnvidia" if [ -e ~/local/openmpi/lib/libmpi.so ]; then + # We don't care that the tilde isn't expanded + # shellcheck disable=2088 echo "~/local/openmpi/lib/libmpi.so OK" elif [ -e /opt/openmpi-4.1.5/lib/libmpi.so ]; then echo "/opt/openmpi-4.1.5/lib/libmpi.so OK" @@ -54,17 +56,34 @@ else echo "No mpi found , not good. FAIL" fi +# Find the latest version of FileCheck in a directory given as the first +# argument. (The highest-numbered FileCheck-nn, or just 'FileCheck' if that's +# the only version in the directory). +function latest_filecheck() { + local prev_nullglob + local indir="$1" + prev_nullglob="$(shopt -p nullglob)" + shopt -s nullglob + pushd "$indir" >& /dev/null || return + for FC in FileCheck*; do + realpath "$FC" + done | sort -t '-' -k 2 -n -r | head -n 1 + popd >& /dev/null || return + eval "$prev_nullglob" +} # Look for FileCheck on the system in various places. # Check local AOMP install first. -SYSFILECHECK=`ls /usr/bin | grep -m1 -e "FileCheck"` +SYSFILECHECK=$(latest_filecheck /usr/bin) if [ "$SYSFILECHECK" == "" ]; then SYSFILECHECK="FileCheck" fi -AOMP=`ls -d /opt/rocm-*/llvm | head -1` -echo $AOMP -SYSLLVM=`ls /usr/lib | grep -m1 -e "llvm-[0-9]\+"` -TESTPACKAGE_BINDIR=`find "$HOME/tmp/openmp-extras" -type f -name 'aomp_common_vars' | xargs dirname` +# We don't care about non-alphanumeric filenames here. +# shellcheck disable=2012 +AOMP=$(ls -d /opt/rocm-*/llvm | head -1) +echo "$AOMP" +SYSLLVM=$(ls /usr/lib | grep -m1 -e "llvm-[0-9]\+") +TESTPACKAGE_BINDIR=$(find "$HOME/tmp/openmp-extras" -type f -name 'aomp_common_vars' | xargs dirname) if [ -e "$TESTPACKAGE_BINDIR/FileCheck" ]; then echo "$TESTPACKAGE_BINDIR/FileCheck OK" @@ -75,13 +94,13 @@ elif [ -e "$AOMP/bin/FileCheck" ]; then elif [ -e /usr/lib/aomp/bin/FileCheck ]; then echo "/usr/lib/aomp/bin/FileCheck OK" /usr/lib/aomp/bin/FileCheck --version -elif [ -e $HOME/git/aomp-test/FileCheck ]; then +elif [ -e "$HOME"/git/aomp-test/FileCheck ]; then echo "$HOME/git/aomp-test/FileCheck OK" $HOME/git/aomp-test/FileCheck --version -elif [ -e /usr/lib/$SYSLLVM/bin/FileCheck ]; then +elif [ -e /usr/lib/"$SYSLLVM"/bin/FileCheck ]; then echo "/usr/lib/$SYSLLVM/bin/FileCheck OK" /usr/lib/$SYSLLVM/bin/FileCheck --version -elif [ -e /usr/bin/$SYSFILECHECK ]; then +elif [ -e /usr/bin/"$SYSFILECHECK" ]; then echo "/usr/bin/$SYSFILECHECK OK" /usr/bin/$SYSFILECHECK --version else diff --git a/bin/run_omptests.sh b/bin/run_omptests.sh index 919073271..21de8e4d8 100755 --- a/bin/run_omptests.sh +++ b/bin/run_omptests.sh @@ -1,11 +1,11 @@ #!/bin/bash # --- Start standard header to set AOMP environment variables ---- -realpath=`realpath $0` -thisdir=`dirname $realpath` +realpath=$(realpath "$0") +thisdir=$(dirname "$realpath") export AOMP_USE_CCACHE=0 -. $thisdir/aomp_common_vars +. "$thisdir/aomp_common_vars" # --- end standard header ---- # Setup AOMP variables @@ -17,10 +17,10 @@ setaompgpu DEVICE_ARCH=${DEVICE_ARCH:-$AOMP_GPU} DEVICE_TARGET=${DEVICE_TARGET:-amdgcn-amd-amdhsa} -echo DEVICE_ARCH = $DEVICE_ARCH -echo DEVICE_TARGET = $DEVICE_TARGET +echo "DEVICE_ARCH = $DEVICE_ARCH" +echo "DEVICE_TARGET = $DEVICE_TARGET" -pushd $AOMP_REPOS_TEST/$AOMP_OMPTESTS_REPO_NAME +pushd "$AOMP_REPOS_TEST/$AOMP_OMPTESTS_REPO_NAME" || exit rm -f runtime-fails.txt rm -f compile-fails.txt rm -f passing-tests.txt @@ -29,44 +29,48 @@ skip_list="t-tdpf-nested-parallel t-reduction-team t-unified-reduction-team t-re # When HSA_XNACK is explicitely set to 0 by the user assume that they do not # want to run the unified memory tests so add them to the skip list: -if [[ $HSA_XNACK == 0 ]]; then +if [[ "$HSA_XNACK" == 0 ]]; then echo "Skipping all unified memory tests since HSA_XNACK is 0." skip_list="${skip_list} t-unified-critical t-unified-barrier t-unified-concurrent-target t-unified-data-sharing t-unified-data-sharing-many-teams t-unified-declare-simd t-unified-defaultmap t-unified-distribute t-unified-distribute-parallel-for-back2back t-unified-distribute-simd t-unified-distribute-simd-clauses t-unified-distribute-simd-dist-clauses t-unified-dpf t-unified-dpfs t-unified-dpfs-dist-clauses t-unified-exceptions t-unified-firstprivate-of-reference t-unified-flush t-unified-for t-unified-for-simd t-unified-ignore-unmappable-types t-unified-implicit-firstprivate t-unified-is-device-ptr-all-directives t-unified-l2-parallel t-unified-large-args t-unified-map-more-than t-unified-master t-unified-multiple-compilation-units t-unified-multiple-parallel t-unified-parallel t-unified-parallel-for t-unified-parallel-for-simd t-unified-parforsimd t-unified-partial-struct t-unified-reduction-struct t-unified-sections t-unified-sequence-distribute-parallel-for t-unified-shared-address-space t-unified-share-reference-orphan-directive t-unified-simd t-unified-single t-unified-target-api t-unified-target-basic t-unified-target-data-2map-same-array t-unified-target-enter-nowait t-unified-target-parallel t-unified-target-parallel-for t-unified-target-parallel-for-simd t-unified-target-parallel-for-simd-clauses t-unified-target-teams t-unified-target-teams-distribute t-unified-target-teams-distribute-parallel-for t-unified-target-teams-distribute-parallel-for-simd t-unified-target-teams-distribute-simd t-unified-target-update t-unified-target-update-not-there t-unified-target-update-nowait t-unified-teams-distribute t-unified-teams-distribute-parallel-for t-unified-teams-distribute-parallel-for-simd" fi # Add skip_list tests to runtime fails for omp_test in $skip_list; do - echo $omp_test > $AOMP_REPOS_TEST/$AOMP_OMPTESTS_REPO_NAME/skipped-tests.txt + echo "$omp_test" > "$AOMP_REPOS_TEST/$AOMP_OMPTESTS_REPO_NAME/skipped-tests.txt" done # Move tests to avoid soft hang if [ "$SKIP_TESTS" != 0 ]; then for omp_test in $skip_list; do - if [ -d test-$omp_test-fail ]; then - rm -rf test-$omp_test-fail + if [ -d "test-$omp_test-fail" ]; then + rm -rf "test-$omp_test-fail" fi - if [ -d $omp_test ]; then - mv $omp_test test-$omp_test-fail + if [ -d "$omp_test" ]; then + mv "$omp_test" "test-$omp_test-fail" fi done fi log=$(date --iso-8601=minutes).log -echo env DEVICE_TYPE=amd DEVICE_TARGET=$DEVICE_TARGET DEVICE_ARCH=$DEVICE_ARCH HOSTRTL=$AOMP/lib/libdevice TARGETRTL=$AOMP/lib GLOMPRTL=$AOMP/lib LLVMBIN=$AOMP/bin make -i +echo "env DEVICE_TYPE=amd DEVICE_TARGET=$DEVICE_TARGET DEVICE_ARCH=$DEVICE_ARCH HOSTRTL=$AOMP/lib/libdevice TARGETRTL=$AOMP/lib GLOMPRTL=$AOMP/lib LLVMBIN=$AOMP/bin make -i" -env DEVICE_TYPE=amd DEVICE_TARGET=$DEVICE_TARGET DEVICE_ARCH=$DEVICE_ARCH HOSTRTL=$AOMP/lib/libdevice TARGETRTL=$AOMP/lib GLOMPRTL=$AOMP/lib LLVMBIN=$AOMP/bin make -i 2>&1 | tee omptests_run_$log +env DEVICE_TYPE=amd DEVICE_TARGET="$DEVICE_TARGET" DEVICE_ARCH="$DEVICE_ARCH" HOSTRTL="$AOMP/lib/libdevice" \ + TARGETRTL="$AOMP/lib" GLOMPRTL="$AOMP/lib" LLVMBIN="$AOMP/bin" \ + make -i 2>&1 | tee "omptests_run_$log" -$thisdir/check_omptests.sh +export log + +"$thisdir"/check_omptests.sh # Move tests back to avoid polluting the repo if [ "$SKIP_TESTS" != 0 ]; then for omp_test in $skip_list; do - if [ -d $omp_test ]; then - rm -rf $omp_test + if [ -d "$omp_test" ]; then + rm -rf "$omp_test" fi - if [ -d test-$omp_test-fail ]; then - mv test-$omp_test-fail $omp_test + if [ -d "test-$omp_test-fail" ]; then + mv "test-$omp_test-fail" "$omp_test" fi done fi