Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add PACKGEN to build_packages.sh and add better parameter parsing #159

Merged
merged 2 commits into from
Sep 5, 2024
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
132 changes: 109 additions & 23 deletions Scripts/Packaging/build_packages.sh
Original file line number Diff line number Diff line change
Expand Up @@ -23,19 +23,101 @@

set -e

# Default values
GIT_TOP_LEVEL=$(git rev-parse --show-toplevel)
PACKAGE_NAME="ROCm-SDK-Examples"
PACKAGE_VERSION="6.2.0"
DEB_PACKAGE_RELEASE="local.9999"
RPM_PACKAGE_RELEASE="local.9999"
PACKAGE_INSTALL_PREFIX="/opt/rocm/examples"
TEST_PACKAGE_INSTALL_PREFIX="/opt/rocm/examples-test"
SRC_DIR="$GIT_TOP_LEVEL"
BUILD_DIR="$SRC_DIR/build"
DEB_DIR="$BUILD_DIR/deb"
RPM_DIR="$BUILD_DIR/rpm"
PACKGEN="" # Default is both DEB and RPM

# Inputs and Defaults
ROCM_EXAMPLES_ROOT="${1:-$GIT_TOP_LEVEL}"
PACKAGE_NAME="${2:-ROCm-SDK-Examples}"
PACKAGE_VERSION="${3:-6.2.0}"
PACKAGE_INSTALL_PREFIX="${4:-/opt/rocm/examples}"
TEST_PACKAGE_INSTALL_PREFIX="${5:-/opt/rocm/examples-test}"
BUILD_DIR="${6:-$ROCM_EXAMPLES_ROOT/build}"
DEB_DIR="${7:-$BUILD_DIR/deb}"
RPM_DIR="${8:-$BUILD_DIR/rpm}"
DEB_PACKAGE_RELEASE="${9:-local.9999}"
RPM_PACKAGE_RELEASE="${10:-local.9999}"
PACKAGE_CONTACT="ROCm Developer Support <rocm-dev.support@amd.com>"
PACKAGE_DESCRIPTION_SUMMARY="A collection of examples for the ROCm software stack"
PACKAGE_HOMEPAGE_URL="https://github.com/ROCm/ROCm-examples"

# Getopt argument parsing
VALID_ARGS=$(getopt -o h --long help,pkgname:,version:,deb-release:,rpm-release:,install-prefix:,test-install-prefix:,src-dir:,build-dir:,deb-dir:,rpm-dir:,packgen: -- "$@")
if [[ $? -ne 0 ]]; then
echo "Invalid arguments"
exit 1
fi

eval set -- "$VALID_ARGS"

while [ : ]; do
case "$1" in
-h | --help)
echo "Usage: build_packages.sh [options]"
echo "Options:"
echo " --pkgname <name> Set the package name"
echo " --version <version> Set the package version"
Comment on lines +58 to +59
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Let's group pkgname, version, deb-release, and rpm-release together. Logically, they are all related and make up the full package name.

echo " --deb-release <release> Set the DEB package release info (used to generate filename)"
echo " --rpm-release <release> Set the RPM package release info (used to generate filename)"
echo " --install-prefix <path> Set the package install prefix"
echo " --test-install-prefix <path> Set the test package install prefix"
echo " --src-dir<path> Set the source directory"
echo " --build-dir <path> Set the build directory"
echo " --deb-dir <path> Set the DEB directory"
echo " --rpm-dir <path> Set the RPM directory"
echo " --packgen <format> Specify the package format. Options 'DEB' or 'RPM'. Default: '', which generates both."
exit 0
;;
--pkgname)
PACKAGE_NAME="$2"
shift 2
;;
--version)
PACKAGE_VERSION="$2"
shift 2
;;
--deb-release)
DEB_PACKAGE_RELEASE="$2"
shift 2
;;
--rpm-release)
RPM_PACKAGE_RELEASE="$2"
shift 2
;;
--install-prefix)
PACKAGE_INSTALL_PREFIX="$2"
shift 2
;;
--test-install-prefix)
TEST_PACKAGE_INSTALL_PREFIX="$2"
shift 2
;;
--src-dir)
SRC_DIR="$2"
shift 2
;;
--build-dir)
BUILD_DIR="$2"
shift 2
;;
--deb-dir)
DEB_DIR="$2"
shift 2
;;
--rpm-dir)
RPM_DIR="$2"
shift 2
;;
--packgen)
PACKGEN="$2"
shift 2
;;
--)
shift
break
;;
esac
done

STAGING_DIR="$BUILD_DIR/$PACKAGE_NAME-$PACKAGE_VERSION"
TEST_STAGING_DIR="$BUILD_DIR/${PACKAGE_NAME}-test-$PACKAGE_VERSION"
Expand All @@ -60,24 +142,25 @@ SOURCE_DIRS=(

print_input_variables() {
echo "********** Input Variables **********"
echo "ROCM_EXAMPLES_ROOT=$ROCM_EXAMPLES_ROOT"
echo "PACKAGE_NAME=$PACKAGE_NAME"
echo "PACKAGE_VERSION=$PACKAGE_VERSION"
echo "DEB_PACKAGE_RELEASE=$DEB_PACKAGE_RELEASE"
echo "RPM_PACKAGE_RELEASE=$RPM_PACKAGE_RELEASE"
echo "PACKAGE_INSTALL_PREFIX=$PACKAGE_INSTALL_PREFIX"
echo "TEST_PACKAGE_INSTALL_PREFIX=$TEST_PACKAGE_INSTALL_PREFIX"
echo "SRC_DIR=$SRC_DIR"
echo "BUILD_DIR=$BUILD_DIR"
echo "DEB_DIR=$DEB_DIR"
echo "RPM_DIR=$RPM_DIR"
echo "DEB_PACKAGE_RELEASE=$DEB_PACKAGE_RELEASE"
echo "RPM_PACKAGE_RELEASE=$RPM_PACKAGE_RELEASE"
echo "PACKGEN=$PACKGEN"
echo "************************************"
}

build_project() {
echo "** Building the project **"
mkdir -p "$BUILD_DIR"
pushd "$BUILD_DIR" || exit
cmake -DCMAKE_INSTALL_PREFIX="$PACKAGE_INSTALL_PREFIX" -DGPU_ARCHITECTURES=all "$ROCM_EXAMPLES_ROOT"
cmake -DCMAKE_INSTALL_PREFIX="$PACKAGE_INSTALL_PREFIX" -DGPU_ARCHITECTURES=all "$SRC_DIR"
make -j$(nproc)
popd || exit
}
Expand All @@ -88,13 +171,13 @@ copy_sources() {
echo "** Copying sources to $STAGING_DIR **"

# Copy source files in root to package
cp "$ROCM_EXAMPLES_ROOT/LICENSE.md" "$ROCM_EXAMPLES_ROOT/CMakeLists.txt" "$ROCM_EXAMPLES_ROOT/README.md" "$STAGING_DIR"
cp "$SRC_DIR/LICENSE.md" "$SRC_DIR/CMakeLists.txt" "$SRC_DIR/README.md" "$STAGING_DIR"

# Copy source directories to package
for dir in "${SOURCE_DIRS[@]}"; do
rsync -a --exclude 'build' --exclude '.gitignore' \
--exclude '*.vcxproj**' --exclude '*.sln' --exclude 'bin' \
--exclude '*.o' --exclude '*.exe' "$ROCM_EXAMPLES_ROOT/$dir" "$STAGING_DIR"
--exclude '*.o' --exclude '*.exe' "$SRC_DIR/$dir" "$STAGING_DIR"
done
}

Expand Down Expand Up @@ -321,12 +404,15 @@ copy_sources
# Copy CTest files to the test staging directory
copy_test_files

# Create DEB and RPM packages
create_deb_package
create_rpm_package
# Conditionally create DEB and RPM packages based on PACKGEN
if [ -z "$PACKGEN" ] || [ "$PACKGEN" == "DEB" ]; then
create_deb_package
create_deb_test_package
fi

# Create DEB and RPM test packages
create_deb_test_package
create_rpm_test_package
if [ -z "$PACKGEN" ] || [ "$PACKGEN" == "RPM" ]; then
create_rpm_package
create_rpm_test_package
fi

popd || exit
Loading