Distcc/Cross-Compiling/ko

이 안내서에서는 distcc에서의 다른 프로세서 아키텍처간 크로스컴파일 설정 방법을 보여줍니다.

도입부
는 네트워크에 연결한 다양한 컴퓨터에게 덩치가 큰 프로그램을 컴파일하도록 일감을 공유하는 도구입니다. 같은 프로세서 아키텍처로 만들어진 같은 툴체인을 네트워크에 연결한 여러대의 머신이 사용하면  설정을 따로 할 필요가 없습니다. 다만 각기 다른 아키텍처를 지닌 다른 컴퓨터로 컴파일해야 한다면 어떻게 해야 할까요? 이 안내서에서는 각기 다른 아키텍처에 대해 로 컴파일하는 방법을 알려드리도록 하겠습니다.

필요한 유틸리티 이머지
먼저 컴파일 과정에 관여할 모든 머신에 를 이머지해야 합니다. 는 크로스 아키텍처 툴체인을 쉽게 빌드할 수 있게 만든 툴입니다. 초기에 Joshua Kinard가 작성한 프로그램을 Mike Frysinger가 재작성했습니다. 사용 방법은 상당히 쉽습니다. 라고 명령을 실행하면 스파크 아키텍처를 대상으로 하는 크로스 툴체인을 만듭니다. 여기에 binutils, gcc, glibc, linux-headers가 들어갑니다. 도움이 더 필요하다면 를 실행해보십시오. 확실히 말하자면 모든 도우미 머신에 적당한 크로스 툴체인을 이머지해야 합니다.

크로스 툴체인을 최상의 상태로 만들려면 도우미 머신에 빌드할 정확한 버전의 크로스 개발 꾸러미를 만들 스크립트를 마련했습니다(스크립트는 대상 머신에서 실행합니다).

그 다음, 컴파일 과정에 관여하는 모든 머신에  를 이머지해야 합니다. 이 과정에서는 머신이 이머지를 실행하게끔해서 크로스 컴파일러로 무장할 수 있도록 합니다. 설정 및 사용법에 대해 더 많이 알아보고 싶다면 젠투 distcc 문서를 살펴보십시오.

인텔 x86 하위 아키텍처
x86에 대해 각기 다른 하위 아키텍처(예: i586, i686)간에 크로스 컴파일링을 수행한다면, CHOST로 바라는대로의 완전한 크로스 툴체인을 만들어야 합니다. 그렇지 않으면 컴파일이 실패합니다. 왜냐하면 실제로는 i586과 i686 두 아키텍처를 "x86"으로 간주함에도 불구하고 CHOST값은 다릅니다. 크로스 툴 체인을 빌드할때 염두에 두시기 바랍니다. 예를 들어 대상 머신이 i586이라면 i686 도우미 머신에 i586 크로스 툴체인을 설치해야 함을 의미합니다.

스파크
를 실행하면 다음 오류중 하나로 실패합니다:

여기서 문제가 있다면 다음 명령을 대신 사용하십시오:

올바르게 크로스컴파일 하도록 distcc 설정
기본 distcc 설정에는, 크로스 컴파일이 제대로 동작하지 "않습니다".이 문제는 완전한 컴파일러 이름(예: ) 대신에 를 호출하기 때문입니다. 부분부분 쪼갠 컴파일 작업물을 distcc 도우미 머신으로 보내면 새로 만든 윤기가 좔좔 흐르는 크로스 컴파일러가 아닌 자체 컴파일러를 호출합니다.

다행스럽게도 다른 해결책이 있긴 합니다. 를 실행할 머신의 몇가지 심볼릭 링크와 래퍼 스크립트가 있습니다. 예로서 제가 가진 스팍 머신을 사용하도록 하겠습니다. 를 아래서 보는 곳마다, (예를 들어 AMD64 머신에 대해 라고 하는 것처럼) 자체 CHOST 값을 넣으려 할 것입니다. distcc를 처음 emerge할 때, 디렉터리는 다음과 같은 모습을 띱니다:

여러분이 실행할 명령입니다:

다음 이 머신에 새 스크립트를 만들겠습니다. 여러분 취향에 맞는 편집기를 여시고 다음 텍스트를 만들 파일에 넣은 다음에 라고 저장하십시오. 기억하셔야 할 것은 emerge를 실행할 머신의 CHOST가 값을 바꾸려는 CHOST(이 경우 )입니다.

다음 실행 스크립트를 만들고 적당한 심볼릭 링크를 만들도록 하겠습니다:

끝났다면 은 다음과 같은 모양새를 띱니다:

다음 심볼릭 링크를 중복적용할 distcc 꾸러미를 업그레이드 하고 나서도 래퍼를 계속 존재하게 내버려 둘 지 확인하려 할 것입니다. 다음처럼 파일을 편집하면 원하는대로 할 수 있습니다:

Congratulations; you (hopefully) now have a working cross-distcc setup.

동작 원리
를 호출하면, 어떤 머신(예:, , 등)이 도우미 머신을 호출했는지 찾고, distcc가 도우미 머신에 컴파일 일감을 던지면, 호출한 이름에 따라 전달합니다. 다른 도우미 머신의 distcc 데몬은 같은 이름의 바이너리를 찾습니다. 만을 찾는다면, 도우미 머신의 자체 컴파일러 같은 를 그냥 찾습니다. 를 실행하는 머신과 아키텍처가 다르다면 컴파일러 전체 이름을 보냈을 경우에 (예: ) 혼동하지 않습니다.