본문 바로가기

Master/Master

LLVM(Low-Level Virtual Machine), Clang

LLVM 미들엔드/백엔드를 구성하는 라이브러리. LLVM IR은 특정 아키텍처로부터 독립적이며, 어떤 아키텍처에 설치된 LLVM Core로 빌드했느냐에 따라 타겟 플랫폼이 결정된다. 

LLVM은 컴파일러 개발자에게도 많은 장점이 있는데, 컴파일러를 만드는 쪽에서 프론트엔드부터 백엔드까지 모든 걸 구현해야 했던 예전과는 달리, 프론트엔드 및 LLVM과의 연결부만 구현하면 LLVM이 코드 최적화와 기계어 생성을 담당해 주기 때문이다. 덕분에 현재 다양한 언어에 대응하는 여러 LLVM 프론트엔드 컴파일러들이 만들어지고 있다.

 

 각종 컴파일러(코드를 다른 코드로 변환하는 프로그램)과 툴체인(바이너리 코드 생성시에 필요한 라이브러리 로딩등을 도와주는 라이브러리 모음집)을 하나로 묶은 거대한 프로젝트에요. 여러 언어들(C, Go, Swift, ...)을 모두 지원하는게 특징입니다.

 

LLVM은 크게 프런트엔드/미들엔드/백엔드라는 세 구성으로 이루어져 있습니다.

 

  • 프런트엔드는 사용자가 작성한 고급 언어를 LLVM IR이라는 언어로 변경해주는 놈
  • 미들엔드는 컴파일된 IR을 최적화 해주는 놈
  • 백엔드는 최적화된 IR을 네이티브 바이너리(윈도우면 exe겠죠?)로 바꿔주는 놈이고요.

 

단계를 나눠놓음으로써, 여러 고급 언어와 여러 플랫폼을 유연하게 지원할 수 있게 된거죠. 애플은 이렇게 생성된 IR 코드를 제출받아서 플랫폼 변화에 좀더 여유롭게 대응하고, 자기들만의 최적화 기법을 적용하여 앱을 배포할 수 있답니다. 

 


clang

Clang은 libclang과 그 프론트엔드로 구성된 C, C++, Objective-C용 컴파일러이다. '클랭'이라고 읽으며, 2007년에 첫 등장하였다. LLVM 프로젝트의 메인 프론트엔드라고 할 수 있다. 소스 코드를 LLVM IR로 컴파일하는 역할을 담당하며, 빌드 자동화 스크립트는 GCC와 동일하게 Makefile을 사용한다.

 

'Master > Master' 카테고리의 다른 글

sudo 사용 문제점  (0) 2020.09.25
protobuf 설치  (0) 2020.09.25
how to check llvm version number in windows 10  (0) 2020.09.25
standalone  (0) 2020.09.18
알아야 할 개념  (0) 2020.09.18