diff mbox series

[2/2] package/mupdf: fix building with some toolchains

Message ID 20210907120933.31647-1-raphael.melotte@mind.be
State Superseded
Headers show
Series package/mupdf: fix building on mips | expand

Commit Message

Raphaël Mélotte Sept. 7, 2021, 12:09 p.m. UTC
With some toolchains (e.g. mips64el), partial linking fails in the
following way:
/tmp/instance-1/output-1/host/opt/ext-toolchain/bin/../lib/gcc/mips64el-buildroot-linux-uclibc/8.4.0/../../../../mips64el-buildroot-linux-uclibc/bin/ld: build/release/libmupdf.a(Dingbats.cff.o): ABI is incompatible with that of the selected emulation
/tmp/instance-1/output-1/host/opt/ext-toolchain/bin/../lib/gcc/mips64el-buildroot-linux-uclibc/8.4.0/../../../../mips64el-buildroot-linux-uclibc/bin/ld: failed to merge target specific data of file build/release/libmupdf.a(Dingbats.cff.o)

Taking inspiration from commit
9eca4b9f84fe2535d8caee6eeb062ce33733bdf1, fix it by using GCC instead
of LD for partial linking.

'nostdlib' has to be added, or it will try to use GCC libraries for
partial linking and fail with 'cannot find -lgcc_s'.

Note that on mips the build will now produce warnings similar to this
one:
/home/rme/Documents/buildroot/output/host/lib/gcc/mips64el-buildroot-linux-gnu/10.3.0/../../../../mips64el-buildroot-linux-gnu/bin/ld: build/release/libmupdf.a(NotoSansTaiTham-Regular.ttf.o): warning: linking abicalls files with non-abicalls files

During a runtime test on mips64el under qemu, mupdf-x11 was
nonetheless able to display a sample PDF file correctly.

This fixes the following build failures (and many similar ones):
http://autobuild.buildroot.net/results/156fe9ee5f6dccdc98990f6c5de5562383bc2b74/

Signed-off-by: Raphaël Mélotte <raphael.melotte@mind.be>
---
 .../0001-use-gcc-instead-of-objcopy.patch     | 29 +++++++++++++++++++
 1 file changed, 29 insertions(+)
 create mode 100644 package/mupdf/0001-use-gcc-instead-of-objcopy.patch

Comments

Arnout Vandecappelle Sept. 19, 2021, 12:32 p.m. UTC | #1
On 07/09/2021 14:09, Raphaël Mélotte wrote:
> With some toolchains (e.g. mips64el), partial linking fails in the
> following way:
> /tmp/instance-1/output-1/host/opt/ext-toolchain/bin/../lib/gcc/mips64el-buildroot-linux-uclibc/8.4.0/../../../../mips64el-buildroot-linux-uclibc/bin/ld: build/release/libmupdf.a(Dingbats.cff.o): ABI is incompatible with that of the selected emulation
> /tmp/instance-1/output-1/host/opt/ext-toolchain/bin/../lib/gcc/mips64el-buildroot-linux-uclibc/8.4.0/../../../../mips64el-buildroot-linux-uclibc/bin/ld: failed to merge target specific data of file build/release/libmupdf.a(Dingbats.cff.o)
> 
> Taking inspiration from commit
> 9eca4b9f84fe2535d8caee6eeb062ce33733bdf1, fix it by using GCC instead
> of LD for partial linking.
> 
> 'nostdlib' has to be added, or it will try to use GCC libraries for
> partial linking and fail with 'cannot find -lgcc_s'.
> 
> Note that on mips the build will now produce warnings similar to this
> one:
> /home/rme/Documents/buildroot/output/host/lib/gcc/mips64el-buildroot-linux-gnu/10.3.0/../../../../mips64el-buildroot-linux-gnu/bin/ld: build/release/libmupdf.a(NotoSansTaiTham-Regular.ttf.o): warning: linking abicalls files with non-abicalls files
> 
> During a runtime test on mips64el under qemu, mupdf-x11 was
> nonetheless able to display a sample PDF file correctly.
> 
> This fixes the following build failures (and many similar ones):
> http://autobuild.buildroot.net/results/156fe9ee5f6dccdc98990f6c5de5562383bc2b74/
> 
> Signed-off-by: Raphaël Mélotte <raphael.melotte@mind.be>
> ---
>   .../0001-use-gcc-instead-of-objcopy.patch     | 29 +++++++++++++++++++
>   1 file changed, 29 insertions(+)
>   create mode 100644 package/mupdf/0001-use-gcc-instead-of-objcopy.patch
> 
> diff --git a/package/mupdf/0001-use-gcc-instead-of-objcopy.patch b/package/mupdf/0001-use-gcc-instead-of-objcopy.patch
> new file mode 100644
> index 0000000000..9a8dacbcca
> --- /dev/null
> +++ b/package/mupdf/0001-use-gcc-instead-of-objcopy.patch
> @@ -0,0 +1,29 @@
> +From de27daedf8cb1d210b0b1facd87634c6aaaf1a74 Mon Sep 17 00:00:00 2001
> +From: =?UTF-8?q?Rapha=C3=ABl=20M=C3=A9lotte?= <raphael.melotte@mind.be>
> +Date: Thu, 2 Sep 2021 20:17:26 +0200
> +Subject: [PATCH] use gcc instead of objcopy
> +MIME-Version: 1.0
> +Content-Type: text/plain; charset=UTF-8
> +Content-Transfer-Encoding: 8bit
> +
> +Signed-off-by: Raphaël Mélotte <raphael.melotte@mind.be>

  What's the upstream status of this patch? We want to have a link to the 
upstream MR or patchwork or mailing list archive or whatever in the patch. Or, 
if that's not possible (e.g. upstream is dead), something like:

Upstream-Status: dead (no activity since 2003)


  Regards,
  Arnout

> +---
> + Makefile | 2 +-
> + 1 file changed, 1 insertion(+), 1 deletion(-)
> +
> +diff --git a/Makefile b/Makefile
> +index b0fb617e2..0a8795e0e 100644
> +--- a/Makefile
> ++++ b/Makefile
> +@@ -64,7 +64,7 @@ endif
> + LINK_CMD = $(QUIET_LINK) $(MKTGTDIR) ; $(CC) $(LDFLAGS) -o $@ $^ $(LIBS)
> + TAGS_CMD = $(QUIET_TAGS) ctags -R --c-kinds=+p
> + WINDRES_CMD = $(QUIET_WINDRES) $(MKTGTDIR) ; $(WINDRES) $< $@
> +-OBJCOPY_CMD = $(QUIET_OBJCOPY) $(MKTGTDIR) ; $(LD) -r -b binary -z noexecstack -o $@ $<
> ++OBJCOPY_CMD = $(QUIET_OBJCOPY) $(MKTGTDIR) ; $(CC) -Wl,-r -Wl,-b -Wl,binary -Wl,-z -Wl,noexecstack -nostdlib -o $@ $<
> +
> + # --- Rules ---
> +
> +--
> +2.32.0
> +
>
Arnout Vandecappelle Oct. 5, 2021, 7:33 p.m. UTC | #2
On 27/09/2021 13:03, Raphaël Mélotte wrote:
> With some toolchains (e.g. mips64el), partial linking fails in the
> following way:
> /tmp/instance-1/output-1/host/opt/ext-toolchain/bin/../lib/gcc/mips64el-buildroot-linux-uclibc/8.4.0/../../../../mips64el-buildroot-linux-uclibc/bin/ld: build/release/libmupdf.a(Dingbats.cff.o): ABI is incompatible with that of the selected emulation
> /tmp/instance-1/output-1/host/opt/ext-toolchain/bin/../lib/gcc/mips64el-buildroot-linux-uclibc/8.4.0/../../../../mips64el-buildroot-linux-uclibc/bin/ld: failed to merge target specific data of file build/release/libmupdf.a(Dingbats.cff.o)
> 
> Taking inspiration from commit
> 9eca4b9f84fe2535d8caee6eeb062ce33733bdf1, fix it by using GCC instead
> of LD for partial linking.
> 
> Note that on mips the build will now produce warnings similar to this
> one:
> buildroot/output/host/lib/gcc/mips64el-buildroot-linux-gnu/10.3.0/../../../../mips64el-buildroot-linux-gnu/bin/ld: build/release/libmupdf.a(NotoSansTaiTham-Regular.ttf.o): warning: linking abicalls files with non-abicalls files
> 
> During a runtime test on mips64el under qemu, mupdf-x11 was
> nonetheless able to display a sample PDF file correctly.
> 
> Fixes:
> - http://autobuild.buildroot.net/results/156fe9ee5f6dccdc98990f6c5de5562383bc2b74/
> 
> Signed-off-by: Raphaël Mélotte <raphael.melotte@mind.be>

  Applied to master, thanks.

[snip]

> +
> +Signed-off-by: Raphaël Mélotte <raphael.melotte@mind.be>
> +[Upstream status: https://bugs.ghostscript.com/show_bug.cgi?id=704442]

  Upstream commented that you could also build with HAVE_OBJCOPY=no, but I like 
this solution better.

> +---
> + Makefile | 2 +-
> + 1 file changed, 1 insertion(+), 1 deletion(-)
> +
> +diff --git a/Makefile b/Makefile
> +index b0fb617e2..0a8795e0e 100644
> +--- a/Makefile
> ++++ b/Makefile
> +@@ -64,7 +64,7 @@ endif
> + LINK_CMD = $(QUIET_LINK) $(MKTGTDIR) ; $(CC) $(LDFLAGS) -o $@ $^ $(LIBS)
> + TAGS_CMD = $(QUIET_TAGS) ctags -R --c-kinds=+p
> + WINDRES_CMD = $(QUIET_WINDRES) $(MKTGTDIR) ; $(WINDRES) $< $@
> +-OBJCOPY_CMD = $(QUIET_OBJCOPY) $(MKTGTDIR) ; $(LD) -r -b binary -z noexecstack -o $@ $<
> ++OBJCOPY_CMD = $(QUIET_OBJCOPY) $(MKTGTDIR) ; $(CC) -Wl,-r -Wl,-b -Wl,binary -Wl,-z -Wl,noexecstack -nostdlib -o $@ $<

  Note that -Wl allows you to separate options with commas, i.e.:

$(CC) -Wl,-r,-b,binary,-z,noexecstack -nostdlib -o $@ $<

  However, I didn't feel like doing a build to test, so I left it as is.

  Regards,
  Arnout


> +
> + # --- Rules ---
> +
> +--
> +2.33.0
> +
>
Peter Korsgaard Oct. 6, 2021, 3:39 p.m. UTC | #3
>>>>> "Raphaël" == Raphaël Mélotte <raphael.melotte@mind.be> writes:

 > With some toolchains (e.g. mips64el), partial linking fails in the
 > following way:
 > /tmp/instance-1/output-1/host/opt/ext-toolchain/bin/../lib/gcc/mips64el-buildroot-linux-uclibc/8.4.0/../../../../mips64el-buildroot-linux-uclibc/bin/ld: build/release/libmupdf.a(Dingbats.cff.o): ABI is incompatible with that of the selected emulation
 > /tmp/instance-1/output-1/host/opt/ext-toolchain/bin/../lib/gcc/mips64el-buildroot-linux-uclibc/8.4.0/../../../../mips64el-buildroot-linux-uclibc/bin/ld: failed to merge target specific data of file build/release/libmupdf.a(Dingbats.cff.o)

 > Taking inspiration from commit
 > 9eca4b9f84fe2535d8caee6eeb062ce33733bdf1, fix it by using GCC instead
 > of LD for partial linking.

 > Note that on mips the build will now produce warnings similar to this
 > one:
 > buildroot/output/host/lib/gcc/mips64el-buildroot-linux-gnu/10.3.0/../../../../mips64el-buildroot-linux-gnu/bin/ld: build/release/libmupdf.a(NotoSansTaiTham-Regular.ttf.o): warning: linking abicalls files with non-abicalls files

 > During a runtime test on mips64el under qemu, mupdf-x11 was
 > nonetheless able to display a sample PDF file correctly.

 > Fixes:
 > - http://autobuild.buildroot.net/results/156fe9ee5f6dccdc98990f6c5de5562383bc2b74/

 > Signed-off-by: Raphaël Mélotte <raphael.melotte@mind.be>

Committed to 2021.08.x, thanks.
diff mbox series

Patch

diff --git a/package/mupdf/0001-use-gcc-instead-of-objcopy.patch b/package/mupdf/0001-use-gcc-instead-of-objcopy.patch
new file mode 100644
index 0000000000..9a8dacbcca
--- /dev/null
+++ b/package/mupdf/0001-use-gcc-instead-of-objcopy.patch
@@ -0,0 +1,29 @@ 
+From de27daedf8cb1d210b0b1facd87634c6aaaf1a74 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Rapha=C3=ABl=20M=C3=A9lotte?= <raphael.melotte@mind.be>
+Date: Thu, 2 Sep 2021 20:17:26 +0200
+Subject: [PATCH] use gcc instead of objcopy
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Signed-off-by: Raphaël Mélotte <raphael.melotte@mind.be>
+---
+ Makefile | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/Makefile b/Makefile
+index b0fb617e2..0a8795e0e 100644
+--- a/Makefile
++++ b/Makefile
+@@ -64,7 +64,7 @@ endif
+ LINK_CMD = $(QUIET_LINK) $(MKTGTDIR) ; $(CC) $(LDFLAGS) -o $@ $^ $(LIBS)
+ TAGS_CMD = $(QUIET_TAGS) ctags -R --c-kinds=+p
+ WINDRES_CMD = $(QUIET_WINDRES) $(MKTGTDIR) ; $(WINDRES) $< $@
+-OBJCOPY_CMD = $(QUIET_OBJCOPY) $(MKTGTDIR) ; $(LD) -r -b binary -z noexecstack -o $@ $<
++OBJCOPY_CMD = $(QUIET_OBJCOPY) $(MKTGTDIR) ; $(CC) -Wl,-r -Wl,-b -Wl,binary -Wl,-z -Wl,noexecstack -nostdlib -o $@ $<
+ 
+ # --- Rules ---
+ 
+-- 
+2.32.0
+