Distcc/Cross-Compiling/ko

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

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

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

If you want to fine tune the cross-toolchain, here is a script that will produce a command line with the exact versions of the cross development packages to be built on the helper boxes (the script is to be run on the target box).

Script to fine-tune cross development tools

Next, you will need to emerge  on all the machines that will be involved in the process. This includes the box that will run emerge and the boxes with the cross-compilers. Please see the Gentoo Distcc Documentation for more information on setting up and using.

인텔 x86 하위 아키텍처
If you are cross-compiling between different subarchitectures for Intel x86 (e.g. i586 and i686), you must still build a full cross-toolchain for the desired CHOST, or else the compilation will fail. This is because i586 and i686 are actually different CHOSTs, despite the fact that they are both considered "x86." Please keep this in mind when you build your cross-toolchains. For example, if the target box is i586, this means that you must build i586 cross-toolchains on your i686 helper boxes.

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

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

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

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

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

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

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

새 래퍼 스크립트

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

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

Next we want to make sure that these wrappers stay available after upgrading the distcc package as it will overwrite the symbolic links. We can do this through a file that looks like so:

/etc/portage/bashrc

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

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

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


 * Andrew Gaffney
 * Joshua Saddler