Skip to content

Commit

Permalink
Patch for Classic-Flang NPSDB scripts for Asan.
Browse files Browse the repository at this point in the history
Requirement to ship ASan instrumented Classic-Flang libraries Build & Install support.
The patch achieves the following objectives:-

1. Build & Install support Flang{libflang.so(llvm/lib/asan)}.
2. Build & Install support Flang-Runtime{libflangrti.so(llvm/lib/asan)}.
3. Build & Install support PGMath{libpgmath.so(llvm/lib/asan)}.

Change-Id: I61489232183bb19a1b2041f53436a3a0f86a1fc6
  • Loading branch information
ampandey-AMD committed Aug 16, 2023
1 parent d5521c3 commit 2a0c7bf
Show file tree
Hide file tree
Showing 3 changed files with 338 additions and 133 deletions.
153 changes: 109 additions & 44 deletions bin/build_flang.sh
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
#!/bin/bash
#
# build_flang.sh: Script to build the flang component of the AOMP compiler.
#
# build_flang.sh: Script to build the flang component of the AOMP compiler.
#
#
BUILD_TYPE=${BUILD_TYPE:-Release}
Expand Down Expand Up @@ -55,8 +55,6 @@ MYCMAKEOPTS="-DCMAKE_BUILD_TYPE=$BUILD_TYPE \
-DCMAKE_C_COMPILER=$INSTALL_PREFIX/llvm/bin/clang \
-DCMAKE_Fortran_COMPILER=gfortran \
-DLLVM_TARGETS_TO_BUILD=$TARGETS_TO_BUILD \
-DCMAKE_C_FLAGS=-I$COMP_INC_DIR \
-DCMAKE_CXX_FLAGS=-I$COMP_INC_DIR \
-DFLANG_OPENMP_GPU_AMD=ON \
-DFLANG_OPENMP_GPU_NVIDIA=ON \
-DLLVM_INSTALL_TOOLCHAIN_ONLY=ON"
Expand All @@ -67,17 +65,25 @@ if [ "$AOMP_STANDALONE_BUILD" == 0 ]; then
-DENABLE_DEVEL_PACKAGE=ON -DENABLE_RUN_PACKAGE=ON"
fi

if [ "$1" == "-h" ] || [ "$1" == "help" ] || [ "$1" == "-help" ] ; then
if [ "$AOMP_BUILD_SANITIZER" == 1 ]; then
ASAN_LIB_PATH=$(${INSTALL_PREFIX}/llvm/bin/clang --print-runtime-dir)
ASAN_RPATH_FLAGS="-Wl,-rpath=$ASAN_LIB_PATH -L$ASAN_LIB_PATH"
CXXFLAGS="$CXXFLAGS $ASAN_RPATH_FLAGS -I$COMP_INC_DIR"
CFLAGS="$CFLAGS $ASAN_RPATH_FLAGS -I$COMP_INC_DIR"
ASAN_CMAKE_OPTS="$MYCMAKEOPTS -DCMAKE_INSTALL_LIBDIR=lib/asan"
fi

if [ "$1" == "-h" ] || [ "$1" == "help" ] || [ "$1" == "-help" ] ; then
help_build_aomp
fi

checkrepo

# Make sure we can update the install directory
if [ "$1" == "install" ] ; then
if [ "$1" == "install" ] ; then
$SUDO mkdir -p $INSTALL_FLANG
$SUDO touch $INSTALL_FLANG/testfile
if [ $? != 0 ] ; then
if [ $? != 0 ] ; then
echo "ERROR: No update access to $INSTALL_FLANG"
exit 1
fi
Expand All @@ -86,13 +92,17 @@ fi

# Skip synchronization from git repos if nocmake or install are specified
if [ "$1" != "nocmake" ] && [ "$1" != "install" ] ; then
echo
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

if [ $COPYSOURCE ] ; then
if [ "$AOMP_BUILD_SANITIZER" == 1 ] ; then
mkdir -p $BUILD_DIR/build/$AOMP_FLANG_REPO_NAME/asan
fi

if [ $COPYSOURCE ] ; then
# Copy/rsync the git repos into /tmp for faster compilation
mkdir -p $BUILD_DIR
echo
Expand All @@ -103,57 +113,112 @@ if [ "$1" != "nocmake" ] && [ "$1" != "install" ] ; then
rsync -a --exclude ".git" --delete $AOMP_REPOS/$AOMP_FLANG_REPO_NAME $BUILD_DIR 2>&1
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. "
echo " run $0 without nocmake or install options. "
exit 1
fi
if [ "$AOMP_BUILD_SANITIZER" == 1 ]; then
if [ ! -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
fi

cd $BUILD_DIR/build/$AOMP_FLANG_REPO_NAME

# Need llvm-config to come from previous LLVM build
export PATH=$AOMP_INSTALL_DIR/bin:$PATH

if [ "$1" != "nocmake" ] && [ "$1" != "install" ] ; then
echo
echo " -----Running cmake ---- "
if [ $COPYSOURCE ] ; then
echo ${AOMP_CMAKE} $MYCMAKEOPTS $BUILD_DIR/$AOMP_FLANG_REPO_NAME
env "$@" ${AOMP_CMAKE} $MYCMAKEOPTS $BUILD_DIR/$AOMP_FLANG_REPO_NAME 2>&1
else
echo ${AOMP_CMAKE} $MYCMAKEOPTS $AOMP_REPOS/$AOMP_FLANG_REPO_NAME
env "$@" ${AOMP_CMAKE} $MYCMAKEOPTS $AOMP_REPOS/$AOMP_FLANG_REPO_NAME 2>&1
if [ "$AOMP_BUILD_SANITIZER" != 1 ]; then
cd $BUILD_DIR/build/$AOMP_FLANG_REPO_NAME
echo
echo " -----Running cmake ---- "
if [ $COPYSOURCE ] ; then
echo ${AOMP_CMAKE} $MYCMAKEOPTS -DCMAKE_C_FLAGS=-I$COMP_INC_DIR -DCMAKE_CXX_FLAGS=-I$COMP_INC_DIR $BUILD_DIR/$AOMP_FLANG_REPO_NAME
env "$@" ${AOMP_CMAKE} $MYCMAKEOPTS -DCMAKE_C_FLAGS=-I$COMP_INC_DIR -DCMAKE_CXX_FLAGS=-I$COMP_INC_DIR $BUILD_DIR/$AOMP_FLANG_REPO_NAME 2>&1
else
echo ${AOMP_CMAKE} $MYCMAKEOPTS -DCMAKE_C_FLAGS=-I$COMP_INC_DIR -DCMAKE_CXX_FLAGS=-I$COMP_INC_DIR $AOMP_REPOS/$AOMP_FLANG_REPO_NAME
env "$@" ${AOMP_CMAKE} $MYCMAKEOPTS -DCMAKE_C_FLAGS=-I$COMP_INC_DIR -DCMAKE_CXX_FLAGS=-I$COMP_INC_DIR $AOMP_REPOS/$AOMP_FLANG_REPO_NAME 2>&1
fi
if [ $? != 0 ] ; then
echo "ERROR cmake failed. Cmake flags"
echo " $MYCMAKEOPTS"
exit 1
fi
fi
if [ $? != 0 ] ; then
echo "ERROR cmake failed. Cmake flags"
echo " $MYCMAKEOPTS"
exit 1
if [ "$AOMP_BUILD_SANITIZER" == 1 ] ; then
cd $BUILD_DIR/build/$AOMP_FLANG_REPO_NAME/asan
echo
echo " ----- Running cmake for flang-asan ------"
if [ $COPYSOURCE ] ; then
echo ${AOMP_CMAKE} $ASAN_CMAKE_OPTS -DCMAKE_C_FLAGS="'$CFLAGS'" -DCMAKE_CXX_FLAGS="'$CXXFLAGS'" $BUILD_DIR/$AOMP_FLANG_REPO_NAME
env "$@" ${AOMP_CMAKE} $ASAN_CMAKE_OPTS -DCMAKE_C_FLAGS="'$CFLAGS'" -DCMAKE_CXX_FLAGS="'$CXXFLAGS'" $BUILD_DIR/$AOMP_FLANG_REPO_NAME 2>&1
else
echo ${AOMP_CMAKE} $ASAN_CMAKE_OPTS -DCMAKE_C_FLAGS="'$CFLAGS'" -DCMAKE_CXX_FLAGS="'$CXXFLAGS'" $AOMP_REPOS/$AOMP_FLANG_REPO_NAME
env "$@" ${AOMP_CMAKE} $ASAN_CMAKE_OPTS -DCMAKE_C_FLAGS="'$CFLAGS'" -DCMAKE_CXX_FLAGS="'$CXXFLAGS'" $AOMP_REPOS/$AOMP_FLANG_REPO_NAME 2>&1
fi
if [ $? != 0 ] ; then
echo "ERROR flang-asan cmake failed. Cmake flags"
echo " $ASAN_CMAKE_OPTS"
exit 1
fi
fi
fi

echo
echo " -----Running make ---- "
echo make -j $NUM_THREADS
make -j $NUM_THREADS
if [ $? != 0 ] ; then
echo "ERROR make -j $NUM_THREADS failed"
exit 1
echo " -----Running make ---- "
echo make -j $NUM_THREADS
if [ "$AOMP_BUILD_SANITIZER" != 1 ]; then
cd $BUILD_DIR/build/$AOMP_FLANG_REPO_NAME
make -j $NUM_THREADS
if [ $? != 0 ] ; then
echo "ERROR make -j $NUM_THREADS failed"
exit 1
fi
fi

if [ "$1" == "install" ] ; then
echo " -----Installing to $INSTALL_FLANG ---- "
$SUDO make install
if [ $? != 0 ] ; then
echo "ERROR make install failed "
if [ "$AOMP_BUILD_SANITIZER" == 1 ] ; then
cd $BUILD_DIR/build/$AOMP_FLANG_REPO_NAME/asan
make -j $NUM_THREADS
if [ $? != 0 ] ; then
echo "ERROR flang-asan make -j $NUM_THREADS failed"
exit 1
fi
$SUDO make install/local
if [ $? != 0 ] ; then
echo "ERROR make install/local failed "
exit 1
fi

if [ "$1" == "install" ] ; then
if [ "$AOMP_BUILD_SANITIZER" != 1 ]; then
cd $BUILD_DIR/build/$AOMP_FLANG_REPO_NAME
echo " -----Installing to $INSTALL_FLANG ---- "
$SUDO make install
if [ $? != 0 ] ; then
echo "ERROR make install failed "
exit 1
fi
$SUDO make install/local
if [ $? != 0 ] ; then
echo "ERROR make install/local failed "
exit 1
fi
echo "SUCCESSFUL INSTALL to $INSTALL_FLANG "
fi
echo
if [ "$AOMP_BUILD_SANITIZER" == 1 ] ; then
cd $BUILD_DIR/build/$AOMP_FLANG_REPO_NAME/asan
$SUDO make install
if [ $? != 0 ] ; then
echo "ERROR make install failed "
exit 1
fi
$SUDO make install/local
if [ $? != 0 ] ; then
echo "ERROR make install/local failed "
exit 1
fi
fi
echo "SUCCESSFUL INSTALL to $INSTALL_FLANG "
echo "SUCCESSFUL INSTALL to $INSTALL_FLANG/lib/asan "
echo
if [ -d $INSTALL_PREFIX/openmp-extras/devel ]; then
echo "Add flang symbolic link."
Expand All @@ -166,9 +231,9 @@ if [ "$1" == "install" ] ; then
cp $INSTALL_PREFIX/openmp-extras/bin/flang1 $INSTALL_PREFIX/llvm/bin
cp $INSTALL_PREFIX/openmp-extras/bin/flang2 $INSTALL_PREFIX/llvm/bin
fi
else
echo
else
echo
echo "SUCCESSFUL BUILD, please run: $0 install"
echo " to install into $AOMP"
echo
echo
fi
Loading

0 comments on commit 2a0c7bf

Please sign in to comment.