【笔记】fedora 27 在 mips64el 上编译需要做的修改。

不知道提交到 fedora 官方容易不?
1、binutils 需要修改默认 ABI 为 N64 ,debian 有 patch ,不过只能参考,Debian 的 n64 是 -gnueabin64 的 arch 字段末尾才用 N64 做默认。另外打开 mips64el 的 ld.gold 似乎就是增加架构识别而已,debian 有补丁。并且 gold_arches 还要添加 %{mips} 。另外 debian 的 bug 886222 也遇到了。应该会在新版本的 binutils 里面修复,不过感觉会是 2.30 系列的。886222 在 2.30 没有修复,估计要等 2.30.1 了。
2、glibc 里面有个 -O3 的优化,会导致后面生成 locale 数据时段错误,改成 -O2 就行。注:glibc 2.27 没这个问题了。
3、elfutils 需要打补丁增加 mips64el 的支持,不然编译 rpm 包是没办法处理 debuginfo 的。debian 有补丁。
4、redhat-rpm-config 里面的 nodejs 增加 mips64el 的支持设定。
5、qt5 分包 qt5-srpm-macros 里面去掉 qt5_qtwebengine_arches 的 mips64* 支持,现在的 webengine 不支持 mips64* ,。
6、java-1.8.0-openjdk ,增加 mips64el 的 ZERO 支持。debian 有补丁。至于本地优化版,龙芯的那是哪年的版本啊?而且 srpm 也和 fedora 的无法有效合并,不如拆开,想用本地优化的就找龙芯的 rpm 装上就行了。
7、libsrtp 的 SOURCE 里面有 config.h ,需要加上 mips64 的识别为 64 位的内容。
8、libunwind 加上 mips64el 的支持,就是不知道这东西能不能在 mips64el 下面使用?编译通过是没问题。看了下 debian 似乎有 mips64el ,那就是支持了。
9、libvirt 需要去掉 zfs 的依赖。
10、mozjs17 打上 loongnix 的补丁也不行,还要 --disable-methodjit 是为什么。
11、mozjs38 需要修改 configure ,设置 64bit 识别,关闭 ION 的支持。
12、qt5-qtdeclarative 需要禁用 JIT ,debian 有补丁。
13、rdma-core 和 s390 一样不支持 mlx5 相关,搜索 ifnarch 和 s390x 一起略过即可。
14、webkit2gtk3 原来的 webkitgtk4 不支持 jit ,需要修改 spec 关掉。
15、gcc 需要加 --with-madd4=no ,原因 http://ask.loongnix.org/?/question/266 ,另外 http://ask.loongnix.org/?/question/295  最好加上,还有打开 long-double-128 。
16、compiler-rt 注释掉 # move sanitizer libs to better place 下面的 mv 命令,mips64el 没有生成这个目录。
17、R 需要增加 mips 的编译参数,默认导致增加 -m32 。mips 现在支持 openblas 和 valgrind 。
18、spice 增加 mips 的支持即可。
19、gdb 需要和 arm 在一起设置 have_inproctrace 为 0 。因为不支持。
22、cargo 增加 mips64el 架构,并且因为 rust 的 n64 其实是 -gnuabi64 而不是 -gnu ,还要做区别对待,有spec 里的 lua 脚本干这个。
23、rust 同上。以及 https://github.com/rust-lang/rust/issues/52108  ,估计未来会修复。
25、openblas-srpm-macros 他的 macros 文件增加 %{mips}
26、openblas 有架构识别的问题,龙芯可以自动识别,但是问题是 -march 会冲突,现在系统默认优化 mips64r2 ,但是自动识别后会增加优化为 mips64 。不如设置 TARGET="TARGET=SICORTEX DYNAMIC_ARCH=0" 。似乎 SICORTEX 是一个更通用的设置。至少 debian 就是这么选择的。其后还有一个 ifarch 的地方,使用 TARGET=SICORTEX 的话,对应 suffix="_mips" 。剩下的就是 execstack 的问题了,这东西不支持 mips ?有没有补丁?现在只能是单独注释掉了。而且好奇怪,RHEL 7 才检测架构区别注释。但是 fc 就全系支持?
27、graphviz 的 lua 安装有问题。LIBPOSTFIX 没有在 mips64 下面正确被设置为 64 。
28、libipt 加上 mips 的支持,不过,这东西其实是调试 Intel CPU 的东西……反正能编译成功,就留着吧……
29、libEMF 可以补丁支持 mips ,源自 openbsd https://svnweb.freebsd.org/ports/head/graphics/libemf/files/patch-include_libEMF_wine_winnt.h?revision=395939&view=co
30、golang 增加架构的定义名 mips64le (注意是 le 不是 el ,32 位也一样,mipsle ),external_linker 和 cgo 也都支持。不过 bootstrip 不能用 gccgo ,这货看网上的讨论,架构识别名和 golang 不一样,导致运行出问题。
31、go-srpm-macros 增加 %golang_arches  %{mips} ,不过这货居然源代码是压缩包,所以不能直接修改源代码,只能增加补丁。
32、redhat-lsb 这就麻烦了,他有一个 redhat_lsb_trigger 程序,没有 mips 的支持,只能绕过(似乎 loongnix 就是绕过的)。
33、hawtjni 增加龙芯识别 64 位
34、rust-srpm-macros 的 data/macros.rust-srpm 增加 mips
35、valgrind 增加 mips 的架构支持 mips64el 的 valarch 为 mips64 ,mipsel 的是 mips
36、eclipse 需要增加 mips64el 支持。其实有个歪招就是,把所有的 aarch64 替换成 mips64el ,同时把所有 aarch64 的文件也都改名。
37、atlas 架构需要 %define base_options "-A UNKNOWN -V 1" ,至于 flags %{nil} 就行了。这样似乎是用通用代码。不过感觉 debian 的办法更好,增加一个 GENERIC 架构,这样就能跳过 atlas 的架构分析部分。
38、apache-commons-daemon 需要增加补丁,增加 mips64* ,debian 有补丁,但是不能直接用,fc 直接调用的 configure ,需要修改修补的文件名。debian 对应的包叫做 commons-daemon ,他的补丁:https://salsa.debian.org/java-team/commons-daemon/raw/master/debian/patches/mips_abi_n32_n64_support.diff
39、libreoffice 缺乏跟进维护的典范, sed -i 's/ax_arch = aarch64/ax_arch = aarch64 -o $ax_arch = mips64/'  m4/ax_boost_base.m4
40、firefox 目前 mips64el 不能开 ion 也就是 firefox 的 jit 。还有下面有架构识别打开多线编译。
 41、python-libasyncns 没人升级吗? http://wnx.wisegears.com/portage/tree/net-dns/dnssec-validator/files/dnssec-validator-2.2-glib-2.25.patch  只需要 glibc 2.25 is missing ns_t_zxfr 。fedora 的问题
 42、isomd5sum 的 LIBDIR 没有识别 mips64 也是 lib64 目录,需要修改 Makefile
 43、libyui-ncurses 需要https://github.com/libyui/libyui-ncurses/commit/6444e043b58bf7703e4fc9035f380f3817207525.patch 也是 fedora 的问题
 44 、freerdp1.2 debian 有 https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=854689  不过patch 没见到,我用的是 busybox 类似的解决办法
 45、hdf 增加 mips 的支持 https://salsa.debian.org/debian-gis-team/hdf4/blob/master/debian/patches/hdfi.h  里面截取即可。
46、clang 需要增加补丁,识别 mips64el 的目录,可以参考 fc 的补丁 https://src.fedoraproject.org/rpms/clang/blob/master/f/0001-Driver-Prefer-vendor-supplied-gcc-toolchain.patch
47、nodejs 见 http://ask.loongnix.org/?/question/1193
48、kernel-headers 这货居然是用的已经做好的压缩包生成 rpm ,问题是不带 mips 的
49、 redhat-rpm-config 要给 macros.valgrind-srpm 里面加上 mips64el
50、jansi-native 里面 termios 的接口,mips 没有 c_ispeed 和 c_ospeed ,不过不知道去掉后会不会对其他程序有影响。
51、go-compilers 因为 mips64el 不支持 pie 编译,和 ppc64 一样就行:  sed -i 's/ppc64/ppc64 %%{mips}/g' rpm/macros.d/macros.go-compilers-golang
52、m2crypto 需要 setup.py 里面增加 mips64 的识别,增加 build_ext 里面传递给 GCC 的参数,定义 __mips64 和 __MIPSEL__ 。另外这货还没更新 spec,导致缺少 gcc 的依赖。 
   ========== 已经修复的:20、gjs 需要补丁 https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=893485  ,不过估计新版本的时候不需要了。注:上游已修复。
21、mariadb-connector-c 需要修改 cmake/install.cmake ,71 行有架构识别的内容,没有把 mips64 也识别成 64 位导致 plugin 安装错了地方。注:已经修复。
24、python-pillow 需要增加 mips64 的目录。上游似乎已经修复,参考 https://src.fedoraproject.org/cgit/rpms/python-pillow.git/tree/python-pillow_libdirs.patch?id=6a32c69f732ffd8c9ea0da1c858cb0a6d5ea1dd7
 

0 个评论

要回复文章请先登录注册