Kai Plociennik via llvm-dev
2021-Apr-15 12:21 UTC
[llvm-dev] Creating a static library with OpenMP offloading code
Dear all, I have a question w.r.t. creating a *static* library containing OpenMP offloading code. Using Clang/LLVM 9, I can successfully create an executable from source files with OpenMP target regions by creating a *shared* library and linking everything with clang++ in the style clang++ -fpic -fopenmp -fopenmp-targets=... -c file_a.cpp clang++ -fpic -fopenmp -fopenmp-targets=... -c file_b.cpp clang++ -shared -fopenmp -fopenmp-targets=... -o liboffload.so file_a.o file_b.o clang++ -fopenmp -fopenmp-targets=... -loffload -o main main.o However, I did not succeed in doing this with a *static* library. Since I do not know of any argument I can give to clang++ to create a static instead of shared library, I tried with llvm-ar, since I assume it is OpenMP-offloading-aware. So I did llvm-ar r liboffload.a file_a.o file_b.o and when I objdump liboffload.a, it contains offloading-related symbols such as .omp_offloading.entries and __CLANG_OFFLOAD_BUNDLE__..., so everything seems OK. But when I try something like clang++ -fopenmp -fopenmp-targets=... -loffload -o main main.o I get undefined references for functions in liboffload.a, and when I add liboffload.a to the arguments, I get an executable, but at runtime the offload entries for the target regions are missing. So my question is: Is there a way of getting this to work with a static instead of shared library? I would appreciate an answer a lot. Thanks in advance for any help, Kai -- Dr. Kai Plociennik Fraunhofer-Institut für Techno- und Wirtschaftsmathematik ITWM Competence Center High Performance Computing Fraunhofer-Platz 1 67663 Kaiserslautern Tel: +49 (0)631 31600 0 mail: kai.plociennik at itwm.fraunhofer.de www.itwm.fraunhofer.de