SDK for building Mergin Maps mobile app for mobile devices based on VCPKG ecosystem
Mergin Maps makes surveying of geospatial data easy and it is powered by QGIS.
If you are up to building Mergin Maps mobile app, just download, extract and use prebuild SDKs for various arch/platforms from Github Releases/Artefacts. The steps below are for development, debugging of the SDK itself or when you need to compile architecture not supported by current CI setup.
The release is automatically created for each commit on master for each triplet separately.
- look at
.github/workflows/<platform>.yml
to see how it is done in CI - how to do diff
diff -rupN file.orig file
- how to do diff from GIT
git diff master
- find SHA512 hash for vcpkg:
shasum -a 512 myfile.tar.gz
- list QT install options:
aqt list $QT_VERSION windows desktop
- remove vcpkg and download from scratch
- clean/remove binary archive
$HOME/.cache/vcpkg/archives
- find a git commit hash you want to use on https://github.com/microsoft/vcpkg
- edit VCPKG_BASELINE file with the hash
- run
scripts/update_qt_version.bash
- Install bison, flex, cmake and add to PATH
- Install compiler setup for your platform (VS on win, gcc on lnx, XCode on macos)
- Install Qt (version from
.github/workflows/ios.yml
). For iOS and Android you need BOTH host (e.g. macos) and target (e.g. ios) installation! - Download and prepare mobile-sdk
mkdir -p build
cd build
git clone [email protected]:MerginMaps/mobile-sdk.git
- Install vcpkg and checkout specific commit from VCPKG_BASELINE file
mkdir -p build
cd build
git clone https://github.com/microsoft/vcpkg.git
cd vcpkg
VCPKG_TAG=`cat ../../mobile-sdk/VCPKG_BASELINE`
git checkout ${VCPKG_TAG}
./bootstrap-vcpkg.sh
cd ..
- continue with platform/target specific steps
- Install SDK and NDK, Build Tools (version from
.github/workflows/android.yml
) - To build on Linux/Windows, adjust setup of deps from Linux build.
- Configure mobile-sdk test app (this runs VCPKG install - can take few hours)
mkdir -p build/arm64-android
cd build/arm64-android
brew install cmake automake bison flex gnu-sed autoconf-archive libtool
export PATH=$(brew --prefix flex):$(brew --prefix bison)/bin:$(brew --prefix gettext)/bin:$PATH;\
export PATH=`pwd`/../vcpkg:$PATH;\
export Qt6_DIR=/opt/Qt/6.6.3/android_arm64_v8a;export QT_HOST_PATH=/opt/Qt/6.6.3/macos;\
export ANDROIDAPI=24;\
export ANDROID_NDK_HOME='/opt/Android/android-sdk/ndk/25.1.8937393';\
export ANDROID_NDK_ROOT='/opt/Android/android-sdk/ndk/25.1.8937393';\
export ANDROID_HOME='/opt/Android/android-sdk/';\
export ANDROID_ABI='arm64-v8a'
cmake -B . -S ../../mobile-sdk/ \
-DCMAKE_TOOLCHAIN_FILE=../vcpkg/scripts/buildsystems/vcpkg.cmake \
-DVCPKG_CHAINLOAD_TOOLCHAIN_FILE=${Qt6_DIR}/lib/cmake/Qt6/qt.toolchain.cmake \
-G Ninja \
-DVCPKG_TARGET_TRIPLET=arm64-android \
-DVCPKG_OVERLAY_TRIPLETS=../../mobile-sdk/vcpkg-overlay/triplets \
-DVCPKG_OVERLAY_PORTS=../../mobile-sdk/vcpkg-overlay/ports \
-DCMAKE_BUILD_TYPE=Release \
-D ANDROID_SDK_ROOT=${ANDROID_HOME} \
-DCMAKE_MAKE_PROGRAM=ninja \
-DANDROID_ARM_NEON=ON \
-DANDROID_ABI=${ANDROID_ABI} \
-DQT_ANDROID_ABIS=$ANDROID_ABI \
-DANDROIDAPI=${ANDROIDAPI} \
-DANDROID_PLATFORM=android-${ANDROIDAPI} \
-DANDROID_NDK_PLATFORM=android-${ANDROIDAPI} \
-DANDROID_STL="c++_shared"
- Build to verify your build
cmake --build . --config Release
Note that this sdk application is dummy on this target and cannot be executed on any device.
- Configure mobile-sdk test app (this runs VCPKG install - can take few hours)
mkdir -p build/arm-android
cd build/arm-android
brew install cmake automake bison flex gnu-sed autoconf-archive libtool
export PATH=$(brew --prefix flex):$(brew --prefix bison)/bin:$(brew --prefix gettext)/bin:$PATH;\
export PATH=`pwd`/../vcpkg:$PATH;\
export Qt6_DIR=/opt/Qt/6.6.3/android_armv7;\
export QT_HOST_PATH=/opt/Qt/6.6.3/macos;\
export ANDROIDAPI=24;\
export ANDROID_NDK_HOME='/opt/Android/android-sdk/ndk/25.1.8937393';\
export ANDROID_NDK_ROOT='/opt/Android/android-sdk/ndk/25.1.8937393';\
export ANDROID_HOME='/opt/Android/android-sdk/';\
export ANDROID_ABI=armeabi-v7a
cmake -B . -S ../../mobile-sdk/ \
-DCMAKE_TOOLCHAIN_FILE=../vcpkg/scripts/buildsystems/vcpkg.cmake \
-DVCPKG_CHAINLOAD_TOOLCHAIN_FILE=${Qt6_DIR}/lib/cmake/Qt6/qt.toolchain.cmake \
-G Ninja \
-DVCPKG_TARGET_TRIPLET=arm-android \
-DVCPKG_OVERLAY_TRIPLETS=../../mobile-sdk/vcpkg-overlay/triplets \
-DVCPKG_OVERLAY_PORTS=../../mobile-sdk/vcpkg-overlay/ports \
-DCMAKE_BUILD_TYPE=Release \
-D ANDROID_SDK_ROOT=${ANDROID_HOME} \
-D CMAKE_MAKE_PROGRAM=ninja \
-DANDROID_ARM_NEON=ON \
-DANDROID_ABI=${ANDROID_ABI} \
-DQT_ANDROID_ABIS=${ANDROID_ABI} \
-DANDROIDAPI=${ANDROIDAPI} \
-DANDROID_PLATFORM=android-${ANDROIDAPI} \
-DANDROID_NDK_PLATFORM=android-${ANDROIDAPI} \
-DANDROID_STL="c++_shared"
- Build to verify your build
cmake --build . --config Release --verbose
Note that this sdk application is dummy on this target and cannot be executed on any device.
- Configure mobile-sdk test app (this runs VCPKG install - can take few hours)
mkdir -p build/arm64-ios
cd build/arm64-ios
brew install cmake automake bison flex gnu-sed autoconf-archive libtool
export PATH=$(brew --prefix flex)/bin:$(brew --prefix bison)/bin:$(brew --prefix gettext)/bin:$PATH;\
export PATH=${PWD}/../vcpkg:$PATH;\
export Qt6_DIR=/opt/Qt/6.6.3/ios;\
export QT_HOST_PATH=/opt/Qt/6.6.3/macos;\
export DEPLOYMENT_TARGET=14.0;
cmake -B . -S ../../mobile-sdk/ \
-DCMAKE_TOOLCHAIN_FILE=../vcpkg/scripts/buildsystems/vcpkg.cmake \
-G "Xcode" \
-DVCPKG_OVERLAY_TRIPLETS=../../mobile-sdk/vcpkg-overlay/triplets \
-DVCPKG_OVERLAY_PORTS=../../mobile-sdk/vcpkg-overlay/ports \
-DVCPKG_TARGET_TRIPLET=arm64-ios \
-DCMAKE_BUILD_TYPE=Release \
-D ENABLE_BITCODE=OFF \
-D ENABLE_ARC=OFF \
-D CMAKE_SYSTEM_NAME=iOS \
-D CMAKE_SYSTEM_PROCESSOR=aarch64 \
-D CMAKE_CXX_VISIBILITY_PRESET=hidden \
-DCMAKE_OSX_DEPLOYMENT_TARGET=${DEPLOYMENT_TARGET}
- Build to verify your build
cmake --build . --config Release
Note that this sdk application is dummy on this target and cannot be executed on any device.
- install cmake, vcpkg, Visual Studio and Qt and add to PATH
set ROOT_DIR=C:\Users\Peter\repo
set BUILD_DIR=%ROOT_DIR%\build-sdk\win64
set SOURCE_DIR=%ROOT_DIR%\mobile-sdk
set VCPKG_ROOT=%ROOT_DIR%\vcpkg
set Qt6_DIR=C:\Qt\6.6.3\msvc2019_64
set PATH=%VCPKG_ROOT%;%QT_ROOT%\bin;C:\Program Files\CMake\bin\;%PATH%
"C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\Common7\Tools\VsDevCmd.bat" -arch=x64
- run CMake to build deps (this runs VCPKG install - can take few hours)
cmake -B %BUILD_DIR% -S %SOURCE_DIR%\vcpkg-test `
"-DCMAKE_MODULE_PATH:PATH=%SOURCE_DIR%\vcpkg-test\cmake" `
"-DCMAKE_TOOLCHAIN_FILE=%VCPKG_ROOT%\scripts\buildsystems\vcpkg.cmake" `
-G "Visual Studio 16 2019" -A x64 -DVCPKG_TARGET_TRIPLET=x64-windows `
-DVCPKG_OVERLAY_TRIPLETS=%SOURCE_DIR%\vcpkg-overlay\triplets `
-DVCPKG_OVERLAY_PORTS=%SOURCE_DIR%\vcpkg-overlay\ports
- build executable and run tests
cmake --build %BUILD_DIR% --config Release --verbose
%BUILD_DIR%\Release\merginmapsmobilesdk.exe
- the resulting build tree is then located at
%BUILD_DIR%\vcpkg_installed
- Configure mobile-sdk test app (this runs VCPKG install - can take few hours) (for arm64 arch builds use
arm64-osx
TRIPLET)
mkdir -p build/x64-osx
cd build/x64-osx
export PATH=$(brew --prefix flex)/bin:$(brew --prefix bison)/bin:$(brew --prefix gettext)/bin:$PATH;\
export PATH=${PWD}/../vcpkg:$PATH;\
export Qt6_DIR=/opt/Qt/6.6.3/macos;\
export DEPLOYMENT_TARGET=10.15.0
cmake -B . -S ../../mobile-sdk/ \
-DCMAKE_TOOLCHAIN_FILE=../vcpkg/scripts/buildsystems/vcpkg.cmake \
-G Ninja \
-DVCPKG_TARGET_TRIPLET=x64-osx \
-DVCPKG_OVERLAY_TRIPLETS=../../mobile-sdk/vcpkg-overlay/triplets \
-DVCPKG_OVERLAY_PORTS=../../mobile-sdk/vcpkg-overlay/ports \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_MAKE_PROGRAM=ninja \
-DCMAKE_OSX_DEPLOYMENT_TARGET=${DEPLOYMENT_TARGET}
- Build and run test app to verify your build
cmake --build . --config Release
./merginmapsmobilesdk
- Configure mobile-sdk test app (this runs VCPKG install - can take few hours)
mkdir -p build/x64-linux
cd build/x64-linux
export PATH=${PWD}/../vcpkg:$PATH
export Qt6_DIR=~/Qt/6.6.3/gcc_64
cmake -B . -S ../../mobile-sdk/ \
-DCMAKE_TOOLCHAIN_FILE=../vcpkg/scripts/buildsystems/vcpkg.cmake \
-G Ninja \
-DVCPKG_TARGET_TRIPLET=x64-linux \
-DVCPKG_OVERLAY_TRIPLETS=../../mobile-sdk/vcpkg-overlay/triplets \
-DVCPKG_OVERLAY_PORTS=../../mobile-sdk/vcpkg-overlay/ports \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_MAKE_PROGRAM=ninja
- Build and run test app to verify your build
cmake --build . --config Release
./merginmapsmobilesdk