What is plv8
see:
Building V8
I have done this by cross compiling.
You have to do following steps on Linux box(x86_64).
Installing depot_tools
cd ~ mkdir -p local/src cd local mkdir build cd build git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git export PATH=$PATH:~/local/depot_tools
fetching v8 source
cd src fetch v8 cd v8 git checkout 6.4.388.40
6.4.388.40 : plv8-2.3.0 uses this version.
You may add follwing line to ../.gclient .
target_os = ['unix']
then, you call gclient sync.
gclient sync
Cross compileing for Raspberry Pi
tools/dev/v8gen.py arm.release -- \ is_component_build=false v8_static_library=true v8_use_snapshot=true \ v8_use_external_startup_data=false v8_enable_i18n_support=false
gn args out.gn/arm.release
then,edit parameters following:
is_debug = false target_cpu = "arm" v8_target_cpu = "arm" # Additional command-line args: is_component_build=false v8_static_library=true v8_use_snapshot=true v8_use_external_startup_data=false v8_enable_i18n_support=false
building d8 and libv8*.a
ninja -C out.gn/arm.release d8
When your build success,you'll have these files.
ls out.gn/arm.release/libv8*.a libv8_base.a libv8_libbase.a libv8_libplatform.a libv8_libsampler.a libv8_snapshot.a
Copying files to raspberry pi
ssh pi@raspberrry.local mkdir $HOME/local/v8 scp out.gn/arm.release/libv8*.a pi@raspberrypi.local:/home/pi/local/v8 scp include pi@raspberrypi.local:/home/pi/local/v8
after this step,you may work on your raspberry pi.
Installing libc++
before build plv8,you'll need libc++.
sudo apt install libc++-dev libunwind-dev
Installing PostgreSQL
Of course you'll need PostgreSQL.Because plv8 is an extension of the PostgreSQL.
sudo apt install postgresql-server-dev-9.6 postgresql-9.6
Building plv8 itself on Raspberry Pi
mkdir -p ~/local/src cd ~/local/src curl https://github.com/plv8/plv8/archive/v2.3.0.zip unzip v2.3.0.zip cd plv8-2.3.0
copy v8 headers and libraries to plv8's source tree
mkdir -p build/v8/out.gn/x64.release/obj cp -r ~/local/v8/include build/v8 cp ~/local/v8/lib*a build/v8/out.gn/x64.release/obj
Edit Makefile
Now, you have built v8 libraries.you don't need build v8 again.
So, you can edit Makefile following:
AUTOV8_DIR = build/v8 AUTOV8_OUT = build/v8/out.gn/x64.release/obj - AUTOV8_DEPOT_TOOLS = build/depot_tools AUTOV8_LIB = $(AUTOV8_OUT)/libv8_snapshot.a AUTOV8_STATIC_LIBS = -lv8_base -lv8_snapshot -lv8_libplatform -lv8_libbase -lv8_libsampler - export PATH := $(abspath $(AUTOV8_DEPOT_TOOLS)):$(PATH) SHLIB_LINK += -L$(AUTOV8_OUT) -L$(AUTOV8_OUT)/third_party/icu $(AUTOV8_STATIC_LIBS) -- V8_OPTIONS = is_component_build=false v8_static_library=true v8_use_snapshot=true v8_use_external_startup_data=false - ifndef USE_ICU - V8_OPTIONS += v8_enable_i18n_support=false - endif - all: v8 # For some reason, this solves parallel make dependency. - plv8_config.h plv8.so: v8 - $(AUTOV8_DEPOT_TOOLS): - mkdir -p build - cd build; git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git - $(AUTOV8_DIR): $(AUTOV8_DEPOT_TOOLS) - cd build; fetch v8; cd v8; git checkout $(AUTOV8_VERSION); gclient sync ; tools/dev/v8gen.py x64.release -- $(V8_OPTIONS) - $(AUTOV8_OUT)/third_party/icu/common/icudtb.dat: - $(AUTOV8_OUT)/third_party/icu/common/icudtl.dat: - v8: $(AUTOV8_DIR) - cd $(AUTOV8_DIR) ; env CXXFLAGS=-fPIC CFLAGS=-fPIC ninja -C out.gn/x64.release d8 include Makefile.shared CCFLAGS += -I$(AUTOV8_DIR)/include -I$(AUTOV8_DIR) # We're gonna build static link. Rip it out after include Makefile SHLIB_LINK := $(filter-out -lv8, $(SHLIB_LINK)) ifeq ($(OS),Windows_NT) # noop for now else SHLIB_LINK += -L$(AUTOV8_OUT) UNAME_S := $(shell uname -s) ifeq ($(UNAME_S),Darwin) CCFLAGS += -stdlib=libc++ -std=c++11 SHLIB_LINK += -stdlib=libc++ endif ifeq ($(UNAME_S),Linux) CCFLAGS += -std=c++11 - SHLIB_LINK += -lrt -std=c++11 -lc++ + SHLIB_LINK += -lrt -std=c++11 -lc++ -lunwind endif endif
Building plv8
make
Installing postgres extension
sudo make install
run
sudo su - postgres psql
CREATE EXTENSION plv8; SELECT plv8_version();
Top comments (0)