WebKit 빌드 절차

WebKit 2009.11.27 10:01

웹킷 빌드 절차 요약

 

작년에 웹킷을 처음 빌드한지 1년이 지난 지금,

최신 웹킷 소스를 다운 받아 다시 빌드하게 됐다. 작년보다 빌드 절차가 다소 간소해졌다. 웹킷 프로젝트가 더욱 정돈되었구나 느꼈다. 개선됐다고 느낀 점은 다음 2가지다.

l  dos2unix 를 통해 웹킷 소스 파일들의 eol (end of line) 포맷을 바꾸어 주지 않아도 빌드가 됐다. 이는 웹킷 소스가 개선됐기 때문일 수도 있고 cygwin 같은 빌드에 사용되는 툴이 개선됐기 때문일 수도 있다.

l  Webkit.sln 파일을 열어 대부분의 프로젝트에 /wd4819 컴파일 옵션을 부여하는 절차를 생략해도 빌드가 됐다. DumpRenderTree 라는 프로젝트만 컴파일 옵션을 조정해주면 깔끔하게 빌드가 끝난다.

 

작년에 썼던 빌드 성공담은 http://ingeec.tistory.com/1 에서 확인할 수 있다.

빌드가 수월해지기는 했지만 여전히 약간의 산을 넘어야 한다. 덕분에 빌드만 끝내도 약간의 성취감(?)을 느낄 수 있다. 빌드 성공담을 공유한다. 아래의 빌드 절차는 Windows XP 32bit PC 위에서 수행했다.

 

 

1. 툴설치

웹킷 빌드에 필요한 툴들을 설치한다. 다음과 같은 툴들이 필요했다.

l  Cygwin

n  설치할 때 “all/ install” 옵션을 선택했다.

l  Tortoise

n  1.6.6.17493 (32bit): 2009.11.19. 현재 최신 버전이다.

l  VS 2005

n  2개의 PC에서 빌드해봤다. PC는 영문 버전을 사용했고, 다른 PC에서는 한글 버전을 사용했다. PC 모두 빌드하는데 문제 없었다.

l  QuickTime SDK

n  http://webkit.org/building/tools.html 페이지를 참조한다.

 

툴 관련 팁

l  Cygwin 콘솔에서 SVN 관련 메시지가 깨져 나올 때

ð  C:\cygwin\usr\share\locale 아래 있는 ko 폴더를 지우거나 다른 이름으로 바꾸면SVN 관련 메시지가 영문으로 출력된다. 한글은 아니지만 이상한 난수로 깨져나오는 것보다는 낫다.

l  VS2005 한글 버전을 쓸 때

ð  http://trac.webkit.org/wiki/BuildingOnWindows 페이지를 보면 VS2005 관련 서비스팩들을 깔아야 한다고 안내되어 있다. 그런데 그페이지에 가이드된 서비스팩들은 영문버전용이라서 그런지 한글 VS2005 위에는 설치되지 않았다. 서비스팩들을 깔지 않고 그냥 있는 그대로 시도해도 문제 없었다.

 

 

2. 소스 트리 작성

l  작업 디렉토리 아래 src 폴더와 out 폴더를 만들었다. 빌드를 위해 구축한 폴더 구조는 다음과 같다.

l  src 폴더는 WebKit 소스서버(http://svn.webkit.org/repository/webkit/trunk)로부터 최신 소스를 다운로드 받을 폴더이다. 이후 $(SrcHome) 이라고 언급하기로 한다.

l  out 폴더는 웹킷 소스를 빌드한 결과물을 담을 폴더이다.


 

3. WebKit 소스 체크아웃

l  “2009-11-09, rev 50632” 버전과 “2009-11-20, rev 51226” 버전으로 빌드 절차를 확인했다.

 

 

4. WebKitSupportLibrary.zip 다운로드 & 복사

l   http://developer.apple.com/opensource/internet/webkit_sptlib_agree.html 

l  WebKitSupportLibrary.zip 파일을 다운로드 해서 $(SrcHome) 폴더에 복사한다.

 

 

5. 환경변수 등록

l  WEBKITOUTPUTDIR 환경변수와 WEBKITLIBRARIESDIR 환경변수를 등록한다.

l  WEBKITOUTPUTDIR 환경변수에는 임의의 path를 지정해도 되지만,
WEBKITLIBRARIESDIR
환경변수에는 WebKit 소스트리 안에 있는

$(SrcHome)\WebKitLibraries\win path
(Window Style) 지정해야 한다.

l  참고로 필자는 Cygwin bash에서 환경변수 등록을 위해 다음과 같은 스크립트 파일을 사용했다.

 

스크립트 파일 (webkitenv.sh) 내용

export WEBKITOUTPUTDIR=E:\\Work\\webkit\\out

export WEBKITLIBRARIESDIR=E:\\Work\\webkit\\src\\WebKitLibraries\\win

 

스크립트 파일을 이용한 환경변수 등록 절차 (cygwin bash 콘솔출력)

ingee@ingeedev ~

$ pwd

/cygdrive/e/Work

 

ingee@ingeedev ~

$ cd webkit/

 

ingee@ingeedev ~/webkit

$ source webkitenv.sh

 

ingee@ingeedev ~/webkit

$ env |grep WEBKIT

WEBKITLIBRARIESDIR=E:\Work\webkit\src\WebKitLibraries\win

WEBKITOUTPUTDIR=E:\Work\webkit\out

 

ingee@ingeedev ~/webkit

$

 

 

 

6. update-webkit 스크립트 실행

l  $(SrcHome)/WebKitTools/Scripts/update-webkit 스크립트를 실행하여 소스를 업데이트 한다.

 

cygwin bash 콘솔출력

ingee@ingeedev ~/webkit/src

$ pwd

/cygdrive/e/Work/webkit/src

 

ingee@ingeedev ~/webkit/src

$ ls WebKitSupportLibrary.zip

WebKitSupportLibrary.zip*

 

ingee@ingeedev ~/webkit/src

$ WebKitTools/Scripts/update-webkit

Updating OpenSource

U    WebCore/rendering/style/StyleRareNonInheritedData.h

U    WebCore/rendering/style/RenderStyleConstants.h

U    WebCore/rendering/style/RenderStyle.h

U    WebCore/rendering/RenderThemeWin.cpp

A    LayoutTests/fast/forms/script-tests/ValidityState-stepMismatch-range.js

A    LayoutTests/fast/forms/script-tests/input-type-change3.js

A    LayoutTests/fast/forms/script-tests/ValidityState-typeMismatch-datetime.js

A    LayoutTests/fast/forms/ValidityState-typeMismatch-date-expected.txt

U    WebKitSite/ChangeLog

U    WebKitSite/css/main.css

U    WebKitSite/coding/coding-style.html

U    WebKitSite/coding/commit-review-policy.html

U    WebKitSite/security/security-group-members.html

 U   .

Updated to revision 51372.

Checking Last-Modified date of WebKitAuxiliaryLibrary.zip...

Current WebKitAuxiliaryLibrary is up to date

 

ingee@ingeedev ~/webkit/src

$

 

 

7. 빌드 스크립트 실행

l  WebKitTools/Scripts/build-webkit –debug 스크립트를 실행한다.

l  build-webkit 스크립트를 실행하면 FAIL 이라는 메시지가 뜬다. 하지만 이상태에서도 out 폴더를 확인해보면 WebKit.dll 을 비롯 필요한 모든 결과물이 생성된 것을 확인할 수 있다. FAIL이 난 것은 WebKit 관련 여러 프로젝트중 DumpRenderTree 라는 유틸리티 프로그램 프로젝트 뿐이다.

 

cygwin bash 콘솔출력

ingee@ingeedev ~/webkit/src

$ pwd

/cygdrive/e/Work/webkit/src

 

ingee@ingeedev ~/webkit/src

$ WebKitTools/Scripts/build-webkit –-debug

Checking mod-date of WebKitSupportLibrary.zip...

 

Installing WebKitSupportLibrary...

The WebKitSupportLibrary has been sucessfully installed in

 /cygdrive/e/Work/webkit/src/WebKitLibraries/win

Building results into: /cygdrive/e/Work/webkit/out

WEBKITOUTPUTDIR is set to: E:\Work\webkit\out

WEBKITLIBRARIESDIR is set to: E:\Work\webkit\src\WebKitLibraries\win

/cygdrive/e/Work/webkit/src/WebKitTools/Scripts/pdevenv /useenv win\WebKit.vcproj\

WebKit.sln /build Debug

15>DumpRenderTree.cpp

15>LayoutTestControllerWin.cpp

15>E:\Work\webkit\src\WebKitLibraries\win\Include\ConditionalMacros.h : error C2220: warning treated as error - no 'object' file generated

15>E:\Work\webkit\src\WebKitLibraries\win\Include\ConditionalMacros.h : warning C4819: The file contains a character that cannot be represented in the current code page (949). Save the file in Unicode format to prevent data loss

15>DumpRenderTree - 1 error(s), 3 warning(s)

========== Build: 14 succeeded, 1 failed, 2 up-to-date, 0 skipped ==========

 

===== BUILD FAILED ======

Please ensure you have run WebKitTools/Scripts/update-webkit to install dependencies.

 

You can view build errors by checking the BuildLog.htm files located at:

/cygdrive/e/Work/webkit/out/obj/<project>/<config>.

 

ingee@ingeedev ~/webkit/src

$

          

l  FAIL 메시지는 DumpRenderTree 프로젝트에서 발생한 것이다. 다음 단계 절차에 따라 해결할 수 있다.

 

 

8. C4819 컴파일 에러 해결

l  DumpRenderTree 프로젝트의 C4819 에러를 해결하기 위해 DumpRenderTree 프로젝트의 컴파일 옵션을 수정한다.

l  $(SrcHome)\WebKit\win\WebKit.vcproj\WebKit.sln VS2005 솔루션 파일을 오픈한다.
솔루션 파일을 열기전에 Windows 시스템에 WEBKITOUTPUTDIR 환경변수와

WEBKITLIBRARIESDIR
환경변수가 등록되어 있는지 확인하자. 지금까지 Cygwin 콘솔에서만 작업했다면 Windows 시스템에는 해당 환경변수들이 등록되어 있지 않을 것이다.

l  DumpRenderTree 프로젝트의 all configuration Compile Option으로 /wd4819 부여한다.

 

 

9. 다시 빌드

l  WebKitTools/Scripts/build-webkit --clean 스크립트를 실행한다.

l  WebKitTools/Scripts/build-webkit --debug 스크립트를 실행한다.

 

cygwin bash 콘솔출력

ingee@ingeedev ~/webkit/src

$ pwd

/cygdrive/e/Work/webkit/src

 

ingee@ingeedev ~/webkit/src

$ WebKitTools/Scripts/build-webkit –-clean

17>파일 삭제 - E:\Work\webkit\out\obj\JavaScriptCore\DerivedSources\RegExpObject

.lut.h

17>파일 삭제 - E:\Work\webkit\out\obj\JavaScriptCore\DerivedSources\StringProtot

ype.lut.h

17>파일 삭제 - E:\Work\webkit\out\obj\JavaScriptCore\DerivedSources\docs\bytecod

e.html

========== Clean: 17 succeeded, 0 failed, 0 skipped ==========

 

ingee@ingeedev ~/webkit/src

$ WebKitTools/Scripts/build-webkit --debug >buildlog.txt

 

ingee@ingeedev ~/webkit/src

$

          

l  빌드가 성공했다. 빌드하면서 생성한 buildlog.txt 파일을 첨부한다.

 

 

빌드 팁 (몇가지 문제와 대처방법)

l  qmake 를 찾는 에러가 날 때

 

cygwin bash 콘솔출력

ingee@ingeenote /cygdrive/d/work/webkit/src

$ ./WebKitTools/Scripts/build-webkit --debug > buildlog.txt

Use of uninitialized value $defaults in pattern match (m//) at /cygdrive/d/work/

webkit/src/WebKitTools/Scripts/webkitdirs.pm line 795.

Can't exec "qmake": No such file or directory at /cygdrive/d/work/webkit/src/Web

KitTools/Scripts/webkitdirs.pm line 1217.

Use of uninitialized value $mkspec in scalar chomp at /cygdrive/d/work/webkit/sr

c/WebKitTools/Scripts/webkitdirs.pm line 1217.

sh: qmake: command not found

Failed to setup build environment using qmake!

 

          

ð  Qt 버전으로 빌드하려 했기 때문이다. build-webkit 스크립트를 분석한 결과, cygwin 환경변수중에 QTDIR이 정의되어 있으면 Qt 버전으로 빌드하려 한다는 것을 알았다. cygwin bash 콘솔에서 unset QTDIR 하여 QTDIR 환경 변수를 제거하면 해결된다.

 

 

l  unicode/uchar.h, pthread.h 등의 헤더 파일을 못찾을 때

 

cygwin bash 콘솔출력

ingee@ingeenote /cygdrive/d/work/webkit/src

$ ./WebKitTools/Scripts/build-webkit –debug

2>------ Build started: Project: WTF, Configuration: Debug Win32 ------

2>Performing Pre-Build Event...

2>/usr/bin/bash

2>Compiling...

2>CollatorDefault.cpp

2>e:\Work\webkit\src\JavaScriptCore\wtf/unicode/icu/UnicodeIcu.h(27) : fatal error

C1083: Cannot open include file: 'unicode/uchar.h': No such file or directory

2>FastMalloc.cpp

2>..\..\wtf\FastMalloc.cpp(83) : fatal error C1083: Cannot open include file: 'pthread.h': No such file or directory

          

ð  WEBKITLIBRARIESDIR 환경변수가 잘못 지정됐기 때문이다.
WEBKITOUTPUTDIR
환경변수에는 임의의 path를 지정해도 되지만
,
WEBKITLIBRARIESDIR
환경변수에는 WebKit 소스트리 안에 있는

$(SrcHome)\WebKitLibraries\win path
(Window Style) 지정해야 한다.

 

 

(이상입니다.)

 

 

신고
Posted by ingee

댓글을 달아 주세요

  1. 2009.12.21 12:18  댓글주소  수정/삭제  댓글쓰기

    비밀댓글입니다

  2. feely 2010.01.05 13:54 신고  댓글주소  수정/삭제  댓글쓰기

    안녕하세요.
    블로그에 나온 내용대로 Webkit을 windows 환경에서 구축하려고 하는데 잘 안되네요.
    몇 일째 지웠다가 다시 깔았다가만 반복하는거 같아요.
    빌드 로그는 다음과 같습니다.
    http://mfiles.naver.net/6cbf598196caa0163f5a/20100105_288_blogfile/timbly_1262667119661_sGJh8E_txt/buildlog0105_3.txt?type=attachment
    블로그 내용대로 하는데, 어느 부분에서 틀려서 저렇게 나오는지 잘 모르겠습니다.
    조언 주시면 정말 감사하겠습니다.^^

    • ingee 2010.01.06 17:01 신고  댓글주소  수정/삭제

      빌드로그 봤습니다. cygwin을 비롯 빌드에 필요한 툴이 모두 설치되어 있는지 다시 한번 점검해보시는 것이 좋을 것 같습니다. 언제나 그렇듯 마지막에 문제를 해결하는건 결국 문제를 겪고 있는 당사자입니다. 힘내시기 바랍니다.

  3. feely 2010.01.05 18:06 신고  댓글주소  수정/삭제  댓글쓰기

    답변 감사합니다.^^ 한 번 해보도록 하겠습니다.

  4. feely 2010.01.06 01:07 신고  댓글주소  수정/삭제  댓글쓰기

    말씀하신대로 cygwin에 모든 툴을 설치하니 빌드에 문제 없이 잘되었습니다. 감사합니다.
    빌드가 다 된 상태에서, WebKitTools/Scripts/debug-safari 이렇게만 하면,
    /WebKit/win/WebKit.vcproj/WebKit.sln 의 프로젝트는 뜨지 않고,
    safari에 관한 프로젝트가 뜹니다. 이 상태에서 소스 편집은 어떻게 하는지 모르겠네요.

    그래서, 아는 형께서 사용한 방법을 사용했습니다. 빌드가 성공이 되면,
    safari의 모든 dll을 bin 폴더에 이동하여 해당 프로젝트를 열어 빌드하니, 정상적으로 됩니다.^^

    GTK 경우에는 쉽게 했었던거 같은데, window 환경은 cygwin 때문에 애먹은거 같습니다.
    블로그 정말 많은 도움이 되었고, 답변 정말 감사합니다.^^

    앞으로 1년정도는 webkit과 씨름 할 꺼 같은데, 앞으로 잘 부탁드립니다.^^

  5. 2010.01.06 09:32  댓글주소  수정/삭제  댓글쓰기

    비밀댓글입니다

  6. feely 2010.01.27 02:40 신고  댓글주소  수정/삭제  댓글쓰기

    안녕하세요.
    지난번에 window 환경에서 webkit 빌드를 성공했는데, 지금 동일한 방법으로 다시 했는데
    잘 안되네요. 정말 왜 이러는지 잘 모르겠습니다. ㅠ
    바쁘신 줄 아는데, 빌드 로그 한 번만 부탁드리겠습니다.
    또 몇 일을 소비하고 있는거 같습니다.
    http://mfiles.naver.net/33e004dcc892ff4563f4/20100127_296_blogfile/timbly_1264527441991_8ooQu1_txt/log2.txt?type=attachment
    예전에 한 번 성공했기 때문에, 별 문제 없이 잘 되리라 생각했는데, 그게 아니라 더 답답합니다 ㅠ

    • ingee 2010.01.28 01:25 신고  댓글주소  수정/삭제

      블로그 본문 중에 빌드로그가 첨부되어 있습니다. "빌드가 성공했다. 빌드하면서 생성한 buildlog.txt 파일을 첨부한다." 부근의 노트 아이콘을 클릭하면 다운 받으실 수 있습니다. 잘 해결되면 좋겠습니다.

  7. 정대리 2010.02.10 13:59 신고  댓글주소  수정/삭제  댓글쓰기

    얼마전에 주인장이 계신 회사에 입사한 정대리 입니다.

    저도 빌드를 시작했는데 이 페이지에 나오는 utypes.h 파일이 없다는 에러메시지가 뜨더군요.

    그래서 utypes.h가 존재 해야 하는 위치에 가서 확인을 해보니 파일이 존재하지 않았습니다.

    그래서 저 같은 경우에 cygwin에서 제공하는 /usr/include/unicode/utypes.h의 파일을 옮겨다가 하니까

    제대로 돌아가는 거 같습니다. 아직까지는....~~

    이 댓글이 도움이 되길 바랍니다..~~

    • ingee 2010.02.10 15:53 신고  댓글주소  수정/삭제

      정대리, 댓글 고마와요. 나 댓글에 민감해요. T_T

    • 깨돌이 2010.02.11 16:56 신고  댓글주소  수정/삭제

      새글
      윽 헤더파일은 찾게해뒀는데
      막 가져다써서그런지
      예기치않은 형식 에러와 선언되지않은 식별자오류가
      수두룩히 나네요ㅠㅠ

      주로 sched.h와 pthread.h파일에서 납니다

      혹시 주인장님 webkitlibraries/win/폴더를 공유해주실순 없는지요? ㅠㅠ


      원본
      졍말 감사합니당~ ㅠㅠ
      저두 환경변수 아무리 잘잡아도
      헤더파일들을 못찾더라구요
      폴더보니까 파일들이 없었어요 ㅠ
      cygwin걸 깔아보겠습니다 ㅠㅠ

  8. webkit 2010.06.28 10:47 신고  댓글주소  수정/삭제  댓글쓰기

    안녕하세요
    ingee님께서 작성하신 빌드절차를 보고 웹킷을 무사히(?) 빌드할 수 있게 되었습니다.
    이제 웹킷의 작동원리를 좀 알아보려고 비주얼스튜디오에서 웹킷을 디버깅해보려고 하는데요
    솔루션을 열고 디버그모드로 실행하면

    "Debugging information for 'Safari.exe' cannot be found or does not match. No symbols loaded."

    와 같은 메시지가 나옵니다.
    웹킷 홈페이지에서는 이런 문제가 발생했을때

    1) javascriptcore.dll, webkit.dll이 로드되면 걍 무시해도 되고
    2) 아니면 safari for windows의 심볼 서버를 등록하라고 하는데요

    저는 1)의 경우가 아니라서 홈페이지에서 안내하는대로 애플의 심볼 서버를 비주얼 스튜디오에 세팅했습니다

    그런데도 계속 같은 오류메시지가 나오네요 ㅠㅠ 어떻게 하면 될지 조언 좀 부탁드립니다.

    • ingee 2010.06.28 18:14 신고  댓글주소  수정/삭제

      님이 디버깅할 소스는 safari.exe의 소스가 아니라 webkit.dll의 소스입니다. 해당 메시지는 safari.exe에 디버깅 정보가 없다는 의미입니다. 웹킷 엔진을 분석할 때는 무시해도 전혀 지장 없는 메시지입니다. 작업에 진전 있기를 기원합니다.

    • webkit 2010.06.29 10:27 신고  댓글주소  수정/삭제

      아;; 그렇군요 무턱대고 나오는 에러메시지를 보고 자세히 알아보지도 않고 질문한 초보에게 이렇게 답변을 해주시고;; 정말 감사드립니다~~

    • ingee 2010.06.29 14:10 신고  댓글주소  수정/삭제

      여기 쥔장은 어떤 내용이든 댓글을 무지하게 좋아합니다. 자주 들러주세요.

  9. 감성 코드 2010.12.22 15:37 신고  댓글주소  수정/삭제  댓글쓰기

    댓글 좋아하신 다고 해서 그냥 하나 남기고 갑니다. ㅎㅎ

  10. shida 2011.01.05 16:01 신고  댓글주소  수정/삭제  댓글쓰기

    안녕하세요
    webkit 빌드 관련하여 도움을 많이 받았습니다.

    다름이 아니라 이전에는 정상적으로 디버깅이 되었는데 제가 이번에 다시 컴퓨터를 세팅하여 webkit 빌드 환경을 다시 구축 했습니다.

    정상적으로 빌드가 완료 되었는데 디버깅 심볼이 로드가 되질 않아 디버깅이 안되는군요
    심볼파일은 정상적으로 생성이 되었는데 safari 실행시 webkit.dll만 로드가 되고 해당 심볼을 로드 할수 없다고 나옵니다. 혹시 이런 증상에 대해 도움을 받을 수 있을까요?

    • ingee 2011.01.06 09:06 신고  댓글주소  수정/삭제

      안녕하세요. 쥔장이 도움 줄 수 있는 부분은 WebKit에 관한 짧은 경험의 영역 뿐입니다. 문의하신 문제는 제 경험 영역을 넘어섭니다. 잘 해결하시기를 기원합니다.

  11. WebKit newbie 2011.01.31 17:38 신고  댓글주소  수정/삭제  댓글쓰기

    안녕하세요~
    저도 WebKit 빌드 하면서 올려주신 글에 큰 도움을 받았습니다.

    구글링을 하다 보면 요 페이지로 많이들 오실텐데요~
    제가 겪은 문제의 해결 방법에 대한 Tip을 공유해 드립니다.

    빌드를 하면 component.h나 unicode.h가 없다고 나오면서 에러가 무쟈게 나오는데요..
    위 4번 'WebKitSupportLibrary.zip 다운로드 & 복사' 에 위치한 zip 파일이 스크립트로 잘 풀리지 않나 봅니다.
    수동으로 WebKitLibraries/win 아래 적절하게 압축을 풀어주고 하니 잘 빌드가 되네요.
    참고로 전 Windows7 을 사용합니다.

    저 이거 빌드 성공하는데만 한 3-4일 걸린 것 같습니다.. ^^;;
    중간중간 욱할때도 많았는데요.. 잘 인내하시면서 하나씩 풀어가시면 좋은 결과 얻으실겁니다~
    그럼 수고들하세요~~ ^^

    • ingee 2011.02.07 21:55 신고  댓글주소  수정/삭제

      귀한 경험 공유 감사합니다. 같은 고민을 하는 동지가 있다는 사실만으로도 큰 위안을 얻곤 합니다. 좋은 성취 이루시길 기원합니다.