集成3dfx补丁到QEMU时Meson报错:未知变量targetos
集成3dfx补丁到QEMU时遇到meson.build变量错误
我正在开展一个项目,需要将00-qemu82x-mesa-glide.patch补丁集成到QEMU中,但构建时遇到如下错误:
"../qemu/meson.build:3829:5: ERROR: Unknown variable "targetos" "
我使用GitHub Actions实现构建流程自动化,以下是YAML文件片段:
name: msys2-64bit on: [push] jobs: build: runs-on: windows-latest strategy: matrix: cache-name: [msys64-cache] env: MSYSTEM: MINGW64 FF_SCRIPT_SECTIONS: '0' CONFIGURE_ARGS: '--target-list=x86_64-softmmu --without-default-devices -Ddebug=false -Doptimization=0' TEST_ARGS: '--no-suite qtest' steps: - name: Checkout repository uses: actions/checkout@v2 - name: Clone QEMU run: git clone https://github.com/qemu/qemu.git - name: Set up MSYS2 run: | Write-Output "Acquiring msys2.exe installer at $(Get-Date -Format u)" If ( !(Test-Path -Path msys64\var\cache ) ) { mkdir msys64\var\cache } Invoke-WebRequest "https://repo.msys2.org/distrib/msys2-x86_64-latest.sfx.exe.sig" -outfile "msys2.exe.sig" if ( Test-Path -Path msys64\var\cache\msys2.exe.sig ) { Write-Output "Cached installer sig" ; if ( ((Get-FileHash msys2.exe.sig).Hash -ne (Get-FileHash msys64\var\cache\msys2.exe.sig).Hash) ) { Write-Output "Mis-matched installer sig, new installer download required" ; Remove-Item -Path msys64\var\cache\msys2.exe.sig ; if ( Test-Path -Path msys64\var\cache\msys2.exe ) { Remove-Item -Path msys64\var\cache\msys2.exe } } else { Write-Output "Matched installer sig, cached installer still valid" } } else { Write-Output "No cached installer sig, new installer download required" ; if ( Test-Path -Path msys64\var\cache\msys2.exe ) { Remove-Item -Path msys64\var\cache\msys2.exe } } if ( !(Test-Path -Path msys64\var\cache\msys2.exe ) ) { Write-Output "Fetching latest installer" ; Invoke-WebRequest "https://repo.msys2.org/distrib/msys2-x86_64-latest.sfx.exe" -outfile "msys64\var\cache\msys2.exe" ; Copy-Item -Path msys2.exe.sig -Destination msys64\var\cache\msys2.exe.sig } else { Write-Output "Using cached installer" } Write-Output "Invoking msys2.exe installer at $(Get-Date -Format u)" msys64\var\cache\msys2.exe -y ((Get-Content -path .\msys64\etc\post-install\07-pacman-key.post -Raw) -replace '--refresh-keys', '--version') | Set-Content -Path .\msys64\etc\post-install\07-pacman-key.post .\msys64\usr\bin\bash -lc "sed -i 's/^CheckSpace/#CheckSpace/g' /etc/pacman.conf" .\msys64\usr\bin\bash -lc 'pacman --noconfirm -Syuu' # Core update .\msys64\usr\bin\bash -lc 'pacman --noconfirm -Syuu' # Normal update taskkill /F /FI "MODULES eq msys-2.0.dll" - name: Install dependencies run: | Write-Output "Installing mingw packages at $(Get-Date -Format u)" .\msys64\usr\bin\bash -lc 'pacman -Sy --noconfirm --needed \ bison \ diffutils \ flex \ git \ grep \ make \ rsync \ ninja \ glib2-devel \ patch \ sed \ mingw-w64-x86_64-binutils \ mingw-w64-x86_64-capstone \ mingw-w64-x86_64-ccache \ mingw-w64-x86_64-curl \ mingw-w64-x86_64-cyrus-sasl \ mingw-w64-x86_64-dtc \ mingw-w64-x86_64-gcc \ mingw-w64-x86_64-glib2 \ mingw-w64-x86_64-gnutls \ mingw-w64-x86_64-gtk3 \ mingw-w64-x86_64-libgcrypt \ mingw-w64-x86_64-libjpeg-turbo \ mingw-w64-x86_64-libnfs \ mingw-w64-x86_64-libpng \ mingw-w64-x86_64-libssh \ mingw-w64-x86_64-libtasn1 \ mingw-w64-x86_64-libusb \ mingw-w64-x86_64-lzo2 \ mingw-w64-x86_64-nettle \ mingw-w64-x86_64-ninja \ mingw-w64-x86_64-pixman \ mingw-w64-x86_64-pkgconf \ mingw-w64-x86_64-python \ mingw-w64-x86_64-SDL2 \ mingw-w64-x86_64-SDL2_image \ mingw-w64-x86_64-snappy \ mingw-w64-x86_64-spice \ mingw-w64-x86_64-usbredir \ mingw-w64-x86_64-zstd' - name: Build run: | Write-Output "Running build at $(Get-Date -Format u)" $env:CHERE_INVOKING = 'yes' # Preserve the current working directory $env:MSYS = 'winsymlinks:native' # Enable native Windows symlink $env:CCACHE_BASEDIR = "$env:CI_PROJECT_DIR" $env:CCACHE_DIR = "$env:CCACHE_BASEDIR/ccache" $env:CCACHE_MAXSIZE = "500M" $env:CCACHE_DEPEND = 1 # cache misses are too expensive with preprocessor mode $env:CC = "ccache gcc" cd qemu D:\a\qemu-3dfx\qemu-3dfx\msys64\usr\bin\bash -lc "rsync -r ../qemu-0/hw/3dfx ./hw/" D:\a\qemu-3dfx\qemu-3dfx\msys64\usr\bin\bash -lc "rsync -r ../qemu-1/hw/mesa ./hw/" D:\a\qemu-3dfx\qemu-3dfx\msys64\usr\bin\bash -lc "patch -p0 -i ../00-qemu82x-mesa-glide.patch" mkdir build cd build D:\a\qemu-3dfx\qemu-3dfx\msys64\usr\bin\bash -lc "ccache --zero-stats" D:\a\qemu-3dfx\qemu-3dfx\msys64\usr\bin\bash -lc "../configure --target-list=i386-softmmu --enable-whpx --enable-sdl --disable-capstone --enable-fdt=system $CONFIGURE_ARGS" D:\a\qemu-3dfx\qemu-3dfx\msys64\usr\bin\bash -lc "make" D:\a\qemu-3dfx\qemu-3dfx\msys64\usr\bin\bash -lc "make check MTESTARGS='$TEST_ARGS' || { cat meson-logs/testlog.txt; exit 1; } ;" D:\a\qemu-3dfx\qemu-3dfx\msys64\usr\bin\bash -lc "ccache --show-stats" Write-Output "Finished build at $(Get-Date -Format u)" - name: Upload artifact uses: actions/upload-artifact@v3 with: name: 3dfx-QEMU path: D:\a\qemu-3dfx\qemu-3dfx\qemu\build\
解决建议
- 补丁版本适配:该补丁基于旧版QEMU开发,最新QEMU的meson构建系统已移除或重命名
targetos变量。查看补丁仓库的提交历史,找到兼容的QEMU版本并克隆后再应用补丁。 - 修复meson变量引用:打开meson.build第3829行,将
targetos替换为当前QEMU使用的对应变量,比如host_os或target_os(可搜索QEMU源码确认)。 - 更新构建依赖:执行
pacman -Syu mingw-w64-x86_64-meson,确保MSYS2环境中的meson版本符合QEMU要求。 - 调整configure参数:在configure命令中添加明确的系统变量定义,比如
-Dtarget_os=windows(需确认meson支持该参数)。
内容的提问来源于stack exchange,提问作者marc
相关产品推荐
相关产品推荐

