Skip to content
New issue

Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? # to your account

windows-gnu target can't be emulated arm64 qemu via wine #1372

Open
Emilgardis opened this issue Nov 18, 2023 · 12 comments
Open

windows-gnu target can't be emulated arm64 qemu via wine #1372

Emilgardis opened this issue Nov 18, 2023 · 12 comments

Comments

@Emilgardis
Copy link
Member

bash-5.2$ uname -a
Darwin Emils-MacBook-Pro.local 22.1.0 Darwin Kernel Version 22.1.0: Sun Oct  9 20:15:09 PDT 2022; root:xnu-8792.41.9~2/RELEASE_ARM64_T6000 arm64
bash-5.2$ cross build --target x86_64-pc-windows-gnu -v
+ cargo metadata --format-version 1 --filter-platform x86_64-pc-windows-gnu
+ rustc --print sysroot
+ /usr/local/bin/docker
+ /usr/local/bin/docker version -f '{{ .Server.Os }},,,{{ .Server.Arch }}'
[cross] warning: using older rustc `1.71.0 (8ede3aae2 2023-07-12)` for the target. Current active rustc on the host is `rustc 1.72.1 (d5c2e9c34 2023-09-13)`.
 > Update with `rustup update --force-non-host stable-x86_64-unknown-linux-gnu`
+ rustup toolchain list
+ rustup target list --toolchain stable-x86_64-unknown-linux-gnu
+ rustup component list --toolchain stable-x86_64-unknown-linux-gnu
+ /usr/local/bin/docker run --userns host --platform linux/amd64 -e 'PKG_CONFIG_ALLOW_CROSS=1' -e 'XARGO_HOME=/Users/emil/.xargo' -e 'CARGO_HOME=/Users/emil/.cargo' -e 'CROSS_RUST_SYSROOT=/Users/emil/.rustup/toolchains/stable-x86_64-unknown-linux-gnu' -e 'CARGO_TARGET_DIR=/target' -e 'CROSS_RUNNER=' -e TERM -e 'USER=emil' -e 'CROSS_RUSTC_MAJOR_VERSION=1' -e 'CROSS_RUSTC_MINOR_VERSION=71' -e 'CROSS_RUSTC_PATCH_VERSION=0' --name cross-stable-x86_64-unknown-linux-gnu-47e2d-8ede3aae2-x86_64-pc-windows-gnu-50dfa-1700335486570 --rm --user 501:20 -v /Users/emil/.xargo:/Users/emil/.xargo:z -v /Users/emil/.cargo:/Users/emil/.cargo:z -v /Users/emil/.cargo/bin -v /Users/emil/workspace/cross-tests/basic:/Users/emil/workspace/cross-tests/basic:z -v /Users/emil/.rustup/toolchains/stable-x86_64-unknown-linux-gnu:/Users/emil/.rustup/toolchains/stable-x86_64-unknown-linux-gnu:z,ro -v /Users/emil/workspace/cross-tests/basic/target:/target:z -w /Users/emil/workspace/cross-tests/basic -t ghcr.io/cross-rs/x86_64-pc-windows-gnu:main sh -c 'PATH="$PATH":"/Users/emil/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/bin" cargo build --target x86_64-pc-windows-gnu -v'
+ rustup component list --toolchain stable-x86_64-unknown-linux-gnu
bash-5.2$ echo $?
53

there's something wrong with wine through qemu.

Originally posted by @hex-developer in #1371 (comment)

@Emilgardis
Copy link
Member Author

Emilgardis commented Nov 18, 2023

removed the >/dev/null redirect here

gives

❯ cross build --target x86_64-pc-windows-gnu
[cross] warning: using older rustc `1.71.0 (8ede3aae2 2023-07-12)` for the target. Current active rustc on the host is `rustc 1.72.1 (d5c2e9c34 2023-09-13)`.
 > Update with `rustup update --force-non-host stable-x86_64-unknown-linux-gnu`
assertion failed [result.value != EEXIST]: VmTracker attempted to allocate existing mapping
(ThreadContextVm.cpp:47 mmap)
0024:err:environ:run_wineboot failed to start wineboot c00000e5
0024:err:module:relocate_ntdll ntdll could not be mapped at preferred address (0x7f340000), expect trouble
wine: could not load kernel32.dll, status c0000135

@Emilgardis
Copy link
Member Author

updated to wine 8.0.2, same error message

@Emilgardis Emilgardis changed the title windows-gnu targets don't work on arm64 qemu windows-gnu target can't be emulated arm64 qemu via wine Nov 18, 2023
@Emilgardis Emilgardis added no-ci-targets PRs that do not affect any cross-compilation targets. and removed no-ci-targets PRs that do not affect any cross-compilation targets. labels Nov 18, 2023
github-merge-queue bot pushed a commit that referenced this issue Nov 19, 2023
@is-it-ayush
Copy link

is-it-ayush commented Dec 9, 2023

Hi @Emilgardis! I ran into this exact problem and my problem output matched the one in this issue. After updating cross to main & trying cross run --target x86_64-pc-windows-gnu again. I got the following error wine: '/tmp/wine' is not owned by you.

It seems like the permissions aren't setup correctly on ghcr.io/cross-rs/x86_64-pc-windows-gnu image. I did some extra digging and ran docker run --platform linux/amd64 --rm -t -i ghcr.io/cross-rs/x86_64-pc-windows-gnu:main bash and then ls -all /tmp/wine. It gives,

drwxrwxrwx  2 root root    0 Dec  9 01:34 .wine-0
drwxrwxrwx  2 root root    0 Dec  9 01:34 home
drwxrwxrwx  4 root root 4096 Dec  9 01:34 wine

However, running cross run --target x86_64-pc-windows-gnu -vvv gives the folllowing string /usr/bin/docker run --userns host ... -e 'USER=ayush' -e ... --rm --user 1000:1000 ... (... = i've left out the env vars since they were long!). I feel it's trying to run cargo under my machine username but wine is owned by root. If this is the case any ideas on how I can go about working around it until it's fixed. Thank you for working on it.

@is-it-ayush
Copy link

is-it-ayush commented Dec 11, 2023

Update! Turns out it wasn't really an image issue but an issue of how my docker files were stored. The docker daemon data-root directory wasn't owned by me. I replaced it with another location (ext4 partition new /docker folder) & restarted docker. The error does not occur now and I think I've resolved it. Thank you : )

@Emilgardis
Copy link
Member Author

Emilgardis commented Dec 11, 2023

Ah perfect @is-it-ayush !

I suppose cross test doesnt work though?

@is-it-ayush
Copy link

is-it-ayush commented Dec 11, 2023

I suppose cross test doesnt work though?

That's true @Emilgardis! It does not work since the target defaults to ghcr.io/cross-rs/x86_64-unknown-linux-gnu & rust would not compile there since I used windows specific crates.

ps: Just wanted to thank you for this project. It helps a ton with cross compilation. Have an awesome day Emil!

@Emilgardis
Copy link
Member Author

Emilgardis commented Dec 11, 2023

sorry, I should've specified, cross test --target x86_64-pc-windows-gnu shouldn't work under qemu emulation still because wine doesn't work correctly there

@is-it-ayush
Copy link

is-it-ayush commented Dec 11, 2023

Just ran cross test --target x86_64-pc-widnows-gnu Emil! It doesn't crash and runs tests successfully but I do get strange output when running it. Here's an example!

Running unittests src/main.rs (/target/x86_64-pc-windows-gnu/debug/deps/hello-world-80kcf46d9b0d8de5.exe)

0084:fixme:hid:handle_IRP_MN_QUERY_ID Unhandled type 00000005
0050:err:winediag:nodrv_CreateWindow Application tried to create a window, but no driver could be loaded.
0050:err:winediag:nodrv_CreateWindow L"The explorer process failed to start."
0050:err:systray:initialize_systray Could not create tray window
0084:fixme:hid:handle_IRP_MN_QUERY_ID Unhandled type 00000005
0084:fixme:hid:handle_IRP_MN_QUERY_ID Unhandled type 00000005
0084:fixme:hid:handle_IRP_MN_QUERY_ID Unhandled type 00000005
010c:err:winediag:ntlm_check_version ntlm_auth was not found. Make sure that ntlm_auth >= 3.0.25 is in your path. Usually, you can find it in the winbind package of your distribution.
010c:err:ntlm:ntlm_LsaApInitializePackage no NTLM support, expect problems

runing <x> tests
# ... test runs
test result: ok. <x> passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.01s

@Emilgardis
Copy link
Member Author

are you on a aarch64/arm64 host? @is-it-ayush

@is-it-ayush
Copy link

are you on a aarch64/arm64 host? @is-it-ayush

I'm on amd64 (running debian 12) host @Emilgardis!

@Emilgardis
Copy link
Member Author

I see, this issue is specifically for hosts where emulation would be used to run x86_64!

@is-it-ayush
Copy link

I see, this issue is specifically for hosts where emulation would be used to run x86_64!

Makes sense!! I think it's more of a wine issue than a cross issue. 😅

tgross35 added a commit to tgross35/cmake-rs that referenced this issue Aug 15, 2024
The `pc-solaris` target was made the default in
<rust-lang/rust#82216> and the `sun-solaris`
target was removed in <rust-lang/rust#118091>.
Switch from `x86_64-sun-solaris` to `x86_64-pc-solaris` to reflect this.

Additionally, disable tests for the Windows cross compile target since
there is an error launching Wine. This may be
<cross-rs/cross#1372>.
# for free to join this conversation on GitHub. Already have an account? # to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants