Rust 1.100 이후에도 32비트 Windows 앱을 만들 수 있을까?

개발 PC와 CI는 64비트인데 고객에게는 여전히 32비트 Windows 앱을 보내야 한다. Rust 1.100에서 i686 호스트 도구 배포가 끝나면 지금 빌드 설정에서 무엇이 바뀔까?

Rust 1.100 이후에도 32비트 Windows 앱을 만들 수 있을까?
세 줄 요약
  • Rust 1.100부터 i686 Windows용 컴파일러 등 호스트 도구 배포가 종료될 예정이다.
  • 32비트 앱의 빌드 대상과 표준 라이브러리는 유지되며, 지원되는 호스트에서 크로스 컴파일한다.
  • 개발 PC·CI의 실제 툴체인을 확인하고, x64 호스트로 옮겨도 i686 대상 지정은 남겨야 한다.

컴파일러를 실행할 환경이 바뀌며 빌드 대상은 남는다

32비트 Windows 사용자에게 앱을 제공하는 프로젝트도 Rust 1.100 이후 빌드를 이어갈 수 있다. Rust 컴파일러 팀의 10월 2일 발표는 i686 Windows용 호스트 도구 배포를 종료하고, 64비트 Windows처럼 계속 지원되는 호스트에서 크로스 컴파일하도록 변경한다고 밝혔다.

호스트는 컴파일러가 실행되는 환경이고, 대상은 만들어진 프로그램이 실행될 환경이다. 개발 PC가 x64여도 i686 대상을 선택하면 32비트 실행 파일을 만들 수 있다. 발표가 예고한 변경은 다음과 같다.

대상Rust 1.100에서의 지원유지되는 부분
i686-pc-windows-msvc호스트 도구 없는 Tier 1표준 라이브러리 배포와 CI 테스트
i686-pc-windows-gnu호스트 도구 없는 Tier 2표준 라이브러리 배포

다른 32비트 플랫폼까지 이 발표의 대상은 아니다. 기존 i686 Windows 산출물을 없애기보다, 그것을 만드는 컴파일러가 어디서 실행되는지 점검할 일이다.

64비트 PC에서도 프로젝트의 선택은 따로 확인한다

운영체제의 비트 수만 보고 빌드 설정을 판단해서는 안 된다. 실제 프로젝트 폴더에서 다음 명령으로 컴파일러의 상세 정보를 확인한다.

rustc -vV

host: 항목이 i686-pc-windows-msvc라면 32비트 호스트용 컴파일러를 선택한 것이다. x86_64-pc-windows-msvc는 x64 호스트용이다. rustc의 버전·상세 출력 옵션을 함께 쓰는 명령이며, 고객에게 내보낼 앱의 대상 아키텍처는 별도 설정이다.

rustup은 명령행 지정, 환경 변수, 디렉터리 설정과 툴체인 파일 등을 통해 실행할 도구를 고른다. 예전에 rust-toolchain.toml이나 CI에서 i686 호스트를 고정했다면 x64 도구를 설치한 뒤에도 그 선택이 남을 수 있다.

x64 도구에 i686 표준 라이브러리를 추가한다

x64 Windows에서 MSVC 방식으로 빌드한다면, x64 호스트 툴체인과 i686 대상 표준 라이브러리를 조합할 수 있다. 다음은 두 아키텍처를 명시한 예시다.

rustup toolchain install stable-x86_64-pc-windows-msvc
rustup target add --toolchain stable-x86_64-pc-windows-msvc i686-pc-windows-msvc
cargo +stable-x86_64-pc-windows-msvc build --release --target i686-pc-windows-msvc

첫 줄은 컴파일러를 실행할 환경, 두 번째 줄은 만들 대상의 표준 라이브러리, 세 번째 줄은 이번 빌드의 툴체인과 산출물 대상을 정한다. rustup의 크로스 컴파일 문서에 따르면 target add가 설치하는 것은 표준 라이브러리다. 링커와 다른 네이티브 빌드 도구까지 설치해 주지는 않는다.

MSVC 플랫폼 문서는 Windows의 다른 아키텍처를 대상으로 빌드할 때 Visual Studio 설치 구성에서 필요한 구성 요소를 선택하도록 설명한다. 따라서 x86용 빌드 도구와 라이브러리도 준비해야 한다. 위 절차는 x64 Windows 호스트 예시이며, Linux에서 MSVC 산출물을 만드는 동일한 공식 지원 절차로 확대할 수 없다.

호스트를 옮겨도 --target과 ABI는 유지한다

Cargo의 --target은 산출물의 아키텍처를 선택한다. 별도 대상 설정이 없으면 호스트 아키텍처가 기본값이므로, x64 컴파일러로 옮기면서 기존 i686 지정을 지우면 의도한 32비트 빌드와 달라진다. 프로젝트의 build.target 설정도 함께 확인해야 한다.

MSVC와 GNU도 단순히 이름만 다른 선택지가 아니다. Windows 설치 문서는 연동할 C/C++ 라이브러리의 도구 체계에 맞춰 ABI를 고르도록 설명한다. GNU 기반 프로젝트라면 i686 대상을 유지하면서 해당 라이브러리와 링커 구성을 이어가야 한다.

CI 전환의 확인 지점은 지원되는 호스트 툴체인이 실제로 선택됐는지, i686 대상으로 빌드됐는지, 기존 네이티브 의존성과 테스트가 동작하는지다. 고객용 32비트 배포를 유지하려는 팀은 대상 아키텍처를 바꿀 필요 없이 개발·빌드 환경부터 전환할 수 있다.