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. :/