diff --git a/projects/rocprofiler-systems/.cmake-format.yaml b/projects/rocprofiler-systems/.cmake-format.yaml index 108cfc7698..6ff3370974 100644 --- a/projects/rocprofiler-systems/.cmake-format.yaml +++ b/projects/rocprofiler-systems/.cmake-format.yaml @@ -54,6 +54,13 @@ parse: PASS_REGULAR_EXPRESSION: '*' FAIL_REGULAR_EXPRESSION: '*' SKIP_REGULAR_EXPRESSION: '*' + rocm_version_message: + flags: + - STATUS + - WARNING + - SEND_ERROR + - FATAL_ERROR + - AUTHOR_WARNING override_spec: {} vartags: [] proptags: [] diff --git a/projects/rocprofiler-systems/.github/workflows/cancelling.yml b/projects/rocprofiler-systems/.github/workflows/cancelling.yml index e66f407ec3..52ea7de330 100644 --- a/projects/rocprofiler-systems/.github/workflows/cancelling.yml +++ b/projects/rocprofiler-systems/.github/workflows/cancelling.yml @@ -1,8 +1,7 @@ name: cancel-builds-on-update on: workflow_run: - # workflows: ['formatting', 'ubuntu-bionic', 'ubuntu-focal-dyninst-package', 'ubuntu-focal-external-rocm', 'ubuntu-focal-external', 'ubuntu-focal'] - workflows: ['formatting', 'ubuntu-focal-external', 'ubuntu-focal-external-rocm'] + workflows: ['formatting', 'ubuntu-bionic', 'ubuntu-focal-dyninst-package', 'ubuntu-focal-external-rocm', 'ubuntu-focal-external', 'ubuntu-focal', 'cpack-bionic', 'cpack-bionic-rocm', 'cpack-focal', cpack-focal-rocm'] types: ['requested'] jobs: diff --git a/projects/rocprofiler-systems/.github/workflows/cpack-bionic-rocm.yml b/projects/rocprofiler-systems/.github/workflows/cpack-bionic-rocm.yml new file mode 100644 index 0000000000..74fed005ad --- /dev/null +++ b/projects/rocprofiler-systems/.github/workflows/cpack-bionic-rocm.yml @@ -0,0 +1,204 @@ +name: cpack-bionic-rocm + +on: + push: + branches: [releases/**] + pull_request: + branches: [releases/**] + +env: + CMAKE_BUILD_PARALLEL_LEVEL: 2 + CORE_CMAKE_ARGS: -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_RPATH_USE_LINK_PATH=OFF -DCMAKE_INSTALL_PREFIX=/opt/omnitrace + OMNITRACE_CMAKE_ARGS: -DOMNITRACE_MAX_THREADS=2048 -DOMNITRACE_BUILD_TESTING=OFF -DOMNITRACE_USE_MPI_HEADERS=ON -DOMNITRACE_USE_HIP=ON + TIMEMORY_CMAKE_ARGS: -DTIMEMORY_USE_LIBUNWIND=ON -DTIMEMORY_BUILD_LIBUNWIND=ON -DTIMEMORY_BUILD_PORTABLE=ON + DYNINST_CMAKE_ARGS: -DOMNITRACE_BUILD_DYNINST=ON -DDYNINST_BUILD_TBB=ON -DDYNINST_BUILD_BOOST=ON -DDYNINST_BUILD_ELFUTILS=ON -DDYNINST_BUILD_LIBIBERTY=ON -DDYNINST_USE_OpenMP=ON + DEBIAN_FRONTEND: noninteractive + GIT_DISCOVERY_ACROSS_FILESYSTEM: 1 + +jobs: + cpack: + runs-on: ubuntu-20.04 + container: + image: ubuntu:${{ matrix.os }} + strategy: + fail-fast: false + matrix: + os: [18.04] + rocm-latest: [5.0] + rocm-version: [4.5, 5.0] + extensions: ["", "all"] + + steps: + - name: Patch Git + timeout-minutes: 5 + run: | + apt-get update + apt-get install -y software-properties-common + add-apt-repository -y ppa:git-core/ppa + apt-get update + apt-get upgrade -y + apt-get install -y git + + - uses: actions/checkout@v3 + with: + submodules: recursive + + - name: Install System Packages + timeout-minutes: 20 + run: | + set -v + apt-get update + apt-get dist-upgrade -y + apt-get install -y build-essential cmake libnuma-dev wget gnupg2 m4 git-core autoconf libtool autotools-dev python3-pip lsb-release libpapi-dev libpfm4-dev libudev-dev libopenmpi-dev openmpi-bin rpm librpm-dev + python3 -m pip install 'cmake==3.18.4' + + - name: Install HIP Packages + if: ${{ matrix.rocm-version != matrix.rocm-latest }} + timeout-minutes: 20 + run: | + set -v + wget -q -O - https://repo.radeon.com/rocm/rocm.gpg.key | apt-key add - + echo "deb [arch=amd64] https://repo.radeon.com/rocm/apt/${{ matrix.rocm-version }}/ ubuntu main" | tee /etc/apt/sources.list.d/rocm.list + apt-get update + apt-get dist-upgrade -y + apt-get install -y rocm-dev rocm-utils roctracer-dev rocprofiler-dev hip-base hsa-amd-aqlprofile hsa-rocr-dev hsakmt-roct-dev rocm-smi-lib + + - name: Install HIP Packages + if: ${{ matrix.rocm-version == matrix.rocm-latest }} + timeout-minutes: 20 + run: | + set -v + wget -q -O - https://repo.radeon.com/rocm/rocm.gpg.key | apt-key add - + echo "deb [arch=amd64] https://repo.radeon.com/rocm/apt/debian/ ubuntu main" | tee /etc/apt/sources.list.d/rocm.list + apt-get update + apt-get dist-upgrade -y + apt-get install -y rocm-dev rocm-utils roctracer-dev rocprofiler-dev hip-base hsa-amd-aqlprofile hsa-rocr-dev hsakmt-roct-dev rocm-smi-lib + + - name: Configure Env + run: | + export OMNITRACE_VERSION=$(cat VERSION) + export OMNITRACE_DISTRO=$(lsb_release -i | awk '{print $NF}')-$(lsb_release -r | awk '{print $NF}') + echo "OMNITRACE_VERSION=${OMNITRACE_VERSION}" >> $GITHUB_ENV + echo "OMNITRACE_DISTRO=${OMNITRACE_DISTRO}" >> $GITHUB_ENV + echo "COMMON_CMAKE_ARGS=${CORE_CMAKE_ARGS} ${OMNITRACE_CMAKE_ARGS} ${TIMEMORY_CMAKE_ARGS} ${DYNINST_CMAKE_ARGS}" >> $GITHUB_ENV + echo "PACKAGE_BASE_TAG=omnitrace-${OMNITRACE_VERSION}-${OMNITRACE_DISTRO}" >> $GITHUB_ENV + echo "PATH=${HOME}/.local/bin:${PATH}" >> $GITHUB_ENV + + - name: Print Env + run: | + env + + # HIP without extensions + - name: Configure Package + if: ${{ matrix.extensions == '' }} + timeout-minutes: 10 + run: | + set -v + cmake -B build-release ${COMMON_CMAKE_ARGS} . + + # HIP with extensions + - name: Configure Package + if: ${{ matrix.extensions == 'all' }} + timeout-minutes: 10 + run: | + set -v + cmake -B build-release ${COMMON_CMAKE_ARGS} -DOMNITRACE_USE_PAPI=ON -DOMNITRACE_USE_OMPT=ON . + + # Build + - name: Build Package + timeout-minutes: 45 + run: | + set -v + cmake --build build-release --target all + + # Generate STGZ + - name: Generate STGZ + timeout-minutes: 45 + run: | + set -v + cd build-release + cpack -G STGZ + + # Generate DEB + - name: Generate DEB + timeout-minutes: 45 + run: | + set -v + cd build-release + cpack -G DEB -D CPACK_PACKAGING_INSTALL_PREFIX=/opt/omnitrace + + - name: List Files + timeout-minutes: 10 + run: | + find . -type f | egrep '\.(sh|deb|rpm)$' + + - name: STGZ Artifacts + timeout-minutes: 10 + uses: actions/upload-artifact@v2 + with: + name: stgz-installers + path: | + build-release/omnitrace-*.sh + + - name: DEB Artifacts + timeout-minutes: 10 + uses: actions/upload-artifact@v2 + with: + name: deb-installers + path: | + build-release/omnitrace_*.deb + + # before testing remove any artifacts of the build + - name: Remove Build and Install + timeout-minutes: 10 + run: | + mv build-release/omnitrace-*.sh ./ + mv build-release/omnitrace_*.deb ./ + rm -rf build-release + rm -rf /opt/omnitrace + + - name: STGZ Install + timeout-minutes: 10 + run: | + set -v + mkdir /opt/omnitrace-stgz + ./omnitrace-*.sh --prefix=/opt/omnitrace-stgz --skip-license --exclude-dir + + - name: List STGZ Install + timeout-minutes: 10 + continue-on-error: true + run: | + find /opt/omnitrace-stgz + + - name: Test STGZ Install + timeout-minutes: 10 + run: | + set -v + export PATH=/opt/omnitrace-stgz/bin:${PATH} + export LD_LIBRARY_PATH=/opt/omnitrace-stgz/lib:${LD_LIBRARY_PATH} + omnitrace-avail --help + omnitrace --help + omnitrace-critical-trace --help + + - name: DEB Install + timeout-minutes: 10 + run: | + set -v + dpkg --contents ./omnitrace_*.deb + dpkg -i ./omnitrace_*.deb + + - name: List DEB Install + timeout-minutes: 10 + continue-on-error: true + run: | + find /opt/omnitrace + + - name: Test DEB Install + timeout-minutes: 10 + run: | + set -v + export PATH=/opt/omnitrace/bin:${PATH} + export LD_LIBRARY_PATH=/opt/omnitrace/lib:${LD_LIBRARY_PATH} + omnitrace-avail --help + omnitrace --help + omnitrace-critical-trace --help diff --git a/projects/rocprofiler-systems/.github/workflows/cpack-bionic.yml b/projects/rocprofiler-systems/.github/workflows/cpack-bionic.yml new file mode 100644 index 0000000000..ecb254df1d --- /dev/null +++ b/projects/rocprofiler-systems/.github/workflows/cpack-bionic.yml @@ -0,0 +1,180 @@ +name: cpack-bionic + +on: + push: + branches: [releases/**] + pull_request: + branches: [releases/**] + +env: + CMAKE_BUILD_PARALLEL_LEVEL: 2 + CORE_CMAKE_ARGS: -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_RPATH_USE_LINK_PATH=OFF -DCMAKE_INSTALL_PREFIX=/opt/omnitrace + OMNITRACE_CMAKE_ARGS: -DOMNITRACE_MAX_THREADS=2048 -DOMNITRACE_BUILD_TESTING=OFF -DOMNITRACE_USE_MPI_HEADERS=ON -DOMNITRACE_USE_HIP=OFF + TIMEMORY_CMAKE_ARGS: -DTIMEMORY_USE_LIBUNWIND=ON -DTIMEMORY_BUILD_LIBUNWIND=ON -DTIMEMORY_BUILD_PORTABLE=ON + DYNINST_CMAKE_ARGS: -DOMNITRACE_BUILD_DYNINST=ON -DDYNINST_BUILD_TBB=ON -DDYNINST_BUILD_BOOST=ON -DDYNINST_BUILD_ELFUTILS=ON -DDYNINST_BUILD_LIBIBERTY=ON + DEBIAN_FRONTEND: noninteractive + GIT_DISCOVERY_ACROSS_FILESYSTEM: 1 + +jobs: + cpack: + runs-on: ubuntu-20.04 + container: + image: ubuntu:${{ matrix.os }} + strategy: + fail-fast: false + matrix: + os: [18.04] + extensions: ["", "all"] + + steps: + - name: Patch Git + timeout-minutes: 5 + run: | + apt-get update + apt-get install -y software-properties-common + add-apt-repository -y ppa:git-core/ppa + apt-get update + apt-get upgrade -y + apt-get install -y git + + - uses: actions/checkout@v3 + with: + submodules: recursive + + - name: Install System Packages + timeout-minutes: 20 + run: | + set -v + apt-get update + apt-get dist-upgrade -y + apt-get install -y build-essential cmake libnuma-dev wget gnupg2 m4 git-core autoconf libtool autotools-dev python3-pip lsb-release libpapi-dev libpfm4-dev libudev-dev libopenmpi-dev openmpi-bin rpm librpm-dev + python3 -m pip install 'cmake==3.18.4' + + - name: Configure Env + run: | + export OMNITRACE_VERSION=$(cat VERSION) + export OMNITRACE_DISTRO=$(lsb_release -i | awk '{print $NF}')-$(lsb_release -r | awk '{print $NF}') + echo "OMNITRACE_VERSION=${OMNITRACE_VERSION}" >> $GITHUB_ENV + echo "OMNITRACE_DISTRO=${OMNITRACE_DISTRO}" >> $GITHUB_ENV + echo "COMMON_CMAKE_ARGS=${CORE_CMAKE_ARGS} ${OMNITRACE_CMAKE_ARGS} ${TIMEMORY_CMAKE_ARGS} ${DYNINST_CMAKE_ARGS}" >> $GITHUB_ENV + echo "PACKAGE_BASE_TAG=omnitrace-${OMNITRACE_VERSION}-${OMNITRACE_DISTRO}" >> $GITHUB_ENV + echo "PATH=${HOME}/.local/bin:${PATH}" >> $GITHUB_ENV + + - name: Print Env + run: | + env + + # CORE without extensions + - name: Configure Package + if: ${{ matrix.extensions == '' }} + timeout-minutes: 10 + run: | + set -v + cmake -B build-release ${COMMON_CMAKE_ARGS} -DDYNINST_USE_OpenMP=OFF . + + # CORE with extensions + - name: Configure Package + if: ${{ matrix.extensions == 'all' }} + timeout-minutes: 10 + run: | + set -v + cmake -B build-release ${COMMON_CMAKE_ARGS} -DDYNINST_USE_OpenMP=ON -DOMNITRACE_USE_PAPI=ON -DOMNITRACE_USE_OMPT=ON . + + # Build + - name: Build Package + timeout-minutes: 45 + run: | + set -v + cmake --build build-release --target all + + # Generate STGZ + - name: Generate STGZ + timeout-minutes: 45 + run: | + set -v + cd build-release + cpack -G STGZ + + # Generate DEB + - name: Generate DEB + timeout-minutes: 45 + run: | + set -v + cd build-release + cpack -G DEB -D CPACK_PACKAGING_INSTALL_PREFIX=/opt/omnitrace + + - name: List Files + timeout-minutes: 10 + run: | + find . -type f | egrep '\.(sh|deb|rpm)$' + + - name: STGZ Artifacts + timeout-minutes: 10 + uses: actions/upload-artifact@v2 + with: + name: stgz-installers + path: | + build-release/omnitrace-*.sh + + - name: DEB Artifacts + timeout-minutes: 10 + uses: actions/upload-artifact@v2 + with: + name: deb-installers + path: | + build-release/omnitrace_*.deb + + # before testing remove any artifacts of the build + - name: Remove Build and Install + timeout-minutes: 10 + run: | + mv build-release/omnitrace-*.sh ./ + mv build-release/omnitrace_*.deb ./ + rm -rf build-release + rm -rf /opt/omnitrace + + - name: STGZ Install + timeout-minutes: 10 + run: | + set -v + mkdir /opt/omnitrace-stgz + ./omnitrace-*.sh --prefix=/opt/omnitrace-stgz --skip-license --exclude-dir + + - name: List STGZ Install + timeout-minutes: 10 + continue-on-error: true + run: | + find /opt/omnitrace-stgz + + - name: Test STGZ Install + timeout-minutes: 10 + run: | + set -v + export PATH=/opt/omnitrace-stgz/bin:${PATH} + export LD_LIBRARY_PATH=/opt/omnitrace-stgz/lib:${LD_LIBRARY_PATH} + omnitrace-avail --help + omnitrace --help + omnitrace-critical-trace --help + + - name: DEB Install + timeout-minutes: 10 + run: | + set -v + dpkg --contents ./omnitrace_*.deb + dpkg -i ./omnitrace_*.deb + + - name: List DEB Install + timeout-minutes: 10 + continue-on-error: true + run: | + find /opt/omnitrace + + - name: Test DEB Install + timeout-minutes: 10 + run: | + set -v + export PATH=/opt/omnitrace/bin:${PATH} + export LD_LIBRARY_PATH=/opt/omnitrace/lib:${LD_LIBRARY_PATH} + omnitrace-avail --help + omnitrace --help + omnitrace-critical-trace --help diff --git a/projects/rocprofiler-systems/.github/workflows/cpack-focal-rocm.yml b/projects/rocprofiler-systems/.github/workflows/cpack-focal-rocm.yml new file mode 100644 index 0000000000..763598c27e --- /dev/null +++ b/projects/rocprofiler-systems/.github/workflows/cpack-focal-rocm.yml @@ -0,0 +1,204 @@ +name: cpack-focal-rocm + +on: + push: + branches: [releases/**] + pull_request: + branches: [releases/**] + +env: + CMAKE_BUILD_PARALLEL_LEVEL: 2 + CORE_CMAKE_ARGS: -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_RPATH_USE_LINK_PATH=OFF -DCMAKE_INSTALL_PREFIX=/opt/omnitrace + OMNITRACE_CMAKE_ARGS: -DOMNITRACE_MAX_THREADS=2048 -DOMNITRACE_BUILD_TESTING=OFF -DOMNITRACE_USE_MPI_HEADERS=ON -DOMNITRACE_USE_HIP=ON + TIMEMORY_CMAKE_ARGS: -DTIMEMORY_USE_LIBUNWIND=ON -DTIMEMORY_BUILD_LIBUNWIND=ON -DTIMEMORY_BUILD_PORTABLE=ON + DYNINST_CMAKE_ARGS: -DOMNITRACE_BUILD_DYNINST=ON -DDYNINST_BUILD_TBB=ON -DDYNINST_BUILD_BOOST=ON -DDYNINST_BUILD_ELFUTILS=ON -DDYNINST_BUILD_LIBIBERTY=ON -DDYNINST_USE_OpenMP=ON + DEBIAN_FRONTEND: noninteractive + GIT_DISCOVERY_ACROSS_FILESYSTEM: 1 + +jobs: + cpack: + runs-on: ubuntu-20.04 + container: + image: ubuntu:${{ matrix.os }} + strategy: + fail-fast: false + matrix: + os: [20.04] + rocm-latest: [5.0] + rocm-version: [4.5, 5.0] + extensions: ["", "all"] + + steps: + - name: Patch Git + timeout-minutes: 5 + run: | + apt-get update + apt-get install -y software-properties-common + add-apt-repository -y ppa:git-core/ppa + apt-get update + apt-get upgrade -y + apt-get install -y git + + - uses: actions/checkout@v3 + with: + submodules: recursive + + - name: Install System Packages + timeout-minutes: 20 + run: | + set -v + apt-get update + apt-get dist-upgrade -y + apt-get install -y build-essential cmake libnuma-dev wget gnupg2 m4 git-core autoconf libtool autotools-dev python3-pip lsb-release libpapi-dev libpfm4-dev libudev-dev libopenmpi-dev openmpi-bin rpm librpm-dev + python3 -m pip install 'cmake==3.18.4' + + - name: Install HIP Packages + if: ${{ matrix.rocm-version != matrix.rocm-latest }} + timeout-minutes: 20 + run: | + set -v + wget -q -O - https://repo.radeon.com/rocm/rocm.gpg.key | apt-key add - + echo "deb [arch=amd64] https://repo.radeon.com/rocm/apt/${{ matrix.rocm-version }}/ ubuntu main" | tee /etc/apt/sources.list.d/rocm.list + apt-get update + apt-get dist-upgrade -y + apt-get install -y rocm-dev rocm-utils roctracer-dev rocprofiler-dev hip-base hsa-amd-aqlprofile hsa-rocr-dev hsakmt-roct-dev rocm-smi-lib + + - name: Install HIP Packages + if: ${{ matrix.rocm-version == matrix.rocm-latest }} + timeout-minutes: 20 + run: | + set -v + wget -q -O - https://repo.radeon.com/rocm/rocm.gpg.key | apt-key add - + echo "deb [arch=amd64] https://repo.radeon.com/rocm/apt/debian/ ubuntu main" | tee /etc/apt/sources.list.d/rocm.list + apt-get update + apt-get dist-upgrade -y + apt-get install -y rocm-dev rocm-utils roctracer-dev rocprofiler-dev hip-base hsa-amd-aqlprofile hsa-rocr-dev hsakmt-roct-dev rocm-smi-lib + + - name: Configure Env + run: | + export OMNITRACE_VERSION=$(cat VERSION) + export OMNITRACE_DISTRO=$(lsb_release -i | awk '{print $NF}')-$(lsb_release -r | awk '{print $NF}') + echo "OMNITRACE_VERSION=${OMNITRACE_VERSION}" >> $GITHUB_ENV + echo "OMNITRACE_DISTRO=${OMNITRACE_DISTRO}" >> $GITHUB_ENV + echo "COMMON_CMAKE_ARGS=${CORE_CMAKE_ARGS} ${OMNITRACE_CMAKE_ARGS} ${TIMEMORY_CMAKE_ARGS} ${DYNINST_CMAKE_ARGS}" >> $GITHUB_ENV + echo "PACKAGE_BASE_TAG=omnitrace-${OMNITRACE_VERSION}-${OMNITRACE_DISTRO}" >> $GITHUB_ENV + echo "PATH=${HOME}/.local/bin:${PATH}" >> $GITHUB_ENV + + - name: Print Env + run: | + env + + # HIP without extensions + - name: Configure Package + if: ${{ matrix.extensions == '' }} + timeout-minutes: 10 + run: | + set -v + cmake -B build-release ${COMMON_CMAKE_ARGS} . + + # HIP with extensions + - name: Configure Package + if: ${{ matrix.extensions == 'all' }} + timeout-minutes: 10 + run: | + set -v + cmake -B build-release ${COMMON_CMAKE_ARGS} -DOMNITRACE_USE_PAPI=ON -DOMNITRACE_USE_OMPT=ON . + + # Build + - name: Build Package + timeout-minutes: 45 + run: | + set -v + cmake --build build-release --target all + + # Generate STGZ + - name: Generate STGZ + timeout-minutes: 45 + run: | + set -v + cd build-release + cpack -G STGZ + + # Generate DEB + - name: Generate DEB + timeout-minutes: 45 + run: | + set -v + cd build-release + cpack -G DEB -D CPACK_PACKAGING_INSTALL_PREFIX=/opt/omnitrace + + - name: List Files + timeout-minutes: 10 + run: | + find . -type f | egrep '\.(sh|deb|rpm)$' + + - name: STGZ Artifacts + timeout-minutes: 10 + uses: actions/upload-artifact@v2 + with: + name: stgz-installers + path: | + build-release/omnitrace-*.sh + + - name: DEB Artifacts + timeout-minutes: 10 + uses: actions/upload-artifact@v2 + with: + name: deb-installers + path: | + build-release/omnitrace_*.deb + + # before testing remove any artifacts of the build + - name: Remove Build and Install + timeout-minutes: 10 + run: | + mv build-release/omnitrace-*.sh ./ + mv build-release/omnitrace_*.deb ./ + rm -rf build-release + rm -rf /opt/omnitrace + + - name: STGZ Install + timeout-minutes: 10 + run: | + set -v + mkdir /opt/omnitrace-stgz + ./omnitrace-*.sh --prefix=/opt/omnitrace-stgz --skip-license --exclude-dir + + - name: List STGZ Install + timeout-minutes: 10 + continue-on-error: true + run: | + find /opt/omnitrace-stgz + + - name: Test STGZ Install + timeout-minutes: 10 + run: | + set -v + export PATH=/opt/omnitrace-stgz/bin:${PATH} + export LD_LIBRARY_PATH=/opt/omnitrace-stgz/lib:${LD_LIBRARY_PATH} + omnitrace-avail --help + omnitrace --help + omnitrace-critical-trace --help + + - name: DEB Install + timeout-minutes: 10 + run: | + set -v + dpkg --contents ./omnitrace_*.deb + dpkg -i ./omnitrace_*.deb + + - name: List DEB Install + timeout-minutes: 10 + continue-on-error: true + run: | + find /opt/omnitrace + + - name: Test DEB Install + timeout-minutes: 10 + run: | + set -v + export PATH=/opt/omnitrace/bin:${PATH} + export LD_LIBRARY_PATH=/opt/omnitrace/lib:${LD_LIBRARY_PATH} + omnitrace-avail --help + omnitrace --help + omnitrace-critical-trace --help diff --git a/projects/rocprofiler-systems/.github/workflows/cpack-focal.yml b/projects/rocprofiler-systems/.github/workflows/cpack-focal.yml new file mode 100644 index 0000000000..f38d187c0c --- /dev/null +++ b/projects/rocprofiler-systems/.github/workflows/cpack-focal.yml @@ -0,0 +1,180 @@ +name: cpack-focal + +on: + push: + branches: [releases/**] + pull_request: + branches: [releases/**] + +env: + CMAKE_BUILD_PARALLEL_LEVEL: 2 + CORE_CMAKE_ARGS: -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_RPATH_USE_LINK_PATH=OFF -DCMAKE_INSTALL_PREFIX=/opt/omnitrace + OMNITRACE_CMAKE_ARGS: -DOMNITRACE_MAX_THREADS=2048 -DOMNITRACE_BUILD_TESTING=OFF -DOMNITRACE_USE_MPI_HEADERS=ON -DOMNITRACE_USE_HIP=OFF + TIMEMORY_CMAKE_ARGS: -DTIMEMORY_USE_LIBUNWIND=ON -DTIMEMORY_BUILD_LIBUNWIND=ON -DTIMEMORY_BUILD_PORTABLE=ON + DYNINST_CMAKE_ARGS: -DOMNITRACE_BUILD_DYNINST=ON -DDYNINST_BUILD_TBB=ON -DDYNINST_BUILD_BOOST=ON -DDYNINST_BUILD_ELFUTILS=ON -DDYNINST_BUILD_LIBIBERTY=ON + DEBIAN_FRONTEND: noninteractive + GIT_DISCOVERY_ACROSS_FILESYSTEM: 1 + +jobs: + cpack: + runs-on: ubuntu-20.04 + container: + image: ubuntu:${{ matrix.os }} + strategy: + fail-fast: false + matrix: + os: [20.04] + extensions: ["", "all"] + + steps: + - name: Patch Git + timeout-minutes: 5 + run: | + apt-get update + apt-get install -y software-properties-common + add-apt-repository -y ppa:git-core/ppa + apt-get update + apt-get upgrade -y + apt-get install -y git + + - uses: actions/checkout@v3 + with: + submodules: recursive + + - name: Install System Packages + timeout-minutes: 20 + run: | + set -v + apt-get update + apt-get dist-upgrade -y + apt-get install -y build-essential cmake libnuma-dev wget gnupg2 m4 git-core autoconf libtool autotools-dev python3-pip lsb-release libpapi-dev libpfm4-dev libudev-dev libopenmpi-dev openmpi-bin rpm librpm-dev + python3 -m pip install 'cmake==3.18.4' + + - name: Configure Env + run: | + export OMNITRACE_VERSION=$(cat VERSION) + export OMNITRACE_DISTRO=$(lsb_release -i | awk '{print $NF}')-$(lsb_release -r | awk '{print $NF}') + echo "OMNITRACE_VERSION=${OMNITRACE_VERSION}" >> $GITHUB_ENV + echo "OMNITRACE_DISTRO=${OMNITRACE_DISTRO}" >> $GITHUB_ENV + echo "COMMON_CMAKE_ARGS=${CORE_CMAKE_ARGS} ${OMNITRACE_CMAKE_ARGS} ${TIMEMORY_CMAKE_ARGS} ${DYNINST_CMAKE_ARGS}" >> $GITHUB_ENV + echo "PACKAGE_BASE_TAG=omnitrace-${OMNITRACE_VERSION}-${OMNITRACE_DISTRO}" >> $GITHUB_ENV + echo "PATH=${HOME}/.local/bin:${PATH}" >> $GITHUB_ENV + + - name: Print Env + run: | + env + + # CORE without extensions + - name: Configure Package + if: ${{ matrix.extensions == '' }} + timeout-minutes: 10 + run: | + set -v + cmake -B build-release ${COMMON_CMAKE_ARGS} -DDYNINST_USE_OpenMP=OFF . + + # CORE with extensions + - name: Configure Package + if: ${{ matrix.extensions == 'all' }} + timeout-minutes: 10 + run: | + set -v + cmake -B build-release ${COMMON_CMAKE_ARGS} -DDYNINST_USE_OpenMP=ON -DOMNITRACE_USE_PAPI=ON -DOMNITRACE_USE_OMPT=ON . + + # Build + - name: Build Package + timeout-minutes: 45 + run: | + set -v + cmake --build build-release --target all + + # Generate STGZ + - name: Generate STGZ + timeout-minutes: 45 + run: | + set -v + cd build-release + cpack -G STGZ + + # Generate DEB + - name: Generate DEB + timeout-minutes: 45 + run: | + set -v + cd build-release + cpack -G DEB -D CPACK_PACKAGING_INSTALL_PREFIX=/opt/omnitrace + + - name: List Files + timeout-minutes: 10 + run: | + find . -type f | egrep '\.(sh|deb|rpm)$' + + - name: STGZ Artifacts + timeout-minutes: 10 + uses: actions/upload-artifact@v2 + with: + name: stgz-installers + path: | + build-release/omnitrace-*.sh + + - name: DEB Artifacts + timeout-minutes: 10 + uses: actions/upload-artifact@v2 + with: + name: deb-installers + path: | + build-release/omnitrace_*.deb + + # before testing remove any artifacts of the build + - name: Remove Build and Install + timeout-minutes: 10 + run: | + mv build-release/omnitrace-*.sh ./ + mv build-release/omnitrace_*.deb ./ + rm -rf build-release + rm -rf /opt/omnitrace + + - name: STGZ Install + timeout-minutes: 10 + run: | + set -v + mkdir /opt/omnitrace-stgz + ./omnitrace-*.sh --prefix=/opt/omnitrace-stgz --skip-license --exclude-dir + + - name: List STGZ Install + timeout-minutes: 10 + continue-on-error: true + run: | + find /opt/omnitrace-stgz + + - name: Test STGZ Install + timeout-minutes: 10 + run: | + set -v + export PATH=/opt/omnitrace-stgz/bin:${PATH} + export LD_LIBRARY_PATH=/opt/omnitrace-stgz/lib:${LD_LIBRARY_PATH} + omnitrace-avail --help + omnitrace --help + omnitrace-critical-trace --help + + - name: DEB Install + timeout-minutes: 10 + run: | + set -v + dpkg --contents ./omnitrace_*.deb + dpkg -i ./omnitrace_*.deb + + - name: List DEB Install + timeout-minutes: 10 + continue-on-error: true + run: | + find /opt/omnitrace + + - name: Test DEB Install + timeout-minutes: 10 + run: | + set -v + export PATH=/opt/omnitrace/bin:${PATH} + export LD_LIBRARY_PATH=/opt/omnitrace/lib:${LD_LIBRARY_PATH} + omnitrace-avail --help + omnitrace --help + omnitrace-critical-trace --help diff --git a/projects/rocprofiler-systems/CMakeLists.txt b/projects/rocprofiler-systems/CMakeLists.txt index 3e2d2fbe08..0e1de1c48b 100644 --- a/projects/rocprofiler-systems/CMakeLists.txt +++ b/projects/rocprofiler-systems/CMakeLists.txt @@ -142,19 +142,6 @@ set(CMAKE_EXPORT_COMPILE_COMMANDS ON) include(Formatting) # format target include(Packages) # finds third-party libraries -if(OMNITRACE_USE_HIP OR OMNITRACE_USE_ROCTRACER) - find_package(HIP QUIET) - if(HIP_VERSION_MAJOR GREATER_EQUAL 4 AND HIP_VERSION_MINOR GREATER 3) - set(roctracer_kfdwrapper_LIBRARY) - endif() - omnitrace_add_feature(HIP_VERSION "HIP version") -else() - set(HIP_VERSION "0.0.0") - set(HIP_VERSION_MAJOR 0) - set(HIP_VERSION_MINOR 0) - set(HIP_VERSION_PATCH 0) -endif() - omnitrace_activate_clang_tidy() # custom visibility settings diff --git a/projects/rocprofiler-systems/VERSION b/projects/rocprofiler-systems/VERSION index 6e8bf73aa5..3eefcb9dd5 100644 --- a/projects/rocprofiler-systems/VERSION +++ b/projects/rocprofiler-systems/VERSION @@ -1 +1 @@ -0.1.0 +1.0.0 diff --git a/projects/rocprofiler-systems/cmake/ConfigCPack.cmake b/projects/rocprofiler-systems/cmake/ConfigCPack.cmake index 34d993f37e..4475f26766 100644 --- a/projects/rocprofiler-systems/cmake/ConfigCPack.cmake +++ b/projects/rocprofiler-systems/cmake/ConfigCPack.cmake @@ -1,4 +1,28 @@ -# Add packaging directives for timemory +if(DYNINST_BUILD_ELFUTILS AND DYNINST_ELFUTILS_DOWNLOAD_VERSION) + foreach(_LIB dw elf) + install( + FILES + ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}/dyninst-tpls/lib/lib${_LIB}${CMAKE_SHARED_LIBRARY_SUFFIX} + ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}/dyninst-tpls/lib/lib${_LIB}${CMAKE_SHARED_LIBRARY_SUFFIX}.1 + ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}/dyninst-tpls/lib/lib${_LIB}-${DYNINST_ELFUTILS_DOWNLOAD_VERSION}${CMAKE_SHARED_LIBRARY_SUFFIX} + DESTINATION ${CMAKE_INSTALL_LIBDIR}/dyninst-tpls/lib + OPTIONAL) + endforeach() +endif() + +if(EXISTS /etc/lsb-release AND NOT IS_DIRECTORY /etc/lsb-release) + file(READ /etc/lsb-release _LSB_RELEASE) + if(_LSB_RELEASE) + string(REGEX REPLACE "DISTRIB_ID=(.*)\nDISTRIB_RELEASE=(.*)\nDISTRIB_CODENAME=.*" + "\\1-\\2" _SYSTEM_NAME "${_LSB_RELEASE}") + endif() +endif() + +if(NOT _SYSTEM_NAME) + set(_SYSTEM_NAME "${CMAKE_SYSTEM_NAME}") +endif() + +# Add packaging directives set(CPACK_PACKAGE_NAME ${PROJECT_NAME}) set(CPACK_PACKAGE_VENDOR "Advanced Micro Devices, Inc.") set(CPACK_PACKAGE_DESCRIPTION_SUMMARY @@ -8,53 +32,162 @@ set(CPACK_PACKAGE_VERSION_MINOR "${PROJECT_VERSION_MINOR}") set(CPACK_PACKAGE_VERSION_PATCH "${PROJECT_VERSION_PATCH}") set(CPACK_PACKAGE_CONTACT "jonathan.madsen@amd.com") set(CPACK_RESOURCE_FILE_LICENSE "${PROJECT_SOURCE_DIR}/LICENSE") +set(OMNITRACE_CPACK_SYSTEM_NAME + "${_SYSTEM_NAME}" + CACHE STRING "System name, e.g. Linux or Ubuntu-18.04") +set(OMNITRACE_CPACK_PACKAGE_SUFFIX "") -if(DYNINST_BUILD_BOOST - OR DYNINST_BUILD_TBB - OR DYNINST_BUILD_ELFUTILS - OR DYNINST_BUILD_LIBIBERTY) - set(CPACK_INSTALLED_DIRECTORIES - "${CMAKE_INSTALL_PREFIX}/lib/dyninst-tpls/include" "lib/dyninst-tpls/include" - "${CMAKE_INSTALL_PREFIX}/lib/dyninst-tpls/lib" "lib/dyninst-tpls/lib") +if(OMNITRACE_USE_HIP + OR OMNITRACE_USE_ROCTRACER + OR OMNITRACE_USE_ROCM_SMI) + set(OMNITRACE_CPACK_PACKAGE_SUFFIX + "${OMNITRACE_CPACK_PACKAGE_SUFFIX}-ROCm-${ROCmVersion_NUMERIC_VERSION}") endif() -if(DYNINST_BUILD_ELFUTILS) - list(APPEND CPACK_INSTALLED_DIRECTORIES - "${CMAKE_INSTALL_PREFIX}/lib/dyninst-tpls/bin" "lib/dyninst-tpls/bin" - "${CMAKE_INSTALL_PREFIX}/lib/dyninst-tpls/share" "lib/dyninst-tpls/share") +if(OMNITRACE_USE_PAPI) + set(OMNITRACE_CPACK_PACKAGE_SUFFIX "${OMNITRACE_CPACK_PACKAGE_SUFFIX}-PAPI") endif() +if(OMNITRACE_USE_OMPT) + set(OMNITRACE_CPACK_PACKAGE_SUFFIX "${OMNITRACE_CPACK_PACKAGE_SUFFIX}-OMPT") +endif() + +if(OMNITRACE_USE_MPI) + set(VALID_MPI_IMPLS "mpich" "openmpi") + if("${MPI_C_COMPILER_INCLUDE_DIRS}" MATCHES "openmpi") + set(OMNITRACE_MPI_IMPL "openmpi") + elseif("${MPI_C_COMPILER_INCLUDE_DIRS}" MATCHES "mpich") + set(OMNITRACE_MPI_IMPL "mpich") + else() + message( + WARNING + "MPI implementation could not be determined. Please set OMNITRACE_MPI_IMPL to one of the following for CPack: ${VALID_MPI_IMPLS}" + ) + endif() + if(OMNITRACE_MPI_IMPL AND NOT "${OMNITRACE_MPI_IMPL}" IN_LIST VALID_MPI_IMPLS) + message( + SEND_ERROR + "Invalid OMNITRACE_MPI_IMPL (${OMNITRACE_MPI_IMPL}). Should be one of: ${VALID_MPI_IMPLS}" + ) + else() + omnitrace_add_feature(OMNITRACE_MPI_IMPL + "MPI implementation for CPack DEBIAN depends") + endif() + + if("${OMNITRACE_MPI_IMPL}" STREQUAL "openmpi") + set(OMNITRACE_MPI_IMPL_UPPER "OpenMPI") + elseif("${OMNITRACE_MPI_IMPL}" STREQUAL "mpich") + set(OMNITRACE_MPI_IMPL_UPPER "MPICH") + endif() + set(OMNITRACE_CPACK_PACKAGE_SUFFIX + "${OMNITRACE_CPACK_PACKAGE_SUFFIX}-${OMNITRACE_MPI_IMPL_UPPER}") +endif() + +set(CPACK_PACKAGE_FILE_NAME + "${CPACK_PACKAGE_NAME}-${OMNITRACE_VERSION}-${OMNITRACE_CPACK_SYSTEM_NAME}${OMNITRACE_CPACK_PACKAGE_SUFFIX}" + ) +if(DEFINED ENV{CPACK_PACKAGE_FILE_NAME}) + set(CPACK_PACKAGE_FILE_NAME $ENV{CPACK_PACKAGE_FILE_NAME}) +endif() + +set(OMNITRACE_PACKAGE_FILE_NAME + ${CPACK_PACKAGE_NAME}-${OMNITRACE_VERSION}-${OMNITRACE_CPACK_SYSTEM_NAME}${OMNITRACE_CPACK_PACKAGE_SUFFIX} + ) +omnitrace_add_feature(OMNITRACE_PACKAGE_FILE_NAME "CPack filename") + +# -------------------------------------------------------------------------------------- # +# # Debian package specific variables +# +# -------------------------------------------------------------------------------------- # + set(CPACK_DEBIAN_PACKAGE_HOMEPAGE "https://github.com/AARInternal/omnitrace") +set(CPACK_DEBIAN_PACKAGE_RELEASE "${CMAKE_SYSTEM_NAME}${OMNITRACE_CPACK_PACKAGE_SUFFIX}") +string(REGEX REPLACE "([a-zA-Z])-([0-9])" "\\1\\2" CPACK_DEBIAN_PACKAGE_RELEASE + "${CPACK_DEBIAN_PACKAGE_RELEASE}") +string(REPLACE "-" "~" CPACK_DEBIAN_PACKAGE_RELEASE "${CPACK_DEBIAN_PACKAGE_RELEASE}") if(DEFINED ENV{CPACK_DEBIAN_PACKAGE_RELEASE}) set(CPACK_DEBIAN_PACKAGE_RELEASE $ENV{CPACK_DEBIAN_PACKAGE_RELEASE}) -else() - set(CPACK_DEBIAN_PACKAGE_RELEASE "local") endif() +set(_DEBIAN_PACKAGE_DEPENDS "") +if(DYNINST_USE_OpenMP) + list(APPEND _DEBIAN_PACKAGE_DEPENDS libgomp1) +endif() +if(TIMEMORY_USE_PAPI) + list(APPEND _DEBIAN_PACKAGE_DEPENDS libpapi-dev libpfm4) +endif() +if(NOT OMNITRACE_BUILD_DYNINST) + if(NOT DYNINST_BUILD_BOOST) + foreach(_BOOST_COMPONENT atomic system thread date-time filesystem) + list(APPEND _DEBIAN_PACKAGE_DEPENDS + "libboost-${_BOOST_COMPONENT}-dev (>= 1.67.0)") + endforeach() + endif() + if(NOT DYNINST_BUILD_TBB) + list(APPEND _DEBIAN_PACKAGE_DEPENDS "libtbb-dev (>= 2018.6)") + endif() + if(NOT DYNINST_BUILD_LIBIBERTY) + list(APPEND _DEBIAN_PACKAGE_DEPENDS "libiberty-dev (>= 20170913)") + endif() +endif() +if(ROCmVersion_FOUND) + set(_ROCTRACER_SUFFIX " (>= 1.0.0.${ROCmVersion_NUMERIC_VERSION})") + set(_ROCM_SMI_SUFFIX + " (>= ${ROCmVersion_MAJOR_VERSION}.0.0.${ROCmVersion_NUMERIC_VERSION})") +endif() +if(OMNITRACE_USE_ROCM_SMI) + list(APPEND _DEBIAN_PACKAGE_DEPENDS "rocm-smi-lib${_ROCM_SMI_SUFFIX}") +endif() +if(OMNITRACE_USE_ROCTRACER) + list(APPEND _DEBIAN_PACKAGE_DEPENDS "roctracer-dev${_ROCTRACER_SUFFIX}") +endif() +if(OMNITRACE_USE_MPI) + if("${OMNITRACE_MPI_IMPL}" STREQUAL "openmpi") + list(APPEND _DEBIAN_PACKAGE_DEPENDS "libopenmpi-dev") + elseif("${OMNITRACE_MPI_IMPL}" STREQUAL "mpich") + list(APPEND _DEBIAN_PACKAGE_DEPENDS "libmpich-dev") + endif() +endif() +string(REPLACE ";" ", " _DEBIAN_PACKAGE_DEPENDS "${_DEBIAN_PACKAGE_DEPENDS}") +set(CPACK_DEBIAN_PACKAGE_DEPENDS + "${_DEBIAN_PACKAGE_DEPENDS}" + CACHE STRING "Debian package dependencies") +omnitrace_add_feature(CPACK_DEBIAN_PACKAGE_DEPENDS "Debian package dependencies") +set(CPACK_DEBIAN_FILE_NAME "DEB-DEFAULT") + +# -------------------------------------------------------------------------------------- # +# # RPM package specific variables +# +# -------------------------------------------------------------------------------------- # + if(DEFINED CPACK_PACKAGING_INSTALL_PREFIX) set(CPACK_RPM_EXCLUDE_FROM_AUTO_FILELIST_ADDITION "${CPACK_PACKAGING_INSTALL_PREFIX}") endif() +set(CPACK_RPM_PACKAGE_RELEASE "${CMAKE_SYSTEM_NAME}${OMNITRACE_CPACK_PACKAGE_SUFFIX}") +string(REGEX REPLACE "([a-zA-Z])-([0-9])" "\\1\\2" CPACK_RPM_PACKAGE_RELEASE + "${CPACK_RPM_PACKAGE_RELEASE}") +string(REPLACE "-" "~" CPACK_RPM_PACKAGE_RELEASE "${CPACK_RPM_PACKAGE_RELEASE}") if(DEFINED ENV{CPACK_RPM_PACKAGE_RELEASE}) set(CPACK_RPM_PACKAGE_RELEASE $ENV{CPACK_RPM_PACKAGE_RELEASE}) -else() - set(CPACK_RPM_PACKAGE_RELEASE "local") endif() # Get rpm distro if(CPACK_RPM_PACKAGE_RELEASE) set(CPACK_RPM_PACKAGE_RELEASE_DIST ON) endif() +set(CPACK_RPM_FILE_NAME "RPM-DEFAULT") +# -------------------------------------------------------------------------------------- # +# # Prepare final version for the CPACK use +# +# -------------------------------------------------------------------------------------- # + set(CPACK_PACKAGE_VERSION "${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH}" ) -# Set the names now using CPACK utility -set(CPACK_DEBIAN_FILE_NAME "DEB-DEFAULT") -set(CPACK_RPM_FILE_NAME "RPM-DEFAULT") - include(CPack) diff --git a/projects/rocprofiler-systems/cmake/Modules/FindROCmVersion.cmake b/projects/rocprofiler-systems/cmake/Modules/FindROCmVersion.cmake new file mode 100644 index 0000000000..03df1aa588 --- /dev/null +++ b/projects/rocprofiler-systems/cmake/Modules/FindROCmVersion.cmake @@ -0,0 +1,294 @@ +#[=======================================================================[.rst: +FindROCmVersion +--------------- + +Search the /.info/version* files to determine the version of ROCm + +Use this module by invoking find_package with the form:: + + find_package(ROCmVersion + [version] [EXACT] + [REQUIRED]) + +This module finds the version info for ROCm. The cached variables are:: + + ROCmVersion_FOUND - Whether the ROCm versioning was found + ROCmVersion_FULL_VERSION - The exact string from `/.info/version` or similar + ROCmVersion_MAJOR_VERSION - Major version, e.g. 4 in 4.5.2.100-40502 + ROCmVersion_MINOR_VERSION - Minor version, e.g. 5 in 4.5.2.100-40502 + ROCmVersion_PATCH_VERSION - Patch version, e.g. 2 in 4.5.2.100-40502 + ROCmVersion_TWEAK_VERSION - Tweak version, e.g. 100 in 4.5.2.100-40502 + ROCmVersion_REVISION_VERSION - Revision version, e.g. 40502 in 4.5.2.100-40502. + ROCmVersion_EPOCH_VERSION - See deb-version for a description of epochs. Epochs are used when versioning system change + ROCmVersion_CANONICAL_VERSION - `[:]..[.][-]` + ROCmVersion_NUMERIC_VERSION - e.g. `10000* + 100* + `, e.g. 40502 for ROCm 4.5.2 + ROCmVersion_TRIPLE_VERSION - e.g. `..`, e.g. 4.5.2 for ROCm 4.5.2 + +These variables are relevant for the find procedure:: + + ROCmVersion_DEBUG - Print info about processing + ROCmVersion_VERSION_FILE - `` to read from in `/.info/`, e.g. `version`, `version-dev`, `version-hip-libraries`, etc. + It may also be a full path + ROCmVersion_DIR - Root location for +#]=======================================================================] + +# scope this to a function to avoid leaking local variables +function(ROCM_VERSION_PARSE_VERSION_FILES) + + function(ROCM_VERSION_MESSAGE _TYPE) + if(ROCmVersion_DEBUG) + message(${_TYPE} "[ROCmVersion] ${ARGN}") + endif() + endfunction() + + # the list of variables set by module. when one of these changes, we need to unset the + # cache variables after it + foreach( + _V + EPOCH + MAJOR + MINOR + PATCH + TWEAK + REVISION + TRIPLE + NUMERIC + FULL + CANONICAL) + list(APPEND _ALL_VARIABLES ROCmVersion_${_V}_VERSION) + endforeach() + set(_REMAIN_VARIABLES ${_ALL_VARIABLES}) + + # this macro watches for changes in the variables and unsets the remaining cache + # varaible when they change + function(ROCM_VERSION_WATCH_FOR_CHANGE _var) + set(_rocm_version_watch_var_name ROCmVersion_WATCH_VALUE_${_var}) + if(DEFINED ${_rocm_version_watch_var_name}) + if("${${_var}}" STREQUAL "${${_rocm_version_watch_var_name}}") + if(NOT "${${_var}}" STREQUAL "") + rocm_version_message(STATUS "${_var} :: ${${_var}}") + endif() + list(REMOVE_ITEM _REMAIN_VARIABLES ${_var}) + set(_REMAIN_VARIABLES + "${_REMAIN_VARIABLES}" + PARENT_SCOPE) + return() + else() + rocm_version_message( + STATUS + "${_var} changed :: ${${_rocm_version_watch_var_name}} --> ${${_var}}" + ) + foreach(_V ${_REMAIN_VARIABLES}) + rocm_version_message( + STATUS "${_var} changed :: Unsetting cache variable ${_V}...") + unset(${_V} CACHE) + endforeach() + endif() + else() + if(NOT "${${_var}}" STREQUAL "") + rocm_version_message(STATUS "${_var} :: ${${_var}}") + endif() + endif() + + # store the value for the next run + set(${_rocm_version_watch_var_name} + "${${_var}}" + CACHE INTERNAL "Last value of ${_var}" FORCE) + endfunction() + + # read a .info/version* file and propagate the variables to the calling scope + function(ROCM_VERSION_READ_FILE _FILE _VAR_PREFIX) + file(READ "${_FILE}" FULL_VERSION_STRING LIMIT_COUNT 1) + + # remove any line endings + string(REGEX REPLACE "(\n|\r)" "" FULL_VERSION_STRING "${FULL_VERSION_STRING}") + + # store the full version so it can be set later + set(FULL_VERSION "${FULL_VERSION_STRING}") + + # get number and remove from full version string + string(REGEX REPLACE "([0-9]+)\:(.*)" "\\1" EPOCH_VERSION + "${FULL_VERSION_STRING}") + string(REGEX REPLACE "([0-9]+)\:(.*)" "\\2" FULL_VERSION_STRING + "${FULL_VERSION_STRING}") + + if(EPOCH_VERSION STREQUAL FULL_VERSION) + set(EPOCH_VERSION) + endif() + + # get number and remove from full version string + string(REGEX REPLACE "([0-9]+)(.*)" "\\1" MAJOR_VERSION "${FULL_VERSION_STRING}") + string(REGEX REPLACE "([0-9]+)(.*)" "\\2" FULL_VERSION_STRING + "${FULL_VERSION_STRING}") + + # get number and remove from full version string + string(REGEX REPLACE "\.([0-9]+)(.*)" "\\1" MINOR_VERSION + "${FULL_VERSION_STRING}") + string(REGEX REPLACE "\.([0-9]+)(.*)" "\\2" FULL_VERSION_STRING + "${FULL_VERSION_STRING}") + + # get number and remove from full version string + string(REGEX REPLACE "\.([0-9]+)(.*)" "\\1" PATCH_VERSION + "${FULL_VERSION_STRING}") + string(REGEX REPLACE "\.([0-9]+)(.*)" "\\2" FULL_VERSION_STRING + "${FULL_VERSION_STRING}") + + # get number and remove from full version string + string(REGEX REPLACE "\.([0-9]+)(.*)" "\\1" TWEAK_VERSION + "${FULL_VERSION_STRING}") + string(REGEX REPLACE "\.([0-9]+)(.*)" "\\2" FULL_VERSION_STRING + "${FULL_VERSION_STRING}") + + # get number + string(REGEX REPLACE "-([0-9A-Za-z+~]+)" "\\1" REVISION_VERSION + "${FULL_VERSION_STRING}") + + set(CANONICAL_VERSION) + set(_MAJOR_SEP ":") + set(_MINOR_SEP ".") + set(_PATCH_SEP ".") + set(_TWEAK_SEP ".") + set(_REVISION_SEP "-") + foreach(_V EPOCH MAJOR MINOR PATCH TWEAK REVISION) + if(${_V}_VERSION) + set(CANONICAL_VERSION "${CANONICAL_VERSION}${_${_V}_SEP}${${_V}_VERSION}") + else() + set(CANONICAL_VERSION "${CANONICAL_VERSION}${_${_V}_SEP}0") + endif() + endforeach() + set(_MAJOR_SEP "") + foreach(_V MAJOR MINOR PATCH) + if(${_V}_VERSION) + set(TRIPLE_VERSION "${TRIPLE_VERSION}${_${_V}_SEP}${${_V}_VERSION}") + else() + set(TRIPLE_VERSION "${TRIPLE_VERSION}${_${_V}_SEP}0") + endif() + endforeach() + + math( + EXPR + NUMERIC_VERSION + "(10000 * (${MAJOR_VERSION}+0)) + (100 * (${MINOR_VERSION}+0)) + (${PATCH_VERSION}+0)" + ) + + # propagate to parent scopes + foreach( + _V + EPOCH + MAJOR + MINOR + PATCH + TWEAK + REVISION + TRIPLE + NUMERIC + CANONICAL + FULL) + set(${_VAR_PREFIX}_${_V}_VERSION + ${${_V}_VERSION} + PARENT_SCOPE) + endforeach() + endfunction() + + # search for HIP to set ROCM_PATH + if(NOT hip_FOUND) + find_package(hip) + endif() + + function(COMPUTE_ROCM_VERSION_DIR) + if(EXISTS "${ROCmVersion_VERSION_FILE}" AND IS_ABSOLUTE + "${ROCmVersion_VERSION_FILE}") + get_filename_component(_VERSION_DIR "${ROCmVersion_VERSION_FILE}" PATH) + get_filename_component(_VERSION_DIR "${_VERSION_DIR}/.." ABSOLUTE) + set(ROCmVersion_DIR + "${_VERSION_DIR}" + CACHE PATH "Root path to ROCm's .info/${ROCmVersion_VERSION_FILE}" + ${ARGN}) + rocm_version_watch_for_change(ROCmVersion_DIR) + endif() + endfunction() + + if(ROCmVersion_VERSION_FILE) + get_filename_component(_VERSION_FILE "${ROCmVersion_VERSION_FILE}" NAME) + set(_VERSION_FILES ${_VERSION_FILE}) + compute_rocm_version_dir(FORCE) + else() + set(_VERSION_FILES version version-dev version-hip-libraries version-hiprt + version-hiprt-devel version-hip-sdk version-libs version-utils) + rocm_version_message(STATUS "ROCmVersion version files: ${_VERSION_FILES}") + endif() + + # convert env to cache if not defined + foreach(_PATH ROCmVersion_DIR ROCmVersion_ROOT ROCmVersion_ROOT_DIR ROCM_PATH) + if(NOT DEFINED ${_PATH} AND DEFINED ENV{${_PATH}}) + set(${_PATH} + "$ENV{${_PATH}}" + CACHE PATH "Search path for ROCm version for ROCmVersion") + endif() + endforeach() + + if(ROCmVersion_DIR) + set(_PATHS ${ROCmVersion_DIR}) + else() + set(_PATHS ${ROCmVersion_DIR} ${ROCmVersion_ROOT} ${ROCmVersion_ROOT_DIR} + ${ROCM_PATH} $ENV{CMAKE_PREFIX_PATH} ${CMAKE_PREFIX_PATH} /opt/rocm) + rocm_version_message(STATUS "ROCmVersion search paths: ${_PATHS}") + endif() + + string(REPLACE ":" ";" _PATHS "${_PATHS}") + + foreach(_PATH ${_PATHS}) + foreach(_FILE ${_VERSION_FILES}) + set(_F ${_PATH}/.info/${_FILE}) + if(EXISTS ${_F}) + set(ROCmVersion_VERSION_FILE + "${_F}" + CACHE FILEPATH "File with versioning info") + rocm_version_watch_for_change(ROCmVersion_VERSION_FILE) + compute_rocm_version_dir() + else() + rocm_version_message(AUTHOR_WARNING "File does not exist: ${_F}") + endif() + endforeach() + endforeach() + + if(EXISTS "${ROCmVersion_VERSION_FILE}") + set(_F "${ROCmVersion_VERSION_FILE}") + rocm_version_message(STATUS "Reading ${_F}...") + get_filename_component(_B "${_F}" NAME) + string(REPLACE "." "_" _B "${_B}") + string(REPLACE "-" "_" _B "${_B}") + rocm_version_read_file(${_F} ${_B}) + foreach( + _V + EPOCH + MAJOR + MINOR + PATCH + TWEAK + REVISION + TRIPLE + NUMERIC + FULL + CANONICAL) + set(_CACHE_VAR ROCmVersion_${_V}_VERSION) + set(_LOCAL_VAR ${_B}_${_V}_VERSION) + set(ROCmVersion_${_V}_VERSION + "${${_LOCAL_VAR}}" + CACHE STRING "ROCm ${_V} version") + rocm_version_watch_for_change(${_CACHE_VAR}) + endforeach() + endif() +endfunction() + +# execute +rocm_version_parse_version_files() + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args( + ROCmVersion + VERSION_VAR ROCmVersion_FULL_VERSION + REQUIRED_VARS ROCmVersion_FULL_VERSION ROCmVersion_TRIPLE_VERSION ROCmVersion_DIR + ROCmVersion_VERSION_FILE) +# don't add major/minor/patch/etc. version variables to required vars because they might +# be zero, which will cause CMake to evaluate it as not set diff --git a/projects/rocprofiler-systems/cmake/Packages.cmake b/projects/rocprofiler-systems/cmake/Packages.cmake index f9a30f25ca..db5ea414be 100644 --- a/projects/rocprofiler-systems/cmake/Packages.cmake +++ b/projects/rocprofiler-systems/cmake/Packages.cmake @@ -97,6 +97,33 @@ if(OMNITRACE_USE_ROCM_SMI) set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_RPATH}:${rocm-smi_LIBRARY_DIRS}") endif() +# ----------------------------------------------------------------------------------------# +# +# hip version +# +# ----------------------------------------------------------------------------------------# + +if(OMNITRACE_USE_HIP + OR OMNITRACE_USE_ROCTRACER + OR OMNITRACE_USE_ROCM_SMI) + find_package(ROCmVersion REQUIRED) + set(OMNITRACE_ROCM_VERSION ${ROCmVersion_FULL_VERSION}) + set(OMNITRACE_HIP_VERSION_MAJOR ${ROCmVersion_MAJOR_VERSION}) + set(OMNITRACE_HIP_VERSION_MINOR ${ROCmVersion_MINOR_VERSION}) + set(OMNITRACE_HIP_VERSION_PATCH ${ROCmVersion_PATCH_VERSION}) + set(OMNITRACE_HIP_VERSION ${ROCmVersion_TRIPLE_VERSION}) + if(OMNITRACE_HIP_VERSION_MAJOR GREATER_EQUAL 4 AND OMNITRACE_HIP_VERSION_MINOR + GREATER 3) + set(roctracer_kfdwrapper_LIBRARY) + endif() + omnitrace_add_feature(OMNITRACE_ROCM_VERSION "ROCm version used by omnitrace") +else() + set(OMNITRACE_HIP_VERSION "0.0.0") + set(OMNITRACE_HIP_VERSION_MAJOR 0) + set(OMNITRACE_HIP_VERSION_MINOR 0) + set(OMNITRACE_HIP_VERSION_PATCH 0) +endif() + # ----------------------------------------------------------------------------------------# # # MPI diff --git a/projects/rocprofiler-systems/external/dyninst b/projects/rocprofiler-systems/external/dyninst index 82b10fdcf5..1cb91f1eea 160000 --- a/projects/rocprofiler-systems/external/dyninst +++ b/projects/rocprofiler-systems/external/dyninst @@ -1 +1 @@ -Subproject commit 82b10fdcf589e084f6491ed08668ab60c02dae0e +Subproject commit 1cb91f1eea4201c52723a37db0c23edf6e6b9b5d diff --git a/projects/rocprofiler-systems/source/lib/common/join.hpp b/projects/rocprofiler-systems/source/lib/common/join.hpp index a268452a8c..f0c829125c 100644 --- a/projects/rocprofiler-systems/source/lib/common/join.hpp +++ b/projects/rocprofiler-systems/source/lib/common/join.hpp @@ -41,13 +41,15 @@ join(DelimT&& _delim, Args&&... _args) { std::stringstream _ss{}; OMNITRACE_FOLD_EXPRESSION(_ss << _delim << _args); + auto _ret = _ss.str(); if constexpr(std::is_same::value) { - return _ss.str().substr(1); + return (_ret.length() > 1) ? _ret.substr(1) : std::string{}; } else { - return _ss.str().substr(std::string{ _delim }.length()); + auto&& _len = std::string{ _delim }.length(); + return (_ret.length() > _len) ? _ret.substr(_len) : std::string{}; } } } // namespace diff --git a/projects/rocprofiler-systems/source/lib/omnitrace/include/library/defines.hpp.in b/projects/rocprofiler-systems/source/lib/omnitrace/include/library/defines.hpp.in index bd636fcf25..2576badfde 100644 --- a/projects/rocprofiler-systems/source/lib/omnitrace/include/library/defines.hpp.in +++ b/projects/rocprofiler-systems/source/lib/omnitrace/include/library/defines.hpp.in @@ -23,10 +23,10 @@ #pragma once // clang-format off -#define OMNITRACE_HIP_VERSION_STRING "@HIP_VERSION@" -#define OMNITRACE_HIP_VERSION_MAJOR @HIP_VERSION_MAJOR@ -#define OMNITRACE_HIP_VERSION_MINOR @HIP_VERSION_MINOR@ -#define OMNITRACE_HIP_VERSION_PATCH @HIP_VERSION_PATCH@ +#define OMNITRACE_HIP_VERSION_STRING "@OMNITRACE_HIP_VERSION@" +#define OMNITRACE_HIP_VERSION_MAJOR @OMNITRACE_HIP_VERSION_MAJOR@ +#define OMNITRACE_HIP_VERSION_MINOR @OMNITRACE_HIP_VERSION_MINOR@ +#define OMNITRACE_HIP_VERSION_PATCH @OMNITRACE_HIP_VERSION_PATCH@ #if defined(OMNITRACE_USE_ROCTRACER) # define OMNITRACE_ROCTRACER_LIBKFDWRAPPER "@roctracer_kfdwrapper_LIBRARY@"