<div dir="ltr">Today, to run an openmp application, one compiles it:<div>> clang -fopenmp -fopenmp-targets=amdgcn-amd-amdhsa hello.c -o a.out</div><div>execute,</div><div>> ./a.out</div><div>error while loading shared libraries: libomp.so: cannot open shared object file: No such file or directory<br></div><div><br></div><div>D101960, and this email, starts a discussion to remove that property of our toolchain. Today, the next steps go something like:</div><div><br></div><div>> find $HOME -type f -iname libomp.so</div><div>and gets, on the machine I'm currently using,</div><div>$HOME/llvm-install/lib/libomp.so<br>$HOME/llvm-install-dbg/lib/libomp.so<br>$HOME/llvm-build-dbg/llvm/runtimes/runtimes-bins/openmp/runtime/src/libomp.so<br>$HOME/llvm-build/llvm/runtimes/runtimes-bins/openmp/runtime/src/libomp.so<br>$HOME/.emacs.d/lib/libomp.so<br>$HOME/.emacs.d/llvm/openmp/runtime/exports/lin_32e.ompt.optional/lib/libomp.so<br>$HOME/aomp/build/openmp/runtime/src/libomp.so<br>$HOME/aomp/build/openmp_debug/runtime/src/libomp.so<br>$HOME/rocm/aomp_13.0-3/lib/libomp.so<br>$HOME/rocm/aomp_13.0-3/lib-debug/libomp.so<br>$HOME/ROCm-llvm-build/llvm/lib/libomp.so<br></div><div><br></div><div>Brief confusion while I convince myself that I wanted the first one in that list,</div><div>> export LD_LIBRARY_PATH=$HOME/llvm-install/lib/</div><div>> ./a.out</div><div>> success</div><div><br></div><div>Similarly, if one takes a failing openmp test, it has a RUN line that can be copied into a shell, e.g.<br></div><div><br></div><div>$HOME/llvm-build/llvm/./bin/clang++ -fopenmp  -fno-experimental-isel   -I $HOME/llvm-project/openmp/libomptarget/test -I $HOME/llvm-build/llvm/runtimes/runtimes-bins/openmp/runtime/src -L $HOME/llvm-build/llvm/runtimes/runtimes-bins/openmp/libomptarget -L $HOME/llvm-build/llvm/runtimes/runtimes-bins/openmp/runtime/src  -fopenmp-targets=amdgcn-amd-amdhsa $HOME/llvm-project/openmp/libomptarget/test/offloading/parallel_offloading_map.cpp -o $HOME/llvm-build/llvm/runtimes/runtimes-bins/openmp/libomptarget/test/amdgcn-amd-amdhsa/offloading/Output/parallel_offloading_map.cpp.tmp && $HOME/llvm-build/llvm/runtimes/runtimes-bins/openmp/libomptarget/test/amdgcn-amd-amdhsa/offloading/Output/parallel_offloading_map.cpp.tmp | $HOME/llvm-build/llvm/./bin/FileCheck $HOME/llvm-project/openmp/libomptarget/test/offloading/parallel_offloading_map.cpp<br></div><div><br></div><div>That will also fail, but for different reasons. Lit sets up LD_LIBRARY_PATH to find libomp + libomptarget, and LIBRARY_PATH to find the devicertl. The build tree puts the first two in different places, so the invocation to successfully hit the same failure from the test suite is something like</div><div>> export LD_LIBRARY_PATH="$HOME/llvm-build/llvm/runtimes/runtimes-bins/openmp/libomptarget:$HOME/llvm-build/llvm/runtimes/runtimes-bins/openmp/runtime/src"<br>> export LIBRARY_PATH="$HOME/llvm-build/llvm/runtimes/runtimes-bins/openmp/libomptarget/"<br>then the above.</div><div><br></div><div>Instead of this, let's do something roughly equivalent to <a href="https://reviews.llvm.org/D101960">https://reviews.llvm.org/D101960</a>.</div><div><br></div><div>That does a bunch of small, semi-orthogonal things with the end result that clang -fopenmp makes an executable that runs, without an environment variable, and the failures from the test suite can be copied into a new shell for debugging.</div><div><br></div><div>Thanks all,</div><div><br></div><div>Jon</div><div><br></div></div>