Add option to remove original dll after creating native image for reducing storage consumption.
This option doesnot work with --ni-pkg option because app can be re-compiled.
#define NI_FLAGS_MIBC 0x0100
#define NI_FLAGS_PRINT_CMD 0x0200
#define NI_FLAGS_SKIP_RO_APP 0x0400
+#define NI_FLAGS_RM_ORIGIN_AFTER_NI 0x0800
typedef std::function<void (std::string)> afterCreate;
_ERR("executable path is null");
return -1;
}
-
+#if 0
if (!isFile(path)) {
_ERR("File not exist : %s", path);
return -1;
}
-
+#endif
// VD has their own signal handler.
if (!pluginHasLogControl()) {
registerSigHandler();
" --print-cmd - Print command and options\n"
" --skip-ro-app - Skip re-generate NI for apps installed RO area\n"
" (This option works with --ni-regen-all-app only)\n"
+ " --rm-origin-after-ni - Remove original dll after creating native image\n"
+ " Note!: --ni-pkg option doesnot support --rm-origin-after-ni option.\n"
+ " (Use only for assemblies that will not be AOTed again afterward.)"
"\n"
"Usage: dotnettool [options] [command] [arguments]\n"
"\n"
opt->flags |= NI_FLAGS_PRINT_CMD;
} else if (arg == "--skip-ro-app") {
opt->flags |= NI_FLAGS_SKIP_RO_APP;
+ } else if (arg == "--rm-origin-after-ni") {
+ opt->flags |= NI_FLAGS_RM_ORIGIN_AFTER_NI;
} else if (arg == "--mibc") {
++i;
if (i >= argc) {
}
//sh-3.2# dotnettool --ni-pkg [pkgId] [pkgId] ...
else if (cmd == "--ni-pkg") {
+ if (opt->flags & NI_FLAGS_RM_ORIGIN_AFTER_NI) {
+ _SERR("--ni-pkg option doesnot support --rm-origin-after-ni option");
+ DisplayUsage();
+ return -1;
+ }
+
if (args.size() < 1) {
_SERR("Package name is missing");
}
}
}
+ if (opt->flags & NI_FLAGS_RM_ORIGIN_AFTER_NI) {
+ if (!removeFile(dllPath)) {
+ _SERR("Fail to remove original file : %s", dllPath.c_str());
+ }
+ }
+
if (!(opt->flags & NI_FLAGS_INPUT_BUBBLE && opt->flags & NI_FLAGS_NO_PIPELINE)) {
_SOUT("Native image %s generated successfully.", outFile.c_str());
}
if (!isFile(coreLibBackup) && !isR2RImage(coreLib)) {
if (crossgen2NoPipeLine(dllList, refPaths, opt) == NI_ERROR_NONE) {
- if (rename(coreLib.c_str(), coreLibBackup.c_str())) {
+ if (opt->flags & NI_FLAGS_RM_ORIGIN_AFTER_NI) {
+ std::ofstream output(coreLibBackup);
+ if (!exist(coreLibBackup)) {
+ _SERR("Failed to create System.Private.CoreLib.dll.Backup");
+ return NI_ERROR_CORE_NI_FILE;
+ }
+ copySmackAndOwnership(__pm->getRuntimePath(), coreLibBackup, false);
+ output.close();
+ } else if (rename(coreLib.c_str(), coreLibBackup.c_str())) {
_SERR("Failed to rename from System.Private.CoreLib.dll to System.Private.CoreLib.dll.Backup");
return NI_ERROR_CORE_NI_FILE;
}