matszpk

Mesa OpenCL with RX Vega support for OpenSUSE Tumbleweed

Discussion created by matszpk on Mar 19, 2018

Some days ago, I successfully ran the Mesa-OpenCL on my OpenSUSE Tumbleweed. Because, an OpenSUSE Tumbleweed still doesn't provide new LLVM 6.0 needed to support RX VEGA on Mesa-OpenCL, I wrote small tutorial to do it (these tutorial can be used on other Linux distros with missing LLVM 6.0).

 

Before all, you need in your the Linux installation:

* linux kernel 4.15 or later with AMDGPU drivers

* GCC, G++ compilers - to compile sources

* CMake - tool generate Makefiles

* GNU make

* Autoconf, Automake, libtool

* devel packages (includes) for libdrm

* Python (for libclc configure script)

* OpenCL ICD - OpenCL Installable Client Driver

* git - git source control system

 

In this tutorial we install our Mesa-OpenCL to non-system directory (for safety) like '/opt/newgallium'. You should prepare sources before this procedure:

* LLVM 6.0.0 - can be downloaded from http://llvm.org/

* CLANG 6.0.0 - can be downloaded from http://llvm.org/

* libclc (svn revision r319017 or later) - repository http://llvm.org/svn/llvm-project/libclc/trunk

* Mesa (18.0.0-rc1 or later) - can be downloaded from https://www.mesa3d.org/

 

Small note: before all preparation check umask (should 022 to set correct permissions for buildings and installation).

 

Typical procedure to prepare sources:

 

# LLVM with CLANG
tar Jxvf llvm-6.0.0.src.tar.xz
cd llvm-6.0.0.src
cd tools
tar Jxvf cfe-6.0.0.src.tar.xz
mv cfe-6.0.0.src clang
cd ../../ # top source directory

# libclc
svn checkout http://llvm.org/svn/llvm-project/libclc/trunk libclc

# Mesa
tar Jxvf mesa-18.0.0-rc4.tar.xz


 

Now, we configure and build LLVM 6.0.0:

 

cd llvm-6.0.0.src
mkdir build
cd build
cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/opt/newgallium -DLLVM_LIBDIR_SUFFIX=64
make -j4

 

Now, we can install LLVM 6.0 '/opt/newgallium' by using command (should be run as root):

make install

 

Now we should set LD_LIBRARY_PATH to LLVM 6.0.0 binaries:

export LD_LIBRARY_PATH=/opt/newgallium/lib64

Next step is building a libclc library:

cd libclc
./configure --prefix=/opt/newgallium --with-llvm-config=/opt/newgallium/bin/llvm-config
make

 

And libclc installation (should be run as root):

make install

 

Next step is Mesa3D building:

cd mesa-18.0.0-rc4
NOCONFIGURE=1 ./autogen.sh  # run autogen without configuring
mkdir build
cd build
export PKG_CONFIG_PATH=/opt/newgallium/lib64/pkgconfig:/opt/newgallium/share/pkgconfig
../configure --prefix=/opt/newgallium --enable-opencl --enable-opencl-icd --enable-gbm --with-llvm-prefix=/opt/newgallium \
      --with-platforms=drm,x11 --with-dri-drivers=swrast,radeon \
      --with-gallium-drivers=svga,r600,radeonsi --enable-glx-tls
make -j4

 

And finally Mesa3D installation (as root):

make install

 

After all building and installation you should add to '/etc/OpenCL/vendors' directory your ICD (run as root):

echo /opt/newgallium/lib64/libMesaOpenCL.so > /etc/OpenCL/vendors/newgallium.icd

 

Sometimes, you need to set LD_LIBRARY_PATH to installation before testing a Mesa-OpenCL

export LD_LIBRARY_PATH=/opt/newgallium/lib64

 

Now, you can try installation by running command clinfo or other an OpenCL program.

Outcomes