Loki-Astari / JsonBenchmark

Json benchmark based on nativejson-benchmark
Other
22 stars 5 forks source link

make issue on Linux: MemoryConfig.h: No such file or directory #8

Closed stephenberry closed 3 weeks ago

stephenberry commented 1 month ago

I'm trying to debug your GlazeIssue1 branch, but I get the following error after configuring and then running make:

g++  -D DATA_DIR=/workspaces/JsonBenchmark/data      -fPIC -Wall -Wextra -Werror -Wstrict-aliasing  -pedantic -Wunreachable-code -Wno-long-long -Wdeprecated -Wdeprecated-declarations -Wmissing-braces -Wmissing-field-initializers -Wunused-variable       -Wno-unknown-pragmas   -I/workspaces/JsonBenchmark/build/include -isystem /workspaces/JsonBenchmark/build/include3rd  -g   -Wno-unreachable-code  -DTHOR_USE_CPLUSPLUS     -MF"makedependency/Memory.d" -MM -MP -MT"makedependency/Memory.d" -MT"debug/Memory.o" -MT"release/Memory.o" -MT"coverage/Memory.o" "Memory.cpp"
========================================
src/Memory/Memory.cpp:15:10: fatal error: MemoryConfig.h: No such file or directory
   15 | #include "MemoryConfig.h"
      |          ^~~~~~~~~~~~~~~~
compilation terminated.
make[2]: *** [/workspaces/JsonBenchmark/build/tools/main.Makefile:571: makedependency/Memory.d] Error 1
make[1]: *** [/workspaces/JsonBenchmark/build/tools/Project.Makefile:81: Memory.dir] Error 2
make: *** [/workspaces/JsonBenchmark/build/tools/Project.Makefile:81: src.dir] Error 2
Loki-Astari commented 1 month ago

Did you run ./configure script?

stephenberry commented 1 month ago

Yes, ./configure seemed to work, it's the make call that errored

Loki-Astari commented 1 month ago

The file MemoryConfig.h is generated by the configure script. If it is not there then your configure probably failed.

If you have the file: src/benchmark/benchmarkConfig.h They are basically the same. You can copy src/benchmark/benchmarkConfig.h onto src/Memory/MemoryConfig.h

It should look like this:

  /* src/Memory/MemoryConfig.h.  Generated from config.h.in by configure.  */
  /* config.h.in.  Generated from configure.ac by autoheader.  */

  #ifndef  THORS_JSONBENCHMARK_CONFIG_H
  #define  THORS_JSONBENCHMARK_CONFIG_H
  #ifndef  THORS_PACKAGE_INFO_CONFIG_H
  #define  THORS_PACKAGE_INFO_CONFIG_H

  ␣␣␣␣

  /* Define to 1 if you have the <dlfcn.h> header file. */
  #define HAVE_DLFCN_H 1

  /* Define to 1 if you have the <inttypes.h> header file. */
  #define HAVE_INTTYPES_H 1

  /* Define to 1 if you have the <stdint.h> header file. */
  #define HAVE_STDINT_H 1

  /* Define to 1 if you have the <stdio.h> header file. */
  #define HAVE_STDIO_H 1

  /* Define to 1 if you have the <stdlib.h> header file. */
  #define HAVE_STDLIB_H 1

  /* Define to 1 if you have the <strings.h> header file. */
  #define HAVE_STRINGS_H 1

  /* Define to 1 if you have the <string.h> header file. */
  #define HAVE_STRING_H 1

  /* Define to 1 if you have the <sys/stat.h> header file. */
  #define HAVE_SYS_STAT_H 1

  /* Define to 1 if you have the <sys/types.h> header file. */
  #define HAVE_SYS_TYPES_H 1

  /* Define to 1 if you have the <unistd.h> header file. */
  #define HAVE_UNISTD_H 1

  /* Define to the sub-directory where libtool stores uninstalled libraries. */
  #define LT_OBJDIR ".libs/"

  /* Name of package */
  #define PACKAGE "jsonbenchmark"

  /* Define to the address where bug reports for this package should be sent. */
  #define PACKAGE_BUGREPORT "Loki.Astari+ThorsAnvil@gmail.com"

  /* Define to the full name of this package. */
  #define PACKAGE_NAME "JsonBenchmark"

  /* Define to the full name and version of this package. */
  #define PACKAGE_STRING "JsonBenchmark 0.1"

  /* Define to the one symbol short name of this package. */
  #define PACKAGE_TARNAME "jsonbenchmark"

  /* Define to the home page for this package. */
  #define PACKAGE_URL ""

  /* Define to the version of this package. */
  #define PACKAGE_VERSION "0.1"

  /* Define to 1 if all of the C89 standard headers exist (not just the ones
     required in a freestanding environment). This macro is provided for
     backward compatibility; new code need not use it. */
  #define STDC_HEADERS 1

  /* Enable to use header only libraries */

  /* For header only convert to inline */

  /* Name of package for header files */
  #define THOR_PACKAGE_NAME JsonBenchmark

  /* Version number of package */
  #define VERSION "0.1"

  #endif

  /* Enable to use header only libraries */
  #define THORS_JSONBENCHMARK_HEADER_ONLY 0

  /* For header only convert to inline */
  #define THORS_JSONBENCHMARK_HEADER_ONLY_INCLUDE /**/

  #endif
stephenberry commented 1 month ago

Thanks! I'll look into this more.

By the way, I would expect this issue to go away if you used the glz::meta registration approach. The glz::meta approach is also the highest performing way to use Glaze, although it requires more typing, albeit the performance improvements are minor.

stephenberry commented 1 month ago

Here is the output of running ./configure

Submodule 'build' (https://github.com/Loki-Astari/ThorMaker.git) registered for path 'build'
Cloning into '/workspaces/JsonBenchmark/build'...
Submodule path 'build': checked out '02c427c6b85519a106dcf6a561c9d92d7ddb826b'
Submodule 'googletest' (https://github.com/Loki-Astari/googletest.git) registered for path 'build/googletest'
Submodule 'vera-plusplus' (https://github.com/Loki-Astari/vera-plusplus.git) registered for path 'build/vera-plusplus'
Cloning into '/workspaces/JsonBenchmark/build/googletest'...
Cloning into '/workspaces/JsonBenchmark/build/vera-plusplus'...
Submodule path 'build/googletest': checked out 'cc366710bbf40a9816d47c35802d06dbaccb8792'
Submodule path 'build/vera-plusplus': checked out 'de33164885c90951be29779aea7c236b817deb13'
Checking Windows Symbolic Links: Linux
    Not Windows
checking whether the C++ compiler works... yes
checking for C++ compiler default output file name... a.out
checking for suffix of executables... 
checking whether we are cross compiling... no
checking for suffix of object files... o
checking whether the compiler supports GNU C++... yes
checking whether clang++ accepts -g... yes
checking for clang++ option to enable C++11 features... none needed
STARTING COVERAGE CHECK
STARTING COVERAGE CHECK: CHECKING CLANG
: error: 

The coverage tool "llvm-cov" does not seem to be working.

But, MemoryConfig.h is still not generated.

stephenberry commented 1 month ago

src/benchmark/benchmarkConfig.h also doesn't exist and when I copy the code you pasted (after removing the ␣␣␣␣ characters) and making src/Memory/MemoryConfig.h, I get the errors:

make

Memory.cpp                                                                                                    

ln: '/workspaces/JsonBenchmark/build/lib/libMemory.so' and '/workspaces/JsonBenchmark/build/lib/libMemory.so' are the same file
make[4]: *** [/workspaces/JsonBenchmark/build/tools/Build/install.Makefile:175: /workspaces/JsonBenchmark/build/lib/libMemory.so] Error 1
make[3]: *** [/workspaces/JsonBenchmark/build/tools/Build/install.Makefile:87: ActionDoInstallRelease] Error 2
make[2]: *** [/workspaces/JsonBenchmark/build/tools/main.Makefile:385: release-only] Error 2
make[1]: *** [/workspaces/JsonBenchmark/build/tools/Project.Makefile:81: Memory.dir] Error 2
make: *** [/workspaces/JsonBenchmark/build/tools/Project.Makefile:81: src.dir] Error 2

I am doing this with a fresh docker container of Ubuntu (jammy) on GitHub code spaces. I'm including GCC 13 and Clang 17.

Loki-Astari commented 1 month ago

OK. You don't need the coverage tool to build this project. Give me a second to disable it.

Once we get the configure script running correctly the other issue should also go away.

I am doing this with a fresh docker container of Ubuntu (jammy) on GitHub code spaces. I'm including GCC 13 and Clang 17.

Not sure how to do that. Can you point at instructions. Or send me a docker file to run locally?

Loki-Astari commented 1 month ago

Can you install gcov on your container that "should" make the error go away.

While I try and disable the test.

Loki-Astari commented 1 month ago

I have update the configure script in the master branch to disable this check. Can you pull that version into your branch?

stephenberry commented 1 month ago

You can copy the .devcontainer folder from Glaze if you want to use a Ubuntu image with recent compilers in GitHub code spaces.

I'm getting merge errors trying to merge the master branch into GlazeIssue1, are you able to merge these updates into GlazeIssue1? I can refork if you can get things working again.

Loki-Astari commented 1 month ago

Added the new 'configure' to 'GlazeIssue1`

stephenberry commented 1 month ago

Thanks, now ./configure works, but I get the following error when I run make:

(GlazeIssue01) $ make
Building Dir src Start
Building Dir Memory Start
ERROR
g++  -D DATA_DIR=/workspaces/JsonBenchmark/data  -I /usr/local/include  -I /usr/local/include      -fPIC -Wall -Wextra -Werror -Wstrict-aliasing  -pedantic -Wunreachable-code -Wno-long-long -Wdeprecated -Wdeprecated-declarations -Wmissing-braces -Wmissing-field-initializers -Wunused-variable -Winconsistent-missing-override -Wdelete-non-abstract-non-virtual-dtor -Wdelete-non-virtual-dtor -Wno-deprecated-register -Wno-literal-range  -Wno-unknown-pragmas   -I/workspaces/JsonBenchmark/build/include -isystem /workspaces/JsonBenchmark/build/include3rd  -g   -Wno-unreachable-code  -DTHOR_USE_CPLUSPLUS23 -std=c++23    -MF"makedependency/Memory.d" -MM -MP -MT"makedependency/Memory.d" -MT"debug/Memory.o" -MT"release/Memory.o" -MT"coverage/Memory.o" "Memory.cpp"
========================================
src/Memory/g++: error: unrecognized command-line option ‘-Winconsistent-missing-override’
src/Memory/g++: error: unrecognized command-line option ‘-Wdelete-non-abstract-non-virtual-dtor’; did you mean ‘-Wdelete-non-virtual-dtor’?
make[2]: *** [/workspaces/JsonBenchmark/build/tools/main.Makefile:571: makedependency/Memory.d] Error 1
make[1]: *** [/workspaces/JsonBenchmark/build/tools/Project.Makefile:81: Memory.dir] Error 2
make: *** [/workspaces/JsonBenchmark/build/tools/Project.Makefile:81: src.dir] Error 2
stephenberry commented 3 weeks ago

Any thoughts on this?

Loki-Astari commented 3 weeks ago

Sorry did not reply earlier. I have Glaze building and running all the performance tests.

The status page now accurately reflects the performance of Glaze. https://lokiastari.com/Json/Performance.osx.html

It is still the fastest but the value of 0 compared to others has been fixed.

I would not worry about absolute times but times relative to others.

PS. That error message can be disabled by adding the flag: -Wno-unknown-warning-option. Its caused because the compiler flags are not standardized across compilers or even versions of compilers and I just did not have the time to test for every flag in existance in the configuration file.

Closting this as Glaze is now running.

stephenberry commented 3 weeks ago

Thanks for the updates/fixes! So, Glaze is now running on Linux for you?

Loki-Astari commented 3 weeks ago

Forgot about that. Testing now.

Loki-Astari commented 3 weeks ago

Still not working on Linux:

https://github.com/Loki-Astari/JsonBenchmark/actions/runs/10864720204/job/30150310365

stephenberry commented 2 weeks ago

The link is dead. But, which branch should I try to build Glaze on Linux? It looks like GlazeIssue01 hasn't been updated. Can I try from the main branch, and if so, where do I enable Glaze?