2011년 9월 21일 수요일

Chromium 분석 - 소스트리 (1)

어제 컴파일 걸어놓고 일어나서 보니 빌드가 끝나있네요 ㅎㅎ
Debug 모드로 빌드했더니 chrome 바이너리 크기가 1GB 가까이 됩니다...
Release 모드로 빌드하면 100MB 정도 되려나요~ 아무튼 거대한 프로그램 입니다.

오늘은 Chromium 소스코드의 디렉토리가 어떻게 구성이 되어 있는지 알아보겠습니다.

압축을 풀고 디렉토리를 들여다보니 디렉토리며 소스들이 엄청납니다.
커널소스를 처음 봤을때의 막연함이 생각나네요.
브라우저가 OS 와 같은 플랫폼처럼 되가고 있으니 점점 더 크고 복잡해져갈 것 같습니다.

아래와 같이 루트 디렉토리 내 많은 디렉토리들이 있습니다.

Chromium 소스 트리







흠... 디렉토리 이름 중에 알만한 건 out 밖에 없네요...
이 많은 디렉토리 트리를 어떻게 알아가야할지 대략난감입니다.

courgette, jingle, ppapi, sdch 등등 디렉토리 이름만 봐서는 전혀 감을 잡을 수가 없네요.

다행히 chromium.org 내 sitemap -> For Developers -> Design Document 에서 정보를 찾을 수가 있습니다.

얼핏 보니 다음 두 페이지가 눈에 들어오네요.

Getting Around the Chromium Source Code Directories

How Chromium Displays Web Pages

소스트리가 방대해서 여러 포스트에 걸쳐서 정리를 해야할 것 같습니다.

우선 위 두 페이지를 보고 이해한 다음에야 대략 소스트리 구조를 알 수 있을것 같네요.

2011년 9월 20일 화요일

Chromium 분석 - Build

이번 포스트에서는 다운 받은 Chromium 소스코드를 빌드하는 방법을 알아보겠습니다.

빌드하기 전에 어제 다운받은 소스코드를 최신버전으로 업데이트하기 위해 "gclient sync"를 이용하여 최신버전으로 업데이트 해보겠습니다.

이런... 리비전 101697에서 101737로 업데이트가 되었습니다...

이런 개발속도를 따라가려면 하루 24시간 따라가도 모자라겠네요 ;;;

Chromium은 많은 다른 오픈소스 라이브러리를 필요로합니다.
따라서 빌드를 위해서는 시스템에 의존성이 있는 라이브러리들을 밀 설치해야하는데, Chromium은 이를 위해 ./build/install-build-deps.sh 를 제공하고 있습니다.
이 스크립트를 실행하면 Chromium이 의존성을 가지고 있는 라이브러리들을 설치할 수 있습니다. (참 편하죠? ^^ - 나중에 ARM 환경에서 Cross-compile도 시도해 보아야겠습니다.)

이제 의존성을 다 해결했으니 Makefile을 생성해야겠죠?

이전 포스트에서 depot tools 에 대해 잠깐 살펴보았는데요, 빌드는 gyp라는 빌드 시스템을 사용하고 있습니다. gyp는 configure 스크립트 처럼 Make를 위해 Makefile을 생성해주는 시스템 입니다.

gclient sync를 하면 자동으로 gyp 을 실행하면서 Makefile을 생성해줍니다.
새로 Makefile을 업데이트 하고 싶다면 "./build/gyp_chromium -Dflag1=value1 -Dflag2=value2" 명령을 이용해서 원하는 플래그도 설정합니다.
(기본적으로 Chromium은 compiler warning이 발생하면 빌드를 멈춥니다. warning 을 만나도 빌드를 계속하게 하려면 -Dwerror= 을 추가해 줍니다)

이제 make 명령을 사용하여 빌드를 시작할 수 있습니다.

저는 make -j4 BUILDTYPE=Debug chrome 으로 빌드를 하였습니다.
BUILDTYPE은 Release 와 Debug를 선택할 수 있습니다. Debug 빌드는 디버그 심볼등이 포함되어 있어서 Release 모드 빌드 보다 chrome 실행 파일 크기가 큽니다.

빌드가 오래 걸리네요... 낼 출근을 위해 빌드를 걸어놓고 잠을 자야겠습니다.

낼 아침 빌드가 잘 되어 있으면 다음 포스트는 Chromium 의 소스트리에 대해 알아보도록 하겠습니다.

2011년 9월 18일 일요일

Chromium 분석 - 다운로드

이번 포스트에서는 Chromium 소스 다운로드 방법 & 소스 내비게이션에 대해 알아보겠습니다

소스 다운로드 방법은 두가지가 있습니다
    - tarball 로 다운받기
    - svn 에서 checkout 하기

svn으로 checkout하면 시간이 상당히 걸리므로 tarball로 다운을 받아서 update 하는 방법을 이용하겠습니다.

아래 링크를 클릭하여 최신의 tarball을 다운로드 받을 수 있습니다.(약 1.1GB의 tgz 파일)
  http://chromium-browser-source.commondatastorage.googleapis.com/chromium_tarball.html

다운받은 tarball을 풀면 생기는 home/chrome-svn/tarball/chromium/src 에 Chromium의 소스코드가 있습니다.
src 의 상위 디렉토리(home/chrome-svn/tarball/chromium) 에서 gclient update 를 해보니 새로운 업데이트가 있습니다.
정말 빠르게 업데이트가 되는군요!! :)

소스 코드 내비게이션 기능 또한 제공하고 있습니다.
빌드가 아닌 소스 분석만을 하고 싶으면 굳이 시간이 많이 걸리고 디스크 공간만 차지하는 소스 코드 다운로드를 할 필요가 없습니다.
아래의 링크에서 소스 내비게이션이 가능합니다.

    - http://src.chromium.org/viewvc/chrome/ 
    - http://codesearch.google.com/#&exact_package=chromium

소스만 최소 약 1.6GB 정도이고, 빌드까지 한다면 약 10GB 정도가 필요하다고 합니다. 엄청나네요...

다음 포스트에서는 Chromium의 빌드 방법에 대해서 알아보겠습니다.

2011년 9월 17일 토요일

Chromium 분석 - depot_tools

Chromium 분석 작업을 시작하려고 합니다.
어려운일이겠지만 처음부터 하나씩 시작하다보면 언젠가 패치도 올릴 수 있겠지요? ㅎㅎ

첫번째로, Chromium 분석에 앞서 개발과정에서 사용되는 depot_tool 툴에 대해 알아보겠습니다

1. depot tool?
    - Chromium 에서 사용하는 스크립트 패키지
    - Chromium은 depot_tools 를 이용하여 소스 체크아웃 및 코드리뷰 작업을 수행
    - 포함된 유틸리티들 (사용하면서 사용법 업데이트)
      * gclient - svn, git repository checkout tool
      * gcl - code review tool for subversion 
      * git-cl
      * drover
      * etc

2.  depot tools 설치 
    - 다운로드
       - svn co http://src.chromium.org/svn/trunk/tools/depot_tools
    - 설치
       - $export PATH="$PATH":`pwd`/depot_tools
       - 또는 .bash_rc (ubuntu) 에 추가

다음 포스트에서는 Chromium 소스 다운로드 방법에 대해서 알아보겠습니다