Compiling.md 4.6 KB

Compiling LÖVR

Compiling the LÖVR code yourself lets you create a custom LÖVR build so you can add your own features or run it on other operating systems. Below is a guide for setting up all the dependencies and compiling the code on various types of systems.

Dependencies

LÖVR depends on the following libraries. They are included as submodules in the deps directory of the repository, so make sure you clone with the --recursive flag or run git submodule update --init in an existing repository.

  • Lua (5.1+) or LuaJIT (2.0+)
  • GLFW (3.2+)
  • OpenGL (3.3, ES3, or WebGL 2)
  • OpenVR (1.0.9, for lovr.headset)
  • Oculus SDK (optional, 1.26+)
  • PhysicsFS (3+)
  • OpenAL (1.17+ recommended for HRTF support)
  • msdfgen
  • ODE (for lovr.physics)
  • Emscripten (optional, for compiling for web)

Windows

From the lovr folder, run these commands to create a build folder and compile the project using CMake:

$ mkdir build
$ cd build
$ cmake ..
$ cmake --build .

The executable will then exist at /path/to/lovr/build/Debug/lovr.exe. A LÖVR project (a folder containing a main.lua script) can then be dropped onto lovr.exe to run it, or it can be run via the command line as lovr.exe path/to/project.

macOS

Install the dependencies using your package manager of choice:

$ brew install glfw3 luajit physfs openal-soft ode libccd

Next, build using CMake, as above:

$ mkdir build
$ cd build
$ cmake ..
$ cmake --build .

The lovr executable should exist in lovr/build now. It's recommended to set up an alias or symlink so that this executable can be found in your PATH environment variable. Once that's done, you can run a project like this:

$ lovr /path/to/myGame

You may need to set the PKG_CONFIG_PATH environment variable for OpenAL to be located properly. If you run into this, see Troubleshooting below for more info.

Linux

First, install the dependencies using your package manager of choice.

Arch Linux

$ pacman -S glfw-x11 luajit physfs openal ode

Debian/Ubuntu

$ sudo apt install build-essential cmake xorg-dev libglfw3-dev libluajit-5.1-dev libphysfs-dev libopenal-dev libode-dev libccd-dev libenet-dev

Then, build with CMake:

$ mkdir build
$ cd build
$ cmake ..
$ cmake --build .

On Linux, LÖVR needs to run within the Steam Runtime. To do this, first install Steam. Next, install the Steam udev rules. Then, run LÖVR within the Steam runtime:

$ ~/.steam/steam/ubuntu12_32/steam-runtime/run.sh lovr

If you receive errors related to libstdc++, set the LD_PRELOAD environment variable when running the command:

$ LD_PRELOAD='/usr/$LIB/libstdc++.so.6 /usr/$LIB/libgcc_s.so.1' ~/.steam/steam/ubuntu12_32/steam-runtime/run.sh lovr

WebVR

First, install the Emscripten SDK.

Unix:

$ mkdir build
$ cd build
$ emcmake cmake ..
$ emmake make -j2

Windows (from a Visual Studio Command Prompt, make sure the Emscripten SDK is on PATH):

$ mkdir build
$ cd build
$ emcmake cmake -G "NMake Makefiles" ..
$ emmake nmake

The above commands will output lovr.js, lovr.wasm, and lovr.html. The easiest way to run LÖVR from here is to use emrun:

$ emrun --browser firefox lovr.html

To package a game, run:

$ python "$EMSCRIPTEN/tools/file_packager.py" game.data --no-heap-copy --preload /path/to/game@/ --js-output=game.js

Which will output game.js and game.data. You can then include the game.js script on the HTML page (before the lovr.js script tag) to run the project.

For an improved WebVR workflow with live-reloading, check out lovr-webvr-server.

Android

See lovr-oculus-mobile for instructions on building LÖVR on Android.

Troubleshooting

  • If you get "CMake no CMAKE_CXX_COMPILER found" on Windows, then install Visual Studio and create a blank C++ project, which will prompt you to install the compilers and tools necessary to compile LÖVR.
  • On macOS, if you run into an error message about not being able to find OpenAL, make sure you've added the proper OpenAL directory (usually something like /usr/local/opt/openal-soft/lib/pkgconfig) to your PKG_CONFIG_PATH environment variable. Installing openal-soft with brew will print out a message telling you how to do this.