구글 광고


MinGW로 V8 빌드하기

일단 기본적인 V8 빌드 방법은 다음을 참고할 것.

How to Download and Build V8

Building on Windows

SVN을 통해 소스 다운 받기

V8은 윈도우 환경에서는 기본적으로 Visual C++을 통해 빌드되도록 설정되어있다.
이걸 MinGW로 빌드해본다.



1. scons에서 컴파일러 우선순위 바꾸기

기본적으로 gcc에서 빌드하려면 scons에서 toolchain=gcc 옵션을 주면 된다.
Visual C++가 깔려있지 않고, MinGW만 깔려있는 컴퓨터에선 이렇게만 하면 빌드가 된다고 한다.
하지만 Visual C++가 깔려 있을 경우 위의 옵션을 주어도 자꾸 Visual C++로 컴파일을 시도하는데, 이는 scons에서 Visual C++가 우선순위가 높게 설정되어 있기 때문이다.

C:\Python-directory\Lib\site-packages\scons-x.x.x\SCons\Script\__init__.py 혹은
C:\Python-directory\Lib\site-packages\scons-x.x.x\SCons\Tool\__init__.py 을 고치면 되는데
이는 SCons 버전에 따라 다른 것 같으니 알아서 잘 찾도록.

저 파일을 텍스트 편집기로 열어보면 다음과 같은 내용이 있을 것이다.

linkers = ['mslink', 'gnulink', 'ilink', 'linkloc', 'ilink32' ]
c_compilers = ['msvc', 'mingw', 'gcc', 'intelc', 'icl', 'icc', 'cc', 'bcc32' ]
cxx_compilers = ['msvc', 'intelc', 'icc', 'g++', 'c++', 'bcc32' ]

여기서 각각 gnulink와 gcc, g++을 맨 앞으로 가져와서 우선순위를 최상위로 설정한다.

linkers = ['gnulink', 'mslink', 'ilink', 'linkloc', 'ilink32' ]
c_compilers = ['mingw', 'gcc', 'msvc', 'intelc', 'icl', 'icc', 'cc', 'bcc32' ]
cxx_compilers = ['g++', 'msvc', 'intelc', 'icc', 'c++', 'bcc32' ]

일단 이렇게 하면 scons 실행 시 gcc로 컴파일을 시도하긴 한다.
(물론 MinGW의 bin 폴더가 PATH 환경변수에 설정되어 있어야 한다.)



2. warning 제거

이 상태로 컴파일을 시도하면 다음과 같은 warning이 뜰 것이다.

warning: visibility attribute not supported in this configuration; ignored

이게 뭔지에 대한

암튼 그냥 무시해줘도 되는 warning인데, -Werror 옵션 때문에 무시하고 넘어갈 수가 없다.
그렇다면? -Werror 옵션을 제거해준다. -_-
어차피 V8은 구글이 리눅스(안드로이드)에서 컴파일해서 잘 사용하고 있기 때문에 warning 정도 무시해도 잘 돌아갈거라고 믿고..

v8/SConstruct 를 텍스트 편집기로 열어서

  'gcc': {
'all': {
'WARNINGFLAGS': ['-Wall',
'-Werror',
'-W',
'-Wno-unused-parameter',
'-Wnon-virtual-dtor']
},

이렇게 되어 있는 곳의 '-Werror' 라인을 지워준다.



3. error 제거

이렇게 하다 보면 에러가 하나 뜬다.
그거슨 대략 MemoryBarrier를 찾을 수 없다는 에러다.

MinGW/Include/winnt.h 를 열어서, 수많은 #ifdef 블럭들을 피하여 적절한 위치에 다음을 추가해준다.

#ifdef _X86_
__CRT_INLINE VOID MemoryBarrier(VOID)
{
LONG Barrier = 0;
__asm__ __volatile__("xchgl %%eax,%0 "
:"=r" (Barrier));
}
#endif

이는 x64 컴파일 시엔 쓸 수가 없는 코드인데, x64 컴파일은 알아서 하면 된다. ㅎ_ㅎ



4. 최적화 옵션 변경

gcc엔 최적화 레벨이 0, 1, 2, 3 이 있다.
v8은 컴파일 시 기본적으로 최적화 레벨이 최대 값인 3으로 설정되어 있는데
해보니 MinGW에서 레벨 2, 3으로 컴파일하면 라이브러리 자체가 제대로 동작하지 않았다.
따라서 최적화 레벨을 1로 바꾸어주어야 한다.

v8/SConstruct 에서 -O3 를 찾아서 -O1 으로 바꿔준다.



5. 컴파일

이렇게 하고 scons를 돌리면 무수한 warning들이 뜬 후 컴파일이 된다.


ㅇㅋ




잘 된다.

트랙백

이 글과 관련된 글 쓰기 (트랙백 보내기)
TrackbackURL : http://suckgamoni.egloos.com/tb/1452 [도움말]

덧글

댓글 입력 영역