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 크로스 툴체인을 설치해야 함을 의미합니다.

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

crossdev -t sparc를 실행할 때 나타나는 오류

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

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

Fortunately, there is a workaround for this little problem. All it takes is a wrapper script and a few symlinks on the box that will be running. I'll use my Sparc box as an example. Wherever you see  below, you will want to insert your own CHOST (   for an AMD64 box, for example). When you first emerge distcc, the directory looks like this:

여러분이 처리하려는 명령입니다:

Next, we'll create the new script on this box. Fire up your favorite editor and create a file with the following text in it, then save it as. Remember to change the CHOST (in this case,  ) to the actual CHOST of the box that will be running the emerge.

새 래퍼 스크립트

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

끝났다면 은 다음과 같은 모습을 띠게 됩니다:

축하합니다. 이제 (원하는 대로) 동작하도록 cross-distcc를 설정했습니다.

동작 원리
When  is called, it checks to see what it was called as (e.g.  ,   , etc.) When distcc then distributes the compile to a helper box, it passes along the name it was called as. The distcc daemon on the other helper box then looks for a binary with that same name. If it sees just , it will look for   , which is likely to be the native compiler on the helper box, if it is not the same architecture as the box running. When the full name of the compiler is sent (e.g.  ), there is no confusion.

감사문
이 안내서에 제공한 노고에 대해 다음 작성자와 편집자분들께 감사의 말을 전하고자 합니다:


 * Andrew Gaffney
 * Joshua Saddler