maxi-k/btrblocks

Can't build on Fedora 40 (GCC 14)

Opened this issue · 2 comments

I realize Fedora is not a primary target, but people on other early-adopter distros like Arch are likely to hit the same issues. :)

This is after:

mkdir build; cd build; cmake ..

make -j10

Intel TBB

According to this similar issue this has been fixed upstream in TBB, but in the vendored version:

In file included from /home/alex/dev/btrblocks/build/vendor/intel/tbb/src/tbb_src/src/tbb/scheduler_common.h:43,
                 from /home/alex/dev/btrblocks/build/vendor/intel/tbb/src/tbb_src/src/tbb/scheduler.h:24,
                 from /home/alex/dev/btrblocks/build/vendor/intel/tbb/src/tbb_src/src/tbb/governor.cpp:25:
/home/alex/dev/btrblocks/build/vendor/intel/tbb/src/tbb_src/include/tbb/task.h:266:20: error: declaration of ‘tbb::task& tbb::internal::task_prefix::task()’ changes meaning of ‘task’ [-Wchanges-meaning]
  266 |         tbb::task& task() {return *reinterpret_cast<tbb::task*>(this+1);}
      |                    ^~~~

The workaround for this is to change line 225 of vendor/intel/tbb/src/tbb_src/include/tbb/task.h from:

        task* next_offloaded;

to:

        tbb::task* next_offloaded;

Missing includes in playground.cpp

[ 82%] Linking CXX executable double_benchmarking
/home/alex/dev/btrblocks/tools/playground/playground.cpp: In function ‘int main(int, char**)’:
/home/alex/dev/btrblocks/tools/playground/playground.cpp:40:42: error: ‘VariableByte’ was not declared in this scope
   40 |      new CompositeCodec<SIMDFastPFor<4>, VariableByte>());
      |                                          ^~~~~~~~~~~~
/home/alex/dev/btrblocks/tools/playground/playground.cpp:39:50: error: expected primary-expression before ‘(’ token
   39 |    auto fast_pfor = std::shared_ptr<IntegerCODEC>(
      |                                                  ^
/home/alex/dev/btrblocks/tools/playground/playground.cpp:40:10: error: ‘CompositeCodec’ does not name a type
   40 |      new CompositeCodec<SIMDFastPFor<4>, VariableByte>());
      |          ^~~~~~~~~~~~~~
/home/alex/dev/btrblocks/tools/playground/playground.cpp:40:25: error: ‘SIMDFastPFor’ was not declared in this scope
   40 |      new CompositeCodec<SIMDFastPFor<4>, VariableByte>());
      |                         ^~~~~~~~~~~~
/home/alex/dev/btrblocks/tools/playground/playground.cpp:40:40: error: expected primary-expression before ‘,’ token
   40 |      new CompositeCodec<SIMDFastPFor<4>, VariableByte>());
      |                                        ^
/home/alex/dev/btrblocks/tools/playground/playground.cpp:40:56: error: expected primary-expression before ‘)’ token
   40 |      new CompositeCodec<SIMDFastPFor<4>, VariableByte>());
      |                                                        ^
/home/alex/dev/btrblocks/tools/playground/playground.cpp:41:46: error: expected primary-expression before ‘(’ token
   41 |    auto codec = std::shared_ptr<IntegerCODEC>(
      |                                              ^
/home/alex/dev/btrblocks/tools/playground/playground.cpp:42:51: error: ‘CompositeCodec’ does not name a type
   42 |                                               new CompositeCodec<FastBinaryPacking<32>, VariableByte>()); //
      |                                                   ^~~~~~~~~~~~~~
/home/alex/dev/btrblocks/tools/playground/playground.cpp:42:66: error: ‘FastBinaryPacking’ was not declared in this scope
   42 |                                               new CompositeCodec<FastBinaryPacking<32>, VariableByte>()); //
      |                                                                  ^~~~~~~~~~~~~~~~~
/home/alex/dev/btrblocks/tools/playground/playground.cpp:42:87: error: expected primary-expression before ‘,’ token
   42 |                                               new CompositeCodec<FastBinaryPacking<32>, VariableByte>()); //
      |                                                                                       ^
/home/alex/dev/btrblocks/tools/playground/playground.cpp:42:103: error: expected primary-expression before ‘)’ token
   42 |                                               new CompositeCodec<FastBinaryPacking<32>, VariableByte>()); //
      |                                                                                                       ^

There are no FastPFOR includes in this file; I'm not sure where they're supposed to come from.

CURLOPT_PUT Deprecated

edit: Updating to https://github.com/aws/aws-sdk-cpp/commits/1.10.53 seems to avoid this error but I don't know if it's safe 😅

My libcurl is version 8.6.0 and it complains that CURLOPT_PUT is deprecated and CURLOPT_UPLOAD should be used instead.

Indeed, changing line 414 of vendor/libawscpp-download/src/libawscpp-download/aws-cpp-sdk-core/source/http/curl/CurlHttpClient.cpp seems to help;

before:

                curl_easy_setopt(requestHandle, CURLOPT_PUT, 1L);

after:

                curl_easy_setopt(requestHandle, CURLOPT_UPLOAD, 1L);

Here are some workarounds to make the playground pass compilation, for commit d1c1d26.

  • In tools/playground/playground.cpp, add header files:
    #include "headers/blockpacking.h"
    #include "headers/compositecodec.h"
    #include "headers/simdfastpfor.h"
    #include "headers/variablebyte.h"
  • In line 17 of tools/playground/rle.cpp, instantiate CODECFactory first. Change line 17 to the following two lines:
    CODECFactory factory;
    IntegerCODEC &codec = *factory.getFromName("simdfastpfor256");

Here are some workarounds

Thanks, these definitely helped me reach a successful compilation. I'll make a PR for these changes if nobody beats me to it, but I can't easily check whether these changes will break other targets. :/