링크 위주로 간략하게 정리한다.

1. ARM Infocenter에서 툴체인 받기

link: https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-a/downloads

Windows에서 사용할 것이니 Windows (mingw-w64-i686) hosted cross compilers 항목에서 AArch32 target with hard float (arm-none-linux-gnueabihf) 항목을 선택했다. (라즈베리 파이 3B 기준)

Update: ARM GCC는 버전이 너무 높아서 호환이 안 되는 것인지 링킹 오류가 발생하였다. Linaro 툴체인을 사용하자. 2019.12 릴리즈(GCC 7.5)

Tip: 반디집 등의 프로그램은 심링크를 제대로 처리하지 못해 오류가 발생하는 것 같다. 직접 명령창에서 mingw64 등의 tar 명령어를 사용하는 것이 속 편하다.

2. rustup 타겟 추가하기

rustup target add aarch64-unknown-linux-gnu

musl을 사용하는 OS라면 aarch64-unknown-linux-musl을 사용한다.

3. 크로스컴파일 타겟에 대해 링커 지정하기

홈 디렉토리(대개 C:\Users\<username>) 내의 .cargo/config 파일을 열고(없으면 새로 생성한다.)

[target.aarch64-unknown-linux-gnu]
linker = "<link>/<to>/<toolchain>/gcc-linaro-7.5.0-2019.12-i686-mingw32_aarch64-linux-gnu/bin/aarch64-linux-gnu-gcc.exe"

디렉토리 구분자로 \\를 사용해도 된다. 백슬래시 두 개임에 유의.

4. 크로스컴파일

cargo build --target=aarch64-unknown-linux-gnu

target/aarch64-unknown-linux-gnu 폴더 안에 빌드 결과물이 생성된다.