status_printer.h:53:38: error: ‘int64_t’ has not been declared
userdocs opened this issue · comments
A recent change post v1.12.0 release has caused this build error:
Run docker exec -w /root/ninja multiarch cmake --build build
[ 1%] Generating lexer.cc
[ 2%] Generating depfile_parser.cc
[ 4%] Building CXX object CMakeFiles/libninja-re2c.dir/depfile_parser.cc.o
[ 5%] Building CXX object CMakeFiles/libninja-re2c.dir/lexer.cc.o
[ 5%] Built target libninja-re2c
[ 6%] Building CXX object CMakeFiles/libninja.dir/src/build_log.cc.o
[ 8%] Building CXX object CMakeFiles/libninja.dir/src/build.cc.o
[ 9%] Building CXX object CMakeFiles/libninja.dir/src/clean.cc.o
[ 10%] Building CXX object CMakeFiles/libninja.dir/src/clparser.cc.o
[ 12%] Building CXX object CMakeFiles/libninja.dir/src/dyndep.cc.o
[ 13%] Building CXX object CMakeFiles/libninja.dir/src/dyndep_parser.cc.o
[ 14%] Building CXX object CMakeFiles/libninja.dir/src/debug_flags.cc.o
[ 16%] Building CXX object CMakeFiles/libninja.dir/src/deps_log.cc.o
[ 17%] Building CXX object CMakeFiles/libninja.dir/src/disk_interface.cc.o
[ 18%] Building CXX object CMakeFiles/libninja.dir/src/edit_distance.cc.o
[ 20%] Building CXX object CMakeFiles/libninja.dir/src/eval_env.cc.o
[ 21%] Building CXX object CMakeFiles/libninja.dir/src/graph.cc.o
[ 22%] Building CXX object CMakeFiles/libninja.dir/src/graphviz.cc.o
[ 24%] Building CXX object CMakeFiles/libninja.dir/src/json.cc.o
[ 25%] Building CXX object CMakeFiles/libninja.dir/src/line_printer.cc.o
[ 27%] Building CXX object CMakeFiles/libninja.dir/src/manifest_parser.cc.o
[ 28%] Building CXX object CMakeFiles/libninja.dir/src/metrics.cc.o
[ 29%] Building CXX object CMakeFiles/libninja.dir/src/missing_deps.cc.o
[ 31%] Building CXX object CMakeFiles/libninja.dir/src/parser.cc.o
[ 32%] Building CXX object CMakeFiles/libninja.dir/src/state.cc.o
[ 33%] Building CXX object CMakeFiles/libninja.dir/src/status_printer.cc.o
In file included from /root/ninja/src/status_printer.h:19,
from /root/ninja/src/status_printer.cc:15:
/root/ninja/src/status.h:29:33: error: ‘int64_t’ has not been declared
29 | int64_t start_time_millis) = 0;
| ^~~~~~~
/root/ninja/src/status.h:30:46: error: ‘int64_t’ has not been declared
30 | virtual void BuildEdgeFinished(Edge* edge, int64_t start_time_millis,
| ^~~~~~~
/root/ninja/src/status.h:31:34: error: ‘int64_t’ has not been declared
31 | int64_t end_time_millis, bool success,
| ^~~~~~~
/root/ninja/src/status_printer.h:30:51: error: ‘int64_t’ has not been declared
30 | virtual void BuildEdgeStarted(const Edge* edge, int64_t start_time_millis);
| ^~~~~~~
/root/ninja/src/status_printer.h:31:46: error: ‘int64_t’ has not been declared
31 | virtual void BuildEdgeFinished(Edge* edge, int64_t start_time_millis,
| ^~~~~~~
/root/ninja/src/status_printer.h:32:34: error: ‘int64_t’ has not been declared
32 | int64_t end_time_millis, bool success,
| ^~~~~~~
/root/ninja/src/status_printer.h:50:36: error: ‘int64_t’ has not been declared
50 | int64_t time_millis) const;
| ^~~~~~~
/root/ninja/src/status_printer.h:53:38: error: ‘int64_t’ has not been declared
53 | void PrintStatus(const Edge* edge, int64_t time_millis);
| ^~~~~~~
/root/ninja/src/status_printer.h:60:3: error: ‘int64_t’ does not name a type
60 | int64_t time_millis_ = 0;
| ^~~~~~~
/root/ninja/src/status_printer.h:20:1: note: ‘int64_t’ is defined in header ‘<cstdint>’; did you forget to ‘#include <cstdint>’?
19 | #include "status.h"
+++ |+#include <cstdint>
20 |
/root/ninja/src/status_printer.h:63:3: error: ‘int64_t’ does not name a type
63 | int64_t cpu_time_millis_ = 0;
| ^~~~~~~
/root/ninja/src/status_printer.h:63:3: note: ‘int64_t’ is defined in header ‘<cstdint>’; did you forget to ‘#include <cstdint>’?
/root/ninja/src/status_printer.h:71:3: error: ‘int64_t’ does not name a type
71 | int64_t eta_predictable_cpu_time_total_millis_ = 0;
| ^~~~~~~
/root/ninja/src/status_printer.h:71:3: note: ‘int64_t’ is defined in header ‘<cstdint>’; did you forget to ‘#include <cstdint>’?
/root/ninja/src/status_printer.h:76:3: error: ‘int64_t’ does not name a type
76 | int64_t eta_predictable_cpu_time_remaining_millis_ = 0;
| ^~~~~~~
/root/ninja/src/status_printer.h:76:3: note: ‘int64_t’ is defined in header ‘<cstdint>’; did you forget to ‘#include <cstdint>’?
/root/ninja/src/status_printer.h:102:38: error: ‘int64_t’ has not been declared
102 | void UpdateRate(int update_hint, int64_t time_millis) {
| ^~~~~~~
/root/ninja/src/status_printer.cc: In member function ‘virtual void StatusPrinter::EdgeAddedToPlan(const Edge*)’:
/root/ninja/src/status_printer.cc:63:5: error: ‘eta_predictable_cpu_time_total_millis_’ was not declared in this scope
63 | eta_predictable_cpu_time_total_millis_ += edge->prev_elapsed_time_millis;
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/root/ninja/src/status_printer.cc:64:5: error: ‘eta_predictable_cpu_time_remaining_millis_’ was not declared in this scope
64 | eta_predictable_cpu_time_remaining_millis_ +=
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/root/ninja/src/status_printer.cc: In member function ‘virtual void StatusPrinter::EdgeRemovedFromPlan(const Edge*)’:
/root/ninja/src/status_printer.cc:77:5: error: ‘eta_predictable_cpu_time_total_millis_’ was not declared in this scope
77 | eta_predictable_cpu_time_total_millis_ -= edge->prev_elapsed_time_millis;
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/root/ninja/src/status_printer.cc:78:5: error: ‘eta_predictable_cpu_time_remaining_millis_’ was not declared in this scope
78 | eta_predictable_cpu_time_remaining_millis_ -=
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/root/ninja/src/status_printer.cc: At global scope:
/root/ninja/src/status_printer.cc:84:6: error: no declaration matches ‘void StatusPrinter::BuildEdgeStarted(const Edge*, int64_t)’
84 | void StatusPrinter::BuildEdgeStarted(const Edge* edge,
| ^~~~~~~~~~~~~
/root/ninja/src/status_printer.h:30:16: note: candidate is: ‘virtual void StatusPrinter::BuildEdgeStarted(const Edge*, int)’
30 | virtual void BuildEdgeStarted(const Edge* edge, int64_t start_time_millis);
| ^~~~~~~~~~~~~~~~
/root/ninja/src/status_printer.h:23:8: note: ‘struct StatusPrinter’ defined here
23 | struct StatusPrinter : Status {
| ^~~~~~~~~~~~~
/root/ninja/src/status_printer.cc: In member function ‘void StatusPrinter::RecalculateProgressPrediction()’:
/root/ninja/src/status_printer.cc:109:29: error: ‘eta_predictable_cpu_time_remaining_millis_’ was not declared in this scope
109 | eta_predictable_cpu_time_remaining_millis_;
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/root/ninja/src/status_printer.cc:115:8: error: ‘time_millis_’ was not declared in this scope
115 | (time_millis_ >= 15 * 1e3) &&
| ^~~~~~~~~~~~
/root/ninja/src/status_printer.cc:119:17: error: ‘cpu_time_millis_’ was not declared in this scope
119 | (double)cpu_time_millis_ / finished_edges_;
| ^~~~~~~~~~~~~~~~
/root/ninja/src/status_printer.cc:122:17: error: ‘eta_predictable_cpu_time_total_millis_’ was not declared in this scope
122 | (double)eta_predictable_cpu_time_total_millis_ /
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/root/ninja/src/status_printer.cc:147:46: error: ‘cpu_time_millis_’ was not declared in this scope
147 | int64_t edges_known_runtime_total_millis = cpu_time_millis_;
| ^~~~~~~~~~~~~~~~
/root/ninja/src/status_printer.cc: At global scope:
/root/ninja/src/status_printer.cc:176:6: error: no declaration matches ‘void StatusPrinter::BuildEdgeFinished(Edge*, int64_t, int64_t, bool, const std::string&)’
176 | void StatusPrinter::BuildEdgeFinished(Edge* edge, int64_t start_time_millis,
| ^~~~~~~~~~~~~
/root/ninja/src/status_printer.h:31:16: note: candidate is: ‘virtual void StatusPrinter::BuildEdgeFinished(Edge*, int, int, bool, const std::string&)’
31 | virtual void BuildEdgeFinished(Edge* edge, int64_t start_time_millis,
| ^~~~~~~~~~~~~~~~~
/root/ninja/src/status_printer.h:23:8: note: ‘struct StatusPrinter’ defined here
23 | struct StatusPrinter : Status {
| ^~~~~~~~~~~~~
/root/ninja/src/status_printer.cc:275:8: error: no declaration matches ‘std::string StatusPrinter::FormatProgressStatus(const char*, int64_t) const’
275 | string StatusPrinter::FormatProgressStatus(const char* progress_status_format,
| ^~~~~~~~~~~~~
/root/ninja/src/status_printer.h:49:15: note: candidate is: ‘std::string StatusPrinter::FormatProgressStatus(const char*, int) const’
49 | std::string FormatProgressStatus(const char* progress_status_format,
| ^~~~~~~~~~~~~~~~~~~~
/root/ninja/src/status_printer.h:23:8: note: ‘struct StatusPrinter’ defined here
23 | struct StatusPrinter : Status {
| ^~~~~~~~~~~~~
/root/ninja/src/status_printer.cc:419:6: error: no declaration matches ‘void StatusPrinter::PrintStatus(const Edge*, int64_t)’
419 | void StatusPrinter::PrintStatus(const Edge* edge, int64_t time_millis) {
| ^~~~~~~~~~~~~
/root/ninja/src/status_printer.h:53:8: note: candidate is: ‘void StatusPrinter::PrintStatus(const Edge*, int)’
53 | void PrintStatus(const Edge* edge, int64_t time_millis);
| ^~~~~~~~~~~
/root/ninja/src/status_printer.h:23:8: note: ‘struct StatusPrinter’ defined here
23 | struct StatusPrinter : Status {
| ^~~~~~~~~~~~~
gmake[2]: *** [CMakeFiles/libninja.dir/build.make:356: CMakeFiles/libninja.dir/src/status_printer.cc.o] Error 1
gmake[1]: *** [CMakeFiles/Makefile2:208: CMakeFiles/libninja.dir/all] Error 2
gmake: *** [Makefile:146: all] Error 2
Error: Process completed with exit code 2.
I use MCM to build statically linked binaries against muslc built on Alpine Linux.
It said that this commit looks to be the culprit:
looks like just a missing include of stdint.h/cstdint @ #musl
Thanks, I can confirm this fix allowed my builds to complete successfully.
If you want to avoid having to open such an issue in the future, contribute a GitHub Action that builds with musl :)
This is what I use to build from master but I use custom build of MCM which have no official releases, hence the range of targets,
I figure this is not an ideal solution to the suggestion unless a source for the toolchains could be agreed upon, maybe here?
The other way is qemu/alpine emulation. Not the fastest way but less unique.
I could do this but i'd need to understand implementation would be best suited for the project,
Crossbuilding or emulation, emulation is probably the easier to maintain but longer build times.
I may have got ahead of myself there.
Would a simple x86_64 workflow suffice for this need?
yes