## **V8 là gì?** - V8 là một Javascript enginee mã nguồn mở và được viết bằng **C++**, được phát triển bởi *Chromium Project* cho trình duyệt web *Google Chrome* và *Chromium* - V8 biên dịch Javascript trực tiếp sang mã máy ## Build source V8 - Sau gần 2 ngày setup trên wsl bị lỗi và chưa tìm được nguyên nhân thì chuyển sang setup source V8 trên VM ubuntu - Cách bước build source v8: - Cài đặt **depot tools**, nó là công cụ hỗ trợ cài đặt v8 ``` git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git ``` - Thêm biến môi trường **depot tools** vào **PATH** ``` export PATH=$PATH:/path/to/depot_tools``` - Clone mã nguồn của V8 từ kho lưu trữ ``` fetch v8 ``` - Đồng bộ tất cả bản dựng ``` cd v8 gclient sync ``` - Lần lượt chạy 2 lệnh để build ``` ./build/install-build-deps.sh tools/dev/gm.py x64.release ``` - Sau khi build xong ta có thể sử dụng **d8** trong ***out/x64.release/d8*** để thực thi mã **javascript** ![image](https://hackmd.io/_uploads/H17H0AAy0.png) - Có thể tạo 1 file Javascript để thực thi bởi **d8** ![image](https://hackmd.io/_uploads/ry0kkkkl0.png) ## Các infrastructure trong source V8 ![image](https://hackmd.io/_uploads/HyplNJ1g0.png) - **src** : là thư mục chứa mã nguồn **C++** chính của V8 - **include** : thư mục này chứa các tệp tiêu đề của c++, dùng để tích hợp v8 với các ứng dụng - **docs** : thư mục chứa url nguồn tài liệu của V8 - **test** : thư mục để kiểm tra v8 hoạt động đúng - **third_party** : chứa các thư viện từ bên thứ ba mà V8 - **build_overrides** : Chứa các tùy chỉnh cho quá trình build - **samples** : Mẫu mã nguồn để minh họa cách sử dụng V8 - **tools** : là công cụ hỗ trợ phát triển - **infra** : chứa các cơ sở hạ tầng và cấu hình cho việc build và test - **libplatform** : chứa các lớp trừu tượng cho các hoạt động của nền tảng như quản lý luồng, công việc nền, ... ```...``` ## Build V8 bằng Docker - Tạo một file có tên là *dockerfile* ```dockerfile FROM ubuntu:22.04 # Cài đặt môi trường không tương tác ENV DEBIAN_FRONTEND=noninteractive RUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections RUN apt update && apt upgrade -y && apt install -y \ git \ python3 \ sudo \ lsb-core \ lbzip2 \ xz-utils \ wget \ curl \ netcat WORKDIR /home/docker RUN git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git ENV PATH="/home/docker/depot_tools:${PATH}" WORKDIR /home/docker RUN fetch v8 WORKDIR /home/docker/v8 RUN gclient sync RUN echo y | /home/docker/v8/build/install-build-deps.sh RUN tools/dev/gm.py x64.release CMD ["./out/x64.release/d8"] ``` - Để build image dockerfile ta thực hiện lệnh ``` sudo docker build -t dockerfile . ``` > Option *-t* là *tag* dùng để gán image đang build thành tên tùy chọn - Sau khi build image xong ta liệt kê các image đã lưu để có thể biết được image vừa build có thành công không ``` sudo docker images ```