From 5aaf666b3b82a66485bea6a6b59fbfc838192e2f Mon Sep 17 00:00:00 2001 From: Refael Ackermann Date: Fri, 19 Apr 2019 09:43:02 -0400 Subject: [PATCH] build: improve embedded code-cache detection PR-URL: https://github.com/nodejs/node/pull/27311 Reviewed-By: Joyee Cheung Reviewed-By: Richard Lau --- configure.py | 4 +++- lib/internal/bootstrap/node.js | 3 ++- src/node_code_cache_stub.cc | 3 ++- src/node_config.cc | 6 +++++- src/node_native_module_env.h | 2 ++ test/parallel/test-code-cache.js | 2 +- test/parallel/test-process-features.js | 3 ++- test/sequential/test-cpu-prof.js | 3 +-- tools/code_cache/cache_builder.cc | 3 +++ 9 files changed, 21 insertions(+), 8 deletions(-) diff --git a/configure.py b/configure.py index a3a412e3a7d542..1a0819e74113bc 100755 --- a/configure.py +++ b/configure.py @@ -1051,7 +1051,9 @@ def configure_node(o): o['variables']['debug_nghttp2'] = 'false' o['variables']['node_no_browser_globals'] = b(options.no_browser_globals) - o['variables']['node_code_cache_path'] = 'yes' + # TODO(refack): fix this when implementing embedded code-cache when cross-compiling. + if o['variables']['want_separate_host_toolset'] == 0: + o['variables']['node_code_cache_path'] = 'yes' o['variables']['node_shared'] = b(options.shared) node_module_version = getmoduleversion.get_version() diff --git a/lib/internal/bootstrap/node.js b/lib/internal/bootstrap/node.js index a9fff289371e91..65b9c403afdf11 100644 --- a/lib/internal/bootstrap/node.js +++ b/lib/internal/bootstrap/node.js @@ -244,7 +244,8 @@ Object.defineProperty(process, 'features', { tls_alpn: hasOpenSSL, tls_sni: hasOpenSSL, tls_ocsp: hasOpenSSL, - tls: hasOpenSSL + tls: hasOpenSSL, + cached_builtins: config.hasCachedBuiltins, } }); diff --git a/src/node_code_cache_stub.cc b/src/node_code_cache_stub.cc index 021910e8298b63..2dd6d8beb9e17e 100644 --- a/src/node_code_cache_stub.cc +++ b/src/node_code_cache_stub.cc @@ -1,4 +1,3 @@ - #include "node_native_module_env.h" // This is supposed to be generated by tools/generate_code_cache.js @@ -7,6 +6,8 @@ namespace node { namespace native_module { +const bool has_code_cache = false; + // The generated source code would insert pairs // into NativeModuleLoader::instance.code_cache_. void NativeModuleEnv::InitializeCodeCache() {} diff --git a/src/node_config.cc b/src/node_config.cc index c3c962bd8869af..389bd5aa5679de 100644 --- a/src/node_config.cc +++ b/src/node_config.cc @@ -1,6 +1,7 @@ #include "env-inl.h" #include "node.h" #include "node_i18n.h" +#include "node_native_module_env.h" #include "node_options.h" #include "util-inl.h" @@ -73,11 +74,14 @@ static void Initialize(Local target, READONLY_PROPERTY(target, "bits", - Number::New(env->isolate(), 8 * sizeof(intptr_t))); + Number::New(isolate, 8 * sizeof(intptr_t))); #if defined HAVE_DTRACE || defined HAVE_ETW READONLY_TRUE_PROPERTY(target, "hasDtrace"); #endif + + READONLY_PROPERTY(target, "hasCachedBuiltins", + v8::Boolean::New(isolate, native_module::has_code_cache)); } // InitConfig } // namespace node diff --git a/src/node_native_module_env.h b/src/node_native_module_env.h index 1852d9b139d7b0..f662c67be50d40 100644 --- a/src/node_native_module_env.h +++ b/src/node_native_module_env.h @@ -10,6 +10,8 @@ class Environment; namespace native_module { +extern const bool has_code_cache; + class NativeModuleEnv { public: static void Initialize(v8::Local target, diff --git a/test/parallel/test-code-cache.js b/test/parallel/test-code-cache.js index f120b76af27b68..626fbfb518e3be 100644 --- a/test/parallel/test-code-cache.js +++ b/test/parallel/test-code-cache.js @@ -31,7 +31,7 @@ const loadedModules = process.moduleLoadList // Cross-compiled binaries do not have code cache, verifies that the builtins // are all compiled without cache and we are doing the bookkeeping right. -if (process.config.variables.want_separate_host_toolset === 1) { +if (!process.features.cached_builtins) { console.log('The binary is not configured with code cache'); if (isMainThread) { assert.deepStrictEqual(compiledWithCache, new Set()); diff --git a/test/parallel/test-process-features.js b/test/parallel/test-process-features.js index a24d366ba8e30a..3b4677c5617fa0 100644 --- a/test/parallel/test-process-features.js +++ b/test/parallel/test-process-features.js @@ -13,7 +13,8 @@ assert.deepStrictEqual(keys, new Set([ 'tls_alpn', 'tls_sni', 'tls_ocsp', - 'tls' + 'tls', + 'cached_builtins', ])); for (const key of keys) { diff --git a/test/sequential/test-cpu-prof.js b/test/sequential/test-cpu-prof.js index ffaa0e9b1b8001..726f99b799db31 100644 --- a/test/sequential/test-cpu-prof.js +++ b/test/sequential/test-cpu-prof.js @@ -3,8 +3,7 @@ // This tests that --cpu-prof, --cpu-prof-dir and --cpu-prof-name works. const common = require('../common'); -if (process.features.debug && - process.config.variables.node_code_cache_path === 'yes') { +if (process.features.debug && process.features.cached_builtins) { // FIXME(joyeecheung): the profiler crashes when code cache // is enabled in debug builds. common.skip('--cpu-prof does not work in debug builds with code cache'); diff --git a/tools/code_cache/cache_builder.cc b/tools/code_cache/cache_builder.cc index 8d0fb26d7e7cb0..92755245ada5d6 100644 --- a/tools/code_cache/cache_builder.cc +++ b/tools/code_cache/cache_builder.cc @@ -78,6 +78,9 @@ static std::string GenerateCodeCache( namespace node { namespace native_module { + +const bool has_code_cache = true; + )"; size_t total = 0;