|
@@ -10,6 +10,11 @@ years ago, since Node.js requires such an old version.
|
|
This means that you usually need to compile v8 on your own before
|
|
This means that you usually need to compile v8 on your own before
|
|
you can start to compile & install v8js itself.
|
|
you can start to compile & install v8js itself.
|
|
|
|
|
|
|
|
+It is recommended to install the V8 version for V8Js off your system's
|
|
|
|
+load path, so it doesn't interfere with the V8 library shipped with your
|
|
|
|
+system's distribution.
|
|
|
|
+
|
|
|
|
+
|
|
Snapshots
|
|
Snapshots
|
|
---------
|
|
---------
|
|
|
|
|
|
@@ -24,10 +29,47 @@ so there's no need to handle them specially.
|
|
Besides there are external snapshots (which are enabled unless configured
|
|
Besides there are external snapshots (which are enabled unless configured
|
|
otherwise). If V8 is compiled with these, then V8Js needs to provide two
|
|
otherwise). If V8 is compiled with these, then V8Js needs to provide two
|
|
"binary blobs" to V8, named `natives_blob.bin` and `snapshot_blob.bin`.
|
|
"binary blobs" to V8, named `natives_blob.bin` and `snapshot_blob.bin`.
|
|
-In that case copy those two files to `/usr/share/v8/...`.
|
|
|
|
|
|
+In that case copy those two files to the same directory `libv8.so` was
|
|
|
|
+installed to.
|
|
|
|
|
|
-Compile latest V8
|
|
|
|
------------------
|
|
|
|
|
|
+
|
|
|
|
+Compile V8 5.6 and newer (using GN)
|
|
|
|
+-----------------------------------
|
|
|
|
+
|
|
|
|
+```
|
|
|
|
+# Install required dependencies
|
|
|
|
+sudo apt-get install build-essential git python libglib2.0-dev
|
|
|
|
+
|
|
|
|
+cd /tmp
|
|
|
|
+
|
|
|
|
+# Install depot_tools first (needed for source checkout)
|
|
|
|
+git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git
|
|
|
|
+export PATH=`pwd`/depot_tools:"$PATH"
|
|
|
|
+
|
|
|
|
+# Download v8
|
|
|
|
+fetch v8
|
|
|
|
+cd v8
|
|
|
|
+
|
|
|
|
+# (optional) If you'd like to build a certain version:
|
|
|
|
+git checkout 5.6.326.12
|
|
|
|
+gclient sync
|
|
|
|
+
|
|
|
|
+# Setup GN
|
|
|
|
+tools/dev/v8gen.py -vv x64.release
|
|
|
|
+echo is_component_build = true >> out.gn/x64.release/args.gn
|
|
|
|
+
|
|
|
|
+# Build
|
|
|
|
+ninja -C out.gn/x64.release/
|
|
|
|
+
|
|
|
|
+# Install to /opt/v8/
|
|
|
|
+sudo mkdir -p /opt/v8/{lib,include}
|
|
|
|
+sudo cp out.gn/x64.release/lib*.so out.gn/x64.release/*_blob.bin /opt/v8/lib/
|
|
|
|
+sudo cp -R include/* /opt/v8/include/
|
|
|
|
+```
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+Compile V8 versions 5.5 and older (using Gyp)
|
|
|
|
+---------------------------------------------
|
|
|
|
|
|
|
|
|
|
```
|
|
```
|
|
@@ -60,25 +102,21 @@ export GYPFLAGS="${GYPFLAGS} -Dlinux_use_bundled_gold=0"
|
|
# Compile V8 (using up to 8 CPU cores, requires a lot of RAM, adapt as needed)
|
|
# Compile V8 (using up to 8 CPU cores, requires a lot of RAM, adapt as needed)
|
|
make native library=shared snapshot=on -j8
|
|
make native library=shared snapshot=on -j8
|
|
|
|
|
|
-# Install to /usr
|
|
|
|
-sudo mkdir -p /usr/lib /usr/include
|
|
|
|
-sudo cp out/native/lib.target/lib*.so /usr/lib/
|
|
|
|
-sudo cp -R include/* /usr/include
|
|
|
|
|
|
+# Install to /opt/v8
|
|
|
|
+sudo mkdir -p /opt/v8/{lib,include}
|
|
|
|
+sudo cp out/native/lib.target/lib*.so /opt/v8/lib/
|
|
|
|
+sudo cp -R include/* /opt/v8/include
|
|
|
|
|
|
# Fix libv8.so's RUNPATH header
|
|
# Fix libv8.so's RUNPATH header
|
|
-sudo chrpath -r '$ORIGIN' /usr/lib/libv8.so
|
|
|
|
|
|
+sudo chrpath -r '$ORIGIN' /opt/v8/lib/libv8.so
|
|
|
|
|
|
# Install libv8_libplatform.a (V8 >= 5.2.51)
|
|
# Install libv8_libplatform.a (V8 >= 5.2.51)
|
|
-echo -e "create /usr/lib/libv8_libplatform.a\naddlib out/native/obj.target/src/libv8_libplatform.a\nsave\nend" | sudo ar -M
|
|
|
|
|
|
+echo -e "create /opt/v8/lib/libv8_libplatform.a\naddlib out/native/obj.target/src/libv8_libplatform.a\nsave\nend" | sudo ar -M
|
|
|
|
|
|
# ... same for V8 < 5.2.51, libv8_libplatform.a is built in tools/gyp directory
|
|
# ... same for V8 < 5.2.51, libv8_libplatform.a is built in tools/gyp directory
|
|
-echo -e "create /usr/lib/libv8_libplatform.a\naddlib out/native/obj.target/tools/gyp/libv8_libplatform.a\nsave\nend" | sudo ar -M
|
|
|
|
|
|
+echo -e "create /opt/v8/lib/libv8_libplatform.a\naddlib out/native/obj.target/tools/gyp/libv8_libplatform.a\nsave\nend" | sudo ar -M
|
|
```
|
|
```
|
|
|
|
|
|
-* If you don't want to overwrite the system copy of v8, replace `/usr` in
|
|
|
|
- the above commands with some other path like `/opt/v8` and then add
|
|
|
|
- `--with-v8js=/opt/v8` to the php-v8js `./configure` command below.
|
|
|
|
-
|
|
|
|
`libv8_libplatform.a` should not be copied directly since it's a thin
|
|
`libv8_libplatform.a` should not be copied directly since it's a thin
|
|
archive, i.e. it contains only pointers to the build objects, which
|
|
archive, i.e. it contains only pointers to the build objects, which
|
|
otherwise must not be deleted. The simple mri-script converts the
|
|
otherwise must not be deleted. The simple mri-script converts the
|
|
@@ -93,7 +131,7 @@ cd /tmp
|
|
git clone https://github.com/phpv8/v8js.git
|
|
git clone https://github.com/phpv8/v8js.git
|
|
cd v8js
|
|
cd v8js
|
|
phpize
|
|
phpize
|
|
-./configure
|
|
|
|
|
|
+./configure --with-v8js=/opt/v8
|
|
make
|
|
make
|
|
make test
|
|
make test
|
|
sudo make install
|
|
sudo make install
|