fix +asan in ROCm packages (#48745)
* fix asan for hsa-rocr-dev * add libclang_rt.asan-x86_64.so to LD_LIBRARY_PATH * fix +asan for hipsparselt * fix rocm-openmp-extras asan and add rccl +asan support * add missing comgr build env variables * add missing rocm-smi-lib build env variables * minor dependency change * fix style
This commit is contained in:
parent
8cfffd88fa
commit
aa55b19680
@ -136,6 +136,15 @@ def cmake_args(self):
|
||||
args.append(self.define_from_variant("ADDRESS_SANITIZER", "asan"))
|
||||
return args
|
||||
|
||||
def setup_build_environment(self, env):
|
||||
if self.spec.satisfies("@5.7: +asan"):
|
||||
env.set("CC", f"{self.spec['llvm-amdgpu'].prefix}/bin/clang")
|
||||
env.set("CXX", f"{self.spec['llvm-amdgpu'].prefix}/bin/clang++")
|
||||
env.set("ASAN_OPTIONS", "detect_leaks=0")
|
||||
env.set("CFLAGS", "-fsanitize=address -shared-libasan")
|
||||
env.set("CXXFLAGS", "-fsanitize=address -shared-libasan")
|
||||
env.set("LDFLAGS", "-fuse-ld=lld")
|
||||
|
||||
@classmethod
|
||||
def determine_version(cls, lib):
|
||||
match = re.search(r"lib\S*\.so\.\d+\.\d+\.(\d)(\d\d)(\d\d)", lib)
|
||||
|
@ -90,6 +90,8 @@ class Hipsparselt(CMakePackage, ROCmPackage):
|
||||
|
||||
def setup_build_environment(self, env):
|
||||
env.set("CXX", self.spec["hip"].hipcc)
|
||||
if self.spec.satisfies("+asan"):
|
||||
env.set("CC", f"{self.spec['llvm-amdgpu'].prefix}/bin/clang")
|
||||
env.set("TENSILE_ROCM_ASSEMBLER_PATH", f"{self.spec['llvm-amdgpu'].prefix}/bin/clang++")
|
||||
env.set(
|
||||
"TENSILE_ROCM_OFFLOAD_BUNDLER_PATH",
|
||||
|
@ -155,6 +155,17 @@ def determine_version(cls, lib):
|
||||
ver = None
|
||||
return ver
|
||||
|
||||
def setup_build_environment(self, env):
|
||||
if self.spec.satisfies("@5.7: +asan"):
|
||||
numa_inc = self.spec["numactl"].prefix.include
|
||||
numa_lib = self.spec["numactl"].prefix.lib
|
||||
env.set("CC", f"{self.spec['llvm-amdgpu'].prefix}/bin/clang")
|
||||
env.set("CXX", f"{self.spec['llvm-amdgpu'].prefix}/bin/clang++")
|
||||
env.set("ASAN_OPTIONS", "detect_leaks=0")
|
||||
env.set("CFLAGS", f"-fsanitize=address -shared-libasan -I{numa_inc} -L{numa_lib}")
|
||||
env.set("CXXFLAGS", f"-fsanitize=address -shared-libasan -I{numa_inc} -L{numa_lib}")
|
||||
env.set("LDFLAGS", "-fuse-ld=lld")
|
||||
|
||||
def cmake_args(self):
|
||||
spec = self.spec
|
||||
|
||||
|
@ -315,6 +315,11 @@ def setup_run_environment(self, env):
|
||||
def setup_dependent_run_environment(self, env, dependent_spec):
|
||||
llvm_amdgpu_home = self.spec["llvm-amdgpu"].prefix
|
||||
env.prepend_path("LD_LIBRARY_PATH", llvm_amdgpu_home + "/lib")
|
||||
# Required for enabling asan on dependent packages
|
||||
for root, _, files in os.walk(self.spec["llvm-amdgpu"].prefix):
|
||||
if "libclang_rt.asan-x86_64.so" in files:
|
||||
env.prepend_path("LD_LIBRARY_PATH", root)
|
||||
env.prune_duplicate_paths("LD_LIBRARY_PATH")
|
||||
|
||||
@run_after("install")
|
||||
def post_install(self):
|
||||
|
@ -69,6 +69,7 @@ class Rccl(CMakePackage):
|
||||
values=auto_or_any_combination_of(*amdgpu_targets),
|
||||
sticky=True,
|
||||
)
|
||||
variant("asan", default=False, description="Build with address-sanitizer enabled or disabled")
|
||||
|
||||
patch("0003-Fix-numactl-rocm-smi-path-issue.patch", when="@5.2.3:5.6")
|
||||
patch("0004-Set-rocm-core-path-for-version-file.patch", when="@6.0:6.2")
|
||||
@ -143,6 +144,11 @@ def determine_version(cls, lib):
|
||||
def setup_build_environment(self, env):
|
||||
env.set("CXX", self.spec["hip"].hipcc)
|
||||
env.set("ROCMCORE_PATH", self.spec["rocm-core"].prefix)
|
||||
if self.spec.satisfies("+asan"):
|
||||
env.set("ASAN_OPTIONS", "detect_leaks=0")
|
||||
env.set("CFLAGS", "-fsanitize=address -shared-libasan")
|
||||
env.set("CXXFLAGS", "-fsanitize=address -shared-libasan")
|
||||
env.set("LDFLAGS", "-fuse-ld=lld")
|
||||
|
||||
def cmake_args(self):
|
||||
args = [
|
||||
|
@ -364,14 +364,6 @@ def setup_build_environment(self, env):
|
||||
env.set("FC", "{0}/bin/flang".format(openmp_extras_prefix))
|
||||
if self.spec.satisfies("@6.1:"):
|
||||
env.prepend_path("LD_LIBRARY_PATH", self.spec["hsa-rocr-dev"].prefix.lib)
|
||||
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"):
|
||||
@ -611,6 +603,13 @@ def install(self, spec, prefix):
|
||||
"-DHSAKMT_LIB={0}/lib".format(hsakmt_prefix),
|
||||
"-DHSAKMT_LIB64={0}/lib64".format(hsakmt_prefix),
|
||||
]
|
||||
if self.spec.satisfies("+asan"):
|
||||
openmp_common_args += [
|
||||
"-DASAN_OPTIONS=detect_leaks=0",
|
||||
"-DCMAKE_C_FLAGS=-fsanitize=address -shared-libasan",
|
||||
"-DCMAKE_CXX_FLAGS=-fsanitize=address -shared-libasan",
|
||||
"-DCMAKE_LD_FLAGS=-fuse-ld=lld",
|
||||
]
|
||||
|
||||
components["openmp"] = ["../rocm-openmp-extras/llvm-project/openmp"]
|
||||
components["openmp"] += openmp_common_args
|
||||
|
@ -76,6 +76,9 @@ class RocmSmiLib(CMakePackage):
|
||||
]:
|
||||
depends_on(f"rocm-core@{ver}", when=f"@{ver}")
|
||||
|
||||
for ver in ["6.1.0", "6.1.1", "6.1.2", "6.2.0", "6.2.1", "6.2.4", "6.3.0", "6.3.1", "6.3.2"]:
|
||||
depends_on("llvm-amdgpu", when=f"@{ver}+asan")
|
||||
|
||||
patch(
|
||||
"https://github.com/ROCm/rocm_smi_lib/commit/11f12b86517d0e9868f4d16d74d4e8504c3ba7da.patch?full_index=1",
|
||||
sha256="62be7262f6e1e71bf82a03f500a424a536638f04e913d0f4b477f60e8e1190fd",
|
||||
@ -94,6 +97,15 @@ def cmake_args(self):
|
||||
args.append(self.define_from_variant("ADDRESS_SANITIZER", "asan"))
|
||||
return args
|
||||
|
||||
def setup_build_environment(self, env):
|
||||
if self.spec.satisfies("@6.1: +asan"):
|
||||
env.set("CC", f"{self.spec['llvm-amdgpu'].prefix}/bin/clang")
|
||||
env.set("CXX", f"{self.spec['llvm-amdgpu'].prefix}/bin/clang++")
|
||||
env.set("ASAN_OPTIONS", "detect_leaks=0")
|
||||
env.set("CFLAGS", "-fsanitize=address -shared-libasan")
|
||||
env.set("CXXFLAGS", "-fsanitize=address -shared-libasan")
|
||||
env.set("LDFLAGS", "-fuse-ld=lld")
|
||||
|
||||
@classmethod
|
||||
def determine_version(cls, lib):
|
||||
match = re.search(r"lib\S*\.so\.\d+\.\d+\.(\d)(\d\d)(\d\d)", lib)
|
||||
|
Loading…
Reference in New Issue
Block a user