FREEDOM. FRIENDS. FEATURES. FIRST.
페도라 한국 사용자 모임

LLVM(llvm-gcc) 사용가이드

게시판 Tech/Tip LLVM(llvm-gcc) 사용가이드

  • This topic has 2개 답변, 2명 참여, and was last updated 11 years 전에 by 인베인. This post has been viewed 16 times
  • 만든이
    게시글
  • #12104
    인베인
    참가자
    • 게시글141
    • 댓글379
    • 총합520
    • ★★
    @leemgs


    1. LLVM
    C, C++, ObjectiveC 와 같은 프로그래밍 언어를 위한 Front End 컴파일러인 clan을 위하여
    LLVM(Low Level Virtual machine)은 Back End으로써 사용된다.

    Frond-End와 Back-End개념에 대해 한번 얘기해보도록 하겠다. 필자의 경우 서버관리및 기업형
    서버 서비스 개발 경험을 가지면서 3Tier에 대한 개념을 처음 접하였으며, 여기서 우리가 System Programming에서
    일반적으로 거론하는 Foreground Daemon & BackGround Daemon 의 개념이 웹에서 확장되어 사용되는
    것이라고 볼수 있다. 예를 들어 설명하자면 앞에서 서비스가 하는 데몬들 뒤에서는 앞의 서비스 데몬들을
    위해 지원해주는 서비스 데몬이  Back Daemon이라 설명될 수 있으며, 실제의 예가 웹에서의 3Tier는
    (Presentation-Apache , Busyine Logic-PHP/JSP , DataDB-Oracle)으로 표현되기도 한다.

    컴파일러에서의 Front-End  및  Back-End 개념은 사실 http://gcc.gnu.org의 우측 하단에 있는
    "Development" 메뉴에서 처음 접했으며, 설명에서 개념적인 설명정도라서  정확한 이해를 하기 힘들었으며,
    Front는 C/C++/Java Language를 가리키며, Back은 Architecture를 가리키는 정도로 해석하였다.

    http://gcc.gnu.org/frontends.html , http://gcc.gnu.org/backends.html 에 대한 설명은
    2005년도에 LLVM를 GCC으로의 통합에 대한 개발자 논의에서 시작된다. 현재는 Low Level Virtual Machine이라
    불리는 LLVM은 상업용 RHEL(Redhat Linux EnterPrise)Ver 4서버에서 실험적으로 이용되기도 하였다.

    LLVM을 후원하고 있는 Apple사는 Mac OS 10.5(Leopard) 버젼에서 OpenGL Stack에 LLVM의 Optimizer와
    JIG를 적용하였다. LLVM은 사용자 애플리케이션에 의해 요청되는 Feature를 제공하는 못하는 하드웨어가
    있거나 Disable되어 있을때 사용되었었다.

    애플사에 의해 후원되고 있는 오픈소스인 LLVM 프로젝트는 개발속도가 비교적 빠른편이며,
    개발이 완료되게 되었을때 GCC를 대체할수 있도록 제공될 예정이다.

    C, ObjectiveC를 위한 "Code Generation"이 부분적으로 완료된 상태이며,
    C++, ObjectiveC++를 위한 지원은 아직까지 완료되지 않은 상태이다.

    LLVM은 GCC 4.0.1 및 GCC 4.2 에 있는 Front-End를 사용하여 C, C++, ObjC의 컴파일을 지원하고 있으며,
    C와 유사한 언어를 위해해 clang이라는 이름으로 Front-End가 개발되어 있다.

    LLVM을 사용하여 Java처럼 언어를 위한 가상머신을 생성할 수 있다.
    .지정된 아키텍쳐를 위한 Code Generator,
    .특별한 플랫폼 또는 Language으로부터 독립적인 Optimizer,
    .아키텍쳐 독립적인 LLVM IR(Intermediate Representation)

    LLVM 코드는 능률적인 컴파일러 변환 및 분석을 위한 IR(Intermediate Representation) ,
    JIT Compiler에 의해 빠른 Loading에 적합한 Bitcode 표현,
    사람이 읽을수 있는 Assembly Language 이라는 3가지의 형식이 사용되도록 설계되었다.

    "University of Illinois Open Source License" 라이센스 규정아래 오픈소스로 사용이 가능하며,
    내용이 BSD라이센스와 매우 유사하다.

    LLVM의 정확한 해석은
    다양한 애플리케이션을 빌드하기 위한 용도의 컴파일러 라이브러리로써  BSD License 형식을 가진  
    오픈소스 기반의 Moduler를 사용하기 쉽게 제공하는 것이라고 볼수 있다.
    하지만, 대부분의 많은 사람들이 일반적으로 컴파일러 또는 프로젝트 명에 의해 사용자로 하여금
    많은 접근의 어려움을 주는 것 같다. (예: udev의 출생시처럼....)

    2. LLVM의 주요 목적

    가) 컴파일러 컴포넌트들이 재사용이 가능하도록 Layer화된 라이브러리의 설계
     . Auto Complete
     . Code Refactoring
     . Static Analysis
     . Source Code Indexing
     . Documentation Generation
    나) GCC에 비해 Low Memory Footprint
    다) GCC보다 향상된 컴파일 속도
    라) GCC와 Command Line 호환성

    3. Compile
    fc6#> svn export https://llvm.org/svn/llvm-project/llvm-gcc-4.2/branches/release_XX llvm-gcc4.2-X.X.source
    fc6#> tar -cvf - llvm-gcc4.2-X.X.source | gzip > llvm-gcc-4.2-X.X.source.tar.gz
    fc6#> tar xzf llvm-gcc-4.2-X.X.source.tar.gz
    fc6#> cd llvm-gcc-4.2-X.X.source
    fc6#> make dist             # Build the distribution source tarball
    fc6#> make dist-check       # Check that the source tarball can build itself.
    fc6#> cp llvm-M.m.tar.gz /usr/src/redhat/SOURCES  # Required by rpmbuild
    fc6#> make srpm                                   # for source rpm
    fc6#> make rpm                                    # for binary rpm

    4. LLVM + GCC

    https://llvm.org/svn/llvm-project/llvm-gcc-4.2/trunk/README.LLVM  디렉토리에서 LLVM을 빌드 하는 방법에
    대한 문서를 참고하여 빌드를 할수 있다.

    http://llvm.org/prereleases/2.1/version2/llvm-gcc4.0-2.1-x86-linux-RHEL4.tar.gz (30M)
    http://llvm.org/prereleases/2.1/version2/llvm-test-2.1.tar.gz (53M)
    http://llvm.org/prereleases/2.1/version2/llvm-gcc4.0-2.1.source.tar.gz ( 41M)
    http://llvm.org/prereleases/2.1/version2/llvm-gcc4.0-2.1-ppc-darwin8.10.0.tar.gz (39M)
    http://llvm.org/prereleases/2.1/version2/llvm-gcc4.0-2.1-x86-darwin8.tar.gz ( 40M)
    http://llvm.org/prereleases/2.1/version2/llvm-2.1.tar.gz (4.8M)
    http://llvm.org/prereleases/2.1/version2/llvm-gcc4.2-2.1.source.tar.gz (52M)

    위의 주소에서 다운로드 받아 자신의 Linux Host에 설치를 하였다면,
    아래와 같이 llvm-config 명령을 이용하여 C++ 소스코드를 컴파일후에
    실행하여  성능 테스트를 할수 있다. toy.cpp 소스파일은 http://llvm.org/docs/tutorial/LangImpl3.html#code에서
    다운로드 하면 된다.
    fc6#> g++ -g -O3 toy.cpp `llvm-config --cppflags --ldflags --libs core` -o toy
    fc6#> ./toy

    * 오픈소스는 Open Innovationa & 윈윈전략을 도모할 지언정 절대 공짜(무료)임을 뜻하지 않는다.치

1 답변 글타래를 보이고 있습니다
  • 글쓴이
    답변
    • #12707
      ELem
      참가자
      • 게시글67
      • 댓글672
      • 총합739
      • ★★
      @Bardisch

      ㅇㅅㅇ 뒷글의 백엔드인겁니까

    • #12708
      인베인
      참가자
      참가자
      • 게시글141
      • 댓글379
      • 총합520
      • ★★
      @leemgs

      네.. LLVM은 백엔드입니다.

       

      * 오픈소스는 Open Innovationa & 윈윈전략을 도모할 지언정 절대 공짜(무료)임을 뜻하지 않는다.치

1 답변 글타래를 보이고 있습니다
  • 답변은 로그인 후 가능합니다.