build: improve embedded code-cache detection

PR-URL: https://github.com/nodejs/node/pull/27311
Reviewed-By: Joyee Cheung <joyeec9h3@gmail.com>
Reviewed-By: Richard Lau <riclau@uk.ibm.com>
This commit is contained in:
Refael Ackermann 2019-04-19 09:43:02 -04:00
parent 49d3d11ba7
commit 5aaf666b3b
9 changed files with 21 additions and 8 deletions

View File

@ -1051,7 +1051,9 @@ def configure_node(o):
o['variables']['debug_nghttp2'] = 'false' o['variables']['debug_nghttp2'] = 'false'
o['variables']['node_no_browser_globals'] = b(options.no_browser_globals) 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) o['variables']['node_shared'] = b(options.shared)
node_module_version = getmoduleversion.get_version() node_module_version = getmoduleversion.get_version()

View File

@ -244,7 +244,8 @@ Object.defineProperty(process, 'features', {
tls_alpn: hasOpenSSL, tls_alpn: hasOpenSSL,
tls_sni: hasOpenSSL, tls_sni: hasOpenSSL,
tls_ocsp: hasOpenSSL, tls_ocsp: hasOpenSSL,
tls: hasOpenSSL tls: hasOpenSSL,
cached_builtins: config.hasCachedBuiltins,
} }
}); });

View File

@ -1,4 +1,3 @@
#include "node_native_module_env.h" #include "node_native_module_env.h"
// This is supposed to be generated by tools/generate_code_cache.js // This is supposed to be generated by tools/generate_code_cache.js
@ -7,6 +6,8 @@
namespace node { namespace node {
namespace native_module { namespace native_module {
const bool has_code_cache = false;
// The generated source code would insert <std::string, UnionString> pairs // The generated source code would insert <std::string, UnionString> pairs
// into NativeModuleLoader::instance.code_cache_. // into NativeModuleLoader::instance.code_cache_.
void NativeModuleEnv::InitializeCodeCache() {} void NativeModuleEnv::InitializeCodeCache() {}

View File

@ -1,6 +1,7 @@
#include "env-inl.h" #include "env-inl.h"
#include "node.h" #include "node.h"
#include "node_i18n.h" #include "node_i18n.h"
#include "node_native_module_env.h"
#include "node_options.h" #include "node_options.h"
#include "util-inl.h" #include "util-inl.h"
@ -73,11 +74,14 @@ static void Initialize(Local<Object> target,
READONLY_PROPERTY(target, READONLY_PROPERTY(target,
"bits", "bits",
Number::New(env->isolate(), 8 * sizeof(intptr_t))); Number::New(isolate, 8 * sizeof(intptr_t)));
#if defined HAVE_DTRACE || defined HAVE_ETW #if defined HAVE_DTRACE || defined HAVE_ETW
READONLY_TRUE_PROPERTY(target, "hasDtrace"); READONLY_TRUE_PROPERTY(target, "hasDtrace");
#endif #endif
READONLY_PROPERTY(target, "hasCachedBuiltins",
v8::Boolean::New(isolate, native_module::has_code_cache));
} // InitConfig } // InitConfig
} // namespace node } // namespace node

View File

@ -10,6 +10,8 @@ class Environment;
namespace native_module { namespace native_module {
extern const bool has_code_cache;
class NativeModuleEnv { class NativeModuleEnv {
public: public:
static void Initialize(v8::Local<v8::Object> target, static void Initialize(v8::Local<v8::Object> target,

View File

@ -31,7 +31,7 @@ const loadedModules = process.moduleLoadList
// Cross-compiled binaries do not have code cache, verifies that the builtins // Cross-compiled binaries do not have code cache, verifies that the builtins
// are all compiled without cache and we are doing the bookkeeping right. // 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'); console.log('The binary is not configured with code cache');
if (isMainThread) { if (isMainThread) {
assert.deepStrictEqual(compiledWithCache, new Set()); assert.deepStrictEqual(compiledWithCache, new Set());

View File

@ -13,7 +13,8 @@ assert.deepStrictEqual(keys, new Set([
'tls_alpn', 'tls_alpn',
'tls_sni', 'tls_sni',
'tls_ocsp', 'tls_ocsp',
'tls' 'tls',
'cached_builtins',
])); ]));
for (const key of keys) { for (const key of keys) {

View File

@ -3,8 +3,7 @@
// This tests that --cpu-prof, --cpu-prof-dir and --cpu-prof-name works. // This tests that --cpu-prof, --cpu-prof-dir and --cpu-prof-name works.
const common = require('../common'); const common = require('../common');
if (process.features.debug && if (process.features.debug && process.features.cached_builtins) {
process.config.variables.node_code_cache_path === 'yes') {
// FIXME(joyeecheung): the profiler crashes when code cache // FIXME(joyeecheung): the profiler crashes when code cache
// is enabled in debug builds. // is enabled in debug builds.
common.skip('--cpu-prof does not work in debug builds with code cache'); common.skip('--cpu-prof does not work in debug builds with code cache');

View File

@ -78,6 +78,9 @@ static std::string GenerateCodeCache(
namespace node { namespace node {
namespace native_module { namespace native_module {
const bool has_code_cache = true;
)"; )";
size_t total = 0; size_t total = 0;