From 8699124397bfb4e5799384d7c0008d3b20e0ef95 Mon Sep 17 00:00:00 2001 From: Cheng Zhao Date: Thu, 19 Aug 2021 05:34:15 +0900 Subject: [PATCH] refactor: dynamically search defines from node (#30563) --- BUILD.gn | 18 ++++ build/generate_node_defines.py | 34 ++++++++ patches/node/.patches | 1 - .../fixme_comment_trace_event_macro.patch | 26 ------ shell/app/node_main.cc | 2 +- shell/browser/javascript_environment.cc | 1 - shell/common/node_includes.h | 84 ++----------------- shell/common/node_util.cc | 2 +- 8 files changed, 59 insertions(+), 109 deletions(-) create mode 100755 build/generate_node_defines.py delete mode 100644 patches/node/fixme_comment_trace_event_macro.patch diff --git a/BUILD.gn b/BUILD.gn index e89984966f43..de90247359e9 100644 --- a/BUILD.gn +++ b/BUILD.gn @@ -307,6 +307,23 @@ action("electron_fuses") { 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") { configs += [ "//v8:external_startup_data" ] configs += [ "//third_party/electron_node:node_internals" ] @@ -318,6 +335,7 @@ source_set("electron_lib") { deps = [ ":electron_fuses", + ":electron_generate_node_defines", ":electron_js2c", ":electron_version_header", ":resources", diff --git a/build/generate_node_defines.py b/build/generate_node_defines.py new file mode 100755 index 000000000000..f2004abb9fe8 --- /dev/null +++ b/build/generate_node_defines.py @@ -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:]) diff --git a/patches/node/.patches b/patches/node/.patches index fb143a8de5dd..2f1edd25915f 100644 --- a/patches/node/.patches +++ b/patches/node/.patches @@ -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 fix_expose_tracing_agent_and_use_tracing_tracingcontroller_instead.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 refactor_allow_embedder_overriding_of_internal_fs_calls.patch chore_allow_the_node_entrypoint_to_be_a_builtin_module.patch diff --git a/patches/node/fixme_comment_trace_event_macro.patch b/patches/node/fixme_comment_trace_event_macro.patch deleted file mode 100644 index dcb9e1f79476..000000000000 --- a/patches/node/fixme_comment_trace_event_macro.patch +++ /dev/null @@ -1,26 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Nitish Sakhawalkar -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: diff --git a/shell/app/node_main.cc b/shell/app/node_main.cc index 0cd85229a104..845788da58ed 100644 --- a/shell/app/node_main.cc +++ b/shell/app/node_main.cc @@ -212,7 +212,7 @@ int NodeMain(int argc, char* argv[]) { env = node::CreateEnvironment(isolate_data, gin_env.context(), result.args, result.exec_args); - CHECK_NOT_NULL(env); + CHECK_NE(nullptr, env); node::IsolateSettings is; node::SetIsolateUpForNode(isolate, is); diff --git a/shell/browser/javascript_environment.cc b/shell/browser/javascript_environment.cc index 7666126f035b..f6034d4ee819 100644 --- a/shell/browser/javascript_environment.cc +++ b/shell/browser/javascript_environment.cc @@ -21,7 +21,6 @@ #include "shell/browser/microtasks_runner.h" #include "shell/common/gin_helper/cleaned_up_at_exit.h" #include "shell/common/node_includes.h" -#include "tracing/trace_event.h" namespace { v8::Isolate* g_isolate; diff --git a/shell/common/node_includes.h b/shell/common/node_includes.h index 05b655f893c1..91904db21af8 100644 --- a/shell/common/node_includes.h +++ b/shell/common/node_includes.h @@ -5,109 +5,35 @@ #ifndef SHELL_COMMON_NODE_INCLUDES_H_ #define SHELL_COMMON_NODE_INCLUDES_H_ -#include "base/check.h" - // Include common headers for using node APIs. #ifdef NODE_SHARED_MODE #define BUILDING_NODE_EXTENSION #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 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.h" #include "node.h" #include "node_buffer.h" #include "node_errors.h" #include "node_internals.h" +#include "node_native_module_env.h" #include "node_options-inl.h" #include "node_options.h" #include "node_platform.h" #include "tracing/agent.h" +#include "electron/pop_node_defines.h" + // Alternative to NODE_MODULE_CONTEXT_AWARE_X. // Allows to explicitly register builtin modules instead of using // __attribute__((constructor)). #define NODE_LINKED_MODULE_CONTEXT_AWARE(modname, regfunc) \ 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_ diff --git a/shell/common/node_util.cc b/shell/common/node_util.cc index 6f69452cb3b5..09ae24a66ee8 100644 --- a/shell/common/node_util.cc +++ b/shell/common/node_util.cc @@ -3,9 +3,9 @@ // found in the LICENSE file. #include "shell/common/node_util.h" + #include "base/logging.h" #include "shell/common/node_includes.h" -#include "third_party/electron_node/src/node_native_module_env.h" namespace electron {