refactor: dynamically search defines from node (#30563)

This commit is contained in:
Cheng Zhao 2021-08-19 05:34:15 +09:00 committed by GitHub
parent ec13a0b0e6
commit 8699124397
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
8 changed files with 59 additions and 109 deletions

View file

@ -307,6 +307,23 @@ action("electron_fuses") {
args = rebase_path(outputs) args = rebase_path(outputs)
} }
action("electron_generate_node_defines") {
script = "build/generate_node_defines.py"
inputs = [
"//third_party/electron_node/src/tracing/trace_event_common.h",
"//third_party/electron_node/src/tracing/trace_event.h",
"//third_party/electron_node/src/util.h",
]
outputs = [
"$target_gen_dir/push_and_undef_node_defines.h",
"$target_gen_dir/pop_node_defines.h",
]
args = [ rebase_path(target_gen_dir) ] + rebase_path(inputs)
}
source_set("electron_lib") { source_set("electron_lib") {
configs += [ "//v8:external_startup_data" ] configs += [ "//v8:external_startup_data" ]
configs += [ "//third_party/electron_node:node_internals" ] configs += [ "//third_party/electron_node:node_internals" ]
@ -318,6 +335,7 @@ source_set("electron_lib") {
deps = [ deps = [
":electron_fuses", ":electron_fuses",
":electron_generate_node_defines",
":electron_js2c", ":electron_js2c",
":electron_version_header", ":electron_version_header",
":resources", ":resources",

34
build/generate_node_defines.py Executable file
View file

@ -0,0 +1,34 @@
import os
import re
import sys
DEFINE_EXTRACT_REGEX = re.compile('^ *# *define (\w*)', re.MULTILINE)
def main(outDir, headers):
defines = []
for filename in headers:
with open(filename, 'r') as f:
content = f.read()
defines += read_defines(content)
push_and_undef = ''
for define in defines:
push_and_undef += '#pragma push_macro("%s")\n' % define
push_and_undef += '#undef %s\n' % define
with open(os.path.join(outDir, 'push_and_undef_node_defines.h'), 'w') as o:
o.write(push_and_undef)
pop = ''
for define in defines:
pop += '#pragma pop_macro("%s")\n' % define
with open(os.path.join(outDir, 'pop_node_defines.h'), 'w') as o:
o.write(pop)
def read_defines(content):
defines = []
for match in DEFINE_EXTRACT_REGEX.finditer(content):
defines.append(match.group(1))
return defines
if __name__ == '__main__':
main(sys.argv[1], sys.argv[2:])

View file

@ -10,7 +10,6 @@ feat_add_new_built_with_electron_variable_to_config_gypi.patch
feat_add_flags_for_low-level_hooks_and_exceptions.patch feat_add_flags_for_low-level_hooks_and_exceptions.patch
fix_expose_tracing_agent_and_use_tracing_tracingcontroller_instead.patch fix_expose_tracing_agent_and_use_tracing_tracingcontroller_instead.patch
pass_all_globals_through_require.patch pass_all_globals_through_require.patch
fixme_comment_trace_event_macro.patch
build_modify_js2c_py_to_allow_injection_of_original-fs_and_custom_embedder_js.patch build_modify_js2c_py_to_allow_injection_of_original-fs_and_custom_embedder_js.patch
refactor_allow_embedder_overriding_of_internal_fs_calls.patch refactor_allow_embedder_overriding_of_internal_fs_calls.patch
chore_allow_the_node_entrypoint_to_be_a_builtin_module.patch chore_allow_the_node_entrypoint_to_be_a_builtin_module.patch

View file

@ -1,26 +0,0 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Nitish Sakhawalkar <nitsakh@icloud.com>
Date: Tue, 26 Mar 2019 11:28:05 -0700
Subject: fixme: Comment trace event macro
This broke the build at some point. Does it still? We should probably remove
this patch and find out!
diff --git a/src/node_internals.h b/src/node_internals.h
index 8f7929994f3243fbd58b47374dfcadafb1feda8f..c333dc3464d2a23437fa22659d38dd17b6678112 100644
--- a/src/node_internals.h
+++ b/src/node_internals.h
@@ -386,10 +386,11 @@ class TraceEventScope {
TraceEventScope(const char* category,
const char* name,
void* id) : category_(category), name_(name), id_(id) {
- TRACE_EVENT_NESTABLE_ASYNC_BEGIN0(category_, name_, id_);
+ // TRACE_EVENT_NESTABLE_ASYNC_BEGIN0(category_, name_, id_);
+ (void) category_; (void)name_; (void)id_;
}
~TraceEventScope() {
- TRACE_EVENT_NESTABLE_ASYNC_END0(category_, name_, id_);
+ // TRACE_EVENT_NESTABLE_ASYNC_END0(category_, name_, id_);
}
private:

View file

@ -212,7 +212,7 @@ int NodeMain(int argc, char* argv[]) {
env = node::CreateEnvironment(isolate_data, gin_env.context(), env = node::CreateEnvironment(isolate_data, gin_env.context(),
result.args, result.exec_args); result.args, result.exec_args);
CHECK_NOT_NULL(env); CHECK_NE(nullptr, env);
node::IsolateSettings is; node::IsolateSettings is;
node::SetIsolateUpForNode(isolate, is); node::SetIsolateUpForNode(isolate, is);

View file

@ -21,7 +21,6 @@
#include "shell/browser/microtasks_runner.h" #include "shell/browser/microtasks_runner.h"
#include "shell/common/gin_helper/cleaned_up_at_exit.h" #include "shell/common/gin_helper/cleaned_up_at_exit.h"
#include "shell/common/node_includes.h" #include "shell/common/node_includes.h"
#include "tracing/trace_event.h"
namespace { namespace {
v8::Isolate* g_isolate; v8::Isolate* g_isolate;

View file

@ -5,109 +5,35 @@
#ifndef SHELL_COMMON_NODE_INCLUDES_H_ #ifndef SHELL_COMMON_NODE_INCLUDES_H_
#define SHELL_COMMON_NODE_INCLUDES_H_ #define SHELL_COMMON_NODE_INCLUDES_H_
#include "base/check.h"
// Include common headers for using node APIs. // Include common headers for using node APIs.
#ifdef NODE_SHARED_MODE #ifdef NODE_SHARED_MODE
#define BUILDING_NODE_EXTENSION #define BUILDING_NODE_EXTENSION
#endif #endif
// The following define makes sure that we do not include the macros
// again. But we still need the tracing functions, so declaring them.
#define SRC_TRACING_TRACE_EVENT_H_
#pragma push_macro("ASSERT")
#pragma push_macro("CHECK")
#pragma push_macro("CHECK_EQ")
#pragma push_macro("CHECK_GE")
#pragma push_macro("CHECK_GT")
#pragma push_macro("CHECK_LE")
#pragma push_macro("CHECK_LT")
#pragma push_macro("CHECK_NE")
#pragma push_macro("DCHECK")
#pragma push_macro("DCHECK_EQ")
#pragma push_macro("DCHECK_GE")
#pragma push_macro("DCHECK_GT")
#pragma push_macro("DCHECK_LE")
#pragma push_macro("DCHECK_LT")
#pragma push_macro("DCHECK_NE")
#pragma push_macro("DISALLOW_COPY_AND_ASSIGN")
#pragma push_macro("LIKELY")
#pragma push_macro("NO_RETURN")
#pragma push_macro("UNLIKELY")
#undef ASSERT
#undef CHECK
#undef CHECK_EQ
#undef CHECK_GE
#undef CHECK_GT
#undef CHECK_LE
#undef CHECK_LT
#undef CHECK_NE
#undef DCHECK
#undef DCHECK_EQ
#undef DCHECK_GE
#undef DCHECK_GT
#undef DCHECK_LE
#undef DCHECK_LT
#undef DCHECK_NE
#undef DISALLOW_COPY_AND_ASSIGN
#undef LIKELY
#undef NO_RETURN
#undef UNLIKELY
#undef debug_string // This is defined in macOS SDK in AssertMacros.h. #undef debug_string // This is defined in macOS SDK in AssertMacros.h.
#undef require_string // This is defined in macOS SDK in AssertMacros.h. #undef require_string // This is defined in macOS SDK in AssertMacros.h.
#include "electron/push_and_undef_node_defines.h"
#include "env-inl.h" #include "env-inl.h"
#include "env.h" #include "env.h"
#include "node.h" #include "node.h"
#include "node_buffer.h" #include "node_buffer.h"
#include "node_errors.h" #include "node_errors.h"
#include "node_internals.h" #include "node_internals.h"
#include "node_native_module_env.h"
#include "node_options-inl.h" #include "node_options-inl.h"
#include "node_options.h" #include "node_options.h"
#include "node_platform.h" #include "node_platform.h"
#include "tracing/agent.h" #include "tracing/agent.h"
#include "electron/pop_node_defines.h"
// Alternative to NODE_MODULE_CONTEXT_AWARE_X. // Alternative to NODE_MODULE_CONTEXT_AWARE_X.
// Allows to explicitly register builtin modules instead of using // Allows to explicitly register builtin modules instead of using
// __attribute__((constructor)). // __attribute__((constructor)).
#define NODE_LINKED_MODULE_CONTEXT_AWARE(modname, regfunc) \ #define NODE_LINKED_MODULE_CONTEXT_AWARE(modname, regfunc) \
NODE_MODULE_CONTEXT_AWARE_CPP(modname, regfunc, nullptr, NM_F_LINKED) NODE_MODULE_CONTEXT_AWARE_CPP(modname, regfunc, nullptr, NM_F_LINKED)
#pragma pop_macro("ASSERT")
#pragma pop_macro("CHECK")
#pragma pop_macro("CHECK_EQ")
#pragma pop_macro("CHECK_GE")
#pragma pop_macro("CHECK_GT")
#pragma pop_macro("CHECK_LE")
#pragma pop_macro("CHECK_LT")
#pragma pop_macro("CHECK_NE")
#pragma pop_macro("DCHECK")
#pragma pop_macro("DCHECK_EQ")
#pragma pop_macro("DCHECK_GE")
#pragma pop_macro("DCHECK_GT")
#pragma pop_macro("DCHECK_LE")
#pragma pop_macro("DCHECK_LT")
#pragma pop_macro("DCHECK_NE")
#pragma pop_macro("DISALLOW_COPY_AND_ASSIGN")
#pragma pop_macro("LIKELY")
#pragma pop_macro("NO_RETURN")
#pragma pop_macro("UNLIKELY")
namespace node {
namespace tracing {
class TraceEventHelper {
public:
static v8::TracingController* GetTracingController();
static node::tracing::Agent* GetAgent();
static void SetAgent(node::tracing::Agent* agent);
};
} // namespace tracing
} // namespace node
#endif // SHELL_COMMON_NODE_INCLUDES_H_ #endif // SHELL_COMMON_NODE_INCLUDES_H_

View file

@ -3,9 +3,9 @@
// found in the LICENSE file. // found in the LICENSE file.
#include "shell/common/node_util.h" #include "shell/common/node_util.h"
#include "base/logging.h" #include "base/logging.h"
#include "shell/common/node_includes.h" #include "shell/common/node_includes.h"
#include "third_party/electron_node/src/node_native_module_env.h"
namespace electron { namespace electron {