I tried to compile Boost libraries with aarch64-w64-mingw32 cross compiler.
Unfortunately, the build process failed after a while with this error message:
boost-1.90.0-1.noarch/src/boost-1.90.0/libs/nowide/src/iostream.cpp:148:70: error: 'init_priority' attribute ignored [-Werror=attributes]
148 | #define BOOST_NOWIDE_INIT_PRIORITY __attribute__((init_priority(101)))
| ^
At the time of writing, the support for init_priority is tested into two CMakeLists.txt files:
- libs/filesystem/CMakeLists.txt
- libs/nowide/CMakeLists.txt
Inside these scripts, check_cxx_source_compiles() is used.
These calls check if the test compiles fine and they define BOOST_NOWIDE_HAS_INIT_PRIORITY and BOOST_FILESYSTEM_HAS_INIT_PRIORITY if everything looks ok.
However, these tests do not fail if there is a just warning.
For example, I tried to compile the test source myself and I got this:
$ aarch64-w64-mingw32-g++ boost-1.90.0-1.noarch/src/boost-1.90.0/libs/nowide/config/check_attribute_init_priority.cpp -c -o c.o
boost-1.90.0-1.noarch/src/boost-1.90.0/libs/nowide/config/check_attribute_init_priority.cpp:9:43: warning: 'init_priority' attribute ignored [-Wattributes]
9 | Foo foo __attribute__((init_priority(101)));
| ^
So, for CMake the test was good anyways.
The problem comes out because the -Werror option, which makes the build process to fail later.
I have not enough knowledge at the moment, but I can see these two solutions:
Adding -Wno-error=attributes (if supported) when building those libraries, or
Adding -Werror (if supported) when compiling the tests with check_cxx_source_compiles().
This issue happens when building for Windows on ARM64 with GCC.
The i686-w64-mingw32 and x86_64-w64-mingw32 cross compilers also work with that attribute, but they don't emit any warning and that's why this issue was not seen before.
I hope that you will find this report useful.
EDIT: it looks like these scripts already handle CMAKE_REQUIRED_FLAGS before calling check_cxx_source_compiles():
- libs/atomic/CMakeLists.txt
- libs/log/CMakeLists.txt
Probably, it would be enough to follow the same way for adding the needed option.
I tried to compile Boost libraries with
aarch64-w64-mingw32cross compiler.Unfortunately, the build process failed after a while with this error message:
At the time of writing, the support for
init_priorityis tested into two CMakeLists.txt files:Inside these scripts,
check_cxx_source_compiles()is used.These calls check if the test compiles fine and they define
BOOST_NOWIDE_HAS_INIT_PRIORITYandBOOST_FILESYSTEM_HAS_INIT_PRIORITYif everything looks ok.However, these tests do not fail if there is a just warning.
For example, I tried to compile the test source myself and I got this:
So, for CMake the test was good anyways.
The problem comes out because the
-Werroroption, which makes the build process to fail later.I have not enough knowledge at the moment, but I can see these two solutions:
Adding
-Wno-error=attributes(if supported) when building those libraries, orAdding
-Werror(if supported) when compiling the tests withcheck_cxx_source_compiles().This issue happens when building for Windows on ARM64 with GCC.
The
i686-w64-mingw32andx86_64-w64-mingw32cross compilers also work with that attribute, but they don't emit any warning and that's why this issue was not seen before.I hope that you will find this report useful.
EDIT: it looks like these scripts already handle
CMAKE_REQUIRED_FLAGSbefore callingcheck_cxx_source_compiles():Probably, it would be enough to follow the same way for adding the needed option.