I want to build old version of v8, what now?
Written by Minh Tran
2 minute read
Một ngày đẹp trời nào đó, bạn muốn build bản cũ của v8 engine để làm theo mấy hướng dẫn exploit chẳng hạn. Nhưng khi làm theo hướng dẫn thì lại thấy lỗi như thế này.
1
2
Error at //gni/v8.gni:193:3: Dependency not allowed.
source_set(target_name){ ...
Đại khái là không hiểu lắm, nhưng mà nếu pull bản mới nhất về thì vẫn build được :( chs.
Những lỗi về compiling như vậy tìm trên Google khá là khó, và không được trả lời rõ ràng. Không chỉ có v8, mà khá nhiều dự án mã nguồn mở cũng như vậy, ví dụ như WebKit/JavascriptCore. Vậy giờ sao?
Về cơ bản, mỗi project của google đều được cập nhật qua depot_tool/gclient
và đều được cập nhật cùng nhau. Nếu muốn build chromium
từ source với v8
từ source, version của chromium
phải match với version v8
.
Gclient
ngoài việc pull code về qua mỗi bản cập nhật thì còn quản lý submodule
. Version của các submodule không giống với build profile thì cũng không build được.
Lướt qua internet với từ khóa Building old revisions
, mình tìm được bài này. Vậy nên ở đây mình dịch ra tiếng Việt cho dễ đọc.
Giả sử trên source v8
bạn đã checkout branch hoặc commit cần build rồi. Bạn cần chuyển gclient
về thời điểm đó.
1
2
3
4
5
6
# Lấy thời điểm của phiên bản đã checkout:
~/v8/src $ COMMIT_DATE=$(git log -n 1 --pretty=format:%ci)
# Checkout phiên bản của depot_tools qua thời điểm đó:
~/depot_tools $ git checkout $(git rev-list -n 1 --before="$COMMIT_DATE" master)
~/depot_tools $ export DEPOT_TOOLS_UPDATE=0
Do gclient
hay commit mới có thể thêm một vài file khác, bạn cần clean repo của v8
1
~/v8/src $ git clean -ffd
Kiểm tra lại phiên bản của các submodule
trùng khớp trên gclient
1
~/v8/src $ gclient sync -D --force --reset
Cuối cùng, bạn build lại như bình thường. Vậy là được!
If you find any bugs or problems on this blog, please open an issue over on Github.
GithubFeel free to contact me via email minhtt159[at]teamkhunglong.com or facebook messages
Facebook