Skip to content

Commit 4f2575c

Browse files
committed
Move the produced temporary generated files to a unique temp folder
1 parent 3d6f3bb commit 4f2575c

1 file changed

Lines changed: 21 additions & 9 deletions

File tree

projects/mlir-python-bindings-wasm/WasmCompilerLinkerLoaderCAPI.cpp

Lines changed: 21 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@
2020
#include "llvm/IR/LegacyPassManager.h"
2121
#include "llvm/IR/Module.h"
2222
#include "llvm/MC/TargetRegistry.h"
23+
#include "llvm/Support/FileSystem.h"
24+
#include "llvm/Support/Path.h"
2325
#include "llvm/Support/TargetSelect.h"
2426
#include "llvm/Target/TargetMachine.h"
2527

@@ -93,11 +95,18 @@ MlirStringRef compileModule(MlirOperation module, MlirStringRef moduleName,
9395
assert(optLevel >= 0 && optLevel <= 3 && "expected optLevel between 0 and 3");
9496
targetMachine->setOptLevel(static_cast<llvm::CodeGenOptLevel>(optLevel));
9597
llvmModule->setDataLayout(targetMachine->createDataLayout());
96-
std::string moduleNameStr(unwrap(moduleName));
97-
std::string objectFileName = moduleNameStr + ".o";
98+
99+
llvm::SmallString<256> TempDir;
100+
std::error_code EC = llvm::sys::fs::createUniqueDirectory("wasm-module", TempDir);
101+
if (EC)
102+
llvm::report_fatal_error("Failed to create temporary directory: " + EC.message());
103+
104+
llvm::SmallString<256> objectFileName(TempDir);
105+
llvm::sys::path::append(objectFileName, unwrap(moduleName));
106+
objectFileName.append(".o");
98107

99108
std::error_code error;
100-
llvm::raw_fd_ostream objectFileOutput(llvm::StringRef(objectFileName), error);
109+
llvm::raw_fd_ostream objectFileOutput(objectFileName, error);
101110

102111
llvm::legacy::PassManager pm;
103112
if (targetMachine->addPassesToEmitFile(pm, objectFileOutput, nullptr,
@@ -114,17 +123,20 @@ MlirStringRef compileModule(MlirOperation module, MlirStringRef moduleName,
114123

115124
void linkLoadModule(MlirStringRef objectFileName,
116125
MlirStringRef binaryFileName) {
117-
std::string objectFileNameStr(unwrap(objectFileName));
118-
std::string binaryFileNameStr(unwrap(binaryFileName));
126+
llvm::SmallString<256> ObjectFileName(unwrap(objectFileName));
127+
128+
llvm::SmallString<256> BinaryFileName(llvm::sys::path::parent_path(ObjectFileName));
129+
llvm::sys::path::append(BinaryFileName, unwrap(binaryFileName));
130+
119131
std::vector<const char *> linkerArgs = {"wasm-ld",
120132
"-shared",
121133
"--import-memory",
122134
"--experimental-pic",
123135
"--stack-first",
124136
"--allow-undefined",
125-
objectFileNameStr.c_str(),
137+
ObjectFileName.c_str(),
126138
"-o",
127-
binaryFileNameStr.c_str()};
139+
BinaryFileName.c_str()};
128140

129141
const lld::DriverDef wasmDriver = {lld::Flavor::Wasm, &lld::wasm::link};
130142
std::vector<lld::DriverDef> wasmDriverArgs;
@@ -136,7 +148,7 @@ void linkLoadModule(MlirStringRef objectFileName,
136148
llvm::report_fatal_error("Failed to link incremental module");
137149

138150
void *loadedLibModule =
139-
dlopen(binaryFileNameStr.c_str(), RTLD_NOW | RTLD_GLOBAL);
151+
dlopen(BinaryFileName.c_str(), RTLD_NOW | RTLD_GLOBAL);
140152
if (!loadedLibModule)
141153
llvm::report_fatal_error("Failed to link incremental module");
142154
}
@@ -145,6 +157,6 @@ void *getSymbolAddress(MlirStringRef name) {
145157
std::string nameStr(unwrap(name));
146158
void *sym = dlsym(RTLD_DEFAULT, nameStr.c_str());
147159
if (!sym)
148-
llvm::report_fatal_error("dlsym failed for symbol: ");
160+
llvm::report_fatal_error("dlsym failed for symbol: " + nameStr);
149161
return sym;
150162
}

0 commit comments

Comments
 (0)