From 815f94d593da18a6491fadafd2b1ba31c1a7d185 Mon Sep 17 00:00:00 2001 From: thansen-amd Date: Thu, 26 Oct 2023 16:51:05 -0600 Subject: [PATCH 1/6] asan CI setup and settings map rework --- .jenkins/asan.groovy | 84 ++++++++++++++++++++++++++++++++++ .jenkins/common.groovy | 25 +++++++--- .jenkins/precheckin.groovy | 6 ++- .jenkins/staticanalysis.groovy | 4 +- .jenkins/staticlibrary.groovy | 6 ++- 5 files changed, 113 insertions(+), 12 deletions(-) create mode 100644 .jenkins/asan.groovy diff --git a/.jenkins/asan.groovy b/.jenkins/asan.groovy new file mode 100644 index 00000000..5068f16f --- /dev/null +++ b/.jenkins/asan.groovy @@ -0,0 +1,84 @@ +#!/usr/bin/env groovy +// This shared library is available at https://github.com/ROCmSoftwarePlatform/rocJENKINS/ +@Library('rocJenkins@pong') _ + +// This file is for internal AMD use. +// If you are interested in running your own Jenkins, please raise a github issue for assistance. + +import com.amd.project.* +import com.amd.docker.* +import java.nio.file.Path; + +def runCI = +{ + nodeDetails, jobName-> + + def prj = new rocProject('hipCUB', 'address-sanitizer') + + // Define test architectures, optional rocm version argument is available + def nodes = new dockerNodes(nodeDetails, jobName, prj) + + boolean formatCheck = false + + def commonGroovy + + def settings = [addressSanitizer: true] + + def compileCommand = + { + platform, project-> + + commonGroovy = load "${project.paths.project_src_prefix}/.jenkins/common.groovy" + commonGroovy.runCompileCommand(platform, project, jobName, settings) + } + + def testCommand = + { + platform, project-> + + commonGroovy.runTestCommand(platform, project, settings) + } + + def packageCommand = + { + platform, project-> + + commonGroovy.runPackageCommand(platform, project) + } + + buildProject(prj, formatCheck, nodes.dockerArray, compileCommand, testCommand, packageCommand) +} + +ci: { + String urlJobName = auxiliary.getTopJobName(env.BUILD_URL) + + def propertyList = ["compute-rocm-dkms-no-npi-hipclang":[pipelineTriggers([cron('0 1 * * 0')])]] + propertyList = auxiliary.appendPropertyList(propertyList) + + def jobNameList = ["compute-rocm-dkms-no-npi-hipclang":([ubuntu18:['gfx900'],centos7:['gfx906'],centos8:['gfx906'],sles15sp1:['gfx908']])] + jobNameList = auxiliary.appendJobNameList(jobNameList) + + propertyList.each + { + jobName, property-> + if (urlJobName == jobName) + properties(auxiliary.addCommonProperties(property)) + } + + Set seenJobNames = [] + jobNameList.each + { + jobName, nodeDetails-> + seenJobNames.add(jobName) + if (urlJobName == jobName) + runCI(nodeDetails, jobName) + } + + // For url job names that are outside of the standardJobNameSet i.e. compute-rocm-dkms-no-npi-1901 + if(!seenJobNames.contains(urlJobName)) + { + properties(auxiliary.addCommonProperties([pipelineTriggers([cron('0 1 * * *')])])) + runCI([ubuntu16:['gfx906']], urlJobName) + } +} + diff --git a/.jenkins/common.groovy b/.jenkins/common.groovy index eff08d5f..c72b001e 100644 --- a/.jenkins/common.groovy +++ b/.jenkins/common.groovy @@ -1,17 +1,18 @@ // This file is for internal AMD use. // If you are interested in running your own Jenkins, please raise a github issue for assistance. -def runCompileCommand(platform, project, jobName, boolean debug=false, boolean sameOrg=true) +def runCompileCommand(platform, project, jobName, settings) { project.paths.construct_build_prefix() - String buildTypeArg = debug ? '-DCMAKE_BUILD_TYPE=Debug' : '-DCMAKE_BUILD_TYPE=Release' - String buildTypeDir = debug ? 'debug' : 'release' + String buildTypeArg = settings.debug ? '-DCMAKE_BUILD_TYPE=Debug' : '-DCMAKE_BUILD_TYPE=Release' + String buildTypeDir = settings.debug ? 'debug' : 'release' String cmake = platform.jenkinsLabel.contains('centos') ? 'cmake3' : 'cmake' //Set CI node's gfx arch as target if PR, otherwise use default targets of the library String amdgpuTargets = env.BRANCH_NAME.startsWith('PR-') ? '-DAMDGPU_TARGETS=\$gfx_arch' : '' + String asanFlag = settings.addressSanitizer ? '-DBUILD_ADDRESS_SANITIZER=ON' : '' - def getRocPRIM = auxiliary.getLibrary('rocPRIM', platform.jenkinsLabel, null, sameOrg) + def getRocPRIM = auxiliary.getLibrary('rocPRIM', platform.jenkinsLabel, null, settings.sameOrg) def command = """#!/usr/bin/env bash set -x @@ -19,7 +20,7 @@ def runCompileCommand(platform, project, jobName, boolean debug=false, boolean s cd ${project.paths.project_build_prefix} mkdir -p build/${buildTypeDir} && cd build/${buildTypeDir} ${auxiliary.gfxTargetParser()} - ${cmake} -DCMAKE_CXX_COMPILER=/opt/rocm/bin/hipcc ${buildTypeArg} ${amdgpuTargets} -DBUILD_TEST=ON -DBUILD_BENCHMARK=ON ../.. + ${cmake} -DCMAKE_CXX_COMPILER=/opt/rocm/bin/hipcc ${buildTypeArg} ${amdgpuTargets} ${asanFlag} -DBUILD_TEST=ON -DBUILD_BENCHMARK=ON ../.. make -j\$(nproc) """ @@ -27,16 +28,26 @@ def runCompileCommand(platform, project, jobName, boolean debug=false, boolean s } -def runTestCommand (platform, project) +def runTestCommand (platform, project, settings) { String sudo = auxiliary.sudo(platform.jenkinsLabel) def testCommand = "ctest --output-on-failure" + def LD_PATH = 'export LD_LIBRARY_PATH=/opt/rocm/lib/' + if (settings.addressSanitizer) + { + LD_PATH = """ + export ASAN_LIB_PATH=\$(/opt/rocm/llvm/bin/clang -print-file-name=libclang_rt. asan-x86_64.so) + export LD_LIBRARY_PATH=\$LD_LIBRARY_PATH:\$(dirname "\${ASAN_LIB_PATH}") + """ + } + def command = """#!/usr/bin/env bash set -x cd ${project.paths.project_build_prefix} cd ${project.testDirectory} - ${sudo} LD_LIBRARY_PATH=/opt/rocm/lib ${testCommand} + ${LD_PATH} + ${sudo} ${testCommand} """ platform.runCommand(this, command) diff --git a/.jenkins/precheckin.groovy b/.jenkins/precheckin.groovy index 573ac33a..251a200b 100644 --- a/.jenkins/precheckin.groovy +++ b/.jenkins/precheckin.groovy @@ -22,19 +22,21 @@ def runCI = def commonGroovy + def settings = [:] + def compileCommand = { platform, project-> commonGroovy = load "${project.paths.project_src_prefix}/.jenkins/common.groovy" - commonGroovy.runCompileCommand(platform, project, jobName) + commonGroovy.runCompileCommand(platform, project, jobName, settings) } def testCommand = { platform, project-> - commonGroovy.runTestCommand(platform, project) + commonGroovy.runTestCommand(platform, project, settings) } def packageCommand = diff --git a/.jenkins/staticanalysis.groovy b/.jenkins/staticanalysis.groovy index 0dbf1bc6..48c47995 100644 --- a/.jenkins/staticanalysis.groovy +++ b/.jenkins/staticanalysis.groovy @@ -26,11 +26,13 @@ def runCI = boolean formatCheck = false boolean staticAnalysis = true + def settings = [debug: false] + def compileCommand = { platform, project-> - runCompileCommand(platform, project, jobName, false) + runCompileCommand(platform, project, jobName, settings) } buildProject(prj , formatCheck, nodes.dockerArray, compileCommand, null, null, staticAnalysis) diff --git a/.jenkins/staticlibrary.groovy b/.jenkins/staticlibrary.groovy index 549913d8..192f13bf 100644 --- a/.jenkins/staticlibrary.groovy +++ b/.jenkins/staticlibrary.groovy @@ -14,6 +14,8 @@ def runCI = def commonGroovy + def settings = [debug: false, sameOrg: true] + boolean formatCheck = false def compileCommand = @@ -21,7 +23,7 @@ def runCI = platform, project-> commonGroovy = load "${project.paths.project_src_prefix}/.jenkins/common.groovy" - commonGroovy.runCompileCommand(platform, project, jobName, false, true) + commonGroovy.runCompileCommand(platform, project, jobName, settings) } @@ -29,7 +31,7 @@ def runCI = { platform, project-> - commonGroovy.runTestCommand(platform, project) + commonGroovy.runTestCommand(platform, project, settings) } def packageCommand = From d2d4f73bcbcbb72eae307ae361629deee35be141 Mon Sep 17 00:00:00 2001 From: thansen-amd Date: Tue, 31 Oct 2023 16:07:15 -0600 Subject: [PATCH 2/6] sameOrg but more bool --- .jenkins/common.groovy | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.jenkins/common.groovy b/.jenkins/common.groovy index c72b001e..6150ac18 100644 --- a/.jenkins/common.groovy +++ b/.jenkins/common.groovy @@ -11,8 +11,9 @@ def runCompileCommand(platform, project, jobName, settings) //Set CI node's gfx arch as target if PR, otherwise use default targets of the library String amdgpuTargets = env.BRANCH_NAME.startsWith('PR-') ? '-DAMDGPU_TARGETS=\$gfx_arch' : '' String asanFlag = settings.addressSanitizer ? '-DBUILD_ADDRESS_SANITIZER=ON' : '' + boolean sameOrg = settings.sameOrg ?: false - def getRocPRIM = auxiliary.getLibrary('rocPRIM', platform.jenkinsLabel, null, settings.sameOrg) + def getRocPRIM = auxiliary.getLibrary('rocPRIM', platform.jenkinsLabel, null, sameOrg) def command = """#!/usr/bin/env bash set -x From a2c75cb7ebe941e8e1303013e58606888c4f45c6 Mon Sep 17 00:00:00 2001 From: thansen-amd Date: Wed, 1 Nov 2023 09:00:26 -0600 Subject: [PATCH 3/6] whitespace --- .jenkins/common.groovy | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.jenkins/common.groovy b/.jenkins/common.groovy index 6150ac18..249f9de0 100644 --- a/.jenkins/common.groovy +++ b/.jenkins/common.groovy @@ -38,7 +38,7 @@ def runTestCommand (platform, project, settings) if (settings.addressSanitizer) { LD_PATH = """ - export ASAN_LIB_PATH=\$(/opt/rocm/llvm/bin/clang -print-file-name=libclang_rt. asan-x86_64.so) + export ASAN_LIB_PATH=\$(/opt/rocm/llvm/bin/clang -print-file-name=libclang_rt.asan-x86_64.so) export LD_LIBRARY_PATH=\$LD_LIBRARY_PATH:\$(dirname "\${ASAN_LIB_PATH}") """ } From 1043339df0c761fcde15efeaa079fcb732163a52 Mon Sep 17 00:00:00 2001 From: Deng Date: Fri, 27 Sep 2024 13:53:37 -0600 Subject: [PATCH 4/6] fixed common.groovy --- .jenkins/common.groovy | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/.jenkins/common.groovy b/.jenkins/common.groovy index 195272fa..f0dee9b3 100644 --- a/.jenkins/common.groovy +++ b/.jenkins/common.groovy @@ -21,11 +21,7 @@ def runCompileCommand(platform, project, jobName, settings) cd ${project.paths.project_build_prefix} mkdir -p build/${buildTypeDir} && cd build/${buildTypeDir} ${auxiliary.gfxTargetParser()} -<<<<<<< HEAD - ${cmake} --toolchain=toolchain-linux.cmake ${buildTypeArg} ${amdgpuTargets} -DBUILD_TEST=ON -DBUILD_BENCHMARK=ON ../.. -======= - ${cmake} -DCMAKE_CXX_COMPILER=/opt/rocm/bin/hipcc ${buildTypeArg} ${amdgpuTargets} ${asanFlag} -DBUILD_TEST=ON -DBUILD_BENCHMARK=ON ../.. ->>>>>>> tehansen/ASAN-CI + ${cmake} --toolchain=toolchain-linux.cmake ${buildTypeArg} ${amdgpuTargets} ${asanFlag} -DBUILD_TEST=ON -DBUILD_BENCHMARK=ON ../.. make -j\$(nproc) """ @@ -37,10 +33,7 @@ def runTestCommand (platform, project, settings) { String sudo = auxiliary.sudo(platform.jenkinsLabel) -<<<<<<< HEAD def testCommand = "ctest --output-on-failure --verbose --timeout 900" -======= - def testCommand = "ctest --output-on-failure" def LD_PATH = 'export LD_LIBRARY_PATH=/opt/rocm/lib/' if (settings.addressSanitizer) { @@ -50,7 +43,6 @@ def runTestCommand (platform, project, settings) """ } ->>>>>>> tehansen/ASAN-CI def command = """#!/usr/bin/env bash set -x cd ${project.paths.project_build_prefix} From 56f52a277c2aa299832f07643a62070ba8cbda54 Mon Sep 17 00:00:00 2001 From: Gary Deng Date: Wed, 9 Oct 2024 13:06:00 -0600 Subject: [PATCH 5/6] add xnack build targets and asan settings --- .jenkins/common.groovy | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/.jenkins/common.groovy b/.jenkins/common.groovy index f0dee9b3..5895b3dc 100644 --- a/.jenkins/common.groovy +++ b/.jenkins/common.groovy @@ -15,6 +15,9 @@ def runCompileCommand(platform, project, jobName, settings) def getRocPRIM = auxiliary.getLibrary('rocPRIM', platform.jenkinsLabel, null, sameOrg) + if (settings.addressSanitizer){ + amdgpuTargets = '-DAMDGPU_TARGETS=\$gfx_arch:xnack' + } def command = """#!/usr/bin/env bash set -x ${getRocPRIM} @@ -35,12 +38,23 @@ def runTestCommand (platform, project, settings) def testCommand = "ctest --output-on-failure --verbose --timeout 900" def LD_PATH = 'export LD_LIBRARY_PATH=/opt/rocm/lib/' + def asanArgs = '' if (settings.addressSanitizer) { LD_PATH = """ export ASAN_LIB_PATH=\$(/opt/rocm/llvm/bin/clang -print-file-name=libclang_rt.asan-x86_64.so) export LD_LIBRARY_PATH=\$LD_LIBRARY_PATH:\$(dirname "\${ASAN_LIB_PATH}") """ + asanArgs = """ + export LD_LIBRARY_PATH=\$LD_LIBRARY_PATH:/opt/rocm/llvm/lib/clang/18/lib/linux + export LD_LIBRARY_PATH=\$LD_LIBRARY_PATH:/opt/rocm/lib/asan + export LD_LIBRARY_PATH=\$LD_LIBRARY_PATH:/opt/rocm/libexec/rocm_smi + export ASAN_SYMBOLIZER_PATH=/opt/rocm/llvm/bin/llvm-symbolizer + export PATH=/opt/rocm/llvm/bin/:\$PATH + export PATH=/opt/rocm/:\$PATH + export HSA_XNACK=1 + export ASAN_OPTIONS=detect_leaks=0 + """ } def command = """#!/usr/bin/env bash @@ -48,6 +62,7 @@ def runTestCommand (platform, project, settings) cd ${project.paths.project_build_prefix} cd ${project.testDirectory} ${LD_PATH} + ${asanArgs} ${sudo} ${testCommand} """ From 3f34d8ffc3021aaaea8fb5eac70ee1d8783f21b4 Mon Sep 17 00:00:00 2001 From: Gary Deng Date: Wed, 9 Oct 2024 13:22:22 -0600 Subject: [PATCH 6/6] set xnack+ fix --- .jenkins/common.groovy | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.jenkins/common.groovy b/.jenkins/common.groovy index 5895b3dc..3f08ee73 100644 --- a/.jenkins/common.groovy +++ b/.jenkins/common.groovy @@ -16,7 +16,7 @@ def runCompileCommand(platform, project, jobName, settings) def getRocPRIM = auxiliary.getLibrary('rocPRIM', platform.jenkinsLabel, null, sameOrg) if (settings.addressSanitizer){ - amdgpuTargets = '-DAMDGPU_TARGETS=\$gfx_arch:xnack' + amdgpuTargets = '-DAMDGPU_TARGETS=\$gfx_arch:xnack+' } def command = """#!/usr/bin/env bash set -x