v8 compilation
컴퓨터환경
- CPU : i3-2100 CPU@3.10GHz
- RAM : 8GB
- DISK : SATA3(6Gb/s), 7200RPM, 16MB
windows 에서 빌드
절차
- python 설치
- python 경로를 PATH 환경변수에 추가
- Visual Studio 설치(약 40분)
- Windows 10 SDK 설치
- depot_tools 설치
- path 설정
- gclient
- fetch v8(약 10분)
- 만약 update 한다면, gclient sync
- gn gen --ide=vs out/MyV8
python 2.7.15
python 을 설치하고 환경변수 PATH 에 path 를 추가하자.pip install pypiwin32
win32 module 을 third-party toolchain 에서 사용한다. 그래서 필요하다.Visual Studio 설치
windows 에서 v8 를 build 하려면 compiler 가 설치되어 있어야 한다. 여기서는 Visual Studio 2017 Community version 을 사용할 것이다.- 버전: Visual Studio 2017 (>=15.7.2) 또는 2019 (>=16.0.0) 가 필요[ref. 1]
vs_community.exe --add Microsoft.VisualStudio.Workload.NativeDesktop --add Microsoft.VisualStudio.Component.VC.ATLMFC --includeRecommended
Windows 10 SDK 설치 - Debugging Tools
version 10.0.17134 이상의 Windows 10 SDK 가 설치되어 있어야 한다.아래에서 setup 을 download 하고, "Debugging Tools for Windows" 를 선택하자.
그러면 아래 경로에서 .msi 를 찾을 수 있다. 이녀석을 실행해서 Debugging Tools 를 설치하자.
- 64bit용 : <Windows Kits>\10\WindowsSDK\Installers\X86 Debuggers And Tools-x64_en-us.msi
depot_tools
depot_tools 를 설치하자. 참고로 python 은 이미 설치되어 있었다.- depot_tools.zip 를 다운받아서 압축을 풀자. 여기서는 c:\v8\depot_tools\ 에 풀었다.
- 이 경로를 PATH 환경변수에 추가하자.
- DEPOT_TOOLS_WIN_TOOLCHAIN 변수를 설정하고, 0으로 set 하자. 0 으로 set 하면 이미설치된 Visual Studio 를 사용한다는 뜻이다.
- gclient 를 실행하자. metrics.cfg 를 만들어준다.
c:\v8\depot_tools\>gclient
windows defender 에 '제외'(exclusion) 추가
빌드 속도의 향상을 위해 v8 src directory 를 '제외' 항목에 추가하자. (참고)fetch v8
이 명령어로 checkout 을 하게 된다. 처음에 git source 를 받을 때 사용한다.> cd c:\v8\v8_chromium > fetch v8
참고로,
fetch chromium
은 desktop chromium 의 소스를 가져온다. 잘 못 알아서, fetch chromium 을 했는데, master 소스를 가져오는데에만 2시간 55분 정도 소요됐다. 그 후에 다른 관련 소스를 또 받아오는데 25분정도가 더 소요됐다.HDD는 최소 25GB 는 사용된 듯 하다. ref. 1 을 보면 build 에 최소 100GB 가 필요하다고 한다.
v8 은 그래서 아래 경로에 fetch 가 됐다. v8 source code 의 크기만 1.8GB 정도가 된다.
- c:\v8_chromium\src\v8
마지막으로 아래처럼 username 을 물어본다. 그냥 enter 를 치면, build 를 시도하다 실패한다.
Username for 'https://chrome-internal.googlesource.com': ________ running 'C:\Python27\python.exe v8/build/vs_toolchain.py update' in 'c:\v8\v8_engine' No downloadable toolchain found. In order to use your locally installed version of Visual Studio to build Chrome please set DEPOT_TOOLS_WIN_TOOLCHAIN=0. For details search for DEPOT_TOOLS_WIN_TOOLCHAIN in the instructions at https://chromium.googlesource.com/chromium/src/+/master/docs/windows_build_instructions.md Traceback (most recent call last): File "v8/build/vs_toolchain.py", line 502, in <module> sys.exit(main()) File "v8/build/vs_toolchain.py", line 498, in main return commands[sys.argv[1]](*sys.argv[2:]) File "v8/build/vs_toolchain.py", line 444, in Update subprocess.check_call(get_toolchain_args) File "C:\Python27\lib\subprocess.py", line 190, in check_call raise CalledProcessError(retcode, cmd) subprocess.CalledProcessError: Command '['C:\\Python27\\python.exe', 'c:\\v8\\v8_engine\\v8\\third_party\\depot_tools\\win_toolchain\\get_toolchain_if_necessary.py', '--output-json', 'c:\\v8\\v8_engine\\v8\\build\\win_toolchain.json', '3bc0ec615cf20ee342f3bc29bc991b5ad66d8d2c']' returned non-zero exit status 1 Error: Command 'C:\\Python27\\python.exe v8/build/vs_toolchain.py update' returned non-zero exit status 1 in c:\v8\v8_engine Hook ''C:\Python27\python.exe' v8/build/vs_toolchain.py update' took 601.97 secs Traceback (most recent call last): File "c:\v8\depot_tools\\fetch.py", line 306, in <module> sys.exit(main()) File "c:\v8\depot_tools\\fetch.py", line 301, in main return run(options, spec, root) File "c:\v8\depot_tools\\fetch.py", line 295, in run return checkout.init() File "c:\v8\depot_tools\\fetch.py", line 137, in init self.run_gclient(*sync_cmd) File "c:\v8\depot_tools\\fetch.py", line 82, in run_gclient return self.run(cmd_prefix + cmd, **kwargs) File "c:\v8\depot_tools\\fetch.py", line 71, in run subprocess.check_call(cmd, **kwargs) File "C:\Python27\lib\subprocess.py", line 190, in check_call raise CalledProcessError(retcode, cmd) subprocess.CalledProcessError: Command '('C:\\Python27\\python.exe', 'c:\\v8\\depot_tools\\gclient.py', 'sync', '--with_branch_heads')' returned non-zero exit status 2 c:\v8\v8_engine>
gclient sync
추후에 source 를 최신으로 update 할 때 사용하면 된다.c:\v8\v8_engine\v8>gclient sync Syncing projects: 100% (24/24), done. Running hooks: 75% (21/28) clang ________ running 'C:\Python27\python.exe v8/tools/clang/scripts/update.py' in 'c:\v8\v8_engine' Downloading https://commondatastorage.googleapis.com/chromium-browser-clang/Win/clang-349417-2.tgz .......... Done. Copying C:\Program Files (x86)/Microsoft Visual Studio/2017/Community\DIA SDK\bin\amd64\msdia140.dll to c:\v8\v8_engine\v8\third_party\llvm-build\Release+Asserts\bin Hook ''C:\Python27\python.exe' v8/tools/clang/scripts/update.py' took 19.46 secs Running hooks: 100% (28/28), done. c:\v8\v8_engine\v8>
gn gen --ide=vs out/MyV8
chromium 은 ninja 를 사용한다. depot_tools 를 설치하면 같이 설치된다. gn 을 실행하면 .ninja 를 만들어준다. (자세한 내용은 여기 를 참고하자.)여기서는 Visual Studio 에서 build 를 할 것이라서 --ide=vs 를 추가해 줬다.
c:\v8\v8_engine\v8>gn gen --ide=vs out\MyV8 Generating Visual Studio projects took 277ms Done. Made 132 targets from 76 files in 9360ms c:\v8\v8_engine\v8>
이제 아래 경로에 .sln file 이 생성됐다.
- c:\v8\v8_engine\v8\out\MyV8\all.sln
gn gen --ide=vs --filters=//third_party/v8/* --no-deps out\Default
open .sln(약 60분)
이제 위에서 생성된 all.sln 파일을 더블클릭해서 Visual Studio 를 열자. 그리고 build 를 하면 된다. build 를 하면 내부적으로 ninja 를 호출해서 build 를 하게 된다.여기서는 v8_hello_world 를 build 했다. 대략 60분 정도가 소요됐다.
error case : visual studio 2015 --> visual studio 2017
v8 build 를 위해서 visual studio 의 version 을 upgrade 한 경우는 stdio.h 등의 header files 가 include 가 안되는 경우가 있다. 이때는 Windows SDK 버전을 재설정 해주자.- Project > Property > General > Windows SDK 버전을 재설정해주면 된다.
- Cannot open include file: 'stdio.h' - Visual Studio Community 2017 - C++ Error - Stack Overflow
v8_hello_world.exe 실행
이제 아래 path 에 v8_hello_world.exe 가 생성됐다. 이 녀석을 실행하면 아래처럼 결과가 나온다.c:\a\programming\v8\v8_engine\v8\out\MyV8>v8_hello_world.exe Hello, World! 3 + 4 = 7
댓글 없음:
댓글 쓰기