libunwind: Fix build race conflict with gcc and musl
PATCH 1/1 libunwind: Fix build race conflict with gcc and musl
Building libunwind, then gcc-runtime causes build failures. This is hard to fix since gcc-runtime wants the internal gcc unwind.h header but libunwind wants to provide this. There are differences in include behaviour between gcc and glibc which are by design.
This patch hacks around the issue by looking for a define used during gcc-runtime's build and skipping to the internal header in that case. The patch is only enabled on musl and is the best workaround I could come up with to unblock failing builds on our autobuilder.
[YOCTO #10129]
meta/recipes-support/libunwind/libunwind/musl-header-conflict.patch new file +37 -0
@@ -0,0 +1,37 @@ +If you: + +TCLIBC=musl bitbake unwind +TCLIBC=musl bitbake gcc-runtime -c cleansstate +TCLIBC=musl bitbake gcc-runtime + +you will see libstdc++ fail to build due to finding libunwind's header file. + +Khem: "When we build any of gcc components they expect to use internal version +and that works with glibc based gcc since the search headers first look into gcc +headers, however with musl the gcc headers are searched after the standard +headers ( which is by design the right thing )." + +This patch hacks around the issue by looking for a define used during gcc-runtime's +build and skipping to the internal header in that case. + +[YOCTO #10129] + +RP 2016/8/18 + +Upstream-Status: Inappropriate [really need to fix gcc] + +Index: git/include/unwind.h +=================================================================== +--- git.orig/include/unwind.h ++++ git/include/unwind.h +@@ -23,6 +23,10 @@ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER L + OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ + ++#ifdef _GLIBCXX_SHARED ++#include_next <unwind.h> ++#endif ++ + #ifndef _UNWIND_H + #define _UNWIND_H +
meta/recipes-support/libunwind/libunwind_git.bb +1 -0
@@ -13,6 +13,7 @@ SRC_URI = "git://git.sv.gnu.org/libunwind.git \ file://0001-ppc32-Consider-ucontext-mismatches-between-glibc-and.patch \ " +SRC_URI_append_libc-musl = " file://musl-header-conflict.patch" EXTRA_OECONF_append_libc-musl = " --disable-documentation --disable-tests " # http://errors.yoctoproject.org/Errors/Details/20487/
Quoted 7 lines · Richard Purdie
Building libunwind, then gcc-runtime causes build failures. This is hard to fix since gcc-runtime wants the internal gcc
unwind.hheader but libunwind wants to provide this. There are differences in include behaviour between gcc and glibc which are by design.
based upon C library being musl or glibc
Quoted 5 lines
This patch hacks around the issue by looking for a define used during gcc-runtime's build and skipping to the internal header in that case. The patch is only enabled on musl and is the best workaround I could come up with to unblock failing builds on our auto builder.
I also saw gcc build failures not only gcc-runtime. I am not able to find the logs once I have a reproducer, I will check if it was in libstdc++ as well or elsewhere nevertheless this is ok to go in.
Quoted 34 lines
[YOCTO #10129]
Signed-off-by Richard Purdie <[email protected]>meta/recipes-support/libunwind/libunwind/musl-header-conflict.patch new file +23
-0@@ -0,0 +1,37 @@ +If you: + +TCLIBC=musl bitbake unwind +TCLIBC=musl bitbake gcc-runtime -c cleansstate +TCLIBC=musl bitbake gcc-runtime + +you will see libstdc++ fail to build due to finding libunwind's header file. + +Khem: "When we build any of gcc components they expect to use internal version +and that works with glibc based gcc since the search headers first look into gcc +headers, however with musl the gcc headers are searched after the standard +headers ( which is by design the right thing )." + +This patch hacks around the issue by looking for a define used during gcc-runtime's +build and skipping to the internal header in that case. + +[YOCTO #10129] + +RP 2016/8/18 + +Upstream-Status: Inappropriate [really need to fix gcc] + +Index: git/include/unwind.h
meta/recipes-support/libunwind/libunwind/musl-header-conflict.patch line 33
Quoted 10 lines
meta/recipes-support/libunwind/libunwind/musl-header-conflict.patch new file +10
-0+=================================================================== +--- git.orig/include/unwind.h ++++ git/include/unwind.h +@@ -23,6 +23,10 @@ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER L + OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ + ++#ifdef _GLIBCXX_SHARED ++#include_next <unwind.h> ++#endif
This is a solution we can live with since _GLIBCXX_SHARED is gcc internal define, it wont be visible to other packages.
meta/recipes-support/libunwind/libunwind_git.bb SRC_URI = "git://git.sv.gnu.org/libunwind.git \ · line 16
Quoted 13 lines
meta/recipes-support/libunwind/libunwind/musl-header-conflict.patch new file +4
-0++ + #ifndef _UNWIND_H + #define _UNWIND_H +meta/recipes-support/libunwind/libunwind_git.bb +1
-0@@ -13,6 +13,7 @@ SRC_URI = "git://git.sv.gnu.org/libunwind.git \ file://0001-ppc32-Consider-ucontext-mismatches-between-glibc-and.patch \ " +SRC_URI_append_libc-musl = " file://musl-header-conflict.patch”
It should be fine to use it in general too.
Quoted 5 lines
EXTRA_OECONF_append_libc-musl = " --disable-documentation --disable-tests "
Quoted 14 lines · Khem Raj
Quoted 8 lines · Richard Purdie
Building libunwind, then gcc-runtime causes build failures. This is hard to fix since gcc-runtime wants the internal gcc
unwind.hheader but libunwind wants to provide this. There are differences in include behaviour between gcc and glibc which are by design.based upon C library being musl or glibc
Quoted 1 line
Quoted 8 lines
Quoted 4 lines
This patch hacks around the issue by looking for a define used during gcc-runtime's build and skipping to the internal header in that case. The patch is only enabled on musl and is the best workaround I could come up with to unblock failing builds on our auto builder.
I also saw gcc build failures not only gcc-runtime. I am not able to find the logs once I have a reproducer, I will check if it was in libstdc++ as well or elsewhere nevertheless this is ok to go in.
It was compiling gcc itself for arm/musl target see
http://errors.yoctoproject.org/Errors/Details/73163/
thats why I disabled it on world builds on arm. Real fix would be for gcc to get its act together.
Quoted 71 lines
Quoted 35 lines
[YOCTO #10129]
Signed-off-by Richard Purdie <[email protected]>meta/recipes-support/libunwind/libunwind/musl-header-conflict.patch new file +23
-0@@ -0,0 +1,37 @@ +If you: + +TCLIBC=musl bitbake unwind +TCLIBC=musl bitbake gcc-runtime -c cleansstate +TCLIBC=musl bitbake gcc-runtime + +you will see libstdc++ fail to build due to finding libunwind's header file. + +Khem: "When we build any of gcc components they expect to use internal version +and that works with glibc based gcc since the search headers first look into gcc +headers, however with musl the gcc headers are searched after the standard +headers ( which is by design the right thing )." + +This patch hacks around the issue by looking for a define used during gcc-runtime's +build and skipping to the internal header in that case. + +[YOCTO #10129] + +RP 2016/8/18 + +Upstream-Status: Inappropriate [really need to fix gcc] + +Index: git/include/unwind.hmeta/recipes-support/libunwind/libunwind/musl-header-conflict.patch line 33
Quoted 10 lines
meta/recipes-support/libunwind/libunwind/musl-header-conflict.patch new file +10
-0+=================================================================== +--- git.orig/include/unwind.h ++++ git/include/unwind.h +@@ -23,6 +23,10 @@ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER L + OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ + ++#ifdef _GLIBCXX_SHARED ++#include_next <unwind.h> ++#endifThis is a solution we can live with since
_GLIBCXX_SHAREDis gcc internal define, it wont be visible to other packages.meta/recipes-support/libunwind/libunwind_git.bb SRC_URI = "git://git.sv.gnu.org/libunwind.git \ · line 16
Quoted 13 lines
meta/recipes-support/libunwind/libunwind/musl-header-conflict.patch new file +4
-0++ + #ifndef _UNWIND_H + #define _UNWIND_H +meta/recipes-support/libunwind/libunwind_git.bb +1
-0@@ -13,6 +13,7 @@ SRC_URI = "git://git.sv.gnu.org/libunwind.git \ file://0001-ppc32-Consider-ucontext-mismatches-between-glibc-and.patch \ " +SRC_URI_append_libc-musl = " file://musl-header-conflict.patch”It should be fine to use it in general too.
Quoted 5 lines
EXTRA_OECONF_append_libc-musl = " --disable-documentation --disable-tests "