From acb9b8f73ce17292fce43a1bc376311accd0e937 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C3=ABl=20Zasso?= Date: Fri, 29 Sep 2017 13:28:22 +0200 Subject: [PATCH] deps: backport b096c44 from upstream V8 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Original commit message: [build] Introduce an embedder version string Sometimes, the embedder might want to merge a fix to an abandoned branch or to a supported branch but the fix is not relevant to Chromium. This adds a new version string that the embedder can set at compile time and that will be appended to the official V8 version. The separator must be provided in the string. For instance, to have a full version string like "6.0.287.53-emb.1", the embedder must set V8_EMBEDDER_STRING to "-emb.1". Related Node.js issue: https://github.com/nodejs/node/pull/9754 BUG=v8:5740 R=machenbach@chromium.org Cq-Include-Trybots: master.tryserver.chromium.linux:linux_chromium_rel_ng Change-Id: Ifa2d9bd213795e6d54886436f8c3787ac6162823 Reviewed-on: https://chromium-review.googlesource.com/690475 Reviewed-by: Michael Achenbach Reviewed-by: Yang Guo Commit-Queue: Michaƫl Zasso Cr-Commit-Position: refs/heads/master@{#48301} Refs: https://github.com/v8/v8/commit/b096c44ffc32d84979bd2ea64ddfd08d643581ff PR-URL: https://github.com/nodejs/node/pull/15785 Reviewed-By: Anna Henningsen Reviewed-By: Colin Ihrig Reviewed-By: Ben Noordhuis Reviewed-By: Gibson Fahnestock Reviewed-By: Ali Ijaz Sheikh Reviewed-By: James M Snell Reviewed-By: Michael Dawson --- deps/v8/BUILD.gn | 6 ++++ deps/v8/gypfiles/features.gypi | 6 ++++ deps/v8/include/v8-version-string.h | 6 +++- deps/v8/src/log-utils.cc | 13 ++++++-- deps/v8/src/version.cc | 19 ++++++----- deps/v8/src/version.h | 5 ++- deps/v8/test/cctest/test-version.cc | 51 +++++++++++++++++++---------- 7 files changed, 75 insertions(+), 31 deletions(-) diff --git a/deps/v8/BUILD.gn b/deps/v8/BUILD.gn index 494ba22f2934d6..7efbe319fd8cca 100644 --- a/deps/v8/BUILD.gn +++ b/deps/v8/BUILD.gn @@ -39,6 +39,9 @@ declare_args() { # Embeds the given script into the snapshot. v8_embed_script = "" + # Allows the embedder to add a custom suffix to the version string. + v8_embedder_string = "" + # Sets -dENABLE_DISASSEMBLER. v8_enable_disassembler = "" @@ -217,6 +220,9 @@ config("features") { defines = [] + if (v8_embedder_string != "") { + defines += [ "V8_EMBEDDER_STRING=\"$v8_embedder_string\"" ] + } if (v8_enable_disassembler) { defines += [ "ENABLE_DISASSEMBLER" ] } diff --git a/deps/v8/gypfiles/features.gypi b/deps/v8/gypfiles/features.gypi index 0eeec2466ebc51..a17dc556e6bc7e 100644 --- a/deps/v8/gypfiles/features.gypi +++ b/deps/v8/gypfiles/features.gypi @@ -29,6 +29,9 @@ { 'variables': { + # Allows the embedder to add a custom suffix to the version string. + 'v8_embedder_string%': '', + 'v8_enable_disassembler%': 0, 'v8_promise_internal_field_count%': 0, @@ -79,6 +82,9 @@ }, 'target_defaults': { 'conditions': [ + ['v8_embedder_string!=""', { + 'defines': ['V8_EMBEDDER_STRING="<(v8_embedder_string)"',], + }], ['v8_enable_disassembler==1', { 'defines': ['ENABLE_DISASSEMBLER',], }], diff --git a/deps/v8/include/v8-version-string.h b/deps/v8/include/v8-version-string.h index 075282de4ca0e2..eab0934804efd4 100644 --- a/deps/v8/include/v8-version-string.h +++ b/deps/v8/include/v8-version-string.h @@ -16,6 +16,10 @@ #define V8_CANDIDATE_STRING "" #endif +#ifndef V8_EMBEDDER_STRING +#define V8_EMBEDDER_STRING "" +#endif + #define V8_SX(x) #x #define V8_S(x) V8_SX(x) @@ -23,7 +27,7 @@ #define V8_VERSION_STRING \ V8_S(V8_MAJOR_VERSION) \ "." V8_S(V8_MINOR_VERSION) "." V8_S(V8_BUILD_NUMBER) "." V8_S( \ - V8_PATCH_LEVEL) V8_CANDIDATE_STRING + V8_PATCH_LEVEL) V8_EMBEDDER_STRING V8_CANDIDATE_STRING #else #define V8_VERSION_STRING \ V8_S(V8_MAJOR_VERSION) \ diff --git a/deps/v8/src/log-utils.cc b/deps/v8/src/log-utils.cc index 7c3de0c6ca5a6a..bc471403d8d5ed 100644 --- a/deps/v8/src/log-utils.cc +++ b/deps/v8/src/log-utils.cc @@ -55,9 +55,16 @@ void Log::Initialize(const char* log_file_name) { if (output_handle_ != nullptr) { Log::MessageBuilder msg(this); - msg.Append("v8-version,%d,%d,%d,%d,%d", Version::GetMajor(), - Version::GetMinor(), Version::GetBuild(), Version::GetPatch(), - Version::IsCandidate()); + if (strlen(Version::GetEmbedder()) == 0) { + msg.Append("v8-version,%d,%d,%d,%d,%d", Version::GetMajor(), + Version::GetMinor(), Version::GetBuild(), + Version::GetPatch(), Version::IsCandidate()); + } else { + msg.Append("v8-version,%d,%d,%d,%d,%s,%d", Version::GetMajor(), + Version::GetMinor(), Version::GetBuild(), + Version::GetPatch(), Version::GetEmbedder(), + Version::IsCandidate()); + } msg.WriteToLogFile(); } } diff --git a/deps/v8/src/version.cc b/deps/v8/src/version.cc index 3252d550354ee8..b050fc9ab5ebd5 100644 --- a/deps/v8/src/version.cc +++ b/deps/v8/src/version.cc @@ -20,6 +20,7 @@ int Version::major_ = V8_MAJOR_VERSION; int Version::minor_ = V8_MINOR_VERSION; int Version::build_ = V8_BUILD_NUMBER; int Version::patch_ = V8_PATCH_LEVEL; +const char* Version::embedder_ = V8_EMBEDDER_STRING; bool Version::candidate_ = (V8_IS_CANDIDATE_VERSION != 0); const char* Version::soname_ = SONAME; const char* Version::version_string_ = V8_VERSION_STRING; @@ -33,12 +34,12 @@ void Version::GetString(Vector str) { const char* is_simulator = ""; #endif // USE_SIMULATOR if (GetPatch() > 0) { - SNPrintF(str, "%d.%d.%d.%d%s%s", - GetMajor(), GetMinor(), GetBuild(), GetPatch(), candidate, - is_simulator); + SNPrintF(str, "%d.%d.%d.%d%s%s%s", + GetMajor(), GetMinor(), GetBuild(), GetPatch(), GetEmbedder(), + candidate, is_simulator); } else { - SNPrintF(str, "%d.%d.%d%s%s", - GetMajor(), GetMinor(), GetBuild(), candidate, + SNPrintF(str, "%d.%d.%d%s%s%s", + GetMajor(), GetMinor(), GetBuild(), GetEmbedder(), candidate, is_simulator); } } @@ -50,11 +51,11 @@ void Version::GetSONAME(Vector str) { // Generate generic SONAME if no specific SONAME is defined. const char* candidate = IsCandidate() ? "-candidate" : ""; if (GetPatch() > 0) { - SNPrintF(str, "libv8-%d.%d.%d.%d%s.so", - GetMajor(), GetMinor(), GetBuild(), GetPatch(), candidate); + SNPrintF(str, "libv8-%d.%d.%d.%d%s%s.so", GetMajor(), GetMinor(), + GetBuild(), GetPatch(), GetEmbedder(), candidate); } else { - SNPrintF(str, "libv8-%d.%d.%d%s.so", - GetMajor(), GetMinor(), GetBuild(), candidate); + SNPrintF(str, "libv8-%d.%d.%d%s%s.so", GetMajor(), GetMinor(), GetBuild(), + GetEmbedder(), candidate); } } else { // Use specific SONAME. diff --git a/deps/v8/src/version.h b/deps/v8/src/version.h index 3395d7f4fe5589..20d9c71fe76661 100644 --- a/deps/v8/src/version.h +++ b/deps/v8/src/version.h @@ -18,6 +18,7 @@ class Version { static int GetMinor() { return minor_; } static int GetBuild() { return build_; } static int GetPatch() { return patch_; } + static const char* GetEmbedder() { return embedder_; } static bool IsCandidate() { return candidate_; } static uint32_t Hash() { return static_cast( @@ -38,13 +39,15 @@ class Version { static int minor_; static int build_; static int patch_; + static const char* embedder_; static bool candidate_; static const char* soname_; static const char* version_string_; // In test-version.cc. friend void SetVersion(int major, int minor, int build, int patch, - bool candidate, const char* soname); + const char* embedder, bool candidate, + const char* soname); }; } // namespace internal diff --git a/deps/v8/test/cctest/test-version.cc b/deps/v8/test/cctest/test-version.cc index 50fca16871a335..a2449d8ce7ab1e 100644 --- a/deps/v8/test/cctest/test-version.cc +++ b/deps/v8/test/cctest/test-version.cc @@ -37,11 +37,12 @@ namespace v8 { namespace internal { void SetVersion(int major, int minor, int build, int patch, - bool candidate, const char* soname) { + const char* embedder, bool candidate, const char* soname) { Version::major_ = major; Version::minor_ = minor; Version::build_ = build; Version::patch_ = patch; + Version::embedder_ = embedder; Version::candidate_ = candidate; Version::soname_ = soname; } @@ -50,15 +51,15 @@ void SetVersion(int major, int minor, int build, int patch, } // namespace v8 -static void CheckVersion(int major, int minor, int build, - int patch, bool candidate, +static void CheckVersion(int major, int minor, int build, int patch, + const char* embedder, bool candidate, const char* expected_version_string, const char* expected_generic_soname) { static v8::internal::EmbeddedVector version_str; static v8::internal::EmbeddedVector soname_str; // Test version without specific SONAME. - SetVersion(major, minor, build, patch, candidate, ""); + SetVersion(major, minor, build, patch, embedder, candidate, ""); Version::GetString(version_str); CHECK_EQ(0, strcmp(expected_version_string, version_str.start())); Version::GetSONAME(soname_str); @@ -66,7 +67,7 @@ static void CheckVersion(int major, int minor, int build, // Test version with specific SONAME. const char* soname = "libv8.so.1"; - SetVersion(major, minor, build, patch, candidate, soname); + SetVersion(major, minor, build, patch, embedder, candidate, soname); Version::GetString(version_str); CHECK_EQ(0, strcmp(expected_version_string, version_str.start())); Version::GetSONAME(soname_str); @@ -88,18 +89,34 @@ TEST(VersionString) { CheckVersion(2, 5, 10, 7, false, "2.5.10.7 SIMULATOR", "libv8-2.5.10.7.so"); CheckVersion(2, 5, 10, 7, true, "2.5.10.7 (candidate) SIMULATOR", "libv8-2.5.10.7-candidate.so"); + CheckVersion(6, 0, 287, 0, "-emb.1", false, "6.0.287-emb.1 SIMULATOR", + "libv8-6.0.287-emb.1.so"); + CheckVersion(6, 0, 287, 0, "-emb.1", true, "6.0.287-emb.1 (candidate) SIMULATOR", + "libv8-6.0.287-emb.1-candidate.so"); + CheckVersion(6, 0, 287, 53, "-emb.1", false, "6.0.287.53-emb.1 SIMULATOR", + "libv8-6.0.287.53-emb.1.so"); + CheckVersion(6, 0, 287, 53, "-emb.1", true, "6.0.287.53-emb.1 (candidate) SIMULATOR", + "libv8-6.0.287.53-emb.1-candidate.so"); #else - CheckVersion(0, 0, 0, 0, false, "0.0.0", "libv8-0.0.0.so"); - CheckVersion(0, 0, 0, 0, true, - "0.0.0 (candidate)", "libv8-0.0.0-candidate.so"); - CheckVersion(1, 0, 0, 0, false, "1.0.0", "libv8-1.0.0.so"); - CheckVersion(1, 0, 0, 0, true, - "1.0.0 (candidate)", "libv8-1.0.0-candidate.so"); - CheckVersion(1, 0, 0, 1, false, "1.0.0.1", "libv8-1.0.0.1.so"); - CheckVersion(1, 0, 0, 1, true, - "1.0.0.1 (candidate)", "libv8-1.0.0.1-candidate.so"); - CheckVersion(2, 5, 10, 7, false, "2.5.10.7", "libv8-2.5.10.7.so"); - CheckVersion(2, 5, 10, 7, true, - "2.5.10.7 (candidate)", "libv8-2.5.10.7-candidate.so"); + CheckVersion(0, 0, 0, 0, "", false, "0.0.0", "libv8-0.0.0.so"); + CheckVersion(0, 0, 0, 0, "", true, "0.0.0 (candidate)", + "libv8-0.0.0-candidate.so"); + CheckVersion(1, 0, 0, 0, "", false, "1.0.0", "libv8-1.0.0.so"); + CheckVersion(1, 0, 0, 0, "", true, "1.0.0 (candidate)", + "libv8-1.0.0-candidate.so"); + CheckVersion(1, 0, 0, 1, "", false, "1.0.0.1", "libv8-1.0.0.1.so"); + CheckVersion(1, 0, 0, 1, "", true, "1.0.0.1 (candidate)", + "libv8-1.0.0.1-candidate.so"); + CheckVersion(2, 5, 10, 7, "", false, "2.5.10.7", "libv8-2.5.10.7.so"); + CheckVersion(2, 5, 10, 7, "", true, "2.5.10.7 (candidate)", + "libv8-2.5.10.7-candidate.so"); + CheckVersion(6, 0, 287, 0, "-emb.1", false, "6.0.287-emb.1", + "libv8-6.0.287-emb.1.so"); + CheckVersion(6, 0, 287, 0, "-emb.1", true, "6.0.287-emb.1 (candidate)", + "libv8-6.0.287-emb.1-candidate.so"); + CheckVersion(6, 0, 287, 53, "-emb.1", false, "6.0.287.53-emb.1", + "libv8-6.0.287.53-emb.1.so"); + CheckVersion(6, 0, 287, 53, "-emb.1", true, "6.0.287.53-emb.1 (candidate)", + "libv8-6.0.287.53-emb.1-candidate.so"); #endif }