## **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**

- Có thể tạo 1 file Javascript để thực thi bởi **d8**

## Các infrastructure trong source V8

- **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
```