From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Jeremy Apthorp Date: Tue, 26 Feb 2019 17:07:45 -0800 Subject: build: add GN build files This adds GN build files for Node, so we don't have to build with GYP. Note that there always GN files in upstream Node in 20/21 branches, however those files were cherry-picked from main branch and do not really in 20/21. We have to wait until 22 is released to be able to build with upstream GN files. diff --git a/deps/ncrypto/ncrypto.h b/deps/ncrypto/ncrypto.h index 60bfce3ea8999e8e145aaf8cd14f0fdf21ed9c54..661c996889d0a89c1c38658a0933fcf5e3cdc1b9 100644 --- a/deps/ncrypto/ncrypto.h +++ b/deps/ncrypto/ncrypto.h @@ -400,17 +400,21 @@ public: UNABLE_TO_CHECK_GENERATOR = DH_UNABLE_TO_CHECK_GENERATOR, NOT_SUITABLE_GENERATOR = DH_NOT_SUITABLE_GENERATOR, Q_NOT_PRIME = DH_CHECK_Q_NOT_PRIME, +#ifndef OPENSSL_IS_BORINGSSL INVALID_Q = DH_CHECK_INVALID_Q_VALUE, INVALID_J = DH_CHECK_INVALID_J_VALUE, +#endif CHECK_FAILED = 512, }; CheckResult check(); enum class CheckPublicKeyResult { NONE, + #ifndef OPENSSL_IS_BORINGSSL TOO_SMALL = DH_R_CHECK_PUBKEY_TOO_SMALL, TOO_LARGE = DH_R_CHECK_PUBKEY_TOO_LARGE, INVALID = DH_R_CHECK_PUBKEY_INVALID, + #endif CHECK_FAILED = 512, }; // Check to see if the given public key is suitable for this DH instance. diff --git a/deps/sqlite/unofficial.gni b/deps/sqlite/unofficial.gni index ebb3ffcd6d42b4c16b6865a91ccf4428cffe864b..00225afa1fb4205f1e02d9f185aeb97d642b3fd9 100644 --- a/deps/sqlite/unofficial.gni +++ b/deps/sqlite/unofficial.gni @@ -18,8 +18,14 @@ template("sqlite_gn_build") { forward_variables_from(invoker, "*") public_configs = [ ":sqlite_config" ] sources = gypi_values.sqlite_sources + cflags_c = [ + "-Wno-implicit-fallthrough", + "-Wno-unreachable-code-break", + "-Wno-unreachable-code-return", + "-Wno-unreachable-code", + ] if (is_win) { - cflags_c = [ + cflags_c += [ "-Wno-sign-compare", "-Wno-unused-but-set-variable", "-Wno-unused-function", diff --git a/filenames.json b/filenames.json new file mode 100644 index 0000000000000000000000000000000000000000..5af3886d8d3d74d31249a4d79030a8373b8dad52 --- /dev/null +++ b/filenames.json @@ -0,0 +1,756 @@ +// This file is automatically generated by generate_gn_filenames_json.py +// DO NOT EDIT +{ + "fs_files": [ + "lib/internal/fs/cp/cp-sync.js", + "lib/internal/fs/cp/cp.js", + "lib/internal/fs/dir.js", + "lib/internal/fs/glob.js", + "lib/internal/fs/promises.js", + "lib/internal/fs/read/context.js", + "lib/internal/fs/recursive_watch.js", + "lib/internal/fs/rimraf.js", + "lib/internal/fs/streams.js", + "lib/internal/fs/sync_write_stream.js", + "lib/internal/fs/utils.js", + "lib/internal/fs/watchers.js", + "lib/fs.js", + "lib/fs/promises.js" + ], + "headers": [ + { + "dest_dir": "include/node/", + "files": [ + "src/js_native_api.h", + "src/js_native_api_types.h", + "src/node.h", + "src/node_api.h", + "src/node_api_types.h", + "src/node_buffer.h", + "src/node_object_wrap.h" + ] + }, + { + "dest_dir": "include/node/./", + "files": [ + "//v8/include/v8-array-buffer.h", + "//v8/include/v8-callbacks.h", + "//v8/include/v8-container.h", + "//v8/include/v8-context.h", + "//v8/include/v8-cppgc.h", + "//v8/include/v8-data.h", + "//v8/include/v8-date.h", + "//v8/include/v8-debug.h", + "//v8/include/v8-embedder-heap.h", + "//v8/include/v8-embedder-state-scope.h", + "//v8/include/v8-exception.h", + "//v8/include/v8-extension.h", + "//v8/include/v8-external.h", + "//v8/include/v8-forward.h", + "//v8/include/v8-function-callback.h", + "//v8/include/v8-function.h", + "//v8/include/v8-handle-base.h", + "//v8/include/v8-initialization.h", + "//v8/include/v8-internal.h", + "//v8/include/v8-isolate.h", + "//v8/include/v8-json.h", + "//v8/include/v8-local-handle.h", + "//v8/include/v8-locker.h", + "//v8/include/v8-maybe.h", + "//v8/include/v8-memory-span.h", + "//v8/include/v8-message.h", + "//v8/include/v8-microtask-queue.h", + "//v8/include/v8-microtask.h", + "//v8/include/v8-object.h", + "//v8/include/v8-persistent-handle.h", + "//v8/include/v8-platform.h", + "//v8/include/v8-primitive-object.h", + "//v8/include/v8-primitive.h", + "//v8/include/v8-profiler.h", + "//v8/include/v8-promise.h", + "//v8/include/v8-proxy.h", + "//v8/include/v8-regexp.h", + "//v8/include/v8-sandbox.h", + "//v8/include/v8-script.h", + "//v8/include/v8-snapshot.h", + "//v8/include/v8-source-location.h", + "//v8/include/v8-statistics.h", + "//v8/include/v8-template.h", + "//v8/include/v8-traced-handle.h", + "//v8/include/v8-typed-array.h", + "//v8/include/v8-unwinder.h", + "//v8/include/v8-value-serializer.h", + "//v8/include/v8-value.h", + "//v8/include/v8-version.h", + "//v8/include/v8-wasm.h", + "//v8/include/v8-weak-callback-info.h", + "//v8/include/v8.h", + "//v8/include/v8config.h", + "deps/uv/include/uv.h" + ] + }, + { + "dest_dir": "include/node/libplatform/", + "files": [ + "//v8/include/libplatform/libplatform-export.h", + "//v8/include/libplatform/libplatform.h", + "//v8/include/libplatform/v8-tracing.h" + ] + }, + { + "dest_dir": "include/node/cppgc/", + "files": [ + "//v8/include/cppgc/allocation.h", + "//v8/include/cppgc/common.h", + "//v8/include/cppgc/cross-thread-persistent.h", + "//v8/include/cppgc/custom-space.h", + "//v8/include/cppgc/default-platform.h", + "//v8/include/cppgc/ephemeron-pair.h", + "//v8/include/cppgc/explicit-management.h", + "//v8/include/cppgc/garbage-collected.h", + "//v8/include/cppgc/heap-consistency.h", + "//v8/include/cppgc/heap-handle.h", + "//v8/include/cppgc/heap-state.h", + "//v8/include/cppgc/heap-statistics.h", + "//v8/include/cppgc/heap.h", + "//v8/include/cppgc/liveness-broker.h", + "//v8/include/cppgc/macros.h", + "//v8/include/cppgc/member.h", + "//v8/include/cppgc/name-provider.h", + "//v8/include/cppgc/object-size-trait.h", + "//v8/include/cppgc/persistent.h", + "//v8/include/cppgc/platform.h", + "//v8/include/cppgc/prefinalizer.h", + "//v8/include/cppgc/process-heap-statistics.h", + "//v8/include/cppgc/sentinel-pointer.h", + "//v8/include/cppgc/source-location.h", + "//v8/include/cppgc/testing.h", + "//v8/include/cppgc/trace-trait.h", + "//v8/include/cppgc/type-traits.h", + "//v8/include/cppgc/visitor.h" + ] + }, + { + "dest_dir": "include/node/cppgc/internal/", + "files": [ + "//v8/include/cppgc/internal/api-constants.h", + "//v8/include/cppgc/internal/atomic-entry-flag.h", + "//v8/include/cppgc/internal/base-page-handle.h", + "//v8/include/cppgc/internal/caged-heap-local-data.h", + "//v8/include/cppgc/internal/caged-heap.h", + "//v8/include/cppgc/internal/compiler-specific.h", + "//v8/include/cppgc/internal/finalizer-trait.h", + "//v8/include/cppgc/internal/gc-info.h", + "//v8/include/cppgc/internal/logging.h", + "//v8/include/cppgc/internal/member-storage.h", + "//v8/include/cppgc/internal/name-trait.h", + "//v8/include/cppgc/internal/persistent-node.h", + "//v8/include/cppgc/internal/pointer-policies.h", + "//v8/include/cppgc/internal/write-barrier.h" + ] + }, + { + "dest_dir": "include/node/uv/", + "files": [ + "deps/uv/include/uv/aix.h", + "deps/uv/include/uv/bsd.h", + "deps/uv/include/uv/darwin.h", + "deps/uv/include/uv/errno.h", + "deps/uv/include/uv/linux.h", + "deps/uv/include/uv/os390.h", + "deps/uv/include/uv/posix.h", + "deps/uv/include/uv/sunos.h", + "deps/uv/include/uv/threadpool.h", + "deps/uv/include/uv/tree.h", + "deps/uv/include/uv/unix.h", + "deps/uv/include/uv/version.h", + "deps/uv/include/uv/win.h" + ] + } + ], + "library_files": [ + "lib/_http_agent.js", + "lib/_http_client.js", + "lib/_http_common.js", + "lib/_http_incoming.js", + "lib/_http_outgoing.js", + "lib/_http_server.js", + "lib/_stream_duplex.js", + "lib/_stream_passthrough.js", + "lib/_stream_readable.js", + "lib/_stream_transform.js", + "lib/_stream_wrap.js", + "lib/_stream_writable.js", + "lib/_tls_common.js", + "lib/_tls_wrap.js", + "lib/assert.js", + "lib/assert/strict.js", + "lib/async_hooks.js", + "lib/buffer.js", + "lib/child_process.js", + "lib/cluster.js", + "lib/console.js", + "lib/constants.js", + "lib/crypto.js", + "lib/dgram.js", + "lib/diagnostics_channel.js", + "lib/dns.js", + "lib/dns/promises.js", + "lib/domain.js", + "lib/events.js", + "lib/http.js", + "lib/http2.js", + "lib/https.js", + "lib/inspector.js", + "lib/inspector/promises.js", + "lib/internal/abort_controller.js", + "lib/internal/assert.js", + "lib/internal/assert/assertion_error.js", + "lib/internal/assert/calltracker.js", + "lib/internal/assert/utils.js", + "lib/internal/async_context_frame.js", + "lib/internal/async_hooks.js", + "lib/internal/async_local_storage/async_context_frame.js", + "lib/internal/async_local_storage/async_hooks.js", + "lib/internal/blob.js", + "lib/internal/blocklist.js", + "lib/internal/bootstrap/node.js", + "lib/internal/bootstrap/realm.js", + "lib/internal/bootstrap/shadow_realm.js", + "lib/internal/bootstrap/switches/does_not_own_process_state.js", + "lib/internal/bootstrap/switches/does_own_process_state.js", + "lib/internal/bootstrap/switches/is_main_thread.js", + "lib/internal/bootstrap/switches/is_not_main_thread.js", + "lib/internal/bootstrap/web/exposed-wildcard.js", + "lib/internal/bootstrap/web/exposed-window-or-worker.js", + "lib/internal/buffer.js", + "lib/internal/child_process.js", + "lib/internal/child_process/serialization.js", + "lib/internal/cli_table.js", + "lib/internal/cluster/child.js", + "lib/internal/cluster/primary.js", + "lib/internal/cluster/round_robin_handle.js", + "lib/internal/cluster/shared_handle.js", + "lib/internal/cluster/utils.js", + "lib/internal/cluster/worker.js", + "lib/internal/console/constructor.js", + "lib/internal/console/global.js", + "lib/internal/constants.js", + "lib/internal/crypto/aes.js", + "lib/internal/crypto/certificate.js", + "lib/internal/crypto/cfrg.js", + "lib/internal/crypto/cipher.js", + "lib/internal/crypto/diffiehellman.js", + "lib/internal/crypto/ec.js", + "lib/internal/crypto/hash.js", + "lib/internal/crypto/hashnames.js", + "lib/internal/crypto/hkdf.js", + "lib/internal/crypto/keygen.js", + "lib/internal/crypto/keys.js", + "lib/internal/crypto/mac.js", + "lib/internal/crypto/pbkdf2.js", + "lib/internal/crypto/random.js", + "lib/internal/crypto/rsa.js", + "lib/internal/crypto/scrypt.js", + "lib/internal/crypto/sig.js", + "lib/internal/crypto/util.js", + "lib/internal/crypto/webcrypto.js", + "lib/internal/crypto/webidl.js", + "lib/internal/crypto/x509.js", + "lib/internal/data_url.js", + "lib/internal/debugger/inspect.js", + "lib/internal/debugger/inspect_client.js", + "lib/internal/debugger/inspect_repl.js", + "lib/internal/dgram.js", + "lib/internal/dns/callback_resolver.js", + "lib/internal/dns/promises.js", + "lib/internal/dns/utils.js", + "lib/internal/encoding.js", + "lib/internal/error_serdes.js", + "lib/internal/errors.js", + "lib/internal/event_target.js", + "lib/internal/events/abort_listener.js", + "lib/internal/events/symbols.js", + "lib/internal/file.js", + "lib/internal/fixed_queue.js", + "lib/internal/freelist.js", + "lib/internal/freeze_intrinsics.js", + "lib/internal/heap_utils.js", + "lib/internal/histogram.js", + "lib/internal/http.js", + "lib/internal/http2/compat.js", + "lib/internal/http2/core.js", + "lib/internal/http2/util.js", + "lib/internal/idna.js", + "lib/internal/inspector_async_hook.js", + "lib/internal/inspector_network_tracking.js", + "lib/internal/js_stream_socket.js", + "lib/internal/legacy/processbinding.js", + "lib/internal/linkedlist.js", + "lib/internal/main/check_syntax.js", + "lib/internal/main/embedding.js", + "lib/internal/main/eval_stdin.js", + "lib/internal/main/eval_string.js", + "lib/internal/main/inspect.js", + "lib/internal/main/mksnapshot.js", + "lib/internal/main/print_help.js", + "lib/internal/main/prof_process.js", + "lib/internal/main/repl.js", + "lib/internal/main/run_main_module.js", + "lib/internal/main/test_runner.js", + "lib/internal/main/watch_mode.js", + "lib/internal/main/worker_thread.js", + "lib/internal/mime.js", + "lib/internal/modules/cjs/loader.js", + "lib/internal/modules/esm/assert.js", + "lib/internal/modules/esm/create_dynamic_module.js", + "lib/internal/modules/esm/fetch_module.js", + "lib/internal/modules/esm/formats.js", + "lib/internal/modules/esm/get_format.js", + "lib/internal/modules/esm/hooks.js", + "lib/internal/modules/esm/initialize_import_meta.js", + "lib/internal/modules/esm/load.js", + "lib/internal/modules/esm/loader.js", + "lib/internal/modules/esm/module_job.js", + "lib/internal/modules/esm/module_map.js", + "lib/internal/modules/esm/resolve.js", + "lib/internal/modules/esm/shared_constants.js", + "lib/internal/modules/esm/translators.js", + "lib/internal/modules/esm/utils.js", + "lib/internal/modules/esm/worker.js", + "lib/internal/modules/helpers.js", + "lib/internal/modules/package_json_reader.js", + "lib/internal/modules/run_main.js", + "lib/internal/navigator.js", + "lib/internal/net.js", + "lib/internal/options.js", + "lib/internal/per_context/domexception.js", + "lib/internal/per_context/messageport.js", + "lib/internal/per_context/primordials.js", + "lib/internal/perf/event_loop_delay.js", + "lib/internal/perf/event_loop_utilization.js", + "lib/internal/perf/nodetiming.js", + "lib/internal/perf/observe.js", + "lib/internal/perf/performance.js", + "lib/internal/perf/performance_entry.js", + "lib/internal/perf/resource_timing.js", + "lib/internal/perf/timerify.js", + "lib/internal/perf/usertiming.js", + "lib/internal/perf/utils.js", + "lib/internal/priority_queue.js", + "lib/internal/process/execution.js", + "lib/internal/process/finalization.js", + "lib/internal/process/per_thread.js", + "lib/internal/process/permission.js", + "lib/internal/process/pre_execution.js", + "lib/internal/process/promises.js", + "lib/internal/process/report.js", + "lib/internal/process/signal.js", + "lib/internal/process/task_queues.js", + "lib/internal/process/warning.js", + "lib/internal/process/worker_thread_only.js", + "lib/internal/promise_hooks.js", + "lib/internal/querystring.js", + "lib/internal/readline/callbacks.js", + "lib/internal/readline/emitKeypressEvents.js", + "lib/internal/readline/interface.js", + "lib/internal/readline/promises.js", + "lib/internal/readline/utils.js", + "lib/internal/repl.js", + "lib/internal/repl/await.js", + "lib/internal/repl/history.js", + "lib/internal/repl/utils.js", + "lib/internal/socket_list.js", + "lib/internal/socketaddress.js", + "lib/internal/source_map/prepare_stack_trace.js", + "lib/internal/source_map/source_map.js", + "lib/internal/source_map/source_map_cache.js", + "lib/internal/source_map/source_map_cache_map.js", + "lib/internal/stream_base_commons.js", + "lib/internal/streams/add-abort-signal.js", + "lib/internal/streams/compose.js", + "lib/internal/streams/destroy.js", + "lib/internal/streams/duplex.js", + "lib/internal/streams/duplexify.js", + "lib/internal/streams/duplexpair.js", + "lib/internal/streams/end-of-stream.js", + "lib/internal/streams/from.js", + "lib/internal/streams/lazy_transform.js", + "lib/internal/streams/legacy.js", + "lib/internal/streams/operators.js", + "lib/internal/streams/passthrough.js", + "lib/internal/streams/pipeline.js", + "lib/internal/streams/readable.js", + "lib/internal/streams/state.js", + "lib/internal/streams/transform.js", + "lib/internal/streams/utils.js", + "lib/internal/streams/writable.js", + "lib/internal/test/binding.js", + "lib/internal/test/transfer.js", + "lib/internal/test_runner/coverage.js", + "lib/internal/test_runner/harness.js", + "lib/internal/test_runner/mock/loader.js", + "lib/internal/test_runner/mock/mock.js", + "lib/internal/test_runner/mock/mock_timers.js", + "lib/internal/test_runner/reporter/dot.js", + "lib/internal/test_runner/reporter/junit.js", + "lib/internal/test_runner/reporter/lcov.js", + "lib/internal/test_runner/reporter/spec.js", + "lib/internal/test_runner/reporter/tap.js", + "lib/internal/test_runner/reporter/utils.js", + "lib/internal/test_runner/reporter/v8-serializer.js", + "lib/internal/test_runner/runner.js", + "lib/internal/test_runner/snapshot.js", + "lib/internal/test_runner/test.js", + "lib/internal/test_runner/tests_stream.js", + "lib/internal/test_runner/utils.js", + "lib/internal/timers.js", + "lib/internal/tls/secure-context.js", + "lib/internal/tls/secure-pair.js", + "lib/internal/trace_events_async_hooks.js", + "lib/internal/tty.js", + "lib/internal/url.js", + "lib/internal/util.js", + "lib/internal/util/colors.js", + "lib/internal/util/comparisons.js", + "lib/internal/util/debuglog.js", + "lib/internal/util/inspect.js", + "lib/internal/util/inspector.js", + "lib/internal/util/parse_args/parse_args.js", + "lib/internal/util/parse_args/utils.js", + "lib/internal/util/types.js", + "lib/internal/v8/startup_snapshot.js", + "lib/internal/v8_prof_polyfill.js", + "lib/internal/v8_prof_processor.js", + "lib/internal/validators.js", + "lib/internal/vm.js", + "lib/internal/vm/module.js", + "lib/internal/wasm_web_api.js", + "lib/internal/watch_mode/files_watcher.js", + "lib/internal/watchdog.js", + "lib/internal/webidl.js", + "lib/internal/webstorage.js", + "lib/internal/webstreams/adapters.js", + "lib/internal/webstreams/compression.js", + "lib/internal/webstreams/encoding.js", + "lib/internal/webstreams/queuingstrategies.js", + "lib/internal/webstreams/readablestream.js", + "lib/internal/webstreams/transfer.js", + "lib/internal/webstreams/transformstream.js", + "lib/internal/webstreams/util.js", + "lib/internal/webstreams/writablestream.js", + "lib/internal/worker.js", + "lib/internal/worker/io.js", + "lib/internal/worker/js_transferable.js", + "lib/internal/worker/messaging.js", + "lib/module.js", + "lib/net.js", + "lib/os.js", + "lib/path.js", + "lib/path/posix.js", + "lib/path/win32.js", + "lib/perf_hooks.js", + "lib/process.js", + "lib/punycode.js", + "lib/querystring.js", + "lib/readline.js", + "lib/readline/promises.js", + "lib/repl.js", + "lib/sea.js", + "lib/sqlite.js", + "lib/stream.js", + "lib/stream/consumers.js", + "lib/stream/promises.js", + "lib/stream/web.js", + "lib/string_decoder.js", + "lib/sys.js", + "lib/test.js", + "lib/test/reporters.js", + "lib/timers.js", + "lib/timers/promises.js", + "lib/tls.js", + "lib/trace_events.js", + "lib/tty.js", + "lib/url.js", + "lib/util.js", + "lib/util/types.js", + "lib/v8.js", + "lib/vm.js", + "lib/wasi.js", + "lib/worker_threads.js", + "lib/zlib.js", + "deps/v8/tools/splaytree.mjs", + "deps/v8/tools/codemap.mjs", + "deps/v8/tools/consarray.mjs", + "deps/v8/tools/csvparser.mjs", + "deps/v8/tools/profile.mjs", + "deps/v8/tools/profile_view.mjs", + "deps/v8/tools/logreader.mjs", + "deps/v8/tools/arguments.mjs", + "deps/v8/tools/tickprocessor.mjs", + "deps/v8/tools/sourcemap.mjs", + "deps/v8/tools/tickprocessor-driver.mjs", + "deps/acorn/acorn/dist/acorn.js", + "deps/acorn/acorn-walk/dist/walk.js", + "deps/minimatch/index.js", + "deps/cjs-module-lexer/lexer.js", + "deps/cjs-module-lexer/dist/lexer.js", + "deps/undici/undici.js" + ], + "node_sources": [ + "src/api/async_resource.cc", + "src/api/callback.cc", + "src/api/embed_helpers.cc", + "src/api/encoding.cc", + "src/api/environment.cc", + "src/api/exceptions.cc", + "src/api/hooks.cc", + "src/api/utils.cc", + "src/async_context_frame.cc", + "src/async_wrap.cc", + "src/base_object.cc", + "src/cares_wrap.cc", + "src/cleanup_queue.cc", + "src/compile_cache.cc", + "src/connect_wrap.cc", + "src/connection_wrap.cc", + "src/dataqueue/queue.cc", + "src/debug_utils.cc", + "src/embedded_data.cc", + "src/encoding_binding.cc", + "src/env.cc", + "src/fs_event_wrap.cc", + "src/handle_wrap.cc", + "src/heap_utils.cc", + "src/histogram.cc", + "src/internal_only_v8.cc", + "src/js_native_api.h", + "src/js_native_api_types.h", + "src/js_native_api_v8.cc", + "src/js_native_api_v8.h", + "src/js_native_api_v8_internals.h", + "src/js_stream.cc", + "src/json_utils.cc", + "src/js_udp_wrap.cc", + "src/json_parser.h", + "src/json_parser.cc", + "src/module_wrap.cc", + "src/node.cc", + "src/node_api.cc", + "src/node_binding.cc", + "src/node_blob.cc", + "src/node_buffer.cc", + "src/node_builtins.cc", + "src/node_config.cc", + "src/node_constants.cc", + "src/node_contextify.cc", + "src/node_credentials.cc", + "src/node_debug.cc", + "src/node_dir.cc", + "src/node_dotenv.cc", + "src/node_env_var.cc", + "src/node_errors.cc", + "src/node_external_reference.cc", + "src/node_file.cc", + "src/node_http_parser.cc", + "src/node_http2.cc", + "src/node_i18n.cc", + "src/node_main_instance.cc", + "src/node_messaging.cc", + "src/node_metadata.cc", + "src/node_modules.cc", + "src/node_options.cc", + "src/node_os.cc", + "src/node_perf.cc", + "src/node_platform.cc", + "src/node_postmortem_metadata.cc", + "src/node_process_events.cc", + "src/node_process_methods.cc", + "src/node_process_object.cc", + "src/node_realm.cc", + "src/node_report.cc", + "src/node_report_module.cc", + "src/node_report_utils.cc", + "src/node_sea.cc", + "src/node_serdes.cc", + "src/node_shadow_realm.cc", + "src/node_snapshotable.cc", + "src/node_sockaddr.cc", + "src/node_sqlite.cc", + "src/node_stat_watcher.cc", + "src/node_symbols.cc", + "src/node_task_queue.cc", + "src/node_task_runner.cc", + "src/node_trace_events.cc", + "src/node_types.cc", + "src/node_url.cc", + "src/node_util.cc", + "src/node_v8.cc", + "src/node_wasi.cc", + "src/node_wasm_web_api.cc", + "src/node_watchdog.cc", + "src/node_webstorage.cc", + "src/node_worker.cc", + "src/node_zlib.cc", + "src/path.cc", + "src/permission/child_process_permission.cc", + "src/permission/fs_permission.cc", + "src/permission/inspector_permission.cc", + "src/permission/permission.cc", + "src/permission/wasi_permission.cc", + "src/permission/worker_permission.cc", + "src/pipe_wrap.cc", + "src/process_wrap.cc", + "src/signal_wrap.cc", + "src/spawn_sync.cc", + "src/stream_base.cc", + "src/stream_pipe.cc", + "src/stream_wrap.cc", + "src/string_bytes.cc", + "src/string_decoder.cc", + "src/tcp_wrap.cc", + "src/timers.cc", + "src/timer_wrap.cc", + "src/tracing/agent.cc", + "src/tracing/node_trace_buffer.cc", + "src/tracing/node_trace_writer.cc", + "src/tracing/trace_event.cc", + "src/tracing/traced_value.cc", + "src/tty_wrap.cc", + "src/udp_wrap.cc", + "src/util.cc", + "src/uv.cc", + "src/aliased_buffer.h", + "src/aliased_buffer-inl.h", + "src/aliased_struct.h", + "src/aliased_struct-inl.h", + "src/async_context_frame.h", + "src/async_wrap.h", + "src/async_wrap-inl.h", + "src/base_object.h", + "src/base_object-inl.h", + "src/base_object_types.h", + "src/blob_serializer_deserializer.h", + "src/blob_serializer_deserializer-inl.h", + "src/callback_queue.h", + "src/callback_queue-inl.h", + "src/cleanup_queue.h", + "src/cleanup_queue-inl.h", + "src/compile_cache.h", + "src/connect_wrap.h", + "src/connection_wrap.h", + "src/dataqueue/queue.h", + "src/debug_utils.h", + "src/debug_utils-inl.h", + "src/embedded_data.h", + "src/encoding_binding.h", + "src/env_properties.h", + "src/env.h", + "src/env-inl.h", + "src/handle_wrap.h", + "src/histogram.h", + "src/histogram-inl.h", + "src/js_stream.h", + "src/json_utils.h", + "src/large_pages/node_large_page.cc", + "src/large_pages/node_large_page.h", + "src/memory_tracker.h", + "src/memory_tracker-inl.h", + "src/module_wrap.h", + "src/node.h", + "src/node_api.h", + "src/node_api_types.h", + "src/node_binding.h", + "src/node_blob.h", + "src/node_buffer.h", + "src/node_builtins.h", + "src/node_constants.h", + "src/node_context_data.h", + "src/node_contextify.h", + "src/node_debug.h", + "src/node_dir.h", + "src/node_dotenv.h", + "src/node_errors.h", + "src/node_exit_code.h", + "src/node_external_reference.h", + "src/node_file.h", + "src/node_file-inl.h", + "src/node_http_common.h", + "src/node_http_common-inl.h", + "src/node_http2.h", + "src/node_http2_state.h", + "src/node_i18n.h", + "src/node_internals.h", + "src/node_main_instance.h", + "src/node_mem.h", + "src/node_mem-inl.h", + "src/node_messaging.h", + "src/node_metadata.h", + "src/node_mutex.h", + "src/node_modules.h", + "src/node_object_wrap.h", + "src/node_options.h", + "src/node_options-inl.h", + "src/node_perf.h", + "src/node_perf_common.h", + "src/node_platform.h", + "src/node_process.h", + "src/node_process-inl.h", + "src/node_realm.h", + "src/node_realm-inl.h", + "src/node_report.h", + "src/node_revert.h", + "src/node_root_certs.h", + "src/node_sea.h", + "src/node_shadow_realm.h", + "src/node_snapshotable.h", + "src/node_snapshot_builder.h", + "src/node_sockaddr.h", + "src/node_sockaddr-inl.h", + "src/node_sqlite.h", + "src/node_stat_watcher.h", + "src/node_union_bytes.h", + "src/node_url.h", + "src/node_version.h", + "src/node_v8.h", + "src/node_v8_platform-inl.h", + "src/node_wasi.h", + "src/node_watchdog.h", + "src/node_webstorage.h", + "src/node_worker.h", + "src/path.h", + "src/permission/child_process_permission.h", + "src/permission/fs_permission.h", + "src/permission/inspector_permission.h", + "src/permission/permission.h", + "src/permission/wasi_permission.h", + "src/permission/worker_permission.h", + "src/pipe_wrap.h", + "src/req_wrap.h", + "src/req_wrap-inl.h", + "src/spawn_sync.h", + "src/stream_base.h", + "src/stream_base-inl.h", + "src/stream_pipe.h", + "src/stream_wrap.h", + "src/string_bytes.h", + "src/string_decoder.h", + "src/string_decoder-inl.h", + "src/tcp_wrap.h", + "src/timers.h", + "src/tracing/agent.h", + "src/tracing/node_trace_buffer.h", + "src/tracing/node_trace_writer.h", + "src/tracing/trace_event.h", + "src/tracing/trace_event_common.h", + "src/tracing/traced_value.h", + "src/timer_wrap.h", + "src/timer_wrap-inl.h", + "src/tty_wrap.h", + "src/udp_wrap.h", + "src/util.h", + "src/util-inl.h", + "//v8/include/v8.h", + "deps/postject/postject-api.h" + ] +} diff --git a/node.gni b/node.gni index 9dca810decebd75aab427e306b3cc37c80fb55c9..32709b860ccb12d8d1e75342a65dda0b86129b21 100644 --- a/node.gni +++ b/node.gni @@ -5,10 +5,10 @@ # Embedder options. declare_args() { # The location of Node.js in source code tree. - node_path = "//node" + node_path = "//third_party/electron_node" # The location of V8, use the one from node's deps by default. - node_v8_path = "$node_path/deps/v8" + node_v8_path = "//v8" # The NODE_MODULE_VERSION defined in node_version.h. node_module_version = exec_script("$node_path/tools/getmoduleversion.py", [], "value") @@ -38,7 +38,7 @@ declare_args() { node_openssl_system_ca_path = "" # Initialize v8 platform during node.js startup. - node_use_v8_platform = true + node_use_v8_platform = false # Custom build tag. node_tag = "" @@ -58,7 +58,7 @@ declare_args() { # TODO(zcbenz): There are few broken things for now: # 1. cross-os compilation is not supported. # 2. node_mksnapshot crashes when cross-compiling for x64 from arm64. - node_use_node_snapshot = (host_os == target_os) && !(host_cpu == "arm64" && target_cpu == "x64") + node_use_node_snapshot = false } assert(!node_enable_inspector || node_use_openssl, diff --git a/src/node_builtins.cc b/src/node_builtins.cc index 2bc7155f7c075e5a22ece7159a64a1c9ba3d8ac9..48d29a0d05538cd1d992f3f086d826e78d0d8882 100644 --- a/src/node_builtins.cc +++ b/src/node_builtins.cc @@ -775,6 +775,7 @@ void BuiltinLoader::RegisterExternalReferences( registry->Register(GetNatives); RegisterExternalReferencesForInternalizedBuiltinCode(registry); + EmbedderRegisterExternalReferencesForInternalizedBuiltinCode(registry); } } // namespace builtins diff --git a/src/node_builtins.h b/src/node_builtins.h index 1cb85b9058d06555382e565dc32192a9fa48ed9f..cec9be01abd107e8612f70daf19b4834e118ffcf 100644 --- a/src/node_builtins.h +++ b/src/node_builtins.h @@ -74,6 +74,8 @@ using BuiltinCodeCacheMap = // Generated by tools/js2c.py as node_javascript.cc void RegisterExternalReferencesForInternalizedBuiltinCode( ExternalReferenceRegistry* registry); +void EmbedderRegisterExternalReferencesForInternalizedBuiltinCode( + ExternalReferenceRegistry* registry); // Handles compilation and caching of built-in JavaScript modules and // bootstrap scripts, whose source are bundled into the binary as static data. diff --git a/tools/generate_config_gypi.py b/tools/generate_config_gypi.py index 45b3ac5006140fb55aad0e6b78084b753a947a76..8667857107e4f2481fd98032d4333b086fb7b479 100755 --- a/tools/generate_config_gypi.py +++ b/tools/generate_config_gypi.py @@ -21,7 +21,7 @@ import getnapibuildversion GN_RE = re.compile(r'(\w+)\s+=\s+(.*?)$', re.MULTILINE) if sys.platform == 'win32': - GN = 'gn.exe' + GN = 'gn.bat' else: GN = 'gn' diff --git a/tools/generate_gn_filenames_json.py b/tools/generate_gn_filenames_json.py new file mode 100755 index 0000000000000000000000000000000000000000..54b761d91734aead50aeeba8c91a1262531df713 --- /dev/null +++ b/tools/generate_gn_filenames_json.py @@ -0,0 +1,118 @@ +#!/usr/bin/env python3 +import json +import os +import sys + +import install + +from utils import SearchFiles + +def LoadPythonDictionary(path): + file_string = open(path).read() + try: + file_data = eval(file_string, {'__builtins__': None}, None) + except SyntaxError as e: + e.filename = path + raise + except Exception as e: + raise Exception("Unexpected error while reading %s: %s" % (path, str(e))) + + assert isinstance(file_data, dict), "%s does not eval to a dictionary" % path + + return file_data + + +FILENAMES_JSON_HEADER = ''' +// This file is automatically generated by generate_gn_filenames_json.py +// DO NOT EDIT +'''.lstrip() + +SRC_DIR = os.path.abspath(os.path.join(__file__, '..', '..', '..', '..')) + +def get_out_dir(): + out_dir = 'Testing' + override = os.environ.get('ELECTRON_OUT_DIR') + if override is not None: + out_dir = override + return os.path.join(SRC_DIR, 'out', out_dir) + +if __name__ == '__main__': + node_root_dir = os.path.dirname(os.path.dirname(__file__)) + node_gyp_path = os.path.join(node_root_dir, 'node.gyp') + out = {} + node_gyp = LoadPythonDictionary(node_gyp_path) + node_lib_target = next( + t for t in node_gyp['targets'] + if t['target_name'] == '<(node_lib_target_name)') + node_source_blocklist = { + '<@(library_files)', + '<@(deps_files)', + '<@(node_sources)', + 'common.gypi', + 'common_node.gypi', + '<(SHARED_INTERMEDIATE_DIR)/node_javascript.cc', + } + + def filter_v8_files(files): + v8_files = [f for f in files if f.startswith('deps/v8/')] + other_files = [f for f in files if not f.startswith('deps/v8/')] + + for i, f in enumerate(v8_files): + if not f.startswith('deps/v8/tools'): + if f.endswith('js'): + v8_files[i] = f.replace('deps/v8/', '../../v8/', 1) + else: + v8_files[i] = f.replace('deps/v8/', '//v8/') + + if any(f == '<@(node_builtin_shareable_builtins)' for f in other_files): + other_files.remove('<@(node_builtin_shareable_builtins)') + shared_builtins = ['deps/cjs-module-lexer/lexer.js', 'deps/cjs-module-lexer/dist/lexer.js', 'deps/undici/undici.js'] + other_files.extend(shared_builtins) + + return v8_files + other_files + + def filter_fs_files(files): + return [f for f in files if f.startswith('lib/internal/fs/')] + ['lib/fs.js'] + ['lib/fs/promises.js'] + + lib_files = SearchFiles('lib', 'js') + out['library_files'] = filter_v8_files(lib_files) + out['library_files'] += filter_v8_files(node_gyp['variables']['deps_files']) + out['node_sources'] = node_gyp['variables']['node_sources'] + + out['fs_files'] = filter_fs_files(out['library_files']) + # fs files are handled separately + out['library_files'] = [f for f in out['library_files'] if f not in out['fs_files']] + + blocklisted_sources = [ + f for f in node_lib_target['sources'] + if f not in node_source_blocklist] + out['node_sources'] += filter_v8_files(blocklisted_sources) + + out['headers'] = [] + def add_headers(options, files, dest_dir): + if 'src/node.h' in files: + files = [f for f in files if f.endswith('.h') and f != 'src/node_version.h'] + elif any(f.startswith('../../v8/') for f in files): + files = [f.replace('../../v8/', '//v8/', 1) for f in files] + if files: + dir_index = next((i for i, d in enumerate(out['headers']) if d['dest_dir'] == dest_dir), -1) + if (dir_index != -1): + out['headers'][dir_index]['files'] += sorted(files) + else: + hs = {'files': sorted(files), 'dest_dir': dest_dir} + out['headers'].append(hs) + + config_gypi_path = os.path.join(get_out_dir(), 'gen', 'config.gypi') + root_gen_dir = os.path.join(node_root_dir, 'out', 'Release', 'gen') + + options = install.parse_options(['install', '--v8-dir', '../../v8', '--config-gypi-path', config_gypi_path, '--headers-only']) + options.variables['node_use_openssl'] = 'false' + options.variables['node_shared_libuv'] = 'false' + # We generate zlib headers in Electron's BUILD.gn. + options.variables['node_shared_zlib'] = '' + + install.headers(options, add_headers) + with open(os.path.join(node_root_dir, 'filenames.json'), 'w') as f: + f.write(FILENAMES_JSON_HEADER) + f.write(json.dumps(out, sort_keys=True, indent=2, separators=(',', ': '))) + f.write('\n') diff --git a/tools/install.py b/tools/install.py index bf54249b66c0d4e179deaae5a9fd55568e694fe0..57b51b03d237fba4b25aa69a663c88e9541b6cb5 100755 --- a/tools/install.py +++ b/tools/install.py @@ -392,7 +392,7 @@ def parse_options(args): parser.add_argument('--build-dir', help='the location of built binaries', default='out/Release') parser.add_argument('--v8-dir', help='the location of V8', - default='deps/v8') + default='../../v8') parser.add_argument('--config-gypi-path', help='the location of config.gypi', default='config.gypi') parser.add_argument('--is-win', help='build for Windows target', diff --git a/tools/js2c.cc b/tools/js2c.cc old mode 100644 new mode 100755 index a536b5dcd857275d3b02e361bd7d37a939f6b573..b2d5678d58a79774d5aeedc15ac5d5fd786f64bb --- a/tools/js2c.cc +++ b/tools/js2c.cc @@ -30,6 +30,7 @@ namespace js2c { int Main(int argc, char* argv[]); static bool is_verbose = false; +static bool only_js = false; void Debug(const char* format, ...) { va_list arguments; @@ -196,6 +197,7 @@ const char* kTemplate = R"( #include "node_builtins.h" #include "node_external_reference.h" #include "node_internals.h" +#include "node_threadsafe_cow-inl.h" namespace node { @@ -211,7 +213,11 @@ const ThreadsafeCopyOnWrite global_source_map { } // anonymous namespace void BuiltinLoader::LoadJavaScriptSource() { - source_ = global_source_map; + BuiltinSourceMap map = *source_.read(); + BuiltinSourceMap new_map = *global_source_map.read(); + + map.merge(new_map); + source_ = ThreadsafeCopyOnWrite(map); } void RegisterExternalReferencesForInternalizedBuiltinCode( @@ -228,6 +234,45 @@ UnionBytes BuiltinLoader::GetConfig() { } // namespace node )"; +const char* kEmbedderTemplate = R"( +#include "env-inl.h" +#include "node_builtins.h" +#include "node_external_reference.h" +#include "node_internals.h" +#include "node_threadsafe_cow-inl.h" + +namespace node { + +namespace builtins { + +%.*s +namespace { +const ThreadsafeCopyOnWrite global_source_map { + BuiltinSourceMap { +%.*s + } // BuiltinSourceMap + +}; // ThreadsafeCopyOnWrite +} // anonymous namespace + +void BuiltinLoader::LoadEmbedderJavaScriptSource() { + BuiltinSourceMap map = *source_.read(); + BuiltinSourceMap new_map = *global_source_map.read(); + + map.merge(new_map); + source_ = ThreadsafeCopyOnWrite(map); +} + +void EmbedderRegisterExternalReferencesForInternalizedBuiltinCode( + ExternalReferenceRegistry* registry) { +%.*s +} + +} // namespace builtins + +} // namespace node +)"; + Fragment Format(const Fragments& definitions, const Fragments& initializers, const Fragments& registrations) { @@ -237,13 +282,12 @@ Fragment Format(const Fragments& definitions, size_t init_size = init_buf.size(); std::vector reg_buf = Join(registrations, "\n"); size_t reg_size = reg_buf.size(); - - size_t result_size = - def_size + init_size + reg_size + strlen(kTemplate) + 100; + size_t result_size = def_size + init_size + reg_size + + strlen(only_js ? kEmbedderTemplate: kTemplate) + 300; std::vector result(result_size, 0); int r = snprintf(result.data(), result_size, - kTemplate, + only_js ? kEmbedderTemplate: kTemplate, static_cast(def_buf.size()), def_buf.data(), static_cast(init_buf.size()), @@ -834,12 +878,15 @@ int JS2C(const FileList& js_files, } } + if (!only_js) { assert(FilenameIsConfigGypi(config)); // "config.gypi" -> config_raw. int r = AddGypi("config", config, &definitions); if (r != 0) { return r; } + } + Fragment out = Format(definitions, initializers, registrations); return WriteIfChanged(out, dest); } @@ -865,6 +912,8 @@ int Main(int argc, char* argv[]) { std::string arg(argv[i]); if (arg == "--verbose") { is_verbose = true; + } else if (arg == "--only-js") { + only_js = true; } else if (arg == "--root") { if (i == argc - 1) { fprintf(stderr, "--root must be followed by a path\n"); @@ -913,6 +962,14 @@ int Main(int argc, char* argv[]) { } } + if (only_js) { + auto js_it = file_map.find(".js"); + + assert(file_map.size() == 1); + assert(js_it != file_map.end()); + + return JS2C(js_it->second, FileList(), std::string(), output); + } else { // Should have exactly 3 types: `.js`, `.mjs` and `.gypi`. assert(file_map.size() == 3); auto gypi_it = file_map.find(".gypi"); @@ -939,6 +996,7 @@ int Main(int argc, char* argv[]) { std::sort(mjs_it->second.begin(), mjs_it->second.end()); return JS2C(js_it->second, mjs_it->second, gypi_it->second[0], output); + } } } // namespace js2c } // namespace node diff --git a/tools/search_files.py b/tools/search_files.py index 65d0e1be42f0a85418491ebb548278cf431aa6a0..d4a31342f1c6107b029394c6e1d00a1d1e877e03 100755 --- a/tools/search_files.py +++ b/tools/search_files.py @@ -14,6 +14,7 @@ if __name__ == '__main__': try: files = SearchFiles(*sys.argv[2:]) files = [ os.path.relpath(x, sys.argv[1]) for x in files ] + files = [os.path.normpath(x).replace(os.sep, '/') for x in files] print('\n'.join(files)) except Exception as e: print(str(e)) diff --git a/unofficial.gni b/unofficial.gni index c3b311e4a7f5444b07d4d7028d4621806959804e..de6ff5548ca5282199b7d85c11941c1fa351a9d9 100644 --- a/unofficial.gni +++ b/unofficial.gni @@ -139,6 +139,7 @@ template("node_gn_build") { public_deps = [ "deps/ada", "deps/uv", + "//electron:electron_js2c", "deps/simdjson", "$node_v8_path", ] @@ -150,7 +151,6 @@ template("node_gn_build") { "deps/llhttp", "deps/nbytes", "deps/nghttp2", - "deps/ngtcp2", "deps/postject", "deps/simdutf", "deps/sqlite", @@ -159,7 +159,11 @@ template("node_gn_build") { "$node_v8_path:v8_libplatform", ] + cflags_cc = [ "-Wno-unguarded-availability-new" ] + sources = [ + "src/node_snapshot_stub.cc", + "$root_gen_dir/electron_natives.cc", "$target_gen_dir/node_javascript.cc", ] + gypi_values.node_sources @@ -178,8 +182,10 @@ template("node_gn_build") { deps += [ "//third_party/icu" ] } if (node_use_openssl) { - deps += [ "deps/ncrypto" ] - public_deps += [ "deps/openssl" ] + deps += [ + "deps/ncrypto", + "//third_party/boringssl" + ] sources += gypi_values.node_crypto_sources } if (node_enable_inspector) { @@ -276,6 +282,7 @@ template("node_gn_build") { } executable("node_js2c") { + defines = [] deps = [ "deps/simdutf", "deps/uv", @@ -286,26 +293,75 @@ template("node_gn_build") { "src/embedded_data.cc", "src/embedded_data.h", ] - include_dirs = [ "src" ] + include_dirs = [ "src", "tools" ] + + if (!is_win) { + defines += [ "NODE_JS2C_USE_STRING_LITERALS" ] + } + } + + node_deps_files = gypi_values.deps_files + node_builtin_shareable_builtins + node_library_files = exec_script("./tools/search_files.py", + [ rebase_path(".", root_build_dir), + rebase_path("lib", root_build_dir), + "js" ], + "list lines") + + fs_files = [ + "lib/internal/fs/cp/cp-sync.js", + "lib/internal/fs/cp/cp.js", + "lib/internal/fs/dir.js", + "lib/internal/fs/glob.js", + "lib/internal/fs/promises.js", + "lib/internal/fs/read/context.js", + "lib/internal/fs/recursive_watch.js", + "lib/internal/fs/rimraf.js", + "lib/internal/fs/streams.js", + "lib/internal/fs/sync_write_stream.js", + "lib/internal/fs/utils.js", + "lib/internal/fs/watchers.js", + "lib/fs.js", + "lib/fs/promises.js" + ] + + original_fs_files = [] + foreach(file, fs_files) { + original_fs_files += [string_replace(string_replace(string_replace(file, "internal/fs/", "internal/original-fs/"), "lib/fs.js", "lib/original-fs.js"), "lib/fs/", "lib/original-fs/")] + } + + copy("node_js2c_inputs") { + sources = node_deps_files + node_library_files + outputs = [ + "$target_gen_dir/js2c_inputs/{{source_target_relative}}", + ] + } + + action("node_js2c_original_fs") { + script = "//electron/script/node/generate_original_fs.py" + inputs = fs_files + deps = [ ":node_js2c_inputs" ] + + outputs = [] + foreach(file, original_fs_files) { + outputs += ["$target_gen_dir/js2c_inputs/$file"] + } + + args = [rebase_path("$target_gen_dir/js2c_inputs")] + fs_files } action("run_node_js2c") { - script = "$node_v8_path/tools/run.py" + script = "//electron/build/run-in-dir.py" deps = [ + ":node_js2c_original_fs", ":node_js2c($host_toolchain)", ":generate_config_gypi", ] - node_deps_files = gypi_values.deps_files + node_builtin_shareable_builtins - node_library_files = exec_script("./tools/search_files.py", - [ rebase_path(".", root_build_dir), - rebase_path("lib", root_build_dir), - "js" ], - "list lines") - + config_gypi = [ "$target_gen_dir/config.gypi" ] inputs = node_library_files + node_deps_files + - [ "$target_gen_dir/config.gypi" ] + get_target_outputs(":node_js2c_original_fs") + + config_gypi outputs = [ "$target_gen_dir/node_javascript.cc" ] # Get the path to node_js2c executable of the host toolchain. @@ -319,11 +375,11 @@ template("node_gn_build") { get_label_info(":node_js2c($host_toolchain)", "name") + host_executable_suffix - args = [ rebase_path(node_js2c_path), - rebase_path("$target_gen_dir/node_javascript.cc"), - "--root", rebase_path("."), - "lib", rebase_path("$target_gen_dir/config.gypi") ] + - node_deps_files + args = [ rebase_path("$target_gen_dir/js2c_inputs"), + rebase_path(node_js2c_path), + rebase_path("$target_gen_dir/node_javascript.cc")] + + rebase_path(config_gypi) + node_deps_files + + original_fs_files + node_library_files } executable("node_cctest") {