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

Doesn't compile on macOS #64

Closed
vadi2 opened this issue Jan 9, 2022 · 4 comments
Closed

Doesn't compile on macOS #64

vadi2 opened this issue Jan 9, 2022 · 4 comments
Labels
invalid This doesn't seem right

Comments

@vadi2
Copy link
Contributor

vadi2 commented Jan 9, 2022

Works great for me on Linux but not on macOS:

  FAILED: _deps/nanobench-build/CMakeFiles/nanobench.dir/src/test/app/nanobench.cpp.o 
  ccache /usr/local/opt/ccache/libexec/c++  -I_deps/nanobench-src/src/include -isysroot /Applications/Xcode_12.4.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX11.1.sdk -mmacosx-version-min=10.14 -MD -MT _deps/nanobench-build/CMakeFiles/nanobench.dir/src/test/app/nanobench.cpp.o -MF _deps/nanobench-build/CMakeFiles/nanobench.dir/src/test/app/nanobench.cpp.o.d -o _deps/nanobench-build/CMakeFiles/nanobench.dir/src/test/app/nanobench.cpp.o -c _deps/nanobench-src/src/test/app/nanobench.cpp
  In file included from _deps/nanobench-src/src/test/app/nanobench.cpp:2:
  Warning: _deps/nanobench-src/src/include/nanobench.h:117:15: warning: alias declarations are a C++11 extension [-Wc++11-extensions]
  using Clock = std::conditional<std::chrono::high_resolution_clock::is_steady, std::chrono::high_resolution_clock,
                ^
  Error: _deps/nanobench-src/src/include/nanobench.h:296:19: error: expected function body after function declarator
  char const* csv() noexcept;
                    ^
  Error: _deps/nanobench-src/src/include/nanobench.h:308:27: error: expected function body after function declarator
  char const* htmlBoxplot() noexcept;
                            ^
  Error: _deps/nanobench-src/src/include/nanobench.h:319:20: error: expected function body after function declarator
  char const* json() noexcept;
                     ^
  Error: _deps/nanobench-src/src/include/nanobench.h:347:7: error: function definition does not declare parameters
      T pageFaults{};
        ^
  Error: _deps/nanobench-src/src/include/nanobench.h:348:7: error: function definition does not declare parameters
      T cpuCycles{};
        ^
  Error: _deps/nanobench-src/src/include/nanobench.h:349:7: error: function definition does not declare parameters
      T contextSwitches{};
        ^
  Error: _deps/nanobench-src/src/include/nanobench.h:350:7: error: function definition does not declare parameters
      T instructions{};
        ^
  Error: _deps/nanobench-src/src/include/nanobench.h:351:7: error: function definition does not declare parameters
      T branchInstructions{};
        ^
  Error: _deps/nanobench-src/src/include/nanobench.h:352:7: error: function definition does not declare parameters
      T branchMisses{};
        ^
  Warning: _deps/nanobench-src/src/include/nanobench.h:360:33: warning: in-class initialization of non-static data member is a C++11 extension [-Wc++11-extensions]
      std::string mBenchmarkTitle = "benchmark";
                                  ^
  Warning: _deps/nanobench-src/src/include/nanobench.h:361:32: warning: in-class initialization of non-static data member is a C++11 extension [-Wc++11-extensions]
      std::string mBenchmarkName = "noname";
                                 ^
  Warning: _deps/nanobench-src/src/include/nanobench.h:362:23: warning: in-class initialization of non-static data member is a C++11 extension [-Wc++11-extensions]
      std::string mUnit = "op";
                        ^
  Warning: _deps/nanobench-src/src/include/nanobench.h:363:19: warning: in-class initialization of non-static data member is a C++11 extension [-Wc++11-extensions]
      double mBatch = 1.0;
                    ^
  Warning: _deps/nanobench-src/src/include/nanobench.h:364:25: warning: in-class initialization of non-static data member is a C++11 extension [-Wc++11-extensions]
      double mComplexityN = -1.0;
                          ^
  Warning: _deps/nanobench-src/src/include/nanobench.h:365:23: warning: in-class initialization of non-static data member is a C++11 extension [-Wc++11-extensions]
      size_t mNumEpochs = 11;
                        ^
  Warning: _deps/nanobench-src/src/include/nanobench.h:366:37: warning: in-class initialization of non-static data member is a C++11 extension [-Wc++11-extensions]
      size_t mClockResolutionMultiple = static_cast<size_t>(1000);
                                      ^
  Warning: _deps/nanobench-src/src/include/nanobench.h:367:44: warning: in-class initialization of non-static data member is a C++11 extension [-Wc++11-extensions]
      std::chrono::nanoseconds mMaxEpochTime = std::chrono::milliseconds(100);
                                             ^
  Error: _deps/nanobench-src/src/include/nanobench.h:368:30: error: function definition does not declare parameters
      std::chrono::nanoseconds mMinEpochTime{};
                               ^
  Error: _deps/nanobench-src/src/include/nanobench.h:369:14: error: function definition does not declare parameters
      uint64_t mMinEpochIterations{1};
               ^
  Error: _deps/nanobench-src/src/include/nanobench.h:370:14: error: function definition does not declare parameters
      uint64_t mEpochIterations{0}; // If not 0, run *exactly* these number of iterations per epoch.
               ^
  Warning: _deps/nanobench-src/src/include/nanobench.h:371:22: warning: in-class initialization of non-static data member is a C++11 extension [-Wc++11-extensions]
      uint64_t mWarmup = 0;
                       ^
  Warning: _deps/nanobench-src/src/include/nanobench.h:372:24: warning: in-class initialization of non-static data member is a C++11 extension [-Wc++11-extensions]
      std::ostream* mOut = nullptr;
                         ^
  Warning: _deps/nanobench-src/src/include/nanobench.h:373:45: warning: in-class initialization of non-static data member is a C++11 extension [-Wc++11-extensions]
      std::chrono::duration<double> mTimeUnit = std::chrono::nanoseconds{1};
                                              ^
  Warning: _deps/nanobench-src/src/include/nanobench.h:374:31: warning: in-class initialization of non-static data member is a C++11 extension [-Wc++11-extensions]
      std::string mTimeUnitName = "ns";
                                ^
  Warning: _deps/nanobench-src/src/include/nanobench.h:375:35: warning: in-class initialization of non-static data member is a C++11 extension [-Wc++11-extensions]
      bool mShowPerformanceCounters = true;
                                    ^
  Warning: _deps/nanobench-src/src/include/nanobench.h:376:22: warning: in-class initialization of non-static data member is a C++11 extension [-Wc++11-extensions]
      bool mIsRelative = false;
                       ^
  Warning: _deps/nanobench-src/src/include/nanobench.h:381:29: warning: rvalue references are a C++11 extension [-Wc++11-extensions]
      Config& operator=(Config&&);
                              ^
  Warning: _deps/nanobench-src/src/include/nanobench.h:383:18: warning: rvalue references are a C++11 extension [-Wc++11-extensions]
      Config(Config&&) noexcept;
                   ^
  Error: _deps/nanobench-src/src/include/nanobench.h:383:21: error: expected ';' at end of declaration list
      Config(Config&&) noexcept;
                      ^
                      ;
  Error: _deps/nanobench-src/src/include/nanobench.h:373:71: error: expected '(' for function-style cast or type construction
      std::chrono::duration<double> mTimeUnit = std::chrono::nanoseconds{1};
                                                ~~~~~~~~~~~~~~~~~~~~~~~~^
  Warning: _deps/nanobench-src/src/include/nanobench.h:391:10: warning: scoped enumerations are a C++11 extension [-Wc++11-extensions]
      enum class Measure : size_t {
           ^
  Warning: _deps/nanobench-src/src/include/nanobench.h:407:29: warning: rvalue references are a C++11 extension [-Wc++11-extensions]
      Result& operator=(Result&&);
                              ^
  Warning: _deps/nanobench-src/src/include/nanobench.h:409:18: warning: rvalue references are a C++11 extension [-Wc++11-extensions]
      Result(Result&&) noexcept;
                   ^
  Error: _deps/nanobench-src/src/include/nanobench.h:409:21: error: expected ';' at end of declaration list
      Result(Result&&) noexcept;
                      ^
                      ;
  Error: _deps/nanobench-src/src/include/nanobench.h:415:61: error: expected ';' at end of declaration list
      ANKERL_NANOBENCH(NODISCARD) Config const& config() const noexcept;
                                                              ^
                                                              ;
  Error: _deps/nanobench-src/src/include/nanobench.h:420:60: error: expected ';' at end of declaration list
      ANKERL_NANOBENCH(NODISCARD) double sum(Measure m) const noexcept;
                                                             ^
                                                             ;
  Error: _deps/nanobench-src/src/include/nanobench.h:421:80: error: expected ';' at end of declaration list
      ANKERL_NANOBENCH(NODISCARD) double sumProduct(Measure m1, Measure m2) const noexcept;
                                                                                 ^
                                                                                 ;
  Error: _deps/nanobench-src/src/include/nanobench.h:422:64: error: expected ';' at end of declaration list
      ANKERL_NANOBENCH(NODISCARD) double minimum(Measure m) const noexcept;
                                                                 ^
                                                                 ;
  fatal error: too many errors emitted, stopping now [-ferror-limit=]
@martinus
Copy link
Owner

I can't test this on MacOS, can you add -std=c++17 to the flags, or upgrade your compiler

@vadi2
Copy link
Contributor Author

vadi2 commented Jan 10, 2022

I am compiling with C++17 on a modern compiler 🤔

If you'd like I can set you up a github workflow that'll test compiling the library on macOS & Linux on every commit

@martinus
Copy link
Owner

The warning

  Warning: _deps/nanobench-src/src/include/nanobench.h:117:15: warning: alias declarations are a C++11 extension [-Wc++11-extensions]

sounds like the compiler isn't using c++11 or higher. Also, I don't see a flag in your options for the c++ version, so please add -std=c++17 or -std=c++14 or at least -std=c++11

@vadi2
Copy link
Contributor Author

vadi2 commented Jan 10, 2022

Fixed by moving my CMake C++ declaration to the root file so it applies to libraries as well 👍

Thanks for the library, it's really neat.

@vadi2 vadi2 closed this as completed Jan 10, 2022
@martinus martinus added the invalid This doesn't seem right label Feb 16, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
invalid This doesn't seem right
Projects
None yet
Development

No branches or pull requests

2 participants