从源代码构建 V8

Building V8 from source

最近我尝试在 documentation, in order to use d8 本地的帮助下使用 gm 从源代码构建 V8 JavaScript 引擎;但是当我 运行 gm x64.release 命令时,它会引发以下异常。

# mkdir -p out/x64.release
# echo > out/x64.release/args.gn << EOF
is_component_build = false
is_debug = false
target_cpu = "x64"
use_goma = false
goma_dir = "None"
v8_enable_backtrace = true
v8_enable_disassembler = true
v8_enable_object_print = true
v8_enable_verify_heap = true
EOF
# gn gen out/x64.release
Done. Made 144 targets from 87 files in 443ms
# autoninja -C out/x64.release d8
b'\x1b[31m[E2020-03-07T11:11:53.973835+03:30 10007 0 annotate.go:241]\x1b[0m original error: no such package\r\n\x1b[31m[E2020-03-07T11:11:53.973974+03:30 10007 0 annotate.go:241]\x1b[0m \r\n\x1b[31m[E2020-03-07T11:11:53.974037+03:30 10007 0 annotate.go:241]\x1b[0m goroutine 28:\r\n'b'\x1b[31m[E2020-03-07T11:11:53.974094+03:30 10007 0 annotate.go:241]\x1b[0m #0 go.chromium.org/luci/cipd/client/cipd/client.go:1690 - cipd.(*clientImpl).humanErr()\r\n\x1b[31m[E2020-03-07T11:11:53.974155+03:30 10007 0 annotate.go:241]\x1b[0m #1 go.chromium.org/luci/cipd/client/cipd/client.go:744 - cipd.(*clientImpl).ResolveVersion()\r\n\x1b[31m[E2020-03-07T11:11:53.974226+03:30 10007 0 annotate.go:241]\x1b[0m #2 go.chromium.org/luci/cipd/client/cipd/resolver.go:176 - cipd.(*Resolver).resolveVersion.func1()\r\n\x1b[31m[E2020-03-07T11:1'b'1:53.974284+03:30 10007 0 annotate.go:241]\x1b[0m #3 go.chromium.org/luci/common/sync/promise/promise.go:84 - promise.(*Promise).runGen()\r\n\x1b[31m[E2020-03-07T11:11:53.974339+03:30 10007 0 annotate.go:241]\x1b[0m #4 runtime/asm_amd64.s:1357 - runtime.goexit()\r\n\x1b[31m[E2020-03-07T11:11:53.974416+03:30 10007 0 annotate.go:241]\x1b[0m \r\n\x1b[31m[E2020-03-07T11:11:53.974463+03:30 10007 0 annotate.go:241]\x1b[0m goroutine 27:\r\n\x1b[31m[E2020-03-07T11:11:53.974520+03:30 10007 0 annotate.go:241]\x1b[0m From frame 0 to 0, the following wr'b'appers were found:\r\n\x1b[31m[E2020-03-07T11:11:53.974571+03:30 10007 0 annotate.go:241]\x1b[0m   internal reason: MultiError 1/1: following first non-nil error.\r\n\x1b[31m[E2020-03-07T11:11:53.974626+03:30 10007 0 annotate.go:241]\x1b[0m \r\n'b'\x1b[31m[E2020-03-07T11:11:53.974678+03:30 10007 0 annotate.go:241]\x1b[0m #0 go.chromium.org/luci/cipd/client/cipd/ensure/file.go:255 - ensure.(*File).Resolve.func1.1()\r\n'b'\x1b[31m[E2020-03-07T11:11:53.974732+03:30 10007 0 annotate.go:241]\x1b[0m   reason: failed to resolve infra/python/wheels/psutil/linux-amd64_cp32_abi3@version:5.6.2 (line 0)\r\n'b'\x1b[31m[E2020-03-07T11:11:53.974787+03:30 10007 0 annotate.go:241]\x1b[0m \r\n\x1b[31m[E2020-03-07T11:11:53.974840+03:30 10007 0 annotate.go:241]\x1b[0m #1 go.chromium.org/luci/common/sync/parallel/runner.go:51 - parallel.(*WorkItem).execute()\r\n'b'\x1b[31m[E2020-03-07T11:11:53.974894+03:30 10007 0 annotate.go:241]\x1b[0m #2 go.chromium.org/luci/common/sync/parallel/runner.go:149 - parallel.(*Runner).dispatchLoopBody.func2()\r\n'b'\x1b[31m[E2020-03-07T11:11:53.974975+03:30 10007 0 annotate.go:241]\x1b[0m #3 runtime/asm_amd64.s:1357 - runtime.goexit()\r\n'b'\x1b[31m[E2020-03-07T11:11:53.975032+03:30 10007 0 annotate.go:241]\x1b[0m \r\n'b'\x1b[31m[E2020-03-07T11:11:53.975083+03:30 10007 0 annotate.go:241]\x1b[0m goroutine 1:\r\n'b'\x1b[31m[E2020-03-07T11:11:53.975134+03:30 10007 0 annotate.go:241]\x1b[0m #0 go.chromium.org/luci/vpython/venv/config.go:183 - venv.(*Config).makeEnv()\r\n'b'\x1b[31m[E2020-03-07T11:11:53.975188+03:30 10007 0 annotate.go:241]\x1b[0m   reason: failed to resolve packages\r\n'b'\x1b[31m[E2020-03-07T11:11:53.975250+03:30 10007 0 annotate.go:241]\x1b[0m \r\n'b'\x1b[31m[E2020-03-07T11:11:53.975305+03:30 10007 0 annotate.go:241]\x1b[0m #1 go.chromium.org/luci/vpython/venv/venv.go:163 - venv.With()\r\n'b'\x1b[31m[E2020-03-07T11:11:53.975364+03:30 10007 0 annotate.go:241]\x1b[0m #2 go.chromium.org/luci/vpython/run.go:62 - vpython.Run()\r\n'b'\x1b[31m[E2020-03-07T11:11:53.975416+03:30 10007 0 annotate.go:241]\x1b[0m #3 go.chromium.org/luci/vpython/application/application.go:320 - application.(*application).mainImpl()\r\n'b'\x1b[31m[E2020-03-07T11:11:53.975470+03:30 10007 0 annotate.go:241]\x1b[0m #4 go.chromium.org/luci/vpython/application/application.go:406 - application.(*Config).Main.func1()\r\n'b'\x1b[31m[E2020-03-07T11:11:53.975522+03:30 10007 0 annotate.go:241]\x1b[0m #5 go.chromium.org/luci/vpython/application/support.go:46 - application.run()\r\n'b'\x1b[31m[E2020-03-07T11:11:53.975762+03:30 10007 0 annotate.go:241]\x1b[0m #6 go.chromium.org/luci/vpython/application/application.go:405 - application.(*Config).Main()\r\n'b'\x1b[31m[E2020-03-07T11:11:53.975834+03:30 10007 0 annotate.go:241]\x1b[0m #7 vpython/main.go:106 - main.mainImpl()\r\n\x1b[31m[E2020-03-07T11:11:53.975884+03:30 10007 0 annotate.go:241]\x1b[0m #8 vpython/main.go:112 - main.main()\r\n'b'\x1b[31m[E2020-03-07T11:11:53.975937+03:30 10007 0 annotate.go:241]\x1b[0m #9 runtime/proc.go:203 - runtime.main()\r\n'b'\x1b[31m[E2020-03-07T11:11:53.975997+03:30 10007 0 annotate.go:241]\x1b[0m #10 runtime/asm_amd64.s:1357 - runtime.goexit()\r\n'Traceback (most recent call last):
  File "tools/dev/gm.py", line 420, in <module>
    sys.exit(Main(sys.argv))
  File "tools/dev/gm.py", line 409, in Main
    return_code += configs[c].Build()
  File "tools/dev/gm.py", line 282, in Build
    (path, targets))
  File "tools/dev/gm.py", line 190, in _CallWithOutput
    return p.returncode, "".join(output)
TypeError: sequence item 0: expected str instance, bytes found

值得一提的是,我使用 Ubuntu 18.04 作为我的操作系统。不知道是什么问题,怎么解决!

如有任何回应,我们将不胜感激...

编辑:当我运行命令使用python2(我的意思是python2 tools/dev/gm.py x64.release)时,它会导致一些其他问题,如下所示

# autoninja -C out/x64.release d8
[E2020-03-08T06:20:51.767248+03:30 14549 0 annotate.go:241] original error: no such package
[E2020-03-08T06:20:51.767304+03:30 14549 0 annotate.go:241] 
[E2020-03-08T06:20:51.767335+03:30 14549 0 annotate.go:241] goroutine 50:
[E2020-03-08T06:20:51.767361+03:30 14549 0 annotate.go:241] #0 go.chromium.org/luci/cipd/client/cipd/client.go:1690 - cipd.(*clientImpl).humanErr()
[E2020-03-08T06:20:51.767395+03:30 14549 0 annotate.go:241] #1 go.chromium.org/luci/cipd/client/cipd/client.go:744 - cipd.(*clientImpl).ResolveVersion()
[E2020-03-08T06:20:51.767426+03:30 14549 0 annotate.go:241] #2 go.chromium.org/luci/cipd/client/cipd/resolver.go:176 - cipd.(*Resolver).resolveVersion.func1()
[E2020-03-08T06:20:51.767457+03:30 14549 0 annotate.go:241] #3 go.chromium.org/luci/common/sync/promise/promise.go:84 - promise.(*Promise).runGen()
[E2020-03-08T06:20:51.767488+03:30 14549 0 annotate.go:241] #4 runtime/asm_amd64.s:1357 - runtime.goexit()
[E2020-03-08T06:20:51.767517+03:30 14549 0 annotate.go:241] 
[E2020-03-08T06:20:51.767542+03:30 14549 0 annotate.go:241] goroutine 49:
[E2020-03-08T06:20:51.767569+03:30 14549 0 annotate.go:241] From frame 0 to 0, the following wrappers were found:
[E2020-03-08T06:20:51.767596+03:30 14549 0 annotate.go:241]   internal reason: MultiError 1/1: following first non-nil error.
[E2020-03-08T06:20:51.767624+03:30 14549 0 annotate.go:241] 
[E2020-03-08T06:20:51.767649+03:30 14549 0 annotate.go:241] #0 go.chromium.org/luci/cipd/client/cipd/ensure/file.go:255 - ensure.(*File).Resolve.func1.1()
[E2020-03-08T06:20:51.767680+03:30 14549 0 annotate.go:241]   reason: failed to resolve infra/python/wheels/psutil/linux-amd64_cp32_abi3@version:5.6.2 (line 0)
[E2020-03-08T06:20:51.767711+03:30 14549 0 annotate.go:241] 
[E2020-03-08T06:20:51.767736+03:30 14549 0 annotate.go:241] #1 go.chromium.org/luci/common/sync/parallel/runner.go:51 - parallel.(*WorkItem).execute()
[E2020-03-08T06:20:51.767767+03:30 14549 0 annotate.go:241] #2 go.chromium.org/luci/common/sync/parallel/runner.go:149 - parallel.(*Runner).dispatchLoopBody.func2()
[E2020-03-08T06:20:51.767795+03:30 14549 0 annotate.go:241] #3 runtime/asm_amd64.s:1357 - runtime.goexit()
[E2020-03-08T06:20:51.767821+03:30 14549 0 annotate.go:241] 
[E2020-03-08T06:20:51.767852+03:30 14549 0 annotate.go:241] goroutine 1:
[E2020-03-08T06:20:51.767884+03:30 14549 0 annotate.go:241] #0 go.chromium.org/luci/vpython/venv/config.go:183 - venv.(*Config).makeEnv()
[E2020-03-08T06:20:51.767918+03:30 14549 0 annotate.go:241]   reason: failed to resolve packages
[E2020-03-08T06:20:51.767947+03:30 14549 0 annotate.go:241] 
[E2020-03-08T06:20:51.767968+03:30 14549 0 annotate.go:241] #1 go.chromium.org/luci/vpython/venv/venv.go:163 - venv.With()
[E2020-03-08T06:20:51.767994+03:30 14549 0 annotate.go:241] #2 go.chromium.org/luci/vpython/run.go:62 - vpython.Run()
[E2020-03-08T06:20:51.768022+03:30 14549 0 annotate.go:241] #3 go.chromium.org/luci/vpython/application/application.go:320 - application.(*application).mainImpl()
[E2020-03-08T06:20:51.768047+03:30 14549 0 annotate.go:241] #4 go.chromium.org/luci/vpython/application/application.go:406 - application.(*Config).Main.func1()
[E2020-03-08T06:20:51.768074+03:30 14549 0 annotate.go:241] #5 go.chromium.org/luci/vpython/application/support.go:46 - application.run()
[E2020-03-08T06:20:51.768108+03:30 14549 0 annotate.go:241] #6 go.chromium.org/luci/vpython/application/application.go:405 - application.(*Config).Main()
[E2020-03-08T06:20:51.768147+03:30 14549 0 annotate.go:241] #7 vpython/main.go:106 - main.mainImpl()
[E2020-03-08T06:20:51.768176+03:30 14549 0 annotate.go:241] #8 vpython/main.go:112 - main.main()
[E2020-03-08T06:20:51.768207+03:30 14549 0 annotate.go:241] #9 runtime/proc.go:203 - runtime.main()
[E2020-03-08T06:20:51.768241+03:30 14549 0 annotate.go:241] #10 runtime/asm_amd64.s:1357 - runtime.goexit()

gm.py 需要一个小的修复来与 Python 兼容 3. 我有一个补丁在某个地方,但还没有开始着陆...

同时,您可以在 Python 2 中手动 运行 它:

python2 tools/dev/gm.py

如果你没有python2命令,那么你必须为你的发行版安装相应的包。

据我所知,构建 V8 与 Python 3 不兼容,当我尝试使用 Python 3 构建它时出现了很多问题。最后我更改了默认版本Python 在我的 OS (Ubuntu 18.04) 到 Python 2 并且它非常有效。

起初我设置 Python 2 作为 Python 的替代:

sudo update-alternatives --install /usr/bin/python python /usr/bin/python2 1

然后我使用以下命令选择 python2 作为 Python 的默认版本:

sudo update-alternatives --config python