3

I am building the Visual Studio Code from the source checked out from the git repository:

git clone https://github.com/microsoft/vscode 

I am building using:

export NODE_OPTIONS=--max_old_space_size=2048 
./scripts/npm.sh install  --arch=armhf 
./scripts/code.sh 

I am using node 10.16.3 on a Raspberry PI 4, using Raspbian buster

There were no errors during build.

The installation downloads a precompiled version of electron on the first run.

However each time I try and run code, it starts but with an error:

[storage state.vscdb] open(): Unable to open DB due to Error: Cannot find module '../build/Release/sqlite

If I look in node_modules/vscode-sqlite3/build/Release/

I can see:

sqlite3.a sqlite.a

It is unclear to me why electron/vscode cannot find this library. I would be greatful for any pointers on how to tell the runtime where to look for the modules.

nwaltham
  • 2,067
  • 1
  • 22
  • 40

1 Answers1

4

On inspecting the build scripts and after many painful experiments, I've found and solved the 2 problems leading to this error.

  1. The fact that .a static libraries are left behind hinted that some settings in the binding.gyp, config.gpy and/or makefiles are wrong, as Native Node Modules are normally dynamic libraries with an .node extension. One conditional line in the binding.gyp file under vscode-sqlite3 seems to the the culprit: ... ["target_arch=='arm'", {"type": "static_library"}] ...

Disable that line (by removing it or changing 'arm' to something else) and then run:

node-gyp configure

to regenerate the config.gpy file(s) under the build directory. Then build the module with:

node-gyp build

A sqlite.node will be generated in build/Release.

  1. Unfortunately, the latest electron ABI version rarely matches that of the Node.js version. In my configuration, the electron ABI version is 72 (v6.0.12) but the latest stable Node version is for ABI 64. Therefore we have to do an electron-rebuild to update the sqlite.node to match the electron version.

To do this, you would have to first install electron-rebuild (yarn add electron-rebuild) then run electron-rebuild by giving supplying explicitly the version number of the electron binary that vscode downloaded:

electron-rebuild -v 6.0.12 -m /home/dev/vscode -o vscode-sqlite3

Of course you would have to state the version number of your particular version of electron you are building for. (Please look up electron-rebuild --help for the meaning of the options. It takes a while to rebuild the binary module...)

The resulting sqlite.node can then be moved into the build/Release/. directory under the vscode project directory. Voila, we have a working latest version VS-Code for Raspbian!

Nibikibaba
  • 310
  • 2
  • 10
  • BTW - I need to run electron rebuild like this node_modules/.bin/electron-rebuild (then with your arguments) – nwaltham Oct 18 '19 at 15:55
  • I have stopped the overwrite with sudo chattr +i binding.gyp which is probably not the right way - but it does work. Thank you. I now have a working vs code too – nwaltham Oct 18 '19 at 16:10
  • Glad to know that you've got it too! Ideally the VS-code team should fix their build scripts to handle it properly. It's a shame that ARM targets are treated like 2nd class citizens like this. – Nibikibaba Oct 21 '19 at 15:32