mirror of
https://github.com/subsurface/subsurface.git
synced 2024-11-28 05:00:20 +00:00
a29f7b7b32
Update CMakeLists.txt to test if the CMAKE_SYSTEM_PROCESSOR variable is either armv6l or armv7l. If so, add libGLESv2 to the list of libraries to be linked to support openGL on embedded systems. Update INSTALL file to list the packages needed to be installed on Raspian Stretch or Ubuntu Mate to successfully compile subsurface from source. Signed-off-by: Doug Junkins <junkins@foghead.com>
349 lines
12 KiB
Text
349 lines
12 KiB
Text
Building Subsurface from Source
|
|
===============================
|
|
|
|
Subsurface uses quite a few open source libraries and frameworks to do its
|
|
job. The most important ones include libdivecomputer, Qt, libxml2, libxslt,
|
|
libsqlite3, libzip, libgrantlee5 and libgit2.
|
|
|
|
Below are instructions for building Subsurface
|
|
- on some popular Linux distributions,
|
|
- MacOSX,
|
|
- Windows (cross-building)
|
|
- Android (cross-building)
|
|
- iOS (cross-building)
|
|
|
|
|
|
Getting Subsurface source
|
|
-------------------------
|
|
|
|
You can get the sources to the latest development version from our git
|
|
repository:
|
|
git clone http://github.com/Subsurface-divelog/subsurface.git
|
|
|
|
You keep it updated by doing:
|
|
git checkout master
|
|
git pull -r
|
|
|
|
|
|
|
|
Getting our flavor of libdivecomputer
|
|
-------------------------------------
|
|
|
|
All our prebuilt binaries (see https://subsurface-divelog.org/download)
|
|
are built using our own custom "flavor" of libdivecomputer
|
|
see https://github.com/Subsurface-divelog/libdc.git
|
|
|
|
In order to get the modified sources, do
|
|
- locate yourself in the subsurface repo on your local computer
|
|
- run "git submodule init"
|
|
- run "git submodule update"
|
|
|
|
The branches won't have a pretty history and will include ugly merges,
|
|
but they should always allow a fast forward pull that tracks what we
|
|
believe developers should build against. All our patches are contained
|
|
in the "Subsurface-NG".
|
|
|
|
This should allow distros to see which patches we have applied on top of
|
|
upstream. They will receive force pushes as we rebase to newer versions of
|
|
upstream so they are not ideal for ongoing development (but they are of
|
|
course easy to use for distributions as they always build "from scratch",
|
|
anyway).
|
|
|
|
The rationale for this is that we have no intention of forking the
|
|
project. We simply are adding a few patches on top of their latest
|
|
version and want to do so in a manner that is both easy for our
|
|
developers who try to keep them updated frequently, and anyone packaging
|
|
Subsurface or trying to understand what we have done relative to their
|
|
respective upstreams.
|
|
|
|
|
|
Getting Qt5
|
|
-----------
|
|
|
|
We use Qt5 in order to only maintain one UI across platforms. Qt5.8 is the
|
|
oldest version supported.
|
|
|
|
Download the Open Source version from https://www.qt.io/download and
|
|
follow the Qt instructions to install it or alternatively follow the
|
|
instruction specific to a distribution (see build instructions).
|
|
|
|
To save time and disk space you can unselect Android and IOS packages
|
|
(Of course unless you want to build Android/iOS versions) as well as
|
|
- Qt Data Visualisation
|
|
- Qt Purchasing
|
|
- Qt Virtual Keyboard",
|
|
- Qt WebEngine
|
|
- Qt Network Authorization
|
|
- Qt Remote Objects
|
|
- Qt WebGL Streaming
|
|
- Qt 3D2
|
|
- Qt Canvas 3D
|
|
- Qt Extras
|
|
This can be done later by use of MaintenanceTool.app in your Qt folder.
|
|
|
|
Remark: most Qt installations do not make Qt available on the command
|
|
line, which is needed. In order to make Qt available you need to
|
|
add qmake to the path, do something like
|
|
PATH=$PATH:<Qt location>/<version>/<type>/bin
|
|
|
|
QtWebKit is needed, if you want to print, but no longer part of Qt5,
|
|
so you need to download it and compile. In case you just want to test
|
|
without print possibility omit this step.
|
|
|
|
|
|
Other third party library dependencies
|
|
--------------------------------------
|
|
|
|
In order for our cloud storage to be fully functional you need
|
|
libgit2 0.23 or newer.
|
|
|
|
|
|
cmake build system
|
|
------------------
|
|
|
|
Our main build system is based on cmake. But qmake is needed
|
|
for the googlemaps plugin and the iOS build.
|
|
|
|
Download from https://cmake.org/download and follow the instructions
|
|
to install it or alternatively follow the instruction specific to a
|
|
distribution (see build instructions).
|
|
|
|
|
|
|
|
Build options for Subsurface
|
|
----------------------------
|
|
|
|
The following options are recognised when passed to cmake:
|
|
|
|
-DCMAKE_BUILD_TYPE=Release create a release build
|
|
-DCMAKE_BUILD_TYPE=Debug create a debug build
|
|
|
|
The Makefile that was created using cmake can be forced into a much more
|
|
verbose mode by calling
|
|
|
|
make VERBOSE=1
|
|
|
|
Many more variables are supported, the easiest way to interact with them is
|
|
to call
|
|
|
|
ccmake .
|
|
|
|
in your build directory.
|
|
|
|
|
|
Building the development version of Subsurface under Linux
|
|
----------------------------------------------------------
|
|
|
|
On Fedora you need
|
|
|
|
sudo yum install git gcc-c++ make autoconf automake libtool cmake \
|
|
libzip-devel libxml2-devel libxslt-devel libsqlite3x-devel \
|
|
libudev-devel libusbx-devel libcurl-devel libssh2-devel\
|
|
qt5-qtbase-devel qt5-qtdeclarative-devel qt5-qtscript-devel \
|
|
qt5-qtwebkit-devel qt5-qtsvg-devel qt5-qttools-devel \
|
|
qt5-qtconnectivity-devel qt5-qtlocation-devel
|
|
|
|
Note that beginning with Fedora 22, you should be using the dnf command instead
|
|
as yum is being deprecated.
|
|
|
|
Package names are sadly different on OpenSUSE
|
|
|
|
sudo zypper install git gcc-c++ make autoconf automake libtool cmake libzip-devel \
|
|
libxml2-devel libxslt-devel sqlite3-devel libusb-1_0-devel \
|
|
libqt5-linguist-devel libqt5-qttools-devel libQt5WebKitWidgets-devel \
|
|
libqt5-qtbase-devel libQt5WebKit5-devel libqt5-qtsvg-devel \
|
|
libqt5-qtscript-devel libqt5-qtdeclarative-devel \
|
|
libqt5-qtconnectivity-devel libqt5-qtlocation-devel libcurl-devel
|
|
|
|
On Debian Stretch this seems to work
|
|
|
|
sudo apt install \
|
|
autoconf automake cmake g++ git libcrypto++-dev libcurl4-openssl-dev \
|
|
libgit2-dev libqt5declarative5 libqt5qml5 libqt5quick5 libqt5svg5-dev \
|
|
libqt5webkit5-dev libsqlite3-dev libssh2-1-dev libssl-dev libssl-dev \
|
|
libtool libusb-1.0-0-dev libxml2-dev libxslt1-dev libzip-dev make \
|
|
pkg-config qml-module-qtlocation qml-module-qtpositioning \
|
|
qml-module-qtquick2 qt5-default qt5-qmake qtchooser qtconnectivity5-dev \
|
|
qtlocation5-dev qtpositioning5-dev qtscript5-dev qttools5-dev \
|
|
qttools5-dev-tools
|
|
|
|
Package names for Ubuntu 18.04
|
|
|
|
sudo apt install \
|
|
autoconf automake cmake g++ git libcrypto++-dev libcurl4-gnutls-dev \
|
|
libgit2-dev libqt5qml5 libqt5quick5 libqt5svg5-dev \
|
|
libqt5webkit5-dev libsqlite3-dev libssh2-1-dev libssl-dev libssl-dev \
|
|
libtool libusb-1.0-0-dev libxml2-dev libxslt1-dev libzip-dev make \
|
|
pkg-config qml-module-qtlocation qml-module-qtpositioning \
|
|
qml-module-qtquick2 qt5-default qt5-qmake qtchooser qtconnectivity5-dev \
|
|
qtdeclarative5-dev qtdeclarative5-private-dev qtlocation5-dev \
|
|
qtpositioning5-dev qtscript5-dev qttools5-dev qttools5-dev-tools \
|
|
qtquickcontrols2-5-dev
|
|
|
|
On Raspberry Pi (Raspian Stretch and Ubuntu Mate 16.04.2) this seems to work
|
|
|
|
sudo apt install \
|
|
autoconf automake cmake g++ git libcrypto++-dev libcurl4-gnutls-dev \
|
|
libgit2-dev libqt5qml5 libqt5quick5 libqt5svg5-dev libqt5webkit5-dev \
|
|
libsqlite3-dev libssh2-1-dev libssl-dev libssl-dev \
|
|
libtool libusb-1.0-0-dev libxml2-dev libxslt1-dev libzip-dev make \
|
|
pkg-config qml-module-qtlocation qml-module-qtpositioning \
|
|
qml-module-qtquick2 qt5-default qt5-qmake qtchooser \
|
|
qtconnectivity5-dev qtlocation5-dev qtpositioning5-dev qtscript5-dev \
|
|
qttools5-dev qttools5-dev-tools
|
|
|
|
Note that on Ubuntu Mate 16.04.2 on the Raspberry Pi, you may need to configure
|
|
some swap space in order for the build to complete successfully. There is no
|
|
swap space configured by default. See the dphys-swapfile package.
|
|
|
|
On PCLinuxOS you appear to need the following packages
|
|
|
|
su -c "apt-get install -y autoconf automake cmake libtool gcc-c++ git \
|
|
lib64usb1.0-devel lib64zip-devel lib64qt5webkitwidgets-devel qttools5 \
|
|
qttranslations5 lib64qt5xml-devel lib64qt5test-devel lib64qtscript-devel \
|
|
lib64qt5svg-devel lib64qt5concurrent-devel lib64qt5bluetooth-devel"
|
|
|
|
In order to build Subsurface, use the supplied build script. This should
|
|
work on most systems that have all the prerequisite packages installed.
|
|
|
|
You should have Subsurface sources checked out in a sane place, something
|
|
like this:
|
|
|
|
mkdir -p ~/src
|
|
cd ~/src
|
|
git clone https://github.com/Subsurface-divelog/subsurface.git
|
|
./subsurface/scripts/build.sh # <- this step will take quite a while as it
|
|
# compiles a handful of libraries before
|
|
# building Subsurface
|
|
|
|
Now you can run Subsurface like this:
|
|
|
|
cd ~/src/subsurface/build
|
|
./subsurface
|
|
|
|
|
|
Note: on many Linux versions (for example on Kubuntu 15.04) the user must
|
|
belong to the dialout group.
|
|
|
|
You may need to run something like
|
|
|
|
sudo usermod -a -G dialout username
|
|
|
|
with your correct username and log out and log in again for that to take
|
|
effect.
|
|
|
|
If you get errors like:
|
|
|
|
./subsurface: error while loading shared libraries: libGrantlee_Templates.so.5: cannot open shared object file: No such file or directory
|
|
|
|
You can run the following command:
|
|
|
|
sudo ldconfig ~/src/install-root/lib
|
|
|
|
|
|
Building Subsurface under MacOSX
|
|
--------------------------------
|
|
|
|
You have 2 options for the first time install, either using homebrew
|
|
or by manually building the dependencies from source, depending on
|
|
what else you have installed on your mac.
|
|
|
|
0) You need to have XCode installed. The first time (and possibly after updating OSX)
|
|
|
|
0.1) run "xcode-select --install"
|
|
|
|
homebrew option:
|
|
|
|
1) brew install libzip cmake libusb pkg-config automake libtool hidapi curl libssh2
|
|
|
|
2) cd <repo>/..; bash <repo>/scripts/build.sh
|
|
|
|
|
|
Manual option:
|
|
1) install pkg-config
|
|
|
|
1.1) download http://sourceforge.net/projects/macpkg/files/PkgConfig/0.26/PkgConfig.pkg/download
|
|
|
|
1.2) run "PkgConfig.pkg"
|
|
|
|
1.3) run "sudo ln -s /opt/pkgconfig/bin/pkg-config /usr/local/bin/pkg-config"
|
|
|
|
2) install autoconf tools
|
|
|
|
2.1) curl -OL http://ftpmirror.gnu.org/autoconf/autoconf-latest.tar.gz
|
|
|
|
2.2) tar -xzf autoconf-latest.tar.gz
|
|
|
|
2.3) cd autoconf-*; ./configure && make && sudo make install; cd ..
|
|
|
|
3) cd <repo>/..; bash <repo>/scripts/build.sh -build-deps -desktop
|
|
|
|
|
|
After the above is done, Subsurface.app will be available in the
|
|
subsurface/build directory. You can run Subsurface with the command
|
|
|
|
A) open subsurface/build/Subsurface.app
|
|
this will however not show diagnostic output
|
|
|
|
B) subsurface/build/Subsurface.app/Contents/MacOS/Subsurface
|
|
the TAB key is your friend :-)
|
|
|
|
Debugging can be done with either Xcode or QtCreator.
|
|
|
|
To install the app for all users, move subsurface/build/Subsurface.app to /Applications.
|
|
|
|
|
|
Cross-building Subsurface on MacOSX for iOS
|
|
-------------------------------------------
|
|
|
|
1) build SubSurface under MacOSX and iOS
|
|
|
|
1.1) cd <repo>/..; bash <repo>/scripts/build.sh -build-deps -both
|
|
note: this is mainly done to ensure all external dependencies are downloaded and set
|
|
to the correct versions
|
|
|
|
2) continue as described in subsurface/packaging/ios
|
|
|
|
|
|
|
|
Cross-building Subsurface on Linux for Windows
|
|
----------------------------------------------
|
|
|
|
Subsurface builds nicely with MinGW - the official builds are done as
|
|
cross builds under Linux (currently on Ubuntu 14.04). A shell script to do
|
|
that (plus the .nsi file to create the installer with makensis) are
|
|
included in the packaging/windows directory.
|
|
|
|
Please read through the explanations and instructions in
|
|
packaging/windows/mxe-based-build.sh if you want to build the Windows
|
|
version on your Linux system.
|
|
|
|
|
|
Building Subsurface on Windows
|
|
------------------------------
|
|
|
|
This is NOT RECOMMENDED. To the best of our knowledge there is one single
|
|
person who regularly does this. The Subsurface team does not provide support
|
|
for Windows binary build from sources natively under Windows...
|
|
|
|
The lack of a working package management system for Windows makes it
|
|
really painful to build Subsurface natively under Windows,
|
|
so we don't support that at all.
|
|
|
|
|
|
|
|
Cross-building Subsurface on Linux for Android
|
|
----------------------------------------------
|
|
|
|
To compile the mobile version you will need:
|
|
|
|
-Qt for Android (this can be downloaded from: http://www.qt.io/download-open-source/)
|
|
-Android SDK
|
|
-Android NDK
|
|
|
|
In the folder containing the subsurface source dir run: bash subsurface/packaging/android/android-build-wrapper.sh
|
|
This will download and install the required NDK, SDK and Qt required to build the app.
|
|
|
|
After that, you can run: ./subsurface/packaging/android/build.sh everytime you want to build a new version.
|
|
|
|
This will generate an apk file in ./subsurface-mobile-build-arm/build/outputs/apk/
|