|
阅读:8回复:0
yong编译记录-arm64-麒麟v10 sp1
Yong编译记录-arm64-麒麟v10 sp1
下载链接:https://www.ilanzou.com/s/a2ylZ4wM 一、基本情况 代码来源:https://github.com/dgod/yong 版本:yong 260729 git版本: yong-master-733fc4b build.js-master-825f332 编译环境: $ uname -a Linux user-pc 5.4.96-40-kr9a0 #43-KYLINOS SMP PREEMPT Mon Sep 29 06:08:46 UTC 2025 aarch64 aarch64 aarch64 GNU/Linux $ cat /etc/kylin-build Kylin-Desktop V10-SP1 Build 20260127 buildid: 82663 $ ibus version IBus 1.5.22 $ echo $XDG_CURRENT_DESKTOP UKUI user@user-pc:~/.local/share/yong$ sudo ./yong-tool.sh --sysinfo DIST debian found sysinfo: DIST: debian CFG: /usr/share/im-config/data/10_yong HOST_ARCH: arm HOST_MACHINE: 64 PATH_LIB32: PATH_LIB64: /usr/lib64 HOST_TRIPLET32: arm-linux-gnu HOST_TRIPLET64: aarch64-linux-gnu IBUS_STATUS: 1 GTK2_PATH64: /usr/lib/aarch64-linux-gnu/gtk-2.0 GTK3_PATH64: /usr/lib/aarch64-linux-gnu/gtk-3.0 GTK4_PATH64: /usr/lib/gtk-4.0 GTK2_IMMODULES32: GTK2_IMMODULES64: /usr/lib/aarch64-linux-gnu/gtk-2.0/2.10.0/immodules.cache QT5_PATH32: /usr/lib/qt5 QT5_PATH64: /usr/lib/aarch64-linux-gnu/qt5 --sysinfo Done 二、编译准备 1. 安装编译依赖 sudo apt install libgtk-3-dev libgtk2.0-dev libxkbcommon-dev libibus-1.0-dev libgtk-layer-shell-dev libwayland-dev qtbase5-dev qtbase5-private-dev build-essential libc6-dev clang nodejs curl libcurl4-openssl-dev p7zip fakeroot llvm-10-dev 注意:经实际测试,相比论坛帮助需要增加一些依赖 2.创建相关目录 进入yong-master目录创建。 mkdir -p {llib,cloud,gbk,mb,vim}/l64 ; mkdir -p {im,config}/{l64-gtk3,l64-gtk2} ; mkdir -p im/gtk-im/{l64-gtk3,l64-gtk2} ; mkdir -p im/IMdkit/l64 ; mkdir -p im/qt5-im/l64-qt5; mkdir -p im/conio/l64 mkdir -p linim/wui/l64; mkdir -p linim/l64 注意:因源码变化,需要增加im/conio、linimwui等目录。 三、编译和调试 运行命令编译(build.js要放入yong-master目录中)。 node build.js l64 -x l64-qt6 -x l64-gtk4 问题1: $ node build.js l64 -x l64-qt6 -x l64-gtk4 clang -fpic -D_GNU_SOURCE -Wall -pipe -g -O2 -flto=auto -ffast-math -fms-extensions -Wno-microsoft-anon-tag -Wno-invalid-source-encoding -fdefer-ts -c larray.c -o l64/larray.o clang: error: unknown argument: '-fdefer-ts' clang: error: unsupported argument 'auto' to option 'flto=' 原因: -flto=auto:麒麟系统老版本 Clang 没有 auto 取值,只支持 -flto(开启 LTO)、-flto=thin,不识别 flto=auto。 -fdefer-ts:这个参数是 GCC 专属扩展,Clang 完全不存在,直接无法识别 处理: $ grep -rn "fdefer" ./ ./llib/build.txt:73: env('CFLAGS+=-fdefer-ts'); ./rules.txt:82: env('CFLAGS+=-fdefer-ts'); 删除-fdefer-ts参数。 $ grep -rn "flto" ./ ./llib/build.txt:53: env("CFLAGS+=-Wall -pipe -g -O2 -flto=auto -ffast-math -fms-extensions -Wno-microsoft-anon-tag"); 将-flto=auto改为-flto。 问题2: clang -m64 -I/home/user/DEV/yong-master/llib -I/home/user/DEV/yong-master/im -DCFG_XIM_YBUS -DCFG_XIM_IBUS `pkg-config --cflags ibus-1.0` -DL_CALL_GLIB_SERVER -DL_CALL_GLIB_CLIENT -Wno-deprecated-declarations -I/home/user/DEV/yong-master/im/IMdkit -D_GNU_SOURCE -Wall -g -O2 -fno-strict-aliasing -Wno-format-truncation -fms-extensions -pipe -ffast-math -I/home/user/DEV/yong-master/include -I/home/user/DEV/yong-master/common -Wno-invalid-source-encoding -Wno-microsoft-anon-tag `pkg-config --cflags gtk+-3.0` -Wno-unused-const-variable -c /home/user/DEV/yong-master/im/wayland/ybus-wayland.c -o ybus-wayland.o warning: unknown warning option '-Wno-format-truncation' [-Wunknown-warning-option] /home/user/DEV/yong-master/im/wayland/ybus-wayland.c:60:66: error: unknown type name 'GtkLayerShellKeyboardMode' static void (*p_gtk_layer_set_keyboard_mode) (GtkWindow *window, GtkLayerShellKeyboardMode mode); ^ In file included from /home/user/DEV/yong-master/im/wayland/ybus-wayland.c:101: /home/user/DEV/yong-master/im/wayland/input-method-client-protocol-v1.h:352:121: error: use of undeclared identifier 'WL_MARSHAL_FLAG_DESTROY' ZWP_INPUT_METHOD_CONTEXT_V1_DESTROY, NULL, p_wl_proxy_get_version((struct wl_proxy *) zwp_input_method_context_v1), WL_MARSHAL_FLAG_DESTROY); ^ In file included from /home/user/DEV/yong-master/im/wayland/ybus-wayland.c:103: /home/user/DEV/yong-master/im/wayland/input-method-client-protocol-v2.h:658:105: error: use of undeclared identifier 'WL_MARSHAL_FLAG_DESTROY' ZWP_INPUT_METHOD_V2_DESTROY, NULL, p_wl_proxy_get_version((struct wl_proxy *) zwp_input_method_v2), WL_MARSHAL_FLAG_DESTROY); ^ /home/user/DEV/yong-master/im/wayland/input-method-client-protocol-v2.h:733:119: error: use of undeclared identifier 'WL_MARSHAL_FLAG_DESTROY' ZWP_INPUT_POPUP_SURFACE_V2_DESTROY, NULL, p_wl_proxy_get_version((struct wl_proxy *) zwp_input_popup_surface_v2), WL_MARSHAL_FLAG_DESTROY); ^ /home/user/DEV/yong-master/im/wayland/input-method-client-protocol-v2.h:884:133: error: use of undeclared identifier 'WL_MARSHAL_FLAG_DESTROY' ZWP_INPUT_METHOD_KEYBOARD_GRAB_V2_RELEASE, NULL, p_wl_proxy_get_version((struct wl_proxy *) zwp_input_method_keyboard_grab_v2), WL_MARSHAL_FLAG_DESTROY); ^ /home/user/DEV/yong-master/im/wayland/input-method-client-protocol-v2.h:948:121: error: use of undeclared identifier 'WL_MARSHAL_FLAG_DESTROY' ZWP_INPUT_METHOD_MANAGER_V2_DESTROY, NULL, p_wl_proxy_get_version((struct wl_proxy *) zwp_input_method_manager_v2), WL_MARSHAL_FLAG_DESTROY); ^ In file included from /home/user/DEV/yong-master/im/wayland/ybus-wayland.c:104: /home/user/DEV/yong-master/im/wayland/virtual-keyboard-v1.h:208:113: error: use of undeclared identifier 'WL_MARSHAL_FLAG_DESTROY' ZWP_VIRTUAL_KEYBOARD_V1_DESTROY, NULL, p_wl_proxy_get_version((struct wl_proxy *) zwp_virtual_keyboard_v1), WL_MARSHAL_FLAG_DESTROY); ^ /home/user/DEV/yong-master/im/wayland/ybus-wayland.c:1709:35: error: use of undeclared identifier 'GTK_LAYER_SHELL_KEYBOARD_MODE_NONE' p_gtk_layer_set_keyboard_mode(w,GTK_LAYER_SHELL_KEYBOARD_MODE_NONE); ^ /home/user/DEV/yong-master/im/wayland/ybus-wayland.c:1756:35: error: use of undeclared identifier 'GTK_LAYER_SHELL_KEYBOARD_MODE_NONE' p_gtk_layer_set_keyboard_mode(w,GTK_LAYER_SHELL_KEYBOARD_MODE_NONE); ^ /home/user/DEV/yong-master/im/wayland/ybus-wayland.c:1793:34: error: use of undeclared identifier 'GTK_LAYER_SHELL_KEYBOARD_MODE_NONE' p_gtk_layer_set_keyboard_mode(w,GTK_LAYER_SHELL_KEYBOARD_MODE_NONE); ^ /home/user/DEV/yong-master/im/wayland/ybus-wayland.c:1815:34: error: use of undeclared identifier 'GTK_LAYER_SHELL_KEYBOARD_MODE_NONE' p_gtk_layer_set_keyboard_mode(w,GTK_LAYER_SHELL_KEYBOARD_MODE_NONE); ^ 1 warning and 11 errors generated. 原因: GtkLayerShellKeyboardMode / GTK_LAYER_SHELL_KEYBOARD_MODE_NONE 未定义。 gtk-layer-shell 库版本过低或未安装。GtkLayerShellKeyboardMode 枚举是在 gtk-layer-shell ≥ 0.6.0 中引入的; WL_MARSHAL_FLAG_DESTROY 未定义。 wayland-client 版本过低。WL_MARSHAL_FLAG_DESTROY 是在 wayland ≥ 1.20.0 中引入的(对应 wayland-client-core.h)。麒麟系统中的 wayland-client.h 是旧版,不包含此标志。 处理: 如需要wayland支持,可在本地下载和手动编译wayland-protocols、gtk-layer-shell、wayland较高版本后编译。 https://github.com/wmww/gtk-layer-shell.git https://gitlab.freedesktop.org/wayland/wayland.git 如不需要wayland支持(麒麟V10 SP1主要是X11环境,部分华为擎云机型是Wayland环境),可注释掉相关代码编译。 因过程复杂,不详细列出。 检测桌面环境: $ echo $XDG_SESSION_TYPE wayland 验证自编译wanyland结果: pkg-config --modversion wayland-client # ≥ 1.22.0 pkg-config --modversion gtk-layer-shell-0 # ≥ 0.6.0 TODO:建议build脚本可以单独判断wayland模块是否编译,类似-x wayland会更方便。 问题3: clang -m64 -I/home/user/DEV/yong-master/llib -I/home/user/DEV/yong-master/im -DCFG_XIM_YBUS -DCFG_XIM_IBUS `pkg-config --cflags ibus-1.0` -DL_CALL_GLIB_SERVER -DL_CALL_GLIB_CLIENT -Wno-deprecated-declarations -I/home/user/DEV/yong-master/im/IMdkit -D_GNU_SOURCE -Wall -g -O2 -fno-strict-aliasing -Wno-format-truncation -fms-extensions -pipe -ffast-math -I/home/user/DEV/yong-master/include -I/home/user/DEV/yong-master/common -Wno-invalid-source-encoding -Wno-microsoft-anon-tag `pkg-config --cflags gtk+-3.0` -Wno-unused-const-variable -c /home/user/DEV/yong-master/im/app-indicator.c -o app-indicator.o warning: unknown warning option '-Wno-format-truncation' [-Wunknown-warning-option] /home/user/DEV/yong-master/im/app-indicator.c:178:5: error: unknown type name 'uint32_t' uint32_t menu_revision; ^ 1 warning and 1 error generated. 原因: uint32_t 标准定义在 <stdint.h>,源码没包含这个头文件。 处理: 打开 im/app-indicator.c,在文件头文件区添加: #include <stdint.h> 问题4: 本机是 aarch64,-m64 是 x86 专用选项。虽然 clang 目前只是给出 warning 而非 error,但建议修改 yong 的构建配置以去除该标志,避免潜在问题 处理: 查找 Makefile 或构建脚本中的 -m64 user@user-pc:~/DEV/yong-master$ grep -rn '\-m64' ./ ./rules.txt:45: env("CC=clang -m64"); ./rules.txt:46: env("CXX=clang++ -m64"); 删除两处-m64参数。 问题5: $ node build.js l64 -x l64-qt6 -x l64-gtk4 clang -I/home/user/DEV/yong-master/linim/wui -I/home/user/DEV/yong-master/linim/wui/protocols -fPIC -I/home/user/DEV/yong-master/llib -Wno-deprecated-declarations `pkg-config --cflags glib-2.0 gio-2.0 cairo pangocairo` -D_GNU_SOURCE -Wall -g -O2 -fno-strict-aliasing -Wno-format-truncation -fms-extensions -pipe -ffast-math -I/home/user/DEV/yong-master/include -I/home/user/DEV/yong-master/common -Wno-invalid-source-encoding -Wno-microsoft-anon-tag `pkg-config --cflags gtk+-3.0` -O0 -O0 -c /home/user/DEV/yong-master/linim/wui/wui-wayland.c -o wui-wayland.o warning: unknown warning option '-Wno-format-truncation' [-Wunknown-warning-option] /home/user/DEV/yong-master/linim/wui/wui-wayland.c:687:3: error: field designator 'preferred_buffer_scale' does not refer to any field in type 'const struct wl_surface_listener' .preferred_buffer_scale = surface_preferred_buffer_scale, ^ /home/user/DEV/yong-master/linim/wui/wui-wayland.c:688:3: error: field designator 'preferred_buffer_transform' does not refer to any field in type 'const struct wl_surface_listener' .preferred_buffer_transform = surface_preferred_buffer_transform, ^ 1 warning and 2 errors generated. 原因: wayland版本较低,wl_surface_listener 结构体里 没有 preferred_buffer_scale、preferred_buffer_transform` 这两个回调字段。 处理: 自编译较高版本(1.22以上)可以解决。 或条件化wui-wayland.c中编译,在低版本wayland中不用这两个字段。 static const struct wl_surface_listener surface_listener = { .enter = surface_enter, .leave = surface_leave, #if WL_SURFACE_LISTENER_VERSION >= 6 .preferred_buffer_scale = surface_preferred_buffer_scale, .preferred_buffer_transform = surface_preferred_buffer_transform, #endif }; 四、编译后打包 运行命令打包。 node build.js -C install copy64 dist 问题: 报gtk4相关文件无法找到 原因: build.js中未对取消打包的模块进行条件化判断,引起文件复制错误。 处理: 注释掉build.js中copy_build函数有关gtk4语句 function copy_build(build){ env("BUILD","=",build); mkdir(["yong/$(BUILD)","yong/$(BUILD)/gtk-im"]); cp('../llib/$(BUILD)/libl.so','yong/$(BUILD)'); cp('../im/$(BUILD)-gtk3/yong','yong/$(BUILD)/yong-gtk3'); cp('../config/$(BUILD)-gtk3/yong-config','yong/$(BUILD)/yong-config-gtk3'); //cp('../config/$(BUILD)-gtk4/yong-config','yong/$(BUILD)/yong-config-gtk4'); cp('../vim/$(BUILD)/yong-vim','yong/$(BUILD)'); cp('../im/conio/$(BUILD)/yong-con','yong/$(BUILD)'); cp('../mb/$(BUILD)/libmb.so','yong/$(BUILD)'); cp('../gbk/$(BUILD)/libgbk.so','yong/$(BUILD)'); cp('../cloud/$(BUILD)/libcloud.so','yong/$(BUILD)'); cp('../im/gtk-im/$(BUILD)-gtk2/im-yong.so','yong/$(BUILD)/gtk-im/im-yong-gtk2.so'); cp('../im/gtk-im/$(BUILD)-gtk3/im-yong.so','yong/$(BUILD)/gtk-im/im-yong-gtk3.so'); //cp('../im/gtk4-im/$(BUILD)-gtk4/libimyong.so','yong/$(BUILD)/gtk-im/libimyong-gtk4.so'); exec("strip yong/$(BUILD)/gtk-im/*.so"); exec("strip yong/$(BUILD)/*.so"); exec("strip yong/$(BUILD)/yong-gtk3"); exec("strip yong/$(BUILD)/yong-config-gtk3"); //exec("strip yong/$(BUILD)/yong-config-gtk4"); exec("strip yong/$(BUILD)/yong-vim"); if(!_exists("yong/$(BUILD)/yong-config")){ cd("yong/$(BUILD)"); exec("ln -sf yong-config-gtk3 yong-config"); cd("../.."); } } 五、安装使用 本机为X11环境,使用ibus使用小小。 先卸载所有fcitx相关软件包。 安装ibus并运行im-config -n ibus选中。 复制打包文件到home/user/.local/share/yong user@user-pc:~/.local/share/yong$ sudo ./yong-tool.sh --install 输入密码 DIST debian found install 64bit version --install Done 重启后在ibus配置中添加中文-yong即可。 wayland安装使用和x11不同,华为擎云机型的wayland是kwin,个人没有环境测试,请查询帮助。 |
|