aboutsummaryrefslogtreecommitdiff
path: root/src/codegen.cpp
diff options
context:
space:
mode:
authorAndrew Kelley <andrew@ziglang.org>2019-03-11 10:26:08 -0400
committerAndrew Kelley <andrew@ziglang.org>2019-03-11 10:26:08 -0400
commit3a6f19de48366a616eaffd9dd6c4d4712e0b6c27 (patch)
tree60e0f7451f1dc6ac03153e0b3471f171825f35e3 /src/codegen.cpp
parentfec4555476e38d2eeb1dfb02572404b243acd0b2 (diff)
downloadzig-3a6f19de48366a616eaffd9dd6c4d4712e0b6c27.tar.gz
zig-3a6f19de48366a616eaffd9dd6c4d4712e0b6c27.zip
stage1 caching system: detect problematic mtimes
closes #2045
Diffstat (limited to 'src/codegen.cpp')
-rw-r--r--src/codegen.cpp30
1 files changed, 20 insertions, 10 deletions
diff --git a/src/codegen.cpp b/src/codegen.cpp
index 71f9f0217b..332080c2f5 100644
--- a/src/codegen.cpp
+++ b/src/codegen.cpp
@@ -7724,8 +7724,11 @@ static Error define_builtin_compile_vars(CodeGen *g) {
Buf digest = BUF_INIT;
buf_resize(&digest, 0);
- if ((err = cache_hit(&cache_hash, &digest)))
- return err;
+ if ((err = cache_hit(&cache_hash, &digest))) {
+ // Treat an invalid format error as a cache miss.
+ if (err != ErrorInvalidFormat)
+ return err;
+ }
// We should always get a cache hit because there are no
// files in the input hash.
@@ -8342,12 +8345,14 @@ static void gen_c_object(CodeGen *g, Buf *self_exe_path, CFile *c_file) {
Buf digest = BUF_INIT;
buf_resize(&digest, 0);
if ((err = cache_hit(cache_hash, &digest))) {
- if (err == ErrorCacheUnavailable) {
- // already printed error
- } else {
- fprintf(stderr, "unable to check cache when compiling C object: %s\n", err_str(err));
+ if (err != ErrorInvalidFormat) {
+ if (err == ErrorCacheUnavailable) {
+ // already printed error
+ } else {
+ fprintf(stderr, "unable to check cache when compiling C object: %s\n", err_str(err));
+ }
+ exit(1);
}
- exit(1);
}
bool is_cache_miss = (buf_len(&digest) == 0);
if (is_cache_miss) {
@@ -8993,7 +8998,10 @@ void codegen_print_timing_report(CodeGen *g, FILE *f) {
}
void codegen_add_time_event(CodeGen *g, const char *name) {
- g->timing_events.append({os_get_time(), name});
+ OsTimeStamp timestamp = os_timestamp_monotonic();
+ double seconds = (double)timestamp.sec;
+ seconds += ((double)timestamp.nsec) / 1000000000.0;
+ g->timing_events.append({seconds, name});
}
static void add_cache_pkg(CodeGen *g, CacheHash *ch, ZigPackage *pkg) {
@@ -9090,8 +9098,10 @@ static Error check_cache(CodeGen *g, Buf *manifest_dir, Buf *digest) {
cache_list_of_file(ch, g->link_objects.items, g->link_objects.length);
buf_resize(digest, 0);
- if ((err = cache_hit(ch, digest)))
- return err;
+ if ((err = cache_hit(ch, digest))) {
+ if (err != ErrorInvalidFormat)
+ return err;
+ }
if (ch->manifest_file_path != nullptr) {
g->caches_to_release.append(ch);