ninja-build / ninja

a small build system with a focus on speed

Home Page:https://ninja-build.org/

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

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

da11ea2

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,

https://github.com/userdocs/qbt-ninja-build/blob/main/.github/workflows/alpine_multi-master-matrix-muslcc.yml

I figure this is not an ideal solution to the suggestion unless a source for the toolchains could be agreed upon, maybe here?

https://musl.cc

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?