Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

GCC 코드 생성 백엔드

이 백엔드와 컴파일러의 통합을 깨뜨릴 수 있는 변경 사항을 찾아내기 위해, CI에서 GCC 코드 생성 백엔드로 컴파일러 테스트 스위트의 일부를 실행합니다.

GCC 코드 생성 백엔드 전반에 관한 버그나 문제를 발견하면 주저하지 말고 rustc_codegen_gcc 저장소에 이슈를 등록하십시오.

현재 이 백엔드는 x86_64-unknown-linux-gnu 타깃만 지원한다는 점에 유의하십시오.

GCC 백엔드 CI 오류가 발생한 경우

CI의 test-x86_64-gnu-gcc 작업에서 GCC 코드 생성 백엔드로 실행된 테스트와 관련된 오류가 발생했다면, 다음 명령으로 GCC 백엔드를 사용해 로컬에서 UI 테스트를 실행하여 CI에서 일어나는 일을 재현할 수 있습니다:

./x test tests/ui \
  --set 'rust.codegen-backends = ["llvm", "gcc"]' \
  --set 'rust.debug-assertions = false' \
  --test-codegen-backend gcc

CI에서 다른 테스트 스위트가 실패했다면 tests/ui 부분을 수정해야 합니다.

CI 작업 전체를 로컬에서 재현하려면 cargo run --manifest-path src/ci/citool/Cargo.toml run-local test-x86_64-gnu-gcc를 실행하면 됩니다. 자세한 내용은 Docker로 테스트하기를 참고하십시오.

GCC 작업이 실패하면 어떻게 해야 합니까?

GCC 작업의 테스트가 실패했고 그 실패가 GCC 백엔드 때문일 수 있다고 판단되면, @rust-lang/wg-gcc-backend를 사용해 cg-gcc 워킹 그룹을 호출할 수 있습니다

GCC 백엔드에서 실패하는 컴파일러 테스트를 고치는 것이 간단하지 않다면, //@ ignore-backends: gcc compiletest 지시문을 사용하여 cg_gcc로 실행될 때 해당 테스트를 무시하도록 할 수 있습니다.

빌드할 코드 생성 백엔드 선택하기

rust.codegen-backends = [...] 부트스트랩 옵션은 어떤 코드 생성 백엔드를 빌드하여 생성된 rustc의 sysroot에 포함할지를 결정합니다. GCC 코드 생성 백엔드를 사용하려면 bootstrap.toml의 이 배열에 "gcc"가 포함되어야 합니다:

rust.codegen-backends = ["llvm", "gcc"]

bootstrap.toml 파일을 변경하고 싶지 않다면, 대신 --set 'rust.codegen-backends=["llvm", "gcc"]'와 함께 x 명령을 실행할 수도 있습니다. 예를 들면 다음과 같습니다.

./x build --set 'rust.codegen-backends=["llvm", "gcc"]'

codegen-backends 배열의 첫 번째 백엔드가 빌드된 rustc의 기본 백엔드로 사용될 백엔드를 결정합니다. 또한 이것은 stage 1 표준 라이브러리(또는 stage 2 이상에서 빌드되는 모든 것)를 컴파일하는 데 어떤 백엔드를 사용할지도 결정합니다. 따라서 기본적으로 GCC 백엔드를 사용하는 rustc를 만들려면 이 배열의 첫 번째 요소로 "gcc"를 두면 됩니다:

./x build --set 'rust.codegen-backends=["gcc"]' library

테스트에 사용할 코드 생성 백엔드 선택하기

테스트용 Rust 프로그램을 빌드하는 데 GCC 코드 생성 백엔드를 사용하여 컴파일러 테스트를 실행하려면 --test-codegen-backend 플래그를 사용할 수 있습니다:

./x test tests/ui --test-codegen-backend gcc

이 방법이 동작하려면 테스트 대상 컴파일러의 sysroot 디렉터리에서 GCC 코드 생성 백엔드를 사용할 수 있어야 한다는 점에 유의하십시오.

CI에서 GCC 내려받기

gcc.download-ci-gcc 부트스트랩 옵션은 GCC(GCC 코드 생성 백엔드의 의존성)를 CI에서 내려받을지 로컬에서 빌드할지를 제어합니다. 기본값은 true이며, 이 경우 GCC 소스에 로컬 변경 사항이 없고 해당 호스트 타깃을 CI에서 사용할 수 있으면 CI에서 GCC를 내려받습니다.

직접 GCC 제공하기

직접 준비한 libgccjit.so 파일을 제공하고 싶은 경우가 있습니다. 그러한 경우 중 하나는 GCC가 다중 타깃 컴파일러가 아니기 때문에 rustc를 다른 타깃으로 교차 컴파일하려는 경우입니다. 이러한 사용 사례를 지원하기 위해 gcc.libgccjit-libs-dir 부트스트랩 옵션이 있습니다. 이 옵션은 gcc.download-ci-gcc보다 우선하며, 이는 부트스트랩이 libgccjit.so를 내려받거나 로컬에서 빌드하지 않는다는 뜻입니다. 이 디렉터리의 구조는 <host>/<target>/libgccjit.so이며, 예를 들면 다음과 같습니다:

.
├── m68k-unknown-linux-gnu
│   └── m68k-unknown-linux-gnu
│       └── libgccjit.so
└── x86_64-unknown-linux-gnu
    ├── m68k-unknown-linux-gnu
    │   └── libgccjit.so
    └── x86_64-unknown-linux-gnu
        └── libgccjit.so

백엔드 자체의 테스트 실행하기

GCC 코드 생성 백엔드를 사용하여 컴파일러의 테스트 스위트를 실행하는 것 외에도, 백엔드 자체의 테스트 스위트도 실행할 수 있습니다.

다음 명령을 사용하여 실행합니다.

./x test rustc_codegen_gcc

이 작업을 수행하려면 백엔드가 활성화되어 있어야 합니다.