AMPI: Add fsglobals (filesystem) and pipglobals (Process-in-Process) privatization...
[charm.git] / src / libs / ck-libs / ampi / ampi_funcptr_pipglobals.C
1
2 #include "ampi_funcptr_loader.h"
3
4 #include <string>
5 #include <atomic>
6
7 static std::atomic<size_t> rank_count{};
8
9 int main(int argc, char ** argv)
10 {
11   SharedObject myexe;
12
13   // open the user binary for this rank in a unique namespace
14   {
15     static const char FUNCPTR_SHIM_SUFFIX[] = ".user";
16
17     std::string binary_path{ampi_binary_path};
18     binary_path += FUNCPTR_SHIM_SUFFIX;
19
20     const Lmid_t lmid = rank_count++ == 0 ? LM_ID_BASE : LM_ID_NEWLM;
21     myexe = dlmopen(lmid, binary_path.c_str(), RTLD_NOW|RTLD_LOCAL);
22   }
23
24   if (myexe == nullptr)
25   {
26     CkError("dlmopen error: %s\n", dlerror());
27     CkAbort("Could not open pipglobals user program!");
28   }
29
30   return AMPI_FuncPtr_Loader(myexe, argc, argv);
31 }