1 | #!/bin/bash
|
---|
2 |
|
---|
3 | arch=$1
|
---|
4 | cross_file="/cross_file-$arch.txt"
|
---|
5 | meson env2mfile --cross --debarch "$arch" -o "$cross_file"
|
---|
6 |
|
---|
7 | # Explicitly set ccache path for cross compilers
|
---|
8 | sed -i "s|/usr/bin/\([^-]*\)-linux-gnu\([^-]*\)-g|/usr/lib/ccache/\\1-linux-gnu\\2-g|g" "$cross_file"
|
---|
9 |
|
---|
10 | # Rely on qemu-user being configured in binfmt_misc on the host
|
---|
11 | # shellcheck disable=SC1003 # how this sed doesn't seems to work for me locally
|
---|
12 | sed -i -e '/\[properties\]/a\' -e "needs_exe_wrapper = False" "$cross_file"
|
---|
13 |
|
---|
14 | # Add a line for rustc, which meson env2mfile is missing.
|
---|
15 | cc=$(sed -n "s|^c\s*=\s*\[?'\(.*\)'\]?|\1|p" < "$cross_file")
|
---|
16 |
|
---|
17 | if [[ "$arch" = "arm64" ]]; then
|
---|
18 | rust_target=aarch64-unknown-linux-gnu
|
---|
19 | elif [[ "$arch" = "armhf" ]]; then
|
---|
20 | rust_target=armv7-unknown-linux-gnueabihf
|
---|
21 | elif [[ "$arch" = "i386" ]]; then
|
---|
22 | rust_target=i686-unknown-linux-gnu
|
---|
23 | elif [[ "$arch" = "ppc64el" ]]; then
|
---|
24 | rust_target=powerpc64le-unknown-linux-gnu
|
---|
25 | elif [[ "$arch" = "s390x" ]]; then
|
---|
26 | rust_target=s390x-unknown-linux-gnu
|
---|
27 | else
|
---|
28 | echo "Needs rustc target mapping"
|
---|
29 | fi
|
---|
30 |
|
---|
31 | # shellcheck disable=SC1003 # how this sed doesn't seems to work for me locally
|
---|
32 | sed -i -e '/\[binaries\]/a\' -e "rust = ['rustc', '--target=$rust_target', '-C', 'linker=$cc']" "$cross_file"
|
---|
33 |
|
---|
34 | # Set up cmake cross compile toolchain file for dEQP builds
|
---|
35 | toolchain_file="/toolchain-$arch.cmake"
|
---|
36 | if [[ "$arch" = "arm64" ]]; then
|
---|
37 | GCC_ARCH="aarch64-linux-gnu"
|
---|
38 | DE_CPU="DE_CPU_ARM_64"
|
---|
39 | elif [[ "$arch" = "armhf" ]]; then
|
---|
40 | GCC_ARCH="arm-linux-gnueabihf"
|
---|
41 | DE_CPU="DE_CPU_ARM"
|
---|
42 | fi
|
---|
43 |
|
---|
44 | if [[ -n "$GCC_ARCH" ]]; then
|
---|
45 | {
|
---|
46 | echo "set(CMAKE_SYSTEM_NAME Linux)";
|
---|
47 | echo "set(CMAKE_SYSTEM_PROCESSOR arm)";
|
---|
48 | echo "set(CMAKE_C_COMPILER /usr/lib/ccache/$GCC_ARCH-gcc)";
|
---|
49 | echo "set(CMAKE_CXX_COMPILER /usr/lib/ccache/$GCC_ARCH-g++)";
|
---|
50 | echo "set(CMAKE_CXX_FLAGS_INIT \"-Wno-psabi\")"; # makes ABI warnings quiet for ARMv7
|
---|
51 | echo "set(ENV{PKG_CONFIG} \"/usr/bin/$GCC_ARCH-pkgconf\")";
|
---|
52 | echo "set(DE_CPU $DE_CPU)";
|
---|
53 | } > "$toolchain_file"
|
---|
54 | fi
|
---|