| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
1 parent fb7868b commit 150910d
5 files changed
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -1423,6 +1423,61 @@ | |||
| 1423 | 1423 | ], | |
| 1424 | 1424 | }, # embedtest | |
| 1425 | 1425 | ||
| 1426 | + { | ||
| 1427 | + 'target_name': 'shared_embedtest', | ||
| 1428 | + 'type': 'executable', | ||
| 1429 | + | ||
| 1430 | + 'dependencies': [ | ||
| 1431 | + '<(node_lib_target_name)', | ||
| 1432 | + ], | ||
| 1433 | + | ||
| 1434 | + # Don't depend on node.gypi - it otherwise links to | ||
| 1435 | + # the static libraries and resolve symbols at build time. | ||
| 1436 | + 'include_dirs': [ | ||
| 1437 | + 'deps/v8/include', | ||
| 1438 | + ], | ||
| 1439 | + | ||
| 1440 | + 'sources': [ | ||
| 1441 | + 'test/embedding/shared_embedtest.cc', | ||
| 1442 | + ], | ||
| 1443 | + 'conditions': [ | ||
| 1444 | + [ 'node_shared=="true"', { | ||
| 1445 | + 'defines': [ | ||
| 1446 | + 'USING_V8_SHARED', | ||
| 1447 | + 'USING_V8_PLATFORM_SHARED', | ||
| 1448 | + ], | ||
| 1449 | + 'defines!': [ | ||
| 1450 | + 'BUILDING_V8_PLATFORM_SHARED=1', | ||
| 1451 | + 'BUILDING_V8_SHARED=1', | ||
| 1452 | + ], | ||
| 1453 | + }, { | ||
| 1454 | + # Only test shared embedding when Node is built as shared library. | ||
| 1455 | + 'type': 'none', | ||
| 1456 | + }], | ||
| 1457 | + # Only test platforms known to work. | ||
| 1458 | + ['OS not in "mac win linux"', { | ||
| 1459 | + 'type': 'none', | ||
| 1460 | + }], | ||
| 1461 | + ['OS=="win"', { | ||
| 1462 | + 'libraries': [ | ||
| 1463 | + 'Dbghelp.lib', | ||
| 1464 | + 'winmm.lib', | ||
| 1465 | + 'Ws2_32.lib', | ||
| 1466 | + ], | ||
| 1467 | + }], | ||
| 1468 | + ['OS=="mac"', { | ||
| 1469 | + 'xcode_settings': { | ||
| 1470 | + 'OTHER_LDFLAGS': [ '-Wl,-rpath,@loader_path', ], | ||
| 1471 | + } | ||
| 1472 | + }], | ||
| 1473 | + ['OS=="linux"', { | ||
| 1474 | + 'ldflags': [ | ||
| 1475 | + '-Wl,-rpath,\\$$ORIGIN' | ||
| 1476 | + ], | ||
| 1477 | + }], | ||
| 1478 | + ], | ||
| 1479 | + }, # shared_embedtest | ||
| 1480 | + | ||
| 1426 | 1481 | { | |
| 1427 | 1482 | 'target_name': 'overlapped-checker', | |
| 1428 | 1483 | 'type': 'executable', | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -62,6 +62,8 @@ if (isMainThread) | |||
| 62 | 62 | ||
| 63 | 63 | const noop = () => {}; | |
| 64 | 64 | ||
| 65 | + // Whether the executable is linked against the shared library i.e. libnode. | ||
| 66 | + const usesSharedLibrary = process.config.variables.node_shared; | ||
| 65 | 67 | const hasCrypto = Boolean(process.versions.openssl) && | |
| 66 | 68 | !process.env.NODE_SKIP_CRYPTO; | |
| 67 | 69 | ||
@@ -935,6 +937,13 @@ function sleepSync(ms) { | |||
| 935 | 937 | Atomics.wait(i32, 0, 0, ms); | |
| 936 | 938 | } | |
| 937 | 939 | ||
| 940 | + function resolveBuiltBinary(binary) { | ||
| 941 | + if (isWindows) { | ||
| 942 | + binary += '.exe'; | ||
| 943 | + } | ||
| 944 | + return path.join(path.dirname(process.execPath), binary); | ||
| 945 | + } | ||
| 946 | + | ||
| 938 | 947 | const common = { | |
| 939 | 948 | allowGlobals, | |
| 940 | 949 | buildType, | |
@@ -979,6 +988,7 @@ const common = { | |||
| 979 | 988 | printSkipMessage, | |
| 980 | 989 | pwdCommand, | |
| 981 | 990 | requireNoPackageJSONAbove, | |
| 991 | + resolveBuiltBinary, | ||
| 982 | 992 | runWithInvalidFD, | |
| 983 | 993 | skip, | |
| 984 | 994 | skipIf32Bits, | |
@@ -987,6 +997,7 @@ const common = { | |||
| 987 | 997 | skipIfSQLiteMissing, | |
| 988 | 998 | spawnPromisified, | |
| 989 | 999 | sleepSync, | |
| 1000 | + usesSharedLibrary, | ||
| 990 | 1001 | ||
| 991 | 1002 | get enoughTestMem() { | |
| 992 | 1003 | return require('os').totalmem() > 0x70000000; /* 1.75 Gb */ | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -0,0 +1,60 @@ | |||
| 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 : public v8::Object::Wrappable { | ||
| 14 | + public: | ||
| 15 | + void Trace(cppgc::Visitor* visitor) const override { | ||
| 16 | + v8::Object::Wrappable::Trace(visitor); | ||
| 17 | + } | ||
| 18 | + }; | ||
| 19 | + | ||
| 20 | + int main(int argc, char* argv[]) { | ||
| 21 | + std::unique_ptr<v8::Platform> platform = v8::platform::NewDefaultPlatform(); | ||
| 22 | + v8::V8::InitializePlatform(platform.get()); | ||
| 23 | + cppgc::InitializeProcess(platform->GetPageAllocator()); | ||
| 24 | + v8::V8::Initialize(); | ||
| 25 | + | ||
| 26 | + auto heap = v8::CppHeap::Create(platform.get(), v8::CppHeapCreateParams{{}}); | ||
| 27 | + v8::Isolate::CreateParams create_params; | ||
| 28 | + create_params.array_buffer_allocator = | ||
| 29 | + v8::ArrayBuffer::Allocator::NewDefaultAllocator(); | ||
| 30 | + create_params.cpp_heap = heap.release(); | ||
| 31 | + | ||
| 32 | + v8::Isolate* isolate = v8::Isolate::New(create_params); | ||
| 33 | + { | ||
| 34 | + v8::Isolate::Scope isolate_scope(isolate); | ||
| 35 | + v8::HandleScope handle_scope(isolate); | ||
| 36 | + v8::Local<v8::Context> context = v8::Context::New(isolate); | ||
| 37 | + v8::Context::Scope context_scope(context); | ||
| 38 | + | ||
| 39 | + v8::Local<v8::Object> obj = v8::Object::New(isolate); | ||
| 40 | + Wrappable* wrappable = cppgc::MakeGarbageCollected<Wrappable>( | ||
| 41 | + isolate->GetCppHeap()->GetAllocationHandle()); | ||
| 42 | + v8::Object::Wrap<v8::CppHeapPointerTag::kDefaultTag>( | ||
| 43 | + isolate, obj, wrappable); | ||
| 44 | + v8::Local<v8::String> source = | ||
| 45 | + v8::String::NewFromUtf8Literal(isolate, "'Hello' + ', World!'"); | ||
| 46 | + v8::Local<v8::Script> script = | ||
| 47 | + v8::Script::Compile(context, source).ToLocalChecked(); | ||
| 48 | + v8::Local<v8::Value> result = script->Run(context).ToLocalChecked(); | ||
| 49 | + v8::String::Utf8Value utf8(isolate, result); | ||
| 50 | + printf("%s\n", *utf8); | ||
| 51 | + } | ||
| 52 | + | ||
| 53 | + isolate->Dispose(); | ||
| 54 | + cppgc::ShutdownProcess(); | ||
| 55 | + v8::V8::Dispose(); | ||
| 56 | + v8::V8::DisposePlatform(); | ||
| 57 | + delete create_params.array_buffer_allocator; | ||
| 58 | + | ||
| 59 | + return 0; | ||
| 60 | + } | ||
| 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