Skip to content

Instantly share code, notes, and snippets.

@nottux
Last active October 19, 2023 20:23
Show Gist options
  • Save nottux/79daa2edca131c1525a136b650cdbe0a to your computer and use it in GitHub Desktop.
Save nottux/79daa2edca131c1525a136b650cdbe0a to your computer and use it in GitHub Desktop.
bash implementation of opencl-amd AUR package, Install opencl amdgpu amdgpu-pro opencl only. Supports ubuntu and others with standard prefix
#!/bin/bash
# DO NOT run the line 167 standalone. It will remove the necessary files besides the junk!
if echo $@|grep -q "\-\-help\|\-help\|\-h\|help\|\-\-h\|\-\-no\-deb\|\-\-no\-install\|\-\-no\-cleaning\|\-\-assume\-debian"
then :
else echo wrong entry\(ies\) !
help=yes
fi
if echo $@|grep -q "\-\-help\|\-help\|\-h\|help\|\-\-h" || [ "$help" = yes ]
then echo "--no-deb : don't build the debian package on debian based systems
--no-install : don't install anything
--no-cleaning : skip cleaning on direct installs
--assume-debian : assumes system to be debian based
For example to build .deb package on non-debian systems use --no-install and --assume-debian together (still requires \"dpkg\" command)"
exit
fi
prefix='amdgpu-pro-'
postfix='-ubuntu-20.04'
major='21.30'
minor='1290604'
amdver='2.4.106'
shared="opt/amdgpu-pro/lib/x86_64-linux-gnu"
shared2="opt/amdgpu/lib/x86_64-linux-gnu"
tarname="${prefix}${major}-${minor}${postfix}"
cstdir=opencl-amd_aur_ubuntu_dir
srcdir="$(pwd)/${cstdir}"
pkgdir="${srcdir}/pkgdir"
eval $(grep ID /etc/os-release)
if echo $@|grep -q \\-\\-assume\\-debian
then ID_LIKE=debian
fi
if ls -d "${srcdir}"&> /dev/null
then echo Warning: existing \""${srcdir}"\" found, deleting it in five seconds!
sleep 5
if rm -rf "${srcdir}"
then :
else echo Warning: couldn\'t removed the folder, will try with sudo again!
sudo rm -rf "${srcdir}"
fi
fi
mkdir -p "${pkgdir}"
cd "${srcdir}"
echo "Downloading archive and extracting"
if wget --referer https://www.amd.com/en/support/kb/release-notes/rn-amdgpu-unified-linux-21-30 -N -O - "https://drivers.amd.com/drivers/linux/$tarname.tar.xz"|tar -xJ
then echo "Extraction complete, creating the files"
else echo "Extraction or downloading failed, please ping me at the gist page. You can also try running the script with a random argument"
exit
fi
mkdir -p "${srcdir}/opencl"
cd "${srcdir}/opencl"
# roc*
ar x "${srcdir}/$tarname/opencl-rocr-amdgpu-pro_${major}-${minor}_amd64.deb"
tar xJf data.tar.xz
ar x "${srcdir}/$tarname/rocm-device-libs-amdgpu-pro_1.0.0-${minor}_amd64.deb"
tar xJf data.tar.xz
ar x "${srcdir}/$tarname/hsa-runtime-rocr-amdgpu_1.3.0-${minor}_amd64.deb"
tar xJf data.tar.xz
ar x "${srcdir}/$tarname/hsakmt-roct-amdgpu_1.0.9-${minor}_amd64.deb"
tar xJf data.tar.xz
ar x "${srcdir}/$tarname/hip-rocr-amdgpu-pro_${major}-${minor}_amd64.deb"
tar xJf data.tar.xz
# comgr
ar x "${srcdir}/$tarname/comgr-amdgpu-pro_2.1.0-${minor}_amd64.deb"
tar xJf data.tar.xz
# orca
ar x "${srcdir}/$tarname/opencl-orca-amdgpu-pro-icd_${major}-${minor}_amd64.deb"
tar xJf data.tar.xz
cd ${shared}
sed -i "s|libdrm_amdgpu|libdrm_amdgpo|g" libamdocl-orca64.so
mkdir -p "${srcdir}/libdrm"
cd "${srcdir}/libdrm"
ar x "${srcdir}/$tarname/libdrm-amdgpu-amdgpu1_${amdver}-${minor}_amd64.deb"
tar xJf data.tar.xz
cd ${shared2}
rm "libdrm_amdgpu.so.1"
mv "libdrm_amdgpu.so.1.0.0" "libdrm_amdgpo.so.1.0.0"
ln -s "libdrm_amdgpo.so.1.0.0" "libdrm_amdgpo.so.1"
mv "${srcdir}/opencl/etc" "${pkgdir}/"
mkdir -p ${pkgdir}/usr/lib
# roc*
mv "${srcdir}/opencl/${shared}/libamdocl64.so" "${pkgdir}/usr/lib/"
mv "${srcdir}/opencl/${shared}/libamd_comgr.so.2.1.0" "${pkgdir}/usr/lib"
mv "${srcdir}/opencl/${shared}/libamdhip64.so.4.2.21303-" "${pkgdir}/usr/lib"
mv "${srcdir}/opencl/${shared}/libamdhip64.so" "${pkgdir}/usr/lib"
mv "${srcdir}/opencl/${shared}/libamdhip64.so.4" "${pkgdir}/usr/lib"
mv "${srcdir}/opencl/${shared}/libhsa-runtime64.so.1.3.0" "${pkgdir}/usr/lib"
mv "${srcdir}/opencl/${shared}/libhsa-runtime64.so.1" "${pkgdir}/usr/lib"
mv "${srcdir}/opencl/${shared2}/libhsakmt.so.1.0.6" "${pkgdir}/usr/lib"
mv "${srcdir}/opencl/${shared2}/libhsakmt.so.1" "${pkgdir}/usr/lib"
# comgr
cd ${srcdir}/opencl/${shared}
ln -s "libamd_comgr.so.2.0.0" "libamd_comgr.so"
mv "${srcdir}/opencl/${shared}/libamd_comgr.so" "${pkgdir}/usr/lib/"
mv "${srcdir}/opencl/${shared}/libamd_comgr.so.2" "${pkgdir}/usr/lib/libamd_comgr.so"
# orca
mv "${srcdir}/opencl/${shared}/libamdocl-orca64.so" "${pkgdir}/usr/lib/"
mv "${srcdir}/libdrm/${shared2}/libdrm_amdgpo.so.1.0.0" "${pkgdir}/usr/lib/"
mv "${srcdir}/libdrm/${shared2}/libdrm_amdgpo.so.1" "${pkgdir}/usr/lib/"
mkdir -p "${pkgdir}/opt/amdgpu/share/libdrm"
cd "${pkgdir}/opt/amdgpu/share/libdrm"
ln -s /usr/share/libdrm/amdgpu.ids amdgpu.ids
mv "${srcdir}/opencl/opt/amdgpu-pro" "${pkgdir}/opt"
rm -r "${srcdir}/opencl"
rm -r "${srcdir}/libdrm"
cd "${pkgdir}"
if type md5sum&> /dev/null
then if echo -e 3dba553d1fcfeddaa252de13860d7531 ./opt/amdgpu-pro/share/amd_comgr/README.md\\n4000cbaa3eecf22be59c8cea7229ca6a ./opt/amdgpu-pro/share/amd_comgr/NOTICES.txt\\n7754f2a8be21dce24fec9d1e7972a68b ./opt/amdgpu-pro/share/amd_comgr/LICENSE.txt\\ne91050c15b7262e21d55077274d1a0ba ./opt/amdgpu-pro/bin/roc-obj-ls\\n467574e9dbf38f603352d6e70d7ae819 ./opt/amdgpu-pro/bin/roc-obj-extract\\n9eea3d2de3a0335f014f9a3f83e4212c ./opt/amdgpu-pro/bin/hipvars.pm\\n77a2b371ee24f2309bfa8e5dfa06a0ab ./opt/amdgpu-pro/bin/hipify-perl\\n35dec57990df0a33afc41c9f67cbcdb0 ./opt/amdgpu-pro/bin/hipify-cmakefile\\n7def981db985f53f8fc8263a3b3f32b1 ./opt/amdgpu-pro/bin/hipexamine.sh\\ne2710bcee657cf61e5d791b66c0aff6f ./opt/amdgpu-pro/bin/hipexamine-perl.sh\\n0ee195639b292e6c043bfca0ad716585 ./opt/amdgpu-pro/bin/hipdemangleatp\\n144dbd8b9a80c360076bf87ed7c8455b ./opt/amdgpu-pro/bin/hipconvertinplace.sh\\n9b023318378593cd5f7ea5d59f625883 ./opt/amdgpu-pro/bin/hipconvertinplace-perl.sh\\nfcabd42ea6fcede0ff1cd3ae545f7f00 ./opt/amdgpu-pro/bin/hipconfig\\n15d7380c3b56e5a576f425d133b5e416 ./opt/amdgpu-pro/bin/hipcc_cmake_linker_helper\\n0e13a3d69fd5c103427f125491948e43 ./opt/amdgpu-pro/bin/hipcc\\nd9e5aadea0e923f2d292f616d6529059 ./opt/amdgpu-pro/bin/hip_embed_pch.sh\\n99274d27be5d5925c5569c4691395f5e ./opt/amdgpu-pro/bin/finduncodep.sh\\n474244f0c760037fef8f9141c5f1739b ./opt/amdgpu-pro/bin/findcode.sh\\nf0dc40e0af3ec42dd5fb393200042a90 ./opt/amdgpu-pro/bin/.hipVersion\\n1c98781ee06133b16e40d505ac9b49b2 ./opt/amdgpu-pro/amdgcn/bitcode/opencl.bc\\n0d9e53c87d76e76d3a6cff2ce3a4a8bb ./opt/amdgpu-pro/amdgcn/bitcode/ocml.bc\\ndd2f6ff3cb26c1ac605d685667057cfd ./opt/amdgpu-pro/amdgcn/bitcode/oclc_wavefrontsize64_on.bc\\n0277e77cafad2699fc5a5e0bbf709be2 ./opt/amdgpu-pro/amdgcn/bitcode/oclc_wavefrontsize64_off.bc\\n9270dab6d99bb3f92f3cabfa7733b80c ./opt/amdgpu-pro/amdgcn/bitcode/oclc_unsafe_math_on.bc\\n946949d7f013c2c1fe2934adf14cc3d5 ./opt/amdgpu-pro/amdgcn/bitcode/oclc_unsafe_math_off.bc\\n24578350ab27c1ac528ad6636b22a437 ./opt/amdgpu-pro/amdgcn/bitcode/oclc_isa_version_90c.bc\\n44a05937fcc3792b7f6831e56ccf00ba ./opt/amdgpu-pro/amdgcn/bitcode/oclc_isa_version_90a.bc\\nab77d8f122f8fd3a745c8b0b92388a23 ./opt/amdgpu-pro/amdgcn/bitcode/oclc_isa_version_909.bc\\ne93b243cbe488ab6504ba1a5edec2267 ./opt/amdgpu-pro/amdgcn/bitcode/oclc_isa_version_908.bc\\n48400385ca8d369d8ea9c745b5b7f694 ./opt/amdgpu-pro/amdgcn/bitcode/oclc_isa_version_906.bc\\n95613b7e4d759c9f3b725e3a5d5d9465 ./opt/amdgpu-pro/amdgcn/bitcode/oclc_isa_version_904.bc\\n53e38d463e83c4922b1a214c1274273f ./opt/amdgpu-pro/amdgcn/bitcode/oclc_isa_version_902.bc\\n7f716b3a1784f98cf29c1cef444247f7 ./opt/amdgpu-pro/amdgcn/bitcode/oclc_isa_version_900.bc\\nad7bea62601463242dd30e30f2f0e5d5 ./opt/amdgpu-pro/amdgcn/bitcode/oclc_isa_version_810.bc\\n7bb5bb3bc16dcb0824f0feefc0f6e4f2 ./opt/amdgpu-pro/amdgcn/bitcode/oclc_isa_version_805.bc\\n72f013270fb0de6abf944fe3a35f0b67 ./opt/amdgpu-pro/amdgcn/bitcode/oclc_isa_version_803.bc\\n405c4b17e94c0b97c43a24a6f168ea6c ./opt/amdgpu-pro/amdgcn/bitcode/oclc_isa_version_802.bc\\nccacbfe4355e685fb4386055a657269f ./opt/amdgpu-pro/amdgcn/bitcode/oclc_isa_version_801.bc\\n31af1ab2966684167f9dd131da195017 ./opt/amdgpu-pro/amdgcn/bitcode/oclc_isa_version_705.bc\\n920a745d5a54d73df7b8190de7572a5d ./opt/amdgpu-pro/amdgcn/bitcode/oclc_isa_version_704.bc\\n2067ab053f1b72479c436904a6fceab5 ./opt/amdgpu-pro/amdgcn/bitcode/oclc_isa_version_703.bc\\n0fa783e0e74cf3c3ef7c1c7939e2f4f9 ./opt/amdgpu-pro/amdgcn/bitcode/oclc_isa_version_702.bc\\nd6b8bab0a83e2a37f469f7e9720a6bc3 ./opt/amdgpu-pro/amdgcn/bitcode/oclc_isa_version_701.bc\\ncfc51b7c9b841b39ce7fef9698715d1b ./opt/amdgpu-pro/amdgcn/bitcode/oclc_isa_version_700.bc\\nbc916ec6362ffe7fbb4a4453f9707bb9 ./opt/amdgpu-pro/amdgcn/bitcode/oclc_isa_version_602.bc\\nb144a23933525a3a9cb5809e0472ffd6 ./opt/amdgpu-pro/amdgcn/bitcode/oclc_isa_version_601.bc\\ne83d726ae08df78f09c2727e9d3ecf69 ./opt/amdgpu-pro/amdgcn/bitcode/oclc_isa_version_600.bc\\n5043c1c11ad9727cec4b517f04720224 ./opt/amdgpu-pro/amdgcn/bitcode/oclc_isa_version_1034.bc\\nc9a849b4883bfd98970d2e43e8521191 ./opt/amdgpu-pro/amdgcn/bitcode/oclc_isa_version_1033.bc\\n77a08437e4dfe3b1b58ae59a8b68868d ./opt/amdgpu-pro/amdgcn/bitcode/oclc_isa_version_1032.bc\\n7cbaeb8e514acffd8c987b8998bd68ca ./opt/amdgpu-pro/amdgcn/bitcode/oclc_isa_version_1031.bc\\n3db0e8d47a7d694a8c9437a681515a11 ./opt/amdgpu-pro/amdgcn/bitcode/oclc_isa_version_1030.bc\\na3aed269cfbc415d22548d803c966663 ./opt/amdgpu-pro/amdgcn/bitcode/oclc_isa_version_1012.bc\\nb88b229cdad0f7e42a2a3505dd5a2c11 ./opt/amdgpu-pro/amdgcn/bitcode/oclc_isa_version_1011.bc\\n29592e6944367f4b5d7c5a774497cb37 ./opt/amdgpu-pro/amdgcn/bitcode/oclc_isa_version_1010.bc\\n39b6324e34f42b08f1b7cac0fa3a562a ./opt/amdgpu-pro/amdgcn/bitcode/oclc_finite_only_on.bc\\ne8849c60abdfafb40b4e69c0a45881ef ./opt/amdgpu-pro/amdgcn/bitcode/oclc_finite_only_off.bc\\n734d59729fc961ef86ec28b8a07a3753 ./opt/amdgpu-pro/amdgcn/bitcode/oclc_daz_opt_on.bc\\n201f43462f251847a4f24e45f13d873c ./opt/amdgpu-pro/amdgcn/bitcode/oclc_daz_opt_off.bc\\n4d7b29e1b8c0dce0c985f309b299f41d ./opt/amdgpu-pro/amdgcn/bitcode/oclc_correctly_rounded_sqrt_on.bc\\ne659a0ad6cd96708d307ebec73dbc1c4 ./opt/amdgpu-pro/amdgcn/bitcode/oclc_correctly_rounded_sqrt_off.bc\\n3a9ebf5f408a0260ee4c904afaa0a8cb ./opt/amdgpu-pro/amdgcn/bitcode/ockl.bc\\nc28dc2a95d9d805a39c29bbe157261af ./opt/amdgpu-pro/amdgcn/bitcode/hip.bc\\ndfe3cce71d8dd70d2c63151247f367ca ./opt/amdgpu-pro/amdgcn/bitcode/hc.bc\\n218cce187f7dd9f28fbeb110e11c57fe ./opt/amdgpu-pro/amdgcn/bitcode/asanrtl.bc\\n24098ed774d6803942b48650c95ac626 ./opt/amdgpu-pro/lib/.hipInfo\\nd0d6ea1297113dfb839ae456ecdadec7 ./opt/amdgpu-pro/lib/cmake/AMDDeviceLibs/AMDDeviceLibsConfig.cmake\\n46bcce3d87ed51f0b3fbb8a09e4b9d4d ./opt/amdgpu-pro/lib/x86_64-linux-gnu/libhiprtc-builtins.so.4.2\\n743746e682860ad9cbfe232b79811fb0 ./opt/amdgpu-pro/lib/x86_64-linux-gnu/libcltrace.so\\nbb234ca12828d9f96a03c9460d116596 ./usr/lib/libdrm_amdgpo.so.1.0.0\\n265a629dceb9d5e4d1057b35091f18de ./usr/lib/libamdocl-orca64.so\\n8f6f6e4277c4275acadbdf15ea190ec9 ./usr/lib/libhsakmt.so.1.0.6\\n63c804c9bbce52f7ece516dc7cf589ef ./usr/lib/libhsa-runtime64.so.1.3.0\\n3249872a8ad0cf51fd75bcc7e4bbd74f ./usr/lib/libamdhip64.so.4.2.21303-\\nad96187089aba4988723e3f1e67673df ./usr/lib/libamd_comgr.so.2.1.0\\nc69178d7ac3e989939ccffdbb8a3f87e ./usr/lib/libamdocl64.so\\nd4c720fa080a71b8c960582d9a4857d7 ./etc/OpenCL/vendors/amdocl-orca64.icd\\n45a4b6c5182d693554c287765b369dfe ./etc/OpenCL/vendors/amdocl64.icd|md5sum -c
then echo All files are ok!
else echo File corruption found! Terminating!
exit
fi
else echo Warning: You don\'t have \"md5sum\" installed, skipping sum checking!
fi
mkdir DEBIAN
echo -e \#\!/bin/bash\\nif [ \$\(whoami\) = root ]\\nthen :\\nelse user=\$USER\\nfi\\n\\nn=0\\nfor i in video render\\ndo if getent group \$i \&\> /dev/null\\nthen if getent group \$i\|grep -q \$user\$SUDO_USER\\nthen :\\nelse echo Warning: \$user\$SUDO_USER isn\\\\\'t in the \\\\\"\$i\\\\\" group, will add the user\\ng[\$n]=\$i\\nfi\\nelse echo Warning: group \\\\\"\$i\\\\\" does not exist\\nc[\$n]=\$i\\nfi\\nn=\$\(\(\$n+1\)\)\\ndone\\n\\nif [ \"\${#c[@]}\" -eq 0 ]\\nthen :\\nelse if echo \"\${c[*]}\"\|grep -q video\\nthen echo ERROR: important group \\\\\"video\\\\\" is missing, without that group opencl won\\\\\'t work\!\\nelse echo Warning: non-important group is missing, you can ignore the warning messages\\nfi\\nfi\\n\\nif [ \"\${#g[@]}\" -eq 0 ]\\nthen :\\nelse echo Warning: adding \$user\$SUDO_USER to \\\\\"\$\(echo \${g[*]}\|tr \' \' ,\)\\\\\" group\\\\\(s\\\\\) in five seconds\!\\nsleep 5\\nsudo usermod -a -G \$\(echo \${g[*]}\|tr \' \' ,\) \$user\$SUDO_USER \&\& echo Warning: you\\\\\'ve been added to group\\\\\(s\\\\\), you should login-logback for installation to complete\! \|\| echo ERROR: you\\\\\'ve failed to enter group\\\\\(s\\\\\)\!\\nfi\\n\\necho Warning: remeber to remove \\\\\'mesa-opencl-icd\\\\\' \\\\\!, otherwise you will have each device in both opencl 1.1 and 1.2 modes as seperate devices . clpeak for example will report each gpu twice \\\\\! This is problematic for BOINC > DEBIAN/postinst
if [ "$ID_LIKE" = debian ]
then if echo $@|grep -q \\-\\-no\\-deb
then :
else echo -e Package: amdgpu-pro-opencl\\nVersion: $major.$minor\\nSection: Libraries \(universe\)\\nPriority: extra\\nMaintainer: proje.pdf@outlook.com\\nDescription: implementation of opencl-amd AUR package: https://aur.archlinux.org/packages/opencl-amd\\n script hosted on: https://gist.github.com/tuxutku/79daa2edca131c1525a136b650cdbe0a\\nWebsite: https://gist.github.com/tuxutku/79daa2edca131c1525a136b650cdbe0a\\nInstalled-Size: $(du -s .|cut -f -1)\\nArchitecture: amd64 > DEBIAN/control
find . -type f ! -regex '.*.hg.*' ! -regex '.*?debian-binary.*' ! -regex '.*?DEBIAN.*' -printf '%P ' | xargs md5sum > DEBIAN/md5sums
chmod -R 755 .
dpkg -b . ../$tarname-opencl.deb
if echo $@|grep -q \\-\\-no\\-install
then :
else echo 'installing package'
sudo apt install ../$tarname-opencl.deb
exit
fi
fi
fi
if echo $@|grep -q \\-\\-no\\-install
then exit
fi
echo "will be doing direct installation. Enter sudo password when needed"
sleep 5
if echo $@|grep -q \\-\\-no\\-cleaning
then echo skipping cleaning
else echo
sudo rm -vf /opt/amdgpu-pro/bin/ca /opt/amdgpu-pro/bin/extractkernel /opt/amdgpu-pro/bin/lpl /opt/amdgpu/share/libdrm/amdgpu.ids /usr/lib/libamd_comgr.so /usr/lib/libamd_comgr.so.1.7.0 /usr/lib/libamd_comgr.so.1.9.0 /usr/lib/libamd_comgr.so.2.0.0 /usr/lib/libamdhip64.so /usr/lib/libamdhip64.so.1 /usr/lib/libamdhip64.so.1.5.19245 /usr/lib/libamdhip64.so.4 /usr/lib/libamdhip64.so.4.0.21115- /usr/lib/libamdhip64.so.4.0.21154- /usr/lib/libamdocl12cl64.so /usr/lib/libdrm_amdgpo.so.1 /usr/lib/libhsakmt.so.1 /usr/lib/libhsa-runtime64.so.1 /usr/lib/libhsa-runtime64.so.1.2.0
# DO NOT run the line above standalone. It will remove the necessary files besides the junk!
fi
sudo cp -rv * /
bash DEBIAN/postinst
@oneblackcrayon
Copy link

Hello what do I have to do for remove mesa-opencl-icd please?
Beginner/Novice to Linux systems.
Great script @tuxutku!
Got it to install.

@OdinVex
Copy link

OdinVex commented Aug 25, 2021

Hello what do I have to do for remove mesa-opencl-icd please?
Beginner/Novice to Linux systems.
Great script @tuxutku!
Got it to install.

Ubuntu(-Like): sudo apt remove mesa-opencl-icd
Other Distros: Google "[Distro] remove package" Ex: Manjaro remove package

@oneblackcrayon
Copy link

Thank you @OdinVex

Hello what do I have to do for remove mesa-opencl-icd please?
Beginner/Novice to Linux systems.
Great script @tuxutku!
Got it to install.

Ubuntu(-Like): sudo apt remove mesa-opencl-icd
Other Distros: Google "[Distro] remove package" Ex: Manjaro remove package

@nottux
Copy link
Author

nottux commented Oct 12, 2021

Updated the script. Added all recorded unused files from previous scripts to the remove list. However due to mistakes I made generating the list, it might not be complete

@nottux
Copy link
Author

nottux commented Oct 16, 2021

Updated the script so that now it generates .deb package then installs that package.
here is a pre-built one: https://files.catbox.moe/02i5tf.deb
For other distros it still does direct install

--no-deb        : don't build the debian package on debian based systems
--no-install    : don't install anything
--no-cleaning   : skip cleaning on direct installs
--assume-debian : assumes system to be debian based
For example to build .deb package on non-debian systems use --no-install and --assume-debian together (still requires "dpkg" command)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment