| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
1 parent b12bcc9 commit e83648e
5 files changed
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -1511,6 +1511,61 @@ | |||
| 1511 | 1511 | ], | |
| 1512 | 1512 | }, # embedtest | |
| 1513 | 1513 | ||
| 1514 | + { | ||
| 1515 | + 'target_name': 'shared_embedtest', | ||
| 1516 | + 'type': 'executable', | ||
| 1517 | + | ||
| 1518 | + 'dependencies': [ | ||
| 1519 | + '<(node_lib_target_name)', | ||
| 1520 | + ], | ||
| 1521 | + | ||
| 1522 | + # Don't depend on node.gypi - it otherwise links to | ||
| 1523 | + # the static libraries and resolve symbols at build time. | ||
| 1524 | + 'include_dirs': [ | ||
| 1525 | + 'deps/v8/include', | ||
| 1526 | + ], | ||
| 1527 | + | ||
| 1528 | + 'sources': [ | ||
| 1529 | + 'test/embedding/shared_embedtest.cc', | ||
| 1530 | + ], | ||
| 1531 | + 'conditions': [ | ||
| 1532 | + [ 'node_shared=="true"', { | ||
| 1533 | + 'defines': [ | ||
| 1534 | + 'USING_V8_SHARED', | ||
| 1535 | + 'USING_V8_PLATFORM_SHARED', | ||
| 1536 | + ], | ||
| 1537 | + 'defines!': [ | ||
| 1538 | + 'BUILDING_V8_PLATFORM_SHARED=1', | ||
| 1539 | + 'BUILDING_V8_SHARED=1', | ||
| 1540 | + ], | ||
| 1541 | + }, { | ||
| 1542 | + # Only test shared embedding when Node is built as shared library. | ||
| 1543 | + 'type': 'none', | ||
| 1544 | + }], | ||
| 1545 | + # Only test platforms known to work. | ||
| 1546 | + ['OS not in "mac win linux"', { | ||
| 1547 | + 'type': 'none', | ||
| 1548 | + }], | ||
| 1549 | + ['OS=="win"', { | ||
| 1550 | + 'libraries': [ | ||
| 1551 | + 'Dbghelp.lib', | ||
| 1552 | + 'winmm.lib', | ||
| 1553 | + 'Ws2_32.lib', | ||
| 1554 | + ], | ||
| 1555 | + }], | ||
| 1556 | + ['OS=="mac"', { | ||
| 1557 | + 'xcode_settings': { | ||
| 1558 | + 'OTHER_LDFLAGS': [ '-Wl,-rpath,@loader_path', ], | ||
| 1559 | + } | ||
| 1560 | + }], | ||
| 1561 | + ['OS=="linux"', { | ||
| 1562 | + 'ldflags': [ | ||
| 1563 | + '-Wl,-rpath,\\$$ORIGIN' | ||
| 1564 | + ], | ||
| 1565 | + }], | ||
| 1566 | + ], | ||
| 1567 | + }, # shared_embedtest | ||
| 1568 | + | ||
| 1514 | 1569 | { | |
| 1515 | 1570 | 'target_name': 'overlapped-checker', | |
| 1516 | 1571 | 'type': 'executable', | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -51,6 +51,8 @@ if (isMainThread) | |||
| 51 | 51 | ||
| 52 | 52 | const noop = () => {}; | |
| 53 | 53 | ||
| 54 | + // Whether the executable is linked against the shared library i.e. libnode. | ||
| 55 | + const usesSharedLibrary = process.config.variables.node_shared; | ||
| 54 | 56 | const hasCrypto = Boolean(process.versions.openssl) && | |
| 55 | 57 | !process.env.NODE_SKIP_CRYPTO; | |
| 56 | 58 | ||
@@ -945,6 +947,13 @@ function sleepSync(ms) { | |||
| 945 | 947 | Atomics.wait(i32, 0, 0, ms); | |
| 946 | 948 | } | |
| 947 | 949 | ||
| 950 | + function resolveBuiltBinary(binary) { | ||
| 951 | + if (isWindows) { | ||
| 952 | + binary += '.exe'; | ||
| 953 | + } | ||
| 954 | + return path.join(path.dirname(process.execPath), binary); | ||
| 955 | + } | ||
| 956 | + | ||
| 948 | 957 | const common = { | |
| 949 | 958 | allowGlobals, | |
| 950 | 959 | buildType, | |
@@ -990,6 +999,7 @@ const common = { | |||
| 990 | 999 | printSkipMessage, | |
| 991 | 1000 | pwdCommand, | |
| 992 | 1001 | requireNoPackageJSONAbove, | |
| 1002 | + resolveBuiltBinary, | ||
| 993 | 1003 | runWithInvalidFD, | |
| 994 | 1004 | skip, | |
| 995 | 1005 | skipIf32Bits, | |
@@ -998,6 +1008,7 @@ const common = { | |||
| 998 | 1008 | skipIfSQLiteMissing, | |
| 999 | 1009 | spawnPromisified, | |
| 1000 | 1010 | sleepSync, | |
| 1011 | + usesSharedLibrary, | ||
| 1001 | 1012 | ||
| 1002 | 1013 | get enoughTestMem() { | |
| 1003 | 1014 | return require('os').totalmem() > 0x70000000; /* 1.75 Gb */ | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -0,0 +1,58 @@ | |||
| 1 | + #include <libplatform/libplatform.h> | ||
| 2 | + #include <v8-cppgc.h> | ||
| 3 | + #include <v8.h> | ||
| 4 | + | ||
| 5 | + #include <cppgc/allocation.h> | ||
| 6 | + #include <cppgc/default-platform.h> | ||
| 7 | + #include <cppgc/garbage-collected.h> | ||
| 8 | + #include <cppgc/heap.h> | ||
| 9 | + #include <cppgc/member.h> | ||
| 10 | + #include <cppgc/platform.h> | ||
| 11 | + #include <cppgc/visitor.h> | ||
| 12 | + | ||
| 13 | + class Wrappable final : public cppgc::GarbageCollected<Wrappable> { | ||
| 14 | + public: | ||
| 15 | + void Trace(cppgc::Visitor* visitor) const {} | ||
| 16 | + }; | ||
| 17 | + | ||
| 18 | + int main(int argc, char* argv[]) { | ||
| 19 | + std::unique_ptr<v8::Platform> platform = v8::platform::NewDefaultPlatform(); | ||
| 20 | + v8::V8::InitializePlatform(platform.get()); | ||
| 21 | + cppgc::InitializeProcess(platform->GetPageAllocator()); | ||
| 22 | + v8::V8::Initialize(); | ||
| 23 | + | ||
| 24 | + auto heap = v8::CppHeap::Create(platform.get(), v8::CppHeapCreateParams{{}}); | ||
| 25 | + v8::Isolate::CreateParams create_params; | ||
| 26 | + create_params.array_buffer_allocator = | ||
| 27 | + v8::ArrayBuffer::Allocator::NewDefaultAllocator(); | ||
| 28 | + create_params.cpp_heap = heap.release(); | ||
| 29 | + | ||
| 30 | + v8::Isolate* isolate = v8::Isolate::New(create_params); | ||
| 31 | + { | ||
| 32 | + v8::Isolate::Scope isolate_scope(isolate); | ||
| 33 | + v8::HandleScope handle_scope(isolate); | ||
| 34 | + v8::Local<v8::Context> context = v8::Context::New(isolate); | ||
| 35 | + v8::Context::Scope context_scope(context); | ||
| 36 | + | ||
| 37 | + v8::Local<v8::Object> obj = v8::Object::New(isolate); | ||
| 38 | + Wrappable* wrappable = cppgc::MakeGarbageCollected<Wrappable>( | ||
| 39 | + isolate->GetCppHeap()->GetAllocationHandle()); | ||
| 40 | + v8::Object::Wrap<v8::CppHeapPointerTag::kDefaultTag>( | ||
| 41 | + isolate, obj, wrappable); | ||
| 42 | + v8::Local<v8::String> source = | ||
| 43 | + v8::String::NewFromUtf8Literal(isolate, "'Hello' + ', World!'"); | ||
| 44 | + v8::Local<v8::Script> script = | ||
| 45 | + v8::Script::Compile(context, source).ToLocalChecked(); | ||
| 46 | + v8::Local<v8::Value> result = script->Run(context).ToLocalChecked(); | ||
| 47 | + v8::String::Utf8Value utf8(isolate, result); | ||
| 48 | + printf("%s\n", *utf8); | ||
| 49 | + } | ||
| 50 | + | ||
| 51 | + isolate->Dispose(); | ||
| 52 | + cppgc::ShutdownProcess(); | ||
| 53 | + v8::V8::Dispose(); | ||
| 54 | + v8::V8::DisposePlatform(); | ||
| 55 | + delete create_params.array_buffer_allocator; | ||
| 56 | + | ||
| 57 | + return 0; | ||
| 58 | + } | ||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -8,22 +8,14 @@ const { | |||
| 8 | 8 | spawnSyncAndExit, | |
| 9 | 9 | spawnSyncAndExitWithoutError, | |
| 10 | 10 | } = require('../common/child_process'); | |
| 11 | - const path = require('path'); | ||
| 12 | 11 | const fs = require('fs'); | |
| 13 | 12 | const os = require('os'); | |
| 14 | 13 | ||
| 15 | 14 | tmpdir.refresh(); | |
| 16 | 15 | common.allowGlobals(global.require); | |
| 17 | 16 | common.allowGlobals(global.embedVars); | |
| 18 | 17 | ||
| 19 | - function resolveBuiltBinary(binary) { | ||
| 20 | - if (common.isWindows) { | ||
| 21 | - binary += '.exe'; | ||
| 22 | - } | ||
| 23 | - return path.join(path.dirname(process.execPath), binary); | ||
| 24 | - } | ||
| 25 | - | ||
| 26 | - const binary = resolveBuiltBinary('embedtest'); | ||
| 18 | + const binary = common.resolveBuiltBinary('embedtest'); | ||
| 27 | 19 | ||
| 28 | 20 | spawnSyncAndAssert( | |
| 29 | 21 | binary, | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -0,0 +1,25 @@ | |||
| 1 | + 'use strict'; | ||
| 2 | + | ||
| 3 | + // This tests the V8 parts in the shared library work correctly. | ||
| 4 | + // TODO(joyeecheung): also test that the Node.js parts work correctly, | ||
| 5 | + // which can be done in embedtest just built in shared library mode. | ||
| 6 | + | ||
| 7 | + const common = require('../common'); | ||
| 8 | + | ||
| 9 | + if (!common.usesSharedLibrary) { | ||
| 10 | + common.skip('Only tests builds linking against Node.js shared library'); | ||
| 11 | + } | ||
| 12 | + | ||
| 13 | + const { spawnSyncAndAssert } = require('../common/child_process'); | ||
| 14 | + const fs = require('fs'); | ||
| 15 | + | ||
| 16 | + const binary = common.resolveBuiltBinary('shared_embedtest'); | ||
| 17 | + | ||
| 18 | + if (!fs.existsSync(binary)) { | ||
| 19 | + common.skip('shared_embedtest binary not built'); | ||
| 20 | + } | ||
| 21 | + | ||
| 22 | + spawnSyncAndAssert(binary, { | ||
| 23 | + trim: true, | ||
| 24 | + stdout: 'Hello, World!', | ||
| 25 | + }); | ||
| Back | FazBrowse Home | New Git URL |
0 commit comments