-
Notifications
You must be signed in to change notification settings - Fork 164
Open
Description
With gcc 15.2.1+r604 and glibc 2.43 on Arch Linux this project does not build.
[ 33%] Building CXX object model/CMakeFiles/model.dir/model.cpp.o
In file included from /home/avlec/pico/pico-sdk/src/common/boot_picoboot_headers/include/boot/picoboot.h:15,
from /home/avlec/pico/picotool/model/model.h:8,
from /home/avlec/pico/picotool/model/model.cpp:1:
/usr/include/bits/struct_mutex.h:35:9: error: declaration does not declare anything [-fpermissive]
35 | short __unused;
| ^~~~~~~~
In file included from /usr/include/c++/15.2.1/x86_64-pc-linux-gnu/bits/gthr-default.h:35,
from /usr/include/c++/15.2.1/x86_64-pc-linux-gnu/bits/gthr.h:157,
from /usr/include/c++/15.2.1/ext/atomicity.h:37,
from /usr/include/c++/15.2.1/bits/shared_ptr_base.h:61,
from /usr/include/c++/15.2.1/bits/shared_ptr.h:53,
from /usr/include/c++/15.2.1/memory:82,
from /home/avlec/pico/picotool/model/model.h:43:
/usr/include/c++/15.2.1/ext/concurrence.h:124:34: error: cannot convert ‘<brace-enclosed initializer list>’ to ‘__pthread_internal_list*’ in initialization
124 | __gthread_mutex_t _M_mutex = __GTHREAD_MUTEX_INIT;
| ^~~~~~~~~~~~~~~~~~~~
/usr/include/c++/15.2.1/ext/concurrence.h:179:44: error: cannot convert ‘<brace-enclosed initializer list>’ to ‘__pthread_internal_list*’ in initialization
179 | __gthread_recursive_mutex_t _M_mutex = __GTHREAD_RECURSIVE_MUTEX_INIT;
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
make[2]: *** [model/CMakeFiles/model.dir/build.make:79: model/CMakeFiles/model.dir/model.cpp.o] Error 1
make[1]: *** [CMakeFiles/Makefile2:802: model/CMakeFiles/model.dir/all] Error 2
make: *** [Makefile:136: all] Error 2
/usr/include/bits/struct_mutex.h
This seems to be a bad glibc header that was fixed recently upstream and is unreleased
https://sourceware.org/git/?p=glibc.git;a=commit;h=243bdfec8f7cd4a85a8ce6e4e9a5a5accd3ce1aa
I do not know how to work around this one... (I just edited the system header with sudo to change __unused to the same thing in the linked glibc commit)
/usr/include/c++/15.2.1/ext/concurrence.h
Similar __GTHREAD failures have cropped up in pico-sdk here raspberrypi/pico-sdk#2746. Linked in that issue is an abandoned fix of which I applied here and it resolves these issues.
diff --git a/model/CMakeLists.txt b/model/CMakeLists.txt
index cd9e775..4879f63 100644
--- a/model/CMakeLists.txt
+++ b/model/CMakeLists.txt
@@ -4,6 +4,10 @@ add_library(model STATIC
target_include_directories(model PUBLIC ${CMAKE_CURRENT_LIST_DIR} ${CMAKE_CURRENT_BINARY_DIR})
target_link_libraries(model PUBLIC boot_uf2_headers boot_picoboot_headers pico_platform_headers errors)
+target_compile_definitions(model PRIVATE
+ _GTHREAD_USE_MUTEX_INIT_FUNC
+ _GTHREAD_USE_RECURSIVE_MUTEX_INIT_FUNC
+)
add_custom_target(unreadable_rom_data DEPENDS
${CMAKE_CURRENT_BINARY_DIR}/rp2350_a2_rom_end.h
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels