Skip to content

Arm x86_64 Musl build using alpine broken #1255

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

Open
4 of 11 tasks
SamTV12345 opened this issue May 11, 2023 · 3 comments
Open
4 of 11 tasks

Arm x86_64 Musl build using alpine broken #1255

SamTV12345 opened this issue May 11, 2023 · 3 comments

Comments

@SamTV12345
Copy link

SamTV12345 commented May 11, 2023

Checklist

Describe your issue

Cross does not compile an alpine image on x86.

[target."x86_64-unknown-linux-musl"]
image.name = "alpine:edge"
image.toolchain = ["x86_64-unknown-linux-musl", "linux/arm64=aarch64-unknown-linux-musl","armv7-unknown-linux-musleabi"]
pre-build = ["apk add --no-cache gcc musl-dev pkgconfig openssl-dev libc-dev git"]

[target."aarch64-unknown-linux-musl"]
image.name = "alpine:edge"
image.toolchain = ["x86_64-unknown-linux-musl", "linux/arm64=aarch64-unknown-linux-musl","armv7-unknown-linux-musleabi"]
pre-build = ["apk add --no-cache gcc musl-dev pkgconfig openssl-dev libc-dev git"]
env.passthrough = ["RUSTFLAGS","TARGET_CC=gcc"]

[target."armv7-unknown-linux-musleabi"]
image.name = "alpine:edge"
image.toolchain = ["x86_64-unknown-linux-musl", "linux/arm64=aarch64-unknown-linux-musl","armv7-unknown-linux-musleabi"]
pre-build = ["apk add --no-cache gcc musl-dev pkgconfig openssl-dev libc-dev git"]
env.passthrough = ["RUSTFLAGS","TARGET_CC=gcc", "CFLAGS=-mno-outline-atomics"]

I get a lot of this output when I compile my rust app

788ff71aac7e9ab5.podfetch.b6c798b2-cgu.0.rcgu.o: Relocations in generic ELF (EM: 183)
          /usr/lib/gcc/x86_64-alpine-linux-musl/12.2.1/../../../../x86_64-alpine-linux-musl/bin/ld: /target/aarch64-unknown-linux-musl/release/deps/podfetch-788ff71aac7e9ab5.podfetch.b6c798b2-cgu.0.rcgu.o: Relocations in generic ELF (EM: 183)
          /usr/lib/gcc/x86_64-alpine-linux-musl/12.2.1/../../../../x86_64-alpine-linux-musl/bin/ld: /target/aarch64-unknown-linux-musl/release/deps/podfetch-788ff71aac7e9ab5.podfetch.b6c798b2-cgu.0.rcgu.o: Relocations in generic ELF (EM: 183)
          /usr/lib/gcc/x86_64-alpine-linux-musl/12.2.1/../../../../x86_64-alpine-linux-musl/bin/ld: /target/aarch64-unknown-linux-musl/release/deps/podfetch-788ff71aac7e9ab5.podfetch.b6c798b2-cgu.0.rcgu.o: Relocations in generic ELF (EM: 183)
          /usr/lib/gcc/x86_64-alpine-linux-musl/12.2.1/../../../../x86_64-alpine-linux-musl/bin/ld: /target/aarch64-unknown-linux-musl/release/deps/podfetch-788ff71aac7e9ab5.podfetch.b6c798b2-cgu.0.rcgu.o: Relocations in generic ELF (EM: 183)
          /usr/lib/gcc/x86_64-alpine-linux-musl/12.2.1/../../../../x86_64-alpine-linux-musl/bin/ld: /target/aarch64-unknown-linux-musl/release/deps/podfetch-788ff71aac7e9ab5.podfetch.b6c798b2-cgu.0.rcgu.o: Relocations in generic ELF (EM: 183) 

What target(s) are you cross-compiling for?

aarch64-unknown-linux-musl, arm-unknown-linux-musleabihf, x86_64-unknown-linux-musl

Which operating system is the host (e.g computer cross is on) running?

  • macOS
  • Windows
  • Linux / BSD
  • other OS (specify in description)

What architecture is the host?

  • x86_64 / AMD64
  • arm32
  • arm64 (including Mac M1)

What container engine is cross using?

  • docker
  • podman
  • other container engine (specify in description)

cross version

cross 0.2.5 (892fdfa 2023-05-02)

Example

git clone https://github.com/SamTV12345/PodFetch.git
git checkout armv7/sup
RUSTFLAGS='-C target-feature=-crt-static' cross build --release --target x86_64-unknown-linux-musl
RUSTFLAGS='-C target-feature=-crt-static' cross build --release --target aarch64-unknown-linux-musl
RUSTFLAGS='-C target-feature=-crt-static' cross build --release --target armv7-unknown-linux-musleabi

Additional information / notes

No response

@Emilgardis Emilgardis changed the title Arm x86_64 Musl build broken Arm x86_64 Musl build using alpine broken May 11, 2023
@Emilgardis
Copy link
Member

Emilgardis commented May 11, 2023

cross compiling with alpine seems to be a bit tricky, we've had some conversations about this in the chat

I don't have much knowledge on how it works, but seems that you need to use different roots and possibly emulation.

I have found this SO post and this wiki page

To me, this suggests that there are no distributed cross-compilers and you need to setup the environment yourself or that you use the same host as the target.

The builds where you use alpine and target = host work fine, the problem is when they don't match, right @SamTV12345?. In the issue you're stating that all your configured targets are broken, but it's only aarch64-unknown-linux-musl and armv7-unknown-linux-musleabi? cross build --release --target x86_64-unknown-linux-musl works for me when using

[target."x86_64-unknown-linux-musl"]
image.name = "alpine:edge"
image.toolchain = ["x86_64-unknown-linux-musl"]
pre-build = ["apk add --no-cache gcc musl-dev pkgconfig openssl-dev libc-dev git"]
❯ cross build --target x86_64-unknown-linux-musl

[+] Building 2.3s (7/7) FINISHED                                                                           
 => [internal] load build definition from Dockerfile.x86_64-unknown-linux-musl-custom                 0.0s
 => => transferring dockerfile: 211B                                                                  0.0s
 => [internal] load .dockerignore                                                                     0.0s
 => => transferring context: 34B                                                                      0.0s
 => [internal] load metadata for docker.io/library/alpine:edge                                        2.2s
 => [auth] library/alpine:pull token for registry-1.docker.io                                         0.0s
 => [1/2] FROM docker.io/library/alpine:edge@sha256:2d01a16bab53a8405876cec4c27235d47455a7b72b75334c  0.0s
 => CACHED [2/2] RUN eval "apk add --no-cache gcc musl-dev pkgconfig openssl-dev libc-dev git"        0.0s
 => exporting to image                                                                                0.0s
 => => exporting layers                                                                               0.0s
 => => writing image sha256:85e77eb141a5e7b56b8435ad02301a726816e5a07545b30d9f3651f40c4653a5          0.0s
 => => naming to localhost/cross-rs/cross-custom-podfetch:x86_64-unknown-linux-musl-6e004-pre-build   0.0s
   Compiling podfetch v0.1.0 (/Users/emil/workspace/dev_space/PodFetch)
warning: unused import: `std::cmp::Ordering`
 --> src/controllers/watch_time_controller.rs:1:5
  |
1 | use std::cmp::Ordering;
  |     ^^^^^^^^^^^^^^^^^^
  |
  = note: `#[warn(unused_imports)]` on by default

warning: `podfetch` (bin "podfetch") generated 1 warning
    Finished dev [unoptimized + debuginfo] target(s) in 5m 11s

(above is on a m1 mac, hence the long compile due to emulation, but it shouldn't matter)

related #1013

@Emilgardis
Copy link
Member

Interestingly, using alpine:edge for armv8 doesn't work well, opened #1256 for that

@SamTV12345
Copy link
Author

Yes you're right I should have been more specific.

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