Updating scripts for 6.4

This commit is contained in:
Ameya Keshava Mallya
2025-04-11 20:44:44 +00:00
parent 6770798faf
commit 295e1e2998
90 changed files with 3825 additions and 2303 deletions

View File

@@ -12,17 +12,36 @@ RELEASE_FLAG?=-r
ASAN_DEP:=
ifeq (${ENABLE_ADDRESS_SANITIZER},true)
ASAN_DEP=lightning
SANITIZER_FLAG=-a
SANITIZER_FLAG=--address_sanitizer
endif
# Set STATIC_FLAG for static builds
ifeq (${ENABLE_STATIC_BUILDS},true)
STATIC_FLAG=-s
endif
export INFRA_REPO:=ROCm/tools/rocm-build
# # commannds to be run at makefile read time
# # should only output $$OUT_DIR to stdout
# # In an ideal world this would be another target
# define INITBUILD
# source ${INFRA_REPO}/envsetup.sh >/dev/null 2>&1;
# [ -w "$${ROCM_INSTALL_PATH}" ] || sudo mkdir -p -m 775 "$${ROCM_INSTALL_PATH}" ;
# sudo chown "$$(id -u):$$(id -g)" "$${ROCM_INSTALL_PATH}" "/home/$$(id -un)" ;
# mkdir -p ${HOME}/.ccache ;
# echo $${OUT_DIR} ;
# endef
OUT_DIR:=$(shell . ${INFRA_REPO}/envsetup.sh >/dev/null 2>&1 ; echo $${OUT_DIR})
ROCM_INSTALL_PATH:=$(shell . ${INFRA_REPO}/envsetup.sh >/dev/null 2>&1 ; echo $${ROCM_INSTALL_PATH})
$(info OUT_DIR=${OUT_DIR})
$(info ROCM_INSTALL_PATH=${ROCM_INSTALL_PATH})
# define SILENT to be empty to see the runner invocation
SILENT?= @
# -------------------------------------------------------------------------
# Internal stuff. Could be put in a different file to hide it.
# Internal macros, they need to be defined before being used.
@@ -47,7 +66,8 @@ endif
# It should not be needed.
define adddep =
$(strip $(call peval,components+= $(1) $(2))
$(foreach comp,$(strip $2),$(call peval,${OUT_DIR}/logs/${1}: ${OUT_DIR}/logs/${comp}))
$(call peval,$(1)_DEPS += $(2))
$(foreach comp,$(strip $2),$(call peval,${OUT_DIR}/logs/${1}.txt: ${OUT_DIR}/logs/${comp}.txt))
)
endef
# End of internal stuff that is needed at the start of the file
@@ -67,6 +87,7 @@ endef
$(call adddep,amd_smi_lib,${ASAN_DEP})
$(call adddep,aqlprofile,${ASAN_DEP} rocr)
$(call adddep,aqlprofiletest,lightning rocminfo aqlprofile opencl_on_rocclr hip_on_rocclr)
$(call adddep,comgr,lightning devicelibs)
$(call adddep,dbgapi,rocr comgr)
$(call adddep,devicelibs,lightning)
@@ -83,27 +104,29 @@ $(call adddep,rocm-core,${ASAN_DEP})
$(call adddep,rocm-gdb,dbgapi)
$(call adddep,rocminfo,${ASAN_DEP} rocr)
$(call adddep,rocprofiler-register,${ASAN_DEP})
$(call adddep,rocprofiler-sdk,${ASAN_DEP} rocr aqlprofile opencl_on_rocclr hip_on_rocclr comgr)
$(call adddep,rocprofiler-sdk,${ASAN_DEP} rocr aqlprofile opencl_on_rocclr hip_on_rocclr comgr rccl rocdecode)
$(call adddep,rocprofiler-systems,${ASAN_DEP} hipcc rocr hip_on_rocclr rocm_smi_lib rocprofiler roctracer rocprofiler-sdk)
$(call adddep,rocprofiler,${ASAN_DEP} rocr roctracer aqlprofile opencl_on_rocclr hip_on_rocclr comgr)
$(call adddep,rocprofiler-compute,${ASAN_DEP})
$(call adddep,rocr,${ASAN_DEP} lightning rocm_smi_lib devicelibs rocprofiler-register)
$(call adddep,rocr_debug_agent,${ASAN_DEP} hip_on_rocclr rocr dbgapi)
$(call adddep,rocrsamples,lightning devicelibs rocr )
$(call adddep,roctracer,${ASAN_DEP} rocr hip_on_rocclr)
# rocm-dev points to all possible last finish components of Stage1 build.
rocm-dev-components :=amd_smi_lib aqlprofile comgr dbgapi devicelibs hip_on_rocclr hipcc hipify_clang \
rocm-dev-components :=amd_smi_lib aqlprofile aqlprofiletest comgr dbgapi devicelibs hip_on_rocclr hipcc hipify_clang \
lightning rocprofiler-compute opencl_on_rocclr openmp_extras rocm_bandwidth_test rocm_smi_lib \
rocm-cmake rocm-core rocm-gdb rocminfo rocprofiler-register rocprofiler-sdk rocprofiler-systems \
rocprofiler rocr rocr_debug_agent roctracer
$(call adddep,rocm-dev,$(filter-out ${NOBUILD} kernel_ubuntu,${rocm-dev-components}))
rocprofiler rocr rocr_debug_agent rocrsamples roctracer
$(call adddep,rocm-dev,$(filter-out ${NOBUILD},${rocm-dev-components}))
$(call adddep,amdmigraphx,hip_on_rocclr half rocblas miopen-hip lightning hipcc hiptensor)
$(call adddep,composable_kernel,lightning hipcc hip_on_rocclr rocm-cmake)
$(call adddep,half,rocm-cmake)
$(call adddep,hipblas-common,lightning)
$(call adddep,hipblas,hip_on_rocclr rocblas rocsolver lightning hipcc)
$(call adddep,hipblaslt,hip_on_rocclr openmp_extras lightning hipcc hipblas-common rocm-dev)
$(call adddep,hipblaslt,hip_on_rocclr openmp_extras lightning hipcc hipblas-common roctracer)
$(call adddep,hipcub,hip_on_rocclr rocprim lightning hipcc)
$(call adddep,hipfft,hip_on_rocclr openmp_extras rocfft rocrand hiprand lightning hipcc)
$(call adddep,hipfort,rocblas hipblas rocsparse hipsparse rocfft hipfft rocrand hiprand rocsolver hipsolver lightning hipcc)
@@ -113,26 +136,34 @@ $(call adddep,hipsparse,hip_on_rocclr rocsparse lightning hipcc)
$(call adddep,hipsparselt,hip_on_rocclr hipsparse lightning hipcc openmp_extras)
$(call adddep,hiptensor,hip_on_rocclr composable_kernel lightning hipcc)
$(call adddep,miopen-deps,lightning hipcc)
$(call adddep,miopen-hip,composable_kernel half hip_on_rocclr miopen-deps hipblas hipblaslt rocrand roctracer lightning hipcc)
$(call adddep,miopen-hip,rocm-core composable_kernel half hip_on_rocclr miopen-deps hipblas hipblaslt rocrand roctracer lightning hipcc)
$(call adddep,mivisionx,amdmigraphx miopen-hip rpp lightning hipcc)
$(call adddep,rccl,rocm-core hip_on_rocclr rocr lightning hipcc rocm_smi_lib hipify_clang)
$(call adddep,rdc,rocm_smi_lib rocprofiler rocmvalidationsuite)
$(call adddep,rdc,amd_smi_lib rocprofiler-sdk rocm_smi_lib rocprofiler rocmvalidationsuite)
$(call adddep,rocalution,rocblas rocsparse rocrand lightning hipcc)
$(call adddep,rocblas,hip_on_rocclr openmp_extras lightning hipcc hipblaslt)
$(call adddep,rocblas,rocminfo hip_on_rocclr openmp_extras lightning hipcc hipblaslt)
$(call adddep,rocal,mivisionx)
$(call adddep,rocdecode,hip_on_rocclr lightning hipcc amdmigraphx)
$(call adddep,rocdecode,hip_on_rocclr lightning hipcc)
$(call adddep,rocfft,hip_on_rocclr rocrand hiprand lightning hipcc openmp_extras)
$(call adddep,rocjpeg,hip_on_rocclr lightning hipcc rocm-dev)
$(call adddep,rocjpeg,hip_on_rocclr lightning hipcc)
$(call adddep,rocmvalidationsuite,hip_on_rocclr rocr hipblas hiprand hipblaslt rocm-core lightning hipcc rocm_smi_lib)
$(call adddep,rocprim,hip_on_rocclr lightning hipcc)
$(call adddep,rocrand,hip_on_rocclr lightning hipcc)
$(call adddep,rocshmem,rccl )
$(call adddep,rocsolver,hip_on_rocclr rocblas rocsparse rocprim lightning hipcc)
$(call adddep,rocsparse,hip_on_rocclr rocprim lightning hipcc)
$(call adddep,rocthrust,hip_on_rocclr rocprim lightning hipcc)
$(call adddep,rocwmma,hip_on_rocclr rocblas lightning hipcc rocm-cmake rocm_smi_lib)
$(call adddep,rpp,half lightning hipcc openmp_extras)
$(call adddep,transferbench,hip_on_rocclr lightning hipcc)
ifneq ($(filter rocm-dev upload-rocm-dev, ${MAKECMDGOALS}),)
components = $(rocm-dev-components)
endif
$(call adddep,rocm,$(filter-out ${NOBUILD} rocm,${components}))
ifeq ($(DISTRO_NAME),rhel)
WHL_GEN :=
endif
# -------------------------------------------------------------------------
# The rest of the file is internal
@@ -165,7 +196,7 @@ ifeq (${toplevel},)
define toplevel =
# The "target" make, this builds the package if it is out of date
T_$1: ${OUT_DIR}/logs/$1 FRC
T_$1: ${OUT_DIR}/logs/$1.txt FRC
: $1 built
# The "upload" for $1, it uploads the packages for $1 to the central storage
@@ -176,25 +207,26 @@ U_$1: T_$1 FRC
# The "clean" for $1, it just marks the target as not existing so it will be built
# in the future.
C_$1: FRC
rm -f ${OUT_DIR}/logs/$1 ${OUT_DIR}/logs/$1.repackaged
rm -f ${OUT_DIR}/logs/$1.txt ${OUT_DIR}/logs/$1.repackaged
# parallel build {
${OUT_DIR}/logs/$1: | ${OUT_DIR}/logs
ifneq ($(wildcard ${OUT_DIR}/logs/$1.repackaged),)
# parallel build
${OUT_DIR}/logs/$1.txt: | ${OUT_DIR}/logs
ifneq ($(wildcard ${OUT_DIR}/logs/$1.repackaged),) # {
@echo Skipping build of $1 as it has already been repackaged
cat $$@.repackaged > $$@
rm -f $$@.repackaged
cat $${@:.txt=.repackaged} > $$@
rm -f $${@:.txt=.repackaged}
else # } {
@echo $1 started due to $$? | sed "s:${OUT_DIR}/logs/::g"
# Build in a subshell so we get the time output
# Pass in jobserver info using the RMAKE variable
${RMAKE}@( if set -x && source $${INFRA_REPO}/envsetup.sh && \
rm -f $$@.errors $$@ $$@.repackaged && \
$${INFRA_REPO}/build_$1.sh -c && \
time bash -x $${INFRA_REPO}/build_$1.sh $${RELEASE_FLAG} $${SANITIZER_FLAG} && $${INFRA_REPO}/post_inst_pkg.sh "$1" ; \
then mv $$@.inprogress $$@ ; \
else mv $$@.inprogress $$@.errors ; echo Error in $1 >&2 ; exit 1 ;\
fi ) > $$@.inprogress 2>&1
# Allow project specific flags e..g. ROCMBUILD_lightning.
${RMAKE}${SILENT}( if set -x && source $${INFRA_REPO}/envsetup.sh && \
rm -f $${@:$1.txt=1.Errors.$1.txt} $$@ $${@:.txt=.repackaged} && \
$${INFRA_REPO}/runner $1 $${RELEASE_FLAG} $${SANITIZER_FLAG} $${STATIC_FLAG} ${ROCMBUILD_$1}; \
then mv $${@:$1.txt=2.Inprogress.$1.txt} $$@ ; \
else mv $${@:$1.txt=2.Inprogress.$1.txt} $${@:$1.txt=1.Errors.$1.txt} ;\
echo Error in $1 >&2 ; exit 1 ;\
fi ) > $${@:$1.txt=2.Inprogress.$1.txt} 2>&1
endif # }
# end of toplevel macro
@@ -227,22 +259,45 @@ upload-rocm-dev: $(addprefix U_,$(filter-out ${NOBUILD},${components}))
rocm-dev: $(addprefix T_,$(filter-out ${NOBUILD},${components}))
@echo rocm-dev built
ifeq ($(DISTRO_NAME),almalinux)
@sudo chmod -R 777 "/home/builder"
endif
# This code is broken. It stops us exiting a container and
# starting a new one and continueing the build. The attempt
# is to have run-once code.
${OUT_DIR}/logs:
sudo mkdir -p -m 775 "${ROCM_INSTALL_PATH}" && \
sudo chown -R "$(shell id -u):$(shell id -g)" "/opt"
sudo chown -R "$(shell id -u):$(shell id -g)" "/home/$(shell id -un)"
sudo chown "$(shell id -u):$(shell id -g)" "/home/$(shell id -un)"
mkdir -p "${@}"
mkdir -p ${HOME}/.ccache
##help clean: remove the output directory and recreate it
clean:
[ -n "${OUT_DIR}" ] && rm -rf "${OUT_DIR}"
mkdir -p ${OUT_DIR}/logs
# mkdir -p ${OUT_DIR}/logs
.SECONDARY: ${components:%=${OUT_DIR}/logs/%}
.PHONY: all clean repack help list_components
# get_all_deps: Recursively get all dependencies for a given component.
# Usage: $(call get_all_deps,component_name,)
# - component_name: The name of the component to get dependencies for.
# - The second parameter is an internal parameter used to track already
# processed components to avoid circular dependencies.
define get_all_deps
$(if $(filter $(1),$(2)),,\
$(sort $(1) $(foreach d,$($(1)_DEPS),$(call get_all_deps,$d,$(1) $(2))))
)
endef
##help deps_<component>: output the dependencies for <component>
deps_%:
@echo "=== Dependencies for [$*] ==="
@echo "$(filter-out $*,$(call get_all_deps,$*,))"
##help list_components: output the list of components
##help : Hint make list_components | paste - - - | column -t
list_components:

View File

@@ -1,4 +1,3 @@
#!/bin/bash
source "$(dirname "${BASH_SOURCE}")/compute_utils.sh"
@@ -10,7 +9,9 @@ printUsage() {
echo " -c, --clean Removes all amd_smi build artifacts"
echo " -r, --release Build non-debug version amd_smi (default is debug)"
echo " -a, --address_sanitizer Enable address sanitizer"
echo " -s, --static Build static lib (.a). build instead of dynamic/shared(.so) "
echo " -s, --static Component/Build does not support static builds just accepting this param & ignore. No effect of the param on this build"
echo " -w, --wheel Creates python wheel package of amd-smi.
It needs to be used along with -r option"
echo " -o, --outdir <pkg_type> Print path of output directory containing packages of type referred to by pkg_type"
echo " -p, --package <type> Specify packaging format"
echo " -h, --help Prints this help"
@@ -25,7 +26,6 @@ printUsage() {
PROJ_NAME="amdsmi"
PACKAGE_ROOT="$(getPackageRoot)"
TARGET="build"
PACKAGE_LIB=$(getLibPath)
PACKAGE_INCLUDE="$(getIncludePath)"
AMDSMI_BUILD_DIR=$(getBuildPath $PROJ_NAME)
@@ -42,7 +42,7 @@ SHARED_LIBS="ON"
CLEAN_OR_OUT=0;
PKGTYPE="deb"
VALID_STR=`getopt -o hcraso:p: --long help,clean,release,static,address_sanitizer,outdir:,package: -- "$@"`
VALID_STR=`getopt -o hcraswo:p: --long help,clean,release,static,wheel,address_sanitizer,outdir:,package: -- "$@"`
eval set -- "$VALID_STR"
while true ;
@@ -60,6 +60,8 @@ do
ADDRESS_SANITIZER=true ; shift ;;
(-s | --static)
ack_and_skip_static ;;
(-w | --wheel)
WHEEL_PACKAGE=true ; shift ;;
(-o | --outdir)
TARGET="outdir"; PKGTYPE=$2 ; OUT_DIR_SPECIFIED=1 ; ((CLEAN_OR_OUT|=2)) ; shift 2 ;;
(-p | --package)
@@ -135,7 +137,7 @@ verifyEnvSetup
case $TARGET in
(clean) clean_amdsmi ;;
(build) build_amdsmi ;;
(build) build_amdsmi; build_wheel "$AMDSMI_BUILD_DIR" "$PROJ_NAME" ;;
(outdir) print_output_directory ;;
(*) die "Invalid target $TARGET" ;;
esac

View File

@@ -1,41 +1,42 @@
#!/bin/bash
set -ex
source "$(dirname "${BASH_SOURCE[0]}")/compute_helper.sh"
source "$(dirname "${BASH_SOURCE[0]}")/compute_utils.sh"
set_component_src AMDMIGraphX
build_amdmigraphx() {
echo "Start build"
if [ "${ENABLE_STATIC_BUILDS}" == "true" ]; then
ack_and_skip_static
fi
cd $COMPONENT_SRC
if ! command -v rbuild &> /dev/null; then
pip3 install https://github.com/RadeonOpenCompute/rbuild/archive/master.tar.gz
fi
# Remove CK
xargs -d '\n' -a ${OUT_DIR}/ck.files rm -- || true
if [ "${ENABLE_ADDRESS_SANITIZER}" == "true" ]; then
set_asan_env_vars
set_address_sanitizer_on
fi
if [ -n "$GPU_ARCHS" ]; then
GPU_TARGETS="$GPU_ARCHS"
else
GPU_TARGETS="gfx900;gfx906;gfx908;gfx90a;gfx1030;gfx1100;gfx1101;gfx1102;gfx942;gfx1200;gfx1201"
fi
init_rocm_common_cmake_params
mkdir -p ${BUILD_DIR} && rm -rf ${BUILD_DIR}/* && mkdir -p ${HOME}/amdmigraphx && rm -rf ${HOME}/amdmigraphx/*
rbuild package -d "${HOME}/amdmigraphx" -B "${BUILD_DIR}" \
--cxx="${ROCM_PATH}/llvm/bin/clang++" \
--cc="${ROCM_PATH}/llvm/bin/clang" \
--cxx="$(set_build_variables __CLANG++__)" \
--cc="$(set_build_variables __CLANG__)" \
"${rocm_math_common_cmake_params[@]}" \
-DCMAKE_MODULE_LINKER_FLAGS="-Wl,--enable-new-dtags,--build-id=sha1,--rpath,$ROCM_LIB_RPATH" \
-DGPU_TARGETS="${GPU_TARGETS}" \
-DCMAKE_INSTALL_RPATH=""
mkdir -p $PACKAGE_DIR && cp ${BUILD_DIR}/*.${PKGTYPE} $PACKAGE_DIR
copy_if "${PKGTYPE}" "${CPACKGEN:-"DEB;RPM"}" "${PACKAGE_DIR}" "${BUILD_DIR}"/*."${PKGTYPE}"
cd $BUILD_DIR && cmake --build . -- install -j${PROC}
show_build_cache_stats
@@ -50,7 +51,7 @@ clean_amdmigraphx() {
stage2_command_args "$@"
case $TARGET in
build) build_amdmigraphx ;;
build) build_amdmigraphx; build_wheel ;;
outdir) print_output_directory ;;
clean) clean_amdmigraphx ;;
*) die "Invalid target $TARGET" ;;

View File

@@ -0,0 +1,136 @@
#!/bin/bash
source "$(dirname "${BASH_SOURCE}")/compute_utils.sh"
printUsage() {
echo
echo "Usage: $(basename "${BASH_SOURCE}") [-c|-r|-h] [makeopts]"
echo
echo "Options:"
echo " -c, --clean Removes all clang-ocl build artifacts"
echo " -r, --release Build non-debug version clang-ocl (default is debug)"
echo " -a, --address_sanitizer Enable address sanitizer"
echo " -o, --outdir <pkg_type> Print path of output directory containing packages of
type referred to by pkg_type"
echo " -h, --help Prints this help"
echo " -s, --static Supports static CI by accepting this param & not bailing out. No effect of the param though"
echo
return 0
}
TARGET="build"
CLANG_OCL_DEST="$(getBinPath)"
CLANG_OCL_SRC_ROOT="$CLANG_OCL_ROOT"
CLANG_OCL_BUILD_DIR="$(getBuildPath clang-ocl)"
MAKEARG="$DASH_JAY"
PACKAGE_ROOT="$(getPackageRoot)"
PACKAGE_UTILS="$(getUtilsPath)"
CLANG_OCL_PACKAGE_DEB="$PACKAGE_ROOT/deb/clang-ocl"
CLANG_OCL_PACKAGE_RPM="$PACKAGE_ROOT/rpm/clang-ocl"
BUILD_TYPE="Debug"
SHARED_LIBS="ON"
CLEAN_OR_OUT=0;
MAKETARGET="deb"
PKGTYPE="deb"
VALID_STR=`getopt -o hcraso:g: --long help,clean,release,clean,static,address_sanitizer,outdir:,gpu_list: -- "$@"`
eval set -- "$VALID_STR"
while true ;
do
case "$1" in
(-h | --help)
printUsage ; exit 0;;
(-c | --clean)
TARGET="clean" ; ((CLEAN_OR_OUT|=1)) ; shift ;;
(-r | --release)
MAKEARG="$MAKEARG BUILD_TYPE=rel" ; BUILD_TYPE="Release" ; shift ;;
(-a | --address_sanitizer)
set_asan_env_vars
set_address_sanitizer_on ; shift ;;
(-s | --static)
SHARED_LIBS="OFF" ; shift ;;
(-o | --outdir)
TARGET="outdir"; PKGTYPE=$2 ; OUT_DIR_SPECIFIED=1 ; ((CLEAN_OR_OUT|=2)) ; shift 2 ;;
(-g | --gpu_list )
GPU_LIST=$2; shift 2 ;;
--) shift; break;;
(*)
echo " This should never come but just incase : UNEXPECTED ERROR Parm : [$1] ">&2 ; exit 20;;
esac
done
RET_CONFLICT=1
check_conflicting_options $CLEAN_OR_OUT $PKGTYPE $MAKETARGET
if [ $RET_CONFLICT -ge 30 ]; then
print_vars $API_NAME $TARGET $BUILD_TYPE $SHARED_LIBS $CLEAN_OR_OUT $PKGTYPE $MAKETARGET
exit $RET_CONFLICT
fi
clean_clang-ocl() {
echo "Removing clang-ocl"
rm -rf $CLANG_OCL_DEST/clang-ocl
rm -rf $CLANG_OCL_BUILD_DIR
rm -rf $CLANG_OCL_PACKAGE_DEB
rm -rf $CLANG_OCL_PACKAGE_RPM
}
build_clang-ocl() {
if [ ! -d "$CLANG_OCL_BUILD_DIR" ]; then
mkdir -p $CLANG_OCL_BUILD_DIR
pushd $CLANG_OCL_BUILD_DIR
if [ -e $PACKAGE_ROOT/lib/bitcode/opencl.amdgcn.bc ]; then
BC_DIR="$ROCM_INSTALL_PATH/lib"
else
BC_DIR="$ROCM_INSTALL_PATH/amdgcn/bitcode"
fi
cmake \
$(rocm_cmake_params) \
-DDISABLE_CHECKS="ON" \
-DCLANG_BIN="$ROCM_INSTALL_PATH/llvm/bin" \
-DBITCODE_DIR="$BC_DIR" \
$(rocm_common_cmake_params) \
-DCPACK_SET_DESTDIR="OFF" \
$CLANG_OCL_SRC_ROOT
echo "Making clang-ocl:"
cmake --build . -- $MAKEARG
cmake --build . -- $MAKEARG install
cmake --build . -- $MAKEARG package
popd
fi
copy_if DEB "${CPACKGEN:-"DEB;RPM"}" "$CLANG_OCL_PACKAGE_DEB" $CLANG_OCL_BUILD_DIR/rocm-clang-ocl*.deb
copy_if RPM "${CPACKGEN:-"DEB;RPM"}" "$CLANG_OCL_PACKAGE_RPM" $CLANG_OCL_BUILD_DIR/rocm-clang-ocl*.rpm
}
print_output_directory() {
case ${PKGTYPE} in
("deb")
echo ${CLANG_OCL_PACKAGE_DEB};;
("rpm")
echo ${CLANG_OCL_PACKAGE_RPM};;
(*)
echo "Invalid package type \"${PKGTYPE}\" provided for -o" >&2; exit 1;;
esac
exit
}
case $TARGET in
(clean) clean_clang-ocl ;;
(build) build_clang-ocl ;;
(outdir) print_output_directory ;;
(*) die "Invalid target $TARGET" ;;
esac
echo "Operation complete"
exit 0

View File

@@ -14,6 +14,7 @@ printUsage() {
type referred to by pkg_type"
echo " -h, --help Prints this help"
echo " -s, --static Build static lib (.a). build instead of dynamic/shared(.so) "
echo " -w, --wheel Creates python wheel package of comgr. It needs to be used along with -r option"
echo " -l, --link_llvm_static Link to LLVM statically. Default is to dynamically link to LLVM; requires that LLVM dylibs are created."
echo
echo "Possible values for <type>:"
@@ -24,6 +25,7 @@ printUsage() {
return 0
}
## Build environment variables
API_NAME=amd_comgr
PROJ_NAME=$API_NAME
LIB_NAME=lib${API_NAME}
@@ -33,8 +35,8 @@ PACKAGE_ROOT=$(getPackageRoot)
PACKAGE_LIB=$(getLibPath)
PACKAGE_INCLUDE=$(getIncludePath)
BUILD_DIR=$(getBuildPath $API_NAME)
PACKAGE_DEB=$(getPackageRoot)/deb/$API_NAME
PACKAGE_RPM=$(getPackageRoot)/rpm/$API_NAME
PACKAGE_DEB=$PACKAGE_ROOT/deb/$PROJ_NAME
PACKAGE_RPM=$PACKAGE_ROOT/rpm/$PROJ_NAME
PACKAGE_PREFIX=$ROCM_INSTALL_PATH
BUILD_TYPE=Debug
MAKE_OPTS="$DASH_JAY CTEST_OUTPUT_ON_FAILURE=1 -C $BUILD_DIR"
@@ -44,13 +46,17 @@ CLEAN_OR_OUT=0;
PKGTYPE="deb"
MAKETARGET="deb"
# link to LLVM dynamicaly. Default is to link to llvm dynamically.
# temporarily set this default to OFF until we resolve Issues
LINK_LLVM_DYLIB="OFF"
VALID_STR=`getopt -o hcraslo:p: --long help,clean,release,address_sanitizer,static,link_llvm_static,outdir:,package: -- "$@"`
#parse the arguments
VALID_STR=`getopt -o hcraswlo:p: --long help,clean,release,address_sanitizer,static,wheel,link_llvm_static,outdir:,package: -- "$@"`
eval set -- "$VALID_STR"
while true ;
do
#echo "parocessing $1"
case "$1" in
(-h | --help)
printUsage ; exit 0;;
@@ -63,6 +69,8 @@ do
set_address_sanitizer_on ; shift ;;
(-s | --static)
SHARED_LIBS="OFF" ; shift ;;
(-w | --wheel)
WHEEL_PACKAGE=true ; shift ;;
(-l | --link_llvm_static)
LINK_LLVM_DYLIB="OFF"; shift ;;
(-o | --outdir)
@@ -105,6 +113,7 @@ build() {
echo " Building Shared Object "
fi
# Remove CTEST var once SWDEV-381396 is fixed
cmake \
$(rocm_cmake_params) \
-DBUILD_SHARED_LIBS=$SHARED_LIBS \
@@ -143,7 +152,7 @@ verifyEnvSetup
case $TARGET in
(clean) clean ;;
(build) build ;;
(build) build; build_wheel "$BUILD_DIR" "$PROJ_NAME" ;;
(outdir) print_output_directory ;;
(*) die "Invalid target $TARGET" ;;
esac

View File

@@ -2,10 +2,14 @@
set -ex
source "$(dirname "${BASH_SOURCE[0]}")/compute_helper.sh"
source "$(dirname "${BASH_SOURCE[0]}")/compute_utils.sh"
# Temporarily disable Address Sanitizer
ENABLE_ADDRESS_SANITIZER=false
set_component_src composable_kernel
disable_debug_package_generation
# Set the GPU_ARCH_LIST to the supported GPUs needed after https://github.com/ROCm/composable_kernel/pull/1536/
GPU_ARCH_LIST="gfx908;gfx90a;gfx942;gfx1030;gfx1100;gfx1101;gfx1102;gfx1200;gfx1201"
build_miopen_ck() {
@@ -23,10 +27,17 @@ build_miopen_ck() {
GPU_ARCH_LIST="gfx942"
ack_and_skip_static
fi
# if ENABLE_GPU_ARCH is set in env by Job parameter ENABLE_GPU_ARCH, then set GPU_ARCH_LIST to that value
# This needs to be removed when CK aligns with other component and uses -DAMDGPU_TARGET or _DGPO_TARGET
# then we can use set_gpu_arch from compure_helper.sh and get rid of all if clauses
if [ -n "$ENABLE_GPU_ARCH" ]; then
GPU_ARCH_LIST="$ENABLE_GPU_ARCH"
fi
# Latest CK requiring Python 3.8 as the minimum.
# Point CMake to that explicit location and adjust LD_LIBRARY_PATH.
PYTHON_VERSION_WORKAROUND=''
echo "DISTRO_ID: ${DISTRO_ID}"
if [ "$DISTRO_ID" = "rhel-8.8" ] || [ "$DISTRO_ID" = "sles-15.5" ] ; then
if [ "$DISTRO_ID" = "rhel-8.8" ] || [ "$DISTRO_NAME" == "sles" ] || [ "$DISTRO_ID" = "debian-10" ]; then
EXTRA_PYTHON_PATH=/opt/Python-3.8.13
PYTHON_VERSION_WORKAROUND="-DCK_USE_ALTERNATIVE_PYTHON=${EXTRA_PYTHON_PATH}/bin/python3.8"
# For the python interpreter we need to export LD_LIBRARY_PATH.
@@ -42,19 +53,20 @@ build_miopen_ck() {
"${rocm_math_common_cmake_params[@]}" \
${PYTHON_VERSION_WORKAROUND} \
-DCPACK_GENERATOR="${PKGTYPE^^}" \
-DCMAKE_CXX_COMPILER="${ROCM_PATH}/llvm/bin/clang++" \
-DCMAKE_C_COMPILER="${ROCM_PATH}/llvm/bin/clang" \
-DCMAKE_CXX_COMPILER=$(set_build_variables __CLANG++__) \
-DCMAKE_C_COMPILER=$(set_build_variables __CLANG__) \
${LAUNCHER_FLAGS} \
-DGPU_ARCHS="${GPU_ARCH_LIST}" \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_CXX_FLAGS=" -O3 " \
"$COMPONENT_SRC"
cmake --build . -- -j${PROC} package
cmake --build "$BUILD_DIR" -- install
mkdir -p $PACKAGE_DIR && cp ./*.${PKGTYPE} $PACKAGE_DIR
copy_if "${PKGTYPE}" "${CPACKGEN:-"DEB;RPM"}" "${PACKAGE_DIR}" "${BUILD_DIR}"/*."${PKGTYPE}"
}
# Use the function to unset the LDFLAGS and CXXFLAGS
# specifically set for ASAN
unset_asan_env_vars() {
ASAN_CMAKE_PARAMS="false"
export ADDRESS_SANITIZER="OFF"
@@ -68,85 +80,6 @@ set_address_sanitizer_off() {
export LDFLAGS=""
}
build_miopen_ckProf() {
ENABLE_ADDRESS_SANITIZER=false
echo "Start Building Composable Kernel Profiler"
if [ "${ENABLE_ADDRESS_SANITIZER}" == "true" ]; then
set_asan_env_vars
set_address_sanitizer_on
else
unset_asan_env_vars
set_address_sanitizer_off
fi
cd $COMPONENT_SRC
cd "$BUILD_DIR"
rm -rf *
architectures='gfx10 gfx11 gfx90 gfx94'
if [ -n "$GPU_ARCHS" ]; then
architectures=$(echo ${GPU_ARCHS} | awk -F';' '{for(i=1;i<=NF;i++) a[substr($i,1,5)]} END{for(i in a) printf i" "}')
fi
for arch in ${architectures}
do
if [ "${ASAN_CMAKE_PARAMS}" == "true" ] ; then
cmake -DBUILD_DEV=OFF \
-DCMAKE_PREFIX_PATH="${ROCM_PATH%-*}/lib/cmake;${ROCM_PATH%-*}/$ASAN_LIBDIR;${ROCM_PATH%-*}/llvm;${ROCM_PATH%-*}" \
-DCMAKE_BUILD_TYPE=${BUILD_TYPE:-'RelWithDebInfo'} \
-DCMAKE_SHARED_LINKER_FLAGS_INIT="-Wl,--enable-new-dtags,--rpath,$ROCM_ASAN_LIB_RPATH" \
-DCMAKE_EXE_LINKER_FLAGS_INIT="-Wl,--enable-new-dtags,--rpath,$ROCM_ASAN_EXE_RPATH" \
-DCMAKE_VERBOSE_MAKEFILE=1 \
-DCMAKE_INSTALL_RPATH_USE_LINK_PATH=FALSE \
-DCMAKE_INSTALL_PREFIX="${ROCM_PATH}" \
-DCMAKE_PACKAGING_INSTALL_PREFIX="${ROCM_PATH}" \
-DBUILD_FILE_REORG_BACKWARD_COMPATIBILITY=OFF \
-DROCM_SYMLINK_LIBS=OFF \
-DCPACK_PACKAGING_INSTALL_PREFIX="${ROCM_PATH}" \
-DROCM_DISABLE_LDCONFIG=ON \
-DROCM_PATH="${ROCM_PATH}" \
-DCPACK_GENERATOR="${PKGTYPE^^}" \
-DCMAKE_CXX_COMPILER="${ROCM_PATH}/llvm/bin/clang++" \
-DCMAKE_C_COMPILER="${ROCM_PATH}/llvm/bin/clang" \
${LAUNCHER_FLAGS} \
-DPROFILER_ONLY=ON \
-DENABLE_ASAN_PACKAGING=true \
-DGPU_ARCH="${arch}" \
"$COMPONENT_SRC"
else
cmake -DBUILD_DEV=OFF \
-DCMAKE_PREFIX_PATH="${ROCM_PATH%-*}" \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_SHARED_LINKER_FLAGS_INIT='-Wl,--enable-new-dtags,--rpath,$ORIGIN' \
-DCMAKE_EXE_LINKER_FLAGS_INIT='-Wl,--enable-new-dtags,--rpath,$ORIGIN/../lib' \
-DCMAKE_VERBOSE_MAKEFILE=1 \
-DCMAKE_INSTALL_RPATH_USE_LINK_PATH=FALSE \
-DCMAKE_INSTALL_PREFIX="${ROCM_PATH}" \
-DCMAKE_PACKAGING_INSTALL_PREFIX="${ROCM_PATH}" \
-DBUILD_FILE_REORG_BACKWARD_COMPATIBILITY=OFF \
-DROCM_SYMLINK_LIBS=OFF \
-DCPACK_PACKAGING_INSTALL_PREFIX="${ROCM_PATH}" \
-DROCM_DISABLE_LDCONFIG=ON \
-DROCM_PATH="${ROCM_PATH}" \
-DCPACK_GENERATOR="${PKGTYPE^^}" \
-DCMAKE_CXX_COMPILER="${ROCM_PATH}/llvm/bin/clang++" \
-DCMAKE_C_COMPILER="${ROCM_PATH}/llvm/bin/clang" \
${LAUNCHER_FLAGS} \
-DPROFILER_ONLY=ON \
-DGPU_ARCH="${arch}" \
"$COMPONENT_SRC"
fi
cmake --build . -- -j${PROC} package
cp ./*ckprofiler*.${PKGTYPE} $PACKAGE_DIR
rm -rf *
done
rm -rf _CPack_Packages/ && find -name '*.o' -delete
echo "Finished building Composable Kernel"
show_build_cache_stats
}
clean_miopen_ck() {
echo "Cleaning MIOpen-CK build directory: ${BUILD_DIR} ${PACKAGE_DIR}"
rm -rf "$BUILD_DIR" "$PACKAGE_DIR"
@@ -156,7 +89,7 @@ clean_miopen_ck() {
stage2_command_args "$@"
case $TARGET in
build) build_miopen_ck ;;
build) build_miopen_ck; build_wheel ;;
outdir) print_output_directory ;;
clean) clean_miopen_ck ;;
*) die "Invalid target $TARGET" ;;

View File

@@ -11,6 +11,8 @@ printUsage() {
echo " -r, --release Make a release build instead of a debug build"
echo " --enable-assertions Enable assertions"
echo " -a, --address_sanitizer Enable address sanitizer"
echo " -w, --wheel Creates python wheel package of dbgapi.
It needs to be used along with -r option"
echo " -o, --outdir <pkg_type> Print path of output directory containing packages of
type referred to by pkg_type"
echo " -h, --help Prints this help"
@@ -25,6 +27,7 @@ printUsage() {
return 0
}
## Build environment variables
API_NAME=rocm-dbgapi
AMD_DBGAPI_NAME=amd-dbgapi
MAKEINSTALL_MANIFEST=makeinstall_manifest.txt
@@ -36,21 +39,24 @@ PACKAGE_ROOT=$(getPackageRoot)
PACKAGE_LIB=$(getLibPath)
PACKAGE_INCLUDE=$(getIncludePath)
BUILD_DIR=$(getBuildPath $API_NAME)
PACKAGE_DEB=$(getPackageRoot)/deb/$API_NAME
PACKAGE_RPM=$(getPackageRoot)/rpm/$API_NAME
PACKAGE_DEB=$(getPackageRoot)/deb/$PROJ_NAME
PACKAGE_RPM=$(getPackageRoot)/rpm/$PROJ_NAME
#PACKAGE_PREFIX=$ROCM_INSTALL_PATH
BUILD_TYPE=Debug
MAKE_OPTS=($DASH_JAY -C "$BUILD_DIR")
MAKE_OPTS=($DASH_JAY -C "$BUILD_DIR") # Note that DASH_JAY might have a space after the -j
SHARED_LIBS="ON"
CLEAN_OR_OUT=0;
MAKETARGET="deb"
PKGTYPE="deb"
DODOCSBUILD=true
VALID_STR=$(getopt -o hcraso:p:M --long help,clean,release,enable-assertions,static,address_sanitizer,outdir:,package:skip_man_pages -- "$@")
#parse the arguments
VALID_STR=$(getopt -o hcraswo:p:M --long help,clean,release,enable-assertions,static,wheel,address_sanitizer,outdir:,package:skip_man_pages -- "$@")
eval set -- "$VALID_STR"
while true ;
do
#echo "parocessing $1"
case "$1" in
(-h | --help)
printUsage ; exit 0;;
@@ -66,12 +72,14 @@ do
set_address_sanitizer_on ;;
(-s | --static)
ack_and_skip_static ;;
(-w | --wheel)
WHEEL_PACKAGE=true ;;
(-o | --outdir)
TARGET="outdir"; PKGTYPE=$2 ; ((CLEAN_OR_OUT|=2)) ; shift 1 ;;
(-M | --skip_man_pages) DODOCSBUILD=false;;
(-p | --package)
MAKETARGET="$2" ; shift 1;;
--) shift; break;;
--) shift; break;; # end delimiter
(*)
echo " This should never come but just incase : UNEXPECTED ERROR Parm : [$1] ">&2 ; exit 20;;
esac
@@ -104,7 +112,7 @@ build() {
then
echo " No $ROCM_DBGAPI_ROOT/CMakeLists.txt file, skipping rocm-dbgapi" >&2
echo " No $ROCM_DBGAPI_ROOT/CMakeLists.txt file, skipping rocm-dbgapi"
exit 0
exit 0 # THis is not an error
fi
echo "Building $PROJ_NAME"
@@ -121,11 +129,14 @@ build() {
cmake --build "$BUILD_DIR" -- "${MAKE_OPTS[@]}"
"$DODOCSBUILD" && cmake --build "$BUILD_DIR" -- "${MAKE_OPTS[@]}" doc
cmake --build "$BUILD_DIR" -- "${MAKE_OPTS[@]}" install
#install_manifest.txt is created by make install and make package with same name unless
#component packaging is enabled. To avoid overwriting by make package,move the manifest file
#to a different name and can be used for build clean up
mv "$BUILD_DIR/install_manifest.txt" "$BUILD_DIR/$MAKEINSTALL_MANIFEST"
cmake --build "$BUILD_DIR" -- "${MAKE_OPTS[@]}" package
mkdir -p "$PACKAGE_LIB"
# handle the library being in more than one place to avoid breaking the build.
(
shopt -s nullglob
cp -R "$BUILD_DIR/lib/${LIB_NAME}"* "$BUILD_DIR/${LIB_NAME}"* "$PACKAGE_LIB"
@@ -151,7 +162,7 @@ verifyEnvSetup
case $TARGET in
(clean) clean ;;
(build) build ;;
(build) build; build_wheel "$BUILD_DIR" "$PROJ_NAME";;
(outdir) print_output_directory ;;
(*) die "Invalid target $TARGET" ;;
esac

View File

@@ -10,7 +10,9 @@ printUsage() {
echo " -c, --clean Clean output and delete all intermediate work"
echo " -r, --release Build a release version of the package"
echo " -a, --address_sanitizer Enable address sanitizer"
echo " -s, --static Supports static CI by accepting this param & not bailing out. No effect of the param though"
echo " -s, --static Build static lib (.a). build instead of dynamic/shared(.so) "
echo " -w, --wheel Creates python wheel package of devicelibs.
It needs to be used along with -r option"
echo " -o, --outdir <pkg_type> Print path of output directory containing packages of
type referred to by pkg_type"
echo " -h, --help Prints this help"
@@ -19,10 +21,11 @@ printUsage() {
return 0
}
PROJ_NAME="devicelibs"
PACKAGE_ROOT="$(getPackageRoot)"
PACKAGE_BIN="$(getBinPath)"
PACKAGE_LIB="$(getLibPath)"
BUILD_PATH="$(getBuildPath devicelibs)"
BUILD_PATH="$(getBuildPath $PROJ_NAME)"
INSTALL_PATH="$(getPackageRoot)"
LIGHTNING_BUILD_PATH="$(getBuildPath lightning)"
DEB_PATH="$(getDebPath devicelibs)"
@@ -36,11 +39,13 @@ CLEAN_OR_OUT=0;
PKGTYPE="deb"
MAKETARGET="deb"
VALID_STR=`getopt -o hcraso: --long help,clean,release,static,address_sanitizer,outdir: -- "$@"`
#parse the arguments
VALID_STR=`getopt -o hcraswo: --long help,clean,release,static,wheel,address_sanitizer,outdir: -- "$@"`
eval set -- "$VALID_STR"
while true ;
do
#echo "parocessing $1"
case "$1" in
(-h | --help)
printUsage ; exit 0;;
@@ -53,6 +58,8 @@ do
ack_and_ignore_asan ; shift ;;
(-s | --static)
SHARED_LIBS="OFF" ; shift ;;
(-w | --wheel)
WHEEL_PACKAGE=true ; shift ;;
(-o | --outdir)
TARGET="outdir"; PKGTYPE=$2 ; OUT_DIR_SPECIFIED=1 ; ((CLEAN_OR_OUT|=2)) ; shift 2 ;;
--) shift; break;; # end delimiter
@@ -71,7 +78,9 @@ fi
clean_devicelibs() {
# Delete cmake output directory
rm -rf "$BUILD_PATH"
# Delete the *.bc files from the PACKAGE_LIB directory
rm -f $PACKAGE_LIB/hc*.bc
rm -f $PACKAGE_LIB/irif*.bc
rm -f $PACKAGE_LIB/ockl*.bc
@@ -80,6 +89,7 @@ clean_devicelibs() {
rm -f $PACKAGE_LIB/opencl*.bc
rm -f $PACKAGE_LIB/openmp*.bc
rm -rf $PACKAGE_ROOT/amdgcn
# Delete any packages generated
rm -rf "$DEB_PATH"
rm -rf "$RPM_PATH"
}
@@ -96,6 +106,7 @@ build_devicelibs() {
if [ ! -e Makefile ]; then
cmake $(rocm_cmake_params) \
$(rocm_common_cmake_params) \
${GEN_NINJA} \
-DBUILD_SHARED_LIBS=$SHARED_LIBS \
-DROCM_DEVICE_LIBS_BITCODE_INSTALL_LOC_NEW="$bitcodeInstallLoc/amdgcn" \
-DROCM_DEVICE_LIBS_BITCODE_INSTALL_LOC_OLD="amdgcn" \
@@ -133,7 +144,7 @@ print_output_directory() {
}
case $TARGET in
(clean) clean_devicelibs ;;
(build) build_devicelibs; package_devicelibs ;;
(build) build_devicelibs; package_devicelibs; build_wheel "$BUILD_PATH" "$PROJ_NAME" ;;
(outdir) print_output_directory ;;
(*) die "Invalid target $TARGET" ;;
esac

View File

@@ -1,22 +1,31 @@
#!/bin/bash
set -ex
source "$(dirname "${BASH_SOURCE[0]}")/compute_helper.sh"
source "$(dirname "${BASH_SOURCE[0]}")/compute_utils.sh"
set_component_src half
build_half() {
echo "Start build"
if [ "${ENABLE_STATIC_BUILDS}" == "true" ]; then
ack_and_skip_static
fi
if [ "${ENABLE_ADDRESS_SANITIZER}" == "true" ]; then
set_asan_env_vars
set_address_sanitizer_on
# ASAN packaging is not required for HALF, since its header only package
# Setting the asan_cmake_params to false will disable ASAN packaging
ASAN_CMAKE_PARAMS="false"
fi
mkdir -p "$BUILD_DIR" && cd "$BUILD_DIR"
cmake \
-DCMAKE_INSTALL_PREFIX="$ROCM_PATH" \
-DCPACK_PACKAGING_INSTALL_PREFIX=${ROCM_PATH}\
-DCPACK_SET_DESTDIR="OFF" \
-DCPACK_RPM_PACKAGE_RELOCATABLE="ON" \
-DBUILD_FILE_REORG_BACKWARD_COMPATIBILITY=OFF \
"$COMPONENT_SRC"
@@ -25,7 +34,7 @@ build_half() {
cmake --build "$BUILD_DIR" -- install
rm -rf _CPack_Packages/ && find -name '*.o' -delete
mkdir -p $PACKAGE_DIR && cp ${BUILD_DIR}/*.${PKGTYPE} $PACKAGE_DIR
copy_if "${PKGTYPE}" "${CPACKGEN:-"DEB;RPM"}" "${PACKAGE_DIR}" "${BUILD_DIR}"/*."${PKGTYPE}"
show_build_cache_stats
}
@@ -39,7 +48,7 @@ clean_half() {
stage2_command_args "$@"
case $TARGET in
build) build_half ;;
build) build_half; build_wheel ;;
outdir) print_output_directory ;;
clean) clean_half ;;
*) die "Invalid target $TARGET" ;;

View File

@@ -10,6 +10,8 @@ printUsage() {
echo " -r, --release Make a release build instead of a debug build"
echo " -a, --address_sanitizer Enable address sanitizer"
echo " -s, --static Build static lib (.a). build instead of dynamic/shared(.so) "
echo " -w, --wheel Creates python wheel package of hip-on-rocclr.
It needs to be used along with -r option"
echo " -o, --outdir <pkg_type> Print path of output directory containing packages of type referred to by pkg_type"
echo " -t, --offload-arch=<arch> Specify arch for catch tests ex: --offload-arch=gfx1030 --offload-arch=gfx1100"
echo " -p, --package <type> Specify packaging format"
@@ -25,7 +27,6 @@ printUsage() {
source "$(dirname "${BASH_SOURCE}")/compute_utils.sh"
MAKEOPTS="$DASH_JAY"
PROJ_NAME="hip-on-rocclr"
BUILD_PATH="$(getBuildPath $PROJ_NAME)"
TARGET="build"
@@ -53,9 +54,10 @@ MAKETARGET="deb"
PKGTYPE="deb"
OFFLOAD_ARCH=()
DEFAULT_OFFLOAD_ARCH=(gfx900 gfx906 gfx908 gfx90a gfx940 gfx941 gfx942 gfx1030 gfx1031 gfx1033 gfx1034 gfx1035 gfx1100 gfx1101 gfx1102 gfx1200 gfx1201)
DEFAULT_OFFLOAD_ARCH=(gfx900 gfx906 gfx908 gfx90a gfx940 gfx941 gfx942 gfx1030 gfx1031 gfx1033 gfx1034 gfx1035 gfx1100 gfx1101 gfx1102 gfx1103 gfx1150 gfx1151 gfx1200 gfx1201)
VALID_STR=`getopt -o hcrast:o: --long help,clean,release,address_sanitizer,static,offload-arch=:,outdir: -- "$@"`
#parse the arguments
VALID_STR=`getopt -o hcraswt:o: --long help,clean,release,address_sanitizer,static,wheel,offload-arch=:,outdir: -- "$@"`
eval set -- "$VALID_STR"
while true ;
@@ -72,11 +74,13 @@ do
set_address_sanitizer_on ; shift ;;
(-s | --static)
SHARED_LIBS="OFF" ; shift ;;
(-w | --wheel)
WHEEL_PACKAGE=true ; shift ;;
(-t | --offload-arch=)
OFFLOAD_ARCH+=( "$2" ); ((CLEAN_OR_OUT|=2)); shift 2 ;;
(-o | --outdir)
TARGET="outdir"; PKGTYPE=$2 ; OUT_DIR_SPECIFIED=1 ; ((CLEAN_OR_OUT|=2)) ; shift 2 ;;
--) shift; break;;
--) shift; break;; # end delimiter
(*)
echo " This should never come but just incase : UNEXPECTED ERROR Parm : [$1] ">&2 ; exit 20;;
@@ -98,7 +102,10 @@ if [ $RET_CONFLICT -ge 30 ]; then
exit $RET_CONFLICT
fi
clean_hip_on_rocclr() {
# Delete cmake output directory
rm -rf "$BUILD_PATH"
rm -rf "$PACKAGE_DEB"
rm -rf "$PACKAGE_RPM"
@@ -106,17 +113,23 @@ clean_hip_on_rocclr() {
}
build_hip_on_rocclr() {
# TODO This if condition is a temporary workaround so that mainline builds dont error out
# until build migrated from hipamd to clr repo
if [ -e "$CLR_ROOT/CMakeLists.txt" ]; then
# We are in a branch that has migrated to clr repo
_HIP_CMAKELIST_DIR="$CLR_ROOT"
_HIP_CMAKELIST_OPT="-DCLR_BUILD_HIP=ON -DCLR_BUILD_OCL=OFF"
if [ -e "$HIPOTHER_ROOT/hipnv" ]; then
# We are in a branch that has hipnv headers migrated
_HIP_CMAKELIST_OPT="$_HIP_CMAKELIST_OPT -DHIPNV_DIR=$HIPOTHER_ROOT/hipnv"
fi
elif [ ! -e "$HIPAMD_ROOT/CMakeLists.txt" ]; then
# We seem to have hit a branch in which both the old and the new repo don't exist
echo "No $HIPAMD_ROOT/CMakeLists.txt file, skipping hip on rocclr" >&2
echo "No $HIPAMD_ROOT/CMakeLists.txt file, skipping hip on rocclr"
exit 0
exit 0 # This is not an error
else
# We are in a branch that has not yet migrated to clr repo yet
_HIP_CMAKELIST_DIR="$HIPAMD_ROOT"
_HIP_CMAKELIST_OPT=""
fi
@@ -125,6 +138,7 @@ build_hip_on_rocclr() {
mkdir -p "$BUILD_PATH"
pushd "$BUILD_PATH"
# FIXME: Remove -DROCclr_DIR/LIBROCclr_STATIC_DIR
if [ ! -e Makefile ]; then
echo "Building HIP-On-ROCclr CMake environment"
print_lib_type $SHARED_LIBS
@@ -165,8 +179,13 @@ build_catch_tests() {
rm -rf "$CATCH_BUILD_DIR"
mkdir -p "$CATCH_BUILD_DIR"
pushd "$CATCH_BUILD_DIR"
# use the newly built hip as HIP for catch
export HIP_PATH="$ROCM_INSTALL_PATH"
export ROCM_PATH="$ROCM_INSTALL_PATH"
# Note: The rocm_common_cmake_params will provide CMAKE_EXE_LINKER_FLAGS_INIT
# for binaries located in /opt/rocm/bin
# hip-catch binaries are located in each test folder under /opt/rocm/share/hip/catch_test/
# Append the EXE LINKER flags with ROCm library path
cmake \
-DCMAKE_BUILD_TYPE="${BUILD_TYPE}" \
-DBUILD_SHARED_LIBS=$SHARED_LIBS \
@@ -177,6 +196,7 @@ build_catch_tests() {
$(rocm_common_cmake_params) \
-DCPACK_RPM_DEBUGINFO_PACKAGE=FALSE \
-DCPACK_DEBIAN_DEBUGINFO_PACKAGE=FALSE \
-DCMAKE_EXE_LINKER_FLAGS_INIT=-Wl,--enable-new-dtags,--build-id=sha1,--rpath,$ROCM_EXE_RPATH:$ROCM_INSTALL_PATH/lib:/opt/rocm/lib \
-DCPACK_INSTALL_PREFIX="$ROCM_INSTALL_PATH" \
"$CATCH_SRC"
@@ -190,6 +210,7 @@ build_catch_tests() {
}
package_samples() {
# TODO: To be removed once the issue related to ASAN builds are fixed
if [ "$ASAN_CMAKE_PARAMS" == "true" ] ; then
echo "Disable the packaging of HIP samples" >&2
return
@@ -198,13 +219,17 @@ package_samples() {
if [ ! -e "$SAMPLES_SRC/CMakeLists.txt" ]; then
echo "HIP samples source not found at: $SAMPLES_SRC" >&2
echo "Using samples package from hip project: $BUILD_PATH" >&2
# TODO: change to return failure after hip-tests samples change is available in mainline
return
fi
# package samples
rm -rf "$SAMPLES_BUILD_DIR"
mkdir -p "$SAMPLES_BUILD_DIR"
pushd "$SAMPLES_BUILD_DIR"
# The cmake path is different for asan and non-asan builds.
# Fetch after getting build type. Default will be non-asan build
local CMAKE_PATH="$(getCmakePath)"
# use the newly built hip as HIP for samples
export HIP_PATH="$ROCM_INSTALL_PATH"
export ROCM_PATH="$ROCM_INSTALL_PATH"
cmake \
@@ -291,10 +316,24 @@ print_output_directory() {
}
case $TARGET in
(clean) clean_hip_on_rocclr; clean_hip_tests ;;
(build) build_hip_on_rocclr; build_catch_tests; package_hip_on_rocclr; package_samples; copy_hip_tests;;
(outdir) print_output_directory ;;
(*) die "Invalid target $TARGET" ;;
(clean)
clean_hip_on_rocclr
clean_hip_tests
;;
(build)
build_hip_on_rocclr
build_catch_tests
package_hip_on_rocclr
package_samples
build_wheel "$BUILD_PATH" "$PROJ_NAME"
copy_hip_tests
;;
(outdir)
print_output_directory
;;
(*)
die "Invalid target $TARGET"
;;
esac
echo "Operation complete"

View File

@@ -2,16 +2,19 @@
set -ex
source "$(dirname "${BASH_SOURCE[0]}")/compute_helper.sh"
source "$(dirname "${BASH_SOURCE[0]}")/compute_utils.sh"
set_component_src hipBLAS-common
build_hipblas-common() {
echo "Start build"
CXX=$(set_build_variables __C_++__)
cd $COMPONENT_SRC
mkdir -p "$BUILD_DIR" && cd "$BUILD_DIR"
echo "C compiler: $CC"
echo "CXX compiler: $CXX"
init_rocm_common_cmake_params
cmake \
"${rocm_math_common_cmake_params[@]}" \
@@ -20,8 +23,7 @@ build_hipblas-common() {
cmake --build "$BUILD_DIR" -- package
rm -rf _CPack_Packages/ && find -name '*.o' -delete
mkdir -p $PACKAGE_DIR && cp ${BUILD_DIR}/*.${PKGTYPE} $PACKAGE_DIR
copy_if "${PKGTYPE}" "${CPACKGEN:-"DEB;RPM"}" "${PACKAGE_DIR}" "${BUILD_DIR}"/*."${PKGTYPE}"
show_build_cache_stats
}
@@ -34,7 +36,7 @@ clean_hipblas-common() {
stage2_command_args "$@"
case $TARGET in
build) build_hipblas-common ;;
build) build_hipblas-common; build_wheel ;;
outdir) print_output_directory ;;
clean) clean_hipblas-common ;;
*) die "Invalid target $TARGET" ;;

View File

@@ -2,28 +2,32 @@
set -ex
source "$(dirname "${BASH_SOURCE[0]}")/compute_helper.sh"
source "$(dirname "${BASH_SOURCE[0]}")/compute_utils.sh"
set_component_src hipBLAS
build_hipblas() {
echo "Start build"
CXX="g++"
CXX=$(set_build_variables __G_++__)
CXX_FLAG=
if [ "${ENABLE_STATIC_BUILDS}" == "true" ]; then
CXX="amdclang++"
CXX_FLAG="-DCMAKE_CXX_COMPILER=${ROCM_PATH}/llvm/bin/clang++"
CXX=$(set_build_variables __AMD_CLANG_++__)
CXX_FLAG=$(set_build_variables __CMAKE_CXX_PARAMS__)
fi
CLIENTS_SAMPLES="ON"
if [ "${ENABLE_ADDRESS_SANITIZER}" == "true" ]; then
set_asan_env_vars
set_address_sanitizer_on
# fixme: remove CLIENTS_SAMPLES=OFF once SWDEV-417076 is fixed
CLIENTS_SAMPLES="OFF"
fi
SHARED_LIBS="ON"
if [ "${ENABLE_STATIC_BUILDS}" == "true" ]; then
SHARED_LIBS="OFF"
fi
echo "C compiler: $CC"
echo "CXX compiler: $CXX"
@@ -39,10 +43,10 @@ build_hipblas() {
init_rocm_common_cmake_params
cmake \
${LAUNCHER_FLAGS} \
"${rocm_math_common_cmake_params[@]}" \
"${rocm_math_common_cmake_params[@]}" \
-DUSE_CUDA=OFF \
-DBUILD_SHARED_LIBS=$SHARED_LIBS \
-DBUILD_CLIENTS_TESTS=ON \
-DBUILD_CLIENTS_TESTS=ON \
-DBUILD_CLIENTS_BENCHMARKS=ON \
-DBUILD_CLIENTS_SAMPLES="${CLIENTS_SAMPLES}" \
-DBUILD_ADDRESS_SANITIZER="${ADDRESS_SANITIZER}" \
@@ -54,7 +58,7 @@ build_hipblas() {
cmake --build "$BUILD_DIR" -- package
rm -rf _CPack_Packages/ && find -name '*.o' -delete
mkdir -p $PACKAGE_DIR && cp ${BUILD_DIR}/*.${PKGTYPE} $PACKAGE_DIR
copy_if "${PKGTYPE}" "${CPACKGEN:-"DEB;RPM"}" "${PACKAGE_DIR}" "${BUILD_DIR}"/*."${PKGTYPE}"
show_build_cache_stats
}
@@ -68,7 +72,7 @@ clean_hipblas() {
stage2_command_args "$@"
case $TARGET in
build) build_hipblas ;;
build) build_hipblas; build_wheel ;;
outdir) print_output_directory ;;
clean) clean_hipblas ;;
*) die "Invalid target $TARGET" ;;

View File

@@ -1,10 +1,20 @@
#!/bin/bash
set -ex
source "$(dirname "${BASH_SOURCE[0]}")/compute_helper.sh"
source "$(dirname "${BASH_SOURCE[0]}")/compute_utils.sh"
set_component_src hipBLASLt
#not enabling the debug files by defalut
disable_debug_package_generation
# if ENABLE_GPU_ARCH is set in env by Job parameter ENABLE_GPU_ARCH, then set GFX_ARCH to that value
if [ -n "$ENABLE_GPU_ARCH" ]; then
set_gpu_arch "$ENABLE_GPU_ARCH"
else
# gfx90a:xnack+;gfx90a:xnack-;gfx940;gfx941;gfx942
set_gpu_arch "all"
fi
build_hipblaslt() {
echo "Start build"
@@ -20,31 +30,31 @@ build_hipblaslt() {
cd $COMPONENT_SRC
mkdir -p "$BUILD_DIR" && cd "$BUILD_DIR"
if [ "${ENABLE_ADDRESS_SANITIZER}" == "true" ]; then
rebuild_lapack
fi
if [ -n "$GPU_ARCHS" ]; then
GPU_TARGETS="$GPU_ARCHS"
else
# gfx90a:xnack+;gfx90a:xnack-;gfx940;gfx941;gfx942
GPU_TARGETS=all
# hipblaslt requiring Python 3.12.
# Point CMake to that explicit location and adjust LD_LIBRARY_PATH.
if [ "$DISTRO_ID" = "rhel-8.8" ] || [ "$DISTRO_NAME" == "sles" ] || \
[ "$DISTRO_ID" = "rhel-9.1" ] || [ "$DISTRO_ID" = "almalinux-8.10" ] || \
[ "$DISTRO_ID" = "debian-10" ]; then
EXTRA_PYTHON_PATH=/opt/Python-3.12.7
EXTRA_CMAKE_OPTIONS="-DPython_ROOT=/opt/Python-3.12.7"
export LD_LIBRARY_PATH=${EXTRA_PYTHON_PATH}/lib
fi
init_rocm_common_cmake_params
CXX=$(set_build_variables CXX)\
CXX=$(set_build_variables __CXX__)\
cmake \
-DAMDGPU_TARGETS=${GPU_TARGETS} \
${LAUNCHER_FLAGS} \
"${rocm_math_common_cmake_params[@]}" \
"${rocm_math_common_cmake_params[@]}" \
-DTensile_LOGIC= \
-DTensile_CODE_OBJECT_VERSION=default \
-DTensile_CPU_THREADS= \
-DTensile_CPU_THREADS=$((PROC / 4)) \
-DTensile_LIBRARY_FORMAT=msgpack \
-DBUILD_CLIENTS_SAMPLES=ON \
-DBUILD_CLIENTS_TESTS=ON \
-DLINK_BLIS=ON \
-DBUILD_CLIENTS_BENCHMARKS=ON \
-DBUILD_ADDRESS_SANITIZER="${ADDRESS_SANITIZER}" \
${EXTRA_CMAKE_OPTIONS} \
"$COMPONENT_SRC"
cmake --build "$BUILD_DIR" -- -j${PROC}
@@ -52,8 +62,7 @@ build_hipblaslt() {
cmake --build "$BUILD_DIR" -- package
rm -rf _CPack_Packages/ && find -name '*.o' -delete
mkdir -p $PACKAGE_DIR && cp ${BUILD_DIR}/*.${PKGTYPE} $PACKAGE_DIR
copy_if "${PKGTYPE}" "${CPACKGEN:-"DEB;RPM"}" "${PACKAGE_DIR}" "${BUILD_DIR}"/*."${PKGTYPE}"
show_build_cache_stats
}
@@ -66,7 +75,7 @@ clean_hipblaslt() {
stage2_command_args "$@"
case $TARGET in
build) build_hipblaslt ;;
build) build_hipblaslt; build_wheel ;;
outdir) print_output_directory ;;
clean) clean_hipblaslt ;;
*) die "Invalid target $TARGET" ;;

View File

@@ -9,6 +9,8 @@ printUsage() {
echo "Options:"
echo " -a, --address_sanitizer Enable address sanitizer"
echo " -c, --clean Clean output and delete all intermediate work"
echo " -w, --wheel Creates python wheel package of hipcc.
It needs to be used along with -r option"
echo " -o, --outdir <pkg_type> Print path of output directory containing packages of
type referred to by pkg_type"
echo " -r, --release Makes a release build"
@@ -21,6 +23,7 @@ printUsage() {
}
## Build environment variables
API_NAME=hipcc
PROJ_NAME=$API_NAME
@@ -29,10 +32,11 @@ MAKEOPTS="$DASH_JAY"
BUILD_TYPE="Debug"
SHARED_LIBS="ON"
BUILD_DIR=$(getBuildPath $API_NAME)
PACKAGE_DEB=$(getPackageRoot)/deb/$API_NAME
PACKAGE_RPM=$(getPackageRoot)/rpm/$API_NAME
PACKAGE_DEB=$(getPackageRoot)/deb/$PROJ_NAME
PACKAGE_RPM=$(getPackageRoot)/rpm/$PROJ_NAME
PACKAGE_SRC="$(getSrcPath)"
#parse the arguments
VALID_STR=`getopt -o hcraswo:p: --long help,clean,release,address_sanitizer,static,outdir,wheel:,package: -- "$@"`
eval set -- "$VALID_STR"
@@ -45,13 +49,15 @@ do
TARGET="clean" ;;
(-o | --outdir)
TARGET="outdir"; PKGTYPE=$2 ; OUT_DIR_SPECIFIED=1 ; ((CLEAN_OR_OUT|=2)) ; shift 1 ;;
(-w | --wheel)
WHEEL_PACKAGE=true ;;
(-r | --release)
BUILD_TYPE="RelWithDebInfo" ;;
(-s | --static)
SHARED_LIBS="OFF" ;;
(-h | --help)
printUsage ; exit 0 ;;
--) shift; break;;
--) shift; break;; # end delimiter
(*)
echo "Invalid option [$1]" >&2; printUsage; exit 1 ;;
esac
@@ -91,7 +97,7 @@ build() {
$(rocm_cmake_params) \
$(rocm_common_cmake_params) \
-DHIPCC_BACKWARD_COMPATIBILITY=OFF \
-DCMAKE_INSTALL_PREFIX="$OUT_DIR" \
-DCMAKE_INSTALL_PREFIX="$ROCM_PATH" \
$HIPCC_ROOT
popd
@@ -118,10 +124,20 @@ print_output_directory() {
}
case $TARGET in
(clean) clean ;;
(build) build ; copy_hipcc_sources ;;
(outdir) print_output_directory ;;
(*) die "Invalid target $TARGET" ;;
(clean)
clean
;;
(build)
build
build_wheel "$BUILD_DIR" "$PROJ_NAME"
copy_hipcc_sources
;;
(outdir)
print_output_directory
;;
(*)
die "Invalid target $TARGET"
;;
esac
echo "Operation complete"

View File

@@ -2,7 +2,7 @@
set -ex
source "$(dirname "${BASH_SOURCE[0]}")/compute_helper.sh"
source "$(dirname "${BASH_SOURCE[0]}")/compute_utils.sh"
set_component_src hipCUB
@@ -17,26 +17,21 @@ build_hipcub() {
if [ "${ENABLE_ADDRESS_SANITIZER}" == "true" ]; then
set_asan_env_vars
set_address_sanitizer_on
# ASAN packaging is not required for HIPCUB, since its header only package
# Setting the asan_cmake_params to false will disable ASAN packaging
ASAN_CMAKE_PARAMS="false"
fi
mkdir -p "$BUILD_DIR" && cd "$BUILD_DIR"
init_rocm_common_cmake_params
if [ -n "$GPU_ARCHS" ]; then
GPU_TARGETS="$GPU_ARCHS"
else
GPU_TARGETS="gfx908:xnack-;gfx90a:xnack-;gfx90a:xnack+;gfx940;gfx941;gfx942;gfx1030;gfx1100;gfx1101;gfx1102;gfx1200;gfx1201"
fi
CXX=$(set_build_variables CXX)\
CXX=$(set_build_variables __CXX__)\
cmake \
${LAUNCHER_FLAGS} \
"${rocm_math_common_cmake_params[@]}" \
"${rocm_math_common_cmake_params[@]}" \
-DCMAKE_MODULE_PATH="${ROCM_PATH}/lib/cmake/hip;${ROCM_PATH}/hip/cmake" \
-Drocprim_DIR="${ROCM_PATH}/rocprim" \
-DBUILD_TEST=ON \
-DAMDGPU_TARGETS=${GPU_TARGETS} \
"$COMPONENT_SRC"
cmake --build "$BUILD_DIR" -- -j${PROC}
@@ -44,7 +39,7 @@ build_hipcub() {
cmake --build "$BUILD_DIR" -- package
rm -rf _CPack_Packages/ && find -name '*.o' -delete
mkdir -p $PACKAGE_DIR && cp ${BUILD_DIR}/*.${PKGTYPE} $PACKAGE_DIR
copy_if "${PKGTYPE}" "${CPACKGEN:-"DEB;RPM"}" "${PACKAGE_DIR}" "${BUILD_DIR}"/*."${PKGTYPE}"
show_build_cache_stats
}
@@ -58,7 +53,7 @@ clean_hipcub() {
stage2_command_args "$@"
case $TARGET in
build) build_hipcub ;;
build) build_hipcub; build_wheel ;;
outdir) print_output_directory ;;
clean) clean_hipcub ;;
*) die "Invalid target $TARGET" ;;

View File

@@ -2,13 +2,17 @@
set -ex
source "$(dirname "${BASH_SOURCE[0]}")/compute_helper.sh"
source "$(dirname "${BASH_SOURCE[0]}")/compute_utils.sh"
set_component_src hipFFT
build_hipfft() {
echo "Start build"
if [ "${ENABLE_STATIC_BUILDS}" == "true" ]; then
ack_and_skip_static
fi
if [ "${ENABLE_ADDRESS_SANITIZER}" == "true" ]; then
set_asan_env_vars
set_address_sanitizer_on
@@ -18,17 +22,10 @@ build_hipfft() {
mkdir -p "$BUILD_DIR" && cd "$BUILD_DIR"
init_rocm_common_cmake_params
if [ -n "$GPU_ARCHS" ]; then
GPU_TARGETS="$GPU_ARCHS"
else
GPU_TARGETS="gfx908;gfx90a;gfx940;gfx941;gfx942;gfx1030;gfx1100;gfx1101;gfx1102;gfx1200;gfx1201"
fi
cmake \
-DCMAKE_CXX_COMPILER=$(set_build_variables CXX) \
"$(set_build_variables __CMAKE_CXX_PARAMS__)" \
${LAUNCHER_FLAGS} \
"${rocm_math_common_cmake_params[@]}" \
-DAMDGPU_TARGETS=${GPU_TARGETS} \
"${rocm_math_common_cmake_params[@]}" \
-DCMAKE_MODULE_PATH="${ROCM_PATH}/lib/cmake/hip" \
-DCMAKE_SKIP_BUILD_RPATH=TRUE \
-DBUILD_ADDRESS_SANITIZER="${ADDRESS_SANITIZER}" \
@@ -41,7 +38,7 @@ build_hipfft() {
cmake --build "$BUILD_DIR" -- package
rm -rf _CPack_Packages/ && find -name '*.o' -delete
mkdir -p $PACKAGE_DIR && cp ${BUILD_DIR}/*.${PKGTYPE} $PACKAGE_DIR
copy_if "${PKGTYPE}" "${CPACKGEN:-"DEB;RPM"}" "${PACKAGE_DIR}" "${BUILD_DIR}"/*."${PKGTYPE}"
show_build_cache_stats
}
@@ -55,7 +52,7 @@ clean_hipfft() {
stage2_command_args "$@"
case $TARGET in
build) build_hipfft ;;
build) build_hipfft; build_wheel ;;
outdir) print_output_directory ;;
clean) clean_hipfft ;;
*) die "Invalid target $TARGET" ;;

View File

@@ -1,13 +1,18 @@
#!/bin/bash
set -ex
source "$(dirname "${BASH_SOURCE[0]}")/compute_helper.sh"
source "$(dirname "${BASH_SOURCE[0]}")/compute_utils.sh"
set_component_src hipfort
build_hipfort() {
echo "Start build"
if [ "${ENABLE_ADDRESS_SANITIZER}" == "true" ]; then
set_asan_env_vars
set_address_sanitizer_on
fi
if [ "${ENABLE_STATIC_BUILDS}" == "true" ]; then
ack_and_skip_static
fi
@@ -26,7 +31,7 @@ build_hipfort() {
-DCMAKE_Fortran_FLAGS_DEBUG="" \
${LAUNCHER_FLAGS} \
-DROCM_SYMLINK_LIBS=OFF \
-DCMAKE_INSTALL_PREFIX=${ROCM_PATH} \
-DCMAKE_INSTALL_PREFIX=${ROCM_PATH} \
-DHIPFORT_AR="${ROCM_PATH}/${ROCM_LLVMDIR}/bin/llvm-ar" \
-DHIPFORT_RANLIB="${ROCM_PATH}/${ROCM_LLVMDIR}/bin/llvm-ranlib" \
"$COMPONENT_SRC"
@@ -36,7 +41,7 @@ build_hipfort() {
cmake --build "$BUILD_DIR" -- package
rm -rf _CPack_Packages/ && find -name '*.o' -delete
mkdir -p $PACKAGE_DIR && cp ${BUILD_DIR}/*.${PKGTYPE} $PACKAGE_DIR
copy_if "${PKGTYPE}" "${CPACKGEN:-"DEB;RPM"}" "${PACKAGE_DIR}" "${BUILD_DIR}"/*."${PKGTYPE}"
show_build_cache_stats
}
@@ -50,7 +55,7 @@ clean_hipfort() {
stage2_command_args "$@"
case $TARGET in
build) build_hipfort ;;
build) build_hipfort; build_wheel ;;
outdir) print_output_directory ;;
clean) clean_hipfort ;;
*) die "Invalid target $TARGET" ;;

View File

@@ -10,15 +10,21 @@ printUsage() {
echo " -c, --clean Clean output and delete all intermediate work"
echo " -o, --outdir <pkg_type> Print path of output directory containing packages of
type referred to by pkg_type"
echo " -h, --help Prints this help"
echo " -r, --release Make a release build"
echo " -r, --release Make a release build"
echo " -n, --skip_hipify_tests Skip hipify-clang testing"
echo " -a, --address_sanitizer Enable address sanitizer"
echo " -s, --static Supports static CI by accepting this param & not bailing out. No effect of the param though"
echo " -s, --static Component/Build does not support static builds just accepting this param & ignore. No effect of the param on this build"
echo " -i, --clang_headers Install clang headers"
echo " -w, --wheel Creates python wheel package of hipify-clang.
It needs to be used along with -r option"
echo " -h, --help Prints this help"
echo
return 0
}
# Build Environmental Variables
PROJ_NAME="hipify"
TARGET="build"
MAKEOPTS="$DASH_JAY"
HIPIFY_CLANG_BUILD_DIR="$(getBuildPath $HIPIFY_ROOT)"
@@ -26,6 +32,11 @@ BUILD_TYPE="Debug"
PACKAGE_ROOT="$(getPackageRoot)"
HIPIFY_CLANG_HASH=""
LIGHTNING_PATH="$ROCM_INSTALL_PATH/llvm"
LIGHTNING_BUILD_PATH="$PACKAGE_ROOT/build/lightning"
RUN_HIPIFY_TESTS=false
CUDA_DEFAULT_VERSION="12.3.2"
CUDNN_DEFAULT_VERSION="9.2.0"
GCC_MIN_VERSION="9.2"
ADDRESS_SANITIZER=false
INSTALL_CLANG_HEADERS="OFF"
DEB_PATH="$(getDebPath hipify)"
@@ -36,7 +47,8 @@ MAKETARGET="deb"
PKGTYPE="deb"
VALID_STR=`getopt -o hcraso: --long help,clean,release,static,address_sanitizer,outdir: -- "$@"`
#parse the arguments
VALID_STR=`getopt -o hcrnawsio: --long help,clean,release,skip_hipify_tests,wheel,static,address_sanitizer,clang_headers,outdir: -- "$@"`
eval set -- "$VALID_STR"
while true ;
@@ -48,15 +60,21 @@ do
TARGET="clean" ; ((CLEAN_OR_OUT|=1)) ; shift ;;
(-r | --release)
BUILD_TYPE="RelWithDebInfo" ; shift ;;
(-n | --skip_hipify_tests)
RUN_HIPIFY_TESTS=false; shift ;;
(-a | --address_sanitizer)
set_asan_env_vars
set_address_sanitizer_on
ADDRESS_SANITIZER=true ; shift ;;
(-s | --static)
ack_and_skip_static ;;
(-w | --wheel)
WHEEL_PACKAGE=true ; shift ;;
(-i | --clang_headers)
INSTALL_CLANG_HEADERS="ON" ; shift ;;
(-o | --outdir)
TARGET="outdir"; PKGTYPE=$2 ; OUT_DIR_SPECIFIED=1 ; ((CLEAN_OR_OUT|=2)) ; shift 2 ;;
--) shift; break;;
--) shift; break;; # end delimiter
(*)
echo " This should never come but just incase : UNEXPECTED ERROR Parm : [$1] ">&2 ; exit 20;;
esac
@@ -79,6 +97,7 @@ clean_hipify() {
}
package_hipify() {
# set-up dirs
if [ "$PACKAGEEXT" = "deb" ]; then
rm -rf "$DEB_PATH"
mkdir -p "$DEB_PATH"
@@ -89,6 +108,7 @@ package_hipify() {
mkdir -p "$RPM_PATH"
fi
# make the pkg
pushd "$HIPIFY_CLANG_BUILD_DIR"
make $MAKEOPTS package_hipify-clang
popd
@@ -102,7 +122,37 @@ build_hipify() {
mkdir -p "$HIPIFY_CLANG_BUILD_DIR"
pushd "$HIPIFY_CLANG_BUILD_DIR"
# Check the installed GCC version
INSTALLED_GCC_VERSION=$(gcc --version | head -n 1 | sed -E 's/[^0-9]*([0-9]+\.[0-9]+).*/\1/')
if echo "$INSTALLED_GCC_VERSION $GCC_MIN_VERSION" | awk '{exit !($1 < $2)}'; then
RUN_HIPIFY_TESTS=false
echo "Minimum required GCC version: $GCC_MIN_VERSION"
echo "Installed GCC version $INSTALLED_GCC_VERSION does not meet the minimum GCC version requirement."
echo "Skipping hipify tests"
fi
if $ADDRESS_SANITIZER ; then
echo "Skipping hipify tests becasue of Address Sanitizer"
RUN_HIPIFY_TESTS=false
fi
if $RUN_HIPIFY_TESTS ; then
# TODO: Add option for user defined cuda version?
CUDA_VERSION="${CUDA_DEFAULT_VERSION}"
CUDNN_VERSION="${CUDNN_DEFAULT_VERSION}"
if [[ "$DISTRO_ID" == "rhel-8"* || "$DISTRO_NAME" == "sles" || "$DISTRO_ID" == "debian-10" ]]; then
EXTRA_PYTHON_PATH=/opt/Python-3.8.13
export LD_LIBRARY_PATH=${EXTRA_PYTHON_PATH}/lib:$LD_LIBRARY_PATH
fi
echo "Copy FileCheck into ROCM_INSTALL_PATH"
cp "$LIGHTNING_BUILD_PATH/bin/FileCheck" "$LIGHTNING_PATH/bin/FileCheck"
fi
cmake \
-DHIPIFY_CLANG_TESTS="$RUN_HIPIFY_TESTS" \
-DCMAKE_BUILD_TYPE="$BUILD_TYPE" \
$(rocm_common_cmake_params) \
-DCMAKE_INSTALL_PREFIX="$ROCM_INSTALL_PATH" \
@@ -110,10 +160,20 @@ build_hipify() {
-DCMAKE_PREFIX_PATH="$LIGHTNING_PATH" \
-DADDRESS_SANITIZER="$ADDRESS_SANITIZER" \
-DHIPIFY_INSTALL_CLANG_HEADERS="$INSTALL_CLANG_HEADERS" \
-DCUDA_TOOLKIT_ROOT_DIR="/usr/local/cuda-${CUDA_DEFAULT_VERSION}" \
-DCUDA_DNN_ROOT_DIR="/usr/local/cuDNN/${CUDNN_DEFAULT_VERSION}" \
-DCUDA_CUB_ROOT_DIR="/usr/local/cuda-${CUDA_DEFAULT_VERSION}" \
-DLLVM_EXTERNAL_LIT="${LIGHTNING_BUILD_PATH}/bin/llvm-lit" \
$HIPIFY_ROOT
if $RUN_HIPIFY_TESTS ; then
echo "Running hipify tests"
cmake --build . -- $MAKEOPTS test-hipify
fi
cmake --build . -- $MAKEOPTS install
popd
pushd "$HIPIFY_ROOT"
HIPIFY_CLANG_HASH=`git describe --dirty --long --match [0-9]* --always`
popd
@@ -132,10 +192,20 @@ print_output_directory() {
}
case $TARGET in
(clean) clean_hipify ;;
(build) build_hipify; package_hipify ;;
(outdir) print_output_directory ;;
(*) die "Invalid target $TARGET" ;;
(clean)
clean_hipify
;;
(build)
build_hipify
package_hipify
build_wheel "$HIPIFY_CLANG_BUILD_DIR" "$PROJ_NAME"
;;
(outdir)
print_output_directory
;;
(*)
die "Invalid target $TARGET"
;;
esac
echo "Operation complete"

View File

@@ -1,7 +1,7 @@
#!/bin/bash
set -ex
source "$(dirname "${BASH_SOURCE[0]}")/compute_helper.sh"
source "$(dirname "${BASH_SOURCE[0]}")/compute_utils.sh"
set_component_src hipRAND
@@ -41,17 +41,10 @@ build_hiprand() {
init_rocm_common_cmake_params
if [ -n "$GPU_ARCHS" ]; then
GPU_TARGETS="$GPU_ARCHS"
else
GPU_TARGETS="gfx908:xnack-;gfx90a:xnack-;gfx90a:xnack+;gfx940;gfx941;gfx942;gfx1030;gfx1100;gfx1101;gfx1102;gfx1200;gfx1201"
fi
CXX=$(set_build_variables CXX)\
CXX=$(set_build_variables __CXX__)\
cmake \
${LAUNCHER_FLAGS} \
"${rocm_math_common_cmake_params[@]}" \
-DAMDGPU_TARGETS=${GPU_TARGETS} \
-DBUILD_SHARED_LIBS=$SHARED_LIBS \
-DBUILD_TEST=ON \
-DBUILD_BENCHMARK=ON \
@@ -67,7 +60,7 @@ build_hiprand() {
cmake --build "$BUILD_DIR" -- package
rm -rf _CPack_Packages/ && find -name '*.o' -delete
mkdir -p $PACKAGE_DIR && cp ${BUILD_DIR}/*.${PKGTYPE} $PACKAGE_DIR
copy_if "${PKGTYPE}" "${CPACKGEN:-"DEB;RPM"}" "${PACKAGE_DIR}" "${BUILD_DIR}"/*."${PKGTYPE}"
}
clean_hiprand() {
@@ -89,7 +82,7 @@ print_output_directory() {
}
case $TARGET in
build) build_hiprand ;;
build) build_hiprand; build_wheel ;;
outdir) print_output_directory ;;
clean) clean_hiprand ;;
*) die "Invalid target $TARGET" ;;

View File

@@ -2,7 +2,7 @@
set -ex
source "$(dirname "${BASH_SOURCE[0]}")/compute_helper.sh"
source "$(dirname "${BASH_SOURCE[0]}")/compute_utils.sh"
set_component_src hipSOLVER
@@ -10,12 +10,12 @@ build_hipsolver() {
echo "Start build"
if [ "${ENABLE_STATIC_BUILDS}" == "true" ]; then
CXX_FLAG="-DCMAKE_CXX_COMPILER=${ROCM_PATH}/llvm/bin/clang++"
CXX_FLAG=$(set_build_variables __CMAKE_CXX_PARAMS__)
fi
cd $COMPONENT_SRC
CXX="amdclang++"
CXX=$(set_build_variables __AMD_CLANG_++__)
if [ "${ENABLE_ADDRESS_SANITIZER}" == "true" ]; then
set_asan_env_vars
set_address_sanitizer_on
@@ -39,7 +39,7 @@ build_hipsolver() {
init_rocm_common_cmake_params
cmake \
-DUSE_CUDA=OFF \
-DCMAKE_CXX_COMPILER=${CXX} \
-DCMAKE_CXX_COMPILER=${CXX} \
${LAUNCHER_FLAGS} \
"${rocm_math_common_cmake_params[@]}" \
-DBUILD_SHARED_LIBS=$SHARED_LIBS \
@@ -55,7 +55,7 @@ build_hipsolver() {
cmake --build "$BUILD_DIR" -- package
rm -rf _CPack_Packages/ && find -name '*.o' -delete
mkdir -p $PACKAGE_DIR && cp ${BUILD_DIR}/*.${PKGTYPE} $PACKAGE_DIR
copy_if "${PKGTYPE}" "${CPACKGEN:-"DEB;RPM"}" "${PACKAGE_DIR}" "${BUILD_DIR}"/*."${PKGTYPE}"
show_build_cache_stats
}
@@ -69,7 +69,7 @@ clean_hipsolver() {
stage2_command_args "$@"
case $TARGET in
build) build_hipsolver ;;
build) build_hipsolver; build_wheel ;;
outdir) print_output_directory ;;
clean) clean_hipsolver ;;
*) die "Invalid target $TARGET" ;;

View File

@@ -2,7 +2,7 @@
set -ex
source "$(dirname "${BASH_SOURCE[0]}")/compute_helper.sh"
source "$(dirname "${BASH_SOURCE[0]}")/compute_utils.sh"
PATH=${ROCM_PATH}/bin:$PATH
set_component_src hipSPARSE
@@ -10,12 +10,12 @@ set_component_src hipSPARSE
build_hipsparse() {
echo "Start build"
CXX="g++"
CXX=$(set_build_variables __G_++__)
CXX_FLAG=
if [ "${ENABLE_STATIC_BUILDS}" == "true" ]; then
CXX="${ROCM_PATH}/llvm/bin/clang++"
CXX_FLAG="-DCMAKE_CXX_COMPILER=${ROCM_PATH}/llvm/bin/clang++"
CXX=$(set_build_variables __CXX__)
CXX_FLAG=$(set_build_variables __CMAKE_CXX_PARAMS__)
fi
cd $COMPONENT_SRC
@@ -54,7 +54,7 @@ build_hipsparse() {
cmake --build "$BUILD_DIR" -- package
rm -rf _CPack_Packages/ && find -name '*.o' -delete
mkdir -p $PACKAGE_DIR && cp ${BUILD_DIR}/*.${PKGTYPE} $PACKAGE_DIR
copy_if "${PKGTYPE}" "${CPACKGEN:-"DEB;RPM"}" "${PACKAGE_DIR}" "${BUILD_DIR}"/*."${PKGTYPE}"
show_build_cache_stats
}
@@ -68,7 +68,7 @@ clean_hipsparse() {
stage2_command_args "$@"
case $TARGET in
build) build_hipsparse ;;
build) build_hipsparse; build_wheel ;;
outdir) print_output_directory ;;
clean) clean_hipsparse ;;
*) die "Invalid target $TARGET" ;;

View File

@@ -1,10 +1,18 @@
#!/bin/bash
set -ex
source "$(dirname "${BASH_SOURCE[0]}")/compute_helper.sh"
source "$(dirname "${BASH_SOURCE[0]}")/compute_utils.sh"
set_component_src hipSPARSELt
disable_debug_package_generation
# if ENABLE_GPU_ARCH is set in env by Job parameter ENABLE_GPU_ARCH, then set GFX_ARCH to that value
if [ -n "$ENABLE_GPU_ARCH" ]; then
set_gpu_arch "$ENABLE_GPU_ARCH"
else
# gfx90a:xnack+;gfx90a:xnack-;gfx940;gfx941;gfx942
set_gpu_arch "all"
fi
while [ "$1" != "" ];
do
case $1 in
@@ -18,6 +26,28 @@ do
shift 1
done
create_blis_link()
{
#find the pre-installed blis library and create the link under $BUILD_DIR/deps/blis
BLIS_REF_ROOT="$BUILD_DIR/deps/blis"
mkdir -p "$BLIS_REF_ROOT"/include
if [[ -e "/opt/AMD/aocl/aocl-linux-gcc-4.2.0/gcc/lib_ILP64/libblis-mt.a" ]]; then
ln -sf /opt/AMD/aocl/aocl-linux-gcc-4.2.0/gcc/include_ILP64 ${BLIS_REF_ROOT}/include/blis
ln -sf /opt/AMD/aocl/aocl-linux-gcc-4.2.0/gcc/lib_ILP64 ${BLIS_REF_ROOT}/lib
elif [[ -e "/opt/AMD/aocl/aocl-linux-gcc-4.1.0/gcc/lib_ILP64/libblis-mt.a" ]]; then
ln -sf /opt/AMD/aocl/aocl-linux-gcc-4.1.0/gcc/include_ILP64 ${BLIS_REF_ROOT}/include/blis
ln -sf /opt/AMD/aocl/aocl-linux-gcc-4.1.0/gcc/lib_ILP64 ${BLIS_REF_ROOT}/lib
elif [[ -e "/opt/AMD/aocl/aocl-linux-gcc-4.0.0/gcc/lib_ILP64/libblis-mt.a" ]]; then
ln -sf /opt/AMD/aocl/aocl-linux-gcc-4.0.0/gcc/include_ILP64 ${BLIS_REF_ROOT}/include/blis
ln -sf /opt/AMD/aocl/aocl-linux-gcc-4.0.0/gcc/lib_ILP64 ${BLIS_REF_ROOT}/lib
elif [[ -e "/usr/local/lib/libblis.a" ]]; then
ln -sf /usr/local/include/blis ${BLIS_REF_ROOT}/include/blis
ln -sf /usr/local/lib ${BLIS_REF_ROOT}/lib
else
echo "error: BLIS lib not found."
fi
}
build_hipsparselt() {
echo "Start build"
@@ -32,21 +62,17 @@ build_hipsparselt() {
cd $COMPONENT_SRC
mkdir -p "$BUILD_DIR" && cd "$BUILD_DIR"
init_rocm_common_cmake_params
if [ -n "$GPU_ARCHS" ]; then
GPU_TARGETS="$GPU_ARCHS"
else
# gfx940;gfx941;gfx942
GPU_TARGETS=all
if [ "${ENABLE_ADDRESS_SANITIZER}" == "true" ]; then
create_blis_link
EXTRA_CMAKE_OPTIONS="-DLINK_BLIS=ON -DBUILD_DIR=${BUILD_DIR}"
fi
FC=gfortran \
CXX="${ROCM_PATH}/bin/hipcc" \
init_rocm_common_cmake_params
CXX=$(set_build_variables __CXX__) \
cmake \
-DAMDGPU_TARGETS=${GPU_TARGETS} \
${LAUNCHER_FLAGS} \
"${rocm_math_common_cmake_params[@]}" \
"${rocm_math_common_cmake_params[@]}" \
-DTensile_LOGIC= \
-DTensile_CODE_OBJECT_VERSION=default \
-DTensile_CPU_THREADS= \
@@ -56,13 +82,14 @@ build_hipsparselt() {
-DBUILD_CLIENTS_BENCHMARKS=ON \
-DCMAKE_INSTALL_PREFIX=${ROCM_PATH} \
-DBUILD_ADDRESS_SANITIZER="${ADDRESS_SANITIZER}" \
${EXTRA_CMAKE_OPTIONS} \
"$COMPONENT_SRC"
cmake --build "$BUILD_DIR" -- -j${PROC}
cmake --build "$BUILD_DIR" -- install
cmake --build "$BUILD_DIR" -- package
mkdir -p $PACKAGE_DIR && cp ${BUILD_DIR}/*.${PKGTYPE} $PACKAGE_DIR
copy_if "${PKGTYPE}" "${CPACKGEN:-"DEB;RPM"}" "${PACKAGE_DIR}" "${BUILD_DIR}"/*."${PKGTYPE}"
$SCCACHE_BIN -s || echo "Unable to display sccache stats"
}
@@ -86,7 +113,7 @@ print_output_directory() {
}
case $TARGET in
build) build_hipsparselt ;;
build) build_hipsparselt; build_wheel ;;
outdir) print_output_directory ;;
clean) clean_hipsparselt ;;
*) die "Invalid target $TARGET" ;;

View File

@@ -2,9 +2,10 @@
set -ex
source "$(dirname "${BASH_SOURCE[0]}")/compute_helper.sh"
source "$(dirname "${BASH_SOURCE[0]}")/compute_utils.sh"
set_component_src hipTensor
disable_debug_package_generation
build_hiptensor() {
echo "Start build hipTensor"
@@ -22,17 +23,11 @@ build_hiptensor() {
mkdir -p "$BUILD_DIR" && cd "$BUILD_DIR"
init_rocm_common_cmake_params
if [ -n "$GPU_ARCHS" ]; then
GPU_TARGETS="$GPU_ARCHS"
else
GPU_TARGETS="gfx908:xnack-;gfx90a:xnack-;gfx90a:xnack+;gfx940;gfx941;gfx942"
fi
cmake \
-B "${BUILD_DIR}" \
"${rocm_math_common_cmake_params[@]}" \
$(set_build_variables CMAKE_C_CXX) \
-DAMDGPU_TARGETS=${GPU_TARGETS} \
"$(set_build_variables __CMAKE_CC_PARAMS__)" \
"$(set_build_variables __CMAKE_CXX_PARAMS__)" \
${LAUNCHER_FLAGS} \
"$COMPONENT_SRC"
@@ -41,7 +36,7 @@ build_hiptensor() {
cmake --build "$BUILD_DIR" -- package
rm -rf _CPack_Packages/ && find -name '*.o' -delete
mkdir -p "$PACKAGE_DIR" && cp ${BUILD_DIR}/*.${PKGTYPE} "$PACKAGE_DIR"
copy_if "${PKGTYPE}" "${CPACKGEN:-"DEB;RPM"}" "${PACKAGE_DIR}" "${BUILD_DIR}"/*."${PKGTYPE}"
show_build_cache_stats
}
@@ -55,7 +50,7 @@ clean_hiptensor() {
stage2_command_args "$@"
case $TARGET in
build) build_hiptensor ;;
build) build_hiptensor; build_wheel ;;
outdir) print_output_directory ;;
clean) clean_hiptensor ;;
*) die "Invalid target $TARGET" ;;

151
tools/rocm-build/build_hsa.sh Executable file
View File

@@ -0,0 +1,151 @@
#!/bin/bash
source "$(dirname "${BASH_SOURCE}")/compute_utils.sh"
printUsage() {
echo
echo "Usage: $(basename "${BASH_SOURCE}") [options ...] [make options]"
echo
echo "Options:"
echo " -c, --clean Clean output and delete all intermediate work"
echo " -r, --release Make a release build instead of a debug build"
echo " -a, --address_sanitizer Enable address sanitizer"
echo " -o, --outdir <pkg_type> Print path of output directory containing packages of type referred to by pkg_type"
echo " -s, --static Build static lib (.a). build instead of dynamic/shared(.so) "
echo " -w, --wheel Creates python wheel package of hsa. It needs to be used along with -r option"
echo " -h, --help Prints this help"
echo
echo
return 0
}
PROJ_NAME="rocr"
TARGET="build"
PACKAGE_ROOT="$(getPackageRoot)"
PACKAGE_SRC="$(getSrcPath)"
PACKAGE_LIB="$(getLibPath)"
PACKAGE_BIN="$(getBinPath)"
PACKAGE_DEB="$(getPackageRoot)/deb/$PROJ_NAME"
PACKAGE_RPM="$(getPackageRoot)/rpm/$PROJ_NAME"
MAKEARG=""
CORE_BUILD_DIR="$(getBuildPath hsa-core)"
ROCR_DEV_BUILD_DIR="$(getBuildPath hsa-rocr-dev)"
PREFIX_PATH="$PACKAGE_ROOT"
BUILD_TYPE="Debug"
SHARED_LIBS="ON"
CLEAN_OR_OUT=0;
MAKETARGET="deb"
PKGTYPE="deb"
unset HIP_DEVICE_LIB_PATH
unset ROCM_PATH
#parse the arguments
VALID_STR=`getopt -o hcraswo: --long help,clean,release,static,wheel,address_sanitizer,outdir: -- "$@"`
eval set -- "$VALID_STR"
while true ;
do
#echo "parocessing $1"
case "$1" in
(-h | --help)
printUsage ; exit 0;;
(-c | --clean)
TARGET="clean" ; ((CLEAN_OR_OUT|=1)) ; shift ;;
(-r | --release)
BUILD_TYPE="RelWithDebInfo" ; shift ;;
(-a | --address_sanitizer)
set_asan_env_vars
set_address_sanitizer_on ; shift ;;
(-s | --static)
SHARED_LIBS="OFF" ; shift ;;
(-w | --wheel)
WHEEL_PACKAGE=true ; shift ;;
(-o | --outdir)
TARGET="outdir"; PKGTYPE=$2 ; OUT_DIR_SPECIFIED=1 ; ((CLEAN_OR_OUT|=2)) ; shift 2 ;;
--) shift; break;; # end delimiter
(*)
echo " This should never come but just incase : UNEXPECTED ERROR Parm : [$1] ">&2 ; exit 20;;
esac
done
RET_CONFLICT=1
check_conflicting_options $CLEAN_OR_OUT $PKGTYPE $MAKETARGET
if [ $RET_CONFLICT -ge 30 ]; then
print_vars $API_NAME $TARGET $BUILD_TYPE $SHARED_LIBS $CLEAN_OR_OUT $PKGTYPE $MAKETARGET
exit $RET_CONFLICT
fi
clean_hsa() {
echo "Cleaning HSA"
rm -rf "$CORE_BUILD_DIR"
rm -rf "$PACKAGE_RPM"
rm -rf "$PACKAGE_DEB"
rm -f "$PACKAGE_ROOT"/lib/libhsa-runtime*
rm -rf "$PACKAGE_ROOT/lib/cmake/hsa-runtime64"
rm -rf "$PACKAGE_ROOT/include/hsa"
rm -rf "$PACKAGE_ROOT/share/doc/hsa-runtime64"
# Remove when switching to flat directory layout.
rm -rf "$PACKAGE_ROOT/hsa"
}
build_hsa_core() {
echo "Build HSA"
local coreMakeOpts="$DASH_JAY -C $CORE_BUILD_DIR"
echo "$HSA_CORE_ROOT"
if [ ! -d "$CORE_BUILD_DIR" ]; then
mkdir -p "$CORE_BUILD_DIR"
pushd "$CORE_BUILD_DIR"
print_lib_type $SHARED_LIBS
cmake $(rocm_cmake_params) \
-DBUILD_SHARED_LIBS=$SHARED_LIBS \
-DENABLE_LDCONFIG=OFF \
$(rocm_common_cmake_params) \
-DADDRESS_SANITIZER="$ADDRESS_SANITIZER" \
"$HSA_CORE_ROOT"
popd
fi
time cmake --build "$CORE_BUILD_DIR" -- $coreMakeOpts
time cmake --build "$CORE_BUILD_DIR" -- $coreMakeOpts install
time cmake --build "$CORE_BUILD_DIR" -- $coreMakeOpts package
copy_if DEB "${CPACKGEN:-"DEB;RPM"}" "$PACKAGE_DEB" $CORE_BUILD_DIR/hsa-rocr*.deb
copy_if RPM "${CPACKGEN:-"DEB;RPM"}" "$PACKAGE_RPM" $CORE_BUILD_DIR/hsa-rocr*.rpm
}
print_output_directory() {
case ${PKGTYPE} in
("deb")
echo ${PACKAGE_DEB};;
("rpm")
echo ${PACKAGE_RPM};;
(*)
echo "Invalid package type \"${PKGTYPE}\" provided for -o" >&2; exit 1;;
esac
exit
}
case $TARGET in
(clean)
clean_hsa
;;
(build)
build_hsa_core
build_wheel "$CORE_BUILD_DIR" "$PROJ_NAME"
;;
(outdir)
print_output_directory
;;
(*)
die "Invalid target $TARGET"
;;
esac
echo "Operation complete"

View File

@@ -25,7 +25,10 @@ printUsage() {
echo " -P, --package Generate packages"
echo " -N, --skip_lit_tests Skip llvm lit testing (llvm lit testing is enabled by default)"
echo " -M, --skip_man_pages Skip llvm documentation generation (man pages and rocm-llvm-docs package generation is enabled by default)"
echo " --skip_utils Skip installation of LLVM Utils (FileCheck, not, etc.)"
echo " -h, --help Prints this help"
echo " --compiler_rt_debug Build a debug version of runtimes"
echo " --compiler_rt_release Build a release version of runtimes (enabled by default)"
echo
echo
@@ -42,17 +45,27 @@ DEB_PATH="$(getDebPath $PROJ_NAME)"
RPM_PATH="$(getRpmPath $PROJ_NAME)"
INSTALL_PATH="${ROCM_INSTALL_PATH}/lib/llvm"
LLVM_ROOT_LCL="${LLVM_ROOT}"
ROCM_WHEEL_DIR="${BUILD_PATH}/_wheel"
TARGET="all"
MAKEOPTS="$DASH_JAY"
# Default to build release with Assertions ON
BUILD_TYPE="Release"
ENABLE_ASSERTIONS=0
COMPILER_RT_DEBUG="OFF"
# Enable assertions for all builds except release, nfar, and afar jobs.
case "${JOB_NAME}" in
( *"rel"* | \
*"nfar"* )
ENABLE_ASSERTIONS=0 ;;
( * )
ENABLE_ASSERTIONS=1 ;;
esac
SHARED_LIBS="ON"
# Build LLVM libraries for dynamically linking. Default is to build LLVM with statically linked libraries
BUILD_LLVM_DYLIB="OFF"
FLANG_NEW=0
CHK_FLANG=""
CLEAN_OR_OUT=0;
PKGTYPE="deb"
MAKETARGET="deb"
@@ -62,19 +75,31 @@ ASSERT_LLVM_VERSION_MINOR=""
SKIP_LIT_TESTS=0
BUILD_MANPAGES="ON"
LLVM_INSTALL_UTILS="ON"
STATIC_FLAG=
SANITIZER_AMDGPU=1
if [ -d "$WORK_ROOT/ROCR-Runtime/runtime/hsa-runtime/inc/" ]; then
HSA_INC_PATH="$WORK_ROOT/ROCR-Runtime/runtime/hsa-runtime/inc/"
else
HSA_INC_PATH="$WORK_ROOT/ROCR-Runtime/src/inc"
fi
COMGR_INC_PATH="$COMGR_ROOT/include"
VALID_STR=`getopt -o hcV:v:draAswlo:BPNM --long help,clean,assert_llvm_ver_major:,assert_llvm_ver_minor:,debug,release,address_sanitizer,no_address_sanitizer,static,build_llvm_static,wheel,build,package,skip_lit_tests,skip_man_pages,outdir: -- "$@"`
#parse the arguments
VALID_STR=`getopt -o hcV:v:draAswlo:BPNM --long help,clean,assert_llvm_ver_major:,assert_llvm_ver_minor:,debug,release,address_sanitizer,no_address_sanitizer,static,build_llvm_static,wheel,build,package,skip_lit_tests,skip_man_pages,skip_utils,compiler_rt_debug,compiler_rt_release,outdir: -- "$@"`
eval set -- "$VALID_STR"
set_dwarf_version(){
# In SLES and RHEL splitting debuginfo is getting failed(dwarf-5 unhandled) when compiler is set to clang.
# By default -gdwarf-5 is used for the compression of debug symbols
# So setting -gdwarf-4
# SWDEV-462774: In RHEL/SLES with dwarf-4 enabled, seeing ASAN llvm build getting killed due to high memory usage.
# So adding -gsplit-dwarf which splits the debug information into separate files to reduce memory usage during linking.
case "$DISTRO_ID" in
(sles*|rhel*)
SET_DWARF_VERSION_4="-gdwarf-4"
SET_DWARF_VERSION_4="-gdwarf-4 -gsplit-dwarf"
;;
(*)
SET_DWARF_VERSION_4=""
@@ -103,9 +128,7 @@ do
BUILD_TYPE="Release" ; shift ;;
(-a | --address_sanitizer)
set_dwarf_version
SANITIZER_AMDGPU=1 ;
HSA_INC_PATH="$WORK_ROOT/hsa/runtime/opensrc/hsa-runtime/inc" ;
COMGR_INC_PATH="$COMGR_ROOT/include" ; shift ;;
SANITIZER_AMDGPU=1 ; shift ;;
(-A | --no_address_sanitizer)
SANITIZER_AMDGPU=0 ;
unset HSA_INC_PATH ;
@@ -127,6 +150,12 @@ do
SKIP_LIT_TESTS=1; shift ;;
(-M | --skip_man_pages)
BUILD_MANPAGES="OFF"; shift ;;
(--skip_utils)
LLVM_INSTALL_UTILS="OFF"; shift ;;
(--compiler_rt_debug)
COMPILER_RT_DEBUG="ON"; shift ;;
(--compiler_rt_release)
COMPILER_RT_DEBUG="OFF"; shift ;;
--) shift; break;; # end delimiter
(*)
echo " This should not happen : UNEXPECTED ERROR Parm : [$1] ">&2 ; exit 20;;
@@ -145,38 +174,51 @@ LLVM_PROJECTS="clang;lld;clang-tools-extra"
ENABLE_RUNTIMES="compiler-rt;libunwind"
BOOTSTRAPPING_BUILD_LIBCXX=0
BUILD_AMDCLANG="ON"
# build libcxx to support the amdclang binary
ENABLE_RUNTIMES="$ENABLE_RUNTIMES;libcxx;libcxxabi"
BOOTSTRAPPING_BUILD_LIBCXX=1
clean_lightning() {
rm -rf "$ROCM_WHEEL_DIR"
# Delete cmake output directory
rm -rf "$BUILD_PATH"
rm -rf "$DEB_PATH"
rm -rf "$RPM_PATH"
}
# Collect LLVM/Clang git information for clang --version output.
# Include repo name, branch name and gitdate.
setup_llvm_info() {
# Allow this function to fail repo and git commands, but not crash the build.
set +e
mkdir -p "$LLVM_ROOT_LCL"
pushd "$LLVM_ROOT_LCL"
# Initialize local variable. Does not include
# LLVM_COMMIT_GITDATE and LLVM_REPO_INFO.
local LLVM_REMOTE_NAME
local LLVM_URL_NAME
local LLVM_BRANCH_NAME
local LLVM_URL_BRANCH
# Release Build: set url to external repo.
# Internal Build: set url to actual url.
if [[ "${JOB_NAME}" == *rel* ]]; then
LLVM_URL_NAME="https://github.com/RadeonOpenCompute/llvm-project"
LLVM_BRANCH_NAME="roc-${ROCM_VERSION}"
LLVM_URL_BRANCH="${LLVM_URL_NAME} ${LLVM_BRANCH_NAME}"
LLVM_URL_NAME="https://github.com/RadeonOpenCompute/llvm-project"
# Release branch follows convention roc-X.Y.x according to CI.
LLVM_BRANCH_NAME="roc-${ROCM_VERSION}"
LLVM_URL_BRANCH="${LLVM_URL_NAME} ${LLVM_BRANCH_NAME}"
else
LLVM_REMOTE_NAME=$(git remote)
LLVM_URL_NAME=$(git config --get remote."${LLVM_REMOTE_NAME}".url)
LLVM_BRANCH_NAME=$(repo manifest | sed -n 's/.*path="external\/llvm-project".* upstream="\([^"]*\)".*/\1/p' )
LLVM_URL_BRANCH="${LLVM_URL_NAME} ${LLVM_BRANCH_NAME}"
LLVM_REMOTE_NAME=$(git remote)
LLVM_URL_NAME=$(git config --get remote."${LLVM_REMOTE_NAME}".url)
# Parse the manifest to obtain upstream branch.
LLVM_BRANCH_NAME=$(repo manifest | sed -n 's/.*path="external\/llvm-project".* upstream="\([^"]*\)".*/\1/p' )
LLVM_URL_BRANCH="${LLVM_URL_NAME} ${LLVM_BRANCH_NAME}"
fi
# Obtain git date information based on UTC time.
# Format date as yyuuw - [last two digits of year][work week][day of week].
# Use xargs to remove trailing newline character.
LLVM_COMMIT_GITDATE=$(git show -s --format=@%ct | xargs | date -f - --utc +%y%U%w)
# Organize into REPO BRANCH GITDATE
LLVM_REPO_INFO="${LLVM_URL_BRANCH} ${LLVM_COMMIT_GITDATE}"
popd
@@ -200,25 +242,37 @@ get_llvm_version() {
echo "Detected LLVM version from source: ${LLVM_VERSION_MAJOR}.${LLVM_VERSION_MINOR}.${LLVM_VERSION_PATCH}${LLVM_VERSION_SUFFIX}"
}
# Generate compiler config files with default ROCm settings
create_compiler_config_files() {
local llvm_bin_dir="${INSTALL_PATH}/bin"
local rocm_cfg="rocm.cfg"
# rocm.cfg content
{
echo "-Wl,--enable-new-dtags"
echo "--rocm-path='<CFGDIR>/../../..'"
echo "-frtlib-add-rpath"
} > "${llvm_bin_dir}/$rocm_cfg"
local compiler_commands=("clang" "clang++" "clang-cpp" "clang-${LLVM_VERSION_MAJOR}" "clang-cl" "flang" "flang-new")
local compiler_commands=("clang" "clang++" "clang-cpp" "clang-${LLVM_VERSION_MAJOR}" "clang-cl" )
for i in "${compiler_commands[@]}"; do
if [ -f "$llvm_bin_dir/$i" ]; then
local config_file="${llvm_bin_dir}/${i}.cfg"
echo "@${rocm_cfg}" > $config_file
fi
done
if [ $FLANG_NEW -eq 1 ]; then
local flang_commands=("flang" "flang-new" "flang-classic")
for i in "${flang_commands[@]}"; do
local config_file="${llvm_bin_dir}/${i}.cfg"
echo "@${rocm_cfg}" > $config_file
done
fi
}
# Function to check if a list contains an element
# return true if $1 is in $2...
contains(){
local target=$1 element
@@ -230,6 +284,7 @@ contains(){
}
build_lightning() {
# Obtain LLVM build information
setup_llvm_info
get_llvm_version
@@ -248,11 +303,59 @@ build_lightning() {
fi
fi
# Upstream llvm option -DCLANG_DEFAULT_PIE_ON_LINUX changed to ON
# by default however, it breaks ROCM builds on SLES/CentOS distros
# so disabling it for now in lighting compiler builds.
# Todo : this should be removed to follow the upstream's default.
DISABLE_PIE=0
# Find out distro / RHEL build here to adjust Python version for building LLVM if needed.
case "$DISTRO_ID" in
(rhel*|centos*)
RHEL_BUILD=1
;;
(*)
RHEL_BUILD=0
;;
esac
# Special handling for Debian 10
# - gcc is too ancient and can't build LLVM, switch to clang-13 instead
# - zstd is severely out-of-date and can't support LLVM, disable it
case "$DISTRO_ID" in
(debian-10)
BUILD_COMPILER_LINKER_FLAGS=("-DCMAKE_C_COMPILER=/usr/bin/clang-13" "-DCMAKE_CXX_COMPILER=/usr/bin/clang++-13" "-DLLVM_USE_LINKER=lld")
LLVM_COMPRESSION_FLAGS=("-DLLVM_ENABLE_ZLIB=ON" "-DLLVM_ENABLE_ZSTD=OFF")
;;
(*)
BUILD_COMPILER_LINKER_FLAGS=()
LLVM_COMPRESSION_FLAGS=("-DLLVM_ENABLE_ZLIB=ON")
;;
esac
# Upstream moved to requiring Python 3.8 as the minimum.
# Point CMake to that explicit location and adjust LD_LIBRARY_PATH.
PYTHON_VERSION_WORKAROUND=''
# TODO: Workshop the condition before landing, only to show
# what needs to be done for the Python issue.
echo "build_lightning DISTRO_ID: ${DISTRO_ID}"
if [[ "$DISTRO_ID" == "rhel-8"* || "$DISTRO_NAME" == "sles" || "$DISTRO_ID" == "debian-10" ]]; then
EXTRA_PYTHON_PATH=/opt/Python-3.8.13
PYTHON_VERSION_WORKAROUND="-DPython3_EXECUTABLE=${EXTRA_PYTHON_PATH}/bin/python3.8"
# For the python interpreter we need to export LD_LIBRARY_PATH.
# XXX: This is only needed during CMake and ninja check-* targets, maybe we can limit scope further?
export LD_LIBRARY_PATH=${EXTRA_PYTHON_PATH}/lib:$LD_LIBRARY_PATH
fi
# Start CMake Build
mkdir -p "$BUILD_PATH"
pushd "$BUILD_PATH"
#Extra llvm cmake parameter can be passed from an environment variable EXTRA_LLVM_CMAKE_PARAMS
#For example:
# export EXTRA_LLVM_CMAKE_PARAMS='-DLLVM_LIT_ARGS="-sv -j8" -DP2=1'
#Alternatively, this variable can be prefixed to this script:
# EXTRA_LLVM_CMAKE_PARAMS='-DLLVM_LIT_ARGS="-sv -j8" -DP2=1' build_lightning.sh
eval EXTRA_LLVM_CMAKE_PARAMS_ARRAY=($EXTRA_LLVM_CMAKE_PARAMS)
if [ ! -e Makefile ]; then
@@ -261,14 +364,8 @@ build_lightning() {
if [ -e "$LLVM_ROOT_LCL/../flang/EnableFlangBuild" ]; then
FLANG_NEW=1
LLVM_PROJECTS="$LLVM_PROJECTS;flang"
ENABLE_RUNTIMES="$ENABLE_RUNTIMES;openmp";
else
if [[ "${JOB_NAME}" != *afar* ]] && [ -e "$LLVM_ROOT_LCL/../flang/DoROCmRelease" ]; then
FLANG_NEW=1
LLVM_PROJECTS="$LLVM_PROJECTS;flang"
else
echo "NOT building project flang"
fi
echo "NOT building project flang"
fi
set -x
cmake $(rocm_cmake_params) ${GEN_NINJA} \
@@ -313,8 +410,14 @@ build_lightning() {
-DROCM_LLVM_BACKWARD_COMPAT_LINK="$ROCM_INSTALL_PATH/llvm" \
-DROCM_LLVM_BACKWARD_COMPAT_LINK_TARGET="./lib/llvm" \
-DCLANG_LINK_FLANG_LEGACY=ON \
-DFLANG_RUNTIME_F128_MATH_LIB=libquadmath \
-DLIBOMPTARGET_BUILD_DEVICE_FORTRT=ON \
-DCMAKE_CXX_STANDARD=17 \
-DFLANG_INCLUDE_DOCS=OFF \
-DLLVM_INSTALL_UTILS="$LLVM_INSTALL_UTILS" \
-DCOMPILER_RT_DEBUG="$COMPILER_RT_DEBUG" \
"${BUILD_COMPILER_LINKER_FLAGS[@]}" \
"${LLVM_COMPRESSION_FLAGS[@]}" \
"${EXTRA_LLVM_CMAKE_PARAMS_ARRAY[@]}" \
"$LLVM_ROOT_LCL"
set +x
@@ -324,28 +427,42 @@ build_lightning() {
echo "Building LLVM"
if [ $BOOTSTRAPPING_BUILD_LIBCXX -eq 1 ]; then
# The following is to do a bootstrap build of libc++ to support
# amdclang, which needs the C++17 std::filesystem library
# build clang first
cmake --build . -- $MAKEOPTS clang lld compiler-rt
# build libc++ and libcxxabi using the just-built clang
cmake --build . -- $MAKEOPTS runtimes cxx
fi
# Remove these 12 lines
echo "Workaround for race condition"
# find make targets like clang_rt.asan-dynamic-ARCH-version-list
# and prebuild them. ARCH will include x86_64 but might also
# include i386, depending on the build environment.
# TODO figure out why ubuntu 18 builds the i386, but sles, centos
# and ubuntu 20 do not. If we can stop ubuntu 18 then it might
# give us some speed.
#for prebuild in $(make help | sed -n '/-version-list/s/^... //p') ; do
# make $MAKEOPTS $prebuild
#done
echo "End Workaround for race condition"
cmake --build . -- $MAKEOPTS
case "$DISTRO_ID" in
(rhel*|centos*)
RHEL_BUILD=1
;;
(*)
RHEL_BUILD=0
;;
esac
# FIXME: check-all would be better, but some tests require sys calls that
# are not allowed in the CI dockers and so fail. Switch to check-all
# when possible.
# FIXME: disable testing on sles; a test is failing for unknown reasons
# and breaking the sles build; keep it enabled everywhere else
# FIXME: disable check-clang on rhel; python 3.8 issue
# and breaking the rhel build; keep it enabled everywhere else
if [ $SKIP_LIT_TESTS -eq 0 ]; then
if [ $FLANG_NEW -eq 1 ]; then
CHK_FLANG="check-flang"
fi
if [ $RHEL_BUILD -eq 1 ]; then
cmake --build . -- $MAKEOPTS check-lld check-mlir
elif [ "$DISTRO_NAME" != "sles" ]; then
cmake --build . -- $MAKEOPTS check-llvm check-clang check-lld check-mlir
cmake --build . -- $MAKEOPTS check-llvm check-clang check-lld check-mlir $CHK_FLANG
fi
fi
cmake --build . -- $MAKEOPTS clang-tidy
@@ -356,17 +473,21 @@ build_lightning() {
package_lightning_dynamic(){
# do common stuff here:
if [ "$BUILD_TYPE" == "Debug" ]; then
return
fi
# Echos ${LLVM_VERSION_MAJOR}.${LLVM_VERSION_MINOR}.${LLVM_VERSION_PATCH}${LLVM_VERSION_SUFFIX}
get_llvm_version
# We require the LLVM major, minor and patch. Scrub the LLVM_VERSION_SUFFIX.
local llvmParsedVersion="${LLVM_VERSION_MAJOR}.${LLVM_VERSION_MINOR}.${LLVM_VERSION_PATCH}"
local packageName="rocm-llvm"
local packageSummary="ROCm compiler"
local packageSummaryLong="ROCm compiler based on LLVM $llvmParsedVersion"
local installPath="$ROCM_INSTALL_PATH/lib/llvm/"
# setup for rocm-llvm-core package
if [ "$BUILD_LLVM_DYLIB" == "ON" ] ; then
local packageNameCore="rocm-llvm-core"
local packageSummaryCore="ROCm core compiler dylibs"
@@ -385,14 +506,16 @@ package_lightning_dynamic(){
local packageDir="$BUILD_PATH/package"
local backwardsCompatibleSymlink="$ROCM_INSTALL_PATH/llvm"
# Debian specific
local packageDeb="$packageDir/deb"
local controlFile="$packageDeb/DEBIAN/control"
local postinstFile="$packageDeb/DEBIAN/postinst"
local prermFile="$packageDeb/DEBIAN/prerm"
local specFile="$packageDir/$packageName.spec"
local debDependencies="python3, libc6, libstdc++6|libstdc++8, libstdc++-5-dev|libstdc++-7-dev|libstdc++-11-dev, libgcc-5-dev|libgcc-7-dev|libgcc-11-dev, rocm-core"
local debRecommends="gcc, g++, gcc-multilib, g++-multilib"
local debRecommends="gcc, g++, gcc-multilib, g++-multilib, rocm-device-libs"
# RPM specific
local packageRpm="$packageDir/rpm"
local packageRpmCore="$packageDir/rpm"
local specFile="$packageDir/$packageName.spec"
@@ -402,14 +525,15 @@ package_lightning_dynamic(){
rpmRequires+=", rocm-llvm-core"
fi
local rpmRequiresCore="rocm-core"
local rpmRecommends="gcc, gcc-c++, devtoolset-7-gcc-c++"
local rpmRecommends="gcc, gcc-c++, devtoolset-7-gcc-c++, rocm-device-libs"
# Cleanup previous packages
rm -rf "$packageDir"
echo "rm -rf $packageDir"
rm -rf "$DEB_PATH"
local amd_compiler_commands=("amdclang" "amdclang++" "amdclang-cl" "amdclang-cpp" "amdflang" "amdlld" "offload-arch")
local amd_man_pages=("amdclang.1.gz" "flang.1.gz" "amdflang.1.gz")
local amd_compiler_commands=("amdclang" "amdclang++" "amdclang-cl" "amdclang-cpp" "amdflang" "amdflang-new" "amdflang-legacy" "amdflang-classic" "amdlld" "offload-arch")
local amd_man_pages=("amdclang.1.gz" "amdclang++.1.gz" "flang.1.gz" "amdflang.1.gz")
local man_pages=("bugpoint.1" "FileCheck.1" "llvm-ar.1" "llvm-cxxmap.1" "llvm-extract.1" "llvm-lipo.1" "llvm-otool.1" "llvm-readobj.1" "llvm-symbolizer.1" "tblgen.1"
"clang.1" "lit.1" "llvm-as.1" "llvm-diff.1" "llvm-ifs.1" "llvm-locstats.1" "llvm-pdbutil.1" "llvm-remarkutil.1" "llvm-tblgen.1" "clang-tblgen.1"
"llc.1" "llvm-bcanalyzer.1" "llvm-dis.1" "llvm-install-name-tool.1" "llvm-mca.1" "llvm-profdata.1" "llvm-size.1" "llvm-tli-checker.1" "diagtool.1"
@@ -417,17 +541,22 @@ package_lightning_dynamic(){
"llvm-cov.1" "llvm-dwarfutil.1" "llvm-libtool-darwin.1" "llvm-objcopy.1" "llvm-ranlib.1" "llvm-strings.1" "opt.1" "extraclangtools.1" "llvm-addr2line.1"
"llvm-cxxfilt.1" "llvm-exegesis.1" "llvm-link.1" "llvm-objdump.1" "llvm-readelf.1" "llvm-strip.1")
# Only build deb in Ubuntu environment
if [ "$PACKAGEEXT" = "deb" ]; then
# Debian packaging
mkdir -p "$packageDeb/$installPath"
mkdir -p "$(dirname $controlFile)"
mkdir -p "$DEB_PATH"
mkdir -p "$packageDeb/$licenseDir"
# build the rocm-llvm-core package first:
# we only need some .so files, and we're doing a MV so that they're not picked up in the next (rocm-llvm) package.
if [ "$BUILD_LLVM_DYLIB" == "ON" ] ; then
mkdir -p "$packageDeb/$licenseDirCore"
# Copy the LICENSE file to rocm-core
cp -r "$LLVM_ROOT_LCL/LICENSE.TXT" "$packageDeb/$licenseDirCore"
cp -P "$distLib/libLLVM"*"so"* "$packageDeb/$installPath/"
@@ -449,28 +578,36 @@ package_lightning_dynamic(){
fakeroot dpkg-deb -Zgzip --build $packageDeb \
"${DEB_PATH}/${packageNameCore}_${packageVersion}.${ROCM_LIBPATCH_VERSION}-${JOB_DESIGNATOR}${BUILD_ID}~${DISTRO_RELEASE}_${packageArch}.deb"
# clean up, get ready for rocm-llvm
rm -rf "$controlFile"
rm -rf "$packageDeb/$licenseDirCore"
#remove the LLVM/Clang dylibs we already packaged in rocm-llvm-core
rm -f "$packageDeb/$installPath/libLLVM"*"so"*
rm -f "$packageDeb/$installPath/libFortran"*"so"*
rm -f "$packageDeb/$installPath/libclang"*"so"*
mkdir -p "$(dirname $controlFile)"
# clean up dylibs we already packaged:
rm -rf "$packageDeb/$installPath/*"
# add this rocm-llvm-core package as a dependency for rocm-llvm
debDependencies="${debDependencies}, ${packageNameCore}"
fi
fi # end of building rocm-llvm-core package
# now build rocm-llvm:
# Install license file in rocm-llvm package .
cp -r "$LLVM_ROOT_LCL/LICENSE.TXT" "$packageDeb/$licenseDir"
cp -r "$distBin" "$packageDeb/$installPath/bin"
cp -r "$distInc" "$packageDeb/$installPath/include"
cp -r "$distLib" "$packageDeb/$installPath/lib"
if [ "$BUILD_MANPAGES" == "ON" ]; then
# zip the generated man pages before installing them in the package
for i in "${man_pages[@]}"; do
gzip -f "$distMan/man1/$i"
done
# Create symbolic links for amd man pages
if [ -f "$distMan/man1/clang.1.gz" ]; then
for i in "${amd_man_pages[@]}"; do
ln -sf "clang.1.gz" "$distMan/man1/$i"
@@ -507,11 +644,14 @@ package_lightning_dynamic(){
"${DEB_PATH}/${packageName}_${packageVersion}.${ROCM_LIBPATCH_VERSION}-${JOB_DESIGNATOR}${BUILD_ID}~${DISTRO_RELEASE}_${packageArch}.deb"
fi
# Only build RPM in CentOS or SLES or RHEL or Mariner environment
if [ "$PACKAGEEXT" = "rpm" ]; then
# RPM packaging
mkdir -p "$(dirname $specFile)"
rm -rf "$RPM_PATH"
mkdir -p "$RPM_PATH"
# set up for rocm-llvm-core package
if [ "$BUILD_LLVM_DYLIB" == "ON" ] ; then
echo "Name: $packageNameCore" > $specFileCore
echo "Version: ${packageVersion}.${ROCM_LIBPATCH_VERSION}" >> $specFileCore
@@ -542,6 +682,11 @@ package_lightning_dynamic(){
echo "rm -rf \$RPM_BUILD_ROOT/$installPath" >> $specFileCore
echo "%files " >> $specFileCore
echo "%defattr(-,root,root,-)" >> $specFileCore
# Note: In some OS like SLES, during upgrade rocm-core is getting upgraded first and followed by other packages
# rocm-core cannot delete rocm-ver folder, since it contains files of other packages that are yet to be upgraded
# To remove rocm-ver folder after upgrade the spec file of other packages should contain the rocm-ver directory
# Otherwise after upgrade empty old rocm-ver folder will be left out.
# If empty remove /opt/rocm-ver folder and its subdirectories created by rocm-llvm-core package
echo "$ROCM_INSTALL_PATH" >> $specFileCore
echo "%post" >> $specFileCore
@@ -552,8 +697,9 @@ package_lightning_dynamic(){
rpmbuild --define "_topdir $packageRpmCore" -ba $specFileCore
mv $packageRpm/RPMS/x86_64/*.rpm $RPM_PATH
fi
fi # end of building rocm-lllvm-core package
# setup for rocm-llvm package
echo "Name: $packageName" > $specFile
echo "Version: ${packageVersion}.${ROCM_LIBPATCH_VERSION}" >> $specFile
echo "Release: ${JOB_DESIGNATOR}${SLES_BUILD_ID_PREFIX}${BUILD_ID}%{?dist}" >> $specFile
@@ -586,9 +732,11 @@ package_lightning_dynamic(){
echo "cp -R $distInc \$RPM_BUILD_ROOT/$installPath" >> $specFile
echo "cp -R $distLib \$RPM_BUILD_ROOT/$installPath" >> $specFile
if [ "$BUILD_MANPAGES" == "ON" ]; then
# zip the generated man pages before installing them in the package
for i in "${man_pages[@]}"; do
echo "gzip -f $distMan/man1/$i" >> $specFile
done
# Create symbolic links for amd man pages
if [ -f "$distMan/man1/clang.1.gz" ]; then
for i in "${amd_man_pages[@]}"; do
echo "ln -sf clang.1.gz \"$distMan/man1/$i\"" >> $specFile
@@ -607,6 +755,11 @@ package_lightning_dynamic(){
fi
echo "%defattr(-,root,root,-)" >> $specFile
# Note: In some OS like SLES, during upgrade rocm-core is getting upgraded first and followed by other packages
# rocm-core cannot delete rocm-ver folder, since it contains files of other packages that are yet to be upgraded
# To remove rocm-ver folder after upgrade the spec file of other packages should contain the rocm-ver directory
# Otherwise after upgrade empty old rocm-ver folder will be left out.
# If empty remove /opt/rocm-ver folder and its subdirectories created by rocm-llvm package
echo "$ROCM_INSTALL_PATH" >> $specFile
echo "%post" >> $specFile
@@ -633,16 +786,21 @@ package_lightning_dynamic(){
package_lightning_static() {
# do common stuff here:
if [ "$BUILD_TYPE" == "Debug" ]; then
return
fi
# Echo the LLVM version ${LLVM_VERSION_MAJOR}.${LLVM_VERSION_MINOR}.${LLVM_VERSION_PATCH}${LLVM_VERSION_SUFFIX}
get_llvm_version
# We require the LLVM major, minor and patch. Scrub the LLVM_VERSION_SUFFIX.
local llvmParsedVersion="${LLVM_VERSION_MAJOR}.${LLVM_VERSION_MINOR}.${LLVM_VERSION_PATCH}"
# setup for rocm-llvm package
local packageName="rocm-llvm"
local packageSummary="ROCm core compiler"
local packageSummaryLong="ROCm core compiler based on LLVM $llvmParsedVersion"
# setup for rocm-llvm-dev package
if [ "$PACKAGEEXT" = "deb" ]; then
local packageNameExtra="rocm-llvm-dev"
else
@@ -663,40 +821,46 @@ package_lightning_static() {
local packageDir="$BUILD_PATH/package"
local backwardsCompatibleSymlink="$ROCM_INSTALL_PATH/llvm"
# Debian specific
local packageDeb="$packageDir/deb"
local controlFile="$packageDeb/DEBIAN/control"
local postinstFile="$packageDeb/DEBIAN/postinst"
local prermFile="$packageDeb/DEBIAN/prerm"
local specFile="$packageDir/$packageName.spec"
local debDependencies="python3, libc6, libstdc++6|libstdc++8, libstdc++-5-dev|libstdc++-7-dev|libstdc++-11-dev, libgcc-5-dev|libgcc-7-dev|libgcc-11-dev, rocm-core"
local debRecommends="gcc, g++, gcc-multilib, g++-multilib"
local debRecommends="gcc, g++, gcc-multilib, g++-multilib, rocm-device-libs"
# RPM specific
local packageRpm="$packageDir/rpm"
local packageRpmExtra="$packageDir/rpm"
local specFile="$packageDir/$packageName.spec"
local specFileExtra="$packageDir/$packageNameExtra.spec"
local rpmRequires="rocm-core"
local rpmRequiresExtra="rocm-core, $packageName"
local rpmRecommends="gcc, gcc-c++, devtoolset-7-gcc-c++"
#local rpmRecommends="gcc, gcc-c++, devtoolset-7-gcc-c++, rocm-device-libs"
local rpmRecommends="rocm-device-libs"
# Cleanup previous packages
rm -rf "$packageDir"
echo "rm -rf $packageDir"
rm -rf "$DEB_PATH"
local amd_compiler_commands=("amdclang" "amdclang++" "amdclang-cl" "amdclang-cpp" "amdflang" "amdlld" "offload-arch")
local amd_man_pages=("amdclang.1.gz" "flang.1.gz" "amdflang.1.gz")
local core_bin=("amdgpu-arch" "amdgpu-offload-arch" "amdlld" "amdllvm" "clang" "clang++" "clang-${LLVM_VERSION_MAJOR}" "clang-cl"
"clang-cpp" "clang-build-select-link" "clang-offload-bundler" "clang-offload-packager" "clang-offload-wrapper" "clang-linker-wrapper" "clang-nvlink-wrapper" "flang" "flang-new"
local amd_compiler_commands=("amdclang" "amdclang++" "amdclang-cl" "amdclang-cpp" "amdflang" "amdflang-new" "amdflang-legacy" "amdflang-classic" "amdlld" "offload-arch")
local amd_man_pages=("amdclang.1.gz" "amdclang++.1.gz" "flang.1.gz" "amdflang.1.gz")
local core_bin=("amd-llvm-spirv" "amdgpu-arch" "amdgpu-offload-arch" "amdlld" "amdllvm" "clang" "clang++" "clang-${LLVM_VERSION_MAJOR}" "clang-cl"
"clang-cpp" "clang-build-select-link" "clang-offload-bundler" "clang-offload-packager" "clang-offload-wrapper" "clang-linker-wrapper" "clang-nvlink-wrapper" "flang" "flang-new" "flang-legacy" "flang-classic" "llvm-symbolizer"
"ld64.lld" "ld.lld" "llc" "lld" "lld-link" "llvm-ar" "llvm-bitcode-strip" "llvm-dwarfdump" "llvm-install-name-tool"
"llvm-link" "llvm-mc" "llvm-objcopy" "llvm-objdump" "llvm-otool" "llvm-ranlib" "llvm-readelf" "llvm-readobj" "llvm-strip"
"nvidia-arch" "nvptx-arch" "offload-arch" "opt" "wasm-ld" "amdclang" "amdclang++" "amdclang-${LLVM_VERSION_MAJOR}" "amdclang-cl"
"amdclang-cpp" "amdflang"
"clang++.cfg" "clang-${LLVM_VERSION_MAJOR}.cfg" "clang-cl.cfg" "clang-cpp.cfg" "clang.cfg" "rocm.cfg")
"amdclang-cpp" "amdflang" "amdflang-new" "amdflang-legacy" "amdflang-classic"
"clang++.cfg" "clang-${LLVM_VERSION_MAJOR}.cfg" "clang-cl.cfg" "clang-cpp.cfg" "clang.cfg" "rocm.cfg"
"flang.cfg" "flang-new.cfg" "flang-classic.cfg" )
local core_lib=("libclang-cpp.so.${LLVM_VERSION_MAJOR}${LLVM_VERSION_SUFFIX}" "libclang-cpp.so" "libclang.so"
"libclang-cpp.so.${LLVM_VERSION_MAJOR}.${LLVM_VERSION_MINOR}${LLVM_VERSION_SUFFIX}"
"libclang.so.${LLVM_VERSION_MAJOR}${LLVM_VERSION_SUFFIX}"
"libclang.so.${LLVM_VERSION_MAJOR}.${LLVM_VERSION_MINOR}.${LLVM_VERSION_PATCH}${LLVM_VERSION_SUFFIX}"
"libFortranSemantics.a" "libFortranLower.a" "libFortranParser.a" "libFortranCommon.a"
"libFortranRuntime.a" "libFortran_main.a" "libFortranDecimal.a" "libFortranEvaluate.a")
"libFortranRuntime.a" "libFortranFloat128Math.a" "libFortranDecimal.a" "libFortranEvaluate.a")
local core_man_pages=("llvm-otool.1" "llvm-readobj.1" "clang.1" "lit.1" "llc.1" "llvm-ar.1" "llvm-dwarfdump.1" "llvm-objcopy.1" "opt.1"
"llvm-link.1" "llvm-mc.1" "llvm-objdump.1" "llvm-ranlib.1" "llvm-readelf.1" "llvm-strip.1")
local dev_man_pages=("bugpoint.1" "FileCheck.1" "llvm-cxxmap.1" "llvm-extract.1" "llvm-lipo.1" "llvm-symbolizer.1"
@@ -707,27 +871,44 @@ package_lightning_static() {
"lli.1" "llvm-cov.1" "llvm-dwarfutil.1" "llvm-libtool-darwin.1" "llvm-strings.1"
"extraclangtools.1" "llvm-addr2line.1" "llvm-cxxfilt.1" "llvm-exegesis.1" "scan-build.1")
# Only build deb in Ubuntu environment
if [ "$PACKAGEEXT" = "deb" ]; then
# Debian packaging
mkdir -p "$packageDeb/$installPath"
mkdir "${controlFile%/*}"
mkdir -p "$DEB_PATH"
mkdir -p "$packageDeb/$licenseDir"
# Build the static rocm-llvm package first:
# We're doing a MV so that they're not picked up in the next (rocm-dev) package.
# Install license file in rocm-llvm package.
cp -r "$LLVM_ROOT_LCL/LICENSE.TXT" "$packageDeb/$licenseDir"
# Copy the core binaries
mkdir -p "$packageDeb/$installPath/bin"
for i in "${core_bin[@]}"; do
if [ -f "$distBin/$i" ]; then
cp -d "$distBin"/$i "$packageDeb/$installPath/bin/"
fi
done
# FIXME: At this point flang is pointing to flang-classic, which does
# not exist yet (created later), and code above does not copy it
# because it check if it exists first. Blindly copy flang for now.
# Permanent fix will be merged into openmp-extras by moving symlink
# creation there.
if [ -h $distBin/flang ]; then
cp -d "$distBin/flang" "$packageDeb/$installPath/bin/"
fi
cp -d "$distBin/flang" "$packageDeb/$installPath/bin/"
# Copy the core libraries
# TODO: Only copy llvm/lib/clang/X.0.0/include and llvm/lib/clang/X.0.0/lib/linux
mkdir -p "$packageDeb/$installPath/lib/clang"
cp -r "$distLib/clang/" "$packageDeb/$installPath/lib/"
if [ $FLANG_NEW -eq 1 ]; then
# flang-new mod files
mkdir -p "$packageDeb/$installPath/include/flang"
cp -r "$distInc/flang/" "$packageDeb/$installPath/include/"
fi
@@ -738,14 +919,17 @@ package_lightning_static() {
fi
done
# Copy core specific man pages
if [ "$BUILD_MANPAGES" == "ON" ]; then
mkdir -p "$packageDeb/$installPath/share/man1"
# zip the generated man pages before installing them in the package
for i in "${core_man_pages[@]}"; do
if [ -f "$distMan/man1/$i" ]; then
gzip -f "$distMan/man1/$i"
cp -d "$distMan/man1/${i}.gz" "$packageDeb/$installPath/share/man1/"
fi
done
# Create symbolic links for amd man pages
if [ -f "$distMan/man1/clang.1.gz" ]; then
for i in "${amd_man_pages[@]}"; do
ln -sf "clang.1.gz" "$distMan/man1/$i"
@@ -764,7 +948,9 @@ package_lightning_static() {
done
echo "rmdir --ignore-fail-on-non-empty \"$ROCM_INSTALL_PATH/bin\"" >> $prermFile
chmod 0555 "$postinstFile" "$prermFile"
cp -P "$backwardsCompatibleSymlink" "$packageDeb/$ROCM_INSTALL_PATH"
if [ -h $backwardsCompatibleSymlink ]; then
cp -P "$backwardsCompatibleSymlink" "$packageDeb/$ROCM_INSTALL_PATH"
fi
{
echo "Package: $packageName"
@@ -783,6 +969,7 @@ package_lightning_static() {
fakeroot dpkg-deb -Zgzip --build $packageDeb \
"${DEB_PATH}/${packageName}_${packageVersion}.${ROCM_LIBPATCH_VERSION}-${JOB_DESIGNATOR}${BUILD_ID}~${DISTRO_RELEASE}_${packageArch}.deb"
# clean up, get ready for rocm-llvm-dev
rm -rf "$controlFile"
rm -rf "$packageDeb"
@@ -790,18 +977,22 @@ package_lightning_static() {
mkdir "${controlFile%/*}"
mkdir -p "$DEB_PATH"
# now build rocm-llvm-dev:
mkdir -p "$packageDeb/$installPath/bin"
# Only copy binaries not packaged in core
for i in "$distBin"/*; do
bin=$(basename "$i")
contains "$bin" "${core_bin[@]}" "${amd_compiler_commands[@]}" && continue
cp -d "$i" "$packageDeb/$installPath/bin/"
done
# Only copy libraries not packaged in core
for i in "$distLib"/*; do
lib=$(basename "$i")
contains "$lib" "${core_lib[@]}" && continue
cp -dr "$i" "$packageDeb/$installPath/lib/"
done
# Remove dirs already packaged in rocm-llvm-core
rm -rf "$packageDeb/$installPath/lib/clang"
cp -r "$distInc" "$packageDeb/$installPath/include"
@@ -812,6 +1003,7 @@ package_lightning_static() {
if [ "$BUILD_MANPAGES" == "ON" ]; then
mkdir -p "$packageDeb/$installPath/share/man1"
# zip the generated man pages before installing them in the package
for i in "${dev_man_pages[@]}"; do
if [ -f "$distMan/man1/$i" ]; then
gzip -f "$distMan/man1/$i"
@@ -820,6 +1012,7 @@ package_lightning_static() {
done
fi
# add this rocm-llvm package as a dependency for rocm-llvm-dev
debDependencies="${debDependencies}, ${packageName}"
echo "Package: $packageNameExtra" > $controlFile
@@ -838,20 +1031,26 @@ package_lightning_static() {
"${DEB_PATH}/${packageNameExtra}_${packageVersion}.${ROCM_LIBPATCH_VERSION}-${JOB_DESIGNATOR}${BUILD_ID}~${DISTRO_RELEASE}_${packageArch}.deb"
fi
# Only build RPM in CentOS or SLES or RHEL or Mariner environment
if [ "$PACKAGEEXT" = "rpm" ]; then
# RPM packaging
mkdir -p "$(dirname $specFile)"
rm -rf "$RPM_PATH"
mkdir -p "$RPM_PATH"
echo "Name: $packageName" > $specFile
# set up for rocm-llvm package
echo "Name: $packageName" >> $specFile
echo "Version: ${packageVersion}.${ROCM_LIBPATCH_VERSION}" >> $specFile
echo "Release: ${JOB_DESIGNATOR}${SLES_BUILD_ID_PREFIX}${BUILD_ID}%{?dist}" >> $specFile
echo "Summary: $packageSummary" >> $specFile
echo "Group: System Environment/Libraries" >> $specFile
echo "License: ASL 2.0 with exceptions" >> $specFile
echo "Prefix: $ROCM_INSTALL_PATH" >> $specFile
echo "Requires: $rpmRequires" >> $specFile
if [[ "$DISTRO_ID" != "centos"* ]]; then
echo "Recommends: $rpmRecommends" >> $specFile
fi
echo "%description" >> $specFile
echo "$packageSummaryLong" >> $specFile
@@ -863,23 +1062,38 @@ package_lightning_static() {
echo "mkdir -p \$RPM_BUILD_ROOT/$installPath/bin" >> $specFile
echo "mkdir -p \$RPM_BUILD_ROOT/$licenseDir" >> $specFile
# Install the license file to rocm-llvm
echo "cp -R $LLVM_ROOT_LCL/LICENSE.TXT \$RPM_BUILD_ROOT/$licenseDir" >> $specFile
echo "cp -P $backwardsCompatibleSymlink \$RPM_BUILD_ROOT/$ROCM_INSTALL_PATH" >> $specFile
if [ -h $backwardsCompatibleSymlink ]; then
echo "cp -P $backwardsCompatibleSymlink \$RPM_BUILD_ROOT/$ROCM_INSTALL_PATH" >> $specFile
fi
# Copy the core binaries
for i in "${core_bin[@]}"; do
if [ -f "$distBin/$i" ]; then
echo "cp -d \"$distBin\"/$i \$RPM_BUILD_ROOT/$installPath/bin/" >> $specFile
fi
done
echo "cp -d \"$distBin/flang\" \$RPM_BUILD_ROOT/$installPath/bin/" >> $specFile
# FIXME: At this point flang is pointing to flang-classic, which does
# not exist yet (created later), and code above does not copy it
# because it check if it exists first. Blindly copy flang for now.
# Permanent fix will be merged into openmp-extras by moving symlink
# creation there.
if [ -h $distBin/flang ]; then
echo "cp -d \"$distBin/flang\" \$RPM_BUILD_ROOT/$installPath/bin/" >> $specFile
fi
# Copy the config files
echo "cp -d \"$distBin\"/*.cfg \$RPM_BUILD_ROOT/$installPath/bin/" >> $specFile
# Copy the core libraries
# TODO: Only copy llvm/lib/clang/X.0.0/include and llvm/lib/clang/X.0.0/lib/linux
echo "mkdir -p \$RPM_BUILD_ROOT/$installPath/lib/clang" >> $specFile
echo "cp -R \"$distLib/clang/\" \$RPM_BUILD_ROOT/$installPath/lib/" >> $specFile
if [ $FLANG_NEW -eq 1 ]; then
# flang-new mod files
echo "mkdir -p \$RPM_BUILD_ROOT/$installPath/include/flang" >> $specFile
echo "cp -R \"$distInc/flang/\" \$RPM_BUILD_ROOT/$installPath/include/" >> $specFile
fi
@@ -890,26 +1104,32 @@ package_lightning_static() {
fi
done
# Copy core specific man pages
if [ "$BUILD_MANPAGES" == "ON" ]; then
echo "mkdir -p \$RPM_BUILD_ROOT/$installPath/share/man/man1" >> $specFile
# zip the generated man pages before installing them in the package
for i in "${core_man_pages[@]}"; do
if [ -f "$distMan/man1/$i" ]; then
echo "gzip -f $distMan/man1/$i" >> $specFile
echo "cp -d $distMan/man1/${i}.gz \$RPM_BUILD_ROOT/$installPath/share/man/man1/" >> $specFile
echo "gzip -f ${distMan}/man1/${i}" >> $specFile
echo "cp -d ${distMan}/man1/${i}.gz \$RPM_BUILD_ROOT/$installPath/share/man/man1/" >> $specFile
fi
done
if [ -f "$distMan/man1/clang.1.gz" ]; then
for i in "${amd_man_pages[@]}"; do
echo "ln -sf clang.1.gz \"$distMan/man1/$i\"" >> $specFile
echo "cp -d $distMan/man1/${i} \$RPM_BUILD_ROOT/$installPath/share/man/man1/" >> $specFile
done
fi
# Create symbolic links for amd man pages
for i in "${amd_man_pages[@]}"; do
echo "ln -sf clang.1.gz ${distMan}/man1/${i}" >> $specFile
echo "cp -d ${distMan}/man1/${i} \$RPM_BUILD_ROOT/$installPath/share/man/man1/" >> $specFile
done
fi
echo "%clean" >> $specFile
echo "rm -rf \$RPM_BUILD_ROOT/$installPath" >> $specFile
echo "%files " >> $specFile
echo "%defattr(-,root,root,-)" >> $specFile
# Note: In some OS like SLES, during upgrade rocm-core is getting upgraded first and followed by other packages
# rocm-core cannot delete rocm-ver folder, since it contains files of other packages that are yet to be upgraded
# To remove rocm-ver folder after upgrade the spec file of other packages should contain the rocm-ver directory
# Otherwise after upgrade empty old rocm-ver folder will be left out.
# If empty remove /opt/rocm-ver folder and its subdirectories created by rocm-llvm-core package
{
echo "$ROCM_INSTALL_PATH"
@@ -937,6 +1157,7 @@ package_lightning_static() {
mv $packageRpm/RPMS/x86_64/*.rpm $RPM_PATH
# setup for rocm-llvm-dev package
echo "Name: $packageNameExtra" > $specFileExtra
echo "Version: ${packageVersion}.${ROCM_LIBPATCH_VERSION}" >> $specFileExtra
echo "Release: ${JOB_DESIGNATOR}${SLES_BUILD_ID_PREFIX}${BUILD_ID}%{?dist}" >> $specFileExtra
@@ -964,11 +1185,13 @@ package_lightning_static() {
echo "cp -P $backwardsCompatibleSymlink \$RPM_BUILD_ROOT/$ROCM_INSTALL_PATH" >> $specFileExtra
# Only copy binaries not packaged in core
for i in "$distBin"/*; do
bin=$(basename "$i")
contains "$bin" "${core_bin[@]}" "${amd_compiler_commands[@]}" && continue
echo "cp -d \"$i\" \$RPM_BUILD_ROOT/$installPath/bin/" >> $specFileExtra
done
# Only copy libraries not packaged in core
for i in "$distLib"/*; do
lib=$(basename "$i")
contains "$lib" "${core_lib[@]}" && continue
@@ -976,14 +1199,17 @@ package_lightning_static() {
done
echo "cp -R $distInc \$RPM_BUILD_ROOT/$installPath" >> $specFileExtra
# Remove dirs already packaged in rocm-llvm-core
echo "rm -rf \$RPM_BUILD_ROOT/$installPath/lib/clang" >> $specFileExtra
if [ $FLANG_NEW -eq 1 ]; then
# Remove flang mods packaged in rocm-llvm-core
echo "rm -rf \$RPM_BUILD_ROOT/$installPath/include/flang" >> $specFileExtra
fi
if [ "$BUILD_MANPAGES" == "ON" ]; then
echo "mkdir -p \$RPM_BUILD_ROOT/$installPath/share/man/man1" >> $specFileExtra
# zip the generated man pages before installing them in the package
for i in "${dev_man_pages[@]}"; do
if [ -f "$distMan/man1/$i" ]; then
echo "gzip -f $distMan/man1/$i" >> $specFileExtra
@@ -997,6 +1223,11 @@ package_lightning_static() {
echo "%files " >> $specFileExtra
echo "%defattr(-,root,root,-)" >> $specFileExtra
# Note: In some OS like SLES, during upgrade rocm-core is getting upgraded first and followed by other packages
# rocm-core cannot delete rocm-ver folder, since it contains files of other packages that are yet to be upgraded
# To remove rocm-ver folder after upgrade the spec file of other packages should contain the rocm-ver directory
# Otherwise after upgrade empty old rocm-ver folder will be left out.
# If empty remove /opt/rocm-ver folder and its subdirectories created by rocm-llvm package
echo "$ROCM_INSTALL_PATH" >> $specFileExtra
echo "%post" >> $specFileExtra
@@ -1010,6 +1241,7 @@ package_lightning_static() {
package_docs() {
# do common stuff here:
if [ "$BUILD_TYPE" == "Debug" ]; then
return
fi
@@ -1018,7 +1250,9 @@ package_docs() {
return
fi
# Echo the LLVM version ${LLVM_VERSION_MAJOR}.${LLVM_VERSION_MINOR}.${LLVM_VERSION_PATCH}${LLVM_VERSION_SUFFIX}
get_llvm_version
# We require the LLVM major, minor and patch. Scrub the LLVM_VERSION_SUFFIX.
local llvmParsedVersion="${LLVM_VERSION_MAJOR}.${LLVM_VERSION_MINOR}.${LLVM_VERSION_PATCH}"
local packageName="rocm-llvm-docs"
@@ -1033,24 +1267,31 @@ package_docs() {
local licenseDir="$ROCM_INSTALL_PATH/share/doc/$packageName"
local packageDir="$BUILD_PATH/package"
# Debian specific
local packageDeb="$packageDir/deb"
local controlFile="$packageDeb/DEBIAN/control"
local debDependencies="rocm-core"
# RPM specific
local packageRpm="$packageDir/rpm"
local specFile="$packageDir/$packageName.spec"
local rpmRequires="rocm-core"
# Cleanup previous packages
rm -rf "$packageDir"
echo "rm -rf $packageDir"
# Only build deb in Ubuntu environment
if [ "$PACKAGEEXT" = "deb" ]; then
# Debian packaging
mkdir -p "$packageDeb/$licenseDir"
mkdir "${controlFile%/*}"
# Install license file in rocm-llvm-docs package.
cp -r "$LLVM_ROOT_LCL/LICENSE.TXT" "$packageDeb/$licenseDir"
# Copy the docs
cp -r "$distDoc" "$packageDeb/$licenseDir"
{
@@ -1071,17 +1312,21 @@ package_docs() {
"${DEB_PATH}/${packageName}_${packageVersion}.${ROCM_LIBPATCH_VERSION}-${JOB_DESIGNATOR}${BUILD_ID}~${DISTRO_RELEASE}_${packageArch}.deb"
fi
# Only build RPM in CentOS or SLES or RHEL or Mariner environment
if [ "$PACKAGEEXT" = "rpm" ]; then
# RPM packaging
mkdir -p "$(dirname $specFile)"
mkdir -p "$RPM_PATH"
# set up for rocm-llvm-docs package
echo "Name: $packageName" > $specFile
echo "Version: ${packageVersion}.${ROCM_LIBPATCH_VERSION}" >> $specFile
echo "Release: ${JOB_DESIGNATOR}${SLES_BUILD_ID_PREFIX}${BUILD_ID}%{?dist}" >> $specFile
echo "Summary: $packageSummary" >> $specFile
echo "Group: System Environment/Libraries" >> $specFile
echo "License: ASL 2.0 with exceptions" >> $specFile
echo "Prefix: $ROCM_INSTALL_PATH" >> $specFile
echo "Requires: $rpmRequires" >> $specFile
echo "%description" >> $specFile
@@ -1093,8 +1338,10 @@ package_docs() {
echo "%install" >> $specFile
echo "mkdir -p \$RPM_BUILD_ROOT/$licenseDir" >> $specFile
# Install the license file to rocm-llvm-docs
echo "cp -R $LLVM_ROOT_LCL/LICENSE.TXT \$RPM_BUILD_ROOT/$licenseDir" >> $specFile
# Copy the docs
echo "cp -R \"$distDoc\" \$RPM_BUILD_ROOT/$licenseDir" >> $specFile
echo "%clean" >> $specFile
@@ -1128,24 +1375,13 @@ build() {
create_compiler_config_files
}
create_wheel_package() {
echo "Creating rocm-llvm wheel package"
mkdir -p "$ROCM_WHEEL_DIR"
cp -f $SCRIPT_ROOT/generate_setup_py.py $ROCM_WHEEL_DIR
cp -f $SCRIPT_ROOT/repackage_wheel.sh $ROCM_WHEEL_DIR
cd $ROCM_WHEEL_DIR
# Currently only supports python3.6
./repackage_wheel.sh $RPM_PATH/rocm-llvm*.rpm python3.6
# Copy the wheel created to RPM folder which will be uploaded to artifactory
mv "$ROCM_WHEEL_DIR"/dist/*.whl "$RPM_PATH"
}
case $TARGET in
(clean) clean_lightning ;;
(all)
time build
time package_lightning_static
time package_docs
build_wheel "$BUILD_PATH" "$PROJ_NAME"
;;
(build)
build
@@ -1158,9 +1394,4 @@ case $TARGET in
(*) die "Invalid target $TARGET" ;;
esac
if [[ $WHEEL_PACKAGE == true ]]; then
echo "Wheel Package build started !!!!"
create_wheel_package
fi
echo "Operation complete"

View File

@@ -1,7 +1,7 @@
#!/bin/bash
set -ex
source "$(dirname "${BASH_SOURCE[0]}")/compute_helper.sh"
source "$(dirname "${BASH_SOURCE[0]}")/compute_utils.sh"
set_component_src MIOpen
@@ -19,18 +19,18 @@ build_miopen_mlir() {
mkdir build && cd build
cmake \
-G Ninja \
-DCMAKE_C_COMPILER="${ROCM_PATH}/llvm/bin/clang" \
-DCMAKE_CXX_COMPILER="${ROCM_PATH}/llvm/bin/clang++" \
-DCMAKE_C_COMPILER="$(set_build_variables __CLANG__)" \
-DCMAKE_CXX_COMPILER="$(set_build_variables __CLANG++__)" \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_PREFIX_PATH="${ROCM_PATH};${HOME}/miopen-deps" \
-DCMAKE_PREFIX_PATH="${ROCM_PATH};${HOME}/miopen-deps" \
-DCMAKE_INSTALL_PREFIX="$ROCM_PATH" \
-DBUILD_FAT_LIBROCKCOMPILER=1 \
..
..
cmake --build . -- librockCompiler -j${PROC}
cmake --build . -- install
rm -rf _CPack_Packages/ && find -name '*.o' -delete
echo "Finished building rocMLIR"
}
@@ -43,12 +43,6 @@ build_miopen_deps() {
echo "Start build"
cd "$COMPONENT_SRC"
# Update rocm-recipes for boost link
# https://github.com/ROCm/MIOpen/pull/3457/files
sed -i 's/329203d79f9fe77ae5d0d742af0966bc57f4dfc8/92c6695449c85887962f45509b376f2eb0d284f7/g' \
rbuild.ini \
install_deps.cmake \
dev-requirements.txt
# Commenting the rocMLIR & composable_kernel from requirements.txt
sed -i '/ROCm\/rocMLIR@\|ROCm\/composable_kernel@/s/^/#/' requirements.txt
# Extract MLIR commit from requirements.txt
@@ -56,7 +50,7 @@ build_miopen_deps() {
pip3 install https://github.com/RadeonOpenCompute/rbuild/archive/master.tar.gz
PATH="${PATH}:${ROCM_PATH}:${HOME}/.local/bin" rbuild prepare -d "$HOME/miopen-deps" --cxx=${ROCM_PATH}/llvm/bin/clang++ --cc ${ROCM_PATH}/llvm/bin/clang
PATH="${PATH}:${ROCM_PATH}:${HOME}/.local/bin" rbuild prepare -d "$HOME/miopen-deps" --cxx="$(set_build_variables __CLANG++__)" --cc "$(set_build_variables __CLANG__)"
build_miopen_mlir "$MLIR_COMMIT"
show_build_cache_stats

View File

@@ -1,7 +1,7 @@
#!/bin/bash
set -ex
source "$(dirname "${BASH_SOURCE[0]}")/compute_helper.sh"
source "$(dirname "${BASH_SOURCE[0]}")/compute_utils.sh"
set_component_src MIOpen
@@ -9,6 +9,8 @@ PACKAGE_DIR=${PACKAGE_DIR%\/*}/miopen-hip
DEB_PATH=$PACKAGE_DIR
RPM_PATH=$PACKAGE_DIR
disable_debug_package_generation
build_miopen_hip() {
echo "Start build"
@@ -31,19 +33,19 @@ build_miopen_hip() {
"${rocm_math_common_cmake_params[@]}" \
-DMIOPEN_BACKEND=HIP \
-DMIOPEN_OFFLINE_COMPILER_PATHS_V2=1 \
-DCMAKE_CXX_COMPILER="${ROCM_PATH}/llvm/bin/clang++" \
-DCMAKE_C_COMPILER="${ROCM_PATH}/llvm/bin/clang" \
-DCMAKE_CXX_COMPILER=$(set_build_variables __CLANG++__) \
-DCMAKE_C_COMPILER=$(set_build_variables __CLANG__) \
-DCMAKE_PREFIX_PATH="${ROCM_PATH};${ROCM_PATH}/hip;${HOME}/miopen-deps" \
-DHIP_OC_COMPILER="${ROCM_PATH}/bin/clang-ocl" \
-DMIOPEN_TEST_DISCRETE=OFF \
"$COMPONENT_SRC"
"$COMPONENT_SRC"
cmake --build "$BUILD_DIR" -- -j${PROC}
cmake --build "$BUILD_DIR" -- install
cmake --build "$BUILD_DIR" -- package
rm -rf $BUILD_DIR/_CPack_Packages/ && find $BUILD_DIR -name '*.o' -delete
mkdir -p $PACKAGE_DIR && cp ${BUILD_DIR}/*.${PKGTYPE} $PACKAGE_DIR
copy_if "${PKGTYPE}" "${CPACKGEN:-"DEB;RPM"}" "${PACKAGE_DIR}" "${BUILD_DIR}"/*."${PKGTYPE}"
show_build_cache_stats
}
@@ -62,7 +64,7 @@ checkout_lfs() {
stage2_command_args "$@"
case $TARGET in
build) build_miopen_hip ;;
build) build_miopen_hip; build_wheel ;;
outdir) print_output_directory ;;
clean) clean_miopen_hip ;;
*) die "Invalid target $TARGET" ;;

View File

@@ -1,39 +1,44 @@
#!/bin/bash
set -ex
source "$(dirname "${BASH_SOURCE[0]}")/compute_helper.sh"
source "$(dirname "${BASH_SOURCE[0]}")/compute_utils.sh"
set_component_src MIVisionX
BUILD_DEV=ON
build_mivisionx() {
if [ "$DISTRO_ID" = "mariner-2.0" ] || [ "$DISTRO_ID" = "azurelinux-3.0" ] ; then
echo "Not building mivisionx for ${DISTRO_ID}. Exiting..."
return 0
fi
echo "Start build"
if [ "${ENABLE_STATIC_BUILDS}" == "true" ]; then
ack_and_skip_static
fi
CXX=$(set_build_variables __AMD_CLANG_++__)
mkdir -p $BUILD_DIR && cd $BUILD_DIR
if [ "${ENABLE_ADDRESS_SANITIZER}" == "true" ]; then
set_asan_env_vars
set_address_sanitizer_on
# Setting BUILD_DEV to OFF. This will prevent the installation of
# header files, other files in share,libexec folder. ASAN pkg doesn't need this
BUILD_DEV=OFF
fi
init_rocm_common_cmake_params
echo "C compiler: $CC"
echo "CXX compiler: $CXX"
if [ -n "$GPU_ARCHS" ]; then
GPU_TARGETS="$GPU_ARCHS"
else
GPU_TARGETS="gfx908;gfx90a;gfx940;gfx941;gfx942;gfx1030;gfx1100;gfx1101;gfx1102;gfx1200;gfx1201"
fi
init_rocm_common_cmake_params
cmake \
"${rocm_math_common_cmake_params[@]}" \
-DROCM_PATH="$ROCM_PATH" \
-DBUILD_DEV=$BUILD_DEV \
-DCMAKE_INSTALL_LIBDIR=$(getInstallLibDir) \
-DAMDGPU_TARGETS=${GPU_TARGETS} \
-DROCM_DEP_ROCMCORE=ON \
-DROCAL_PYTHON=OFF \
${LAUNCHER_FLAGS} \
@@ -44,7 +49,7 @@ build_mivisionx() {
cpack -G ${PKGTYPE^^}
rm -rf _CPack_Packages/ && find -name '*.o' -delete
mkdir -p $PACKAGE_DIR && cp ${BUILD_DIR}/*.${PKGTYPE} $PACKAGE_DIR
copy_if "${PKGTYPE}" "${CPACKGEN:-"DEB;RPM"}" "${PACKAGE_DIR}" "${BUILD_DIR}"/*."${PKGTYPE}"
show_build_cache_stats
}
@@ -58,7 +63,7 @@ clean_mivisionx() {
stage2_command_args "$@"
case $TARGET in
build) build_mivisionx ;;
build) build_mivisionx; build_wheel ;;
outdir) print_output_directory ;;
clean) clean_mivisionx ;;
*) die "Invalid target $TARGET" ;;

View File

@@ -26,6 +26,7 @@ printUsage() {
return 0
}
## Build environment variables
API_NAME="omniperf"
PROJ_NAME="$API_NAME"
LIB_NAME="lib${API_NAME}"
@@ -33,18 +34,16 @@ TARGET="build"
MAKETARGET="deb"
PACKAGE_ROOT="$(getPackageRoot)"
PACKAGE_LIB="$(getLibPath)"
# PACKAGE_INCLUDE="$(getIncludePath)"
BUILD_DIR="$(getBuildPath $API_NAME)"
PACKAGE_DEB="$(getPackageRoot)/deb/$API_NAME"
PACKAGE_RPM="$(getPackageRoot)/rpm/$API_NAME"
ROCM_WHEEL_DIR="${BUILD_DIR}/_wheel"
BUILD_TYPE="Debug"
MAKE_OPTS="$DASH_JAY -C $BUILD_DIR"
SHARED_LIBS="ON"
CLEAN_OR_OUT=0;
MAKETARGET="deb"
PKGTYPE="deb"
WHEEL_PACKAGE=false
#parse the arguments
VALID_STR=$(getopt -o hcraso:p:w --long help,clean,release,static,address_sanitizer,outdir:,package:,wheel -- "$@")
@@ -52,6 +51,7 @@ eval set -- "$VALID_STR"
while true ;
do
#echo "parocessing $1"
case "$1" in
-h | --help)
printUsage ; exit 0;;
@@ -86,7 +86,6 @@ fi
clean() {
echo "Cleaning $PROJ_NAME"
rm -rf "$ROCM_WHEEL_DIR"
rm -rf "$BUILD_DIR"
rm -rf "$PACKAGE_DEB"
rm -rf "$PACKAGE_RPM"
@@ -100,7 +99,6 @@ build() {
echo "Skip make and uploading packages for Omniperf on Centos7 distro, due to python dependency"
exit 0
fi
if [ ! -d "$BUILD_DIR" ]; then
mkdir -p "$BUILD_DIR"
pushd "$BUILD_DIR" || exit
@@ -108,6 +106,8 @@ build() {
echo "ROCm CMake Params: $(rocm_cmake_params)"
echo "ROCm Common CMake Params: $(rocm_common_cmake_params)"
#install python deps
#python3 -m pip install -t ${BUILD_DIR}/python-libs -r ${OMNIPERF_ROOT}/requirements.txt
print_lib_type $SHARED_LIBS
cmake \
$(rocm_cmake_params) \
@@ -117,7 +117,6 @@ build() {
-DMOD_INSTALL_PATH=${BUILD_DIR}/modulefiles \
"$OMNIPERF_ROOT"
fi
make $MAKE_OPTS
make $MAKE_OPTS install
make $MAKE_OPTS package
@@ -126,22 +125,6 @@ build() {
copy_if RPM "${CPACKGEN:-"DEB;RPM"}" "$PACKAGE_RPM" "$BUILD_DIR/${API_NAME}"*.rpm
}
create_wheel_package() {
echo "Creating Omniperf wheel package"
# Copy the setup.py generator to build folder
mkdir -p "$ROCM_WHEEL_DIR"
cp -f "$SCRIPT_ROOT"/generate_setup_py.py "$ROCM_WHEEL_DIR"
cp -f "$SCRIPT_ROOT"/repackage_wheel.sh "$ROCM_WHEEL_DIR"
cd "$ROCM_WHEEL_DIR" || exit
# Currently only supports python3.6
./repackage_wheel.sh "$BUILD_DIR"/*.rpm python3.6
# Copy the wheel created to RPM folder which will be uploaded to artifactory
copy_if WHL "WHL" "$PACKAGE_RPM" "$ROCM_WHEEL_DIR"/dist/*.whl
}
print_output_directory() {
case ${PKGTYPE} in
("deb")
@@ -158,14 +141,9 @@ verifyEnvSetup
case "$TARGET" in
(clean) clean ;;
(build) build ;;
(build) build; build_wheel "$BUILD_DIR" "$PROJ_NAME" ;;
(outdir) print_output_directory ;;
(*) die "Invalid target $TARGET" ;;
esac
if [[ $WHEEL_PACKAGE == true ]]; then
echo "Wheel Package build started !!!!"
create_wheel_package
fi
echo "Operation complete"
echo "Operation complete"

View File

@@ -26,6 +26,7 @@ printUsage() {
return 0
}
## Build environment variables
API_NAME="omnitrace"
PROJ_NAME="$API_NAME"
LIB_NAME="lib${API_NAME}"
@@ -33,9 +34,11 @@ TARGET="build"
MAKETARGET="deb"
PACKAGE_ROOT="$(getPackageRoot)"
PACKAGE_LIB="$(getLibPath)"
# PACKAGE_INCLUDE="$(getIncludePath)"
BUILD_DIR="$(getBuildPath $API_NAME)"
PACKAGE_DEB="$(getPackageRoot)/deb/$API_NAME"
PACKAGE_RPM="$(getPackageRoot)/rpm/$API_NAME"
# PACKAGE_PREFIX="$ROCM_INSTALL_PATH"
BUILD_TYPE="Debug"
MAKE_OPTS="-j 8"
SHARED_LIBS="ON"
@@ -49,6 +52,7 @@ VALID_STR=$(getopt -o hcraso:p:w --long help,clean,release,address_sanitizer,sta
eval set -- "$VALID_STR"
while true; do
#echo "parocessing $1"
case "$1" in
-h | --help)
printUsage
@@ -65,6 +69,8 @@ while true; do
;;
-a | --address_sanitizer)
ack_and_ignore_asan
# set_asan_env_vars
# set_address_sanitizer_on
ASAN=1
shift
@@ -76,6 +82,7 @@ while true; do
-o | --outdir)
TARGET="outdir"
PKGTYPE=$2
# OUT_DIR_SPECIFIED=1
((CLEAN_OR_OUT |= 2))
shift 2
;;
@@ -84,13 +91,13 @@ while true; do
shift 2
;;
-w | --wheel)
echo "omnitrace: wheel build option accepted and ignored"
WHEEL_PACKAGE=true
shift
;;
--)
shift
break
;;
;; # end delimiter
*)
echo " This should never come but just incase : UNEXPECTED ERROR Parm : [$1] " >&2
exit 20
@@ -131,23 +138,68 @@ build_omnitrace() {
echo "Created build directory: $BUILD_DIR"
fi
cd $OMNITRACE_ROOT || exit
echo "Current submodule status"
git submodule status
echo "Cached (old) submodule status"
git submodule status --cached
cat .git/config
echo "Updating submodules"
git submodule init
# copy the new URL to your local config
git submodule sync --recursive
# force update the submodule from the new URL
git submodule update --init --recursive --force
echo "Updated submodule status"
git submodule status
cat .git/config
echo "Build directory: $BUILD_DIR"
pushd "$BUILD_DIR" || exit
print_lib_type $SHARED_LIBS
ELFUTIL_URL="https://compute-artifactory.amd.com/artifactory/rocm-generic-local/dev-tools/omnitrace/elfutils-0.188.tar.bz2"
BINUTIL_URL="https://compute-artifactory.amd.com/artifactory/rocm-generic-local/dev-tools/omnitrace/binutils-2.40.tar.gz"
echo "ROCm CMake Params: $(rocm_cmake_params)"
echo "ROCm Common CMake Params: $(rocm_common_cmake_params)"
echo "ELFUTIL_URL=$ELFUTIL_URL, BINUTIL_URL=$BINUTIL_URL"
if [ $ASAN == 1 ]; then
echo "Address Sanitizer path"
# Commenting out the below cmake command as it is not working as expected
# LD_LIBRARY_PATH=$ROCM_INSTALL_PATH/lib/asan:$LD_LIBRARY_PATH
# cmake \
# $(rocm_cmake_params) \
# $(rocm_common_cmake_params) \
# -DOMNITRACE_BUILD_{LIBUNWIND,DYNINST}=ON \
# -DDYNINST_BUILD_{TBB,BOOST,ELFUTILS,LIBIBERTY}=ON \
# -DAMDDeviceLibs_DIR="${ROCM_INSTALL_PATH}/lib/asan/cmake/AMDDeviceLibs" \
# -Dhip_DIR="${ROCM_INSTALL_PATH}/lib/asan/cmake/hip" \
# -Dhip-lang_DIR="${ROCM_INSTALL_PATH}/lib/asan/cmake/hip-lang" \
# -Damd_comgr_DIR="${ROCM_INSTALL_PATH}/lib/asan/cmake/amd_comgr" \
# -Dhsa-runtime64_DIR="${ROCM_INSTALL_PATH}/lib/asan/cmake/hsa-runtime64" \
# -Dhsakmt_DIR="${ROCM_INSTALL_PATH}/lib/asan/cmake/hsakmt" \
# -DROCM_PATH="${ROCM_INSTALL_PATH}/lib/asan" \
# -Drocprofiler_ROOT_DIR="${ROCM_INSTALL_PATH}/lib/asan" \
# -DCMAKE_HIP_COMPILER_ROCM_ROOT="${ROCM_INSTALL_PATH}" \
# -DCMAKE_PREFIX_PATH="${ROCM_INSTALL_PATH};${ROCM_INSTALL_PATH}/lib/asan" \
# -DCMAKE_LIBRARY_PATH="${ROCM_INSTALL_PATH}/lib/asan" \
# -DCPACK_DEBIAN_PACKAGE_SHLIBDEPS=OFF \
# "$OMNITRACE_ROOT"
else
cmake \
$(rocm_cmake_params) \
$(rocm_common_cmake_params) \
-DOMNITRACE_BUILD_{LIBUNWIND,DYNINST}=ON \
-DDYNINST_BUILD_{TBB,BOOST,ELFUTILS,LIBIBERTY}=ON \
-DElfUtils_DOWNLOAD_URL="$ELFUTIL_URL" \
-D{DYNINST,TIMEMORY}_BINUTILS_DOWNLOAD_URL="$BINUTIL_URL" \
"$OMNITRACE_ROOT"
fi
@@ -182,10 +234,10 @@ print_output_directory() {
verifyEnvSetup
case "$TARGET" in
clean) clean ;;
build) build_omnitrace ;;
outdir) print_output_directory ;;
*) die "Invalid target $TARGET" ;;
clean) clean ;;
build) build_omnitrace; build_wheel "$BUILD_DIR" "$PROJ_NAME" ;;
outdir) print_output_directory ;;
*) die "Invalid target $TARGET" ;;
esac
echo "Operation complete"

View File

@@ -0,0 +1,128 @@
#!/bin/bash
source "$(dirname "${BASH_SOURCE}")/compute_utils.sh"
PROJ_NAME=opencl-cts
TARGET="build"
MAKEOPTS="$DASH_JAY"
BUILD_TYPE="Debug"
OPENCL_ICD_LOADER_BUILD_DIR="$(getBuildPath)/OpenCL-ICD-Loader"
OPENCL_CTS_BUILD_DIR="$(getBuildPath)/OpenCL-CTS"
PACKAGE_ROOT="$(getPackageRoot)"
PACKAGE_DEB="$PACKAGE_ROOT/deb/$PROJ_NAME"
PACKAGE_RPM="$PACKAGE_ROOT/rpm/$PROJ_NAME"
CLEAN_OR_OUT=0;
PKGTYPE="deb"
MAKETARGET="deb"
printUsage() {
echo
echo "Usage: $(basename "${BASH_SOURCE}") [options ...]"
echo
echo "Options:"
echo " -c, --clean Clean output and delete all intermediate work"
echo " -p, --package <type> Specify packaging format"
echo " -r, --release Make a release build instead of a debug build"
echo " -w, --wheel Creates python wheel package of opencl-cts.
It needs to be used along with -r option"
echo " -h, --help Prints this help"
echo " -o, --outdir Print path of output directory containing packages"
echo " -s, --static Component/Build does not support static builds just accepting this param & ignore. No effect of the param on this build"
echo
echo "Possible values for <type>:"
echo " deb -> Debian format (default)"
echo " rpm -> RPM format"
echo
return 0
}
RET_CONFLICT=1
check_conflicting_options $CLEAN_OR_OUT $PKGTYPE $MAKETARGET
if [ $RET_CONFLICT -ge 30 ]; then
print_vars $TARGET $BUILD_TYPE $CLEAN_OR_OUT $PKGTYPE $MAKETARGET
exit $RET_CONFLICT
fi
clean_opencl_cts() {
echo "Cleaning $PROJ_NAME"
rm -rf "$OPENCL_CTS_BUILD_DIR"
rm -rf "$PACKAGE_DEB"
rm -rf "$PACKAGE_RPM"
rm -rf "$PACKAGE_ROOT/opencl-cts"
}
build_opencl_cts() {
echo "Building $PROJ_NAME"
mkdir -p "$OPENCL_CTS_BUILD_DIR"
pushd "$OPENCL_CTS_BUILD_DIR"
if [ ! -e Makefile ]; then
cmake \
-S "$OPENCL_CTS_ROOT" \
$(rocm_cmake_params) \
$(rocm_common_cmake_params) \
-DCL_INCLUDE_DIR="$OPENCL_HEADERS_ROOT" \
-DCL_LIB_DIR="$OPENCL_ICD_LOADER_BUILD_DIR" \
-DOPENCL_LIBRARIES="-lOpenCL -lpthread" \
-DGL_IS_SUPPORTED="ON"
fi
cmake --build . -- $MAKEOPTS
popd
}
package_opencl_cts() {
echo "Packaging $PROJ_NAME"
pushd "$OPENCL_CTS_BUILD_DIR"
cmake --build . -- package
mkdir -p $PACKAGE_DEB
mkdir -p $PACKAGE_RPM
copy_if DEB "${CPACKGEN:-"DEB;RPM"}" "$PACKAGE_DEB" *.deb
copy_if RPM "${CPACKGEN:-"DEB;RPM"}" "$PACKAGE_RPM" *.rpm
popd
}
print_output_directory() {
case ${PKGTYPE} in
("deb")
echo ${PACKAGE_DEB};;
("rpm")
echo ${PACKAGE_RPM};;
(*)
echo "Invalid package type \"${PKGTYPE}\" provided for -o" >&2; exit 1;;
esac
exit
}
#parse the arguments
VALID_STR=`getopt -o hcraswlo:p: --long help,clean,release,static,outdir:,package: -- "$@"`
eval set -- "$VALID_STR"
while true ;
do
case "$1" in
(-c | --clean )
TARGET="clean" ; ((CLEAN_OR_OUT|=1)) ; shift ;;
(-r | --release )
BUILD_TYPE="RelWithDebInfo" ; shift ;;
(-h | --help )
printUsage ; exit 0 ;;
(-a | --address_sanitizer)
ack_and_ignore_asan ; shift ;;
(-w | --wheel)
WHEEL_PACKAGE=true ; shift ;;
(-o | --outdir)
TARGET="outdir"; PKGTYPE=$2 ; OUT_DIR_SPECIFIED=1 ; ((CLEAN_OR_OUT|=2)) ; shift 2 ;;
(-p | --package)
MAKETARGET="$2" ; shift 2;;
(-s | --static)
echo "-s parameter accepted but ignored" ; shift ;;
--) shift; break;; # end delimiter
(*)
echo " This should never come but just incase : UNEXPECTED ERROR Parm : [$1] ">&2 ; exit 20;;
esac
done
case $TARGET in
(clean) clean_opencl_cts ;;
(build) build_opencl_cts ; package_opencl_cts; build_wheel "$OPENCL_ICD_LOADER_BUILD_DIR" "$PROJ_NAME";;
(outdir) print_output_directory ;;
(*) die "Invalid target $TARGET" ;;
esac
echo "Operation complete"

View File

@@ -1,17 +1,16 @@
#!/bin/bash
source "$(dirname "${BASH_SOURCE}")/compute_utils.sh"
PROJ_NAME=OpenCL-ICD-Loader
PROJ_NAME="OpenCL-ICD-Loader"
TARGET="build"
MAKEOPTS="$DASH_JAY"
BUILD_TYPE="Debug"
OPENCL_ICD_LOADER_BUILD_DIR="$(getBuildPath ${PROJ_NAME})"
PACKAGE_ROOT="$(getPackageRoot)"
PACKAGE_DEB="$PACKAGE_ROOT/deb/${PROJ_NAME,,}"
PACKAGE_RPM="$PACKAGE_ROOT/rpm/${PROJ_NAME,,}"
CLEAN_OR_OUT=0;
PKGTYPE="deb"
MAKETARGET="deb"
API_NAME="rocm-opencl-icd-loader"
printUsage() {
echo
@@ -21,6 +20,8 @@ printUsage() {
echo " -c, --clean Clean output and delete all intermediate work"
echo " -p, --package <type> Specify packaging format"
echo " -r, --release Make a release build instead of a debug build"
echo " -w, --wheel Creates python wheel package of opencl-icd-loader.
It needs to be used along with -r option"
echo " -h, --help Prints this help"
echo " -o, --outdir Print path of output directory containing packages"
echo " -s, --static Component/Build does not support static builds just accepting this param & ignore. No effect of the param on this build"
@@ -41,57 +42,46 @@ fi
clean_opencl_icd_loader() {
echo "Cleaning $PROJ_NAME"
rm -rf "$OPENCL_ICD_LOADER_BUILD_DIR"
rm -rf "$PACKAGE_DEB"
rm -rf "$PACKAGE_RPM"
rm -rf "$PACKAGE_ROOT/${PROJ_NAME,,}"
}
copy_pkg_files_to_rocm() {
local comp_folder=$1
local comp_pkg_name=$2
cd "${OUT_DIR}/${PKGTYPE}/${comp_folder}"|| exit 2
if [ "${PKGTYPE}" = 'deb' ]; then
dpkg-deb -x ${comp_pkg_name}_*.deb pkg/
else
mkdir pkg && pushd pkg/ || exit 2
if [[ "${comp_pkg_name}" != *-dev* ]]; then
rpm2cpio ../${comp_pkg_name}-*.rpm | cpio -idmv
else
rpm2cpio ../${comp_pkg_name}el-*.rpm | cpio -idmv
fi
popd || exit 2
fi
ls ./pkg -alt
cp -r ./pkg/*/rocm*/* "${ROCM_PATH}" || exit 2
rm -rf pkg/
rm -rf "$PACKAGE_ROOT/opencl-icd-loader"
}
build_opencl_icd_loader() {
echo "Downloading $PROJ_NAME" package
if [ "$DISTRO_NAME" = ubuntu ]; then
mkdir -p "$PACKAGE_DEB"
local rocm_ver=${ROCM_VERSION}
if [ ${ROCM_VERSION##*.} = 0 ]; then
rocm_ver=${ROCM_VERSION%.*}
fi
local url="https://repo.radeon.com/rocm/apt/${rocm_ver}/pool/main/r/${API_NAME}/"
local package
package=$(curl -s "$url" | grep -Po 'href="\K[^"]*' | grep "${DISTRO_RELEASE}" | head -n 1)
if [ -z "$package" ]; then
echo "No package found for Ubuntu version $DISTRO_RELEASE"
exit 1
fi
wget -t3 -P "$PACKAGE_DEB" "${url}${package}"
copy_pkg_files_to_rocm ${PROJ_NAME,,} ${API_NAME}
else
echo "$DISTRO_ID is not supported..."
exit 2
echo "Building $PROJ_NAME"
if [ ! -e "$OPENCL_ICD_LOADER_ROOT/CMakeLists.txt" ]
then
echo "No $OPENCL_ICD_LOADER_ROOT/CMakeLists.txt file, skipping opencl icd loader" >&2
echo "No $OPENCL_ICD_LOADER_ROOT/CMakeLists.txt file, skipping opencl icd loader"
exit 0 # This is not an error
fi
echo "Installing $PROJ_NAME" package
mkdir -p "$OPENCL_ICD_LOADER_BUILD_DIR"
pushd "$OPENCL_ICD_LOADER_BUILD_DIR"
if [ ! -e Makefile ]; then
cmake \
-S "$OPENCL_ICD_LOADER_ROOT" \
$(rocm_cmake_params) \
$(rocm_common_cmake_params) \
-DENABLE_OPENCL_LAYERS="OFF" \
-DOPENCL_ICD_LOADER_HEADERS_DIR="$OPENCL_HEADERS_ROOT"
fi
cmake --build . -- $MAKEOPTS
echo "Installing opencl-icd-loader"
cmake --build . -- $MAKEOPTS install
popd
}
package_opencl_icd_loader() {
echo "Packaging $PROJ_NAME"
pushd "$OPENCL_ICD_LOADER_BUILD_DIR"
cmake --build . -- package
mkdir -p $PACKAGE_DEB
mkdir -p $PACKAGE_RPM
copy_if DEB "${CPACKGEN:-"DEB;RPM"}" "$PACKAGE_DEB" *.deb
copy_if RPM "${CPACKGEN:-"DEB;RPM"}" "$PACKAGE_RPM" *.rpm
popd
}
print_output_directory() {
@@ -106,7 +96,8 @@ print_output_directory() {
exit
}
VALID_STR=`getopt -o hcraswlo:p: --long help,clean,release,outdir:,package: -- "$@"`
#parse the arguments
VALID_STR=`getopt -o hcraswlo:p: --long help,clean,release,wheel,outdir:,package: -- "$@"`
eval set -- "$VALID_STR"
while true ;
do
@@ -119,23 +110,35 @@ do
printUsage ; exit 0 ;;
(-a | --address_sanitizer)
ack_and_ignore_asan ; shift ;;
(-w | --wheel)
WHEEL_PACKAGE=true ; shift ;;
(-o | --outdir)
TARGET="outdir"; PKGTYPE=$2 ; OUT_DIR_SPECIFIED=1 ; ((CLEAN_OR_OUT|=2)) ; shift 2 ;;
(-p | --package)
MAKETARGET="$2" ; shift 2;;
(-s | --static)
echo "-s parameter accepted but ignored" ; shift ;;
--) shift; break;;
--) shift; break;; # end delimiter
(*)
echo " This should never come but just incase : UNEXPECTED ERROR Parm : [$1] ">&2 ; exit 20;;
esac
done
case $TARGET in
(clean) clean_opencl_icd_loader ;;
(build) build_opencl_icd_loader ;;
(outdir) print_output_directory ;;
(*) die "Invalid target $TARGET" ;;
(clean)
clean_opencl_icd_loader
;;
(build)
build_opencl_icd_loader
package_opencl_icd_loader
build_wheel "$OPENCL_ICD_LOADER_BUILD_DIR" "$PROJ_NAME"
;;
(outdir)
print_output_directory
;;
(*)
die "Invalid target $TARGET"
;;
esac
echo "Operation complete"

View File

@@ -8,11 +8,13 @@ printUsage() {
echo
echo "Options:"
echo " -h, --help Prints this help"
echo " -s, --static Supports static CI by accepting this param & not bailing out. No effect of the param though"
echo " -c, --clean Clean output and delete all intermediate work"
echo " -r, --release Make a release build instead of a debug build"
echo " -a, --address_sanitizer Enable address sanitizer"
echo " -o, --outdir <pkg_type> Print path of output directory containing packages of type referred to by pkg_type"
echo " -s, --static Component/Build does not support static builds just accepting this param & ignore. No effect of the param on this build"
echo " -w, --wheel Creates python wheel package of opencl.
It needs to be used along with -r option"
echo
echo "Possible values for <type>:"
echo " deb -> Debian format (default)"
@@ -23,9 +25,7 @@ printUsage() {
}
PROJ_NAME="opencl-on-rocclr"
MAKEOPTS="$DASH_JAY"
BUILD_PATH="$(getBuildPath $PROJ_NAME)"
TARGET="build"
PACKAGE_ROOT="$(getPackageRoot)"
PACKAGE_DEB="$PACKAGE_ROOT/deb/$PROJ_NAME"
@@ -39,7 +39,8 @@ MAKETARGET="deb"
PKGTYPE="deb"
VALID_STR=`getopt -o hcraso: --long help,clean,release,static,address_sanitizer,outdir: -- "$@"`
#parse the arguments
VALID_STR=`getopt -o hcrawso: --long help,clean,release,static,wheel,address_sanitizer,outdir: -- "$@"`
eval set -- "$VALID_STR"
while true ;
@@ -56,9 +57,11 @@ do
set_address_sanitizer_on ; shift ;;
(-s | --static)
ack_and_skip_static ;;
(-w | --wheel)
WHEEL_PACKAGE=true ; shift ;;
(-o | --outdir)
TARGET="outdir"; PKGTYPE=$2 ; OUT_DIR_SPECIFIED=1 ; ((CLEAN_OR_OUT|=2)) ; shift 2 ;;
--) shift; break;;
--) shift; break;; # end delimiter
(*)
echo " This should never come but just incase : UNEXPECTED ERROR Parm : [$1] ">&2 ; exit 20;;
esac
@@ -73,6 +76,7 @@ if [ $RET_CONFLICT -ge 30 ]; then
fi
clean_opencl_on_rocclr() {
# Delete cmake output directory
rm -rf "$BUILD_PATH"
rm -rf "$PACKAGE_DEB"
rm -rf "$PACKAGE_RPM"
@@ -83,14 +87,19 @@ clean_opencl_on_rocclr() {
}
build_opencl_on_rocclr() {
# TODO This if condition is a temporary workaround so that mainline builds dont error out
# until build migrated from opencl to clr repo
if [ -e "$CLR_ROOT/CMakeLists.txt" ]; then
# We are in a branch that has migrated to clr repo
_OCL_CMAKELIST_DIR="$CLR_ROOT"
_OCL_CMAKELIST_OPT="-DCLR_BUILD_HIP=OFF -DCLR_BUILD_OCL=ON"
elif [ ! -e "$OPENCL_ON_ROCclr_ROOT/CMakeLists.txt" ]; then
# We seem to have hit a branch in which both the old and the new repo don't exist
echo "No $OPENCL_ON_ROCclr_ROOT/CMakeLists.txt file, skipping opencl on rocclr" >&2
echo "No $OPENCL_ON_ROCclr_ROOT/CMakeLists.txt file, skipping opencl on rocclr"
exit 0
exit 0 # This is not an error
else
# We are in a branch that has not yet migrated to clr repo yet
_OCL_CMAKELIST_DIR="$OPENCL_ON_ROCclr_ROOT"
_OCL_CMAKELIST_OPT=""
fi
@@ -99,6 +108,7 @@ build_opencl_on_rocclr() {
mkdir -p "$BUILD_PATH"
pushd "$BUILD_PATH"
# FIXME: Remove -DROCclr_DIR/LIBROCclr_STATIC_DIR
if [ ! -e Makefile ]; then
echo "Building OpenCL-On-ROCclr CMake environment"
@@ -147,10 +157,20 @@ print_output_directory() {
}
case $TARGET in
(clean) clean_opencl_on_rocclr ;;
(build) build_opencl_on_rocclr ; package_opencl_on_rocclr ;;
(outdir) print_output_directory ;;
(*) die "Invalid target $TARGET" ;;
(clean)
clean_opencl_on_rocclr
;;
(build)
build_opencl_on_rocclr
package_opencl_on_rocclr
build_wheel "$BUILD_PATH" "$PROJ_NAME"
;;
(outdir)
print_output_directory
;;
(*)
die "Invalid target $TARGET"
;;
esac
echo "Operation complete"

View File

@@ -10,6 +10,8 @@ printUsage() {
echo " -c, --clean Clean output and delete all intermediate work"
echo " -p, --package <type> Specify packaging format"
echo " -r, --release Make a release build instead of a debug build"
echo " -w, --wheel Creates python wheel package of openmp-extras.
It needs to be used along with -r option"
echo " -a, --address_sanitizer Enable address sanitizer"
echo " -o, --outdir <pkg_type> Print path of output directory containing packages of
type referred to by pkg_type"
@@ -23,7 +25,6 @@ printUsage() {
return 0
}
PROJ_NAME="openmp-extras"
packageMajorVersion="18.63"
packageMinorVersion="0"
@@ -35,9 +36,12 @@ TARGET="build"
MAKEOPTS="$DASH_JAY"
STATIC_PKG_DEPS="OFF"
# Should only need to update this variable when moving
# to the new ROCM_INSTALL_PATH.
export INSTALL_PREFIX=${ROCM_INSTALL_PATH}
VALID_STR=`getopt -o hcraso:p: --long help,clean,release,address_sanitizer,static,outdir,package: -- "$@"`
#parse the arguments
VALID_STR=`getopt -o hcraswo:p: --long help,clean,release,address_sanitizer,static,outdir,wheel:,package: -- "$@"`
eval set -- "$VALID_STR"
while true ;
@@ -52,17 +56,23 @@ do
-a | --address_sanitizer )
set_asan_env_vars
set_address_sanitizer_on
# The path will be appended to cmake prefix path for asan builds
# Required for finding cmake config files for asan builds
export ROCM_CMAKECONFIG_PATH="$INSTALL_PREFIX/lib/asan/cmake"
export VERBOSE=1
# openmp debug build of ompd uses python build, which defaults to gcc
export LDSHARED="$INSTALL_PREFIX/lib/llvm/bin/clang -shared -Wl,-O1 -Wl,-Bsymbolic-functions -Wl,-z,relro -g -fwrapv -O2"
# SANITIZER is used in openmp-debug build scripts so that the asan C/CXX Flags are not overwritten
export SANITIZER=1 ;;
-o | --outdir )
shift 1; PKGTYPE=$1 ; TARGET="outdir" ;;
-w | --wheel )
WHEEL_PACKAGE=true ;;
-s | --static )
export STATIC_PKG_DEPS="ON" ;;
-h | --help )
printUsage ; exit 0 ;;
--) shift; break;;
--) shift; break;; # end delimiter
*)
MAKEARG=$@ ; break ;;
esac
@@ -71,6 +81,7 @@ done
clean_openmp_extras() {
# Delete cmake output and install directory
rm -rf "$BUILD_PATH"
rm -rf "$INSTALL_PREFIX/openmp-extras"
}
@@ -93,6 +104,9 @@ build_openmp_extras() {
echo BUILD_PATH: $BUILD_PATH
echo "INSTALL_PREFIX:$INSTALL_PREFIX"
export AOMP_STANDALONE_BUILD=0
# FIXME: Check the build scripts to see if support for DEVEL package
# is on. This can be removed once the old packaging logic is gone. This
# may return a non-zero, so for now do not error out the script.
set +e
checkDevel=$(grep "ENABLE_DEVEL_PACKAGE=ON" $AOMP_REPOS/aomp/bin/build_openmp.sh)
set -e
@@ -104,6 +118,7 @@ build_openmp_extras() {
fi
export BUILD_AOMP=$BUILD_PATH
# EPSDB does not build hsa, we need to pick it up from ROCm install location.
if [ "$EPSDB" == "1" ]; then
export ROCM_DIR=$ROCM_INSTALL_PATH
else
@@ -134,6 +149,7 @@ build_openmp_extras() {
echo "BEGIN Build of openmp-extras"
"$AOMP_REPOS"/aomp/bin/build_aomp.sh $MAKEARG
# Create symlinks for omp headers. Stage 2 components need these.
local llvm_ver=`$INSTALL_PREFIX/lib/llvm/bin/clang --print-resource-dir | sed 's^/llvm/lib/clang/^ ^' | awk '{print $2}'`
if [ ! -e $ROCM_INSTALL_PATH/lib/llvm/lib/clang/$llvm_ver/include/omp.h ] ; then
if [ ! -h $ROCM_INSTALL_PATH/lib/llvm/lib/clang/$llvm_ver/include/omp.h ] ; then
@@ -154,6 +170,7 @@ build_openmp_extras() {
}
package_openmp_extras_deb() {
# Debian packaging
local packageName=$1
local packageDeb="$packageDir/deb"
local packageArch="amd64"
@@ -184,14 +201,20 @@ package_openmp_extras_deb() {
debDependencies="$debDependencies, openmp-extras-runtime, hsa-rocr-static-dev"
fi
fi
# copyPath = /opt/rocm
# installPath = /opt/rocm/lib/llvm
# FIXME: openmp-extras/devel logic can be removed once the new packaging lands
# New packaging uses installed_files.txt the openmp-extras/devel
# directory will no longer exist.
if [ -f "$BUILD_PATH"/build/installed_files.txt ] && [ ! -d "$INSTALL_PREFIX"/openmp-extras/devel ]; then
if [ "$packageType" == "runtime" ]; then
# Cleanup previous packages
rm -rf "$packageDir"
rm -rf "$DEB_PATH"
mkdir -p "$DEB_PATH"
mkdir -p $packageDeb/openmp-extras
# Licensing
# Copy licenses into share/doc/openmp-extras
mkdir -p $packageDeb/openmp-extras$copyPath/share/doc/openmp-extras
cp -r $AOMP_REPOS/aomp/LICENSE $packageDeb/openmp-extras$copyPath/share/doc/openmp-extras/LICENSE.apache2
cp -r $AOMP_REPOS/aomp-extras/LICENSE $packageDeb/openmp-extras$copyPath/share/doc/openmp-extras/LICENSE.mit
@@ -199,20 +222,29 @@ package_openmp_extras_deb() {
else
rm -rf $packageDeb/openmp-extras/*
mkdir -p $packageDeb/openmp-extras$copyPath/bin
cp -r --parents "$installPath"/lib-debug/src $packageDeb/openmp-extras
if [ -d "$installPath"/lib-debug/src ]; then
cp -r --parents "$installPath"/lib-debug/src $packageDeb/openmp-extras
else
cp -r --parents "$ompdSrcDir" $packageDeb/openmp-extras
fi
fi
else
# FIXME: Old packaging method, can delete once new packaging lands.
if [ "$packageType" == "runtime" ]; then
# Cleanup previous packages
rm -rf "$packageDir"
rm -rf "$DEB_PATH"
mkdir -p "$DEB_PATH"
mkdir -p $packageDeb/openmp-extras$installPath
mkdir -p $packageDeb/openmp-extras$installPath/lib/clang/$llvm_ver/include
# Licensing
# Copy licenses into share/doc/openmp-extras
mkdir -p $packageDeb/openmp-extras$copyPath/share/doc/openmp-extras
cp -r $AOMP_REPOS/aomp/LICENSE $packageDeb/openmp-extras$copyPath/share/doc/openmp-extras/LICENSE.apache2
cp -r $AOMP_REPOS/aomp-extras/LICENSE $packageDeb/openmp-extras$copyPath/share/doc/openmp-extras/LICENSE.mit
cp -r $AOMP_REPOS/flang/LICENSE.txt $packageDeb/openmp-extras$copyPath/share/doc/openmp-extras/LICENSE.flang
else
# Clean packageDeb for devel build
rm -rf $packageDeb/openmp-extras$installPath/*
rm -rf $packageDeb/openmp-extras/bin
rm -rf $packageDeb/openmp-extras$copyPath/share
@@ -224,10 +256,13 @@ package_openmp_extras_deb() {
mkdir -p "$(dirname $controlFile)"
# Copy openmp-extras files, bin will turn into llvm/bin
if [ -f "$BUILD_PATH"/build/installed_files.txt ] && [ ! -d "$INSTALL_PREFIX"/openmp-extras/devel ]; then
if [ "$packageType" == "runtime" ]; then
cat "$BUILD_PATH"/build/installed_files.txt | grep -P '\.so|\.a' | cut -d":" -f2 | cut -d" " -f2 | xargs -I {} cp -d --parents {} "$packageDeb"/openmp-extras
# libgomp and libiomp5 are not on the install_manifest.txt and need
# to be manually copied. Waiting on trunk patch to flow into amd-staging
# to ensure these symlinks are in the manifest.
cp -d --parents "$installPath/lib/libgomp.so" "$packageDeb"/openmp-extras
cp -d --parents "$installPath/lib/libiomp5.so" "$packageDeb"/openmp-extras
cp -d --parents "$installPath/lib-debug/libgomp.so" "$packageDeb"/openmp-extras
@@ -236,9 +271,11 @@ package_openmp_extras_deb() {
cat "$BUILD_PATH"/build/installed_files.txt | grep -Pv '\.so|\.a' | cut -d":" -f2 | cut -d" " -f2 | xargs -I {} cp -d --parents {} "$packageDeb"/openmp-extras
fi
else
# FIXME: Old packaging method, can delete once new packaging lands.
cp -r "$AOMP"/"$packageType"/* "$packageDeb"/openmp-extras"$installPath"
fi
# Copy examples
if [ "$packageType" == "devel" ]; then
mkdir -p "$packageDeb"/openmp-extras"$copyPath"/share/openmp-extras/examples
echo cp -r "$AOMP_REPOS"/aomp/examples/fortran "$packageDeb"/openmp-extras"$copyPath"/share/openmp-extras/examples
@@ -252,9 +289,11 @@ package_openmp_extras_deb() {
fi
if [ "$packageType" == "devel" ]; then
# Create symbolic links for openmp header files
ln -s ../../../../include/omp.h $packageDeb/openmp-extras$installPath/lib/clang/$llvm_ver/include/omp.h
ln -s ../../../../include/ompt.h $packageDeb/openmp-extras$installPath/lib/clang/$llvm_ver/include/ompt.h
ln -s ../../../../include/omp-tools.h $packageDeb/openmp-extras$installPath/lib/clang/$llvm_ver/include/omp-tools.h
# Only create symlinks if file exists
if [ ! -h "$packageDeb"/openmp-extras"$copyPath"/bin/aompcc ] && [ -e "$packageDeb"/openmp-extras"$installPath"/bin/aompcc ]; then
ln -s ../lib/llvm/bin/aompcc "$packageDeb"/openmp-extras"$copyPath"/bin/aompcc
fi
@@ -266,12 +305,14 @@ package_openmp_extras_deb() {
fi
fi
# Inspect
ls -l "$packageDeb"/openmp-extras"$installPath"
if [ "$packageType" == "devel" ]; then
ls -l "$packageDeb"/openmp-extras"$installPath"/bin
ls -l "$packageDeb"/openmp-extras"$copyPath"/bin
fi
# Create control file
{
echo "Package: $packageName"
echo "Architecture: $packageArch"
@@ -293,7 +334,9 @@ package_openmp_extras_deb() {
"$DEB_PATH/${packageName}_${packageVersion}-${CPACK_DEBIAN_PACKAGE_RELEASE}_${packageArch}.deb"
}
# ASAN debian package
package_openmp_extras_asan_deb() {
# Debian packaging
local packageName=$1
local packageDeb="$packageDir/deb"
local packageArch="amd64"
@@ -308,6 +351,8 @@ package_openmp_extras_asan_deb() {
rm -rf "$packageDir"
rm -rf "$DEB_PATH"
mkdir -p "$DEB_PATH"
# Licensing
# Copy licenses into share/doc/openmp-extras-asan
local licenseDir="$packageDeb/openmp-extras$copyPath/share/doc/openmp-extras-asan"
mkdir -p $licenseDir
cp -r $AOMP_REPOS/aomp/LICENSE $licenseDir/LICENSE.apache2
@@ -317,15 +362,18 @@ package_openmp_extras_asan_deb() {
mkdir -p "$(dirname $controlFile)"
if [ -f "$BUILD_PATH"/build/installed_files.txt ] && [ ! -d "$INSTALL_PREFIX"/openmp-extras ]; then
cat "$BUILD_PATH"/build/installed_files.txt | grep -P 'asan' | cut -d":" -f2 | cut -d" " -f2 | xargs -I {} cp -d --parents {} "$packageDeb"/openmp-extras
# libgomp and libiomp5 are not on the install_manifest.txt and need
# to be manually copied. Waiting on trunk patch to flow into amd-staging
# to ensure these symlinks are in the manifest.
cp -d --parents "$installPath/lib/asan/libgomp.so" "$packageDeb"/openmp-extras
cp -d --parents "$installPath/lib/asan/libiomp5.so" "$packageDeb"/openmp-extras
cp -d --parents "$installPath/lib-debug/asan/libgomp.so" "$packageDeb"/openmp-extras
cp -d --parents "$installPath/lib-debug/asan/libiomp5.so" "$packageDeb"/openmp-extras
# FIXME: Old packaging method, can delete once new packaging lands.
else
mkdir -p $packageDeb/openmp-extras$installPath/lib/asan
mkdir -p $packageDeb/openmp-extras$installPath/lib-debug/asan
# runtime folder have asan libraries. Copy to asan folder for packaging
cp -r "$AOMP"/lib/asan/* "$packageDeb"/openmp-extras"$installPath"/lib/asan/
cp -r "$AOMP"/lib-debug/asan/* "$packageDeb"/openmp-extras"$installPath"/lib-debug/asan/
cp -r "$AOMP"/"$asanLibDir"/lib/asan/* "$packageDeb"/openmp-extras"$installPath"/lib/asan/
@@ -334,6 +382,7 @@ package_openmp_extras_asan_deb() {
cp -r "$AOMP"/devel/lib-debug/asan/* "$packageDeb"/openmp-extras"$installPath"/lib-debug/asan/
fi
# Create control file
{
echo "Package: $packageName"
echo "Architecture: $packageArch"
@@ -352,6 +401,7 @@ package_openmp_extras_asan_deb() {
package_openmp_extras_rpm() {
# RPM packaging
local packageName=$1
local packageRpm="$packageDir/rpm"
local specFile="$packageDir/$packageName.spec"
@@ -376,6 +426,7 @@ package_openmp_extras_rpm() {
fi
fi
# Cleanup previous packages
if [ "$packageType" == "runtime" ]; then
rm -rf "$packageDir"
rm -rf "$RPM_PATH"
@@ -386,6 +437,8 @@ package_openmp_extras_rpm() {
mkdir -p "$(dirname $specFile)"
{
# FIXME: Remove all conditions for empty packageType when
# devel and runtime packaging changes land in mainline.
echo "%define is_runtime %( if [ $packageType == runtime ]; then echo "1" ; else echo "0"; fi )"
echo "%define is_devel %( if [ $packageType == devel ]; then echo "1" ; else echo "0"; fi )"
@@ -403,6 +456,7 @@ package_openmp_extras_rpm() {
echo "Obsoletes: $rpmObsoletes"
echo "%endif"
echo "%define debug_package %{nil}"
# Redefining __os_install_post to remove stripping
echo "%define __os_install_post %{nil}"
echo "%description"
echo "$packageSummaryLong"
@@ -419,6 +473,7 @@ package_openmp_extras_rpm() {
echo " mkdir -p \$RPM_BUILD_ROOT$copyPath/bin"
echo " mkdir -p \$RPM_BUILD_ROOT$installPath/lib/clang/$llvm_ver/include"
echo " %endif"
# FIXME: Old packaging method, can delete once new packaging lands.
echo "else"
echo " %if %is_runtime"
echo " mkdir -p \$RPM_BUILD_ROOT$installPath"
@@ -430,10 +485,13 @@ package_openmp_extras_rpm() {
echo " %endif"
echo "fi"
# Copy openmp-extras files, bin will turn into llvm/bin
echo "if [ -f $BUILD_PATH/build/installed_files.txt ] && [ ! -d $INSTALL_PREFIX/openmp-extras/devel ]; then"
echo " %if %is_runtime"
echo " cat $BUILD_PATH/build/installed_files.txt | grep -P '\.so|\.a' | cut -d':' -f2 | cut -d' ' -f2 | xargs -I {} cp -d --parents {} \$RPM_BUILD_ROOT"
# libgomp and libiomp5 are not on the install_manifest.txt and need
# to be manually copied. Waiting on trunk patch to flow into amd-staging
# to ensure these symlinks are in the manifest.
echo " cp -d --parents "$installPath/lib/libgomp.so" \$RPM_BUILD_ROOT"
echo " cp -d --parents "$installPath/lib/libiomp5.so" \$RPM_BUILD_ROOT"
echo " cp -d --parents "$installPath/lib-debug/libgomp.so" \$RPM_BUILD_ROOT"
@@ -442,14 +500,17 @@ package_openmp_extras_rpm() {
echo "%if %is_devel"
echo " cat "$BUILD_PATH"/build/installed_files.txt | grep -Pv '\.so|\.a' | cut -d':' -f2 | cut -d' ' -f2 | xargs -I {} cp -d --parents {} \$RPM_BUILD_ROOT"
echo "%endif"
# FIXME: Old packaging method, can delete once new packaging lands.
echo "else"
echo " cp -r $AOMP/$packageType/* \$RPM_BUILD_ROOT$installPath"
# Devel does not have examples in the llvm dir
echo " %if %is_devel"
echo " rm -rf \$RPM_BUILD_ROOT$installPath/share"
echo " %endif"
echo "fi"
# Create symbolic links from /opt/rocm/bin to /opt/rocm/lib/llvm/bin utilities
#echo "ls \$RPM_BUILD_ROOT$installPath"
echo "%if %is_devel"
echo " if [ ! -h \$RPM_BUILD_ROOT$copyPath/bin/aompcc ] && [ -e \$RPM_BUILD_ROOT$installPath/bin/aompcc ]; then"
echo " ln -s ../lib/llvm/bin/aompcc \$RPM_BUILD_ROOT$copyPath/bin/aompcc"
@@ -462,18 +523,23 @@ package_openmp_extras_rpm() {
echo " fi"
echo " ls \$RPM_BUILD_ROOT$copyPath"
# Create symbolic links for openmp header files
echo " ln -s ../../../../include/omp.h \$RPM_BUILD_ROOT/$installPath/lib/clang/$llvm_ver/include/omp.h"
echo " ln -s ../../../../include/ompt.h \$RPM_BUILD_ROOT/$installPath/lib/clang/$llvm_ver/include/ompt.h"
echo " ln -s ../../../../include/omp-tools.h \$RPM_BUILD_ROOT/$installPath/lib/clang/$llvm_ver/include/omp-tools.h"
echo "%endif"
echo 'find $RPM_BUILD_ROOT \! -type d | sed "s|$RPM_BUILD_ROOT||"> files.list'
# Copy examples
echo "%if %is_runtime"
# Licensing
# Copy licenses into share/doc/openmp-extras
echo " mkdir -p \$RPM_BUILD_ROOT$copyPath/share/doc/openmp-extras"
echo " cp -r $AOMP_REPOS/aomp/LICENSE \$RPM_BUILD_ROOT$copyPath/share/doc/openmp-extras/LICENSE.apache2"
echo " cp -r $AOMP_REPOS/aomp-extras/LICENSE \$RPM_BUILD_ROOT$copyPath/share/doc/openmp-extras/LICENSE.mit"
echo " cp -r $AOMP_REPOS/flang/LICENSE.txt \$RPM_BUILD_ROOT$copyPath/share/doc/openmp-extras/LICENSE.flang"
echo "%else"
# Copy devel examples to share/openmp-extras/examples
echo " mkdir -p \$RPM_BUILD_ROOT$copyPath/share/openmp-extras/examples"
echo " cp -r $AOMP_REPOS/aomp/examples/fortran \$RPM_BUILD_ROOT$copyPath/share/openmp-extras/examples"
echo " cp -r $AOMP_REPOS/aomp/examples/openmp \$RPM_BUILD_ROOT$copyPath/share/openmp-extras/examples"
@@ -493,6 +559,12 @@ package_openmp_extras_rpm() {
echo " $copyPath/share/openmp-extras"
echo "%endif"
echo "%defattr(-,root,root,-)"
# Note: In some OS like SLES, during upgrade rocm-core is getting upgraded first and followed by other packages
# rocm-core cannot delete rocm-ver folder, since it contains files of other packages that are yet to be upgraded
# To remove rocm-ver folder after upgrade the spec file of other packages should contain the rocm-ver directory
# Otherwise after upgrade empty old rocm-ver folder will be left out.
# If empty remove /opt/rocm-ver folder and its subdirectories created by
# openmp-extras runtime and devel package
echo "%if %is_runtime || %is_devel"
echo " $copyPath"
echo "%endif"
@@ -502,15 +574,19 @@ package_openmp_extras_rpm() {
mv $packageRpm/RPMS/x86_64/*.rpm $RPM_PATH
}
# ASAN RPM packaging
package_openmp_extras_asan_rpm() {
# RPM packaging
local packageName=$1
local packageRpm="$packageDir/rpm"
local specFile="$packageDir/$packageName.spec"
local packageSummary="AddressSanitizer OpenMP Extras provides instrumented openmp and flang libraries."
local packageSummaryLong="openmp-extras $packageVersion is based on LLVM 17 and is used for offloading to Radeon GPUs."
local rpmRequires="hsa-rocr-asan, rocm-core-asan"
# After build,runtime folder will have ASAN libaries.
local asanLibDir="runtime"
# Cleanup previous packages
rm -rf "$packageDir"
rm -rf "$RPM_PATH"
mkdir -p "$RPM_PATH"
@@ -527,6 +603,7 @@ package_openmp_extras_asan_rpm() {
echo "License: MIT and ASL 2.0 and ASL 2.0 with exceptions"
echo "Vendor: Advanced Micro Devices, Inc."
echo "Requires: $rpmRequires"
# Redefining __os_install_post to prevent binary stripping
echo "%define __os_install_post %{nil}"
echo "%description"
echo "%undefine _debugsource_packages"
@@ -539,11 +616,16 @@ package_openmp_extras_asan_rpm() {
echo "%install"
echo "if [ -f $BUILD_PATH/build/installed_files.txt ] && [ ! -d "$INSTALL_PREFIX"/openmp-extras ]; then"
echo " cat $BUILD_PATH/build/installed_files.txt | grep -P 'asan' | cut -d':' -f2 | cut -d' ' -f2 | xargs -I {} cp -d --parents {} \$RPM_BUILD_ROOT"
# libgomp and libiomp5 are not on the install_manifest.txt and need
# to be manually copied. Waiting on trunk patch to flow into amd-staging
# to ensure these symlinks are in the manifest.
echo " cp -d --parents "$installPath/lib/asan/libgomp.so" \$RPM_BUILD_ROOT"
echo " cp -d --parents "$installPath/lib/asan/libiomp5.so" \$RPM_BUILD_ROOT"
echo " cp -d --parents "$installPath/lib-debug/asan/libgomp.so" \$RPM_BUILD_ROOT"
echo " cp -d --parents "$installPath/lib-debug/asan/libiomp5.so" \$RPM_BUILD_ROOT"
# FIXME: Old packaging method, can delete once new packaging lands.
echo "else"
# Copy openmp-extras ASAN libraries to ASAN folders
echo " mkdir -p \$RPM_BUILD_ROOT$installPath/lib/asan"
echo " mkdir -p \$RPM_BUILD_ROOT$installPath/lib-debug/asan"
echo " cp -r $AOMP/lib/asan/* \$RPM_BUILD_ROOT$installPath/lib/asan"
@@ -554,8 +636,11 @@ package_openmp_extras_asan_rpm() {
echo " cp -r $AOMP/devel/lib-debug/asan/* \$RPM_BUILD_ROOT$installPath/lib-debug/asan"
echo "fi"
# Create symbolic links from /opt/rocm/bin to /opt/rocm/lib/llvm/bin utilities
echo 'find $RPM_BUILD_ROOT \! -type d | sed "s|$RPM_BUILD_ROOT||"> files.list'
# Licensing
# Copy licenses into share/doc/openmp-extras
echo " mkdir -p \$RPM_BUILD_ROOT$copyPath/share/doc/openmp-extras-asan"
echo " cp -r $AOMP_REPOS/aomp/LICENSE \$RPM_BUILD_ROOT$copyPath/share/doc/openmp-extras-asan/LICENSE.apache2"
echo " cp -r $AOMP_REPOS/aomp-extras/LICENSE \$RPM_BUILD_ROOT$copyPath/share/doc/openmp-extras-asan/LICENSE.mit"
@@ -566,6 +651,12 @@ package_openmp_extras_asan_rpm() {
echo "%files -f files.list"
echo " $copyPath/share/doc/openmp-extras-asan"
echo "%defattr(-,root,root,-)"
# Note: In some OS like SLES, during upgrade rocm-core is getting upgraded first and followed by other packages
# rocm-core cannot delete rocm-ver folder, since it contains files of other packages that are yet to be upgraded
# To remove rocm-ver folder after upgrade the spec file of other packages should contain the rocm-ver directory
# Otherwise after upgrade empty old rocm-ver folder will be left out.
# If empty remove /opt/rocm-ver folder and its subdirectories created by
# openmp-extras runtime and devel package
echo " $copyPath"
} > $specFile
@@ -581,21 +672,29 @@ package_openmp_extras() {
local llvm_ver=`$INSTALL_PREFIX/lib/llvm/bin/clang --print-resource-dir | sed 's^/llvm/lib/clang/^ ^' | awk '{print $2}'`
local debNames="openmp-extras-runtime openmp-extras-dev"
local rpmNames="openmp-extras-runtime openmp-extras-devel"
ompdSrcDir="$INSTALL_PREFIX/lib/llvm/share/gdb/python/ompd/src"
if [ "$SANITIZER" == "1" ]; then
local asanPkgName="openmp-extras-asan"
if [[ $DISTRO_NAME =~ "Ubuntu" ]]; then
if [[ $DISTRO_NAME =~ "Ubuntu" ]] || [[ $DISTRO_NAME =~ "Debian" ]]; then
echo "Warning: Assuming DEBs"
package_openmp_extras_asan_deb $asanPkgName
else
echo "Warning: Assuming RPMs"
package_openmp_extras_asan_rpm $asanPkgName
fi
# For ASAN build, create only ASAN package
# Devel and runtime pkg should be created from non-asan build. So return the execution
return 0
fi
if [[ $DISTRO_NAME =~ "Ubuntu" ]]; then
# Only build deb in Ubuntu environment
if [[ $DISTRO_NAME =~ "Ubuntu" ]] || [[ $DISTRO_NAME =~ "Debian" ]]; then
echo "Warning: Assuming DEBs"
for name in $debNames; do
package_openmp_extras_deb $name
done
# Only build RPM in CENTOS/SLES environment
else
echo "Warning: Assuming RPMs"
for name in $rpmNames; do
package_openmp_extras_rpm $name
done
@@ -603,6 +702,7 @@ package_openmp_extras() {
}
package_tests_deb(){
# Openmp-extras debian test packaging
local packageDir="$BUILD_PATH/package"
local packageDeb="$packageDir/deb"
local packageArch="amd64"
@@ -615,6 +715,7 @@ package_tests_deb(){
local installPath="$ROCM_INSTALL_PATH/share/openmp-extras/tests"
local packageName="openmp-extras-tests"
# Cleanup previous packages
rm -rf "$packageDir"
mkdir -p $packageDeb/openmp-extras"$installPath"
@@ -622,9 +723,15 @@ package_tests_deb(){
rm $(dirname $controlFile)
fi
mkdir -p "$(dirname $controlFile)"
# Copy openmp-extras files
cp -r "$AOMP_REPOS/aomp/." "$packageDeb/openmp-extras/$installPath"
rm -rf "$packageDeb"/openmp-extras"$installPath"/.git "$packageDeb"/openmp-extras"$installPath"/.github
cp "$OUT_DIR/build/lightning/bin/FileCheck" "$packageDeb/openmp-extras/$installPath/bin"
# Copy FileCheck
if [ -f "$OUT_DIR"/build/lightning/bin/FileCheck ]; then
cp "$OUT_DIR/build/lightning/bin/FileCheck" "$packageDeb/openmp-extras/$installPath/bin"
fi
# Create control file
{
echo "Package: $packageName"
echo "Architecture: $packageArch"
@@ -642,16 +749,19 @@ package_tests_deb(){
}
package_tests_rpm(){
# RPM packaging
AOMP_STANDALONE_BUILD=1 $AOMP_REPOS/aomp/bin/build_fixups.sh
local copyPath="$ROCM_INSTALL_PATH"
local packageDir="$BUILD_PATH/package"
local packageRpm="$packageDir/rpm"
local installPath="$ROCM_INSTALL_PATH/share/openmp-extras/tests"
local packageName="openmp-extras-tests"
local rpmRequires="openmp-extras-devel, rocm-core"
local specFile="$packageDir/$packageName.spec"
local packageSummary="Tests for openmp-extras."
local packageSummaryLong="Tests for openmp-extras $packageVersion is based on LLVM 18 and is used for offloading to Radeon GPUs."
# Cleanup previous packages
rm -rf "$packageDir"
mkdir -p "$packageRpm/openmp-extras/$installPath"
{
@@ -679,7 +789,9 @@ package_tests_rpm(){
echo "mkdir -p \$RPM_BUILD_ROOT$installPath"
echo "cp -R $AOMP_REPOS/aomp/. \$RPM_BUILD_ROOT$installPath"
echo "rm -rf \$RPM_BUILD_ROOT$installPath/.git \$RPM_BUILD_ROOT$installPath/.github"
echo "cp $OUT_DIR/build/lightning/bin/FileCheck \$RPM_BUILD_ROOT$installPath/bin"
echo "if [ -f $OUT_DIR/build/lightning/bin/FileCheck ]; then"
echo " cp $OUT_DIR/build/lightning/bin/FileCheck \$RPM_BUILD_ROOT$installPath/bin"
echo "fi"
echo 'find $RPM_BUILD_ROOT \! -type d | sed "s|$RPM_BUILD_ROOT||"> files.list'
echo "%clean"
@@ -698,8 +810,10 @@ package_tests_rpm(){
package_tests() {
local DISTRO_NAME=$(cat /etc/os-release | grep -e ^NAME=)
# Only build deb in Ubuntu environment
if [[ $DISTRO_NAME =~ "Ubuntu" ]]; then
package_tests_deb
# Only build RPM in CENTOS/SLES environment
else
package_tests_rpm
fi
@@ -718,10 +832,21 @@ print_output_directory() {
}
case $TARGET in
(clean) clean_openmp_extras ;;
(build) build_openmp_extras; package_openmp_extras; package_tests ;;
(outdir) print_output_directory ;;
(*) die "Invalid target $TARGET" ;;
(clean)
clean_openmp_extras
;;
(build)
build_openmp_extras
package_openmp_extras
package_tests
build_wheel "$BUILD_PATH" "$PROJ_NAME"
;;
(outdir)
print_output_directory
;;
(*)
die "Invalid target $TARGET"
;;
esac
echo "Operation complete"

View File

@@ -1,12 +1,10 @@
#!/bin/bash
set -ex
source "$(dirname "${BASH_SOURCE[0]}")/compute_helper.sh"
source "$(dirname "${BASH_SOURCE[0]}")/compute_utils.sh"
set_component_src rccl
ENABLE_ADDRESS_SANITIZER=false
build_rccl() {
echo "Start build"
@@ -24,19 +22,12 @@ build_rccl() {
mkdir -p $BUILD_DIR && cd $BUILD_DIR
if [ -n "$GPU_ARCHS" ]; then
GPU_TARGETS="$GPU_ARCHS"
else
GPU_TARGETS="gfx908:xnack-;gfx90a:xnack-;gfx90a:xnack+;gfx940;gfx941;gfx942;gfx1030;gfx1100;gfx1101;gfx1102;gfx1200;gfx1201"
fi
init_rocm_common_cmake_params
CC=${ROCM_PATH}/bin/amdclang \
CXX=$(set_build_variables CXX) \
CXX=$(set_build_variables __CXX__) \
cmake \
"${rocm_math_common_cmake_params[@]}" \
-DAMDGPU_TARGETS=${GPU_TARGETS} \
-DHIP_COMPILER=clang \
-DCMAKE_PREFIX_PATH="${ROCM_PATH};${ROCM_PATH}/share/rocm/cmake/" \
${LAUNCHER_FLAGS} \
@@ -50,7 +41,7 @@ build_rccl() {
cmake --build "$BUILD_DIR" -- package
rm -rf _CPack_Packages/ && find -name '*.o' -delete
mkdir -p $PACKAGE_DIR && cp ${BUILD_DIR}/*.${PKGTYPE} $PACKAGE_DIR
copy_if "${PKGTYPE}" "${CPACKGEN:-"DEB;RPM"}" "${PACKAGE_DIR}" "${BUILD_DIR}"/*."${PKGTYPE}"
show_build_cache_stats
}
@@ -64,7 +55,7 @@ clean_rccl() {
stage2_command_args "$@"
case $TARGET in
build) build_rccl ;;
build) build_rccl; build_wheel ;;
outdir) print_output_directory ;;
clean) clean_rccl ;;
*) die "Invalid target $TARGET" ;;

View File

@@ -1,121 +1,45 @@
#!/bin/bash
source "$(dirname "$BASH_SOURCE")/compute_utils.sh"
set -ex
printUsage() {
echo
echo "Usage: $(basename $0) [-c|-r|-h] [makeopts]"
echo
echo "Options:"
echo " -c, --clean Removes all rdc build artifacts, except grpc"
echo " -g, --clean_grpc Removes the grpc files and artifacts"
echo " -r, --release Build release version of RDC (default is debug)"
echo " -a, --address_sanitizer Enable address sanitizer"
echo " -o, --outdir <pkg_type> Print path of output directory containing packages of
type referred to by pkg_type"
echo " -s, --static Component/Build does not support static builds just accepting this param & ignore. No effect of the param on this build"
echo " -h, --help Prints this help"
echo
return 0
}
### Set up RPATH for RDC to simplify finding RDC libraries. Please note that
### ROCm has a setup_env.sh script which already populates these variables.
### These variables are then used inside compute_utils.sh.
###
### We need to append additional paths to these variables BEFORE sourcing
### compute_utils.sh
PACKAGE_ROOT="$(getPackageRoot)"
RDC_BUILD_DIR=$(getBuildPath rdc)
GRPC_BUILD_DIR=$(getBuildPath grpc)
TARGET="build"
PACKAGE_LIB=$(getLibPath)
PACKAGE_INCLUDE="$(getIncludePath)"
PACKAGE_BIN="$(getBinPath)"
RDC_PACKAGE_DEB_DIR="$PACKAGE_ROOT/deb/rdc"
RDC_PACKAGE_RPM_DIR="$PACKAGE_ROOT/rpm/rdc"
BUILD_TYPE="Debug"
MAKETARGET="deb"
MAKEARG="$DASH_JAY O=$RDC_BUILD_DIR"
SHARED_LIBS="ON"
CLEAN_OR_OUT=0;
CLEAN_GRPC="no"
PKGTYPE="deb"
RDC_MAKE_OPTS="$DASH_JAY O=$RDC_BUILD_DIR -C $RDC_BUILD_DIR"
BUILD_DOCS="no"
RDC_PKG_NAME_ROOT="rdc"
RDC_PKG_NAME="${RDC_PKG_NAME_ROOT}"
GRPC_PROTOC_ROOT="${RDC_BUILD_DIR}/grpc"
GRPC_SEARCH_ROOT="/usr/grpc"
GRPC_DESIRED_VERSION="1.61.0"
RDC_LIB_RPATH='$ORIGIN'
RDC_LIB_RPATH=$RDC_LIB_RPATH:'$ORIGIN/..'
RDC_LIB_RPATH=$RDC_LIB_RPATH:'$ORIGIN/rdc/grpc/lib'
RDC_LIB_RPATH=$RDC_LIB_RPATH:'$ORIGIN/grpc/lib'
RDC_EXE_RPATH='$ORIGIN/../lib'
RDC_EXE_RPATH=$RDC_EXE_RPATH:'$ORIGIN/../lib/rdc/grpc/lib'
VALID_STR=`getopt -o hcgradso:p: --long help,clean,clean_grpc,release,documentation,static,address_sanitizer,outdir:,package: -- "$@"`
eval set -- "$VALID_STR"
while true ;
do
case "$1" in
(-h | --help)
printUsage ; exit 0;;
(-c | --clean)
TARGET="clean" ; ((CLEAN_OR_OUT|=1)) ; shift ;;
(-g | --clean_grpc)
TARGET="clean_grpc" ; shift ;;
(-r | --release)
BUILD_TYPE="Release" ; shift ;;
(-a | --address_sanitizer)
set_asan_env_vars
set_address_sanitizer_on ; shift ;;
(-d | --documentation )
BUILD_DOCS="yes" ;;
(-s | --static)
ack_and_skip_static ;;
(-o | --outdir)
TARGET="outdir"; PKGTYPE=$2 ; OUT_DIR_SPECIFIED=1 ; ((CLEAN_OR_OUT|=2)) ; shift 2 ;;
(-p | --package)
MAKETARGET="$2" ; shift 2;;
--) shift; break;;
(*)
echo " This should never come but just incase : UNEXPECTED ERROR Parm : [$1] ">&2 ; exit 20;;
esac
done
RET_CONFLICT=1
check_conflicting_options $CLEAN_OR_OUT $PKGTYPE $MAKETARGET
if [ $RET_CONFLICT -ge 30 ]; then
print_vars $API_NAME $TARGET $BUILD_TYPE $SHARED_LIBS $CLEAN_OR_OUT $PKGTYPE $MAKETARGET
exit $RET_CONFLICT
# lib/rdc/librdc_rocp.so needs lib/librdc_bootstrap.so
# this also covers the ASAN usecase
ROCM_LIB_RPATH=$ROCM_LIB_RPATH:'$ORIGIN/..'
# grpc
ROCM_LIB_RPATH=$ROCM_LIB_RPATH:'$ORIGIN/rdc/grpc/lib'
ROCM_LIB_RPATH=$ROCM_LIB_RPATH:'$ORIGIN/grpc/lib'
# help RDC executables find RDC libraries
# lib/librdc_bootstrap.so.0 and grpc
ROCM_EXE_RPATH=$ROCM_EXE_RPATH:'$ORIGIN/../lib/rdc/grpc/lib'
if [ "${ENABLE_ADDRESS_SANITIZER}" == "true" ]; then
ROCM_EXE_RPATH="$ROCM_ASAN_EXE_RPATH:$ROCM_EXE_RPATH"
fi
source "$(dirname "${BASH_SOURCE[0]}")/compute_utils.sh"
clean_rdc() {
rm -rf "$RDC_BUILD_DIR"
rm -rf "$RDC_PACKAGE_DEB_DIR"
rm -rf "$RDC_PACKAGE_RPM_DIR"
rm -rf "$RDC_BUILD_DIR/rdc"
set_component_src rdc
rm -rf "$PACKAGE_INCLUDE/rdc"
rm -f $PACKAGE_LIB/librdc*
rm -f $PACKAGE_BIN/rdci
return 0
}
clean_grpc() {
rm -rf "$GRPC_BUILD_DIR"
}
# RDC
# BUILD ARGUMENTS
BUILD_DOCS="no"
GRPC_PROTOC_ROOT="${BUILD_DIR}/grpc"
GRPC_SEARCH_ROOT="/usr/grpc"
GRPC_DESIRED_VERSION="1.67.1" # do not include 'v'
# lib/librocm_smi64.so and lib/libamd_smi.so
# check if exact version of gRPC is installed
find_grpc() {
grep -s -F "$GRPC_DESIRED_VERSION" ${GRPC_SEARCH_ROOT}/*/cmake/grpc/gRPCConfigVersion.cmake &&
GRPC_PROTOC_ROOT=$GRPC_SEARCH_ROOT
}
rdc_backwards_compat_cmake_params() {
grep -q "RDC_CLIENT_INSTALL_PREFIX" "$RDC_ROOT/CMakeLists.txt" &&
echo "-DRDC_CLIENT_INSTALL_PREFIX=$PACKAGE_ROOT"
}
build_rdc() {
if ! find_grpc; then
echo "ERROR: GRPC SEARCH FAILED!"
@@ -125,81 +49,96 @@ build_rdc() {
fi
echo "gRPC [${GRPC_DESIRED_VERSION}] found!"
if [ "${ENABLE_STATIC_BUILDS}" == "true" ]; then
ack_and_skip_static
fi
CXX=$(set_build_variables __C_++__)
if [ "${ENABLE_ADDRESS_SANITIZER}" == "true" ]; then
set_asan_env_vars
set_address_sanitizer_on
# NOTE: Temp fix for ASAN failures SWDEV-515858
export ASAN_OPTIONS="detect_leaks=0:new_delete_type_mismatch=0"
fi
echo "Building RDC"
echo "RDC_BUILD_DIR: ${RDC_BUILD_DIR}"
echo "GRPC_PROTOC_ROOT: ${GRPC_PROTOC_ROOT}"
export LD_PRELOAD="$ASAN_LIB_PATH"
if [ "${ENABLE_ADDRESS_SANITIZER}" == "true" ]; then
# NOTE: Temp workaround for libasan not being first in the library list.
# libasan not being first causes ADDRESS_SANITIZER builds to fail.
# This value is set by set_asan_env_vars. Which is only called when -a arg is passed.
export LD_PRELOAD="$ASAN_LIB_PATH"
fi
if [ ! -d "$RDC_BUILD_DIR/rdc_libs" ]; then
mkdir -p $RDC_BUILD_DIR
pushd $RDC_BUILD_DIR
echo "C compiler: $CC"
echo "CXX compiler: $CXX"
init_rocm_common_cmake_params
if [ ! -d "$BUILD_DIR/rdc_libs" ]; then
mkdir -p "$BUILD_DIR"
pushd "$BUILD_DIR"
cmake \
-DGRPC_ROOT="$GRPC_PROTOC_ROOT" \
-DGRPC_DESIRED_VERSION="$GRPC_DESIRED_VERSION" \
-DCMAKE_MODULE_PATH="$RDC_ROOT/cmake_modules" \
$(rocm_cmake_params) \
$(rdc_backwards_compat_cmake_params) \
$(rocm_common_cmake_params) \
-DROCM_DIR=$ROCM_INSTALL_PATH \
-DRDC_PACKAGE="${RDC_PKG_NAME}" \
-DCMAKE_MODULE_PATH="$COMPONENT_SRC/cmake_modules" \
"${rocm_math_common_cmake_params[@]}" \
-DCPACK_GENERATOR="${PKGTYPE^^}" \
-DROCM_DIR=$ROCM_PATH \
-DCPACK_PACKAGE_VERSION_MAJOR="1" \
-DCPACK_PACKAGE_VERSION_MINOR="$ROCM_LIBPATCH_VERSION" \
-DCPACK_PACKAGE_VERSION_PATCH="0" \
-DADDRESS_SANITIZER="$ADDRESS_SANITIZER" \
-DBUILD_TESTS=ON \
-DBUILD_PROFILER=ON \
-DBUILD_RVS=ON \
-DCMAKE_SKIP_BUILD_RPATH=TRUE \
-DCMAKE_EXE_LINKER_FLAGS_INIT="-Wl,--no-as-needed,-z,origin,--enable-new-dtags,--build-id=sha1,--rpath,$RDC_EXE_RPATH" \
-DCMAKE_SHARED_LINKER_FLAGS_INIT="-Wl,--no-as-needed,-z,origin,--enable-new-dtags,--build-id=sha1,--rpath,$RDC_LIB_RPATH" \
"$RDC_ROOT"
"$COMPONENT_SRC"
popd
fi
echo "Making rdc package:"
cmake --build "$RDC_BUILD_DIR" -- $RDC_MAKE_OPTS
cmake --build "$RDC_BUILD_DIR" -- $RDC_MAKE_OPTS install
cmake --build "$BUILD_DIR" -- -j${PROC}
cmake --build "$BUILD_DIR" -- install
unset LD_PRELOAD
cmake --build "$RDC_BUILD_DIR" -- $RDC_MAKE_OPTS package
copy_if DEB "${CPACKGEN:-"DEB;RPM"}" "$RDC_PACKAGE_DEB_DIR" "$RDC_BUILD_DIR/$RDC_PKG_NAME"*.deb
copy_if RPM "${CPACKGEN:-"DEB;RPM"}" "$RDC_PACKAGE_RPM_DIR" "$RDC_BUILD_DIR/$RDC_PKG_NAME"*.rpm
if [ ! -e $ROCM_INSTALL_PATH/include/rdc/rdc.h ]; then
cp -r "$ROCM_INSTALL_PATH/rdc/lib/." "$PACKAGE_LIB"
cp -r "$ROCM_INSTALL_PATH/rdc/bin/." "$PACKAGE_BIN"
cp -r "$ROCM_INSTALL_PATH/rdc/include/." "$PACKAGE_INCLUDE"
if [ "${ENABLE_ADDRESS_SANITIZER}" == "true" ]; then
# NOTE: Must disable LD_PRELOAD hack before packaging!
# cmake fails with cryptic error on RHEL:
#
# AddressSanitizer:DEADLYSIGNAL
# ==17083==ERROR: AddressSanitizer: stack-overflow on address ...
#
# The issue is likely in python3.6 cpack scripts
unset LD_PRELOAD
fi
cmake --build "$BUILD_DIR" -- package
copy_if "${PKGTYPE}" "${CPACKGEN:-"DEB;RPM"}" "${PACKAGE_DIR}" "${BUILD_DIR}"/*."${PKGTYPE}"
if [ "$BUILD_DOCS" = "yes" ]; then
echo "Building Docs"
cmake --build "$RDC_BUILD_DIR" -- $RDC_MAKE_OPTS doc
pushd $RDC_BUILD_DIR/latex
cmake --build "$BUILD_DIR" -- doc
pushd "$BUILD_DIR"/latex
cmake --build . --
mv refman.pdf "$ROCM_INSTALL_PATH/rdc/RDC_Manual.pdf"
mv refman.pdf "$ROCM_PATH/rdc/RDC_Manual.pdf"
popd
fi
}
print_output_directory() {
case ${PKGTYPE} in
("deb")
echo ${RDC_PACKAGE_DEB_DIR};;
("rpm")
echo ${RDC_PACKAGE_RPM_DIR};;
(*)
echo "Invalid package type \"${PKGTYPE}\" provided for -o" >&2; exit 1;;
esac
exit
clean_rdc() {
echo "Cleaning RDC build directory: ${BUILD_DIR} ${PACKAGE_DIR}"
rm -rf "$BUILD_DIR" "$PACKAGE_DIR"
return 0
}
verifyEnvSetup
stage2_command_args "$@"
disable_debug_package_generation
case $TARGET in
(clean) clean_rdc ;;
(clean_grpc) clean_grpc ;;
(build) build_rdc ;;
(outdir) print_output_directory ;;
(*) die "Invalid target $TARGET" ;;
clean) clean_rdc ;;
build) build_rdc ;;
outdir) print_output_directory ;;
*) die "Invalid target $TARGET" ;;
esac
echo "Operation complete"

View File

@@ -1,35 +1,49 @@
#!/bin/bash
set -ex
source "$(dirname "${BASH_SOURCE[0]}")/compute_helper.sh"
source "$(dirname "${BASH_SOURCE[0]}")/compute_utils.sh"
set_component_src rocAL
build_rocal() {
echo "Start build"
# Enable ASAN
if [ "${ENABLE_ADDRESS_SANITIZER}" == "true" ]; then
set_asan_env_vars
set_address_sanitizer_on
if [ "$DISTRO_ID" = "mariner-2.0" ] || [ "$DISTRO_ID" = "azurelinux-3.0" ] ; then
echo "Not building rocal for ${DISTRO_ID}. Exiting..."
return 0
fi
# python3 ${COMPONENT_SRC}/rocAL-setup.py
echo "Start build"
if [ "${ENABLE_STATIC_BUILDS}" == "true" ]; then
ack_and_skip_static
fi
# Enable ASAN
# Temporarily disable ASAN for rocal - SWDEV-471302
#if [ "${ENABLE_ADDRESS_SANITIZER}" == "true" ]; then
# set_asan_env_vars
# set_address_sanitizer_on
#fi
pushd /tmp
# PyBind11
rm -rf pybind11
git clone -b v2.11.1 https://github.com/pybind/pybind11
cd pybind11 && mkdir build && cd build
cmake -DDOWNLOAD_CATCH=ON -DDOWNLOAD_EIGEN=ON ../
make -j$(nproc) && sudo make install
cd ../..
# Turbo JPEG
rm -rf libjpeg-turbo
git clone -b 3.0.2 https://github.com/libjpeg-turbo/libjpeg-turbo.git
cd libjpeg-turbo && mkdir build && cd build
cmake -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=RELEASE -DENABLE_STATIC=FALSE -DCMAKE_INSTALL_DEFAULT_LIBDIR=lib -DWITH_JPEG8=TRUE ..
make -j$(nproc) && sudo make install
cd ../..
# RapidJSON
rm -rf rapidjson
git clone https://github.com/Tencent/rapidjson.git
cd rapidjson && mkdir build && cd build
cmake .. && make -j$(nproc) && sudo make install
@@ -37,16 +51,19 @@ build_rocal() {
mkdir -p $BUILD_DIR && cd $BUILD_DIR
cmake -DAMDRPP_PATH=$ROCM_PATH ${COMPONENT_SRC}
make -j${PROC}
# python3 ../rocAL-setup.py
if [[ "${DISTRO_ID}" == almalinux-8* ]]; then
cmake -DPYTHON_VERSION_SUGGESTED=3.8 -DAMDRPP_PATH=$ROCM_PATH ${COMPONENT_SRC}
else
cmake -DAMDRPP_PATH=$ROCM_PATH ${COMPONENT_SRC}
fi
make -j8
cmake --build . --target PyPackageInstall
sudo make install
sudo make package
sudo chown -R $(id -u):$(id -g) ${BUILD_DIR}
make package
rm -rf _CPack_Packages/ && find -name '*.o' -delete
mkdir -p $PACKAGE_DIR
cp ${BUILD_DIR}/*.${PKGTYPE} $PACKAGE_DIR
copy_if "${PKGTYPE}" "${CPACKGEN:-"DEB;RPM"}" "${PACKAGE_DIR}" "${BUILD_DIR}"/*."${PKGTYPE}"
show_build_cache_stats
}
@@ -59,7 +76,7 @@ clean_rocal() {
stage2_command_args "$@"
case $TARGET in
build) build_rocal ;;
build) build_rocal; build_wheel ;;
outdir) print_output_directory ;;
clean) clean_rocal ;;
*) die "Invalid target $TARGET" ;;

View File

@@ -2,7 +2,7 @@
set -ex
source "$(dirname "${BASH_SOURCE[0]}")/compute_helper.sh"
source "$(dirname "${BASH_SOURCE[0]}")/compute_utils.sh"
PATH=${ROCM_PATH}/bin:$PATH
set_component_src rocALUTION
@@ -16,7 +16,7 @@ build_rocalution() {
cd $COMPONENT_SRC
CXX="g++"
CXX=$(set_build_variables __G_++__)
if [ "${ENABLE_ADDRESS_SANITIZER}" == "true" ]; then
set_asan_env_vars
set_address_sanitizer_on
@@ -28,17 +28,10 @@ build_rocalution() {
mkdir -p "$BUILD_DIR" && cd "$BUILD_DIR"
init_rocm_common_cmake_params
if [ -n "$GPU_ARCHS" ]; then
GPU_TARGETS="$GPU_ARCHS"
else
GPU_TARGETS="gfx908:xnack-;gfx90a:xnack-;gfx90a:xnack+;gfx940;gfx941;gfx942;gfx1030;gfx1100;gfx1101;gfx1102;gfx1200;gfx1201"
fi
cmake \
-DSUPPORT_HIP=ON \
${LAUNCHER_FLAGS} \
"${rocm_math_common_cmake_params[@]}" \
-DAMDGPU_TARGETS=${GPU_TARGETS} \
-DBUILD_CLIENTS_SAMPLES=ON \
-DBUILD_CLIENTS_TESTS=ON \
-DBUILD_CLIENTS_BENCHMARKS=ON \
@@ -51,7 +44,7 @@ build_rocalution() {
cmake --build "$BUILD_DIR" -- package
rm -rf _CPack_Packages/ && find -name '*.o' -delete
mkdir -p $PACKAGE_DIR && cp ${BUILD_DIR}/*.${PKGTYPE} $PACKAGE_DIR
copy_if "${PKGTYPE}" "${CPACKGEN:-"DEB;RPM"}" "${PACKAGE_DIR}" "${BUILD_DIR}"/*."${PKGTYPE}"
show_build_cache_stats
}
@@ -65,7 +58,7 @@ clean_rocalution() {
stage2_command_args "$@"
case $TARGET in
build) build_rocalution ;;
build) build_rocalution; build_wheel ;;
outdir) print_output_directory ;;
clean) clean_rocalution ;;
*) die "Invalid target $TARGET" ;;

View File

@@ -2,12 +2,13 @@
set -ex
source "$(dirname "${BASH_SOURCE[0]}")/compute_helper.sh"
source "$(dirname "${BASH_SOURCE[0]}")/compute_utils.sh"
set_component_src rocBLAS
DEPS_DIR=${HOME}/rocblas
stage2_command_args "$@"
disable_debug_package_generation
build_rocblas() {
echo "Start build"
@@ -17,28 +18,37 @@ build_rocblas() {
SHARED_LIBS="OFF"
fi
#Removed GPU ARCHS from here as it will be part of compute_utils.sh ROCMOPS-7302 & ROCMOPS-8091
# Temporary workaround for rocBLAS to build with ASAN as suggested in #SWDEV-314505
if [ "${ENABLE_ADDRESS_SANITIZER}" == "true" ]; then
set_asan_env_vars
set_address_sanitizer_on
export ASAN_OPTIONS="detect_leaks=0:verify_asan_link_order=0"
set_asan_env_vars
set_address_sanitizer_on
export ASAN_OPTIONS="detect_leaks=0:verify_asan_link_order=0"
# updating GPU_ARCHS for ASAN build to supported gpu arch only SWDEV-479178
#GPU_ARCHS="gfx90a:xnack+;gfx942:xnack+" #This will be part of compute_utils.sh ROCMOPS-7302 & ROCMOPS-8091
fi
LAZY_LOADING=ON
SEPARATE_ARCHES=ON
cd $COMPONENT_SRC
CXX=$(set_build_variables __AMD_CLANG_++__)
mkdir -p $DEPS_DIR && cp -r /usr/blis $DEPS_DIR
mkdir -p "$BUILD_DIR" && cd "$BUILD_DIR"
if [ -n "$GPU_ARCHS" ]; then
GPU_TARGETS="$GPU_ARCHS"
else
GPU_TARGETS="gfx900;gfx906:xnack-;gfx908:xnack-;gfx90a:xnack+;gfx90a:xnack-;gfx940;gfx941;gfx942;gfx1030;gfx1100;gfx1101;gfx1102;gfx1200;gfx1201"
# if ENABLE_GPU_ARCH is set in env by Job parameter ENABLE_GPU_ARCH, then set GFX_ARCH to that value. This will override any of the case values above
if [ -n "$ENABLE_GPU_ARCH" ]; then
#setting gfx arch as part of rocm_common_cmake_params
set_gpu_arch "${ENABLE_GPU_ARCH}"
fi
init_rocm_common_cmake_params
echo "C compiler: $CC"
echo "CXX compiler: $CXX"
init_rocm_common_cmake_params
cmake \
-DCMAKE_TOOLCHAIN_FILE=toolchain-linux.cmake \
-DBUILD_DIR="${BUILD_DIR}" \
"${rocm_math_common_cmake_params[@]}" \
"${rocm_math_common_cmake_params[@]}" \
-DROCM_DIR="${ROCM_PATH}" \
${LAUNCHER_FLAGS} \
-DBUILD_SHARED_LIBS=$SHARED_LIBS \
@@ -47,11 +57,10 @@ build_rocblas() {
-DBUILD_CLIENTS_BENCHMARKS=ON \
-DBUILD_CLIENTS_SAMPLES=ON \
-DLINK_BLIS=ON \
-DAMDGPU_TARGETS="${GPU_TARGETS}" \
-DTensile_CODE_OBJECT_VERSION=default \
-DTensile_LOGIC=asm_full \
-DTensile_SEPARATE_ARCHITECTURES=ON \
-DTensile_LAZY_LIBRARY_LOADING=ON \
-DTensile_SEPARATE_ARCHITECTURES="${SEPARATE_ARCHES}" \
-DTensile_LAZY_LIBRARY_LOADING="${LAZY_LOADING}" \
-DTensile_LIBRARY_FORMAT=msgpack \
-DBUILD_ADDRESS_SANITIZER="${ADDRESS_SANITIZER}" \
-DTENSILE_VENV_UPGRADE_PIP=ON \
@@ -63,7 +72,7 @@ build_rocblas() {
rm -rf _CPack_Packages/ && rm -rf ./library/src/build_tmp && find -name '*.o' -delete
mkdir -p $PACKAGE_DIR && cp ${BUILD_DIR}/*.${PKGTYPE} $PACKAGE_DIR
copy_if "${PKGTYPE}" "${CPACKGEN:-"DEB;RPM"}" "${PACKAGE_DIR}" "${BUILD_DIR}"/*."${PKGTYPE}"
show_build_cache_stats
}
@@ -75,7 +84,7 @@ clean_rocblas() {
}
case $TARGET in
build) build_rocblas ;;
build) build_rocblas; build_wheel ;;
outdir) print_output_directory ;;
clean) clean_rocblas ;;
*) die "Invalid target $TARGET" ;;

140
tools/rocm-build/build_rocclr.sh Executable file
View File

@@ -0,0 +1,140 @@
#!/bin/bash
source "$(dirname "${BASH_SOURCE}")/compute_utils.sh"
#// Currently, roccler does not supports .so but, this change makes this script future
# ready & We shall not have to change anything at that time. Also its not doing deviating
# from the current functionalities currently as well
printUsage() {
echo
echo "Usage: $(basename "${BASH_SOURCE}") [options ...] [make options]"
echo
echo "Options:"
echo " -h, --help Prints this help"
echo " -c, --clean Clean output and delete all intermediate work"
echo " -r, --release Make a release build instead of a debug build"
echo " -a, --address_sanitizer Enable address sanitizer"
echo " -s, --static Build static lib (.a). build instead of dynamic/shared(.so) "
echo " -o, --outdir <pkg_type> Print path of output directory containing packages of type referred to by pkg_type"
echo
echo "Possible values for <type>:"
echo " deb -> Debian format (default)"
echo " rpm -> RPM format"
echo
return 0
}
MAKEOPTS="$DASH_JAY"
BUILD_PATH="$(getBuildPath rocclr)"
TARGET="build"
PACKAGE_ROOT="$(getPackageRoot)"
PACKAGE_DEB="$(getPackageRoot)/deb/rocclr"
PACKAGE_RPM="$(getPackageRoot)/rpm/rocclr"
CORE_BUILD_DIR="$(getBuildPath hsa-core)"
BUILD_TYPE="Debug"
SHARED_LIBS="ON"
CLEAN_OR_OUT=0;
MAKETARGET="deb"
PKGTYPE="deb"
#parse the arguments
VALID_STR=`getopt -o hcraso: --long help,clean,release,static,address_sanitizer,outdir: -- "$@"`
eval set -- "$VALID_STR"
while true ;
do
case "$1" in
(-h | --help)
printUsage ; exit 0;;
(-c | --clean)
TARGET="clean" ; ((CLEAN_OR_OUT|=1)) ; shift ;;
(-r | --release)
BUILD_TYPE="Release" ; shift ;;
(-a | --address_sanitizer)
set_asan_env_vars
set_address_sanitizer_on ; shift ;;
(-s | --static)
SHARED_LIBS="OFF" ; shift ;;
(-o | --outdir)
TARGET="outdir"; PKGTYPE=$2 ; OUT_DIR_SPECIFIED=1 ; ((CLEAN_OR_OUT|=2)) ; shift 2 ;;
--) shift; break;; # end delimiter
(*)
echo " This should never come but just incase : UNEXPECTED ERROR Parm : [$1] ">&2 ; exit 20;;
esac
done
RET_CONFLICT=1
check_conflicting_options $CLEAN_OR_OUT $PKGTYPE $MAKETARGET
if [ $RET_CONFLICT -ge 30 ]; then
print_vars $API_NAME $TARGET $BUILD_TYPE $SHARED_LIBS $CLEAN_OR_OUT $PKGTYPE $MAKETARGET
exit $RET_CONFLICT
fi
clean_rocclr() {
# Delete cmake output directory
rm -rf "$BUILD_PATH"
rm -rf "$PACKAGE_DEB"
rm -rf "$PACKAGE_RPM"
}
build_rocclr() {
# rocclr is now a part of clr repo.
# also it does not need to be built independently when build shared libs.
# might be needed when building static libs. so leave it place for static libs.
if [ "$SHARED_LIBS" = "ON" ]; then
echo "rocclr not a standalone repo. skipping build" >&2
echo "rocclr not a standalone repo. skipping build"
exit 0 # This is not an error
fi
if [ ! -e "$CLR_ROOT/CMakeLists.txt" ]; then
# We are in a branch that has migrated to clr repo
_ROCclr_CMAKELIST_DIR="$CLR_ROOT"
elif [ ! -e "$ROCclr_ROOT/CMakeLists.txt" ]; then
# We seem to have hit a branch in which both the old and new repo don't exist
echo "No $ROCclr_ROOT/CMakeLists.txt file, skipping rocclr" >&2
echo "No $ROCclr_ROOT/CMakeLists.txt file, skipping rocclr"
exit 0 # This is not an error
else
# We are in a branch that has not yet migrated to clr repo
_ROCclr_CMAKELIST_DIR="$ROCclr_ROOT"
fi
echo "$_ROCclr_CMAKELIST_DIR"
mkdir -p "$BUILD_PATH"
pushd "$BUILD_PATH"
print_lib_type $SHARED_LIBS
if [ ! -e Makefile ]; then
echo "Building ROCclr CMake environment"
cmake -DUSE_COMGR_LIBRARY=ON \
$(rocm_cmake_params) \
-DBUILD_SHARED_LIBS=$SHARED_LIBS \
-DLLVM_INCLUDES="$LLVM_ROOT/include" \
$(rocm_common_cmake_params) \
"$_ROCclr_CMAKELIST_DIR"
echo "CMake complete"
fi
echo "Building ROCclr"
cmake --build . -- $MAKEOPTS "VERBOSE=1"
popd
}
# When use -o option, the code should directly exit.
# The rest part of the code will not execute.
# Otherwise, it will cause an error of the caller code.
case $TARGET in
(clean) clean_rocclr ;;
(build) build_rocclr ;;
(outdir) exit ;;
(*) die "Invalid target $TARGET" ;;
esac
echo "Operation complete"

View File

@@ -1,9 +1,17 @@
#!/bin/bash
set -ex
source "$(dirname "${BASH_SOURCE[0]}")/compute_helper.sh"
source "$(dirname "${BASH_SOURCE[0]}")/compute_utils.sh"
set_component_src rocDecode
BUILD_DEV=ON
build_rocdecode() {
if [ "$DISTRO_ID" = "centos-7" ] || \
[ "$DISTRO_ID" = "mariner-2.0" ] || \
[ "$DISTRO_ID" = "azurelinux-3.0" ] || \
[ "$DISTRO_ID" = "debian-10" ]; then
echo "Not building rocDecode for ${DISTRO_ID}. Exiting..."
return 0
fi
echo "Start build"
if [ "${ENABLE_STATIC_BUILDS}" == "true" ]; then
@@ -11,18 +19,27 @@ build_rocdecode() {
fi
mkdir -p $BUILD_DIR && cd $BUILD_DIR
# python3 ${COMPONENT_SRC}/rocDecode-setup.py --developer OFF
cmake -DROCM_DEP_ROCMCORE=ON ${COMPONENT_SRC}
make -j8
make install
make package
# for i in {1..5}; do
# python3 ../rocDecode-setup.py --developer OFF && break || {
# echo "Attempt $i failed! Retrying in $((i * 30)) seconds..."
# sleep $((i * 30))
# }
# done
# python3 ${COMPONENT_SRC}/rocDecode-setup.py --developer OFF
init_rocm_common_cmake_params
cmake \
"${rocm_math_common_cmake_params[@]}" \
-DROCM_DEP_ROCMCORE=ON \
-DROCDECODE_ENABLE_ROCPROFILER_REGISTER=ON \
"${COMPONENT_SRC}"
cmake --build "$BUILD_DIR" -- -j${PROC}
cpack -G ${PKGTYPE^^} -B ${BUILD_DIR}
cmake --build "$BUILD_DIR" -- install
cmake --build "$BUILD_DIR" -- package
rm -rf _CPack_Packages/ && find -name '*.o' -delete
mkdir -p $PACKAGE_DIR
cp ${BUILD_DIR}/*.${PKGTYPE} $PACKAGE_DIR
copy_if "${PKGTYPE}" "${CPACKGEN:-"DEB;RPM"}" "${PACKAGE_DIR}" "${BUILD_DIR}"/*."${PKGTYPE}"
show_build_cache_stats
}
clean_rocdecode() {
@@ -32,7 +49,7 @@ clean_rocdecode() {
}
stage2_command_args "$@"
case $TARGET in
build) build_rocdecode ;;
build) build_rocdecode; build_wheel ;;
outdir) print_output_directory ;;
clean) clean_rocdecode ;;
*) die "Invalid target $TARGET" ;;

View File

@@ -1,7 +1,7 @@
#!/bin/bash
set -ex
source "$(dirname "${BASH_SOURCE[0]}")/compute_helper.sh"
source "$(dirname "${BASH_SOURCE[0]}")/compute_utils.sh"
PATH=${ROCM_PATH}/bin:$PATH
set_component_src rocFFT
@@ -9,6 +9,10 @@ set_component_src rocFFT
build_rocfft() {
echo "Start Build"
if [ "${ENABLE_STATIC_BUILDS}" == "true" ]; then
ack_and_skip_static
fi
cd $COMPONENT_SRC
if [ "${ENABLE_ADDRESS_SANITIZER}" == "true" ]; then
@@ -18,17 +22,14 @@ build_rocfft() {
mkdir -p "$BUILD_DIR" && cd "$BUILD_DIR"
init_rocm_common_cmake_params
if [ -n "$GPU_ARCHS" ]; then
GPU_TARGETS="$GPU_ARCHS"
else
GPU_TARGETS="gfx908;gfx90a;gfx940;gfx941;gfx942;gfx1030;gfx1100;gfx1101;gfx1102;gfx1200;gfx1201"
fi
#Removed GPU ARCHS from here as it will be part of compute_utils.sh ROCMOPS-7302 & ROCMOPS-8091
CXX="${ROCM_PATH}/bin/hipcc" \
# Work around for HIP sources with C++ suffix, and force CXXFLAGS for both
# HIP and C++ compiles
CXX=$(set_build_variables __HIP_CC__) \
cmake \
${LAUNCHER_FLAGS} \
"${rocm_math_common_cmake_params[@]}" \
-DAMDGPU_TARGETS=${GPU_TARGETS} \
-DUSE_HIP_CLANG=ON \
-DHIP_COMPILER=clang \
-DBUILD_CLIENTS_SAMPLES=ON \
@@ -41,7 +42,7 @@ build_rocfft() {
cmake --build "$BUILD_DIR" -- package
rm -rf _CPack_Packages/ && find -name '*.o' -delete
mkdir -p $PACKAGE_DIR && cp ${BUILD_DIR}/*.${PKGTYPE} $PACKAGE_DIR
copy_if "${PKGTYPE}" "${CPACKGEN:-"DEB;RPM"}" "${PACKAGE_DIR}" "${BUILD_DIR}"/*."${PKGTYPE}"
show_build_cache_stats
}
@@ -55,7 +56,7 @@ clean_rocfft() {
stage2_command_args "$@"
case $TARGET in
build) build_rocfft ;;
build) build_rocfft; build_wheel ;;
outdir) print_output_directory ;;
clean) clean_rocfft ;;
*) die "Invalid target $TARGET" ;;

View File

@@ -1,9 +1,13 @@
#!/bin/bash
set -ex
source "$(dirname "${BASH_SOURCE[0]}")/compute_helper.sh"
source "$(dirname "${BASH_SOURCE[0]}")/compute_utils.sh"
set_component_src rocJPEG
BUILD_DEV=ON
build_rocjpeg() {
if [ "$DISTRO_ID" = "centos-7" ] || [ "$DISTRO_ID" = "sles-15.4" ] || [ "$DISTRO_ID" = "azurelinux-3.0" ] || [ "$DISTRO_ID" = "debian-10" ]; then
echo "Not building rocJPEG for ${DISTRO_ID}. Exiting..."
return 0
fi
echo "Start build"
if [ "${ENABLE_STATIC_BUILDS}" == "true" ]; then
@@ -13,7 +17,7 @@ build_rocjpeg() {
mkdir -p $BUILD_DIR && cd $BUILD_DIR
# python3 ../rocJPEG-setup.py
cmake -DROCM_DEP_ROCMCORE=ON "$COMPONENT_SRC"
cmake -DROCM_DEP_ROCMCORE=ON -DROCJPEG_ENABLE_ROCPROFILER_REGISTER=ON "$COMPONENT_SRC"
make -j8
make install
make package
@@ -21,8 +25,7 @@ build_rocjpeg() {
cmake --build "$BUILD_DIR" -- -j${PROC}
cpack -G ${PKGTYPE^^}
rm -rf _CPack_Packages/ && find -name '*.o' -delete
mkdir -p $PACKAGE_DIR
cp ${BUILD_DIR}/*.${PKGTYPE} $PACKAGE_DIR
copy_if "${PKGTYPE}" "${CPACKGEN:-"DEB;RPM"}" "${PACKAGE_DIR}" "${BUILD_DIR}"/*."${PKGTYPE}"
show_build_cache_stats
}
clean_rocjpeg() {

View File

@@ -23,16 +23,15 @@ printUsage() {
return 0
}
## ROCm cmake build (using Makefile) environment variables
PROJ_NAME="rocm-cmake"
TARGET="build"
PACKAGE_ROOT="$(getPackageRoot)"
PACKAGE_DEB="$(getPackageRoot)/deb/rocm-cmake"
PACKAGE_RPM="$(getPackageRoot)/rpm/rocm-cmake"
ROCM_CMAKE_BUILD_DIR="$(getBuildPath rocm-cmake)"
ROCM_CMAKE_BUILD_DIR="$(getBuildPath rocm-cmake)"
ROCM_CMAKE_PACKAGE_DEB="$(getPackageRoot)/deb/rocm-cmake"
ROCM_CMAKE_PACKAGE_RPM="$(getPackageRoot)/rpm/rocm-cmake"
ROCM_WHEEL_DIR="${ROCM_CMAKE_BUILD_DIR}/_wheel"
## ROCm cmake build (using CMake) environment variables
ROCM_CMAKE_BUILD_DIR="$(getBuildPath $PROJ_NAME)"
ROCM_CMAKE_PACKAGE_DEB="$PACKAGE_ROOT/deb/$PROJ_NAME"
ROCM_CMAKE_PACKAGE_RPM="$PACKAGE_ROOT/rpm/$PROJ_NAME"
ROCM_CMAKE_BUILD_TYPE="debug"
BUILD_TYPE="Debug"
SHARED_LIBS="ON"
@@ -40,11 +39,13 @@ CLEAN_OR_OUT=0;
PKGTYPE="deb"
MAKETARGET="deb"
#parse the arguments
VALID_STR=`getopt -o hcraswo:p: --long help,clean,release,static,wheel,address_sanitizer,outdir:,package: -- "$@"`
eval set -- "$VALID_STR"
while true ;
do
#echo "parocessing $1"
case "$1" in
(-h | --help)
printUsage ; exit 0;;
@@ -57,12 +58,12 @@ do
(-s | --static)
SHARED_LIBS="OFF" ; shift ;;
(-w | --wheel)
WHEEL_PACKAGE=true ; shift ;;
WHEEL_PACKAGE=true ; shift ;;
(-o | --outdir)
TARGET="outdir"; PKGTYPE=$2 ; OUT_DIR_SPECIFIED=1 ; ((CLEAN_OR_OUT|=2)) ; shift 2 ;;
(-p | --package)
MAKETARGET="$2" ; shift 2;;
--) shift; break;;
--) shift; break;; # end delimiter
(*)
echo " This should never come but just incase : UNEXPECTED ERROR Parm : [$1] ">&2 ; exit 20;;
esac
@@ -78,7 +79,6 @@ fi
clean_rocm_cmake() {
rm -rf "$ROCM_WHEEL_DIR"
rm -rf $ROCM_CMAKE_BUILD_DIR
rm -rf $ROCM_CMAKE_PACKAGE_DEB
rm -rf $ROCM_CMAKE_PACKAGE_RPM
@@ -106,19 +106,6 @@ build_rocm_cmake() {
copy_if RPM "${CPACKGEN:-"DEB;RPM"}" "$ROCM_CMAKE_PACKAGE_RPM" $ROCM_CMAKE_BUILD_DIR/rocm-cmake*.rpm
}
create_wheel_package() {
echo "Creating rocm-cmake wheel package"
# Copy the setup.py generator to build folder
mkdir -p $ROCM_WHEEL_DIR
cp -f $SCRIPT_ROOT/generate_setup_py.py $ROCM_WHEEL_DIR
cp -f $SCRIPT_ROOT/repackage_wheel.sh $ROCM_WHEEL_DIR
cd $ROCM_WHEEL_DIR
# Currently only supports python3.6
./repackage_wheel.sh $ROCM_CMAKE_BUILD_DIR/rocm-cmake*.rpm python3.6
# Copy the wheel created to RPM folder which will be uploaded to artifactory
copy_if WHL "WHL" "$ROCM_CMAKE_PACKAGE_RPM" "$ROCM_WHEEL_DIR"/dist/*.whl
}
print_output_directory() {
case ${PKGTYPE} in
("deb")
@@ -132,15 +119,19 @@ print_output_directory() {
}
case $TARGET in
(clean) clean_rocm_cmake ;;
(build) build_rocm_cmake ;;
(outdir) print_output_directory ;;
(*) die "Invalid target $TARGET" ;;
(clean)
clean_rocm_cmake
;;
(build)
build_rocm_cmake
build_wheel "$ROCM_CMAKE_BUILD_DIR" "$PROJ_NAME"
;;
(outdir)
print_output_directory
;;
(*)
die "Invalid target $TARGET"
;;
esac
if [[ $WHEEL_PACKAGE == true ]]; then
echo "Wheel Package build started !!!!"
create_wheel_package
fi
echo "Operation complete"

View File

@@ -13,8 +13,10 @@ printUsage() {
echo " -a, --address_sanitizer Enable address sanitizer"
echo " -o, --outdir <pkg_type> Print path of output directory containing packages of
type referred to by pkg_type"
echo " -s, --static Build static lib (.a). build instead of dynamic/shared(.so) "
echo " -w, --wheel Creates python wheel package of rocm-core.
It needs to be used along with -r option"
echo " -h, --help Prints this help"
echo " -s, --static Supports static CI by accepting this param & not bailing out. No effect of the param though"
echo
echo "Possible values for <type>:"
echo " deb -> Debian format (default)"
@@ -24,6 +26,7 @@ printUsage() {
return 0
}
## ROCm build (using CMake) environment variables
PROJ_NAME="rocm-core"
PACKAGE_ROOT="$(getPackageRoot)"
ROCM_CORE_BUILD_DIR="$(getBuildPath rocm_core)"
@@ -38,7 +41,8 @@ MAKETARGET="deb"
PKGTYPE="deb"
ADDRESS_SANITIZER=false
VALID_STR=`getopt -o hcraso:p: --long help,clean,release,static,address_sanitizer,outdir:,package: -- "$@"`
#parse the arguments
VALID_STR=`getopt -o hcraswo:p: --long help,clean,release,static,address_sanitizer,outdir,wheel:,package: -- "$@"`
eval set -- "$VALID_STR"
while true ;
@@ -56,6 +60,8 @@ do
ADDRESS_SANITIZER=true ; shift ;;
(-s | --static)
SHARED_LIBS="OFF" ; shift ;;
(-w | --wheel)
WHEEL_PACKAGE=true ; shift ;;
(-o | --outdir)
TARGET="outdir"; PKGTYPE=$2 ; OUT_DIR_SPECIFIED=1 ; ((CLEAN_OR_OUT|=2)) ; shift 2 ;;
(-p | --package )
@@ -87,14 +93,11 @@ build_rocm_core() {
if [ ! -d "$ROCM_CORE_BUILD_DIR" ]; then
mkdir -p "$ROCM_CORE_BUILD_DIR"
fi
pushd "$ROCM_CORE_BUILD_DIR"
cmake \
-DCMAKE_VERBOSE_MAKEFILE=1 \
$(rocm_cmake_params) \
$(rocm_common_cmake_params) \
-DCMAKE_INSTALL_PREFIX="$ROCM_INSTALL_PATH" \
-DCPACK_PACKAGING_INSTALL_PREFIX="$ROCM_INSTALL_PATH" \
-DCPACK_GENERATOR="${CPACKGEN:-"DEB;RPM"}" \
-DBUILD_SHARED_LIBS=$SHARED_LIBS \
-DCPACK_DEBIAN_PACKAGE_RELEASE=$CPACK_DEBIAN_PACKAGE_RELEASE \
-DCPACK_RPM_PACKAGE_RELEASE=$CPACK_RPM_PACKAGE_RELEASE \
-DROCM_VERSION="$ROCM_VERSION" \
@@ -109,24 +112,33 @@ build_rocm_core() {
}
print_output_directory() {
case ${PKGTYPE} in
case ${PKGTYPE} in
("deb")
echo ${ROCM_CORE_PACKAGE_DEB};;
("rpm")
echo ${ROCM_CORE_PACKAGE_RPM};;
(*)
echo "Invalid package type \"${PKGTYPE}\" provided for -o" >&2; exit 1;;
esac
exit
esac
exit
}
verifyEnvSetup
case $TARGET in
(clean) clean_rocm_core ;;
(build) build_rocm_core ;;
(outdir) print_output_directory ;;
(*) die "Invalid target $TARGET" ;;
(clean)
clean_rocm_core
;;
(build)
build_rocm_core
build_wheel "$ROCM_CORE_BUILD_DIR" "$PROJ_NAME"
;;
(outdir)
print_output_directory
;;
(*)
die "Invalid target $TARGET"
;;
esac
echo "Operation complete"

View File

@@ -2,13 +2,18 @@
set -ex
source "$(dirname "${BASH_SOURCE[0]}")/compute_helper.sh"
source "$(dirname "${BASH_SOURCE[0]}")/compute_utils.sh"
stage2_command_args "$@"
build_rocm-dev(){
$(dirname "${BASH_SOURCE[0]}")/build_rocm.sh -d
mv ${OUT_DIR}/${PKGTYPE}/meta ${OUT_DIR}/${PKGTYPE}/rocm-dev
}
case $TARGET in
build) echo "end of rocm-dev build..." ;;
outdir) ;;
clean) echo "Cleaning rocm-dev is not required..." ;;
build) build_rocm-dev ;;
outdir) echo "${OUT_DIR}/${PKGTYPE}/rocm-dev" ;;
clean) rm -rf ${OUT_DIR}/${PKGTYPE}/rocm-dev ;;
*) die "Invalid target $TARGET" ;;
esac

View File

@@ -1,7 +1,6 @@
#!/bin/bash
source "${BASH_SOURCE%/*}/compute_utils.sh" || return
# Can't use -R or -r in here
remove_make_r_flags
printUsage() {
@@ -15,8 +14,10 @@ printUsage() {
echo " -a, --address_sanitizer Enable address sanitizer"
echo " -o, --outdir <pkg_type> Print path of output directory containing packages of
type referred to by pkg_type"
echo " -s, --static Component/Build does not support static builds just accepting this param & ignore. No effect of the param on this build"
echo " -w, --wheel Creates python wheel package of rocm-gdb.
It needs to be used along with -r option"
echo " -h, --help Prints this help"
echo " -s, --static Supports static CI by accepting this param & not bailing out. No effect of the param though"
echo
echo "Possible values for <type>:"
echo " deb -> Debian format (default)"
@@ -32,23 +33,32 @@ toStdoutStderr(){
}
linkFiles(){
# Attempt to use hard links first for speed and save disk,
# if that fails do a copy
cp -lfR "$1" "$2" || cp -fR "$1" "$2"
}
## Build environment variables
PROJ_NAME=rocm-gdb
TARGET=build
MAKETARGET=deb
BUILD_DIR=$(getBuildPath $PROJ_NAME)
PACKAGE_DEB=$(getPackageRoot)/deb/$PROJ_NAME
PACKAGE_RPM=$(getPackageRoot)/rpm/$PROJ_NAME
MAKE_OPTS="$DASH_JAY"
MAKETARGET=deb # Not currently used
BUILD_DIR=$(getBuildPath $PROJ_NAME) # e.g. out/ubuntu.16.04/16.04/build/rocm-gdb
PACKAGE_DEB=$(getPackageRoot)/deb/$PROJ_NAME # e.g. out/ubuntu.16.04/16.04/deb
PACKAGE_RPM=$(getPackageRoot)/rpm/$PROJ_NAME # e.g. out/ubuntu.16.04/16.04/rpm
MAKE_OPTS="$DASH_JAY" # e.g. -j 56
BUG_URL="https://github.com/ROCm-Developer-Tools/ROCgdb/issues"
SHARED_LIBS="ON"
CLEAN_OR_OUT=0;
MAKETARGET="deb"
PKGTYPE="deb"
LDFLAGS="$LDFLAGS -Wl,--enable-new-dtags"
LIB_AMD_PYTHON="libamdpython.so"
LIB_AMD_PYTHON="amdpythonlib.so" #lib name which replaces required python lib
LIB_AMD_PYTHON_DIR_PATH=${ROCM_INSTALL_PATH}/lib
# A curated list of things to keep. It would be safer to have a list
# of things to remove, as failing to remove something is usually much
# less harmful than removeing too much.
tokeep=(
main${ROCM_INSTALL_PATH}/bin/rocgdb
@@ -77,13 +87,18 @@ tokeep=(
keep_wanted_files(){
(
cd "$BUILD_DIR/package/"
# generate the keep pattern as one name per line
printf -v keeppattern '%s\n' "${tokeep[@]}"
find main/opt -type f | grep -xv "$keeppattern" | xargs -r rm
# prune empty directories
find main/opt -type d -empty -delete
)
return 0
}
# Move to a function so that both package_deb and package_rpm can call
# and remove the depenency of package_rpm_tests on package_deb.
# Copy the required files to create a stand-alone testsuite.
copy_testsuite_files() {
(
dest="$BUILD_DIR/package/tests${ROCM_INSTALL_PATH}/test/gdb/"
@@ -113,43 +128,57 @@ clean() {
rm -rf $PACKAGE_RPM
}
# set the lexically bound variable VERSION to the current version
# A passed parameter gives the default
# Note that this might need to be stripped further as it might have
# things like "-git" which is not acceptable as a version to rpm.
get_version(){
VERSION=$(sed -n 's/^.*char version[^"]*"\([^"]*\)".*;.*/\1/p' $BUILD_DIR/gdb/version.c || : )
VERSION=${VERSION:-$1}
}
package_deb(){
# Package main binary.
# TODO package documentation when we build some.
mkdir -p "$BUILD_DIR/package/main/DEBIAN"
# Extract version from build
local VERSION
get_version unknown
# add upgrade related version sub-field
VERSION="${VERSION}.${ROCM_LIBPATCH_VERSION}"
#create postinstall and prerm
grep -v '^# ' > "$BUILD_DIR/package/main/DEBIAN/preinst" <<EOF
grep -v '^# ' > "$BUILD_DIR/package/main/DEBIAN/postinst" <<EOF
#!/bin/sh
# Pre-installation script commands
echo "Running pre-installation script..."
mkdir -p ${ROCM_INSTALL_PATH}/lib
PYTHON_LIB_INSTALLED=\$(ldconfig -p | awk '/libpython3/ { print \$NF; exit}')
ln -s \$PYTHON_LIB_INSTALLED ${ROCM_INSTALL_PATH}/lib/$LIB_AMD_PYTHON
echo "pre-installation done."
# Post-installation script commands
echo "Running post-installation script..."
mkdir -p $LIB_AMD_PYTHON_DIR_PATH
# Choosing the lowest version of the libpython3 installed.
PYTHON_LIB_INSTALLED=\$(find /lib/ -name 'libpython3*.so' | head -n 1)
echo "Installing rocm-gdb with [\$PYTHON_LIB_INSTALLED]."
ln -s \$PYTHON_LIB_INSTALLED $LIB_AMD_PYTHON_DIR_PATH/$LIB_AMD_PYTHON
echo "post-installation done."
EOF
grep -v '^# ' > "$BUILD_DIR/package/main/DEBIAN/postrm" <<EOF
grep -v '^# ' > "$BUILD_DIR/package/main/DEBIAN/prerm" <<EOF
#!/bin/sh
# Post-uninstallation script commands
echo "Running post-uninstallation script..."
PYTHON_LINK_BY_OPENCL=\$(ldconfig -p | awk '/libpython3/ { print \$NF; exit}' | awk -F'/' '{print \$NF}')
rm -f ${ROCM_INSTALL_PATH}/lib/\$PYTHON_LINK_BY_OPENCL
rm -f ${ROCM_INSTALL_PATH}/lib/$LIB_AMD_PYTHON
if [ -L "${ROCM_INSTALL_PATH}/lib/$LIB_AMD_PYTHON" ] || \
[ -L "${ROCM_INSTALL_PATH}/lib/\$PYTHON_LINK_BY_OPENCL" ] ; then
# Pre-uninstallation script commands
echo "Running pre-uninstallation script..."
rm -f $LIB_AMD_PYTHON_DIR_PATH/$LIB_AMD_PYTHON
if [ -L "$LIB_AMD_PYTHON_DIR_PATH/$LIB_AMD_PYTHON" ] ; then
echo " some rocm-gdb requisite libs could not be removed"
else
echo " all requisite libs removed successfully "
fi
echo "post-uninstallation done."
echo "pre-uninstallation done."
EOF
chmod +x $BUILD_DIR/package/main/DEBIAN/postrm
chmod +x $BUILD_DIR/package/main/DEBIAN/preinst
chmod +x $BUILD_DIR/package/main/DEBIAN/prerm
chmod +x $BUILD_DIR/package/main/DEBIAN/postinst
# Create control file, with variable substitution.
# Lines with # at the start are removed, to allow for comments
mkdir "$BUILD_DIR/debian"
@@ -167,8 +196,9 @@ Section: utils
Architecture: amd64
Essential: no
Priority: optional
Depends: \${shlibs:Depends}, rocm-dbgapi, rocm-core
Depends: \${shlibs:Depends}, rocm-dbgapi, rocm-core, python3-dev
EOF
# Use dpkg-shlibdeps to list shlib dependencies, the result is placed
# in $BUILD_DIR/debian/substvars.
(
@@ -179,6 +209,7 @@ EOF
fi
dpkg-shlibdeps --ignore-missing-info -e "$BUILD_DIR/package/main/${ROCM_INSTALL_PATH}/bin/rocgdb"
)
# Generate the final DEBIAN/control, and substitute the shlibs:Depends.
# This is a bit unorthodox as we are only using bits and pieces of the
# dpkg tools.
@@ -191,8 +222,10 @@ EOF
-e "s/\\$\{shlibs:Depends\}/$SHLIB_DEPS/" \
< debian/control > "$BUILD_DIR/package/main/DEBIAN/control"
)
mkdir -p "$OUT_DIR/deb/$PROJ_NAME"
fakeroot dpkg-deb -Zgzip --build "$BUILD_DIR/package/main" "$OUT_DIR/deb/$PROJ_NAME"
# Package the tests so they can be run on a test slave
mkdir -p "$BUILD_DIR/package/tests/DEBIAN"
mkdir -p "$BUILD_DIR/package/tests/${ROCM_INSTALL_PATH}/test/gdb"
@@ -213,21 +246,28 @@ Priority: optional
# rocm-core as policy says everything to depend on rocm-core
Depends: ${PROJ_NAME} (=${VERSION}-${CPACK_DEBIAN_PACKAGE_RELEASE}), dejagnu, rocm-core, make
EOF
copy_testsuite_files
fakeroot dpkg-deb -Zgzip --build "$BUILD_DIR/package/tests" "$OUT_DIR/deb/$PROJ_NAME"
}
package_rpm(){
# TODO, use this to package the tests as well. In the mean time hard code the package
set -- rocm-gdb
local packageDir="$BUILD_DIR/package_rpm/$1"
local specFile="$packageDir/$1.spec"
local packageRpm="$packageDir/rpm"
local packageDir="$BUILD_DIR/package_rpm/$1" # e.g. out/ubuntu-16.04/16.04/build/rocm-gdb/package_rpm/main
local specFile="$packageDir/$1.spec" # The generated spec file
local packageRpm="$packageDir/rpm" # The RPM infrastructure
# Extract version from build. If more than one line matches then
# expect failures. Solution is to find which version is the wanted one.
local VERSION
get_version 0.0.0
# add upgrade related version sub-field
VERSION=${VERSION}.${ROCM_LIBPATCH_VERSION}
# get the __os_install_post macro, edit it to remove the python bytecode generation
# rpm --showrc shows the default macros with priority level (-14) in this case
# so remove everything before this macro, everything after it, remove the offending line,
# and make it available as the ospost variable to insert into spec file
local ospost="$(echo '%define __os_install_post \'
rpm --showrc | sed '1,/^-14: __os_install_post/d;
/^-14:/,$d;/^%{nil}/!s/$/ \\/;
@@ -238,6 +278,8 @@ package_rpm(){
mkdir -p "$packageDir"
# Create the spec file.
# Allow comments in the generation of the specfile, may be overkill.
grep -v '^## ' <<- EOF > $specFile
## Set up where this stuff goes
%define _topdir $packageRpm
@@ -256,8 +298,7 @@ Version: ${VERSION//-/_}
Release: ${CPACK_RPM_PACKAGE_RELEASE}%{?dist}
License: GPL
Prefix: ${ROCM_INSTALL_PATH}
Requires: rocm-core
Provides: $LIB_AMD_PYTHON()(64bit)
Requires: rocm-core, rocm-dbgapi
%description
This is ROCgdb, the ROCm source-level debugger for Linux, based on
@@ -278,27 +319,6 @@ https://github.com/RadeonOpenCompute/ROCm
## into the local RPM_BUILD_ROOT and left the defaults take over. Need
## to quote the dollar signs as we want rpm to expand them when it is
## run, rather than the shell when we build the spec file.
%pre
# Post-install script commands
echo "Running post-install script..."
mkdir -p ${ROCM_INSTALL_PATH}/lib
PYTHON_LIB_INSTALLED=\$(ldconfig -p | awk '/libpython3/ { print \$NF; exit}')
ln -s \$PYTHON_LIB_INSTALLED ${ROCM_INSTALL_PATH}/lib/$LIB_AMD_PYTHON
%postun
# Post-uninstallation script commands
echo "Running post-uninstallation script..."
PYTHON_LINK_BY_OPENCL=\$(ldconfig -p | awk '/libpython3/ { print \$NF; exit}' | awk -F'/' '{print \$NF}')
rm -f ${ROCM_INSTALL_PATH}/lib/\$PYTHON_LINK_BY_OPENCL
rm -f ${ROCM_INSTALL_PATH}/lib/$LIB_AMD_PYTHON
if [ -L "${ROCM_INSTALL_PATH}/lib/$LIB_AMD_PYTHON" ] || \
[ -L "${ROCM_INSTALL_PATH}/lib/\$PYTHON_LINK_BY_OPENCL" ] ; then
echo " some rocm-gdb requisite libs could not be removed"
else
echo " all requisite libs removed successfully "
fi
echo "post-uninstallation done."
%install
rm -rf \$RPM_BUILD_ROOT
mkdir -p \$RPM_BUILD_ROOT
@@ -307,24 +327,27 @@ cp -ar $BUILD_DIR/package/main/opt \$RPM_BUILD_ROOT/opt
## The file section is generated by walking the tree.
%files
EOF
# Now generate the files
find $BUILD_DIR/package/main/opt -type d | sed "s:$BUILD_DIR/package/main:%dir :" >> $specFile
find $BUILD_DIR/package/main/opt ! -type d | sed "s:$BUILD_DIR/package/main::" >> $specFile
rpmbuild --define "_topdir $packageRpm" -ba $specFile
# Now copy it to final location
mkdir -p "$PACKAGE_RPM" # e.g. out/ubuntu-16.04/16.04/rpm/rocm-gdb
mv $packageRpm/RPMS/x86_64/*.rpm "$PACKAGE_RPM"
}
package_rpm_tests(){
# TODO, use this to package the tests as well. In the mean time hard code the package
set -- rocm-gdb-tests
local packageDir="$BUILD_DIR/package_rpm/$1"
local specFile="$packageDir/$1.spec"
local packageRpm="$packageDir/rpm"
local packageDir="$BUILD_DIR/package_rpm/$1" # e.g. out/ubuntu-16.04/16.04/build/rocm-gdb/package_rpm/main
local specFile="$packageDir/$1.spec" # The generated spec file
local packageRpm="$packageDir/rpm" # The RPM infrastructure
# Extract version from build. If more than one line matches then
# expect failures. Solution is to find which version is the wanted one.
local VERSION
get_version 0.0.0
# add upgrade related version sub-field
VERSION=${VERSION}.${ROCM_LIBPATCH_VERSION}
local RELEASE=${CPACK_RPM_PACKAGE_RELEASE}%{?dist}
@@ -333,6 +356,8 @@ package_rpm_tests(){
mkdir -p "$packageRpm"
# Create the spec file.
# Allow comments in the generation of the specfile, may be overkill.
local ospost="$(echo '%define __os_install_post \'
rpm --showrc | sed '1,/^-14: __os_install_post/d;
/^-14:/,$d;/^%{nil}/!s/$/ \\/;
@@ -385,10 +410,15 @@ EOF
copy_testsuite_files
# rpm wont resolve the dependency if the unversioned python (#!/usr/bin/python) is used.
# /usr/bin/python - this file is not owned by any package.
# So find and append the version to the /usr/bin/python as /usr/bin/python3
# By updating this, the python3 requirement will be provided by the python3 package.
find $BUILD_DIR/package/tests/opt -type f -exec sed -i '1s:^#! */usr/bin/python\>:&3:' {} +
rpmbuild --define "_topdir $packageRpm" -ba $specFile
mkdir -p "$PACKAGE_RPM"
# Now copy it to final location
mkdir -p "$PACKAGE_RPM" # e.g. out/ubuntu-16.04/16.04/rpm/rocm-gdb
mv $packageRpm/RPMS/x86_64/*.rpm "$PACKAGE_RPM"
}
@@ -396,20 +426,29 @@ build() {
if [ ! -e "$ROCM_GDB_ROOT/configure" ]
then
toStdoutStderr "No $ROCM_GDB_ROOT/configure file, skippping rocm-gdb"
exit 0
exit 0 # This is not an error
fi
local pythonver=python3
if [[ "$DISTRO_ID" == "ubuntu-18.04" ]]; then
pythonver=python3.8
fi
# Workaround for rocm-gdb failure due to texlive on RHEL-9 & CentOS-9 SWDEV-339596
if [[ "$DISTRO_ID" == "centos-9" ]] || [[ "$DISTRO_ID" == "rhel-9.0" ]]; then
fmtutil-user --missing
fi
echo "Building $PROJ_NAME"
mkdir -p "$BUILD_DIR"
cd "$BUILD_DIR" || die "Failed to cd to '$BUILD_DIR'"
# Build instructions taken from the README.ROCM with the addition
# of --with-pkgversion
#
# The "new" way of specifying the path to the amd-dbgapi library is by
# setting PKG_CONFIG_PATH. The --with-amd-dbgapi flag is used to ensure
# that if amd-dbgapi is not found, configure fails.
#
# --with-rocm-dbgapi is kept for now, to ease the transition. It can be
# removed once it is determined that we don't need to build source trees
# using the "old" way.
$ROCM_GDB_ROOT/configure --program-prefix=roc --prefix="${ROCM_INSTALL_PATH}" \
--htmldir="\${prefix}/share/html" --pdfdir="\${prefix}/share/doc/rocgdb" \
--infodir="\${prefix}/share/info/rocgdb" \
@@ -441,24 +480,31 @@ build() {
LDFLAGS="$LDFLAGS"
LD_RUN_PATH='${ORIGIN}/../lib' make $MAKE_OPTS
REPLACE_LIB_NAME=$(ldd -d $BUILD_DIR/gdb/gdb |awk '/libpython/{print $1}')
echo "Replacing $REPLACE_LIB_NAME with $LIB_AMD_PYTHON"
patchelf --replace-needed $REPLACE_LIB_NAME $LIB_AMD_PYTHON $BUILD_DIR/gdb/gdb
if [[ "$DISTRO_ID" == "ubuntu"* ]]; then
#changing the python lib requirement in the built gdb for ubuntu builds
REPLACE_LIB_NAME=$(ldd -d $BUILD_DIR/gdb/gdb |awk '/libpython/{print $1}')
echo "Replacing $REPLACE_LIB_NAME with $LIB_AMD_PYTHON"
patchelf --replace-needed $REPLACE_LIB_NAME $LIB_AMD_PYTHON $BUILD_DIR/gdb/gdb
fi
mkdir -p $BUILD_DIR/package/main${ROCM_INSTALL_PATH}/{share/rocgdb,bin}
# Install gdb
make $MAKE_OPTS -C gdb DESTDIR=$BUILD_DIR/package/main install install-pdf install-html
# Install binutils for coremerge and coremerge manpage.
make $MAKE_OPTS -C binutils DESTDIR=$BUILD_DIR/package/main install
# Add in the AMD licences file
linkFiles $ROCM_GDB_ROOT/gdb/NOTICES.txt $BUILD_DIR/package/main${ROCM_INSTALL_PATH}/share/doc/rocgdb
keep_wanted_files
# If a variable CPACKGEN indicates only one type of packaging is required
# then don't bother making the other. This variable is set up in compute_utils.sh
# Default to building both package types if variable is not set
# Use "[ var = value ] || ..." rather than "[ var != value ] &&" so expression
# evaluates to true, and set -e does not cause script to exit.
[ "${CPACKGEN}" = "DEB" ] || package_rpm && package_rpm_tests
[ "${CPACKGEN}" = "RPM" ] || package_deb
}
# See if the code exists
print_output_directory() {
case ${PKGTYPE} in
("deb")
@@ -475,11 +521,14 @@ verifyEnvSetup
main(){
VALID_STR=`getopt -o hcraso:p: --long help,clean,release,static,address_sanitizer,outdir:,package: -- "$@"`
#parse the arguments
VALID_STR=`getopt -o hcraswo:p: --long help,clean,release,static,wheel,address_sanitizer,outdir:,package: -- "$@"`
eval set -- "$VALID_STR"
ASAN_BUILD="no"
while true ;
do
#echo "parocessing $1"
case "$1" in
(-h | --help)
printUsage ; exit 0;;
@@ -490,9 +539,11 @@ do
(-a | --address_sanitizer)
set_asan_env_vars
set_address_sanitizer_on
ASAN_BUILD="yes" ; shift ;;
ASAN_BUILD="yes" ; shift ;;
(-s | --static)
ack_and_skip_static ;;
(-w | --wheel)
echo " Wheel"; WHEEL_PACKAGE=true ; shift;;
(-o | --outdir)
TARGET="outdir"; PKGTYPE=$2 ; OUT_DIR_SPECIFIED=1 ; ((CLEAN_OR_OUT|=2)) ; shift 2 ;;
(-p | --package) #FIXME
@@ -505,6 +556,7 @@ do
esac
done
# If building with Clang, we need to build in C++17 mode, to avoid some build problems
if [[ $CXX == *"clang++" ]]
then
CXX="$CXX -std=gnu++17"
@@ -518,17 +570,28 @@ if [ $RET_CONFLICT -ge 30 ]; then
fi
case $TARGET in
("clean") clean ;;
("build") build ;;
("outdir") print_output_directory ;;
(*) die "Invalid target $TARGET" ;;
("clean")
clean
;;
("build")
build
build_wheel "$BUILD_DIR" "$PROJ_NAME"
;;
("outdir")
print_output_directory
;;
(*)
die "Invalid target $TARGET"
;;
esac
echo "Operation complete"
}
# If this script is not being sourced, then run it.
if [ "$0" = "$BASH_SOURCE" ]
then
main "$@"
else
set +e
set +e # Undo the damage from compute_utils.sh
fi

264
tools/rocm-build/build_rocm.sh Executable file
View File

@@ -0,0 +1,264 @@
#!/bin/bash
source "$(dirname "${BASH_SOURCE}")/compute_utils.sh"
printUsage() {
echo
echo "Usage: $(basename "${BASH_SOURCE}") [options ...]"
echo
echo "Options:"
echo " -c, --clean Clean output and delete all intermediate work"
echo " -d, --devstg Build only stage1 meta packages. Without this
option script builds both stg1 and stg2"
echo " -p, --package <type> Specify packaging format"
echo " -r, --release Make a release build instead of a debug build"
echo " -a, --address_sanitizer Enable address sanitizer"
echo " -o, --outdir <pkg_type> Print path of output directory containing packages of
type referred to by pkg_type"
echo " -h, --help Prints this help"
echo " -w, --wheel Creates python wheel package of rocm meta packages.
It needs to be used along with -r option"
echo " -s, --static Enable Support for Generating Static Meta Packages"
echo
echo "Possible values for <type>:"
echo " deb -> Debian format (default)"
echo " rpm -> RPM format"
echo
return 0
}
## ROCm build (using CMake) environment variables
PROJ_NAME="meta"
PACKAGE_ROOT="$(getPackageRoot)"
ROCM_BUILD_DIR="$(getBuildPath $PROJ_NAME)"
ROCM_PACKAGE_DEB="$PACKAGE_ROOT/deb/$PROJ_NAME"
ROCM_PACKAGE_RPM="$PACKAGE_ROOT/rpm/$PROJ_NAME"
ROCM_MAKE_OPTS="$DASH_JAY -C $ROCM_BUILD_DIR"
#ROCM_DKMS_MAKE_OPTS="$DASH_JAY -C $ROCM_DKMS_BUILD_DIR"
#ROCM_DEV_MAKE_OPTS="$DASH_JAY -C $ROCM_DEV_BUILD_DIR"
BUILD_TYPE="Debug"
TARGET="build"
SHARED_LIBS="ON"
CLEAN_OR_OUT=0;
MAKETARGET="deb"
PKGTYPE="deb"
ADDRESS_SANITIZER=false
STG2_PKG_BUILD="true"
#parse the arguments
VALID_STR=`getopt -o dhcraswo:p: --long help,devstg,clean,release,static,wheel,address_sanitizer,outdir:,package: -- "$@"`
eval set -- "$VALID_STR"
while true ;
do
case "$1" in
(-h | --help)
printUsage ; exit 0;;
(-c | --clean)
TARGET="clean" ; ((CLEAN_OR_OUT|=1)) ; shift ;;
(-r | --release)
BUILD_TYPE="Release" ; shift ;;
(-a | --address_sanitizer)
set_asan_env_vars
set_address_sanitizer_on
ADDRESS_SANITIZER=true ; shift ;;
(-s | --static)
SHARED_LIBS="OFF" ; shift ;;
(-w | --wheel)
WHEEL_PACKAGE=true ; shift ;;
(-d | --devstg )
STG2_PKG_BUILD="false" ; shift ;;
(-o | --outdir)
TARGET="outdir"; PKGTYPE=$2 ; OUT_DIR_SPECIFIED=1 ; ((CLEAN_OR_OUT|=2)) ; shift 2 ;;
(-p | --package )
MAKETARGET=$2 ; shift 2 ;;
--) shift; break;; # end delimiter
(*)
echo " This should never come but just incase : UNEXPECTED ERROR Parm : [$1] ">&2 ; exit 20;;
esac
done
RET_CONFLICT=1
check_conflicting_options $CLEAN_OR_OUT $PKGTYPE $MAKETARGET
if [ $RET_CONFLICT -ge 30 ]; then
print_vars $API_NAME $TARGET $BUILD_TYPE $SHARED_LIBS $CLEAN_OR_OUT $PKGTYPE $MAKETARGET
exit $RET_CONFLICT
fi
# Generate the pkg list and its versions list as a ";" seperated string and export it to the ENV.
# These PKG_LIST and VER_LIST envs will be used as a LIST in cmake function in utils.cmake
gen_pkg_ver_list() {
# for mi* and navi* these packages needs to be excluded because of compression problem
# compute-firmware_5.18.0-kfd-compute-rocm-npi-mi*-720_all.deb
# linux-headers-5.18.0-kfd-compute-rocm-npi-mi*-720_5.18.0-kfd-compute-rocm-npi-mi*-720-1_amd64.deb
# linux-image-5.18.0-kfd-compute-rocm-npi-mi*-720_5.18.0-kfd-compute-rocm-npi-mi*-720-1_amd64.deb
# linux-image-6.2.8-kfd-compute-rocm-npi-navi*-wip-41_6.2.8-kfd-compute-rocm-npi-navi*-wip-41-1_amd64.deb
# So making the exclude filelist generic
declare -a Exclfiles=( "compute-firmware_*kfd-compute-rocm-npi-*.deb"
"linux-headers-*kfd-compute-rocm-npi-*.deb"
"linux-image-*kfd-compute-rocm-npi-*.deb"
)
#this package needs to be excluded always
Exclfiles+=('*dbgsym*')
PLIST=""
VLIST=""
search_dir="$PACKAGE_ROOT/$PACKAGEEXT"
# exclude *dbgsym* pkg files from the search
for file in $(find $search_dir/. -type f -name "*.$PACKAGEEXT" ! -name ${Exclfiles[3]} ! -name ${Exclfiles[0]} ! -name ${Exclfiles[1]} ! -name ${Exclfiles[2]} );
do
if [ "$PACKAGEEXT" == "deb" ]; then
dpkg -I $file | grep 'Package:\|Version:' > tmpfile
PLIST="$(awk '/Package:/{print $2}' tmpfile);$PLIST"
VLIST="$(awk '/Version:/{print $2}' tmpfile);$VLIST"
elif [ "$PACKAGEEXT" == "rpm" ]; then
rpm -qip $file | grep 'Name\|Version\|Release' > tmpfile
PLIST="$(awk '/Name/{print $3}' tmpfile);$PLIST"
VLIST="$(awk '/Version/{print $3}' tmpfile)-$(awk '/Release/{print $3}' tmpfile);$VLIST"
fi
done
[ -f tmpfile ] && rm tmpfile
# export as ENV variable
export PKG_LIST="$PLIST"
export VER_LIST="$VLIST"
echo " PKG_LIST=$PKG_LIST"
echo " VER_LIST=$VER_LIST"
}
generate_files_from_json() {
#Generate existing pkg list and corresponding version list.
#To be used for meta package dependencies version assignment.
gen_pkg_ver_list
bash -c 'sudo pip3 install dataclasses'
PY_MODULE="packaging_files_generator.py "
pushd "$ROCM_ROOT/packaging"
if ! pyret=$(python3 $PY_MODULE ) ; then
echo "FATAL!!! Python exectued with errors..."
echo "Cannot proceed now bailing out .."
exit 3
fi
popd
}
clean_rocm() {
rm -rf "$ROCM_BUILD_DIR"
rm -rf "$ROCM_PACKAGE_DEB"
rm -rf "$ROCM_PACKAGE_RPM"
}
clean_gen_files() {
GEN_FILES=`find $ROCM_ROOT/ -regextype sed -iregex ".*\.[iu]\{0,\}gen$"`
while IFS= read -r line ; do
if [ ! -z "$line" ]; then
rm "$line"
fi
done <<< "$GEN_FILES"
}
verify_meta_dependencies(){
#make package path
pkg_path="$OUT_DIR/$PACKAGEEXT/meta"
PY_MODULE="dependency_tester.py "
#options required by dependency tester
options=" --path=$pkg_path --jd=$JOB_DESIGNATOR --lpv=$ROCM_LIBPATCH_VERSION --bid=$BUILD_ID "
echo " options == $options "
pushd "$ROCM_ROOT/packaging"
pyret=$(python3 $PY_MODULE $options >> dependency_log.txt 2>&1 ) || true
echo "========== begin : dependency_log ==========="
cat dependency_log.txt
echo "========== end : dependency_log ==========="
popd
echo " verify_meta_dependencies : over "
}
build_rocm() {
echo "Building Meta packaging"
if [ ! -d "$ROCM_BUILD_DIR" ]; then
mkdir -p "$ROCM_BUILD_DIR"
fi
pushd "$ROCM_BUILD_DIR"
cmake \
-DCMAKE_VERBOSE_MAKEFILE=1 \
$(rocm_common_cmake_params) \
-DBUILD_SHARED_LIBS=$SHARED_LIBS \
-DCMAKE_INSTALL_PREFIX="$PACKAGE_ROOT" \
-DCPACK_PACKAGING_INSTALL_PREFIX="$ROCM_INSTALL_PATH" \
-DCPACK_GENERATOR="${CPACKGEN:-"DEB;RPM"}" \
-DROCM_VERSION="$ROCM_VERSION" \
$ROCM_ROOT
popd
if [[ "$SHARED_LIBS" == "ON" ]]; then
if [[ "$STG2_PKG_BUILD" == "true" ]]; then
cmake --build "$ROCM_BUILD_DIR" -- $ROCM_MAKE_OPTS pkg_rocm
else
cmake --build "$ROCM_BUILD_DIR" -- $ROCM_MAKE_OPTS STAGE_1_Targets
fi
# Optional Meta Package
if [[ "$ADDRESS_SANITIZER" == true ]]; then
if [[ "$STG2_PKG_BUILD" == "true" ]]; then
cmake --build "$ROCM_BUILD_DIR" -- $ROCM_MAKE_OPTS pkg_rocm_asan
else
cmake --build "$ROCM_BUILD_DIR" -- $ROCM_MAKE_OPTS ASAN_STAGE_1_Targets
fi
fi
else
# Optional Static Meta Package
cmake --build "$ROCM_BUILD_DIR" -- $ROCM_MAKE_OPTS pkg_rocm_language_static_dev
#stg2
cmake --build "$ROCM_BUILD_DIR" -- $ROCM_MAKE_OPTS pkg_rocm_static_dev
fi
copy_if DEB "${CPACKGEN:-"DEB;RPM"}" "$ROCM_PACKAGE_DEB" $ROCM_BUILD_DIR/rocm*.deb
copy_if RPM "${CPACKGEN:-"DEB;RPM"}" "$ROCM_PACKAGE_RPM" $ROCM_BUILD_DIR/rocm*.rpm
}
print_output_directory() {
case ${PKGTYPE} in
("deb")
echo ${ROCM_PACKAGE_DEB};;
("rpm")
echo ${ROCM_PACKAGE_RPM};;
(*)
echo "Invalid package type \"${PKGTYPE}\" provided for -o" >&2; exit 1;;
esac
exit
}
verifyEnvSetup
case $TARGET in
(clean) clean_rocm ;;
(build) generate_files_from_json && build_rocm && verify_meta_dependencies ; build_wheel "$ROCM_BUILD_DIR" "$PROJ_NAME" ;;
(outdir) print_output_directory ;;
(*) die "Invalid target $TARGET" ;;
esac
clean_gen_files
echo "Operation complete"

View File

@@ -12,6 +12,8 @@ printUsage() {
echo " -p, --package <type> Specify packaging format"
echo " -r, --release Make a release build instead of a debug build"
echo " -a, --address_sanitizer Enable address sanitizer"
echo " -w, --wheel Creates python wheel package of bandwidth test.
It needs to be used along with -r option"
echo " -o, --outdir <pkg_type> Print path of output directory containing packages of
type referred to by pkg_type"
echo " -h, --help Prints this help"
@@ -24,22 +26,35 @@ printUsage() {
return 0
}
#
# Build environment variables. The value of test
# root is imported from the envsetu.sh
#
PROJ_NAME="rocm_bandwidth_test"
TEST_BIN_DIR="$(getBinPath)"
TEST_NAME="rocm-bandwidth-test"
TEST_UTILS_DIR="$(getUtilsPath)"
TEST_SRC_DIR="rocm_bandwidth_test"
TEST_SRC_DIR="$PROJ_NAME"
TEST_BLD_DIR="$(getBuildPath $TEST_SRC_DIR)"
#
# Env variables for packaging rocm_bandwidth_test
#
ROCM_PKG_PREFIX="$ROCM_INSTALL_PATH"
TEST_PKG_ROOT="$(getPackageRoot)"
TEST_PKG_DEB="$(getPackageRoot)/deb/$TEST_SRC_DIR"
TEST_PKG_RPM="$(getPackageRoot)/rpm/$TEST_SRC_DIR"
ROCR_LIB_DIR="$(getPackageRoot)/lib"
ROCR_INC_DIR="$(getPackageRoot)/hsa/include"
#
# Build the name of run script
#
RUN_SCRIPT=$(echo $(basename "${BASH_SOURCE}") | sed "s/build_/run_/")
#
# Specify the default build type as debug
# DASH_JAY - Bind number of threads to use value set
# by user in their shell config file (.bashrc)
#
TARGET="build"
MAKETARGET="all"
BUILD_TYPE="Debug"
@@ -49,11 +64,16 @@ CLEAN_OR_OUT=0;
PKGTYPE="deb"
VALID_STR=`getopt -o hcraso:p: --long help,clean,release,static,address_sanitizer,outdir:,package: -- "$@"`
#parse the arguments
VALID_STR=`getopt -o hcraswo:p: --long help,clean,release,static,wheel,address_sanitizer,outdir:,package: -- "$@"`
eval set -- "$VALID_STR"
#
# Override default bindings if user specifies an option
#
while true ;
do
#echo "parocessing $1"
case "$1" in
(-h | --help)
printUsage ; exit 0;;
@@ -66,6 +86,8 @@ do
set_address_sanitizer_on ; shift ;;
(-s | --static)
ack_and_skip_static ;;
(-w | --wheel)
WHEEL_PACKAGE=true ; shift ;;
(-o | --outdir)
TARGET="outdir"; PKGTYPE=$2 ; OUT_DIR_SPECIFIED=1 ; ((CLEAN_OR_OUT|=2)) ; shift 2 ;;
(-p | --package)
@@ -84,6 +106,9 @@ if [ $RET_CONFLICT -ge 30 ]; then
exit $RET_CONFLICT
fi
#
# Clean the test build from system
#
clean_rocm_bandwidth_test() {
echo "Cleaning $TEST_NAME"
@@ -94,10 +119,16 @@ clean_rocm_bandwidth_test() {
rm -f $TEST_UTILS_DIR/$RUN_SCRIPT
}
#
# Build the test by runninh cmake
#
build_rocm_bandwidth_test() {
echo "Building $TEST_NAME"
#
# If build directory does not exist create it
#
if [ ! -d "$TEST_BLD_DIR" ]; then
mkdir -p "$TEST_BLD_DIR"
pushd "$TEST_BLD_DIR"
@@ -115,22 +146,32 @@ build_rocm_bandwidth_test() {
-DADDRESS_SANITIZER="$ADDRESS_SANITIZER" \
"$ROCM_BANDWIDTH_TEST_ROOT"
# Go back to the directory you came from
popd
fi
# Run the make cmd to build test
echo "Building $TEST_NAME"
cmake --build "$TEST_BLD_DIR" -- $MAKEARG -C $TEST_BLD_DIR
# Run the make cmd to install test
echo "Installing $TEST_NAME"
cmake --build "$TEST_BLD_DIR" -- $MAKEARG -C $TEST_BLD_DIR install
# Run the make cmd to package test
echo "Packaging $TEST_NAME"
cmake --build "$TEST_BLD_DIR" -- $MAKEARG -C $TEST_BLD_DIR package
# Run the copy cmd to place test in bin folder
mkdir -p "$TEST_BIN_DIR"
echo "Copying $TEST_NAME to $TEST_BIN_DIR"
progressCopy "$TEST_BLD_DIR/$TEST_NAME" "$TEST_BIN_DIR"
# Run the copy cmd to place run script in utils folder
mkdir -p "$TEST_UTILS_DIR"
echo "Copying $RUN_SCRIPT to $TEST_UTILS_DIR"
progressCopy "$SCRIPT_ROOT/$RUN_SCRIPT" "$TEST_UTILS_DIR"
copy_if DEB "${CPACKGEN:-"DEB;RPM"}" "$TEST_PKG_DEB" $TEST_BLD_DIR/*.deb
copy_if RPM "${CPACKGEN:-"DEB;RPM"}" "$TEST_PKG_RPM" $TEST_BLD_DIR/*.rpm
@@ -151,7 +192,7 @@ verifyEnvSetup
case $TARGET in
(clean) clean_rocm_bandwidth_test ;;
(build) build_rocm_bandwidth_test ;;
(build) build_rocm_bandwidth_test; build_wheel "$TEST_BLD_DIR" "$PROJ_NAME" ;;
(outdir) print_output_directory ;;
(*) die "Invalid target $TARGET" ;;
esac

View File

@@ -11,6 +11,8 @@ printUsage() {
echo " -r, --release Build non-debug version rocm_smi (default is debug)"
echo " -a, --address_sanitizer Enable address sanitizer"
echo " -s, --static Build static lib (.a). build instead of dynamic/shared(.so) "
echo " -w, --wheel Creates python wheel package of rocm-smi.
It needs to be used along with -r option"
echo " -o, --outdir <pkg_type> Print path of output directory containing packages of type referred to by pkg_type"
echo " -p, --package <type> Specify packaging format"
echo " -32, Build 32b version (default is 64b)"
@@ -22,7 +24,10 @@ printUsage() {
return 0
}
# RSMI ==> deb/rpm package target
# ROCM_SMI ==> rocm_smi library target and header
# ROCM_SMI
PROJ_NAME="rsmi"
PACKAGE_ROOT="$(getPackageRoot)"
TARGET="build"
@@ -30,15 +35,18 @@ TARGET="build"
PACKAGE_LIB=$(getLibPath)
PACKAGE_INCLUDE="$(getIncludePath)"
# RSMI
RSMI_BUILD_DIR=$(getBuildPath rsmi)
RSMI_PACKAGE_DEB_DIR="$(getPackageRoot)/deb/$PROJ_NAME"
RSMI_PACKAGE_RPM_DIR="$(getPackageRoot)/rpm/$PROJ_NAME"
RSMI_BUILD_TYPE="debug"
BUILD_TYPE="Debug"
# BUILD ARGUMENTS
MAKETARGET="deb"
MAKEARG="$DASH_JAY O=$RSMI_BUILD_DIR"
RSMI_MAKE_OPTS="$DASH_JAY O=$RSMI_BUILD_DIR -C $RSMI_BUILD_DIR"
# The following should be 64 (default) 32 for 32b
ROCM_SMI_BLD_BITS=64
RSMI_PKG_NAME_ROOT="rocm-smi-lib"
RSMI_PKG_NAME="${RSMI_PKG_NAME_ROOT}${ROCM_SMI_BLD_BITS}"
@@ -46,11 +54,13 @@ SHARED_LIBS="ON"
CLEAN_OR_OUT=0;
PKGTYPE="deb"
VALID_STR=`getopt -o hcraso:p: --long help,clean,release,static,address_sanitizer,outdir:,package: -- "$@"`
#parse the arguments
VALID_STR=`getopt -o hcraswo:p: --long help,clean,release,static,wheel,address_sanitizer,outdir:,package: -- "$@"`
eval set -- "$VALID_STR"
while true ;
do
#echo "parocessing $1"
case "$1" in
(-h | --help)
printUsage ; exit 0;;
@@ -65,13 +75,15 @@ do
ADDRESS_SANITIZER=true ; shift ;;
(-s | --static)
SHARED_LIBS="OFF" ; shift ;;
(-w | --wheel)
WHEEL_PACKAGE=true ; shift ;;
(-o | --outdir)
TARGET="outdir"; PKGTYPE=$2 ; OUT_DIR_SPECIFIED=1 ; ((CLEAN_OR_OUT|=2)) ; shift 2 ;;
(-p | --package)
MAKETARGET="$2" ; shift 2;;
(-32)
ROCM_SMI_BLD_BITS="32"; shift ;;
--) shift; break;;
--) shift; break;; # end delimiter
(*)
echo " This should never come but just incase : UNEXPECTED ERROR Parm : [$1] ">&2 ; exit 20;;
esac
@@ -145,10 +157,11 @@ verifyEnvSetup
case $TARGET in
(clean) clean_rsmi ;;
(build) build_rsmi ;;
(build) build_rsmi; build_wheel "$RSMI_BUILD_DIR" "$PROJ_NAME" ;;
(outdir) print_output_directory ;;
(*) die "Invalid target $TARGET" ;;
esac
echo "Operation complete"
exit 0

View File

@@ -10,7 +10,9 @@ printUsage() {
echo " -c, --clean Removes all rocminfo build artifacts"
echo " -r, --release Build non-debug version rocminfo (default is debug)"
echo " -a, --address_sanitizer Enable address sanitizer"
echo " -s, --static Supports static CI by accepting this param & not bailing out. No effect of the param though"
echo " -s, --static Build static lib (.a). build instead of dynamic/shared(.so) "
echo " -w, --wheel Creates python wheel package of rocminfo.
It needs to be used along with -r option"
echo " -o, --outdir <pkg_type> Print path of output directory containing packages of
type referred to by pkg_type"
echo " -h, --help Prints this help"
@@ -39,7 +41,8 @@ MAKETARGET="deb"
PKGTYPE="deb"
VALID_STR=`getopt -o hcraso:g: --long help,clean,release,static,address_sanitizer,outdir:,gpu_list: -- "$@"`
#parse the arguments
VALID_STR=`getopt -o hcraswo:g: --long help,clean,release,static,wheel,address_sanitizer,outdir:,gpu_list: -- "$@"`
eval set -- "$VALID_STR"
while true ;
@@ -56,11 +59,13 @@ do
set_address_sanitizer_on ; shift ;;
(-s | --static)
SHARED_LIBS="OFF" ; shift ;;
(-w | --wheel)
WHEEL_PACKAGE=true ; shift ;;
(-o | --outdir)
TARGET="outdir"; PKGTYPE=$2 ; OUT_DIR_SPECIFIED=1 ; ((CLEAN_OR_OUT|=2)) ; shift 2 ;;
(-g | --gpu_list)
GPU_LIST="$2" ; shift 2;;
--) shift; break;;
--) shift; break;; # end delimiter
(*)
echo " This should never come but just incase : UNEXPECTED ERROR Parm : [$1] ">&2 ; exit 20;;
esac
@@ -124,7 +129,7 @@ print_output_directory() {
case $TARGET in
(clean) clean_rocminfo ;;
(build) build_rocminfo ;;
(build) build_rocminfo; build_wheel "$ROCMINFO_BUILD_DIR" "$PROJ_NAME" ;;
(outdir) print_output_directory ;;
(*) die "Invalid target $TARGET" ;;
esac

View File

@@ -1,10 +1,11 @@
#!/bin/bash
set -ex
source "$(dirname "${BASH_SOURCE[0]}")/compute_helper.sh"
source "$(dirname "${BASH_SOURCE[0]}")/compute_utils.sh"
set_component_src ROCmValidationSuite
# Internal RVS libraries need the extra RPATH
ROCM_RVS_LIB_RPATH="\$ORIGIN/.."
build_rocmvalidationsuite() {
@@ -14,6 +15,7 @@ build_rocmvalidationsuite() {
ack_and_skip_static
fi
CXX=$(set_build_variables __CXX__)
if [ "${ENABLE_ADDRESS_SANITIZER}" == "true" ]; then
set_asan_env_vars
set_address_sanitizer_on
@@ -22,12 +24,12 @@ build_rocmvalidationsuite() {
cd "${COMPONENT_SRC}"
mkdir -p "$BUILD_DIR"
init_rocm_common_cmake_params
# rocm_common_cmake_params provides the default rpath for rocm executables and libraries
# Override cmake shared linker flags, since rvs libraries requires RUNPATH - $ORIGIN:$ORIGIN/..
cmake \
"${rocm_math_common_cmake_params[@]}" \
-DFETCH_ROCMPATH_FROM_ROCMCORE=ON \
-DCMAKE_SHARED_LINKER_FLAGS_INIT="-Wl,--enable-new-dtags,--build-id=sha1,--rpath,$ROCM_LIB_RPATH:$ROCM_RVS_LIB_RPATH" \
-DRVS_BUILD_TESTS=FALSE \
-B "$BUILD_DIR" \
"$COMPONENT_SRC"
@@ -50,7 +52,7 @@ clean_rocmvalidationsuite() {
stage2_command_args "$@"
case $TARGET in
build) build_rocmvalidationsuite ;;
build) build_rocmvalidationsuite; build_wheel ;;
outdir) print_output_directory ;;
clean) clean_rocmvalidationsuite ;;
*) die "Invalid target ${TARGET}" ;;

View File

@@ -2,7 +2,7 @@
set -ex
source "$(dirname "${BASH_SOURCE[0]}")/compute_helper.sh"
source "$(dirname "${BASH_SOURCE[0]}")/compute_utils.sh"
set_component_src rocPRIM
@@ -10,12 +10,18 @@ build_rocprim() {
echo "Start build"
cd $COMPONENT_SRC
# Temporary Fix as suggested in #SWDEV-314510
if [ "${ENABLE_ADDRESS_SANITIZER}" == "true" ]; then
#Set ASAN flags
set_asan_env_vars
set_address_sanitizer_on
# ASAN packaging is not required for rocPRIM, since its header only package
# Setting the asan_cmake_params to false will disable ASAN packaging
ASAN_CMAKE_PARAMS="false"
fi
# Enable/Disable Static Flag to be used for
# Package Dependecies during static/non-static builds
SHARED_LIBS="ON"
if [ "${ENABLE_STATIC_BUILDS}" == "true" ]; then
SHARED_LIBS="OFF"
@@ -23,18 +29,13 @@ build_rocprim() {
mkdir -p "$BUILD_DIR" && cd "$BUILD_DIR"
if [ -n "$GPU_ARCHS" ]; then
GPU_TARGETS="$GPU_ARCHS"
else
GPU_TARGETS="gfx908:xnack-;gfx90a:xnack-;gfx90a:xnack+;gfx940;gfx941;gfx942;gfx1030;gfx1100;gfx1101;gfx1102;gfx1200;gfx1201"
fi
#Removed GPU ARCHS from here as it will be part of compute_utils.sh ROCMOPS-7302 & ROCMOPS-8091
init_rocm_common_cmake_params
CXX="${ROCM_PATH}/bin/hipcc" \
CXX=$(set_build_variables __HIP_CC__) \
cmake \
${LAUNCHER_FLAGS} \
"${rocm_math_common_cmake_params[@]}" \
-DAMDGPU_TARGETS=${GPU_TARGETS} \
-DBUILD_BENCHMARK=OFF \
-DBUILD_TEST=ON \
-DBUILD_SHARED_LIBS=$SHARED_LIBS \
@@ -46,7 +47,7 @@ build_rocprim() {
cmake --build "$BUILD_DIR" -- package
rm -rf _CPack_Packages/ && find -name '*.o' -delete
mkdir -p $PACKAGE_DIR && cp ${BUILD_DIR}/*.${PKGTYPE} $PACKAGE_DIR
copy_if "${PKGTYPE}" "${CPACKGEN:-"DEB;RPM"}" "${PACKAGE_DIR}" "${BUILD_DIR}"/*."${PKGTYPE}"
show_build_cache_stats
}
@@ -60,7 +61,7 @@ clean_rocprim() {
stage2_command_args "$@"
case $TARGET in
build) build_rocprim ;;
build) build_rocprim; build_wheel ;;
outdir) print_output_directory ;;
clean) clean_rocprim ;;
*) die "Invalid target $TARGET" ;;

View File

@@ -26,6 +26,7 @@ printUsage() {
return 0
}
## Build environment variables
API_NAME="rocprofiler-compute"
PROJ_NAME="$API_NAME"
LIB_NAME="lib${API_NAME}"
@@ -43,11 +44,13 @@ CLEAN_OR_OUT=0;
MAKETARGET="deb"
PKGTYPE="deb"
#parse the arguments
VALID_STR=$(getopt -o hcraso:p:w --long help,clean,release,static,address_sanitizer,outdir:,package:,wheel -- "$@")
eval set -- "$VALID_STR"
while true ;
do
#echo "parocessing $1"
case "$1" in
-h | --help)
printUsage ; exit 0;;
@@ -66,7 +69,7 @@ do
ack_and_skip_static ;;
-w | --wheel)
WHEEL_PACKAGE=true ; shift ;;
--) shift; break;;
--) shift; break;; # end delimiter
*)
echo " This should never come but just incase : UNEXPECTED ERROR Parm : [$1] ">&2 ; exit 20;;
esac
@@ -108,13 +111,14 @@ build() {
cmake \
$(rocm_cmake_params) \
$(rocm_common_cmake_params) \
${GEN_NINJA} \
-DCHECK_PYTHON_DEPS=NO \
-DPYTHON_DEPS=${BUILD_DIR}/python-libs \
"$ROCPROFILER_COMPUTE_ROOT"
-S "$ROCPROFILER_COMPUTE_ROOT"
fi
make $MAKE_OPTS
make $MAKE_OPTS install
make $MAKE_OPTS package
ninja $MAKE_OPTS
ninja $MAKE_OPTS install
ninja $MAKE_OPTS package
copy_if DEB "${CPACKGEN:-"DEB;RPM"}" "$PACKAGE_DEB" "$BUILD_DIR/${API_NAME}"*.deb
copy_if RPM "${CPACKGEN:-"DEB;RPM"}" "$PACKAGE_RPM" "$BUILD_DIR/${API_NAME}"*.rpm
@@ -136,7 +140,7 @@ verifyEnvSetup
case "$TARGET" in
(clean) clean ;;
(build) build ;;
(build) build; build_wheel "$BUILD_DIR" "$PROJ_NAME" ;;
(outdir) print_output_directory ;;
(*) die "Invalid target $TARGET" ;;
esac

View File

@@ -12,6 +12,7 @@ printUsage() {
echo " -p, --package <type> Specify packaging format"
echo " -r, --release Make a release build instead of a debug build"
echo " -a, --address_sanitizer Enable address sanitizer"
echo " -w, --wheel Creates python wheel package of rocprofiler-register. It needs to be used along with -r option"
echo " -o, --outdir <pkg_type> Print path of output directory containing packages of
type referred to by pkg_type"
echo " -h, --help Prints this help"
@@ -24,6 +25,7 @@ printUsage() {
return 0
}
## Build environment variables
API_NAME="rocprofiler-register"
PROJ_NAME="$API_NAME"
LIB_NAME="lib${API_NAME}"
@@ -44,11 +46,13 @@ MAKETARGET="deb"
PKGTYPE="deb"
VALID_STR=`getopt -o hcraso:p: --long help,clean,release,static,address_sanitizer,outdir:,package: -- "$@"`
#parse the arguments
VALID_STR=`getopt -o hcraswo:p: --long help,clean,release,static,address_sanitizer,wheeloutdir:,package: -- "$@"`
eval set -- "$VALID_STR"
while true ;
do
#echo "parocessing $1"
case "$1" in
(-h | --help)
printUsage ; exit 0;;
@@ -61,11 +65,13 @@ do
set_address_sanitizer_on ; shift ;;
(-s | --static)
SHARED_LIBS="OFF" ; shift ;;
(-w | --wheel)
WHEEL_PACKAGE=true ; shift ;;
(-o | --outdir)
TARGET="outdir"; PKGTYPE=$2 ; OUT_DIR_SPECIFIED=1 ; ((CLEAN_OR_OUT|=2)) ; shift 2 ;;
(-p | --package)
MAKETARGET="$2" ; shift 2;;
--) shift; break;;
--) shift; break;; # end delimiter
(*)
echo " This should never come but just incase : UNEXPECTED ERROR Parm : [$1] ">&2 ; exit 20;;
esac
@@ -107,9 +113,9 @@ build() {
"$ROCPROFILER_REGISTER_ROOT"
popd
fi
make $MAKE_OPTS
make $MAKE_OPTS install
make $MAKE_OPTS package
cmake --build "$BUILD_DIR" -- $MAKE_OPTS
cmake --build "$BUILD_DIR" -- $MAKE_OPTS install
cmake --build "$BUILD_DIR" -- $MAKE_OPTS package
copy_if DEB "${CPACKGEN:-"DEB;RPM"}" "$PACKAGE_DEB" "$BUILD_DIR/${API_NAME}"*.deb
copy_if RPM "${CPACKGEN:-"DEB;RPM"}" "$PACKAGE_RPM" "$BUILD_DIR/${API_NAME}"*.rpm
@@ -131,7 +137,7 @@ verifyEnvSetup
case "$TARGET" in
(clean) clean ;;
(build) build ;;
(build) build; build_wheel "$BUILD_DIR" "$PROJ_NAME" ;;
(outdir) print_output_directory ;;
(*) die "Invalid target $TARGET" ;;
esac

View File

@@ -26,6 +26,7 @@ printUsage() {
return 0
}
## Build environment variables
API_NAME="rocprofiler-sdk"
PROJ_NAME="$API_NAME"
LIB_NAME="lib${API_NAME}"
@@ -35,8 +36,8 @@ PACKAGE_ROOT="$(getPackageRoot)"
PACKAGE_LIB="$(getLibPath)"
PACKAGE_INCLUDE="$(getIncludePath)"
BUILD_DIR="$(getBuildPath $API_NAME)"
PACKAGE_DEB="$(getPackageRoot)/deb/$API_NAME"
PACKAGE_RPM="$(getPackageRoot)/rpm/$API_NAME"
PACKAGE_DEB="$PACKAGE_ROOT/deb/$PROJ_NAME"
PACKAGE_RPM="$PACKAGE_ROOT/rpm/$PROJ_NAME"
PACKAGE_PREFIX="$ROCM_INSTALL_PATH"
BUILD_TYPE="Debug"
MAKE_OPTS="$DASH_JAY"
@@ -44,14 +45,16 @@ SHARED_LIBS="ON"
CLEAN_OR_OUT=0
MAKETARGET="deb"
PKGTYPE="deb"
# Handling GPU Targets for HSACO and HIP Executables
GPU_LIST="gfx900;gfx906;gfx908;gfx90a;gfx940;gfx941;gfx942;gfx1030;gfx1031;gfx1100;gfx1101;gfx1102"
ASAN=0
#parse the arguments
VALID_STR=$(getopt -o hcrawso:p: --long help,clean,release,static,address_sanitizer,wheel,outdir:,package: -- "$@")
eval set -- "$VALID_STR"
while true; do
#echo "parocessing $1"
case "$1" in
-h | --help)
printUsage
@@ -194,7 +197,7 @@ verifyEnvSetup
case "$TARGET" in
clean) clean ;;
build) build_rocprofiler-sdk ;;
build) build_rocprofiler-sdk; build_wheel "$BUILD_DIR" "$PROJ_NAME" ;;
outdir) print_output_directory ;;
*) die "Invalid target $TARGET" ;;
esac

View File

@@ -26,6 +26,7 @@ printUsage() {
return 0
}
## Build environment variables
API_NAME="rocprofiler-systems"
PROJ_NAME="$API_NAME"
LIB_NAME="lib${API_NAME}"
@@ -33,11 +34,11 @@ TARGET="build"
MAKETARGET="deb"
PACKAGE_ROOT="$(getPackageRoot)"
PACKAGE_LIB="$(getLibPath)"
# PACKAGE_INCLUDE="$(getIncludePath)"
BUILD_DIR="$(getBuildPath $API_NAME)"
PACKAGE_DEB="$(getPackageRoot)/deb/$API_NAME"
PACKAGE_RPM="$(getPackageRoot)/rpm/$API_NAME"
# PACKAGE_PREFIX="$ROCM_INSTALL_PATH"
BUILD_TYPE="Debug"
MAKE_OPTS="-j 8"
SHARED_LIBS="ON"
@@ -46,6 +47,7 @@ MAKETARGET="deb"
PKGTYPE="deb"
ASAN=0
#parse the arguments
VALID_STR=$(getopt -o hcraso:p:w --long help,clean,release,address_sanitizer,static,outdir:,package:,wheel -- "$@")
eval set -- "$VALID_STR"
@@ -121,6 +123,10 @@ clean() {
build_rocprofiler_systems() {
echo "Building $PROJ_NAME"
if [ "$DISTRO_ID" = "mariner-2.0" ] || [ "$DISTRO_ID" = "azurelinux-3.0" ]; then
echo "Skip make and uploading packages for \"$PROJ_NAME\" on \"${DISTRO_ID}\" distro"
exit 0
fi
if [ $ASAN == 1 ]; then
echo "Skip make and uploading packages for rocprofiler-systems on ASAN build"
@@ -141,9 +147,9 @@ build_rocprofiler_systems() {
echo "Updating submodules"
git submodule init
# copy the new URL to your local config
git submodule sync --recursive
# force update the submodule from the new URL
git submodule update --init --recursive --force
echo "Updated submodule status"
@@ -228,7 +234,7 @@ verifyEnvSetup
case "$TARGET" in
clean) clean ;;
build) build_rocprofiler_systems ;;
build) build_rocprofiler_systems; build_wheel "$BUILD_DIR" "$PROJ_NAME" ;;
outdir) print_output_directory ;;
*) die "Invalid target $TARGET" ;;
esac

View File

@@ -12,6 +12,8 @@ printUsage() {
echo " -p, --package <type> Specify packaging format"
echo " -r, --release Make a release build instead of a debug build"
echo " -a, --address_sanitizer Enable address sanitizer"
echo " -w, --wheel Creates python wheel package of roc-profiler.
It needs to be used along with -r option"
echo " -o, --outdir <pkg_type> Print path of output directory containing packages of
type referred to by pkg_type"
echo " -h, --help Prints this help"
@@ -24,6 +26,7 @@ printUsage() {
return 0
}
## Build environment variables
API_NAME="rocprofiler"
PROJ_NAME="$API_NAME"
LIB_NAME="lib${API_NAME}"
@@ -33,8 +36,8 @@ PACKAGE_ROOT="$(getPackageRoot)"
PACKAGE_LIB="$(getLibPath)"
PACKAGE_INCLUDE="$(getIncludePath)"
BUILD_DIR="$(getBuildPath $API_NAME)"
PACKAGE_DEB="$(getPackageRoot)/deb/$API_NAME"
PACKAGE_RPM="$(getPackageRoot)/rpm/$API_NAME"
PACKAGE_DEB="$PACKAGE_ROOT/deb/$PROJ_NAME"
PACKAGE_RPM="$PACKAGE_ROOT/rpm/$PROJ_NAME"
PACKAGE_PREFIX="$ROCM_INSTALL_PATH"
BUILD_TYPE="Debug"
MAKE_OPTS="$DASH_JAY -C $BUILD_DIR"
@@ -42,12 +45,15 @@ SHARED_LIBS="ON"
CLEAN_OR_OUT=0
MAKETARGET="deb"
PKGTYPE="deb"
# Handling GPU Targets for HSACO and HIP Executables
GPU_LIST="gfx900,gfx906,gfx908,gfx90a,gfx940,gfx941,gfx942,gfx1030,gfx1031,gfx1100,gfx1101,gfx1102,gfx1200,gfx1201"
#parse the arguments
VALID_STR=$(getopt -o hcraswo:p: --long help,clean,release,static,wheel,address_sanitizer,outdir:,package: -- "$@")
eval set -- "$VALID_STR"
while true; do
#echo "parocessing $1"
case "$1" in
-h | --help)
printUsage
@@ -69,6 +75,9 @@ while true; do
;;
-s | --static)
ack_and_skip_static
;;
-w | --wheel)
WHEEL_PACKAGE=true
shift
;;
-o | --outdir)
@@ -85,7 +94,7 @@ while true; do
--)
shift
break
;;
;; # end delimiter
*)
echo " This should never come but just incase : UNEXPECTED ERROR Parm : [$1] " >&2
exit 20
@@ -115,9 +124,6 @@ clean() {
build_rocprofiler() {
echo "Building $PROJ_NAME"
sed -i 's/set(CPACK_GENERATOR "DEB" "RPM" "TGZ")/set(CPACK_GENERATOR "DEB" "TGZ")/' "${ROCPROFILER_ROOT}/CMakeLists.txt"
PACKAGE_CMAKE="$(getCmakePath)"
if [ ! -d "$BUILD_DIR" ]; then
mkdir -p "$BUILD_DIR"
@@ -173,7 +179,7 @@ verifyEnvSetup
case "$TARGET" in
clean) clean ;;
build) build_rocprofiler ;;
build) build_rocprofiler; build_wheel "$BUILD_DIR" "$PROJ_NAME" ;;
outdir) print_output_directory ;;
*) die "Invalid target $TARGET" ;;
esac

View File

@@ -1,5 +1,7 @@
#!/bin/bash
# Build thunk, rocr runtime, rocrtst, and kfdtest.
# This replaces the build scripts for those components.
source "$(dirname "${BASH_SOURCE}")/compute_utils.sh"
PROJ_NAME="rocr"
@@ -36,6 +38,8 @@ build_rocr_runtime() {
echo "Build ROCr Runtime"
echo "$ROCR_ROOT"
# Set pkg config path for Static builds
# so that static libraries of drm and libdrm_amdgpu will get linked
if [ "$shared_libs" == "OFF" ]; then
install_drmStatic_lib
fi
@@ -73,7 +77,9 @@ build_rocrtst() {
rocrtst_build_type="debug"
mkdir -p "$rocrtst_build_dir"
pushd "$rocrtst_build_dir" || { echo "Failed to pushd into $rocrtst_build_dir"; exit 1; }
# BUILD_TYPE set to RelWithDebInfo causes rocm_common_cmake_params
# to set some CPACK_RPM and _DEBIAN variables to be set which causes
# problems for rocrtst at the packaging stage. Leave unset for now.
BUILD_TYPE=
if [[ $gpu_list ]]; then
cmake -DTARGET_DEVICES="$gpu_list" \
@@ -92,7 +98,7 @@ build_rocrtst() {
-DEMULATOR_BUILD="$emulator_build" \
"$rocrtst_src_root"
else
$ADDRESS_SANITIZER cmake -DROCRTST_BLD_TYPE="$rocrtst_build_type" \
cmake -DROCRTST_BLD_TYPE="$rocrtst_build_type" \
-DCMAKE_VERBOSE_MAKEFILE=1 \
-DBUILD_SHARED_LIBS="$shared_libs" \
-DCMAKE_PREFIX_PATH="$ROCM_INSTALL_PATH;$ROCM_INSTALL_PATH/llvm" \
@@ -112,7 +118,7 @@ build_rocrtst() {
cmake --build . -- $DASH_JAY
cmake --build . -- rocrtst_kernels
# Packaging is not required, so || true
cmake --build . -- package || true
mkdir -p "$rocrtst_package"
@@ -138,6 +144,9 @@ build_rocrtst() {
}
# first define a function so I can use "set --" to overwrite the positional args.
# Not needed in this case, but better to be safe...
# Needed for wildcard globbing since we make 2 kfdtest RPMs now
file_exists(){
set -- $1
[ -e "$1" ]
@@ -149,6 +158,7 @@ build_kfdtest() {
mkdir -p "$kfdtest_build_dir"
pushd "$kfdtest_build_dir" || { echo "Failed to pushd into $kfdtest_build_dir"; exit 1; }
# LDFLAGS will be set only for address sanitizer build
cmake \
-DCMAKE_BUILD_TYPE="$build_type" \
-DBUILD_SHARED_LIBS="$shared_libs" \
@@ -164,7 +174,8 @@ build_kfdtest() {
-DCMAKE_EXE_LINKER_FLAGS="-Wl,--enable-new-dtags -Wl,--rpath,$ROCM_RPATH $LDFLAGS" \
"$kfdtest_src_root"
cmake --build . -- $DASH_JAY
# Putting || true to ensure backwards compatibility for branches
# without the CPACK change to KFDTest
cmake --build . -- package || true
popd
@@ -189,12 +200,13 @@ build_kfdtest() {
clean_rocr_runtime() {
echo "Cleaning ROCr Runtime"
# clean libhsakmt
rm -f $package_lib/libhsakmt.so*
rm -f $package_lib/libhsakmt.a
rm -f $package_lib/libhsakmt-staticdrm.a
rm -f $package_include/hsakmt*.h $package_include/linux/kfd_ioctl.h
# clean rocr
rm -rf "${runtime_build_dir}"
rm -f "$package_root"/lib/libhsa-runtime*
rm -rf "$package_root/lib/cmake/hsa-runtime64"
@@ -204,6 +216,7 @@ clean_rocr_runtime() {
rm -f "$package_root_rpm"/hsa-rocr*.rpm
rm -f "$package_root_rpm"/hsa_rocr*.whl
# Remove when switching to flat directory layout.
rm -rf "$PACKAGE_ROOT/hsa"
clean_rocrtst
@@ -239,6 +252,7 @@ print_output_directory() {
exit
}
# Common variables
target="build"
kfdtest_target="yes"
@@ -249,37 +263,46 @@ package_root="$(getPackageRoot)"
package_root_deb="${package_root}/deb/$PROJ_NAME"
package_root_rpm="${package_root}/rpm/$PROJ_NAME"
# NOT NEEDED? PACKAGE_SRC="$(getSrcPath)"
package_lib="$(getLibPath)"
# package_bin="$(getBinPath)"
package_include="$(getIncludePath)"
runtime_build_dir="$(getBuildPath runtime)"
# ROCR_DEV_BUILD_DIR="$(getBuildPath hsa-rocr-dev)"
# PREFIX_PATH="$package_root"
BUILD_TYPE="Debug"
shared_libs="ON"
clean_or_out=0;
maketarget="deb"
pkgtype="deb"
WHEEL_PACKAGE=false
# ROCt variables
thunk_defines_string=
roct_build_dir="${runtime_build_dir}/libhsakmt"
# ROCr variables
rocr_defines_string=
rocr_build_dir="${runtime_build_dir}/$PROJ_NAME"
# rocrtst variables
rocrtst_package="$(getBinPath)/rocrtst_tests"
rocrtst_build_dir="${runtime_build_dir}/rocrtst"
rocrtst_src_root="$ROCRTST_ROOT/suites/test_common"
emulator_build=0
# kfdtest variables
# kfdtest_defines_string=
kfdtest_src_root="$ROCR_ROOT/libhsakmt/tests/kfdtest"
kfdtest_bin="$(getBinPath)/kfdtest"
package_utils="$(getUtilsPath)"
# May need to handle putting different components in different build directories (below)
kfdtest_build_dir=${runtime_build_dir}/kfdtest
unset HIP_DEVICE_LIB_PATH
unset ROCM_PATH
#parse the arguments
valid_str=$(getopt -o hcraswnkteg:o: --long help,clean,release,static,wheel,address_sanitizer,norocr,nokfdtest,norocrtst,emulator,gpu_list:,outdir: -- "$@")
eval set -- "$valid_str"
@@ -339,22 +362,26 @@ checkchild(){
die "$2 failed with exit code $?"
fi
}
# if [ "$target" != "clean" ]; then
# if [ "$rocrtst_target" == "yes" ]; then
# build_rocrtst &
# else
# true & # Dummy build_rocrtst
# fi
# rocrtst_pid=$!
# if [ "$kfdtest_target" == "yes" ]; then
# build_kfdtest &
# else
# true & # Dummy build_kfdtest
# fi
# kfdtest_pid=$!
# checkchild $kfdtest_pid kfdtest
# checkchild $rocrtst_pid rocrtst
# fi
# Run the build for rocrtst and kfdtest in parallel
if [ "$target" != "clean" ]; then
if [ "$rocrtst_target" == "yes" ]; then
build_rocrtst &
else
true & # Dummy build_rocrtst
fi
rocrtst_pid=$!
if [ "$kfdtest_target" == "yes" ]; then
build_kfdtest &
else
true & # Dummy build_kfdtest
fi
kfdtest_pid=$!
checkchild $kfdtest_pid kfdtest
checkchild $rocrtst_pid rocrtst
fi
# build wheel package
if [[ "$target" == "build" ]]; then
build_wheel "$rocr_build_dir" "$PROJ_NAME"
fi
echo "Operation complete"

View File

@@ -11,6 +11,8 @@ printUsage() {
echo " -p, --package <type> Specify packaging format"
echo " -r, --release Make a release build instead of a debug build"
echo " -a, --address_sanitizer Enable address sanitizer"
echo " -w, --wheel Creates python wheel package of rocr-debug-agent.
It needs to be used along with -r option"
echo " -o, --outdir <pkg_type> Print path of output directory containing packages of
type referred to by pkg_type"
echo " -h, --help Prints this help"
@@ -23,6 +25,7 @@ printUsage() {
return 0
}
## Build environment variables
API_NAME=rocm-debug-agent
PROJ_NAME=$API_NAME
LIB_NAME=lib${API_NAME}.so
@@ -33,12 +36,13 @@ PACKAGE_BIN="$(getBinPath)"
PACKAGE_LIB=$(getLibPath)
PACKAGE_INCLUDE=$(getIncludePath)
BUILD_DIR=$(getBuildPath $API_NAME)
PACKAGE_DEB=$(getPackageRoot)/deb/$API_NAME
PACKAGE_RPM=$(getPackageRoot)/rpm/$API_NAME
PACKAGE_DEB=$PACKAGE_ROOT/deb/$PROJ_NAME
PACKAGE_RPM=$PACKAGE_ROOT/rpm/$PROJ_NAME
PACKAGE_PREFIX=$ROCM_INSTALL_PATH
BUILD_TYPE=Debug
MAKE_OPTS="$DASH_JAY -C"
## Test variables
TEST_PACKAGE_DIR="$(getBinPath)/rocm-debug-agent-test"
PACKAGE_UTILS=$(getUtilsPath)
@@ -54,11 +58,13 @@ MAKETARGET="deb"
PKGTYPE="deb"
VALID_STR=`getopt -o hcraso:p: --long help,clean,release,static,address_sanitizer,outdir:,package: -- "$@"`
#parse the arguments
VALID_STR=`getopt -o hcraswo:p: --long help,clean,release,static,wheel,address_sanitizer,outdir:,package: -- "$@"`
eval set -- "$VALID_STR"
while true ;
do
#echo "parocessing $1"
case "$1" in
(-h | --help)
printUsage ; exit 0;;
@@ -71,11 +77,13 @@ do
set_address_sanitizer_on ; shift ;;
(-s | --static)
ack_and_skip_static ;;
(-w | --wheel)
WHEEL_PACKAGE=true ; shift ;;
(-o | --outdir)
TARGET="outdir"; PKGTYPE=$2 ; OUT_DIR_SPECIFIED=1 ; ((CLEAN_OR_OUT|=2)) ; shift 2 ;;
(-p | --package)
MAKETARGET="$2" ; shift 2;;
--) shift; break;;
--) shift; break;; # end delimiter
(*)
echo " This should never come but just incase : UNEXPECTED ERROR Parm : [$1] ">&2 ; exit 20;;
esac
@@ -102,8 +110,10 @@ clean() {
build() {
echo "Building $PROJ_NAME"
# The cmake path is different for asan and non-asan builds.
# Fetch after getting build type. Default will be non-asan build
PACKAGE_CMAKE="$(getCmakePath)"
# If rocm is installed to an unconventional location, --rocm-path needs to be set.
export HIPCC_COMPILE_FLAGS_APPEND="--rocm-path=$ROCM_PATH"
if [ ! -d "$BUILD_DIR" ]; then
mkdir -p "$BUILD_DIR"
@@ -127,6 +137,13 @@ build() {
copy_if DEB "${CPACKGEN:-"DEB;RPM"}" "${PACKAGE_DEB}" "$BUILD_DIR/${API_NAME}"*.deb
copy_if RPM "${CPACKGEN:-"DEB;RPM"}" "${PACKAGE_RPM}" "$BUILD_DIR/${API_NAME}"*.rpm
mkdir -p "$PACKAGE_UTILS"
progressCopy "$SCRIPT_ROOT/run_rocr_debug_agent_test.sh" "$PACKAGE_UTILS"
## Copy run test py script
echo "copying run-test.py to $PACKAGE_BIN"
progressCopy "$ROCR_DEBUG_AGENT_ROOT/test/run-test.py" "$PACKAGE_BIN"
}
print_output_directory() {
@@ -145,7 +162,7 @@ verifyEnvSetup
case $TARGET in
(clean) clean ;;
(build) build ;;
(build) build; build_wheel "$BUILD_DIR" "$PROJ_NAME" ;;
(outdir) print_output_directory ;;
(*) die "Invalid target $target" ;;
esac

View File

@@ -1,7 +1,7 @@
#!/bin/bash
set -ex
source "$(dirname "${BASH_SOURCE[0]}")/compute_helper.sh"
source "$(dirname "${BASH_SOURCE[0]}")/compute_utils.sh"
set_component_src rocRAND
@@ -13,31 +13,37 @@ build_rocrand() {
SHARED_LIBS="OFF"
fi
#Removed GPU ARCHS from here as it will be part of compute_utils.sh ROCMOPS-7302 & ROCMOPS-8091
if [ "${ENABLE_ADDRESS_SANITIZER}" == "true" ]; then
set_asan_env_vars
set_address_sanitizer_on
set_asan_env_vars
set_address_sanitizer_on
# updating GPU_ARCHS for ASAN build to supported gpu arch only SWDEV-479178
#GPU_ARCHS="gfx90a:xnack+;gfx942:xnack+"#This will be part of compute_utils.sh ROCMOPS-7302 & ROCMOPS-8091
fi
cd $COMPONENT_SRC && mkdir "$BUILD_DIR"
git config --global --add safe.directory "$COMPONENT_SRC"
# Rename the remote set by the repo tool to origin as
# git submodule update looks for the remote origin.
remote_name=$(git remote show | head -n 1)
echo "remote name: $remote_name"
[ "$remote_name" == "origin" ] || git remote rename "$remote_name" origin
git remote -v
git submodule update --init --force
if [ -n "$GPU_ARCHS" ]; then
GPU_TARGETS="$GPU_ARCHS"
else
GPU_TARGETS="gfx908:xnack-;gfx90a:xnack-;gfx90a:xnack+;gfx940;gfx941;gfx942;gfx1030;gfx1100;gfx1101"
# if GPU_ENABLE_GPU_ARCHARCH is set in env by Job parameter ENABLE_GPU_ARCH, then set GFX_ARCH to that value. This will override any of the case values above
if [ -n "$ENABLE_GPU_ARCH" ]; then
#setting gfx arch as part of rocm_common_cmake_params
set_gpu_arch "${ENABLE_GPU_ARCH}"
fi
init_rocm_common_cmake_params
CXX=$(set_build_variables CXX)\
CXX=$(set_build_variables __CXX__)\
cmake \
${LAUNCHER_FLAGS} \
"${rocm_math_common_cmake_params[@]}" \
-DBUILD_SHARED_LIBS=$SHARED_LIBS \
-DAMDGPU_TARGETS=${GPU_TARGETS} \
-DBUILD_TEST=ON \
-DBUILD_BENCHMARK=ON \
-DBUILD_CRUSH_TEST=ON \
@@ -53,7 +59,7 @@ build_rocrand() {
cmake --build "$BUILD_DIR" -- package
rm -rf _CPack_Packages/ && find -name '*.o' -delete
mkdir -p $PACKAGE_DIR && cp ${BUILD_DIR}/*.${PKGTYPE} $PACKAGE_DIR
copy_if "${PKGTYPE}" "${CPACKGEN:-"DEB;RPM"}" "${PACKAGE_DIR}" "${BUILD_DIR}"/*."${PKGTYPE}"
show_build_cache_stats
}
@@ -67,7 +73,7 @@ clean_rocrand() {
stage2_command_args "$@"
case $TARGET in
build) build_rocrand ;;
build) build_rocrand; build_wheel ;;
outdir) print_output_directory ;;
clean) clean_rocrand ;;
*) die "Invalid target $TARGET" ;;

View File

@@ -42,7 +42,7 @@ PKGTYPE="deb"
#parse the arguments
VALID_STR=`getopt -o hcrao:seg: --long help,clean,release,outdir:,static,address_sanitizer,emulator,gpu_list: -- "$@"`
VALID_STR=`getopt -o hcrawo:seg: --long help,clean,release,outdir:,static,wheel,address_sanitizer,emulator,gpu_list: -- "$@"`
eval set -- "$VALID_STR"
while true ;
@@ -61,6 +61,8 @@ do
exit ;;
(-s | --static)
ack_and_skip_static ;;
(-w | --wheel)
echo "wheel build option accepted and ignored" ; shift ;;
(-e | --emulator )
EMULATOR_BUILD=1 ; ((CLEAN_OR_OUT|=3)) ; shift ;;
(-g | --gpu_list )

View File

@@ -0,0 +1,88 @@
#!/bin/bash
set -ex
source "$(dirname "${BASH_SOURCE[0]}")/compute_utils.sh"
set_component_src rocSHMEM
build_rocshmem() {
if [ "${ENABLE_ADDRESS_SANITIZER}" == "true" ]; then
echo "Skip building rocSHMEM becasue of Address Sanitizer"
return 0
fi
if [ "${ENABLE_STATIC_BUILDS}" == "true" ]; then
ack_and_skip_static
fi
echo "Start build rocSHMEM"
#Build step
cd $COMPONENT_SRC
#PREREQ STEPS step
# Install OMPI + UCC + UCX
export _ROCM_DIR=$ROCM_INSTALL_PATH
mkdir -p "$BUILD_DIR"/rocshmem
export BUILD_DIR
export MPI_HOME=$BUILD_DIR/install/ompi/
# Update PATH and LD_LIBRARY_PATH
# Change to your location, these will be deleted in install_dependencies.sh
export PATH="$BUILD_DIR"/install/ucx/bin:$PATH
export PATH="$BUILD_DIR"/install/ucc/bin:$PATH
export PATH="$BUILD_DIR"/install//ompi/bin:$PATH
export LD_LIBRARY_PATH="$BUILD_DIR"/install/ucx/lib:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH="$BUILD_DIR"/install/ucc/lib:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH="$BUILD_DIR"/install/ompi/lib:$LD_LIBRARY_PATH
$COMPONENT_SRC/scripts/install_dependencies.sh
cd "$BUILD_DIR"/rocshmem
init_rocm_common_cmake_params
CXX="$ROCM_ROOT"/bin/hipcc \
cmake "${rocm_math_common_cmake_params[@]}"\
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX=$ROCM_INSTALL_PATH \
-DCMAKE_VERBOSE_MAKEFILE=OFF \
-DDEBUG=OFF \
-DPROFILE=OFF \
-DUSE_GPU_IB=OFF \
-DUSE_RO=OFF \
-DUSE_DC=OFF \
-DUSE_IPC=ON \
-DUSE_COHERENT_HEAP=ON \
-DUSE_THREADS=OFF \
-DUSE_WF_COAL=OFF \
-DUSE_SINGLE_NODE=ON \
-DUSE_HOST_SIDE_HDP_FLUSH=OFF \
$COMPONENT_SRC
cmake --build "$BUILD_DIR"/rocshmem -- -j${PROC}
cmake --build "$BUILD_DIR"/rocshmem -- install
cmake --build "$BUILD_DIR"/rocshmem -- package
rm -rf _CPack_Packages/ && find -name '*.o' -delete
copy_if "${PKGTYPE}" "${CPACKGEN:-"deb;rpm"}" "${PACKAGE_DIR}" "${BUILD_DIR}"/rocshmem/*."${PKGTYPE}"
show_build_cache_stats
}
clean_rocshmem() {
echo "Cleaning rocSHMEM build directory: ${BUILD_DIR} ${PACKAGE_DIR}"
rm -rf "$BUILD_DIR" "$PACKAGE_DIR"
echo "Done!"
}
stage2_command_args "$@"
case $TARGET in
build) build_rocshmem; build_wheel ;;
outdir) print_output_directory ;;
clean) clean_rocshmem ;;
*) die "Invalid target $TARGET" ;;
esac

View File

@@ -2,7 +2,7 @@
set -ex
source "$(dirname "${BASH_SOURCE[0]}")/compute_helper.sh"
source "$(dirname "${BASH_SOURCE[0]}")/compute_utils.sh"
set_component_src rocSOLVER
@@ -15,39 +15,38 @@ build_rocsolver() {
SHARED_LIBS="OFF"
fi
EXTRA_TESTS="ON"
if [ "${ENABLE_ADDRESS_SANITIZER}" == "true" ]; then
set_asan_env_vars
set_address_sanitizer_on
set_asan_env_vars
set_address_sanitizer_on
rebuild_lapack
EXTRA_TESTS="OFF"
# updating GPU_ARCHS for ASAN build to supported gpu arch only SWDEV-479178
#GPU_ARCHS="gfx90a:xnack+;gfx942:xnack+"#This will be part of compute_utils.sh ROCMOPS-7302 & ROCMOPS-8091
fi
cd $COMPONENT_SRC
mkdir -p "$BUILD_DIR" && cd "$BUILD_DIR"
if [ "${ENABLE_ADDRESS_SANITIZER}" == "true" ]; then
rebuild_lapack
fi
if [ -n "$GPU_ARCHS" ]; then
GPU_TARGETS="$GPU_ARCHS"
else
GPU_TARGETS="gfx900;gfx906:xnack-;gfx908:xnack-;gfx90a:xnack+;gfx90a:xnack-;gfx940;gfx941;gfx942;gfx1030;gfx1100;gfx1101;gfx1102;gfx1200;gfx1201"
# if ENABLE_GPU_ARCH is set in env by Job parameter ENABLE_GPU_ARCH, then set GFX_ARCH to that value. This will override any of the case values above
if [ -n "$ENABLE_GPU_ARCH" ]; then
#setting gfx arch as part of rocm_common_cmake_params
set_gpu_arch "${ENABLE_GPU_ARCH}"
fi
init_rocm_common_cmake_params
CXX="${ROCM_PATH}/bin/hipcc" \
CXX=$(set_build_variables __HIP_CC__) \
cmake \
${LAUNCHER_FLAGS} \
"${rocm_math_common_cmake_params[@]}" \
-DBUILD_SHARED_LIBS=$SHARED_LIBS \
-Drocblas_DIR="${ROCM_PATH}/rocblas/lib/cmake/rocblas" \
-DAMDGPU_TARGETS="${GPU_TARGETS}" \
-DBUILD_CLIENTS_TESTS=ON \
-DBUILD_ADDRESS_SANITIZER="${ADDRESS_SANITIZER}" \
-DBUILD_CLIENTS_BENCHMARKS=ON \
-DBUILD_CLIENTS_SAMPLES=ON \
-DBUILD_TESTING=ON \
-DBUILD_CLIENTS_EXTRA_TESTS=ON \
-DBUILD_CLIENTS_EXTRA_TESTS="${EXTRA_TESTS}" \
"$COMPONENT_SRC"
cmake --build "$BUILD_DIR" -- -j${PROC}
@@ -69,7 +68,7 @@ clean_rocsolver() {
stage2_command_args "$@"
case $TARGET in
build) build_rocsolver ;;
build) build_rocsolver; build_wheel ;;
outdir) print_output_directory ;;
clean) clean_rocsolver ;;
*) die "Invalid target $TARGET" ;;

View File

@@ -1,21 +1,20 @@
#!/bin/bash
set -ex
source "$(dirname "${BASH_SOURCE[0]}")/compute_helper.sh"
source "$(dirname "${BASH_SOURCE[0]}")/compute_utils.sh"
PATH=${ROCM_PATH}/bin:$PATH
set_component_src rocSPARSE
build_rocsparse() {
echo "Start build"
cd $COMPONENT_SRC
if [ "${ENABLE_ADDRESS_SANITIZER}" == "true" ]; then
set_asan_env_vars
set_address_sanitizer_on
set_asan_env_vars
set_address_sanitizer_on
# updating GPU_ARCHS for ASAN build to supported gpu arch only SWDEV-479178
#GPU_ARCHS="gfx90a:xnack+;gfx942:xnack+"#This will be part of compute_utils.sh ROCMOPS-7302 & ROCMOPS-8091
fi
SHARED_LIBS="ON"
if [ "${ENABLE_STATIC_BUILDS}" == "true" ]; then
SHARED_LIBS="OFF"
@@ -25,19 +24,17 @@ build_rocsparse() {
mkdir -p "$BUILD_DIR" && cd "$BUILD_DIR"
if [ -n "$GPU_ARCHS" ]; then
GPU_TARGETS="$GPU_ARCHS"
else
GPU_TARGETS="gfx900;gfx906:xnack-;gfx908:xnack-;gfx90a:xnack+;gfx90a:xnack-;gfx942;gfx1030;gfx1100;gfx1101;gfx1102;gfx1200;gfx1201"
# if ENABLE_GPU_ARCH is set in env by Job parameter ENABLE_GPU_ARCH, then set GFX_ARCH to that value. This will override any of the case values above
if [ -n "$ENABLE_GPU_ARCH" ]; then
#setting gfx arch as part of rocm_common_cmake_params
set_gpu_arch "${ENABLE_GPU_ARCH}"
fi
ROCSPARSE_TEST_MIRROR=$MIRROR \
export CXX=$(set_build_variables CXX)\
export CC=$(set_build_variables CC)\
init_rocm_common_cmake_params
ROCSPARSE_TEST_MIRROR=$MIRROR \
CXX=$(set_build_variables __CXX__)\
CC=$(set_build_variables __CC__)\
cmake \
-DAMDGPU_TARGETS=${GPU_TARGETS} \
${LAUNCHER_FLAGS} \
"${rocm_math_common_cmake_params[@]}" \
-DBUILD_SHARED_LIBS=$SHARED_LIBS \
@@ -54,7 +51,7 @@ build_rocsparse() {
cmake --build "$BUILD_DIR" -- package
rm -rf _CPack_Packages/ && find -name '*.o' -delete
mkdir -p $PACKAGE_DIR && cp ${BUILD_DIR}/*.${PKGTYPE} $PACKAGE_DIR
copy_if "${PKGTYPE}" "${CPACKGEN:-"DEB;RPM"}" "${PACKAGE_DIR}" "${BUILD_DIR}"/*."${PKGTYPE}"
show_build_cache_stats
}
@@ -68,7 +65,7 @@ clean_rocsparse() {
stage2_command_args "$@"
case $TARGET in
build) build_rocsparse ;;
build) build_rocsparse; build_wheel ;;
outdir) print_output_directory ;;
clean) clean_rocsparse ;;
*) die "Invalid target $TARGET" ;;

View File

@@ -2,7 +2,7 @@
set -ex
source "$(dirname "${BASH_SOURCE[0]}")/compute_helper.sh"
source "$(dirname "${BASH_SOURCE[0]}")/compute_utils.sh"
build_release=true
set_component_src rocThrust
@@ -19,14 +19,15 @@ build_rocthrust() {
if [ "${ENABLE_ADDRESS_SANITIZER}" == "true" ]; then
set_asan_env_vars
set_address_sanitizer_on
# ASAN packaging is not required for rocThrust, since its header only package
# Setting the asan_cmake_params to false will disable ASAN packaging
ASAN_CMAKE_PARAMS="false"
fi
mkdir -p "$BUILD_DIR" && cd "$BUILD_DIR"
init_rocm_common_cmake_params
CXX=$(set_build_variables CXX)\
CXX=$(set_build_variables __CXX__)\
cmake \
${LAUNCHER_FLAGS} \
"${rocm_math_common_cmake_params[@]}" \
@@ -40,8 +41,7 @@ build_rocthrust() {
cmake --build "$BUILD_DIR" -- package
rm -rf _CPack_Packages/ && find -name '*.o' -delete
mkdir -p $PACKAGE_DIR && cp ${BUILD_DIR}/*.${PKGTYPE} $PACKAGE_DIR
copy_if "${PKGTYPE}" "${CPACKGEN:-"DEB;RPM"}" "${PACKAGE_DIR}" "${BUILD_DIR}"/*."${PKGTYPE}"
show_build_cache_stats
}
@@ -56,7 +56,7 @@ stage2_command_args "$@"
case $TARGET in
(clean) clean_rocthrust ;;
(build) build_rocthrust ;;
(build) build_rocthrust; build_wheel ;;
(outdir) print_output_directory ;;
(*) die "Invalid target $TARGET" ;;
esac

View File

@@ -12,19 +12,22 @@ printUsage() {
echo " -o, --outdir <pkg_type> Print path of output directory containing packages of
type referred to by pkg_type"
echo " -s, --static Component/Build does not support static builds just accepting this param & ignore. No effect of the param on this build"
echo " -w, --wheel Creates python wheel package of roc-tracer.
It needs to be used along with -r option"
echo " -h, --help Prints this help"
echo
return 0
}
## Build environment variables
API_NAME="roctracer"
PROJ_NAME="$API_NAME"
PACKAGE_ROOT="$(getPackageRoot)"
PACKAGE_INCLUDE="$(getIncludePath)"
BUILD_DIR="$(getBuildPath $API_NAME)"
PACKAGE_DEB="$(getPackageRoot)/deb/$API_NAME"
PACKAGE_RPM="$(getPackageRoot)/rpm/$API_NAME"
PACKAGE_DEB="$PACKAGE_ROOT/deb/$PROJ_NAME"
PACKAGE_RPM="$PACKAGE_ROOT/rpm/$PROJ_NAME"
PACKAGE_PREFIX="$ROCM_INSTALL_PATH"
export HIP_PATH="${ROCM_INSTALL_PATH}"
@@ -39,12 +42,15 @@ CLEAN_OR_OUT=0
MAKETARGET="deb"
PKGTYPE="deb"
# Handling GPU Targets for HSACO and HIP Executables
GPU_LIST="gfx900;gfx906;gfx908;gfx90a;gfx940;gfx941;gfx942;gfx1030;gfx1031;gfx1100;gfx1101;gfx1102;gfx1200;gfx1201"
VALID_STR=$(getopt -o hcraso: --long help,clean,release,static,address_sanitizer,outdir: -- "$@")
#parse the arguments
VALID_STR=$(getopt -o hcraswo: --long help,clean,release,static,wheel,address_sanitizer,outdir: -- "$@")
eval set -- "$VALID_STR"
while true; do
#echo "parocessing $1"
case "$1" in
-h | --help)
printUsage
@@ -66,6 +72,9 @@ while true; do
;;
-s | --static)
ack_and_skip_static
;;
-w | --wheel)
WHEEL_PACKAGE=true
shift
;;
-o | --outdir)
@@ -78,7 +87,7 @@ while true; do
--)
shift
break
;;
;; # end delimiter
*)
echo " This should never come but just incase : UNEXPECTED ERROR Parm : [$1] " >&2
exit 20
@@ -103,15 +112,12 @@ clean() {
rm -rf "$PACKAGE_ROOT/${PROJ_NAME}"
}
copy_libs_to_workspace() {
if [ "$ASAN_CMAKE_PARAMS" != "true" ]; then
cp -R "${ROCM_INSTALL_PATH}/lib/roctracer/" "${OUT_DIR}/lib/roctracer/"
fi
}
build() {
echo "Building $PROJ_NAME"
# The cmake path is different for asan and non-asan builds.
# Fetch after getting build type. Default will be non-asan build
PACKAGE_CMAKE="$(getCmakePath)"
# Find HIP in the build tree
export ROCM_PATH="${ROCM_INSTALL_PATH}"
export HIPCC_COMPILE_FLAGS_APPEND="--rocm-path=$ROCM_PATH"
@@ -174,7 +180,7 @@ verifyEnvSetup
case $TARGET in
clean) clean ;;
build) build && copy_libs_to_workspace ;;
build) build ; build_wheel "$BUILD_DIR" "$PROJ_NAME" ;;
outdir) print_output_directory ;;
*) die "$BASH_SOURCE Invalid target $TARGET - exiting" ;;
esac

View File

@@ -1,7 +1,7 @@
#!/bin/bash
set -ex
source "$(dirname "${BASH_SOURCE[0]}")/compute_helper.sh"
source "$(dirname "${BASH_SOURCE[0]}")/compute_utils.sh"
set_component_src rocWMMA
@@ -12,6 +12,7 @@ build_rocwmma() {
ack_and_skip_static
fi
# To check if rocwmma source is present
if [ ! -e $COMPONENT_SRC/CMakeLists.txt ]; then
echo "Skipping rocWMMA as source is not available"
mkdir -p $COMPONENT_SRC
@@ -21,12 +22,14 @@ build_rocwmma() {
if [ "${ENABLE_ADDRESS_SANITIZER}" == "true" ]; then
set_asan_env_vars
set_address_sanitizer_on
# ASAN packaging is not required for rocWMMA, since its header only package
# Setting the asan_cmake_params to false will disable ASAN packaging
ASAN_CMAKE_PARAMS="false"
fi
mkdir -p $BUILD_DIR && cd $BUILD_DIR
init_rocm_common_cmake_params
CXX=$(set_build_variables CXX)\
CXX=$(set_build_variables __CXX__)\
cmake \
"${rocm_math_common_cmake_params[@]}" \
${LAUNCHER_FLAGS} \
@@ -41,7 +44,7 @@ build_rocwmma() {
cmake --build "$BUILD_DIR" -- package
rm -rf _CPack_Packages/ && find -name '*.o' -delete
mkdir -p $PACKAGE_DIR && cp ${BUILD_DIR}/*.${PKGTYPE} $PACKAGE_DIR
copy_if "${PKGTYPE}" "${CPACKGEN:-"DEB;RPM"}" "${PACKAGE_DIR}" "${BUILD_DIR}"/*."${PKGTYPE}"
show_build_cache_stats
}
@@ -54,7 +57,7 @@ clean_rocwmma() {
stage2_command_args "$@"
case $TARGET in
build) build_rocwmma ;;
build) build_rocwmma; build_wheel ;;
outdir) print_output_directory ;;
clean) clean_rocwmma ;;
*) die "Invalid target $TARGET" ;;

View File

@@ -2,14 +2,14 @@
set -ex
source "$(dirname "${BASH_SOURCE[0]}")/compute_helper.sh"
source "$(dirname "${BASH_SOURCE[0]}")/compute_utils.sh"
set_component_src rpp
DEPS_DIR="$RPP_DEPS_LOCATION"
LLVM_LIBDIR="${ROCM_PATH}/llvm/lib"
ROCM_LLVM_LIB_RPATH="\$ORIGIN/llvm/lib"
# RPP specific exe linker parameters
rpp_specific_cmake_params() {
local rpp_cmake_params
if [ "${ASAN_CMAKE_PARAMS}" == "true" ] ; then
@@ -27,21 +27,26 @@ build_rpp() {
ack_and_skip_static
fi
# To check if RPP source is present
if [ ! -e $COMPONENT_SRC/CMakeLists.txt ]; then
echo "Skipping RPP build as source is not available"
mkdir -p $COMPONENT_SRC
exit 0
fi
CXX=$(set_build_variables __AMD_CLANG_++__)
# Enable ASAN
if [ "${ENABLE_ADDRESS_SANITIZER}" == "true" ]; then
set_asan_env_vars
set_address_sanitizer_on
fi
echo "C compiler: $CC"
echo "CXX compiler: $CXX"
mkdir -p $BUILD_DIR && cd $BUILD_DIR
init_rocm_common_cmake_params
# rocm_common_cmake_params provides the default rpath for rocm executables and libraries
# Override cmake shared linker flags to add RPATH for boost libraries
cmake \
"${rocm_math_common_cmake_params[@]}" \
${LAUNCHER_FLAGS} \
@@ -57,8 +62,7 @@ build_rpp() {
cpack -G ${PKGTYPE^^}
rm -rf _CPack_Packages/ && find -name '*.o' -delete
mkdir -p $PACKAGE_DIR
cp ${BUILD_DIR}/*.${PKGTYPE} $PACKAGE_DIR
copy_if "${PKGTYPE}" "${CPACKGEN:-"DEB;RPM"}" "${PACKAGE_DIR}" "${BUILD_DIR}"/*."${PKGTYPE}"
show_build_cache_stats
}
@@ -71,7 +75,7 @@ clean_rpp() {
stage2_command_args "$@"
case $TARGET in
build) build_rpp ;;
build) build_rpp; build_wheel ;;
outdir) print_output_directory ;;
clean) clean_rpp ;;
*) die "Invalid target $TARGET" ;;

228
tools/rocm-build/build_thunk.sh Executable file
View File

@@ -0,0 +1,228 @@
#!/bin/bash
source "$(dirname "${BASH_SOURCE}")/compute_utils.sh"
printUsage() {
echo
echo "Usage: $(basename "${BASH_SOURCE}") [options ...]"
echo
echo "Options:"
echo " -c, --clean Clean output and delete all intermediate work"
echo " -p, --package <type> Specify packaging format"
echo " -r, --release Make a release build instead of a debug build"
echo " -a, --address_sanitizer Enable address sanitizer"
echo " -w, --wheel Creates python wheel package of thunk. It needs to be used along with -r option"
echo " -o, --outdir <pkg_type> Print path of output directory containing packages of type referred to by pkg_type"
echo " -h, --help Prints this help"
echo " -s, --static Build static lib (.a). build instead of dynamic/shared(.so) "
echo
echo "Possible values for <type>:"
echo " deb -> Debian format (default)"
echo " rpm -> RPM format"
echo
return 0
}
## Thunk build (using Makefile) environment variables
PROJ_NAME="roct"
PACKAGE_ROOT="$(getPackageRoot)"
PACKAGE_DEB="$(getPackageRoot)/deb/libhsakmt"
PACKAGE_RPM="$(getPackageRoot)/rpm/libhsakmt"
THUNK_BUILD_DIR="$(getBuildPath thunk)"
TARGET="build"
MAKETARGET="deb"
MAKEARG="$DASH_JAY O=$THUNK_BUILD_DIR"
PACKAGE_LIB="$(getLibPath)"
PACKAGE_INCLUDE="$(getIncludePath)"
SHARED_LIBS="ON"
STATIC_FLAG=
## ROCt build (using CMake) environment variables
ROCT_BUILD_DIR="$(getBuildPath $PROJ_NAME)"
ROCT_PACKAGE_DEB="$PACKAGE_ROOT/deb/$PROJ_NAME"
ROCT_PACKAGE_RPM="$PACKAGE_ROOT/rpm/$PROJ_NAME"
ROCT_BUILD_TYPE="debug"
BUILD_TYPE="Debug"
ROCT_MAKE_OPTS="$DASH_JAY -C $ROCT_BUILD_DIR"
CLEAN_OR_OUT=0;
#debug function
print_vars() {
echo " Var status thunk "
echo "TARGET= $TARGET"
echo "BUILD_TYPE = $BUILD_TYPE"
echo "MAKETARGE = $MAKETARGET"
echo "CLEAN_OR_OUT = $CLEAN_OR_OUT"
echo "PKGTYPE= $PKGTYPE"
}
check_conflicting_options() {
if [ "$MAKETARGET" != "deb" ] && [ "$MAKETARGET" != "rpm" ] && [ "$MAKETARGET" != "tar" ]; then
echo " Wrong Param Passed for Package Type. Aborting .. "
print_vars
exit 30
fi
#echo " CLEAN_OR_OUT = $CLEAN_OR_OUT "
if [ $CLEAN_OR_OUT -ge 2 ]; then
if [ "$PKGTYPE" != "deb" ] && [ "$PKGTYPE" != "rpm" ] && [ "$PKGTYPE" != "tar" ]; then
echo " Wrong Param Passed for Package Type for the Outdir. Aborting .. "
print_vars
exit 40
fi
fi
# check Clean Vs Outdir
if [ $CLEAN_OR_OUT -ge 3 ]; then
echo " Clean & Out Both are sepcified. Not accepted. Bailing .. "
exit 50
fi
}
#parse the arguments
VALID_STR=`getopt -o hcraswo:p: --long help,clean,release,address_sanitizer,wheel,clean,outdir:,package: -- "$@"`
eval set -- "$VALID_STR"
while true ;
do
#echo "parocessing $1"
case "$1" in
(-h | --help)
printUsage ; exit 0;;
(-c | --clean)
TARGET="clean" ; ((CLEAN_OR_OUT|=1)) ; shift ;;
(-r | --release)
BUILD_TYPE="RelWithDebInfo" ; shift ;;
(-a | --address_sanitizer)
set_asan_env_vars
set_address_sanitizer_on ; shift ;;
(-s | --static)
SHARED_LIBS="OFF" ;
STATIC_FLAG="-DBUILD_SHARED_LIBS=$SHARED_LIBS" ; shift ;;
(-w | --wheel)
WHEEL_PACKAGE=true ; shift ;;
(-o | --outdir)
TARGET="outdir"; PKGTYPE=$2 ; OUT_DIR_SPECIFIED=1 ; ((CLEAN_OR_OUT|=2)) ; shift 2 ;;
(-p | --package)
MAKETARGET="$2" ; shift 2;;
--) shift; break;; # end delimiter
(*)
echo " This should never come but just incase : UNEXPECTED ERROR Parm : [$1] ">&2 ; exit 20;;
esac
done
check_conflicting_options
clean_roct() {
rm -rf "$ROCT_BUILD_DIR"
rm -rf "$ROCT_PACKAGE_DEB"
rm -rf "$ROCT_PACKAGE_RPM"
rm -rf "$PACKAGE_ROOT/libhsakmt"
rm -rf "$PACKAGE_INCLUDE/libhsakmt"
rm -f $PACKAGE_LIB/libhsakmt.so*
rm -f $PACKAGE_LIB/libhsakmt.a
rm -f $PACKAGE_INCLUDE/hsakmt*.h $PACKAGE_INCLUDE/linux/kfd_ioctl.h
}
build_roct() {
echo "Building ROCt"
# Clean up the deb and rpm files first to avoid multiple versions
rm -f $ROCT_BUILD_DIR/hsakmt-roct*.deb
rm -f $ROCT_BUILD_DIR/hsakmt-roct-dev/hsakmt-roct*.deb
rm -f "$ROCT_PACKAGE_DEB"/*
rm -f $ROCT_BUILD_DIR/hsakmt-roct*.rpm
rm -f $ROCT_BUILD_DIR/hsakmt-roct-dev/hsakmt-roct*.rpm
rm -f "$ROCT_PACKAGE_RPM"/*
# Set pkg config path for Static builds
# so that static libraries of drm and libdrm_amdgpu will get linked
if [ "$SHARED_LIBS" == "OFF" ]; then
install_drmStatic_lib
fi
# Set this variable only for CentOS 7, as this does not
# allow the "suggests" field for the generated package.
if [ "${DISTRO_ID}" = "centos-7" ]; then
libdrm_cmake_var="-DHSAKMT_REQUIRES_LIBDRM=true"
fi
if [ ! -d "$ROCT_BUILD_DIR" ]; then
mkdir -p "$ROCT_BUILD_DIR"
pushd "$ROCT_BUILD_DIR"
cmake \
-DCMAKE_MODULE_PATH="$THUNK_ROOT/cmake_modules" \
-DBUILD_SHARED_LIBS="OFF" \
$(rocm_cmake_params) \
$(rocm_common_cmake_params) \
-DHSAKMT_INSTALL_PREFIX="$PACKAGE_ROOT" \
-DHSAKMT_INSTALL_LIBDIR="$PACKAGE_LIB" \
-DHSAKMT_PACKAGING_INSTALL_PREFIX="$ROCM_PATH" \
-DENABLE_LDCONFIG=OFF \
-DHSAKMT_WERROR=1 \
-DADDRESS_SANITIZER="$ADDRESS_SANITIZER" \
$libdrm_cmake_var \
"$THUNK_ROOT"
popd
fi
cmake --build "$ROCT_BUILD_DIR" -- $ROCT_MAKE_OPTS
cmake --build "$ROCT_BUILD_DIR" -- $ROCT_MAKE_OPTS install
cmake --build "$ROCT_BUILD_DIR" -- $ROCT_MAKE_OPTS package
if [ -e "$THUNK_ROOT/hsakmt-dev.txt" ]; then
cmake --build "$ROCT_BUILD_DIR" -- $ROCT_MAKE_OPTS install-dev
cmake --build "$ROCT_BUILD_DIR" -- $ROCT_MAKE_OPTS package-dev
fi
mkdir -p "$PACKAGE_LIB"
# We have both here as we transition from shared to static lib
if [ -e "$ROCT_BUILD_DIR/libhsakmt.so" ]; then
# If the .so exists, so will the .so.1 and such
cp -R "$ROCT_BUILD_DIR/libhsakmt.so"* "$PACKAGE_LIB"
fi
if [ -e "$ROCT_BUILD_DIR/libhsakmt.a" ]; then
cp -R "$ROCT_BUILD_DIR/libhsakmt.a" "$PACKAGE_LIB"
fi
mkdir -p "$ROCT_PACKAGE_DEB"
if [[ "${CPACKGEN:-"DEB;RPM"}" =~ "DEB" ]] ; then
cp -a $ROCT_BUILD_DIR/hsakmt*.deb "$ROCT_PACKAGE_DEB"
if [ -e "$THUNK_ROOT/hsakmt-dev.txt" ]; then
cp -a $ROCT_BUILD_DIR/hsakmt-roct-dev/hsakmt-roct*.deb "$ROCT_PACKAGE_DEB"
fi
fi
mkdir -p "$ROCT_PACKAGE_RPM"
if [[ "${CPACKGEN:-"DEB;RPM"}" =~ "RPM" ]] ; then
cp -a $ROCT_BUILD_DIR/hsakmt*.rpm "$ROCT_PACKAGE_RPM"
if [ -e "$THUNK_ROOT/hsakmt-dev.txt" ]; then
cp -a $ROCT_BUILD_DIR/hsakmt-roct-dev/hsakmt-roct*.rpm "$ROCT_PACKAGE_RPM"
fi
fi
}
print_output_directory() {
case ${PKGTYPE} in
("deb")
echo ${ROCT_PACKAGE_DEB};;
("rpm")
echo ${ROCT_PACKAGE_RPM};;
(*)
echo "Invalid package type \"${PKGTYPE}\" provided for -o" >&2; exit 1;;
esac
exit
}
verifyEnvSetup
case $TARGET in
(clean) clean_roct ;;
(build) build_roct; build_wheel "$ROCT_BUILD_DIR" "$PROJ_NAME" ;;
(outdir) print_output_directory ;;
(*) die "Invalid target $TARGET" ;;
esac
echo "Operation complete"

View File

@@ -2,7 +2,7 @@
set -ex
source "$(dirname "${BASH_SOURCE[0]}")/compute_helper.sh"
source "$(dirname "${BASH_SOURCE[0]}")/compute_utils.sh"
set_component_src TransferBench
@@ -13,18 +13,15 @@ build_transferbench() {
ack_and_skip_static
fi
sed -i 's/^\(\s*set\s*(CMAKE_RUNTIME_OUTPUT_DIRECTORY.*\)$/#\1/' "${COMPONENT_SRC}/CMakeLists.txt"
mkdir -p "$BUILD_DIR" && cd "$BUILD_DIR"
init_rocm_common_cmake_params
CXX="$ROCM_PATH"/bin/hipcc \
CXX=$(set_build_variables __HIP_CC__) \
cmake "${rocm_math_common_cmake_params[@]}" "$COMPONENT_SRC"
make package
rm -rf _CPack_Packages/ && find -name '*.o' -delete
mkdir -p $PACKAGE_DIR
cp ${BUILD_DIR}/*.${PKGTYPE} $PACKAGE_DIR
copy_if "${PKGTYPE}" "${CPACKGEN:-"DEB;RPM"}" "${PACKAGE_DIR}" "${BUILD_DIR}"/*."${PKGTYPE}"
show_build_cache_stats
}
@@ -37,7 +34,7 @@ clean_transferbench() {
stage2_command_args "$@"
case $TARGET in
build) build_transferbench ;;
build) build_transferbench; build_wheel ;;
outdir) print_output_directory ;;
clean) clean_transferbench ;;
*) die "Invalid target $TARGET" ;;

View File

@@ -1,323 +0,0 @@
#!/bin/bash
# compute_helper.sh is created to add common functions similar to compute_utils.sh in stg1
# stg2 build scripts can make use of common function
# TODO: Component build scripts can be optimized by adding common function in this file(ex for ASAN, Debugging etc)
# All build scripts should use the common function.
set -e
set -o pipefail
# Set the LLVM directory path with respect to ROCM_PATH
# LLVM is installed in $ROCM_PATH/lib/llvm
ROCM_LLVMDIR="lib/llvm"
# Set ADDRESS_SANITIZER to OFF by default
export ADDRESS_SANITIZER="OFF"
DISABLE_DEBUG_PACKAGE="false"
export CFLAGS="$CFLAGS $SET_DWARF_VERSION_4 "
export CXXFLAGS="$CXXFLAGS $SET_DWARF_VERSION_4 "
# Print message to stderr
# param message string to print on exit
# Example: printErr "file not found"
printErr() {
echo "$@" 1>&2
}
# Print message to stderr and terminate current program
# param message string to print on exit
# Example: die "Your program" has terminated
die() {
printErr "FATAL: $@"
exit 1
}
# Die if first argument is empty
# param string to validate
# param error message
# Example: die "$VARIABLE" "Your program" has terminated
dieIfEmpty() {
if [ "$1" == "" ]; then
shift
die "$@"
fi
}
ack_and_skip_static() {
echo "static build is not enabled for this component..skipping"
exit 0
}
# Copy a file or directory to target location and show single line progress
progressCopy() {
if [ -d "$1" ]; then
rsync -a "$1"/* "$2"
else
rsync -a "$1" "$2"
fi
}
# Get OS identification string
# xargs will remove the trailing whitespaces
getOsVersion() {
lsb_release -d | cut -d: -f2 | xargs
}
# Get kernel identification string
getKernelVersion() {
uname -r
}
# Trim excessive whitespace from a string
strTrim() {
echo "$@" | xargs
}
# Return whether the booted OS is Fedora or not
isFedora() {
grep -iq fedora /etc/os-release
}
# Return whether the booted system is EFI or not
isEFI() {
[ -d "/sys/firmware/efi" ]
}
print_lib_type() {
if [ "$1" == "OFF" ];
then
echo " Building Archive "
else
echo " Building Shared Object "
fi
}
# Get CMAKE build flags for CMAKE build trigger
set_build_variables() {
local cmake_cxx_flag_params
local cmake_cc_flag_params
if [ "${ENABLE_ADDRESS_SANITIZER}" == "true" ] ; then
cmake_cxx_flag_params="$ROCM_PATH/llvm/bin/clang++"
cmake_cc_flag_params="$ROCM_PATH/llvm/bin/clang"
cmake_comp_params=(
"-DCMAKE_C_COMPILER=$ROCM_PATH/llvm/bin/clang"
"-DCMAKE_CXX_COMPILER=$ROCM_PATH/llvm/bin/clang++"
)
else
cmake_cxx_flag_params="$ROCM_PATH/bin/hipcc"
cmake_cc_flag_params="$ROCM_PATH/bin/hipcc"
cmake_comp_params=(
"-DCMAKE_C_COMPILER=$ROCM_PATH/bin/hipcc"
"-DCMAKE_CXX_COMPILER=$ROCM_PATH/bin/hipcc"
)
fi
case "$1" in
("CXX")
printf "%s" "${cmake_cxx_flag_params}"
;;
("CC")
printf "%s" "${cmake_cc_flag_params}"
;;
("CMAKE_C_CXX")
printf '%s ' "${cmake_comp_params[@]}"
;;
(*)
exit 1
;;
esac
exit
}
# Get the directory containing the cmake config files
getCmakePath() {
local rocmInstallPath=${ROCM_PATH}
local cmakePath="lib/cmake"
dieIfEmpty "$rocmInstallPath"
echo "$rocmInstallPath/$cmakePath"
}
getInstallLibDir() {
local libDir="lib"
if [ "${ENABLE_ADDRESS_SANITIZER}" == "true" ] ; then
libDir="lib/asan"
fi
echo "$libDir"
}
set_asan_env_vars() {
# Flag to set cmake build params for ASAN builds
ASAN_CMAKE_PARAMS="true"
export ADDRESS_SANITIZER="ON"
LLVM_BIN_DIR="${ROCM_PATH}/llvm/bin"
export CC="$LLVM_BIN_DIR/clang"
export CXX="$LLVM_BIN_DIR/clang++"
export FC="$LLVM_BIN_DIR/flang"
export PATH="$LLVM_BIN_DIR/:$PATH"
# get exact path to ASAN lib containing clang version
ASAN_LIB_PATH=$(clang --print-file-name=libclang_rt.asan-x86_64.so)
export LD_LIBRARY_PATH="${ASAN_LIB_PATH%/*}:${ROCM_PATH}/llvm/lib:${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}"
export ASAN_OPTIONS="detect_leaks=0"
}
set_address_sanitizer_on() {
export CFLAGS="-fsanitize=address -shared-libasan $SET_DWARF_VERSION_4 -g -gz"
export CXXFLAGS="-fsanitize=address -shared-libasan $SET_DWARF_VERSION_4 -g -gz"
export LDFLAGS="-Wl,--enable-new-dtags -fuse-ld=lld -fsanitize=address -shared-libasan -g -gz -Wl,--build-id=sha1 -L${ROCM_PATH}/llvm/lib -L${ROCM_PATH}/lib/asan"
}
rebuild_lapack() {
wget -nv -O lapack-3.9.1.tar.gz \
http://compute-artifactory.amd.com/artifactory/rocm-generic-thirdparty-deps/ubuntu/lapack-v3.9.1.tar.gz
sh -c "echo 'd0085d2caf997ff39299c05d4bacb6f3d27001d25a4cc613d48c1f352b73e7e0 *lapack-3.9.1.tar.gz' | sha256sum -c"
tar xzf lapack-3.9.1.tar.gz --one-top-level=lapack-src --strip-components 1
rm lapack-3.9.1.tar.gz
cmake -Slapack-src -Blapack-bld \
${LAUNCHER_FLAGS} \
-DBUILD_TESTING=OFF \
-DCBLAS=ON \
-DLAPACKE=OFF
cmake --build lapack-bld -- -j${PROC}
cmake --build lapack-bld -- install
rm -r lapack-src lapack-bld
}
# debug function #dumping values in case of error to solve the same
print_vars() {
echo " Status of Vars in $1 build "
echo " TARGET= $2 "
echo " BUILD_TYPE = $3 "
echo " SHARED_LIBS = $4 "
echo " CLEAN_OR_OUT = $5 "
echo " PKGTYPE= $6 "
echo " MAKETARGET = $7 "
}
rocm_math_common_cmake_params=()
init_rocm_common_cmake_params(){
local retCmakeParams=${1:-rocm_math_common_cmake_params}
local SET_BUILD_TYPE=${BUILD_TYPE:-'RelWithDebInfo'}
local ASAN_LIBDIR="lib/asan"
local CMAKE_PATH=$(getCmakePath)
# Common cmake parameters can be set
# component build scripts can use this function
local cmake_params
if [ "${ASAN_CMAKE_PARAMS}" == "true" ] ; then
cmake_params=(
"-DCMAKE_PREFIX_PATH=$CMAKE_PATH;${ROCM_PATH}/$ASAN_LIBDIR;$ROCM_PATH/llvm;$ROCM_PATH"
"-DCMAKE_SHARED_LINKER_FLAGS_INIT=-Wl,--enable-new-dtags,--build-id=sha1,--rpath,$ROCM_ASAN_LIB_RPATH"
"-DCMAKE_EXE_LINKER_FLAGS_INIT=-Wl,--enable-new-dtags,--build-id=sha1,--rpath,$ROCM_ASAN_EXE_RPATH"
"-DENABLE_ASAN_PACKAGING=true"
)
else
cmake_params=(
"-DCMAKE_PREFIX_PATH=${ROCM_PATH}/llvm;${ROCM_PATH}"
"-DCMAKE_SHARED_LINKER_FLAGS_INIT=-Wl,--enable-new-dtags,--build-id=sha1,--rpath,$ROCM_LIB_RPATH"
"-DCMAKE_EXE_LINKER_FLAGS_INIT=-Wl,--enable-new-dtags,--build-id=sha1,--rpath,$ROCM_EXE_RPATH"
)
fi
cmake_params+=(
"-DCMAKE_VERBOSE_MAKEFILE=1"
"-DCMAKE_BUILD_TYPE=${SET_BUILD_TYPE}"
"-DCMAKE_INSTALL_RPATH_USE_LINK_PATH=FALSE"
"-DCMAKE_INSTALL_PREFIX=${ROCM_PATH}"
"-DCMAKE_PACKAGING_INSTALL_PREFIX=${ROCM_PATH}"
"-DBUILD_FILE_REORG_BACKWARD_COMPATIBILITY=OFF"
"-DROCM_SYMLINK_LIBS=OFF"
"-DCPACK_PACKAGING_INSTALL_PREFIX=${ROCM_PATH}"
"-DROCM_DISABLE_LDCONFIG=ON"
"-DCPACK_SET_DESTDIR=OFF"
"-DCPACK_RPM_PACKAGE_RELOCATABLE=ON"
"-DROCM_PATH=${ROCM_PATH}"
)
#TODO :remove if clause once debug related issues are fixed
if [ "${DISABLE_DEBUG_PACKAGE}" == "true" ] ; then
SET_BUILD_TYPE=${BUILD_TYPE:-'Release'}
cmake_params+=(
"-DCPACK_DEBIAN_DEBUGINFO_PACKAGE=FALSE"
"-DCPACK_RPM_DEBUGINFO_PACKAGE=FALSE"
"-DCPACK_RPM_INSTALL_WITH_EXEC=FALSE"
"-DCMAKE_BUILD_TYPE=${SET_BUILD_TYPE}"
)
elif [ "$SET_BUILD_TYPE" == "RelWithDebInfo" ] || [ "$SET_BUILD_TYPE" == "Debug" ]; then
# RelWithDebinfo optimization level -O2 is having performance impact
# So overriding the same to -O3
cmake_params+=(
"-DCPACK_DEBIAN_DEBUGINFO_PACKAGE=TRUE"
"-DCPACK_RPM_DEBUGINFO_PACKAGE=TRUE"
"-DCPACK_RPM_INSTALL_WITH_EXEC=TRUE"
"-DCMAKE_CXX_FLAGS_RELWITHDEBINFO=-O3 -g -DNDEBUG"
)
fi
eval "${retCmakeParams}=( \"\${cmake_params[@]}\" ) "
}
disable_debug_package_generation(){
case "$DISTRO_ID" in
(sles*|rhel*)
export CFLAGS=${CFLAGS//"$SET_DWARF_VERSION_4"}
export CXXFLAGS=${CXXFLAGS//"$SET_DWARF_VERSION_4"}
;;
(*)
;;
esac
DISABLE_DEBUG_PACKAGE="true"
}
# Setup a number of variables to specify where to find the source
# where to do the build and where to put the packages
# Note the PACKAGE_DIR downcases the package name
# This could be extended to do different things based on $1
set_component_src(){
COMPONENT_SRC="$LIBS_WORK_DIR/$1"
BUILD_DIR="$OUT_DIR/build/$1"
DEB_PATH="$OUT_DIR/${PKGTYPE}/${1,,}"
RPM_PATH="$OUT_DIR/${PKGTYPE}/${1,,}"
PACKAGE_DIR="$OUT_DIR/${PKGTYPE}/${1,,}"
}
# Standard definition of function to print the package location. If
# for some reason a custom version is needed then it can overwrite
# this definition
# TODO: Don't use a global PKGTYPE, pass the value in as a parameter
print_output_directory() {
case ${1:-$PKGTYPE} in
("deb")
echo ${DEB_PATH};;
("rpm")
echo ${RPM_PATH};;
(*)
echo "Invalid package type \"${PKGTYPE}\" provided for -o" >&2; exit 1;;
esac
exit
}
# Standard argument processing
# Here to avoid repetition
TARGET="build" # default target
stage2_command_args(){
while [ "$1" != "" ];
do
case $1 in
-o | --outdir )
shift 1; PKGTYPE=$1 ; TARGET="outdir" ;;
-c | --clean )
TARGET="clean" ;;
*)
break ;;
esac
shift 1
done
}
show_build_cache_stats(){
if [ "$CCACHE_ENABLED" = "true" ] ; then
if ! ccache -s ; then
echo "Unable to display ccache stats"
fi
fi
}

View File

@@ -1,14 +1,13 @@
#!/bin/bash
: <<'END_COMMENT'
This script retains only those functions from the original compute_utils.sh
that the ROCm build scripts utilize.
END_COMMENT
set -e
set -o pipefail
TOPOLOGY_SYSFS_DIR=/sys/devices/virtual/kfd/kfd/topology/nodes
# Set python version
# TODO: Get the python version from build arguments
PY_COMMAND=python3.6
# Set a sensible default value for DASH_JAY in case none is provided
DASH_JAY=${DASH_JAY:-"-j $(nproc)"}
@@ -22,6 +21,24 @@ if [[ "$ROCM_USE_CCACHE" != "0" ]] ; then
done
fi
# TODO: To be removed, once debug package issues are fixed
DISABLE_DEBUG_PACKAGE="false"
set_gdwarf_4() {
# In SLES and RHEL, debuginfo package is not getting generated
# Splitting debuginfo is getting failed(dwarf-5 unhandled) when compiler is set to clang.
# By default -gdwarf-5 is used for the compression of debug symbols
# So setting -gdwarf-4 as a quick fix
# TODO: -gdwarf-5 unhandling when compiler set to clang need to be fixed
case "$DISTRO_ID" in
(sles*|rhel*)
SET_DWARF_VERSION_4="-gdwarf-4"
;;
(*)
SET_DWARF_VERSION_4=""
;;
esac
}
# Print message to stderr
# param message string to print on exit
# Example: printErr "file not found"
@@ -164,7 +181,6 @@ getRpmPath() {
}
verifyEnvSetup() {
if [ -z "$OUT_DIR" ]; then
die "Please source build/envsetup.sh first."
@@ -211,32 +227,49 @@ check_conflicting_options() {
fi
}
# Set the LLVM directory path with respect to ROCM_PATH
# LLVM is installed in $ROCM_PATH/lib/llvm
ROCM_LLVMDIR="lib/llvm"
export ADDRESS_SANITIZER="OFF"
set_asan_env_vars() {
export ADDRESS_SANITIZER="ON"
# Flag to set cmake build params for ASAN builds
ASAN_CMAKE_PARAMS="true"
# Pass the LLVM bin path as the first parameter
LLVM_BIN_DIR=${1:-"${ROCM_INSTALL_PATH}/llvm/bin"}
local LLVM_BIN_DIR=${1:-"${ROCM_INSTALL_PATH}/llvm/bin"}
export CC="$LLVM_BIN_DIR/clang"
export CXX="$LLVM_BIN_DIR/clang++"
export FC="$LLVM_BIN_DIR/flang"
export PATH="$PATH:$LLVM_BIN_DIR/"
# get exact path to ASAN lib containing clang version
ASAN_LIB_PATH=$(clang --print-file-name=libclang_rt.asan-x86_64.so)
export LD_LIBRARY_PATH="${ASAN_LIB_PATH%/*}${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}"
export LD_LIBRARY_PATH="${ASAN_LIB_PATH%/*}:${ROCM_PATH}/${ROCM_LLVMDIR}/lib:${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}"
export ASAN_OPTIONS="detect_leaks=0"
}
set_address_sanitizer_on() {
# In SLES and RHEL debuginfo package is not getting generated
# when compiler is set to clang. Using default -gdwarf-5 is getting unhandled in these distros
# So setting -gdwarf-4 as a quick fix
# TODO: -gdwarf-5 unhandling when compiler set to clang need to be fixed
SET_DWARF_VERSION_4=""
if [[ $DISTRO_ID == sles* ]] || [[ $DISTRO_ID == rhel* ]]; then
SET_DWARF_VERSION_4="-gdwarf-4"
fi
export CFLAGS="-fsanitize=address -shared-libasan -g $SET_DWARF_VERSION_4"
export CXXFLAGS="-fsanitize=address -shared-libasan -g $SET_DWARF_VERSION_4"
export LDFLAGS="-Wl,--enable-new-dtags -fuse-ld=lld -fsanitize=address -shared-libasan -g -Wl,--build-id=sha1 -L$ROCM_INSTALL_PATH/lib/asan"
set_gdwarf_4
export CFLAGS="-fsanitize=address -shared-libasan -g -gz $SET_DWARF_VERSION_4"
export CXXFLAGS="-fsanitize=address -shared-libasan -g -gz $SET_DWARF_VERSION_4"
export LDFLAGS="-Wl,--enable-new-dtags -fuse-ld=lld -fsanitize=address -shared-libasan -g -gz -Wl,--build-id=sha1 -L${ROCM_PATH}/${ROCM_LLVMDIR}/lib -L${ROCM_PATH}/lib/asan -L${ROCM_PATH}/${ROCM_LLVMDIR}/lib/asan"
}
rebuild_lapack() {
wget -nv -O lapack-3.9.1.tar.gz \
http://compute-artifactory.amd.com/artifactory/rocm-generic-thirdparty-deps/ubuntu/lapack-v3.9.1.tar.gz
sh -c "echo 'd0085d2caf997ff39299c05d4bacb6f3d27001d25a4cc613d48c1f352b73e7e0 *lapack-3.9.1.tar.gz' | sha256sum -c"
tar xzf lapack-3.9.1.tar.gz --one-top-level=lapack-src --strip-components 1
rm lapack-3.9.1.tar.gz
cmake -Slapack-src -Blapack-bld \
${LAUNCHER_FLAGS} \
-DBUILD_TESTING=OFF \
-DCBLAS=ON \
-DLAPACKE=OFF
cmake --build lapack-bld -- -j${PROC}
sudo -E $(which cmake) --build lapack-bld -- install
rm -rf lapack-src lapack-bld
}
ack_and_ignore_asan() {
@@ -250,13 +283,13 @@ ack_and_skip_static() {
#debug function #dumping values in case of error to solve the same
print_vars() {
echo " Status of Vars in $1 build "
echo " TARGET= $2 "
echo " BUILD_TYPE = $3 "
echo " SHARED_LIBS = $4 "
echo " CLEAN_OR_OUT = $5 "
echo " PKGTYPE= $6 "
echo " MAKETARGET = $7 "
echo " Status of Vars in $1 build "
echo " TARGET= $2 "
echo " BUILD_TYPE = $3 "
echo " SHARED_LIBS = $4 "
echo " CLEAN_OR_OUT = $5 "
echo " PKGTYPE= $6 "
echo " MAKETARGET = $7 "
}
# Provide this as a function, rather than a variable to delay the evaluation
@@ -316,11 +349,11 @@ rocm_cmake_params() {
printf '%s ' "${cmake_params[@]}"
}
copy_if(){
copy_if() {
local type=$1 selector=$2 dir=$3
shift 3
mkdir -p "$dir"
if [[ "$selector" =~ "$type" ]] ; then
if [[ "${selector,,}" =~ "${type,,}" ]] ; then
cp -a "$@" "$dir"
fi
# handle ddeb files as well, renaming them on the way
@@ -348,6 +381,8 @@ copy_if(){
dest=${deb##*/}
dest="${dest%%_*}-dbgsym_${dest#*_}"
cp -a "${deb}-dbgsym.ddeb" "$dir/${dest##*/}.deb"
# copying the -dbgsym package to build director as well , as it is used for uploading to artifactory
cp -a "${deb}-dbgsym.ddeb" "$BUILD_DIR/${dest##*/}.deb"
fi
# This is needed for comgr
if [ -e "$dirname/${pkgname}-dbgsym_${pkgextra}.ddeb" ]
@@ -367,6 +402,74 @@ remove_make_r_flags(){
if [[ "$MAKEFLAGS" =~ ${firstword}R ]] ; then MAKEFLAGS=${MAKEFLAGS/R/} ; fi
}
# Functions to create wheel packages
install_wheel_prerequisites(){
sudo yum install -y cpio
$PY_COMMAND -m pip install --upgrade pip
$PY_COMMAND -m pip install --upgrade build wheel setuptools rpm
}
# Before calling create_wheel_packge, make sure to set the global variables
# Global variables: BUILD_SCRIPT_ROOT
create_wheel_package() {
echo "Creating wheel package"
local buildDir="$1"
local projName="$2"
local PKG_INFO="pkginfo"
# Get package output directory from project name
local packageDir="$(getRpmPath $projName)"
local ROCM_WHEEL_DIR="${buildDir}/_wheel"
# Remove the _wheel directory if already exist
rm -rf $ROCM_WHEEL_DIR
mkdir -p $ROCM_WHEEL_DIR
# Copy the setup.py generator to build folder
cp -f $BUILD_SCRIPT_ROOT/setup.py $ROCM_WHEEL_DIR
pushd $ROCM_WHEEL_DIR
local PKG_NAME_LIST=( "${packageDir}"/*.rpm )
for pkg in "${PKG_NAME_LIST[@]}"; do
if [[ "$pkg" =~ "-dbgsym" ]] || [[ "$pkg" =~ "-debuginfo" ]]; then
echo "Discarding debug info wheel package. Continue with next package "
continue
fi
pkgFiles=$(rpm -ql "$pkg")
if [[ "$pkgFiles" =~ "contains no files" ]]; then
echo "Package $pkg is empty."
continue
fi
#Clean up any old files
rm -rf opt usr build $PKG_INFO
cat << EOF > "$PKG_INFO"
PKG_NAME=$pkg
EOF
# Currently only supports python3.6
$PY_COMMAND -m build --wheel -n -C--global-option=--build-number -C--global-option=$BUILD_ID
done
# Copy the wheel created to RPM folder which will be uploaded to artifactory
copy_if WHL "WHL" "$packageDir" "$ROCM_WHEEL_DIR"/dist/*.whl
popd
}
# Function used by component build scripts for generating wheel package
# Wheel package will be created if WHEEL_PACKAGE is set
build_wheel() {
if [[ "$WHEEL_PACKAGE" != "true" ]] || [[ "$SHARED_LIBS" == "OFF" ]] || [[ "$ENABLE_ADDRESS_SANITIZER" == "true" ]]; then
echo "Wheel Package build disabled !!!!"
return
fi
echo "Wheel Package build started !!!!"
install_wheel_prerequisites
# Input argument
# $1 : Build directory
# $2 : project name
if [ -n "$1" ]; then
create_wheel_package "$1" "$2"
else
create_wheel_package $BUILD_DIR "${PACKAGE_DIR##*/}"
fi
}
# Set a variable to the value needed by cmake to use ninja if it is available
# If GEN_NINJA is already defined, even as the empty string, then leave the value alone
# Intended use in build_xxxx.sh is ${GEN_NINJA:+"$GEN_NINJA"} to cope with potentially weird values
@@ -377,3 +480,290 @@ if [ "${GEN_NINJA+defined}" != "defined" ] && command -v ninja >/dev/null ; then
GEN_NINJA=-GNinja
fi
# Install amdgpu-install-internal package required for running amdpgu-repo and
# set the repo for installing amdgpu static package
set_amdgpu_repo() {
#if amdgpu-repo command doesn't exist, install it
if ! command -v amdgpu-repo &> /dev/null
then
# From ROCm VERSION get the first two numbers eg 6.2.0 --> 6.2
AMDGPU_INSTALL_VER=${ROCM_VERSION%%.${ROCM_VERSION#?.*.}}
# Currently static builds are triggered in RHEL-8 OS. only yum install is used for time being
# TODO: Should be modified to handle other OS as well
BASE_URL="https://artifactory-cdn.amd.com/artifactory/list/amdgpu-rpm/rhel"
sudo yum install -y "${BASE_URL}/amdgpu-install-internal-${AMDGPU_INSTALL_VER}_8-1.noarch.rpm"
fi
KERNEL_INFO_FILE_URL=http://rocm-ci.amd.com/job/$JOB_NAME/$BUILD_ID/artifact/amdgpu_kernel_info.txt
RADEON_TIER=$(curl "${KERNEL_INFO_FILE_URL}") || die "Failed to set Linux core build number."
AMDGPU_BUILD_OPT="--amdgpu-build=${RADEON_TIER}"
for delay in 0 30 60 120
do
echo "Sleeping ${delay} seconds"
sleep ${delay};
sudo amdgpu-repo $AMDGPU_BUILD_OPT --rocm-build="${JOB_NAME}/${BUILD_ID}" && return 0
echo "Attempt to update repo using amdgpu-repo failed, retrying..."
done
echo "All attempts for amdgpu-repo installation failed, fallback to local repo update and installation!"
return 1
}
# Function will install drm static packages and its dependencies
install_drmStatic_lib(){
if set_amdgpu_repo ; then
sudo yum install -y libdrm-amdgpu-static
else
echo " amdgpu repo setting failed (rc=$?) "
exit 60
fi
}
# Set offload compress to ON by default
DISABLE_OFFLOAD_COMPRESSION="false"
setup_offload_compress(){
# Enable offload compression based on the flag
if [ "${DISABLE_OFFLOAD_COMPRESSION}" == "false" ] ; then
export CFLAGS="$CFLAGS --offload-compress "
export CXXFLAGS="$CXXFLAGS --offload-compress "
else
# Disable offload compression based on the flag
export CFLAGS=${CFLAGS//" --offload-compress "/ }
export CXXFLAGS=${CXXFLAGS//" --offload-compress "/ }
fi
}
# Get CMAKE build flags for CMAKE build trigger
set_build_variables() {
# Variables which changes based on build types ex:ASAN/STATIC Builds.
# Note:
# 1. __CXX__ Argument is for getting the equivalant cmake_cxx_flag_params
# which is clang++ for ASAN/STATIC builds and hipcc for rest all builds.
# 2. __CC__ Argument is for getting the equivalant cmake_cc_flag_params
# which is clang for ASAN/STATIC builds and hipcc for rest all builds.
# 3. Similarly the __CMAKE_CXX_COMPILER__ and __CMAKE_CC_COMPILER__ Arguments
# gives clang++, clang configuration for ASAN/STATIC and hipcc for rest of all builds.
local cxx_flag_params
local cc_flag_params
local LLVM_BIN_DIR="$ROCM_PATH/lib/llvm/bin"
local HIPCC_BIN_DIR="$ROCM_PATH/bin"
# Set Variable based on build types
if [ "${ENABLE_ADDRESS_SANITIZER}" == "true" ] || [ "${ENABLE_STATIC_BUILDS}" == "true" ] ; then
cxx_flag_params="$LLVM_BIN_DIR/clang++"
cc_flag_params="$LLVM_BIN_DIR/clang"
else
setup_offload_compress
cxx_flag_params="$HIPCC_BIN_DIR/hipcc"
cc_flag_params="$HIPCC_BIN_DIR/hipcc"
fi
case "$1" in
("__C_++__")
printf "%s" "c++"
;;
("__G_++__")
printf "%s" "g++"
;;
("__AMD_CLANG_++__")
printf "%s" "amdclang++"
;;
("__HIP_CC__")
printf "%s" "$HIPCC_BIN_DIR/hipcc"
;;
("__CLANG++__")
printf "%s" "$LLVM_BIN_DIR/clang++"
;;
("__CLANG__")
printf "%s" "$LLVM_BIN_DIR/clang"
;;
("__CXX__")
printf "%s" "${cxx_flag_params}"
;;
("__CC__")
printf "%s" "${cc_flag_params}"
;;
("__CMAKE_CC_PARAMS__")
printf '%s ' "-DCMAKE_C_COMPILER=${cc_flag_params}"
;;
("__CMAKE_CXX_PARAMS__")
printf '%s ' "-DCMAKE_CXX_COMPILER=${cxx_flag_params}"
;;
(*)
exit 1
;;
esac
exit
}
# Get the install directory name for libraries
getInstallLibDir() {
local libDir="lib"
if [ "${ENABLE_ADDRESS_SANITIZER}" == "true" ] ; then
libDir="lib/asan"
fi
echo "$libDir"
}
# Hardcoding the default GPU_ARCH, but this will be overwritten by input from job param or by component build script
GFX_ARCH="gfx908;gfx90a:xnack-;gfx90a:xnack+;gfx1030;gfx1100;gfx1101;gfx1102;gfx942:xnack-;gfx942:xnack+;gfx1200;gfx1201"
if [ "${ENABLE_ADDRESS_SANITIZER}" == "true" ] ; then
# updating Default GPU_ARCHS for ASAN builds
GFX_ARCH="gfx90a:xnack+;gfx942:xnack+"
fi
# if ENABLE_GPU_ARCH Job parameter is set, then set GFX_ARCH to that value
if [ -n "$ENABLE_GPU_ARCH" ]; then
GFX_ARCH="$ENABLE_GPU_ARCH"
fi
# Finally overwrite the GPU_ARCH with the value from the component build script, if set_gpu_arch is called
# We need to make sure where set_gpu_arch is called in the component build script,
# it should have if condition to check if GPU_ARCH is set by ENABLE_GPU_ARCH, so JOB LEVEL PARAM will have highest priority
set_gpu_arch(){
GFX_ARCH="$1"
}
disable_debug_package_generation(){
SET_DWARF_VERSION_4=""
DISABLE_DEBUG_PACKAGE="true"
}
# Populate the common cmake params
rocm_math_common_cmake_params=()
init_rocm_common_cmake_params(){
local retCmakeParams=${1:-rocm_math_common_cmake_params}
local SET_BUILD_TYPE=${BUILD_TYPE:-'RelWithDebInfo'}
local ASAN_LIBDIR="lib/asan"
local CMAKE_PATH=$(getCmakePath)
# Common cmake parameters can be set
# component build scripts can use this function
local cmake_params
if [ "${ASAN_CMAKE_PARAMS}" == "true" ] ; then
cmake_params=(
"-DCMAKE_PREFIX_PATH=$CMAKE_PATH;${ROCM_PATH}/$ASAN_LIBDIR;$ROCM_PATH/llvm;$ROCM_PATH"
"-DCMAKE_SHARED_LINKER_FLAGS_INIT=-Wl,--enable-new-dtags,--build-id=sha1,--rpath,$ROCM_ASAN_LIB_RPATH"
"-DCMAKE_EXE_LINKER_FLAGS_INIT=-Wl,--enable-new-dtags,--build-id=sha1,--rpath,$ROCM_ASAN_EXE_RPATH"
"-DENABLE_ASAN_PACKAGING=true"
)
else
cmake_params=(
"-DCMAKE_PREFIX_PATH=${ROCM_PATH}/llvm;${ROCM_PATH}"
"-DCMAKE_SHARED_LINKER_FLAGS_INIT=-Wl,--enable-new-dtags,--build-id=sha1,--rpath,$ROCM_LIB_RPATH"
"-DCMAKE_EXE_LINKER_FLAGS_INIT=-Wl,--enable-new-dtags,--build-id=sha1,--rpath,$ROCM_EXE_RPATH"
)
fi
cmake_params+=(
"-DCMAKE_VERBOSE_MAKEFILE=1"
"-DCMAKE_BUILD_TYPE=${SET_BUILD_TYPE}"
"-DCMAKE_INSTALL_RPATH_USE_LINK_PATH=FALSE"
"-DCMAKE_INSTALL_PREFIX=${ROCM_PATH}"
"-DCMAKE_PACKAGING_INSTALL_PREFIX=${ROCM_PATH}"
"-DBUILD_FILE_REORG_BACKWARD_COMPATIBILITY=OFF"
"-DROCM_SYMLINK_LIBS=OFF"
"-DCPACK_PACKAGING_INSTALL_PREFIX=${ROCM_PATH}"
"-DROCM_DISABLE_LDCONFIG=ON"
"-DCPACK_SET_DESTDIR=OFF"
"-DCPACK_RPM_PACKAGE_RELOCATABLE=ON"
"-DROCM_PATH=${ROCM_PATH}"
)
#rocWMMa does not support gfx1030, so removing from default
if [ "${COMPONENT_SRC}" == "$LIBS_WORK_DIR/rocWMMA" ]; then
GFX_ARCH=$(echo $GFX_ARCH | sed 's/\(gfx1030;\)//g')
fi
#if component is not composable_kernel then only add -DAMDGPU_TARGETS, this is not supported for CK along with -DINSTANCES_ONLY
if [ "${COMPONENT_SRC}" != "$LIBS_WORK_DIR/composable_kernel" ]; then
cmake_params+=(
"-DAMDGPU_TARGETS=${GFX_ARCH}"
)
fi
#if component is not hipsparselt | hipblaslt | rocBLAS | composable_kernel, then only add below cmake params. as GPU_TARGETS and CMAKE_HIP_ARCHITECTURES are not supported for hipsparselt, hipblaslt and rocblas
# in future after SWDEV-468293, below params is not needed for any component
case "${COMPONENT_SRC}" in
"${LIBS_WORK_DIR}/hipSPARSELt" | "${LIBS_WORK_DIR}/hipBLASLt" | "${LIBS_WORK_DIR}/rocBLAS" | "${LIBS_WORK_DIR}/composable_kernel")
# Do nothing for these components
;;
*)
cmake_params+=(
"-DGPU_TARGETS=${GFX_ARCH}"
"-DCMAKE_HIP_ARCHITECTURES=${GFX_ARCH}"
)
;;
esac
#TODO :remove if clause once debug related issues are fixed
if [ "${DISABLE_DEBUG_PACKAGE}" == "true" ] ; then
SET_BUILD_TYPE=Release
cmake_params+=(
"-DCPACK_DEBIAN_DEBUGINFO_PACKAGE=FALSE"
"-DCPACK_RPM_DEBUGINFO_PACKAGE=FALSE"
"-DCPACK_RPM_INSTALL_WITH_EXEC=FALSE"
"-DCMAKE_BUILD_TYPE=${SET_BUILD_TYPE}"
)
elif [ "$SET_BUILD_TYPE" == "RelWithDebInfo" ] || [ "$SET_BUILD_TYPE" == "Debug" ]; then
# RelWithDebinfo optimization level -O2 is having performance impact
# So overriding the same to -O3
set_gdwarf_4
cmake_params+=(
"-DCPACK_DEBIAN_DEBUGINFO_PACKAGE=TRUE"
"-DCPACK_RPM_DEBUGINFO_PACKAGE=TRUE"
"-DCPACK_RPM_INSTALL_WITH_EXEC=TRUE"
"-DCMAKE_CXX_FLAGS_RELWITHDEBINFO=${SET_DWARF_VERSION_4} -O3 -g -DNDEBUG"
)
fi
eval "${retCmakeParams}=( \"\${cmake_params[@]}\" ) "
}
# Setup a number of variables to specify where to find the source
# where to do the build and where to put the packages
# Note the PACKAGE_DIR downcases the package name
# This could be extended to do different things based on $1
set_component_src(){
COMPONENT_SRC="$LIBS_WORK_DIR/$1"
BUILD_DIR="$OUT_DIR/build/$1"
DEB_PATH="$OUT_DIR/${PKGTYPE}/${1,,}"
RPM_PATH="$OUT_DIR/${PKGTYPE}/${1,,}"
PACKAGE_DIR="$OUT_DIR/${PKGTYPE}/${1,,}"
}
# Standard definition of function to print the package location. If
# for some reason a custom version is needed then it can overwrite
# this definition
# TODO: Don't use a global PKGTYPE, pass the value in as a parameter
print_output_directory() {
case ${1:-$PKGTYPE} in
("deb")
echo ${DEB_PATH};;
("rpm")
echo ${RPM_PATH};;
(*)
echo "Invalid package type \"${PKGTYPE}\" provided for -o" >&2; exit 1;;
esac
exit
}
# Standard argument processing
# Here to avoid repetition
TARGET="build" # default target
stage2_command_args(){
while [ "$1" != "" ];
do
case $1 in
-o | --outdir )
shift 1; PKGTYPE=$1 ; TARGET="outdir" ;;
-c | --clean )
TARGET="clean" ;;
*)
break ;;
esac
shift 1
done
}
show_build_cache_stats(){
if [ "$CCACHE_ENABLED" = "true" ] ; then
if ! ccache -s; then
echo "Unable to display sccache stats"
fi
fi
}

View File

@@ -1,8 +0,0 @@
FROM ubuntu:focal as builder
COPY packages /tmp/packages
COPY install-prerequisites.sh /tmp/install-prerequisites.sh
RUN chmod +x /tmp/install-prerequisites.sh
ENV KBUILD_PKG_ROOTCMD=
ENV RPP_DEPS_LOCATION=/usr/local/rpp-deps
RUN /tmp/install-prerequisites.sh
WORKDIR /src

View File

@@ -1,26 +0,0 @@
## Steps to build the Docker Image
1. Clone this repositry
```bash
git clone -b <release_branch> https://github.com/ROCm/ROCm.git
```
2. Go into the OS specific docker directory in build-infra
```bash
cd ROCm/rocm-build/docker/ubuntu20
```
3. Build the Docker image
```bash
docker build -t <docker Image Name> .
```
replace the `<docker Image Name>` with the new Docker image Name of your choice,
4. After successful build, verify your \<docker Image Name\> in the list all available docker images.
```bash
docker images
```

View File

@@ -1,269 +0,0 @@
#! /usr/bin/bash
set -ex
apt-get update
DEBIAN_FRONTEND=noninteractive DEBCONF_NONINTERACTIVE_SEEN=true apt-get install --no-install-recommends -y $(grep -v '^#' /tmp/packages)
apt-get clean
rm -rf /var/cache/apt/ /var/lib/apt/lists/* /etc/apt/apt.conf.d/01proxy
#Install git 2.17.1 version
curl -o git.tar.gz https://cdn.kernel.org/pub/software/scm/git/git-2.17.1.tar.gz
tar -zxf git.tar.gz
cd git-*
make prefix=/usr/local all
make prefix=/usr/local install
git --version
pip3 install --no-cache-dir setuptools wheel tox
pip3 install --no-cache-dir CppHeaderParser argparse requests lxml barectf recommonmark jinja2==3.0.0\
websockets matplotlib numpy scipy minimal msgpack pytest sphinx joblib cmake==3.25.2 pandas myst-parser lit
# Allow sudo for everyone user
echo 'ALL ALL=(ALL) NOPASSWD:ALL' > /etc/sudoers.d/everyone
wget https://repo.radeon.com/amdgpu-install/6.3/ubuntu/focal/amdgpu-install_6.3.60300-1_all.deb
apt install -y ./amdgpu-install_6.3.60300-1_all.deb
apt update
apt install -y libva-amdgpu-dev libdrm-amdgpu-dev
rm -rf /etc/apt/sources.list.d/amdgpu.list /etc/apt/sources.list.d/amdgpu-proprietary.list ./amdgpu-install_6.3.60300-1_all.deb
apt autoremove -y --purge amdgpu-install
apt update
# Build ccache from the source
cd /tmp
git clone https://github.com/ccache/ccache -b v4.7.5
cd ccache
mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Release ..
make
make install
cd /tmp
rm -rf ccache
# symlinks for ccache
ln -s /usr/local/bin/ccache /usr/local/bin/gcc
ln -s /usr/local/bin/ccache /usr/local/bin/g++
ln -s /usr/local/bin/ccache /usr/local/bin/cc
ln -s /usr/local/bin/ccache /usr/local/bin/c++
ln -s /usr/local/bin/ccache /usr/local/bin/amdclang
ln -s /usr/local/bin/ccache /usr/local/bin/amdclang++
ln -s /usr/local/bin/ccache /usr/local/bin/hipcc
# Install OCaml packages
wget -nv https://sourceforge.net/projects/opam.mirror/files/2.1.6/opam-2.1.6-x86_64-linux/download -O /usr/local/bin/opam
chmod +x /usr/local/bin/opam
opam init --yes --disable-sandboxing
opam install ctypes --yes
# Install and modify git-repo
curl https://storage.googleapis.com/git-repo-downloads/repo > /usr/bin/repo
chmod a+x /usr/bin/repo
#Install doxygen 1.8.11
mkdir /tmp/doxygen
cd /tmp/doxygen
curl -LO https://sourceforge.net/projects/doxygen/files/rel-1.8.18/doxygen-1.8.18.src.tar.gz
tar xzf doxygen-1.8.18.src.tar.gz
cd doxygen-1.8.18
mkdir -p build
cd build
cmake -G "Unix Makefiles" -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr/local -Wno-dev ..
make -j install
cd ../..
rm -rf /tmp/doxygen
cd /var/tmp
mkdir mlnx
wget -O mlnx/tar.tgz https://content.mellanox.com/ofed/MLNX_OFED-5.2-1.0.4.0/MLNX_OFED_LINUX-5.2-1.0.4.0-ubuntu20.04-x86_64.tgz
tar -xz -C mlnx -f mlnx/tar.tgz
apt-key add mlnx/*/RPM-GPG-KEY-Mellanox
echo "deb [arch=amd64] file:$(echo $PWD/mlnx/*/DEBS) ./" > /etc/apt/sources.list.d/sharp.list
apt update
apt install -y sharp
apt clean
rm -rf /var/cache/apt/ /var/lib/apt/lists/* mlnx /etc/apt/sources.list.d/sharp.list
curl -lO https://download.open-mpi.org/release/hwloc/v1.11/hwloc-1.11.13.tar.bz2
tar -xvf hwloc-1.11.13.tar.bz2
cd hwloc-1.11.13
./configure
make
make install
cp /usr/local/lib/libhwloc.so.5 /usr/lib
hwloc-info --version
# Install googletest from source
mkdir -p /tmp/gtest
cd /tmp/gtest
wget https://github.com/google/googletest/archive/refs/tags/v1.14.0.zip -O googletest.zip
unzip googletest.zip
cd googletest-1.14.0/
mkdir build
cd build
cmake ..
make -j$(nproc)
make install
rm -rf /tmp/gtest
# Install gRPC from source
GRPC_ARCHIVE=grpc-1.61.0.tar.gz
mkdir /tmp/grpc
mkdir /usr/grpc
cd /tmp
git clone --recurse-submodules -b v1.61.0 https://github.com/grpc/grpc
cd grpc
mkdir -p cmake/build
cd cmake/build
cmake -DgRPC_INSTALL=ON -DBUILD_SHARED_LIBS=ON -DgRPC_BUILD_TESTS=OFF -DCMAKE_INSTALL_PREFIX=/usr/grpc -DCMAKE_CXX_STANDARD=14 -DCMAKE_SHARED_LINKER_FLAGS_INIT=-Wl,--enable-new-dtags,--build-id=sha1,--rpath,'$ORIGIN' ../..
make -j$(nproc)
make install
cd /
rm -rf /tmp/grpc
# Download prebuilt AMD multithreaded blis (2.0)
mkdir -p /tmp/blis
cd /tmp/blis
wget -O - https://github.com/amd/blis/releases/download/2.0/aocl-blis-mt-ubuntu-2.0.tar.gz | tar xfz -
mv amd-blis-mt /usr/blis
cd /
rm -rf /tmp/blis
# Download aocl-linux-gcc-4.2.0_1_amd64.deb
mkdir -p /tmp/aocl
cd /tmp/aocl
wget -nv https://download.amd.com/developer/eula/aocl/aocl-4-2/aocl-linux-gcc-4.2.0_1_amd64.deb
apt install ./aocl-linux-gcc-4.2.0_1_amd64.deb
rm -rf /tmp/aocl
# lapack(3.9.1v)
lapack_version=3.9.1
lapack_srcdir=lapack-$lapack_version
lapack_blddir=lapack-$lapack_version-bld
mkdir -p /tmp/lapack
cd /tmp/lapack
mkdir -p /tmp/lapack
cd /tmp/lapack
rm -rf "$lapack_srcdir" "$lapack_blddir"
wget -O - https://github.com/Reference-LAPACK/lapack/archive/refs/tags/v3.9.1.tar.gz | tar xzf -
cmake -H$lapack_srcdir -B$lapack_blddir -DCMAKE_BUILD_TYPE=Release -DCMAKE_Fortran_FLAGS=-fno-optimize-sibling-calls -DBUILD_TESTING=OFF -DCBLAS=ON -DLAPACKE=OFF
make -j$(nproc) -C "$lapack_blddir"
make -C "$lapack_blddir" install
cd $lapack_blddir
cp -r ./include/* /usr/local/include/
cp -r ./lib/* /usr/local/lib
cd /
rm -rf /tmp/lapack
# FMT(7.1.3v)
fmt_version=7.1.3
fmt_srcdir=fmt-$fmt_version
fmt_blddir=fmt-$fmt_version-bld
rm -rf "$fmt_srcdir" "$fmt_blddir"
wget -O - https://github.com/fmtlib/fmt/archive/refs/tags/$fmt_version.tar.gz | tar xzf -
cmake -H$fmt_srcdir -B$fmt_blddir -DCMAKE_BUILD_TYPE=Release -DCMAKE_POSITION_INDEPENDENT_CODE=ON -DCMAKE_CXX_STANDARD=17 -DCMAKE_CXX_EXTENSIONS=OFF -DCMAKE_CXX_STANDARD_REQUIRED=ON -DFMT_DOC=OFF -DFMT_TEST=OFF
make -j$(nproc) -C "$fmt_blddir"
make -C "$fmt_blddir" install
# Build and install libjpeg-turbo
mkdir -p /tmp/libjpeg-turbo
cd /tmp/libjpeg-turbo
wget -nv https://github.com/rrawther/libjpeg-turbo/archive/refs/heads/2.0.6.2.zip -O libjpeg-turbo-2.0.6.2.zip
unzip libjpeg-turbo-2.0.6.2.zip
cd libjpeg-turbo-2.0.6.2
mkdir build
cd build
cmake -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=RELEASE -DENABLE_STATIC=FALSE -DCMAKE_INSTALL_DEFAULT_LIBDIR=lib ..
make -j$(nproc) install
rm -rf /tmp/libjpeg-turbo
# Get released ninja from source
mkdir -p /tmp/ninja
cd /tmp/ninja
wget -nv https://codeload.github.com/Kitware/ninja/zip/refs/tags/v1.11.1.g95dee.kitware.jobserver-1 -O ninja.zip
unzip ninja.zip
cd ninja-1.11.1.g95dee.kitware.jobserver-1
./configure.py --bootstrap
cp ninja /usr/local/bin/
rm -rf /tmp/ninja
# Build NASM
mkdir -p /tmp/nasm-2.15.05
cd /tmp
wget -qO- "https://distfiles.macports.org/nasm/nasm-2.15.05.tar.bz2" | tar -xvj
cd nasm-2.15.05
./autogen.sh
./configure --prefix="/usr/local"
make -j$(nproc) install
rm -rf /tmp/nasm-2.15.05
# Build YASM
mkdir -p /tmp/yasm-1.3.0
cd /tmp
wget -qO- "http://www.tortall.net/projects/yasm/releases/yasm-1.3.0.tar.gz" | tar -xvz
cd yasm-1.3.0
./configure --prefix="/usr/local"
make -j$(nproc) install
rm -rf /tmp/yasm-1.3.0
# Build x264
mkdir -p /tmp/x264-snapshot-20191217-2245-stable
cd /tmp
wget -qO- "https://download.videolan.org/pub/videolan/x264/snapshots/x264-snapshot-20191217-2245-stable.tar.bz2" | tar -xvj
cd /tmp/x264-snapshot-20191217-2245-stable
PKG_CONFIG_PATH="/usr/local/lib/pkgconfig" ./configure --prefix="/usr/local" --enable-shared
make -j$(nproc) install
rm -rf /tmp/x264-snapshot-20191217-2245-stable
# Build x265
mkdir -p /tmp/x265_2.7
cd /tmp
wget -qO- "https://get.videolan.org/x265/x265_2.7.tar.gz" | tar -xvz
cd /tmp/x265_2.7/build/linux
cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX="/usr/local" -DENABLE_SHARED:bool=on ../../source
make -j$(nproc) install
rm -rf /tmp/x265_2.7
# Build fdk-aac
mkdir -p /tmp/fdk-aac-2.0.2
cd /tmp
wget -qO- "https://sourceforge.net/projects/opencore-amr/files/fdk-aac/fdk-aac-2.0.2.tar.gz" | tar -xvz
cd /tmp/fdk-aac-2.0.2
autoreconf -fiv
./configure --prefix="/usr/local" --enable-shared --disable-static
make -j$(nproc) install
rm -rf /tmp/fdk-aac-2.0.2
# Build FFmpeg
cd /tmp
git clone -b release/4.4 https://git.ffmpeg.org/ffmpeg.git ffmpeg
cd ffmpeg
PKG_CONFIG_PATH="/usr/local/lib/pkgconfig"
./configure --prefix="/usr/local" --extra-cflags="-I/usr/local/include" --extra-ldflags="-L/usr/local/lib" --extra-libs=-lpthread --extra-libs=-lm --enable-shared --disable-static --enable-libx264 --enable-libx265 --enable-libfdk-aac --enable-gpl --enable-nonfree
make -j$(nproc) install
rm -rf /tmp/ffmpeg
command -v lbzip2
ln -sf $(command -v lbzip2) /usr/local/bin/compressor || ln -sf $(command -v bzip2) /usr/local/bin/compressor
# Install Google Benchmark
mkdir -p /tmp/Gbenchmark
cd /tmp/Gbenchmark
wget -qO- https://github.com/google/benchmark/archive/refs/tags/v1.6.1.tar.gz | tar xz
cmake -Sbenchmark-1.6.1 -Bbuild -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=OFF -DBENCHMARK_ENABLE_TESTING=OFF -DCMAKE_CXX_STANDARD=14
make -j -C build
cd /tmp/Gbenchmark/build
make install
mkdir -p /tmp/boost-1.82.0
cd /tmp/boost-1.82.0
wget -nv https://sourceforge.net/projects/boost/files/boost/1.82.0/boost_1_82_0.tar.bz2 -O ./boost_1_82_0.tar.bz2
tar -xf boost_1_82_0.tar.bz2 --use-compress-program="/usr/local/bin/compressor"
cd boost_1_82_0
./bootstrap.sh --prefix=${RPP_DEPS_LOCATION} --with-python=python3
./b2 stage -j$(nproc) threading=multi link=shared cxxflags="-std=c++11"
./b2 install threading=multi link=shared --with-system --with-filesystem
./b2 stage -j$(nproc) threading=multi link=static cxxflags="-std=c++11 -fpic" cflags="-fpic"
./b2 install threading=multi link=static --with-system --with-filesystem
rm -rf /tmp/boost-1.82.0

View File

@@ -1,141 +0,0 @@
apt-utils
aria2
autoconf
automake
bc
bison
bridge-utils
build-essential
bzip2
ccache
check
chrpath
cifs-utils
cpio
curl
devscripts
dkms
dos2unix
fakeroot
flex
freeglut3-dev
g++
g++-multilib
gawk
gcc
gcc-multilib
gfortran
git-lfs
gnupg
graphviz
kernel-wedge
lbzip2
less
libass-dev
libatlas-base-dev
libbabeltrace-ctf-dev
libbabeltrace-dev
libboost-all-dev
libboost-dev
libboost-filesystem-dev
libboost-program-options-dev
libboost-system-dev
libbz2-dev
libc++-dev
libc++1
libc++abi-dev
libc++abi1
libc6-dev-i386
libcap-dev
libcurl4-openssl-dev
libdrm-dev
libdw-dev
libdw1
libdwarf-dev
libelf-dev
libelf1
libexpat1-dev
libfftw3-dev
libfile-find-rule-perl
libgflags-dev
libglew-dev
libgmp-dev
libgoogle-glog-dev
libgtk2.0-dev
libhdf5-serial-dev
libjpeg-dev
libleveldb-dev
liblmdb-dev
liblzma-dev
libmpfr-dev
libmpich-dev
libmsgpack-dev
libncurses5-dev
libnuma-dev
libomp-dev
libopenblas-base
libopenblas-dev
libopencv-dev
libpci-dev
libpci3
libpciaccess-dev
libpciaccess0
libprotobuf-dev
libpython2.7-dev
libpython3-dev
libreadline-dev
libsnappy-dev
libssl-dev
libsuitesparse-dev
libsystemd-dev
libtinfo-dev
libtool
libunwind-dev
liburi-encode-perl
libva-dev
libvirt-clients
libvirt-daemon-system
libyaml-cpp-dev
libzstd-dev
llvm
llvm-6.0-dev
llvm-dev
llvm-runtime
mesa-common-dev
mpich
ocaml
ocaml-findlib
ocl-icd-libopencl1
ocl-icd-opencl-dev
patchelf
pigz
pkg-config
protobuf-compiler
python-is-python3
python-pip-whl
python-yaml
python3-dev
python3-pip
python3-venv
python3-yaml
python3.8-dev
re2c
redis-tools
# Eventually we should be able to remove rpm for debian builds.
rpm
rsync
ssh
# This makes life more pleasent inside the container
strace
sudo
systemtap-sdt-dev
texinfo
texlive
texlive-extra-utils
texlive-plain-generic
texlive-xetex
unzip
vim
wget
xsltproc
zlib1g-dev

View File

@@ -1,9 +1,9 @@
FROM ubuntu:jammy as builder
COPY packages /tmp/packages
COPY local-pin-600 /tmp/local-pin-600
COPY install-prerequisites.sh /tmp/install-prerequisites.sh
RUN chmod +x /tmp/install-prerequisites.sh
COPY install-prerequisities.sh /tmp/install-prerequisities.sh
RUN chmod +x /tmp/install-prerequisities.sh
ENV KBUILD_PKG_ROOTCMD=
ENV RPP_DEPS_LOCATION=/usr/local/rpp-deps
RUN /tmp/install-prerequisites.sh
RUN /tmp/install-prerequisities.sh
WORKDIR /src

View File

@@ -1,26 +1,18 @@
## Steps to build the Docker Image
1. Clone this repositry
```bash
git clone -b <release_branch> https://github.com/ROCm/ROCm.git
git clone https://github.com/ROCm/rocm-build.git
```
2. Go into the OS specific docker directory in build-infra
```bash
cd ROCm/rocm-build/docker/ubuntu22
cd rocm-build/build/docker/ubuntu22
```
3. Build the docker image
```bash
docker build -t <docker Image Name> .
```
replace the `<docker Image Name>` with the new Docker image Name of your choice,
4. After successful build, verify your \<docker Image Name\> in the list all available docker images.
```bash
docker images
```

View File

@@ -1,279 +0,0 @@
#! /usr/bin/bash
set -ex
apt-get -y update
DEBIAN_FRONTEND=noninteractive DEBCONF_NONINTERACTIVE_SEEN=true apt-get install --no-install-recommends -y $(sed 's/#.*//' /tmp/packages)
apt-get clean
rm -rf /var/cache/apt/ /var/lib/apt/lists/* /etc/apt/apt.conf.d/01proxy
#Install git 2.17.1 version
curl -o git.tar.gz https://cdn.kernel.org/pub/software/scm/git/git-2.17.1.tar.gz
tar -zxf git.tar.gz
cd git-*
make prefix=/usr/local all
make prefix=/usr/local install
git --version
pip3 install --no-cache-dir setuptools wheel tox
pip3 install --no-cache-dir CppHeaderParser argparse requests lxml barectf recommonmark jinja2==3.0.0 \
websockets matplotlib numpy==1.26.4 scipy minimal msgpack pytest sphinx joblib PyYAML rocm-docs-core cmake==3.25.2 pandas myst-parser lit
# Allow sudo for everyone user
echo 'ALL ALL=(ALL) NOPASSWD:ALL' > /etc/sudoers.d/everyone
wget https://repo.radeon.com/amdgpu-install/6.3/ubuntu/jammy/amdgpu-install_6.3.60300-1_all.deb
apt install -y ./amdgpu-install_6.3.60300-1_all.deb
apt update
apt install -y libva-amdgpu-dev libdrm-amdgpu-dev
rm -rf /etc/apt/sources.list.d/amdgpu.list /etc/apt/sources.list.d/amdgpu-proprietary.list ./amdgpu-install_6.3.60300-1_all.deb
apt autoremove -y --purge amdgpu-install
apt update
# Build ccache from the source
cd /tmp
git clone https://github.com/ccache/ccache -b v4.7.5
cd ccache
mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Release ..
make
make install
cd /tmp
rm -rf ccache
# symlinks for ccache
ln -s /usr/local/bin/ccache /usr/local/bin/gcc
ln -s /usr/local/bin/ccache /usr/local/bin/g++
ln -s /usr/local/bin/ccache /usr/local/bin/cc
ln -s /usr/local/bin/ccache /usr/local/bin/c++
ln -s /usr/local/bin/ccache /usr/local/bin/amdclang
ln -s /usr/local/bin/ccache /usr/local/bin/amdclang++
ln -s /usr/local/bin/ccache /usr/local/bin/hipcc
# Install OCaml packages
wget -nv https://sourceforge.net/projects/opam.mirror/files/2.1.6/opam-2.1.6-x86_64-linux/download -O /usr/local/bin/opam
chmod +x /usr/local/bin/opam
opam init --yes --disable-sandboxing
opam install ctypes --yes
# Install and modify git-repo
curl https://storage.googleapis.com/git-repo-downloads/repo > /usr/bin/repo
chmod a+x /usr/bin/repo
cd /var/tmp
mkdir mlnx
wget -O mlnx/tar.tgz https://content.mellanox.com/ofed/MLNX_OFED-24.01-0.3.3.1/MLNX_OFED_LINUX-24.01-0.3.3.1-ubuntu22.04-x86_64.tgz
tar -xz -C mlnx -f mlnx/tar.tgz
apt-key add mlnx/*/RPM-GPG-KEY-Mellanox
echo "deb [arch=amd64] file:$(echo $PWD/mlnx/*/DEBS) ./" > /etc/apt/sources.list.d/sharp.list
apt update
apt install -y sharp
apt clean
rm -rf /var/cache/apt/ /var/lib/apt/lists/* mlnx /etc/apt/sources.list.d/sharp.list
apt update
apt -y install libunwind-dev
apt -y install libgoogle-glog-dev
# Install python3.8 from source
curl -LO https://www.python.org/ftp/python/3.8.13/Python-3.8.13.tar.xz
tar -xvf Python-3.8.13.tar.xz
pwd
ls /var/tmp/
ls Python-3.8.13
mv Python-3.8.13 /opt/
apt install build-essential zlib1g-dev libncurses5-dev libgdbm-dev libnss3-dev libssl-dev libsqlite3-dev libreadline-dev libffi-dev curl libbz2-dev pkg-config make -y
cd /opt/Python-3.8.13/
./configure --enable-optimizations --enable-shared
make
make -j 6
make altinstall
ldconfig /opt/Python3.8.13
python3.8 --version
python3.8 -m pip install setuptools wheel
python3.8 -m pip install CppHeaderParser argparse requests lxml PyYAML joblib
curl -lO https://download.open-mpi.org/release/hwloc/v1.11/hwloc-1.11.13.tar.bz2
tar -xvf hwloc-1.11.13.tar.bz2
cd hwloc-1.11.13
./configure
make
make install
cp /usr/local/lib/libhwloc.so.5 /usr/lib
hwloc-info --version
# Install googletest from source
mkdir -p /tmp/gtest
cd /tmp/gtest
wget https://github.com/google/googletest/archive/refs/tags/v1.14.0.zip -O googletest.zip
unzip googletest.zip
cd googletest-1.14.0/
mkdir build
cd build
cmake ..
make -j$(nproc)
make install
rm -rf /tmp/gtest
# Install gRPC from source
GRPC_ARCHIVE=grpc-1.61.0.tar.gz
mkdir /tmp/grpc
mkdir /usr/grpc
cd /tmp
git clone --recurse-submodules -b v1.61.0 https://github.com/grpc/grpc
cd grpc
mkdir -p build
cd build
cmake -DgRPC_INSTALL=ON -DBUILD_SHARED_LIBS=ON -DgRPC_BUILD_TESTS=OFF -DCMAKE_INSTALL_PREFIX=/usr/grpc -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_STANDARD=14 -DCMAKE_SHARED_LINKER_FLAGS_INIT=-Wl,--enable-new-dtags,--build-id=sha1,--rpath,'$ORIGIN' ..
make -j $(nproc) install
rm -rf /tmp/grpc
# Download prebuilt AMD multithreaded blis (2.0)
mkdir -p /tmp/blis
cd /tmp/blis
wget -O - https://github.com/amd/blis/releases/download/2.0/aocl-blis-mt-ubuntu-2.0.tar.gz | tar xfz -
mv amd-blis-mt /usr/blis
cd /
rm -rf /tmp/blis
# Download aocl-linux-gcc-4.2.0_1_amd64.deb
mkdir -p /tmp/aocl
cd /tmp/aocl
wget -nv https://download.amd.com/developer/eula/aocl/aocl-4-2/aocl-linux-gcc-4.2.0_1_amd64.deb
apt install ./aocl-linux-gcc-4.2.0_1_amd64.deb
rm -rf /tmp/aocl
# lapack(3.9.1v)
lapack_version=3.9.1
lapack_srcdir=lapack-$lapack_version
lapack_blddir=lapack-$lapack_version-bld
mkdir -p /tmp/lapack
cd /tmp/lapack
rm -rf "$lapack_srcdir" "$lapack_blddir"
wget -O - https://github.com/Reference-LAPACK/lapack/archive/refs/tags/v3.9.1.tar.gz | tar xzf -
cmake -H$lapack_srcdir -B$lapack_blddir -DCMAKE_BUILD_TYPE=Release -DCMAKE_Fortran_FLAGS=-fno-optimize-sibling-calls -DBUILD_TESTING=OFF -DCBLAS=ON -DLAPACKE=OFF
make -j$(nproc) -C "$lapack_blddir"
make -C "$lapack_blddir" install
cd $lapack_blddir
cp -r ./include/* /usr/local/include/
cp -r ./lib/* /usr/local/lib
cd /
rm -rf /tmp/lapack
# FMT(7.1.3v)
fmt_version=7.1.3
fmt_srcdir=fmt-$fmt_version
fmt_blddir=fmt-$fmt_version-bld
mkdir -p /tmp/fmt
cd /tmp/fmt
rm -rf "$fmt_srcdir" "$fmt_blddir"
wget -O - https://github.com/fmtlib/fmt/archive/refs/tags/7.1.3.tar.gz | tar xzf -
cmake -H$fmt_srcdir -B$fmt_blddir -DCMAKE_BUILD_TYPE=Release -DCMAKE_POSITION_INDEPENDENT_CODE=ON -DCMAKE_CXX_STANDARD=17 -DCMAKE_CXX_EXTENSIONS=OFF -DCMAKE_CXX_STANDARD_REQUIRED=ON -DFMT_DOC=OFF -DFMT_TEST=OFF
make -j$(nproc) -C "$fmt_blddir"
make -C "$fmt_blddir" install
# Build and install libjpeg-turbo
mkdir -p /tmp/libjpeg-turbo
cd /tmp/libjpeg-turbo
wget -nv https://github.com/rrawther/libjpeg-turbo/archive/refs/heads/2.0.6.2.zip -O libjpeg-turbo-2.0.6.2.zip
unzip libjpeg-turbo-2.0.6.2.zip
cd libjpeg-turbo-2.0.6.2
mkdir build
cd build
cmake -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=RELEASE -DENABLE_STATIC=FALSE -DCMAKE_INSTALL_DEFAULT_LIBDIR=lib ..
make -j$(nproc) install
rm -rf /tmp/libjpeg-turbo
# Get released ninja from source
mkdir -p /tmp/ninja
cd /tmp/ninja
wget -nv https://codeload.github.com/Kitware/ninja/zip/refs/tags/v1.11.1.g95dee.kitware.jobserver-1 -O ninja.zip
unzip ninja.zip
cd ninja-1.11.1.g95dee.kitware.jobserver-1
./configure.py --bootstrap
cp ninja /usr/local/bin/
rm -rf /tmp/ninja
# Build NASM
mkdir -p /tmp/nasm-2.15.05
cd /tmp
wget -qO- "https://distfiles.macports.org/nasm/nasm-2.15.05.tar.bz2" | tar -xvj
cd nasm-2.15.05
./autogen.sh
./configure --prefix="/usr/local"
make -j$(nproc) install
rm -rf /tmp/nasm-2.15.05
# Build YASM
mkdir -p /tmp/yasm-1.3.0
cd /tmp
wget -qO- "http://www.tortall.net/projects/yasm/releases/yasm-1.3.0.tar.gz" | tar -xvz
cd yasm-1.3.0
./configure --prefix="/usr/local"
make -j$(nproc) install
rm -rf /tmp/yasm-1.3.0
# Build x264
mkdir -p /tmp/x264-snapshot-20191217-2245-stable
cd /tmp
wget -qO- "https://download.videolan.org/pub/videolan/x264/snapshots/x264-snapshot-20191217-2245-stable.tar.bz2" | tar -xvj
cd /tmp/x264-snapshot-20191217-2245-stable
PKG_CONFIG_PATH="/usr/local/lib/pkgconfig" ./configure --prefix="/usr/local" --enable-shared
make -j$(nproc) install
rm -rf /tmp/x264-snapshot-20191217-2245-stable
# Build x265
mkdir -p /tmp/x265_2.7
cd /tmp
wget -qO- "https://get.videolan.org/x265/x265_2.7.tar.gz" | tar -xvz
cd /tmp/x265_2.7/build/linux
cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX="/usr/local" -DENABLE_SHARED:bool=on ../../source
make -j$(nproc) install
rm -rf /tmp/x265_2.7
# Build fdk-aac
mkdir -p /tmp/fdk-aac-2.0.2
cd /tmp
wget -qO- "https://sourceforge.net/projects/opencore-amr/files/fdk-aac/fdk-aac-2.0.2.tar.gz" | tar -xvz
cd /tmp/fdk-aac-2.0.2
autoreconf -fiv
./configure --prefix="/usr/local" --enable-shared --disable-static
make -j$(nproc) install
rm -rf /tmp/fdk-aac-2.0.2
# Build FFmpeg
cd /tmp
git clone -b release/4.4 https://git.ffmpeg.org/ffmpeg.git ffmpeg
cd ffmpeg
PKG_CONFIG_PATH="/usr/local/lib/pkgconfig"
./configure --prefix="/usr/local" --extra-cflags="-I/usr/local/include" --extra-ldflags="-L/usr/local/lib" --extra-libs=-lpthread --extra-libs=-lm --enable-shared --disable-static --enable-libx264 --enable-libx265 --enable-libfdk-aac --enable-gpl --enable-nonfree
make -j$(nproc) install
rm -rf /tmp/ffmpeg
cp /tmp/local-pin-600 /etc/apt/preferences.d
command -v lbzip2
ln -sf $(command -v lbzip2) /usr/local/bin/compressor || ln -sf $(command -v bzip2) /usr/local/bin/compressor
# Install Google Benchmark
mkdir -p /tmp/Gbenchmark
cd /tmp/Gbenchmark
wget -qO- https://github.com/google/benchmark/archive/refs/tags/v1.6.1.tar.gz | tar xz
cmake -Sbenchmark-1.6.1 -Bbuild -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=OFF -DBENCHMARK_ENABLE_TESTING=OFF -DCMAKE_CXX_STANDARD=14
make -j -C build
cd /tmp/Gbenchmark/build
make install
mkdir -p /tmp/boost-1.85.0
cd /tmp/boost-1.85.0
wget -nv https://sourceforge.net/projects/boost/files/boost/1.85.0/boost_1_85_0.tar.bz2 -O ./boost_1_85_0.tar.bz2
tar -xf boost_1_85_0.tar.bz2 --use-compress-program="/usr/local/bin/compressor"
cd boost_1_85_0
./bootstrap.sh --prefix=${RPP_DEPS_LOCATION} --with-python=python3
./b2 stage -j$(nproc) threading=multi link=shared cxxflags="-std=c++11"
./b2 install threading=multi link=shared --with-system --with-filesystem
./b2 stage -j$(nproc) threading=multi link=static cxxflags="-std=c++11 -fpic" cflags="-fpic"
./b2 install threading=multi link=static --with-system --with-filesystem
rm -rf /tmp/boost-1.85.0

View File

@@ -1,6 +1,6 @@
#! /usr/bin/bash
set -x
set -ex
apt-get -y update
DEBIAN_FRONTEND=noninteractive DEBCONF_NONINTERACTIVE_SEEN=true apt-get install --no-install-recommends -y $(sed 's/#.*//' /tmp/packages)
@@ -9,9 +9,9 @@ rm -rf /var/cache/apt/ /var/lib/apt/lists/* /etc/apt/apt.conf.d/01proxy
#Install 2.17.1 version of git as we are seeing issues with 2.25 , where it was not allowing to add git submodules if the user is different for parent git directory
curl -o git.tar.gz https://cdn.kernel.org/pub/software/scm/git/git-2.17.1.tar.gz
tar -zxf git.tar.gz
tar -zxf git.tar.gz
cd git-*
make prefix=/usr/local all
make prefix=/usr/local all
make prefix=/usr/local install
git --version
@@ -21,13 +21,23 @@ git --version
# Looks like I need them as seperate commands
# Sigh, install both python2 and python 3 version
pip3 install --no-cache-dir setuptools wheel tox
pip3 install --no-cache-dir CppHeaderParser argparse requests lxml barectf recommonmark jinja2==3.0.0 websockets matplotlib numpy scipy minimal msgpack pytest sphinx joblib PyYAML rocm-docs-core cmake==3.25.2 pandas myst-parser
pip3 install --no-cache-dir CppHeaderParser argparse requests lxml barectf recommonmark jinja2==3.0.0 \
websockets matplotlib numpy==1.26.4 scipy minimal msgpack pytest sphinx joblib PyYAML rocm-docs-core cmake==3.25.2 pandas myst-parser lit
# Allow sudo for everyone user
echo 'ALL ALL=(ALL) NOPASSWD:ALL' > /etc/sudoers.d/everyone
#Install libva-amdgpu-dev libdrm-amdgpu-dev
wget https://repo.radeon.com/amdgpu-install/6.3/ubuntu/jammy/amdgpu-install_6.3.60300-1_all.deb
apt install -y ./amdgpu-install_6.3.60300-1_all.deb
apt update
apt install -y libva-amdgpu-dev libdrm-amdgpu-dev
rm -rf /etc/apt/sources.list.d/amdgpu.list /etc/apt/sources.list.d/amdgpu-proprietary.list ./amdgpu-install_6.3.60300-1_all.deb
apt autoremove -y --purge amdgpu-install
apt update
# Install OCaml packages to build LLVM's OCaml bindings to be used in lightning compiler test pipeline
wget -nv https://sourceforge.net/projects/opam.mirror/files/2.1.4/opam-2.1.4-x86_64-linux -O /usr/local/bin/opam
wget -nv https://sourceforge.net/projects/opam.mirror/files/2.1.6/opam-2.1.6-x86_64-linux/download -O /usr/local/bin/opam
chmod +x /usr/local/bin/opam
opam init --yes --disable-sandboxing
opam install ctypes --yes
@@ -36,17 +46,6 @@ opam install ctypes --yes
curl https://storage.googleapis.com/git-repo-downloads/repo > /usr/bin/repo
chmod a+x /usr/bin/repo
# Build ccache from the source
cd /tmp
git clone https://github.com/ccache/ccache -b v4.7.5
cd ccache
mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Release ..
make
make install
cd /tmp
rm -rf ccache
# Install sharp from MLNX_OFED_LINUX as dependency for rccl-rdma-sharp-plugins
cd /var/tmp
@@ -62,7 +61,7 @@ rm -rf /var/cache/apt/ /var/lib/apt/lists/* mlnx /etc/apt/sources.list.d/sharp.l
apt update
apt -y install libunwind-dev
apt -y install libgoogle-glog-dev
apt -y install libgoogle-glog-dev;
# Install python3.8 from source
curl -LO https://www.python.org/ftp/python/3.8.13/Python-3.8.13.tar.xz
@@ -84,6 +83,7 @@ python3.8 --version
python3.8 -m pip install setuptools wheel
python3.8 -m pip install CppHeaderParser argparse requests lxml PyYAML joblib
#Install older version of hwloc-devel package for rocrtst
curl -lO https://download.open-mpi.org/release/hwloc/v1.11/hwloc-1.11.13.tar.bz2
tar -xvf hwloc-1.11.13.tar.bz2
@@ -109,29 +109,27 @@ rm -rf /tmp/gtest
## Install gRPC from source
## RDC Pre-requisites
GRPC_ARCHIVE=grpc-1.61.0.tar.gz
mkdir /tmp/grpc
mkdir /usr/grpc
cd /tmp
git clone --recurse-submodules -b v1.61.0 https://github.com/grpc/grpc
git clone --recurse-submodules -b v1.67.1 https://github.com/grpc/grpc
cd grpc
mkdir -p build
cd build
cmake -DgRPC_INSTALL=ON -DBUILD_SHARED_LIBS=ON -DgRPC_BUILD_TESTS=OFF -DCMAKE_INSTALL_PREFIX=/usr/grpc -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_STANDARD=14 -DCMAKE_SHARED_LINKER_FLAGS_INIT=-Wl,--enable-new-dtags,--build-id=sha1,--rpath,'$ORIGIN' ..
cmake -DgRPC_INSTALL=ON -DBUILD_SHARED_LIBS=ON -DgRPC_BUILD_TESTS=OFF -DCMAKE_INSTALL_PREFIX=/usr/grpc -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_STANDARD=14 -DCMAKE_SHARED_LINKER_FLAGS_INIT=-Wl,--enable-new-dtags,--build-id=sha1,--rpath,'$ORIGIN' ..
make -j $(nproc) install
rm -rf /tmp/grpc
## rocBLAS Pre-requisites
## Download prebuilt AMD multithreaded blis (2.0)
## Reference : https://github.com/ROCmSoftwarePlatform/rocBLAS/blob/develop/install.sh#L403
mkdir -p /tmp/blis
cd /tmp/blis
mkdir -p /tmp/blis
cd /tmp/blis
wget -O - https://github.com/amd/blis/releases/download/2.0/aocl-blis-mt-ubuntu-2.0.tar.gz | tar xfz -
mv amd-blis-mt /usr/blis
cd /
rm -rf /tmp/blis
## rocBLAS Pre-requisites(SWDEV-404612)
## rocBLAS Pre-requisites
## Download aocl-linux-gcc-4.2.0_1_amd64.deb
mkdir -p /tmp/aocl
cd /tmp/aocl
@@ -195,6 +193,9 @@ cp ninja /usr/local/bin/
rm -rf /tmp/ninja
# Install FFmpeg and dependencies
apt-get update
apt-get install --no-install-recommends -y ffmpeg libavcodec-dev libavformat-dev libavutil-dev libswscale-dev
# Build NASM
mkdir -p /tmp/nasm-2.15.05
cd /tmp
@@ -242,15 +243,6 @@ autoreconf -fiv
make -j$(nproc) install
rm -rf /tmp/fdk-aac-2.0.2
# Build FFmpeg
cd /tmp
git clone -b release/4.4 https://git.ffmpeg.org/ffmpeg.git ffmpeg
cd ffmpeg
PKG_CONFIG_PATH="/usr/local/lib/pkgconfig"
./configure --prefix="/usr/local" --extra-cflags="-I/usr/local/include" --extra-ldflags="-L/usr/local/lib" --extra-libs=-lpthread --extra-libs=-lm --enable-shared --disable-static --enable-libx264 --enable-libx265 --enable-libfdk-aac --enable-gpl --enable-nonfree
make -j$(nproc) install
rm -rf /tmp/ffmpeg
cp /tmp/local-pin-600 /etc/apt/preferences.d
command -v lbzip2
@@ -283,3 +275,50 @@ cd boost_1_85_0
./b2 stage -j$(nproc) threading=multi link=static cxxflags="-std=c++11 -fpic" cflags="-fpic"
./b2 install threading=multi link=static --with-system --with-filesystem
rm -rf /tmp/boost-1.85.0
# Build ccache from the source
cd /tmp
git clone https://github.com/ccache/ccache -b v4.7.5
cd ccache
mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Release ..
make
make install
cd /tmp
rm -rf ccache
# symlinks for ccache
ln -s /usr/local/bin/ccache /usr/local/bin/gcc
ln -s /usr/local/bin/ccache /usr/local/bin/g++
ln -s /usr/local/bin/ccache /usr/local/bin/cc
ln -s /usr/local/bin/ccache /usr/local/bin/c++
ln -s /usr/local/bin/ccache /usr/local/bin/amdclang
ln -s /usr/local/bin/ccache /usr/local/bin/amdclang++
ln -s /usr/local/bin/ccache /usr/local/bin/hipcc
# Installing MIOpen dependencies
pip3 install https://github.com/RadeonOpenCompute/rbuild/archive/master.tar.gz
mkdir -p /tmp/MIOpen
git clone https://github.com/ROCm/MIOpen.git -b amd-master /tmp/MIOpen
cd /tmp/MIOpen
# Commenting rocMLIR and componsable kernel components to install thirt party dependences
sed -i '/ROCm\/rocMLIR@\|ROCm\/composable_kernel@/s/^/#/' requirements.txt
mkdir -p /tmp/miopen-deps
rbuild prepare -d /tmp/miopen-deps/ --cxx /usr/bin/g++ --cc /usr/bin/gcc
# Installing rocMLIR which is a depency for MIOPEN. Please not we are not installing CK
# explicitly its already build as part of rocm stack.
export PROC=${PROC:-"$(nproc)"}
MLIR_COMMIT="$(awk '/rocMLIR/ {split($1, s, "@"); print s[2]}' requirements.txt)"
mkdir -p /tmp/rocMLIR
cd /tmp/rocMLIR
wget -nv "https://www.github.com/ROCmSoftwarePlatform/rocMLIR/archive/${MLIR_COMMIT}.tar.gz"
tar -xzf "${MLIR_COMMIT}.tar.gz"
cd "rocMLIR-${MLIR_COMMIT}"
mkdir build
cd build
cmake -G Ninja -DCMAKE_C_COMPILER="/usr/bin/gcc" -DCMAKE_CXX_COMPILER="/usr/bin/g++" -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX="/tmp/miopen-deps" -DBUILD_FAT_LIBROCKCOMPILER=1 ..
cmake --build . -- librockCompiler
cmake --build . -- install
rm -rf _CPack_Packages/ /tmp/MIOpen /tmp/rocMLIR
find -name '*.o' -delete

View File

@@ -7,15 +7,14 @@ bison
bridge-utils
build-essential
bzip2
ccache
check
chrpath
cifs-utils
cpio
curl
devscripts
dkms
dos2unix
doxygen
fakeroot
flex
freeglut3-dev
@@ -27,12 +26,10 @@ gcc-multilib
gfortran
git-lfs
gnupg
googletest-tools
graphviz
grpc-proto
kernel-wedge
kmod
lbzip2
# less is needed by repo
less
libass-dev
libatlas-base-dev
@@ -63,6 +60,7 @@ libfile-find-rule-perl
libgflags-dev
libglew-dev
libgmp-dev
libgoogle-glog-dev
libgtk2.0-dev
libhdf5-serial-dev
libjpeg-dev
@@ -92,6 +90,7 @@ libsuitesparse-dev
libsystemd-dev
libtinfo-dev
libtool
libunwind-dev
liburi-encode-perl
libva-dev
libvirt-clients
@@ -99,6 +98,7 @@ libvirt-daemon-system
libyaml-cpp-dev
libzstd-dev
llvm
llvm-6.0-dev
llvm-dev
llvm-runtime
mesa-common-dev
@@ -112,12 +112,12 @@ pigz
pkg-config
protobuf-compiler
python-is-python3
python-pip-whl
python-yaml
python3-dev
python3-pip
python3-pip-whl
python3-venv
python3-yaml
python3-yaml
python3.8-dev
re2c
redis-tools

View File

@@ -1,11 +1,11 @@
FROM ubuntu:noble as builder
COPY packages /tmp/packages
COPY local-pin-600 /tmp/local-pin-600
COPY install-prerequisites.sh /tmp/install-prerequisites.sh
RUN chmod +x /tmp/install-prerequisites.sh
COPY install-prerequisities.sh /tmp/install-prerequisities.sh
RUN chmod +x /tmp/install-prerequisities.sh
ENV KBUILD_PKG_ROOTCMD=
ENV RPP_DEPS_LOCATION=/usr/local/rpp-deps
ENV PATH="/opt/venv/bin:$PATH"
ENV PATH=$PATH:"/usr/local/bin"
RUN /tmp/install-prerequisites.sh
RUN /tmp/install-prerequisities.sh
WORKDIR /src

View File

@@ -1,27 +1,18 @@
## Steps to build the Docker Image
1. Clone this repositry
```bash
git clone -b <release_branch> https://github.com/ROCm/ROCm.git
git clone https://github.com/ROCm/rocm-build.git
```
2. Go into the OS specific docker directory in build-infra
```bash
cd rocm-build/build/docker/ubuntu24
```
3. Build the docker image
```bash
docker build -t <docker Image Name> .
```
replace the `<docker Image Name>` with the new Docker image Name of your choice,
4. After successful build, verify your \<docker Image Name\> in the list all available docker images.
```bash
docker images
```

View File

@@ -2,19 +2,20 @@
set -ex
apt-get update
apt-get update
DEBIAN_FRONTEND=noninteractive DEBCONF_NONINTERACTIVE_SEEN=true apt-get install --no-install-recommends -y $(sed 's/#.*//' /tmp/packages)
apt-get clean
apt-get clean
rm -rf /var/cache/apt/ /var/lib/apt/lists/* /etc/apt/apt.conf.d/01proxy
#Install git 2.17.1 version
curl -o git.tar.gz https://cdn.kernel.org/pub/software/scm/git/git-2.17.1.tar.gz
tar -zxf git.tar.gz
cd git-*
make prefix=/usr/local all
#Install 2.17.1 version of git as we are seeing issues with 2.25 , where it was not allowing to add git submodules if the user is different for parent git directory
curl -o git.tar.gz https://cdn.kernel.org/pub/software/scm/git/git-2.17.1.tar.gz
tar -zxf git.tar.gz
cd git-*
make prefix=/usr/local all
make prefix=/usr/local install
git --version
# venv for python to be able to run pip3 without --break-system-packages
python3 -m venv /opt/venv
pip3 install CppHeaderParser argparse lxml recommonmark jinja2==3.0.0 \
@@ -27,43 +28,23 @@ echo 'ALL ALL=(ALL) NOPASSWD:ALL' > /etc/sudoers.d/everyone
wget https://repo.radeon.com/amdgpu-install/6.3/ubuntu/noble/amdgpu-install_6.3.60300-1_all.deb
apt install -y ./amdgpu-install_6.3.60300-1_all.deb
apt update
apt install -y libva-amdgpu-dev libdrm-amdgpu-dev
apt install -y libva-amdgpu-dev libdrm-amdgpu-dev
rm -rf /etc/apt/sources.list.d/amdgpu.list /etc/apt/sources.list.d/amdgpu-proprietary.list ./amdgpu-install_6.3.60300-1_all.deb
apt autoremove -y --purge amdgpu-install
apt update
# Build ccache from the source
cd /tmp
git clone https://github.com/ccache/ccache -b v4.7.5
cd ccache
mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Release ..
make
make install
cd /tmp
rm -rf ccache
# symlinks for ccache
ln -s /usr/local/bin/ccache /usr/local/bin/gcc
ln -s /usr/local/bin/ccache /usr/local/bin/g++
ln -s /usr/local/bin/ccache /usr/local/bin/cc
ln -s /usr/local/bin/ccache /usr/local/bin/c++
ln -s /usr/local/bin/ccache /usr/local/bin/amdclang
ln -s /usr/local/bin/ccache /usr/local/bin/amdclang++
ln -s /usr/local/bin/ccache /usr/local/bin/hipcc
# Install OCaml packages
wget -nv https://sourceforge.net/projects/opam.mirror/files/2.1.6/opam-2.1.6-x86_64-linux/download -O /usr/local/bin/opam
# Install OCaml packages to build LLVM's OCaml bindings to be used in lightning compiler test pipeline
wget -nv https://sourceforge.net/projects/opam.mirror/files/2.1.6/opam-2.1.6-x86_64-linux/download -O /usr/local/bin/opam
chmod +x /usr/local/bin/opam
opam init --yes --disable-sandboxing
opam install ctypes --yes
# Install and modify git-repo
# Install and modify git-repo (#!/usr/bin/env python -> #!/usr/bin/env python3)
curl https://storage.googleapis.com/git-repo-downloads/repo > /usr/bin/repo
chmod a+x /usr/bin/repo
#Install older version of hwloc-devel package for rocrtst
curl -lO https://download.open-mpi.org/release/hwloc/v1.11/hwloc-1.11.13.tar.bz2
tar -xvf hwloc-1.11.13.tar.bz2
cd hwloc-1.11.13
@@ -73,65 +54,71 @@ make install
cp /usr/local/lib/libhwloc.so.5 /usr/lib
hwloc-info --version
# Install googletest from source
# Install gtest
mkdir -p /tmp/gtest
cd /tmp/gtest
wget https://github.com/google/googletest/archive/refs/tags/v1.14.0.zip -O googletest.zip
unzip googletest.zip
cd googletest-1.14.0/
cd googletest-1.14.0/
mkdir build
cd build
cmake ..
make -j$(nproc)
cmake ..
make -j$(nproc)
make install
rm -rf /tmp/gtest
# Install gRPC from source
GRPC_ARCHIVE=grpc-1.61.0.tar.gz
## Install gRPC from source
## RDC Pre-requisites
mkdir /tmp/grpc
mkdir /usr/grpc
cd /tmp
git clone --recurse-submodules -b v1.61.0 https://github.com/grpc/grpc
mkdir /usr/grpc
cd /tmp
git clone --recurse-submodules -b v1.67.1 https://github.com/grpc/grpc
cd grpc
mkdir -p build
mkdir -p build
cd build
cmake -DgRPC_INSTALL=ON -DBUILD_SHARED_LIBS=ON -DgRPC_BUILD_TESTS=OFF -DCMAKE_INSTALL_PREFIX=/usr/grpc -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_STANDARD=14 ..
make -j $(nproc) install
rm -rf /tmp/grpc
# Download prebuilt AMD multithreaded blis (2.0)
mkdir -p /tmp/blis
### rocBLAS Pre-requisites
## Download prebuilt AMD multithreaded blis (2.0)
## Reference : https://github.com/ROCmSoftwarePlatform/rocBLAS/blob/develop/install.sh#L403
mkdir -p /tmp/blis
cd /tmp/blis
wget -O - https://github.com/amd/blis/releases/download/2.0/aocl-blis-mt-ubuntu-2.0.tar.gz | tar xfz -
mv amd-blis-mt /usr/blis
cd /
wget -O - https://github.com/amd/blis/releases/download/2.0/aocl-blis-mt-ubuntu-2.0.tar.gz | tar xfz -
mv amd-blis-mt /usr/blis
cd /
rm -rf /tmp/blis
# Download aocl-linux-aocc-4.0_1_amd64
## Download aocl-linux-aocc-4.0_1_amd64
mkdir -p /tmp/aocl
cd /tmp/aocl
wget -nv https://download.amd.com/developer/eula/aocl/aocl-4-0/aocl-linux-aocc-4.0_1_amd64.deb
apt install ./aocl-linux-aocc-4.0_1_amd64.deb
rm -rf /tmp/aocl
# lapack(3.9.1v)
## hipBLAS Pre-requisites
## lapack(3.9.1v)
## Reference https://github.com/ROCmSoftwarePlatform/rocSOLVER/blob/develop/install.sh#L174
lapack_version=3.9.1
lapack_srcdir=lapack-$lapack_version
lapack_blddir=lapack-$lapack_version-bld
mkdir -p /tmp/lapack
cd /tmp/lapack
rm -rf "$lapack_srcdir" "$lapack_blddir"
wget -O - https://github.com/Reference-LAPACK/lapack/archive/refs/tags/v3.9.1.tar.gz | tar xzf -
rm -rf "$lapack_srcdir" "$lapack_blddir"
wget -O - https://github.com/Reference-LAPACK/lapack/archive/refs/tags/v3.9.1.tar.gz | tar xzf -
cmake -H$lapack_srcdir -B$lapack_blddir -DCMAKE_BUILD_TYPE=Release -DCMAKE_Fortran_FLAGS=-fno-optimize-sibling-calls -DBUILD_TESTING=OFF -DCBLAS=ON -DLAPACKE=OFF
make -j$(nproc) -C "$lapack_blddir"
make -C "$lapack_blddir" install
cd $lapack_blddir
cp -r ./include/* /usr/local/include/
cp -r ./lib/* /usr/local/lib
cd /
cp -r ./include/* /usr/local/include/
cp -r ./lib/* /usr/local/lib
cd /
rm -rf /tmp/lapack
# FMT(7.1.3v)
# rocSOLVER Pre-requisites
## FMT(7.1.3v)
## Reference https://github.com/ROCmSoftwarePlatform/rocSOLVER/blob/develop/install.sh#L152
fmt_version=7.1.3
fmt_srcdir=fmt-$fmt_version
fmt_blddir=fmt-$fmt_version-bld
@@ -144,31 +131,35 @@ make -j$(nproc) -C "$fmt_blddir"
make -C "$fmt_blddir" install
# Build and install libjpeg-turbo
mkdir -p /tmp/libjpeg-turbo
cd /tmp/libjpeg-turbo
mkdir -p /tmp/libjpeg-turbo
cd /tmp/libjpeg-turbo
wget -nv https://github.com/rrawther/libjpeg-turbo/archive/refs/heads/2.0.6.2.zip -O libjpeg-turbo-2.0.6.2.zip
unzip libjpeg-turbo-2.0.6.2.zip
unzip libjpeg-turbo-2.0.6.2.zip
cd libjpeg-turbo-2.0.6.2
mkdir build
cd build
cmake -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=RELEASE -DENABLE_STATIC=FALSE -DCMAKE_INSTALL_DEFAULT_LIBDIR=lib ..
make -j$(nproc) install
cmake -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=RELEASE -DENABLE_STATIC=FALSE -DCMAKE_INSTALL_DEFAULT_LIBDIR=lib ..
make -j$(nproc) install
rm -rf /tmp/libjpeg-turbo
# Get released ninja from source
mkdir -p /tmp/ninja
cd /tmp/ninja
mkdir -p /tmp/ninja
cd /tmp/ninja
wget -nv https://codeload.github.com/Kitware/ninja/zip/refs/tags/v1.11.1.g95dee.kitware.jobserver-1 -O ninja.zip
unzip ninja.zip
cd ninja-1.11.1.g95dee.kitware.jobserver-1
./configure.py --bootstrap
cp ninja /usr/local/bin/
./configure.py --bootstrap
cp ninja /usr/local/bin/
rm -rf /tmp/ninja
# Install FFmpeg and dependencies
apt-get update
apt-get install --no-install-recommends -y ffmpeg libavcodec-dev libavformat-dev libavutil-dev libswscale-dev
# Build NASM
mkdir -p /tmp/nasm-2.15.05
mkdir -p /tmp/nasm-2.15.05
cd /tmp
wget -qO- "https://distfiles.macports.org/nasm/nasm-2.15.05.tar.bz2" | tar -xvj
wget -qO- "https://distfiles.macports.org/nasm/nasm-2.15.05.tar.bz2" | tar -xvj
cd nasm-2.15.05
./autogen.sh
./configure --prefix="/usr/local"
@@ -176,9 +167,9 @@ make -j$(nproc) install
rm -rf /tmp/nasm-2.15.05
# Build YASM
mkdir -p /tmp/yasm-1.3.0
mkdir -p /tmp/yasm-1.3.0
cd /tmp
wget -qO- "http://www.tortall.net/projects/yasm/releases/yasm-1.3.0.tar.gz" | tar -xvz
wget -qO- "http://www.tortall.net/projects/yasm/releases/yasm-1.3.0.tar.gz" | tar -xvz
cd yasm-1.3.0
./configure --prefix="/usr/local"
make -j$(nproc) install
@@ -212,26 +203,63 @@ autoreconf -fiv
make -j$(nproc) install
rm -rf /tmp/fdk-aac-2.0.2
# Build FFmpeg
cd /tmp
rm -rf ffmpeg
git clone -b release/4.4 https://git.ffmpeg.org/ffmpeg.git ffmpeg
cd ffmpeg
PKG_CONFIG_PATH="/usr/local/lib/pkgconfig"
./configure --prefix="/usr/local" --extra-cflags="-I/usr/local/include" --extra-ldflags="-L/usr/local/lib" --extra-libs=-lpthread --extra-libs=-lm --enable-shared --disable-static --enable-libx264 --enable-libx265 --enable-libfdk-aac --enable-gpl --enable-nonfree
make -j$(nproc) install
rm -rf /tmp/ffmpeg
cp /tmp/local-pin-600 /etc/apt/preferences.d
command -v lbzip2
ln -sf $(command -v lbzip2) /usr/local/bin/compressor || ln -sf $(command -v bzip2) /usr/local/bin/compressor
# Install Google Benchmark
mkdir -p /tmp/Gbenchmark
cd /tmp/Gbenchmark
wget -qO- https://github.com/google/benchmark/archive/refs/tags/v1.6.1.tar.gz | tar xz
cmake -Sbenchmark-1.6.1 -Bbuild -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=OFF -DBENCHMARK_ENABLE_TESTING=OFF -DCMAKE_CXX_STANDARD=14
make -j -C build
# Install Google Benchmark
mkdir -p /tmp/Gbenchmark
cd /tmp/Gbenchmark
wget -qO- https://github.com/google/benchmark/archive/refs/tags/v1.6.1.tar.gz | tar xz
cmake -Sbenchmark-1.6.1 -Bbuild -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=OFF -DBENCHMARK_ENABLE_TESTING=OFF -DCMAKE_CXX_STANDARD=14
make -j -C build
cd /tmp/Gbenchmark/build
make install
# Build ccache from the source
cd /tmp
git clone https://github.com/ccache/ccache -b v4.7.5
cd ccache
mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Release ..
make
make install
cd /tmp
rm -rf ccache
# symlinks for ccache
ln -s /usr/local/bin/ccache /usr/local/bin/gcc
ln -s /usr/local/bin/ccache /usr/local/bin/g++
ln -s /usr/local/bin/ccache /usr/local/bin/cc
ln -s /usr/local/bin/ccache /usr/local/bin/c++
ln -s /usr/local/bin/ccache /usr/local/bin/amdclang
ln -s /usr/local/bin/ccache /usr/local/bin/amdclang++
ln -s /usr/local/bin/ccache /usr/local/bin/hipcc
# Installing MIOpen dependencies
pip3 install https://github.com/RadeonOpenCompute/rbuild/archive/master.tar.gz
mkdir -p /tmp/MIOpen
git clone https://github.com/ROCm/MIOpen.git -b amd-master /tmp/MIOpen
cd /tmp/MIOpen
# Commenting rocMLIR and componsable kernel components to install thirt party dependences
sed -i '/ROCm\/rocMLIR@\|ROCm\/composable_kernel@/s/^/#/' requirements.txt
mkdir -p /tmp/miopen-deps
rbuild prepare -d /tmp/miopen-deps/ --cxx /usr/bin/g++ --cc /usr/bin/gcc
# Installing rocMLIR which is a depency for MIOPEN. Please not we are not installing CK
# explicitly its already build as part of rocm stack.
export PROC=${PROC:-"$(nproc)"}
MLIR_COMMIT="$(awk '/rocMLIR/ {split($1, s, "@"); print s[2]}' requirements.txt)"
mkdir -p /tmp/rocMLIR
cd /tmp/rocMLIR
wget -nv "https://www.github.com/ROCmSoftwarePlatform/rocMLIR/archive/${MLIR_COMMIT}.tar.gz"
tar -xzf "${MLIR_COMMIT}.tar.gz"
cd "rocMLIR-${MLIR_COMMIT}"
mkdir build
cd build
cmake -G Ninja -DCMAKE_C_COMPILER="/usr/bin/gcc" -DCMAKE_CXX_COMPILER="/usr/bin/g++" -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX="/tmp/miopen-deps" -DBUILD_FAT_LIBROCKCOMPILER=1 ..
cmake --build . -- librockCompiler
cmake --build . -- install
rm -rf _CPack_Packages/ /tmp/MIOpen /tmp/rocMLIR
find -name '*.o' -delete

View File

@@ -1,3 +0,0 @@
Package: *
Pin: origin ""
Pin-Priority: 600

View File

@@ -22,9 +22,18 @@ if [ "$DASH_JAY" == "" ]; then
fi
fi
export JOB_NAME=release
# explanation of JOB_DESIGNATOR states:
# exists, empty string -> originated from release job, pass thru a null string
# exists, non-empty -> originated from other CI job, use as set, example: "dnnhc."
# does not exist -> dev or non-CI build, got to this point without instantiation
# so assign a default value: "local."
export JOB_DESIGNATOR="${JOB_DESIGNATOR-"local."}"
echo "JOB_DESIGNATOR=${JOB_DESIGNATOR}"
# explanation of SLES_BUILD_ID_PREFIX states:
# exists, non-empty -> originated from sles job, use as set, example: "sles151."
# exists, empty string -> originated from non-sles job, pass thru a null string
# does not exist -> got to this point without instantiation so a default null string: ""
export SLES_BUILD_ID_PREFIX
echo "SLES_BUILD_ID_PREFIX=${SLES_BUILD_ID_PREFIX}"
@@ -42,11 +51,24 @@ export DISTRO_NAME=$ID
export DISTRO_RELEASE=$VERSION_ID
export DISTRO_ID=$ID-$VERSION_ID
# Enable wheel package for Almainux-8 mainline builds
# Currently no wheel package required for static and ASAN builds
if [[ "${DISTRO_ID}" == almalinux-8* ]] && [[ "${ENABLE_ADDRESS_SANITIZER}" != "true" ]] && [[ "${ENABLE_STATIC_BUILD}" != "true" ]]; then
export WHEEL_PACKAGE=true
else
unset WHEEL_PACKAGE
fi
case "${DISTRO_NAME}" in
("ubuntu") export CPACKGEN=DEB PACKAGEEXT=deb PKGTYPE=deb ROCM_PKGTYPE=DEB ;;
("centos") export CPACKGEN=RPM PACKAGEEXT=rpm PKGTYPE=rpm ;;
("sles") export CPACKGEN=RPM PACKAGEEXT=rpm PKGTYPE=rpm ;;
("rhel") export CPACKGEN=RPM PACKAGEEXT=rpm PKGTYPE=rpm ;;
("centos") export CPACKGEN=RPM PACKAGEEXT=rpm PKGTYPE=rpm ROCM_PKGTYPE=RPM ;;
("sles") export CPACKGEN=RPM PACKAGEEXT=rpm PKGTYPE=rpm ROCM_PKGTYPE=RPM ;;
("rhel") export CPACKGEN=RPM PACKAGEEXT=rpm PKGTYPE=rpm ROCM_PKGTYPE=RPM ;;
("mariner") export CPACKGEN=RPM PACKAGEEXT=rpm PKGTYPE=rpm ROCM_PKGTYPE=RPM ;;
("azurelinux") export CPACKGEN=RPM PACKAGEEXT=rpm PKGTYPE=rpm ROCM_PKGTYPE=RPM ;;
("almalinux") export CPACKGEN=RPM PACKAGEEXT=rpm PKGTYPE=rpm ROCM_PKGTYPE=RPM ;;
("debian") export CPACKGEN=DEB PACKAGEEXT=deb PKGTYPE=deb ROCM_PKGTYPE=DEB ;;
esac
# set up package file name variables for CPACK_GENERATOR
@@ -55,10 +77,15 @@ esac
export CPACK_DEBIAN_PACKAGE_RELEASE="${JOB_DESIGNATOR}${SLES_BUILD_ID_PREFIX}${BUILD_ID}~$VERSION_ID"
export CPACK_RPM_PACKAGE_RELEASE="${JOB_DESIGNATOR}${SLES_BUILD_ID_PREFIX}${BUILD_ID}"
export SCRIPT_PATH=$WORK_ROOT/brahma-utils/kfd-tools/scripts
export ENV_PATH=$SCRIPT_PATH/hsaThunk.env
OUT_DIR="${OUT_DIR:=$WORK_ROOT/out/$DISTRO_ID/$DISTRO_RELEASE}"
export OUT_DIR
export RT_TMP=$OUT_DIR/tmp/rt
# Unused
# export ROCM_VERSION=$(git --git-dir=$WORK_ROOT/.repo/manifests/.git describe --always)
#source transform, for things like ocl_lc
export SRC_TF_ROOT=$OUT_DIR/srctf
@@ -77,25 +104,36 @@ get_rocm_libpatch_version() {
# Read the default ROCm version from rocm_version.txt if the ROCM_VERSION
# variable is either not set, empty or only contains spaces.
if [ -f "${WORK_ROOT}/build/rocm_version.txt" ] && [ -z $ROCM_VERSION ]; then
ROCM_VERSION="$(cat ${WORK_ROOT}/build/rocm_version.txt)"
if [ -f "${BUILD_SCRIPT_ROOT}/rocm_version.txt" ] && [ -z $ROCM_VERSION ]; then
ROCM_VERSION="$(cat ${BUILD_SCRIPT_ROOT}/rocm_version.txt)"
fi
: ${ROCM_VERSION:="6.3.0"}
# ROCM variables
# ROCM_VERSION and ROCM_LIBPATCH_VERSION are changed: Eg:"3.3.0" ~= 30300
#default ROCM_VERSION: 9.99.99 and ROCM_LIBPATCH_VERSION: 99999 if not set
: ${ROCM_VERSION:="9.99.99"}
ROCM_LIBPATCH_VERSION=$(get_rocm_libpatch_version $ROCM_VERSION)
echo "ROCM_VERSION=${ROCM_VERSION}"
echo "ROCM_LIBPATCH_VERSION=${ROCM_LIBPATCH_VERSION}"
export ROCM_VERSION ROCM_LIBPATCH_VERSION
export ROCM_INSTALL_PATH="/opt/rocm-${ROCM_VERSION}-${BUILD_ID}"
# check if the job = release
if [[ "${JOB_NAME}" == *rel* ]]; then
export ROCM_INSTALL_PATH="/opt/rocm-${ROCM_VERSION}"
fi
# Previously we would put the job number into the ROCM_INSTALL_PATH
# This interacted badly with our desire to reuse builds, a it ment every build was unique
export ROCM_INSTALL_PATH="/opt/rocm-${ROCM_VERSION}"
# Setting the ROCM_INSTALL_PATH id to Last Know Good build ID, PSDB incremental built packages will install into /opt/rocm-<parent build ID>
if [ -n "${LKG_BUILD_ID}" ]; then
export ROCM_INSTALL_PATH="/opt/rocm-${ROCM_VERSION}-${LKG_BUILD_ID}"
# No longer applicable, as we no longer have the job number in the ROCM_INSTALL_PATH
if [ -n "${AFAR_VERSION}" ]; then
# multi-version (side-by-side) install for Advanced Feature Access Release (AFAR)
# suggested AFAR_VERSION: "afar001"
# Hopefully this is correct for AFAR
ROCM_INSTALL_PATH="/opt/rocm-${AFAR_VERSION##-}"
fi
if [[ "${ENABLE_STATIC_BUILDS}" == true ]]; then
# For static builds add a -static post fix in rocm folder
export ROCM_INSTALL_PATH="${ROCM_INSTALL_PATH}-static"
fi
echo "Setting ROCM_INSTALL_PATH=${ROCM_INSTALL_PATH}"
@@ -108,18 +146,30 @@ export DEVTOOLSET_LIBPATH="/opt/rh/devtoolset-7/root/usr/lib64;/opt/rh/devtoolse
# TODO: We should have autodiscoverable makefiles
export DIST_NO_DEBUG=yes
export OPENCL_MAINLINE=1
# export P4_ROOT=$WORK_ROOT/p4
# export RT_ROOT=$P4_ROOT/driver/
export FW_ROOT=$WORK_ROOT/brahma-utils/firmware/deb-pkgs
# export HSA_ROOT=$WORK_ROOT/hsa
export HSA_SOURCE_ROOT=$WORK_ROOT/ROCR-Runtime
# export HSA_CLOSED_SOURCE_ROOT=$WORK_ROOT/p4/driver
export HSA_OPENSOURCE_ROOT=$HSA_SOURCE_ROOT/src
# export ROCR_ROOT=$HSA_ROOT/rocr-runtime
export ROCR_ROOT=$WORK_ROOT/ROCR-Runtime
export ROCRTST_ROOT=$HSA_SOURCE_ROOT/rocrtst
export HSA_CORE_ROOT=$HSA_OPENSOURCE_ROOT
export HSA_IMAGE_ROOT=$HSA_OPENSOURCE_ROOT/hsa-ext-image
export HSA_FINALIZE_ROOT=$HSA_OPENSOURCE_ROOT/hsa-ext-finalize
export HSA_TOOLS_ROOT=$HSA_OPENSOURCE_ROOT/hsa-runtime-tools
# export HSA_RT_ROOT=$RT_ROOT/drivers/hsa/runtime
# export OCL_RT_ROOT=$RT_ROOT/drivers/opencl
# export OCL_RT_STG_ROOT=$P4_ROOT/opencl
export OCL_RT_SRC_TF_ROOT=$SRC_TF_ROOT/ocl_lc
export KERNEL_ROOT=$WORK_ROOT/kernel
export SCRIPT_ROOT=$WORK_ROOT/build
export BUILD_SCRIPT_ROOT=$WORK_ROOT/ROCm/tools/rocm-build
export TEST_SCRIPT_ROOT=$WORK_ROOT/MLSEQA_TestRepo
export THUNK_ROOT=$WORK_ROOT/ROCT-Thunk-Interface
export AMDGPURASTOOL_ROOT=$WORK_ROOT/amdgpuras-tool
export AQLPROFILE_ROOT=$WORK_ROOT/aqlprofile
export ROCPROFILER_ROOT=$WORK_ROOT/rocprofiler
export ROCTRACER_ROOT=$WORK_ROOT/roctracer
@@ -127,14 +177,22 @@ export ROCPROFILER_REGISTER_ROOT=$WORK_ROOT/rocprofiler-register
export ROCPROFILER_SDK_ROOT=$WORK_ROOT/rocprofiler-sdk
export ROCPROFILER_COMPUTE_ROOT=$WORK_ROOT/rocprofiler-compute
export ROCPROFILER_SYSTEMS_ROOT=$WORK_ROOT/rocprofiler-systems
export RDC_ROOT=$WORK_ROOT/rdc
export RDCTST_ROOT=$RDC_ROOT/tests/rdc_tests
export UTILS_ROOT=$WORK_ROOT/rocm-utils
export KFDTEST_ROOT=$THUNK_ROOT/tests/kfdtest
if [ -d "$HSA_OPENSOURCE_ROOT/tests/kfdtest" ]; then
export KFDTEST_ROOT=$HSA_OPENSOURCE_ROOT/tests/kfdtest
fi
# export HSA_SAMPLES_ROOT=$RT_ROOT/drivers/hsa/runtime/samples
# export CHIMEX_ROOT=$WORK_ROOT/benchmarks/chimex
# export AMDP2P_ROOT=$WORK_ROOT/drivers/amdp2p
# export HIP_ROOT=$WORK_ROOT/HIP
# export HIP_VDI_ROCM_SRC_TF_ROOT=$SRC_TF_ROOT/hip_vdi_rocm
# export HIP_VDI_PAL_SRC_TF_ROOT=$SRC_TF_ROOT/hip_vdi_pal
# export HIP_SAMPLES_ROOT=$WORK_ROOT/HIP-Examples
# export HIP_PRIVATE_SAMPLES_ROOT=$WORK_ROOT/hip-examples-private
export HIPIFY_ROOT=$WORK_ROOT/HIPIFY
# export GPUBURN_ROOT=$WORK_ROOT/tests/gpuburn
# export HSAPROFILER_TEST_ROOT=$WORK_ROOT/dev-tools/RCP-Internal/Src/Tests/HSAFoundationProfileAPITest
# export HSATESTCOMMON_ROOT=$WORK_ROOT/dev-tools/Common/Src/HSATestCommon
# export HSATESTGTEST_ROOT=$WORK_ROOT/dev-tools/Common/Lib/Ext/GoogleTest1.8/googletest
# export SMI_ROOT=$WORK_ROOT/rocm-smi
export AMD_SMI_LIB_ROOT=$WORK_ROOT/amdsmi
export ROCM_SMI_LIB_ROOT=$WORK_ROOT/rocm_smi_lib
export RSMITST_ROOT=$ROCM_SMI_LIB_ROOT/tests/rocm_smi_test
@@ -144,20 +202,30 @@ export CLANG_ROOT=$LLVM_PROJECT_ROOT/clang
export LLD_ROOT=$LLVM_PROJECT_ROOT/lld
export HIPCC_ROOT=$LLVM_PROJECT_ROOT/amd/hipcc
export DEVICELIBS_ROOT=$LLVM_PROJECT_ROOT/amd/device-libs
export DKMS_ROOT=$WORK_ROOT/drivers/linux-dkms
export ROCM_ROOT=$WORK_ROOT/meta
export ROCM_CORE_ROOT=$WORK_ROOT/rocm-core
export ROCM_DEV_ROOT=$WORK_ROOT/meta/rocm-dev
export ROCM_CMAKE_ROOT=$WORK_ROOT/rocm-cmake
export ROCM_BANDWIDTH_TEST_ROOT=$WORK_ROOT/rocm_bandwidth_test
export ROCMINFO_ROOT=$WORK_ROOT/rocminfo
export ROCR_DEBUG_AGENT_ROOT=$WORK_ROOT/rocr_debug_agent
export COMGR_ROOT=$LLVM_PROJECT_ROOT/amd/comgr
export COMGR_LIB_PATH=$OUT_DIR/build/amd_comgr
# export HOSTCALL_ROOT=$WORK_ROOT/hostcall
export RCCL_ROOT=$WORK_ROOT/rccl
export ROCM_DBGAPI_ROOT=$WORK_ROOT/ROCdbgapi
export ROCM_GDB_ROOT=$WORK_ROOT/ROCgdb
# export ROCclr_ROOT=$WORK_ROOT/vdi
export HIP_ON_ROCclr_ROOT=$WORK_ROOT/HIP
export HIPAMD_ROOT=$WORK_ROOT/hipamd
export HIP_CATCH_TESTS_ROOT=$WORK_ROOT/hip-tests
# export OPENCL_ON_ROCclr_ROOT=$WORK_ROOT/opencl-on-vdi
export CLR_ROOT=$WORK_ROOT/clr
export OPENCL_CTS_ROOT=$WORK_ROOT/OpenCL-CTS
export OPENCL_ICD_LOADER_ROOT=$WORK_ROOT/OpenCL-ICD-Loader
export OPENCL_HEADERS_ROOT=$WORK_ROOT/OpenCL-Headers
export OPENCL_CLHPP_ROOT=$WORK_ROOT/OpenCL-CLHPP
export AOMP_REPOS=$WORK_ROOT/openmp-extras
export HIPOTHER_ROOT=$WORK_ROOT/hipother
@@ -170,9 +238,16 @@ export ROCM_EXE_RPATH='$ORIGIN/../lib'
export ROCM_ASAN_LIB_RPATH='$ORIGIN:$ORIGIN/..'
export ROCM_ASAN_EXE_RPATH="\$ORIGIN/../lib/asan:\$ORIGIN/../lib"
# Intermediate output directories for projects without build output relocation
export FW_OUT=$WORK_ROOT/brahma-utils/firmware/deb-pkgs
export PATH=$PATH:$SCRIPT_ROOT
if [ -e "$SCRIPT_PATH/hsaThunk.util" ]; then
source $SCRIPT_PATH/hsaThunk.util $ENV_PATH $WORK_ROOT
fi
# From setup_env.sh
export BUILD_TYPE=Release
export LIBS_WORK_DIR=$WORK_ROOT
export BUILD_ARTIFACTS=$OUT_DIR/$PACKAGEEXT
@@ -185,7 +260,14 @@ export LC_ALL=C.UTF-8
export LANG=C.UTF-8
export PROC=${PROC:-"$(nproc)"}
export RELEASE_FLAG=${RELEASE_FLAG:-"-r"}
# export RELEASE_FLAG=${RELEASE_FLAG:-"-r"}
export SUDO=sudo
export PATH=/usr/local/bin:${PATH}:/sbin:/bin
export CCACHE_DIR=${HOME}/.ccache
# set ccache environment variable for math libraries
if [[ "${CCACHE_ENABLED}" != "false" ]]; then
export LAUNCHER_FLAGS="-DCMAKE_CXX_COMPILER_LAUNCHER=/usr/local/bin/ccache -DCMAKE_C_COMPILER_LAUNCHER=/usr/local/bin/ccache"
export CCACHE_COMPILERCHECK=none
export CCACHE_EXTRAFILES=${OUT_DIR}/rocm_compilers_hash_file
fi

View File

@@ -6,7 +6,7 @@ set -x
UNTAR_COMPONENT_NAME=$1
# Static supported components
STATIC_SUPPORTED_COMPONENTS="comgr devicelibs hip_on_rocclr hipblas hipblas-common hipcc hiprand hipsolver hipsparse lightning openmp_extras rocblas rocm rocm_smi_lib rocm-cmake rocm-core rocminfo rocprim rocprofiler_register rocr rocrand rocsolver rocsparse"
STATIC_SUPPORTED_COMPONENTS="comgr devicelibs hip_on_rocclr hipblas hipblas-common hipcc hiprand hipsolver hipsparse lightning openmp_extras rocblas rocm rocm_smi_lib rocm-cmake rocm-core rocminfo rocprim rocprofiler-register rocr rocrand rocsolver rocsparse"
if [ "${ENABLE_STATIC_BUILDS}" == "true" ] && ! echo "$STATIC_SUPPORTED_COMPONENTS" | grep -qE "(^| )$UNTAR_COMPONENT_NAME( |$)"; then
echo "Static build is not enabled for $UNTAR_COMPONENT_NAME ..skipping!!"
exit 0
@@ -42,7 +42,27 @@ get_os_name() {
set_pkg_type() {
local os_name
os_name=$(grep -oP '^NAME="\K.*(?=")' < /etc/os-release)
[ "${os_name,,}" = ubuntu ] && echo "deb" || echo "rpm"
if [[ "${os_name,,}" == "ubuntu" || "${os_name,,}" == "debian gnu/linux" ]]; then
echo "deb"
else
echo "rpm"
fi
}
set_llvm_link() {
local comp_folder=$1
local comp_pkg_name=$2
cd "${OUT_DIR}/${PKGTYPE}/${comp_folder}"|| exit 2
if [ "${PKGTYPE}" = 'deb' ]; then
dpkg-deb -e ${comp_pkg_name}_*.deb post/
mkdir -p "${ROCM_PATH}/tmp_llvm"
cp 'post/postinst' "${ROCM_PATH}/tmp_llvm"
pushd "${ROCM_PATH}/tmp_llvm"
bash -x postinst
popd
rm -rf "${ROCM_PATH}/tmp_llvm" post/
fi
}
setup_rocm_compilers_hash_file() {
@@ -68,18 +88,35 @@ case $UNTAR_COMPONENT_NAME in
sed -i '/-frtlib-add-rpath/d' ${ROCM_PATH}/llvm/bin/rocm.cfg
fi
ln -s "${ROCM_PATH}/lib/llvm/bin/amdclang" "${ROCM_PATH}/bin/amdclang" || true
ln -s "${ROCM_PATH}/lib/llvm/bin/amdclang++" "${ROCM_PATH}/bin/amdclang++" || true
# set_llvm_link lightning rocm-llvm
ln -s "${ROCM_PATH}/lib/llvm/bin/amdclang" "${ROCM_PATH}/bin/amdclang" || true
ln -s "${ROCM_PATH}/lib/llvm/bin/amdclang++" "${ROCM_PATH}/bin/amdclang++" || true
;;
(hipify_clang)
chmod +x ${ROCM_PATH}/bin/hipify-perl
;;
(hip_on_rocclr)
rm -f ${ROCM_PATH}/bin/hipcc.bat
# hack transferbench source code
sed -i 's/^set (CMAKE_RUNTIME_OUTPUT_DIRECTORY ..)/#&/' "$WORK_ROOT/TransferBench/CMakeLists.txt"
;;
(rocblas)
copy_pkg_files_to_rocm rocblas rocblas-dev
if [ $ENABLE_ADDRESS_SANITIZER != 'true' ]; then
pkgName=rocblas-dev
if [ "${ENABLE_STATIC_BUILDS}" == "true" ]; then
pkgName=rocblas-static-dev
fi
copy_pkg_files_to_rocm rocblas $pkgName
fi
;;
(composable_kernel)
cd "${OUT_DIR}/${PKGTYPE}/composable_kernel"
if [ "${PKGTYPE}" = 'deb' ]; then
dpkg-deb -c composablekernel-dev*.deb | awk '{sub(/^\./, "", $6); print $6}' | tee ../../ck.files
else
rpm -qlp composablekernel-dev*.rpm | tee ../../ck.files
fi
;;
(*)
echo "post processing is not required for ${UNTAR_COMPONENT_NAME}"
;;

39
tools/rocm-build/runner Executable file
View File

@@ -0,0 +1,39 @@
#!/bin/bash -xe
# Run a ${INFRA_REPO}/build_$1.sh script
# Return the exit status
# Run a ccache -s before and after
: Running $0 "$@"
date '+%D %T (%s)'
component=$1
shift
# errorhandler(){
# local RC=$? # Save exit status
# # bash doesn't call error handlers from within error handlers
# # but be on the safe side and disable it anyhow.
# set +e
# }
# trap errorhandler ERR
doit(){
bash -x "${INFRA_REPO}/build_${component}.sh" "$@" &&
${INFRA_REPO}/post_inst_pkg.sh "${component}"
}
final(){
set +e
date '+%D %T (%s)'
: 'Final ccache stats'
ccache -s || echo ccache failed tto show stats
: 'Output from "times" builtin'
times
}
trap final EXIT
: 'Initial ccache stats'
ccache -s || echo ccache failed to show stats
source ${INFRA_REPO}/envsetup.sh
${INFRA_REPO}/build_${component}.sh -c
time doit "$@"

View File

@@ -5,28 +5,87 @@ set -x
BUILD_COMPONENT="$1"
PACKAGEEXT=${PACKAGEEXT:-$2}
COMP_DIR=$(./${INFRA_REPO}/build/build_${BUILD_COMPONENT}.sh -o ${PACKAGEEXT})
COMP_DIR=$(./${INFRA_REPO}/build_${BUILD_COMPONENT}.sh -o ${PACKAGEEXT})
TARGET_ARTI_URL=${TARGET_ARTI_URL:-$3}
if { [ "$DISTRO_ID" = "mariner-2.0" ] || [ "$DISTRO_ID" = "azurelinux-3.0" ]; } \
&& { [ "$BUILD_COMPONENT" = "rocprofiler-systems" ] || [ "$BUILD_COMPONENT" = "rocjpeg" ] || [ "$BUILD_COMPONENT" = "rocdecode" ] || [ "$BUILD_COMPONENT" = "rocal" ] || [ "$BUILD_COMPONENT" = "mivisionx" ]; };
then
echo "Skip uploading packages for ${BUILD_COMPONENT} on ${DISTRO_ID} distro"
exit 0
fi
if { [ "$DISTRO_ID" = "debian-10" ] ; } \
&& { [ "$BUILD_COMPONENT" = "rocdecode" ] || [ "$BUILD_COMPONENT" = "rocjpeg" ]; };
then
echo "Skip uploading packages for ${BUILD_COMPONENT} on ${DISTRO_ID} distro"
exit 0
fi
if [ "$DISTRO_ID" = centos-7 ] && [ "$BUILD_COMPONENT" = "rocprofiler-compute" ]; then
echo "Skip uploading packages for ${BUILD_COMPONENT} on Centos7 distro, due to python dependency"
exit 0
fi
# Static supported components
STATIC_SUPPORTED_COMPONENTS="comgr devicelibs hip_on_rocclr hipblas hipblas-common hipcc hiprand hipsolver hipsparse lightning openmp_extras rocblas rocm rocm_smi_lib rocm-cmake rocm-core rocminfo rocprim rocprofiler-register rocr rocrand rocsolver rocsparse"
if [ "${ENABLE_STATIC_BUILDS}" == "true" ] && ! echo "$STATIC_SUPPORTED_COMPONENTS" | grep -qE "(^| )$BUILD_COMPONENT( |$)"; then
echo "Static build is not enabled for $BUILD_COMPONENT ..skipping upload!!"
exit 0
fi
[ -z "$JFROG_TOKEN" ] && echo "JFrog token is not set, skip uploading..." && exit 0
[ -z "$TARGET_ARTI_URL" ] && echo "Target URL is not set, skip uploading..." && exit 0
[ -z "$COMP_DIR" ] && echo "No packages in ${BUILD_COMPONENT}" && exit 0
[ ! -d "$COMP_DIR" ] && echo "NO ${COMP_DIR} folder..." && exit 0
PKG_NAME_LIST=( "${COMP_DIR}"/* )
#retry function take two arguments sytems cmd and attempt as input and retry the system cmd for given attempts times 30 seconds
function retry_sys_cmd() {
local sys_cmd="$1"
local -i attempts=$2
local -i attempt_num=1
echo "running system command: $sys_cmd"
until $sys_cmd
do
if (( attempt_num == attempts ))
then
echo "Attempt $attempt_num failed and there are no more attempts left!"
return 1
else
sleep_for=$(( attempt_num * 30 ))
echo "Attempt $attempt_num failed! Trying again in $sleep_for seconds..."
sleep $sleep_for
(( attempt_num++ ))
fi
done
}
for pkg in "${PKG_NAME_LIST[@]}"; do
#Do not upload any packages which does'nt have "asan" in its name for ASAN enabled builds
if [[ "${ENABLE_ADDRESS_SANITIZER}" != "true" ]] || [[ "${pkg##*/}" =~ "-asan" ]]; then
UPLOAD_SERVER=${TARGET_ARTI_URL}
if [[ "${pkg##*.}" == whl ]]; then
UPLOAD_SERVER=${WHEEL_ARTI_URL}
if [[ "${pkg##*/}" =~ "_dbgsym" ]] || [[ "${pkg##*/}" =~ "_debuginfo" ]]; then
echo "Discarding debug info wheel package. Continue with next package "
continue
fi
fi
if [[ "${pkg##*/}" =~ "-asan-dbgsym" ]] || [[ "${pkg##*/}" =~ "-tests-dbgsym" ]] || [[ "${pkg##*/}" =~ "-asan-debuginfo" ]] || [[ "${pkg##*/}" =~ "-tests-debuginfo" ]]; then
# ROCMOPS-7047 , if we stop uploading the asan-dbgsym and tests-dbgsym package to artifactory the debug+rpath (asan-dbgsym-rpath)
# and multi version (asan-dbgsym<rocm_version>_) package will stop getting created as well . They get created as part of version_pkgs job
echo "skipping upload of asan-dbgsym/asan-debuginfo or tests-dbgsym/tests-debuginfo package ${pkg}. Continue with next package "
continue
fi
echo "Uploading $pkg ..."
if ! curl -f -H "X-JFrog-Art-Api:${JFROG_TOKEN}" \
-X PUT "${TARGET_ARTI_URL}/$(basename ${pkg})" \
-T "${COMP_DIR}/$(basename ${pkg})"; then
curl_cmd="curl -H "X-JFrog-Art-Api:${JFROG_TOKEN}" \
-X PUT "${UPLOAD_SERVER}/$(basename ${pkg})" \
-T "${COMP_DIR}/$(basename ${pkg})""
#calling retry function with 5 attempts sleep will be 30s, 60s, 90s, 120s - total of 5 attemps in 4 minutes
if ! retry_sys_cmd "$curl_cmd" 5; then
echo "Unable to upload $pkg ..." >&2 && exit 1
fi
echo "$pkg uploaded..."
fi
done