hash fingerprint for copmile chain
This commit is contained in:
@@ -13,14 +13,33 @@ var os = use('internal/os')
|
|||||||
var link = use('link')
|
var link = use('link')
|
||||||
|
|
||||||
// These come from env (via core_extras in engine.cm):
|
// These come from env (via core_extras in engine.cm):
|
||||||
// analyze, run_ast_fn, core_json, use_cache, shop_path, actor_api, runtime_env,
|
// analyze, run_ast_fn, core_json, use_cache, core_path, shop_path, actor_api,
|
||||||
// content_hash, cache_path, ensure_build_dir
|
// runtime_env, content_hash, cache_path, ensure_build_dir
|
||||||
var shop_json = core_json
|
var shop_json = core_json
|
||||||
var global_shop_path = shop_path
|
var global_shop_path = shop_path
|
||||||
var my$_ = actor_api
|
var my$_ = actor_api
|
||||||
|
|
||||||
var core = "core"
|
var core = "core"
|
||||||
|
|
||||||
|
// Compiler fingerprint: hash of all compiler source files so that any compiler
|
||||||
|
// change invalidates the entire build cache. Folded into hash_path().
|
||||||
|
var compiler_fingerprint = (function() {
|
||||||
|
var files = [
|
||||||
|
"tokenize", "parse", "fold", "mcode", "streamline",
|
||||||
|
"qbe", "qbe_emit", "ir_stats"
|
||||||
|
]
|
||||||
|
var combined = ""
|
||||||
|
var i = 0
|
||||||
|
var path = null
|
||||||
|
while (i < length(files)) {
|
||||||
|
path = core_path + '/' + files[i] + '.cm'
|
||||||
|
if (fd.is_file(path))
|
||||||
|
combined = combined + text(fd.slurp(path))
|
||||||
|
i = i + 1
|
||||||
|
}
|
||||||
|
return content_hash(stone(blob(combined)))
|
||||||
|
})()
|
||||||
|
|
||||||
// Make a package name safe for use in C identifiers.
|
// Make a package name safe for use in C identifiers.
|
||||||
// Replaces /, ., -, @ with _ so the result is a valid C identifier fragment.
|
// Replaces /, ., -, @ with _ so the result is a valid C identifier fragment.
|
||||||
function safe_c_name(name) {
|
function safe_c_name(name) {
|
||||||
@@ -43,7 +62,7 @@ function put_into_cache(content, obj)
|
|||||||
function hash_path(content, salt)
|
function hash_path(content, salt)
|
||||||
{
|
{
|
||||||
var s = salt || 'mach'
|
var s = salt || 'mach'
|
||||||
return global_shop_path + '/build/' + content_hash(stone(blob(text(content) + '\n' + s)))
|
return global_shop_path + '/build/' + content_hash(stone(blob(text(content) + '\n' + s + '\n' + compiler_fingerprint)))
|
||||||
}
|
}
|
||||||
|
|
||||||
var Shop = {}
|
var Shop = {}
|
||||||
|
|||||||
Reference in New Issue
Block a user