Skip to content
New issue

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

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

Already on GitHub? Sign in 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>.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants