diff options
author | afzpatel <122491982+afzpatel@users.noreply.github.com> | 2024-03-27 12:40:21 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-03-27 09:40:21 -0700 |
commit | 6d4dd33c46d736ff46313f871486fe974c9e2612 (patch) | |
tree | 132d3aa07cc716a6753566be7e4c8531c8eb778b /var | |
parent | 579bad05a8e6f5d6d8ce474ecc35f5507fef8ecf (diff) | |
download | spack-6d4dd33c46d736ff46313f871486fe974c9e2612.tar.gz spack-6d4dd33c46d736ff46313f871486fe974c9e2612.tar.bz2 spack-6d4dd33c46d736ff46313f871486fe974c9e2612.tar.xz spack-6d4dd33c46d736ff46313f871486fe974c9e2612.zip |
Enable ASAN in ROCm packages (#42704)
* Initial commit to enable ASAN
* fix styling
* fix styling
* add asan option for hip-tensor and roctracer-dev
Diffstat (limited to 'var')
13 files changed, 59 insertions, 0 deletions
diff --git a/var/spack/repos/builtin/packages/comgr/package.py b/var/spack/repos/builtin/packages/comgr/package.py index 789dfc50b7..a8047e3568 100644 --- a/var/spack/repos/builtin/packages/comgr/package.py +++ b/var/spack/repos/builtin/packages/comgr/package.py @@ -42,6 +42,8 @@ class Comgr(CMakePackage): version("5.1.3", sha256="3078c10e9a852fe8357712a263ad775b15944e083f93a879935c877511066ac9") version("5.1.0", sha256="1cdcfe5acb768ef50fb0026d4ee7ba01e615251ad3c27bb2593cdcf8c070a894") + variant("asan", default=False, description="Build with address-sanitizer enabled or disabled") + # Disable the hip compile tests. Spack should not be using # /opt/rocm, and this breaks the build when /opt/rocm exists. patch("hip-tests.patch", when="@:4.2.0") @@ -90,6 +92,8 @@ class Comgr(CMakePackage): args = [self.define("BUILD_TESTING", self.run_tests)] if self.spec.satisfies("@5.4.3:"): args.append("-DCMAKE_INSTALL_LIBDIR=lib") + if self.spec.satisfies("@5.7:"): + args.append(self.define_from_variant("ADDRESS_SANITIZER", "asan")) return args @classmethod diff --git a/var/spack/repos/builtin/packages/hip-tensor/package.py b/var/spack/repos/builtin/packages/hip-tensor/package.py index bddebe34e1..a8d1a03f5e 100644 --- a/var/spack/repos/builtin/packages/hip-tensor/package.py +++ b/var/spack/repos/builtin/packages/hip-tensor/package.py @@ -22,9 +22,13 @@ class HipTensor(CMakePackage, ROCmPackage): version("5.7.1", sha256="96743d4e695fe865aef4097ae31d9b4e42a2d5a92135a005b0d187d9c0b17645") version("5.7.0", sha256="4b17f6d43b17fe2dc1d0c61e9663d4752006f7898cc94231206444a1663eb252") + variant("asan", default=False, description="Build with address-sanitizer enabled or disabled") + for ver in ["5.7.0", "5.7.1", "6.0.0", "6.0.2", "master"]: depends_on(f"composable-kernel@{ver}", when=f"@{ver}") depends_on(f"rocm-cmake@{ver}", when=f"@{ver}") def setup_build_environment(self, env): env.set("CXX", self.spec["hip"].hipcc) + if self.spec.satisfies("+asan"): + self.asan_on(env, self.spec["llvm-amdgpu"].prefix) diff --git a/var/spack/repos/builtin/packages/hipblas/package.py b/var/spack/repos/builtin/packages/hipblas/package.py index 7a58fc9d57..3115b52bb1 100644 --- a/var/spack/repos/builtin/packages/hipblas/package.py +++ b/var/spack/repos/builtin/packages/hipblas/package.py @@ -57,6 +57,7 @@ class Hipblas(CMakePackage, CudaPackage, ROCmPackage): sticky=True, ) variant("rocm", default=True, description="Enable ROCm support") + variant("asan", default=False, description="Build with address-sanitizer enabled or disabled") conflicts("+cuda +rocm", msg="CUDA and ROCm support are mutually exclusive") conflicts("~cuda ~rocm", msg="CUDA or ROCm support is required") @@ -114,6 +115,10 @@ class Hipblas(CMakePackage, CudaPackage, ROCmPackage): ver = None return ver + def setup_build_environment(self, env): + if self.spec.satisfies("+asan"): + self.asan_on(env, self.spec["llvm-amdgpu"].prefix) + def cmake_args(self): args = [ self.define("BUILD_CLIENTS_SAMPLES", "OFF"), diff --git a/var/spack/repos/builtin/packages/hipcub/package.py b/var/spack/repos/builtin/packages/hipcub/package.py index 870d9f299c..a8a43cc72e 100644 --- a/var/spack/repos/builtin/packages/hipcub/package.py +++ b/var/spack/repos/builtin/packages/hipcub/package.py @@ -50,6 +50,7 @@ class Hipcub(CMakePackage, CudaPackage, ROCmPackage): sticky=True, ) variant("rocm", default=True, description="Enable ROCm support") + variant("asan", default=False, description="Build with address-sanitizer enabled or disabled") conflicts("+cuda +rocm", msg="CUDA and ROCm support are mutually exclusive") conflicts("~cuda ~rocm", msg="CUDA or ROCm support is required") @@ -88,6 +89,8 @@ class Hipcub(CMakePackage, CudaPackage, ROCmPackage): def setup_build_environment(self, env): if self.spec.satisfies("+rocm"): env.set("CXX", self.spec["hip"].hipcc) + if self.spec.satisfies("+asan"): + self.asan_on(env, self.spec["llvm-amdgpu"].prefix) def cmake_args(self): args = [self.define("BUILD_TEST", self.run_tests)] diff --git a/var/spack/repos/builtin/packages/hipfft/package.py b/var/spack/repos/builtin/packages/hipfft/package.py index 695c2e21c7..818327b4fb 100644 --- a/var/spack/repos/builtin/packages/hipfft/package.py +++ b/var/spack/repos/builtin/packages/hipfft/package.py @@ -59,6 +59,7 @@ class Hipfft(CMakePackage, CudaPackage, ROCmPackage): variant("rocm", default=True, description="Enable ROCm support") conflicts("+cuda +rocm", msg="CUDA and ROCm support are mutually exclusive") conflicts("~cuda ~rocm", msg="CUDA or ROCm support is required") + variant("asan", default=False, description="Build with address-sanitizer enabled or disabled") depends_on("cmake@3.5:", type="build") @@ -91,6 +92,10 @@ class Hipfft(CMakePackage, CudaPackage, ROCmPackage): # https://github.com/ROCm/rocFFT/pull/85) patch("001-remove-submodule-and-sync-shared-files-from-rocFFT.patch", when="@6.0.0") + def setup_build_environment(self, env): + if self.spec.satisfies("+asan"): + self.asan_on(env, self.spec["llvm-amdgpu"].prefix) + def cmake_args(self): args = [self.define("BUILD_CLIENTS_SAMPLES", "OFF")] diff --git a/var/spack/repos/builtin/packages/hipify-clang/package.py b/var/spack/repos/builtin/packages/hipify-clang/package.py index 2414dbf31a..5b0839054a 100644 --- a/var/spack/repos/builtin/packages/hipify-clang/package.py +++ b/var/spack/repos/builtin/packages/hipify-clang/package.py @@ -39,6 +39,8 @@ class HipifyClang(CMakePackage): version("5.1.3", sha256="6354b08b8ab2f4c481398fb768652bae00bb78c4cec7a11d5f6c7e4cb831ddf1") version("5.1.0", sha256="ba792294cbdcc880e0f02e38ee352dff8d4a2c183430e13d1c5ed176bd46cfc5") + variant("asan", default=False, description="Build with address-sanitizer enabled or disabled") + # the patch was added to install the targets in the correct directory structure # this will fix the issue https://github.com/spack/spack/issues/30711 @@ -80,4 +82,6 @@ class HipifyClang(CMakePackage): args = [] if self.spec.satisfies("@5.5"): args.append(self.define("SWDEV_375013", "ON")) + if self.spec.satisfies("@5.7.0:"): + args.append(self.define_from_variant("ADDRESS_SANITIZER", "asan")) return args diff --git a/var/spack/repos/builtin/packages/hiprand/package.py b/var/spack/repos/builtin/packages/hiprand/package.py index 79022d5a5e..4152dddc0a 100644 --- a/var/spack/repos/builtin/packages/hiprand/package.py +++ b/var/spack/repos/builtin/packages/hiprand/package.py @@ -65,6 +65,7 @@ class Hiprand(CMakePackage, CudaPackage, ROCmPackage): values=("Release", "Debug", "RelWithDebInfo"), description="CMake build type", ) + variant("asan", default=False, description="Build with address-sanitizer enabled or disabled") depends_on("cmake@3.10.2:", type="build") @@ -106,6 +107,8 @@ class Hiprand(CMakePackage, CudaPackage, ROCmPackage): def setup_build_environment(self, env): env.set("CXX", self.spec["hip"].hipcc) + if self.spec.satisfies("+asan"): + self.asan_on(env, self.spec["llvm-amdgpu"].prefix) @classmethod def determine_version(cls, lib): diff --git a/var/spack/repos/builtin/packages/hipsolver/package.py b/var/spack/repos/builtin/packages/hipsolver/package.py index cefe8644b2..9d07038f0d 100644 --- a/var/spack/repos/builtin/packages/hipsolver/package.py +++ b/var/spack/repos/builtin/packages/hipsolver/package.py @@ -70,6 +70,7 @@ class Hipsolver(CMakePackage, CudaPackage, ROCmPackage): values=("Release", "Debug", "RelWithDebInfo"), description="CMake build type", ) + variant("asan", default=False, description="Build with address-sanitizer enabled or disabled") depends_on("cmake@3.5:", type="build") @@ -124,6 +125,10 @@ class Hipsolver(CMakePackage, CudaPackage, ROCmPackage): ver = None return ver + def setup_build_environment(self, env): + if self.spec.satisfies("+asan"): + self.asan_on(env, self.spec["llvm-amdgpu"].prefix) + def cmake_args(self): args = [ self.define("BUILD_CLIENTS_SAMPLES", "OFF"), diff --git a/var/spack/repos/builtin/packages/hipsparse/package.py b/var/spack/repos/builtin/packages/hipsparse/package.py index c3f06ba94c..4efec56801 100644 --- a/var/spack/repos/builtin/packages/hipsparse/package.py +++ b/var/spack/repos/builtin/packages/hipsparse/package.py @@ -54,6 +54,7 @@ class Hipsparse(CMakePackage, CudaPackage, ROCmPackage): sticky=True, ) variant("rocm", default=True, description="Enable ROCm support") + variant("asan", default=False, description="Build with address-sanitizer enabled or disabled") conflicts("+cuda +rocm", msg="CUDA and ROCm support are mutually exclusive") conflicts("~cuda ~rocm", msg="CUDA or ROCm support is required") @@ -100,6 +101,10 @@ class Hipsparse(CMakePackage, CudaPackage, ROCmPackage): ver = None return ver + def setup_build_environment(self, env): + if self.spec.satisfies("+asan"): + self.asan_on(env, self.spec["llvm-amdgpu"].prefix) + def cmake_args(self): args = [ self.define("CMAKE_CXX_STANDARD", "14"), diff --git a/var/spack/repos/builtin/packages/hsa-rocr-dev/package.py b/var/spack/repos/builtin/packages/hsa-rocr-dev/package.py index ea25289a91..44b37774ad 100644 --- a/var/spack/repos/builtin/packages/hsa-rocr-dev/package.py +++ b/var/spack/repos/builtin/packages/hsa-rocr-dev/package.py @@ -127,5 +127,7 @@ class HsaRocrDev(CMakePackage): args.append("-DCMAKE_INSTALL_LIBDIR=lib") if self.spec.satisfies("@6.0:"): args.append(self.define("ROCM_PATCH_VERSION", "60000")) + if self.spec.satisfies("@5.7.0:"): + args.append(self.define_from_variant("ADDRESS_SANITIZER", "asan")) return args diff --git a/var/spack/repos/builtin/packages/rocm-openmp-extras/package.py b/var/spack/repos/builtin/packages/rocm-openmp-extras/package.py index 597c0820a2..6638eabb24 100644 --- a/var/spack/repos/builtin/packages/rocm-openmp-extras/package.py +++ b/var/spack/repos/builtin/packages/rocm-openmp-extras/package.py @@ -173,6 +173,8 @@ class RocmOpenmpExtras(Package): version("5.1.3", sha256=versions_dict["5.1.3"]["aomp"], deprecated=True) version("5.1.0", sha256=versions_dict["5.1.0"]["aomp"], deprecated=True) + variant("asan", default=False, description="Build with address-sanitizer enabled or disabled") + depends_on("cmake@3:", type="build") depends_on("py-setuptools", type="build") depends_on("python@3:", type="build") @@ -270,6 +272,14 @@ class RocmOpenmpExtras(Package): llvm_prefix = self.spec["llvm-amdgpu"].prefix env.set("AOMP", "{0}".format(llvm_prefix)) env.set("FC", "{0}/bin/flang".format(openmp_extras_prefix)) + if self.spec.satisfies("+asan"): + env.set("SANITIZER", 1) + env.set("VERBOSE", 1) + env.set( + "LDSHARED", + self.spec["llvm-amdgpu"].prefix.bin.clang + + " -shared -Wl,-O1 -Wl,-Bsymbolic-functions -Wl,-z,relro -g -fwrapv -O2", + ) gfx_list = "gfx700 gfx701 gfx801 gfx803 gfx900 gfx902 gfx906 gfx908" if self.spec.version >= Version("4.3.1"): diff --git a/var/spack/repos/builtin/packages/rocm-smi-lib/package.py b/var/spack/repos/builtin/packages/rocm-smi-lib/package.py index 7d50af78db..43b8a9bba5 100644 --- a/var/spack/repos/builtin/packages/rocm-smi-lib/package.py +++ b/var/spack/repos/builtin/packages/rocm-smi-lib/package.py @@ -44,6 +44,7 @@ class RocmSmiLib(CMakePackage): version("5.1.0", sha256="21b31b43015b77a9119cf4c1d4ff3864f9ef1f34e2a52a38f985a3f710dc5f87") variant("shared", default=True, description="Build shared or static library") + variant("asan", default=False, description="Build with address-sanitizer enabled or disabled") depends_on("cmake@3:", type="build") depends_on("python@3:", type=("build", "run")) @@ -58,6 +59,8 @@ class RocmSmiLib(CMakePackage): self.define("CMAKE_INSTALL_LIBDIR", "lib"), self.define("BUILD_TESTS", self.run_tests), ] + if self.spec.satisfies("@5.7.0:"): + args.append(self.define_from_variant("ADDRESS_SANITIZER", "asan")) return args @classmethod diff --git a/var/spack/repos/builtin/packages/roctracer-dev/package.py b/var/spack/repos/builtin/packages/roctracer-dev/package.py index f72e77e500..18e3da449b 100644 --- a/var/spack/repos/builtin/packages/roctracer-dev/package.py +++ b/var/spack/repos/builtin/packages/roctracer-dev/package.py @@ -41,6 +41,8 @@ class RoctracerDev(CMakePackage, ROCmPackage): version("5.1.3", sha256="45f19875c15eb609b993788b47fd9c773b4216074749d7744f3a671be17ef33c") version("5.1.0", sha256="58b535f5d6772258190e4adcc23f37c916f775057a91b960e1f2ee1f40ed5aac") + variant("asan", default=False, description="Build with address-sanitizer enabled or disabled") + depends_on("cmake@3:", type="build") depends_on("python@3:", type="build") depends_on("py-cppheaderparser", type="build") @@ -101,6 +103,10 @@ class RoctracerDev(CMakePackage, ROCmPackage): "hsaap.py", ) + def setup_build_environment(self, env): + if self.spec.satisfies("+asan"): + self.asan_on(env, self.spec["llvm-amdgpu"].prefix) + def cmake_args(self): args = [ self.define("HIP_VDI", "1"), |