This is part of review: https://reviews.llvm.org/D100181
Creates a new directory "libompd" under openmp.
"TargetValue" provides operational access to the OpenMP runtime memory for OMPD APIs.
With TargetValue, using "pointer" a user can do multiple operations from casting, dereferencing to accessing an element for structure.
The member functions are designed to concatenate the operations that are needed to access values from structures.
e.g., _a[6]->_b._c would read like : TValue(ctx, "_a").cast("A",2).getArrayElement(6).access("_b").cast("B").access("_c")
For example:
If you have a pointer "ThreadHandle" of a running program then you can access/retrieve "threadID" from the memory using TargetValue as below.
TValue(context, thread_handle->th) /*__kmp_threads[t]->th*/ .cast("kmp_base_info_t") .access("th_info") /*__kmp_threads[t]->th.th_info*/ .cast("kmp_desc_t") .access("ds") /*__kmp_threads[t]->th.th_info.ds*/ .cast("kmp_desc_base_t") .access("ds_thread") /*__kmp_threads[t]->th.th_info.ds.ds_thread*/ .cast("kmp_thread_t") .getRawValue(thread_id, 1);
At least these two destinations ignore OPENMP_INSTALL_LIBDIR leading to mixing of 32-bit libs with 64-bit libs in multilib setup,
It should use ${OPENMP_INSTALL_LIBDIR} like ./tools/archer/CMakeLists.txt does.