opencl-example: didn't compile (run) with latest LLVM git (for some days)

Worked OK with older version (for me latest was #6c9f36933c5) but with your 'clover: Fix build after LLVM r313390' reverted.

Now I get this during compilation tries:

/opt/opencl-example> make
gcc -o hello_world hello_world.o cl_simple.o cl_util.o -L/usr/local/lib -lOpenCL
/usr/local/lib64/libOpenCL.so: undefined reference to `llvm::LLVMContext::getDiagnosticHandler() const@LLVM_6.0'
/usr/local/lib64/libOpenCL.so: undefined reference to `llvm::isKnownNonNull(llvm::Value const*)@LLVM_6.0'
/usr/local/lib64/libOpenCL.so: undefined reference to `llvm::DIBuilder::createCompileUnit(unsigned int, llvm::DIFile*, llvm::StringRef, bool, llvm::StringRef, unsigned int, llvm::StringRef, llvm::DICompileUnit::DebugEmissionKind, unsigned long, bool, bool)@LLVM_6.0'
/usr/local/lib64/libOpenCL.so: undefined reference to `llvm::LLVMContext::setDiagnosticHandler(void (*)(llvm::DiagnosticInfo const&, void*), void*, bool)@LLVM_6.0'
collect2: error: ld returned 1 exit status
make: *** [Makefile:10: hello_world] Fehler 1

Greetings,
Dieter

For reference (running '/opt/amdgpu-pro/bin/clinfo'):

/opt/opencl-example> /opt/amdgpu-pro/bin/clinfo
/opt/amdgpu-pro/bin/clinfo: /usr/local/lib64/libOpenCL.so.1: no version information available (required by /opt/amdgpu-pro/bin/clinfo)
/opt/amdgpu-pro/bin/clinfo: /usr/local/lib64/libOpenCL.so.1: no version information available (required by /opt/amdgpu-pro/bin/clinfo)
ATTENTION: default value of option mesa_glthread overridden by environment.
ATTENTION: default value of option radeonsi_assume_no_z_fights overridden by environment.
ATTENTION: default value of option radeonsi_commutative_blend_add overridden by environment.
ATTENTION: default value of option mesa_glthread overridden by environment.
Number of platforms: 1
   Platform Profile: FULL_PROFILE
   Platform Version: OpenCL 1.1 Mesa 17.3.0-devel (git-94fef19509)
   Platform Name: Clover
   Platform Vendor: Mesa
   Platform Extensions: cl_khr_icd

   Platform Name: Clover
Number of devices: 1
   Device Type: CL_DEVICE_TYPE_GPU
   Vendor ID: 1002h
   Max compute units: 36
   Max work items dimensions: 3
     Max work items[0]: 256
     Max work items[1]: 256
     Max work items[2]: 256
   Max work group size: 256
   Preferred vector width char: 16
   Preferred vector width short: 8
   Preferred vector width int: 4
   Preferred vector width long: 2
   Preferred vector width float: 4
   Preferred vector width double: 2
   Native vector width char: 16
   Native vector width short: 8
   Native vector width int: 4
   Native vector width long: 2
   Native vector width float: 4
   Native vector width double: 2
   Max clock frequency: 1411Mhz
   Address bits: 64
   Max memory allocation: 6010904166
   Image support: No
   Max size of kernel argument: 1024
   Alignment (bits) of base address: 1024
   Minimum alignment (bytes) for any datatype: 128
   Single precision floating point capability
     Denorms: No
     Quiet NaNs: Yes
     Round to nearest even: Yes
     Round to zero: No
     Round to +ve and infinity: No
     IEEE754-2008 fused multiply-add: No
   Cache type: None
   Cache line size: 0
   Cache size: 0
   Global memory size: 8587005952
   Constant buffer size: 2147483647
   Max number of constant args: 16
   Local memory type: Scratchpad
   Local memory size: 32768
/opt/amdgpu-pro/bin/clinfo: relocation error: /usr/local/lib64/libOpenCL.so.1: symbol _ZN4llvm11LLVMContext20setDiagnosticHandlerEPFvRKNS_14DiagnosticInfoEPvES4_b, version LLVM_6.0 not defined in file libLLVM-6.0svn.so with link time reference

adding mesa-dev. This is not really related to libclc.

Worked OK with older version (for me latest was #6c9f36933c5) but with
your 'clover: Fix build after LLVM r313390' reverted.

Now I get this during compilation tries:

/opt/opencl-example> make
gcc -o hello_world hello_world.o cl_simple.o cl_util.o -L/usr/local/lib
-lOpenCL
/usr/local/lib64/libOpenCL.so: undefined reference to
`llvm::LLVMContext::getDiagnosticHandler() const@LLVM_6.0'
/usr/local/lib64/libOpenCL.so: undefined reference to
`llvm::isKnownNonNull(llvm::Value const*)@LLVM_6.0'
/usr/local/lib64/libOpenCL.so: undefined reference to
`llvm::DIBuilder::createCompileUnit(unsigned int, llvm::DIFile*,
llvm::StringRef, bool, llvm::StringRef, unsigned int, llvm::StringRef,
llvm::DICompileUnit::DebugEmissionKind, unsigned long, bool,
bool)@LLVM_6.0'

This is odd, this function is pretty old.

/usr/local/lib64/libOpenCL.so: undefined reference to
`llvm::LLVMContext::setDiagnosticHandler(void (*)(llvm::DiagnosticInfo
const&, void*), void*, bool)@LLVM_6.0'
collect2: error: ld returned 1 exit status
make: *** [Makefile:10: hello_world] Fehler 1

Greetings,
Dieter

For reference (running '/opt/amdgpu-pro/bin/clinfo'):

/opt/opencl-example> /opt/amdgpu-pro/bin/clinfo
/opt/amdgpu-pro/bin/clinfo: /usr/local/lib64/libOpenCL.so.1: no version
information available (required by /opt/amdgpu-pro/bin/clinfo)
/opt/amdgpu-pro/bin/clinfo: /usr/local/lib64/libOpenCL.so.1: no version
information available (required by /opt/amdgpu-pro/bin/clinfo)
ATTENTION: default value of option mesa_glthread overridden by
environment.
ATTENTION: default value of option radeonsi_assume_no_z_fights
overridden by environment.
ATTENTION: default value of option radeonsi_commutative_blend_add
overridden by environment.
ATTENTION: default value of option mesa_glthread overridden by
environment.
Number of platforms: 1
   Platform Profile: FULL_PROFILE
   Platform Version: OpenCL 1.1 Mesa
17.3.0-devel (git-94fef19509)
   Platform Name: Clover
   Platform Vendor: Mesa
   Platform Extensions: cl_khr_icd

   Platform Name: Clover
Number of devices: 1
   Device Type: CL_DEVICE_TYPE_GPU
   Vendor ID: 1002h
   Max compute units: 36
   Max work items dimensions: 3
     Max work items[0]: 256
     Max work items[1]: 256
     Max work items[2]: 256
   Max work group size: 256
   Preferred vector width char: 16
   Preferred vector width short: 8
   Preferred vector width int: 4
   Preferred vector width long: 2
   Preferred vector width float: 4
   Preferred vector width double: 2
   Native vector width char: 16
   Native vector width short: 8
   Native vector width int: 4
   Native vector width long: 2
   Native vector width float: 4
   Native vector width double: 2
   Max clock frequency: 1411Mhz
   Address bits: 64
   Max memory allocation: 6010904166
   Image support: No
   Max size of kernel argument: 1024
   Alignment (bits) of base address: 1024
   Minimum alignment (bytes) for any datatype: 128
   Single precision floating point capability
     Denorms: No
     Quiet NaNs: Yes
     Round to nearest even: Yes
     Round to zero: No
     Round to +ve and infinity: No
     IEEE754-2008 fused multiply-add: No
   Cache type: None
   Cache line size: 0
   Cache size: 0
   Global memory size: 8587005952
   Constant buffer size: 2147483647
   Max number of constant args: 16
   Local memory type: Scratchpad
   Local memory size: 32768
/opt/amdgpu-pro/bin/clinfo: relocation error:
/usr/local/lib64/libOpenCL.so.1: symbol
_ZN4llvm11LLVMContext20setDiagnosticHandlerEPFvRKNS_14DiagnosticInfoEPvES4_b,
version LLVM_6.0 not defined in file libLLVM-6.0svn.so with link time
reference

this looks like libLLVM-6.0svn.so is an older version than what you
built clover against. Did you rebuild and reinstall llvm after r313390?

Jan

Hello Jan, hello Emil,

I've found it. It isn't a LLVM but a Mesa clover build problem. After Jan pointed me to build clover with

--enable-opencl_icd switch in mesa to create an ICD driver
(libMesaOpenCL.so) and the corresponding vendors file (installed as /etc/OpenCL/vendors/mesa.icd)

libOpenCL.so wouldn't be build the right way.

With --enable-opencl_icd a 'new' libMesaOpenCL.so.1.0.0 would be build in mesa/lib64/gallium/ and a 'linked' libOpenCL.so.1.0.0 version. But the later is broken (missing symbols).

A 'rebuild' without '--enable-opencl_icd' isn't enough to circumvent this mess. I had to 'make distclean' plus remove all libMesaOpenCL* references by hand to build a new clean _working_ libOpenCL* lib.

Now,
'opencl-example/run_tests.sh' and '/opt/amdgpu-pro/bin/clinfo' works like a charm, again.
The later show nice new int64 support.

To-do
Find the wrong mesa --enable-opencl_icd build option commands/config which result in bad libMesaOpenCL/libOpenCL libraries.

Greetings,
Dieter