Skip to content

Commit

Permalink
[build] Introduce an embedder version string
Browse files Browse the repository at this point in the history
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: nodejs/node#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 <machenbach@chromium.org>
Reviewed-by: Yang Guo <yangguo@chromium.org>
Commit-Queue: Michaël Zasso <mic.besace@gmail.com>
Cr-Commit-Position: refs/heads/master@{#48301}
  • Loading branch information
targos authored and Commit Bot committed Oct 5, 2017
1 parent d0651bd commit b096c44
Show file tree
Hide file tree
Showing 7 changed files with 66 additions and 29 deletions.
6 changes: 6 additions & 0 deletions BUILD.gn
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,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 = ""

Expand Down Expand Up @@ -231,6 +234,9 @@ config("features") {

defines = []

if (v8_embedder_string != "") {
defines += [ "V8_EMBEDDER_STRING=\"$v8_embedder_string\"" ]
}
if (v8_enable_disassembler) {
defines += [ "ENABLE_DISASSEMBLER" ]
}
Expand Down
6 changes: 6 additions & 0 deletions gypfiles/features.gypi
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,9 @@
'v8_target_arch%': '<(target_arch)',
},

# 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,
Expand Down Expand Up @@ -89,6 +92,9 @@
},
'target_defaults': {
'conditions': [
['v8_embedder_string!=""', {
'defines': ['V8_EMBEDDER_STRING="<(v8_embedder_string)"',],
}],
['v8_enable_disassembler==1', {
'defines': ['ENABLE_DISASSEMBLER',],
}],
Expand Down
6 changes: 5 additions & 1 deletion include/v8-version-string.h
Original file line number Diff line number Diff line change
Expand Up @@ -16,14 +16,18 @@
#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)

#if V8_PATCH_LEVEL > 0
#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) \
Expand Down
13 changes: 10 additions & 3 deletions src/log-utils.cc
Original file line number Diff line number Diff line change
Expand Up @@ -52,9 +52,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();
}
}
Expand Down
16 changes: 9 additions & 7 deletions src/version.cc
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -28,10 +29,11 @@ const char* Version::version_string_ = V8_VERSION_STRING;
void Version::GetString(Vector<char> str) {
const char* candidate = IsCandidate() ? " (candidate)" : "";
if (GetPatch() > 0) {
SNPrintF(str, "%d.%d.%d.%d%s", GetMajor(), GetMinor(), GetBuild(),
GetPatch(), candidate);
SNPrintF(str, "%d.%d.%d.%d%s%s", GetMajor(), GetMinor(), GetBuild(),
GetPatch(), GetEmbedder(), candidate);
} else {
SNPrintF(str, "%d.%d.%d%s", GetMajor(), GetMinor(), GetBuild(), candidate);
SNPrintF(str, "%d.%d.%d%s%s", GetMajor(), GetMinor(), GetBuild(),
GetEmbedder(), candidate);
}
}

Expand All @@ -42,11 +44,11 @@ void Version::GetSONAME(Vector<char> 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.
Expand Down
5 changes: 4 additions & 1 deletion src/version.h
Original file line number Diff line number Diff line change
Expand Up @@ -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<uint32_t>(
Expand All @@ -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
Expand Down
43 changes: 26 additions & 17 deletions test/cctest/test-version.cc
Original file line number Diff line number Diff line change
Expand Up @@ -35,32 +35,33 @@ 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;
}

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<char, 128> version_str;
static v8::internal::EmbeddedVector<char, 128> 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);
CHECK_EQ(0, strcmp(expected_generic_soname, soname_str.start()));

// 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);
Expand All @@ -69,18 +70,26 @@ static void CheckVersion(int major, int minor, int build,


TEST(VersionString) {
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");
}

} // namespace internal
Expand Down

0 comments on commit b096c44

Please sign in to comment.