Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

status_printer.h:53:38: error: ‘int64_t’ has not been declared #2426

Closed
userdocs opened this issue Apr 19, 2024 · 5 comments
Closed

status_printer.h:53:38: error: ‘int64_t’ has not been declared #2426

userdocs opened this issue Apr 19, 2024 · 5 comments

Comments

@userdocs
Copy link
Contributor

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

@jhasse jhasse closed this as completed in 1eb5308 Apr 20, 2024
@userdocs
Copy link
Contributor Author

Thanks, I can confirm this fix allowed my builds to complete successfully.

@jhasse
Copy link
Collaborator

jhasse commented Apr 20, 2024

If you want to avoid having to open such an issue in the future, contribute a GitHub Action that builds with musl :)

@userdocs
Copy link
Contributor Author

userdocs commented Apr 20, 2024

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.

@userdocs
Copy link
Contributor Author

I may have got ahead of myself there.

Would a simple x86_64 workflow suffice for this need?

@jhasse
Copy link
Collaborator

jhasse commented Apr 20, 2024

yes

adill pushed a commit to discord/ninja that referenced this issue Aug 23, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants