移植LibreOffice的失败经历
寻找繁星
感觉离成功只差一步了(也是最艰难的一步)。
安装依赖
# https://wiki.documentfoundation.org/Development/BuildingOnLinux
sudo apt-get install git build-essential zip ccache junit4 libkrb5-dev nasm graphviz python3 python3-dev qtbase5-dev libkf5coreaddons-dev libkf5i18n-dev libkf5config-dev libkf5windowsystem-dev libkf5kio-dev autoconf libcups2-dev libfontconfig1-dev gperf default-jdk doxygen libxslt1-dev xsltproc libxml2-utils libxrandr-dev libx11-dev bison flex libgtk-3-dev libgstreamer-plugins-base1.0-dev libgstreamer1.0-dev ant ant-optional
下载源码
wget http://mirrors.tuna.tsinghua.edu.cn/libreoffice/libreoffice/src/7.3.2/libreoffice-7.3.2.1.tar.xz
xz -dcT0 libreoffice-7.3.2.1.tar.xz | tar -x
cd libreoffice-7.3.2.1
在configure脚本中添加loongarch64的支持
vim configure
,找到这一段:
mips64el)
CPUNAME=GODSON64
RTL_ARCH=MIPS64_EL
EPM_FLAGS="-a mips64el"
PLATFORMID=linux_mips64_el
;;
在后面加上一段
loongarch64)
CPUNAME=GODSON64
RTL_ARCH=LOONGARCH64_EL
EPM_FLAGS="-a loongarch64el"
PLATFORMID=linux_loongarch64_el
;;
注意这里的CPUNAME写成GODSON64其实并不好,这里暂时先写成这样。
继续搜索mips64el
,然后在后面也加上loongarch64
:
# This is only used in Qt5/Qt6/KF5 checks to determine if /usr/lib64
# paths should be added to library search path. So lets put all 64-bit
# platforms there.
supports_multilib=
case "$host_cpu" in
x86_64 | powerpc64 | powerpc64le | s390x | aarch64 | mips64 | mips64el | loongarch64)
if test "$SAL_TYPES_SIZEOFLONG" = "8"; then
supports_multilib="yes"
fi
;;
*)
;;
esac
开始编译
sudo apt install libgpgmepp-dev libgpgme-dev firebird-dev
./configure -with-system-nss --with-system-gpgmepp --with-system-firebird --disable-pdfium
make -j$(nproc)
如果不--disable-pdfium
,会报这个错:
/home/searchstar/SetupFiles/libreoffice-7.3.2.1/workdir/UnpackedTarball/pdfium/build/build_config.h:122:2: error: #error Please add support for your architecture in build/build_config.h
#error Please add support for your architecture in build/build_config.h
^~~~~
当然也可以把workdir/UnpackedTarball/pdfium/build/build_config.h
的122行改成#define ARCH_CPU_64_BITS 1
。
编译失败
很遗憾,在成功编译了一堆依赖之后,最终还是编译失败了:
/home/searchstar/SetupFiles/libreoffice-7.3.2.1/bridges/source/cpp_uno/gcc3_linux_mips64/cpp2uno.cxx:47:10: fatal error: sys/sysmips.h: 没有那个文件或目录
#include <sys/sysmips.h>
^~~~~~~~~~~~~~~
compilation terminated.
make[1]: *** [/home/searchstar/SetupFiles/libreoffice-7.3.2.1/solenv/gbuild/LinkTarget.mk:333:/home/searchstar/SetupFiles/libreoffice-7.3.2.1/workdir/CxxObject/bridges/source/cpp_uno/gcc3_linux_mips64/cpp2uno.o] 错误 1
失败的地方是cpp_uno
,相关资料:
https://en.wikipedia.org/wiki/Universal_Network_Objects
https://help.libreoffice.org/latest/tg/text/sbasic/shared/uno_objects.html
大概看了一下源码,主要是一些跟体系结构有关的汇编需要修改。但是这已经超过我的能力范围了,希望有对LoongArch汇编比较熟的人在cpp_uno
里添加loongarch64
的支持。
yetist
确实,编译 libreoffice 的主要问题是要把 cpp_uno 这个给移植了。
REDEAST
民间的话,估计只能xen0n大神亲自出马了!
杜比
In loongnix
apt source libreoffice
cd libreoffice-xxx
dpkg-buildpackage -uc -us
寻找繁星
杜比 我在/etc/apt/sources.list
里加入这两行:
deb-src http://pkg.loongnix.cn:8080/loongnix DaoXiangHu-testing main contrib non-free
deb-src http://pkg.loongnix.cn:8080/loongnix DaoXiangHu-cartoons main contrib non-free
然后sudo apt update
,然后sudo apt build-dep libreoffice
,会报错:
有一些软件包无法被安装。如果您用的是 unstable 发行版,这也许是
因为系统无法达到您要求的状态造成的。该版本中可能会有一些您需要的软件
包尚未被创建或是它们已被从新到(Incoming)目录移出。
下列信息可能会对解决问题有所帮助:
下列软件包有未满足的依赖关系:
builddeps:libreoffice : 依赖: libformula-java (>= 1.1.7) 但是它将不会被安装
依赖: liblayout-java (>= 0.2.10) 但是它将不会被安装
依赖: libloader-java (>= 1.1.6) 但无法安装它
依赖: librepository-java (>= 1.1.6) 但是它将不会被安装
依赖: libsac-java 但无法安装它
依赖: g++-mingw-w64-i686 但无法安装它
E: 无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依赖关系。
zl2019
为楼主点赞
杜比
寻找繁星
看列出的依赖,可能是依赖软件包缺失,但因为loongnix有些软件,是集成到一块的,不好说就完全进行不下去。
遇到这样的情况,一般这样处理:
运行如下命令
dpkg-buildpackage -uc -us -d
这个命令会忽略依赖,但不会修改configure过程,昨晚我也试过,需要在config.sub等文件里,添加loongarch支持
然后看编译过程中,报哪些错误,有些架构相关是否能忽略掉。
若绕不过去,再考虑架构相关代码
若能绕过去,在debian/control里,把一些不需要的依赖编辑掉
生成最终可用的deb软件包
这样做的修改都会根据提示,制作成补丁,便于后续打磨
冲天飞豹
xen0n
冲天飞豹 理解你只是想打个广告,但我看了压缩包没有源码或者补丁,CLFS repo 里也没有。感觉这个回复对这个讨论串没什么作用(显然楼主不只是想用)。