为 OpenHarmony / HarmonyOS 6.1 构建的 llvm-mingw 20260717 (ARM64)

@Ta 4小时前发布,4小时前修改 57点击

为 OpenHarmony / HarmonyOS 6.1 构建的 llvm-mingw 20260717

llvm-mingw-20260718-ucrt-ohos-arm64.tar.xz(161.26 MB)

源代码:

使用方法

  1. 安装Python3(从鸿蒙应用商店安装Python安装器,或者安装Harmonybrew并用brew install python3进行安装)。

  2. 解压压缩包:

    tar -Jvxf llvm-mingw-20260718-ucrt-ohos-arm64.tar.xz
    
  3. 测试命令是否可运行:

    cd llvm-mingw-20260718-ucrt-ohos-arm64
    ./bin/arm64ec-w64-mingw32-clang --version
    

    如果提示Permission denied,请用以下命令进行签名(签名需要安装DevBox或者安装Harmonybrew并用brew install ohos-sdk安装OHOS SDK):

    python3 ./ohos-sign-elf.py --resign ./
    
  4. 设置环境变量,让 llvm-mingw 在 PATH 中位于 OHOS SDK 的 llvm 之后,这样 native ELF 就会通过 OHOS SDK 的 clang 构建,并且需要 mingw 的项目也可以从 PATH 中找到 arm64ec-w64-mingw32-clang 等命令。

    比如(自己把$HOME/work/llvm-mingw/改为实际路径):

    export OHOS_SDK="$HOME/.harmonybrew/Cellar/ohos-sdk/26.0.0.18_1"
    export LLVM_MINGW="$HOME/work/llvm-mingw/llvm-mingw-20260718-ucrt-ohos-arm64"
    
    # OHOS SDK clang 优先
    export PATH="$OHOS_SDK/native/llvm/bin:$LLVM_MINGW/bin:$PATH"
    
  5. 构建 wine 时可以这样配置:

    cd wine
    mkdir build
    
    # 防止 winebuild 找不到动态库
    export LDFLAGS="-Wl,-rpath,$HOME/.harmonybrew/lib"
    
    # Host ELF 使用 OHOS SDK clang 构建
    export CC=clang CXX=clang++
    
    # PE DLL 使用 llvm-mingw clang 构建
    ../configure --prefix=$PWD/dist \
                 --build=aarch64-unknown-linux-ohos \
                 --host=aarch64-unknown-linux-ohos \
                 --with-mingw=$LLVM_MINGW/bin/clang \
                 --enable-archs=arm64ec,aarch64,i386 \
                 --disable-tests \
                 --without-x
    
    make -j$(nproc)
    

备注

  1. 在x86 Linux上交叉编译不需要我这个工具链,安装上游llvm-mingw工具链即可。只有在鸿蒙PC上本地构建需要它。

  2. 上游wine的ARM64EC构建似乎会报错,而且就算构建成功也无法直接运行x86 exe,需要添加并注册libarm64ecfex.dll、wowbox64.dll等二进制翻译DLL后才能运行。实际可用的ARM64EC版wine以及libarm64ecfex.dll、wowbox64.dll等二进制翻译DLL可通过hangover项目进行构建。

  3. 编译 wine 时出现找不到 libfreetype.so.6libxml2.so.16 等库的情况,请设置 LD_LIBRARY_PATH 环境变量并删除build文件夹重新构建:

    export LDFLAGS="-Wl,-rpath,$HOME/.harmonybrew/lib"
    

    建议不要设置 LD_LIBRARY_PATH 环境变量,否则可能会遇到各种奇怪的库加载失败问题,原因是系统可执行文件无法加载自签名的库。

  4. 如果构建出来的wine无法运行,请通过 python3 ./ohos-sign-elf.py $HOME/llvm-mingw/wine-install-dir 进行签名。

  5. 你需要一个 Wayland Server 才能让 wine 显示出窗口,请参考 https://github.com/winehua/WineHua 的实现方法。

  6. 如果 wineboot 直接崩溃,请尝试删除 lib/wine/aarch64-unix/wine-preloader 文件,它很可能是导致崩溃的原因。不过删除之后arm64 wine很可能依然无法在鸿蒙上直接运行,需要进行其他调整。

回复列表(0|隐藏机器人聊天)
帖子没有回复
添加新回复
回复需要登录