2015-01-29 3 views
3

저는 처음부터 llvm을 사용하여 크로스 아키텍처 또는 크로스 OS 컴파일러를 만드는 방법에 대한 많은 정보를 찾을 수 없었습니다. llvm 자체는 기본적으로 작동합니다. 그런 다음 대상 시스템에서 sysroot를 수집하고 크로스 플랫폼 binutils를 생성하고 통합해야합니다.크로스 컴파일러를 어떻게 조합합니까?

엄청난 수의 무작위 유스 케이스가 있지만, 즉각적인 성가심은 CodeSourcery와 같습니다. 기본적으로 Windows 기반의 arm/linux를 타겟으로 삼았습니다.

+0

에서 사용할 수 있습니다. 아마도 이전 Stack Overflow에서 환영 받았을 것입니다. 스택 오버플로의 현재 버전에서는 너무 광범위하게 닫힙니다. – jww

+0

그래, 일종의. 그러나 의견이 많지 않다는 것을 알게 될 것입니다. 아마도 스택 오버플로에 관한 잘못된 질문이있는 주요한 성가심 일 것입니다. 정말 LLVM/clang에 대해 구체적으로 알고 싶습니다. 나는 당신이 그것을 꺼내기 위해 나의 주제를 편집 한 것을 알아 차렸다. –

+0

편집에 대해서는 [제목에 "태그"가 포함되어야합니까?] (http://meta.stackexchange.com/q/19190)를 참조하십시오. * Tag : * 및 * Tag - *와 같은 제목은 정리해야합니다. – jww

답변

2

나는 clang/LLVM을 기반으로 크로스 컴파일 툴 체인을 만들고 있습니다. 현재 다양한 Linux 플랫폼 (ARM, Mips, PowerPC, x86) 및 Windows x86에서 실행됩니다. 나는 현재의 LLVM 소스 트리를 가지고 최신 버전의 binutils, GDB 등을 공개하려고한다. (http://ellcc.org/blog/?page_id=467 참조). 프로젝트에 대한 몇 가지 주요 디자인 목표가 있었지만 두 가지는 최우선 과제였습니다. 필자는 전체 툴 체인이 모든 리눅스 타겟에 대해 자체적으로 구축 될 수 있기를 바랬으며, clang의 정신으로 가능한 한 적은 바이너리 만 지원하기를 원했습니다. 이를 위해 binutils를 빌드하여 대부분의 실행 파일이 모든 대상을 지원할 수있는 옵션을 제공합니다. 각 프로세서는 자신의 (LLVM이 같은 이상의 내부 어셈블러 지원이 사용할 수에 대한 필요성을 제거한다), 그러나 나는 등 한 LD, objdump를, GDB을 구축으로, 즉 처리 할 수있는 얻는 모든 다른를 목표.

깨끗한 소스 설치에서 나는 먼저 gcc로 clang/LLVM과 binutils/GDB를 만든 다음 모든 대상에 대해 모든 라이브러리 (C/C++, compiler-rt 등)를 빌드합니다. 두 번째 선택적 빌드는 새로 빌드 된 도구를 사용하여 컴파일합니다. 그 이후의 빌드는 자체 호스팅입니다.

다양한 호스트의 모든 도구를 x86 Linux 상자에 구축했지만 이론적으로 각 도구 체인은 다른 Linux 호스트 또는 Windows에서 자체를 다시 만들 수 있어야합니다. 당신이 미리 만들어진 바이너리에 관심이 있다면

, 그들은 (당신이 정말로 몸을 명시하지 않는하지만) 나는 이것이 좋은 질문이라고 생각 http://ellcc.org/blog/?page_id=20295

+0

와우. 저는 여러분의 프로젝트가 처음부터 라이브러리를 만드는 것보다 다른 방법을 찾지 못했다고 생각합니다. 방금 대상 (대/완전 또는 사양을 기반으로 일부 하위 집합)에서 sysroot를 수집하기위한 도구가 있다고 가정했습니다. –

+0

방금 ​​clang/LLVM, binutils 및 gdb를 빌드하는 데 필요한 라이브러리를 모았습니다. 필자는 모든 대상 프로세서에 대해 미리 컴파일 된 라이브러리를 가져 오기보다는 소스에서 빌드하려고했습니다. –

+0

오, 그걸 다시 읽었을 때 더 의미가 있습니다. –

관련 문제