[mksnapshot] Add runtime flag to specify the target architecture

The mksnapshot-specific runtime flag --target-arch, together with
--target-os, specifies the target platform for the generated embedded.S
file.

Bug: v8:9103
Change-Id: Icb03a381101e7ab0db4a5fbbf3be8e23ed0b1a1c
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/1624165
Commit-Queue: Jakob Gruber <jgruber@chromium.org>
Reviewed-by: Peter Marshall <petermarshall@chromium.org>
Cr-Commit-Position: refs/heads/master@{#61739}
This commit is contained in:
Jakob Gruber 2019-05-22 13:59:35 +02:00 committed by Commit Bot
parent af1b77b1a2
commit 8b5c2bdd68
4 changed files with 21 additions and 3 deletions

View File

@ -1208,6 +1208,7 @@ template("run_mksnapshot") {
# mksnapshot needs to know which target OS to use at runtime. It's weird,
# but the target OS is really |current_os|.
"--target_os=$current_os",
"--target_arch=$current_cpu",
]
args += invoker.args

View File

@ -1209,6 +1209,8 @@ DEFINE_STRING(startup_src, nullptr,
"Write V8 startup as C++ src. (mksnapshot only)")
DEFINE_STRING(startup_blob, nullptr,
"Write V8 startup blob file. (mksnapshot only)")
DEFINE_STRING(target_arch, nullptr,
"The mksnapshot target arch. (mksnapshot only)")
DEFINE_STRING(target_os, nullptr, "The mksnapshot target os. (mksnapshot only)")
//

View File

@ -155,9 +155,14 @@ class EmbeddedFileWriter : public EmbeddedFileWriterInterface {
}
void SetEmbeddedVariant(const char* embedded_variant) {
if (embedded_variant == nullptr) return;
embedded_variant_ = embedded_variant;
}
void SetTargetArch(const char* target_arch) { target_arch_ = target_arch; }
void SetTargetOs(const char* target_os) { target_os_ = target_os; }
void WriteEmbedded(const i::EmbeddedData* blob) const {
MaybeWriteEmbeddedFile(blob);
}
@ -473,8 +478,18 @@ class EmbeddedFileWriter : public EmbeddedFileWriterInterface {
std::map<const char*, int> external_filenames_;
std::vector<const char*> external_filenames_by_index_;
// The file to generate or nullptr.
const char* embedded_src_path_ = nullptr;
// The variant is only used in multi-snapshot builds and otherwise set to
// "Default".
const char* embedded_variant_ = kDefaultEmbeddedVariant;
// {target_arch} and {target_os} control the generated assembly format. Note
// these may differ from both host- and target-platforms specified through
// e.g. V8_OS_* and V8_TARGET_ARCH_* defines.
const char* target_arch_ = nullptr;
const char* target_os_ = nullptr;
};
} // namespace internal

View File

@ -239,9 +239,9 @@ int main(int argc, char** argv) {
i::EmbeddedFileWriter embedded_writer;
embedded_writer.SetEmbeddedFile(i::FLAG_embedded_src);
if (i::FLAG_embedded_variant != nullptr) {
embedded_writer.SetEmbeddedVariant(i::FLAG_embedded_variant);
}
embedded_writer.SetEmbeddedVariant(i::FLAG_embedded_variant);
embedded_writer.SetTargetArch(i::FLAG_target_arch);
embedded_writer.SetTargetOs(i::FLAG_target_os);
std::unique_ptr<char> embed_script(
GetExtraCode(argc >= 2 ? argv[1] : nullptr, "embedding"));